From f7f756d7f7c0658aac0d24a0012b3587259e8852 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Mon, 7 Apr 2025 16:25:29 -0300 Subject: [PATCH 01/47] first ugly implementation of cache rollback --- .../vm/levm/bench/revm_comparison/src/lib.rs | 2 + crates/vm/levm/src/call_frame.rs | 4 + crates/vm/levm/src/db/cache.rs | 64 ++++++++++++- crates/vm/levm/src/execution_handlers.rs | 13 ++- crates/vm/levm/src/hooks/default_hook.rs | 39 +++++--- crates/vm/levm/src/hooks/hook.rs | 2 +- crates/vm/levm/src/opcode_handlers/block.rs | 8 +- .../stack_memory_storage_flow.rs | 11 ++- crates/vm/levm/src/opcode_handlers/system.rs | 95 +++++++++++++++---- crates/vm/levm/src/utils.rs | 50 ++++++---- crates/vm/levm/src/vm.rs | 41 +++++--- 11 files changed, 247 insertions(+), 82 deletions(-) diff --git a/crates/vm/levm/bench/revm_comparison/src/lib.rs b/crates/vm/levm/bench/revm_comparison/src/lib.rs index 061fc448f7..38aa6b372f 100644 --- a/crates/vm/levm/bench/revm_comparison/src/lib.rs +++ b/crates/vm/levm/bench/revm_comparison/src/lib.rs @@ -72,6 +72,7 @@ pub fn run_with_levm(program: &str, runs: u64, calldata: &str) { accounts[0].1.info.nonce, HashMap::new(), ), + &mut None, ); cache::insert_account( &mut db.cache, @@ -82,6 +83,7 @@ pub fn run_with_levm(program: &str, runs: u64, calldata: &str) { accounts[1].1.info.nonce, HashMap::new(), ), + &mut None, ); for _ in 0..runs - 1 { diff --git a/crates/vm/levm/src/call_frame.rs b/crates/vm/levm/src/call_frame.rs index a943a9f0a0..b271b9373a 100644 --- a/crates/vm/levm/src/call_frame.rs +++ b/crates/vm/levm/src/call_frame.rs @@ -4,9 +4,11 @@ use crate::{ memory::Memory, opcodes::Opcode, utils::get_valid_jump_destinations, + Account, }; use bytes::Bytes; use ethrex_common::{types::Log, Address, U256}; +use revm_primitives::HashMap; use std::collections::HashSet; #[derive(Debug, Clone, Default, PartialEq, Eq)] @@ -85,6 +87,8 @@ pub struct CallFrame { pub valid_jump_destinations: HashSet, /// This is set to true if the function that created this callframe is CREATE or CREATE2 pub create_op_called: bool, + /// backup cache + pub backup: HashMap>, } impl CallFrame { diff --git a/crates/vm/levm/src/db/cache.rs b/crates/vm/levm/src/db/cache.rs index 44b3c3a9d5..cea3e4baee 100644 --- a/crates/vm/levm/src/db/cache.rs +++ b/crates/vm/levm/src/db/cache.rs @@ -1,4 +1,4 @@ -use crate::Account; +use crate::{call_frame::CallFrame, Account}; use ethrex_common::Address; use std::collections::HashMap; @@ -14,20 +14,74 @@ pub fn get_account<'cache>( pub fn get_account_mut<'cache>( cached_accounts: &'cache mut CacheDB, address: &Address, + call_frame: &mut Option<&mut CallFrame>, ) -> Option<&'cache mut Account> { - cached_accounts.get_mut(address) + let account_option = cached_accounts.get_mut(address); + + // insert account_option cloned into call_frame backup if not already there + if let Some(call_frame) = call_frame { + if !call_frame.backup.contains_key(address) { + if let Some(account) = account_option.as_ref() { + call_frame + .backup + .insert(address.clone(), Some((*account).clone())); + } else { + call_frame.backup.insert(address.clone(), None); + } + } + } + + account_option } pub fn insert_account( cached_accounts: &mut CacheDB, address: Address, account: Account, + call_frame: &mut Option<&mut CallFrame>, ) -> Option { - cached_accounts.insert(address, account) + let account_option = cached_accounts.insert(address, account); + + // None -> Key didn't exist in cache + // Some -> Key existed in cache and we replaced it + + // insert account_option cloned into call_frame backup if not already there + if let Some(call_frame) = call_frame { + if !call_frame.backup.contains_key(&address) { + if let Some(account) = account_option.as_ref() { + call_frame + .backup + .insert(address.clone(), Some((*account).clone())); + } else { + call_frame.backup.insert(address.clone(), None); + } + } + } + + account_option } -pub fn remove_account(cached_accounts: &mut CacheDB, address: &Address) -> Option { - cached_accounts.remove(address) +pub fn remove_account( + cached_accounts: &mut CacheDB, + address: &Address, + call_frame: Option<&mut CallFrame>, +) -> Option { + let account_option = cached_accounts.remove(address); + + // insert account_option cloned into call_frame backup if not already there + if let Some(call_frame) = call_frame { + if !call_frame.backup.contains_key(&address) { + if let Some(account) = account_option.as_ref() { + call_frame + .backup + .insert(address.clone(), Some((*account).clone())); + } else { + call_frame.backup.insert(address.clone(), None); + } + } + } + + account_option } pub fn is_account_cached(cached_accounts: &CacheDB, address: &Address) -> bool { diff --git a/crates/vm/levm/src/execution_handlers.rs b/crates/vm/levm/src/execution_handlers.rs index 12d3989034..0ec42f484b 100644 --- a/crates/vm/levm/src/execution_handlers.rs +++ b/crates/vm/levm/src/execution_handlers.rs @@ -38,7 +38,7 @@ impl<'a> VM<'a> { self.call_frames.push(current_call_frame.clone()); - self.restore_state(backup); + self.restore_state(backup, current_call_frame); Ok(ExecutionReport { result: TxResult::Revert(error), @@ -205,12 +205,17 @@ impl<'a> VM<'a> { match validate_create { Ok(new_address) => { // Set bytecode to new account if success - update_account_bytecode(self.db, new_address, contract_code)?; + update_account_bytecode( + self.db, + new_address, + contract_code, + &mut Some(current_call_frame), + )?; } Err(error) => { // Revert if error current_call_frame.gas_used = current_call_frame.gas_limit; - self.restore_state(backup); + self.restore_state(backup, current_call_frame); return Ok(ExecutionReport { result: TxResult::Revert(error), @@ -252,7 +257,7 @@ impl<'a> VM<'a> { current_call_frame.gas_used = current_call_frame.gas_used.saturating_add(left_gas); } - self.restore_state(backup); + self.restore_state(backup, current_call_frame); Ok(ExecutionReport { result: TxResult::Revert(error), diff --git a/crates/vm/levm/src/hooks/default_hook.rs b/crates/vm/levm/src/hooks/default_hook.rs index 28144a9b07..7bbe17b885 100644 --- a/crates/vm/levm/src/hooks/default_hook.rs +++ b/crates/vm/levm/src/hooks/default_hook.rs @@ -34,7 +34,7 @@ impl Hook for DefaultHook { initial_call_frame: &mut CallFrame, ) -> Result<(), VMError> { let sender_address = vm.env.origin; - let sender_account = get_account(vm.db, sender_address)?; + let sender_account = get_account(vm.db, sender_address, &mut None)?; if vm.env.config.fork >= Fork::Prague { // check for gas limit is grater or equal than the minimum required @@ -148,7 +148,7 @@ impl Hook for DefaultHook { // technically, the sender will not be able to pay it. // (3) INSUFFICIENT_ACCOUNT_FUNDS - decrease_account_balance(vm.db, sender_address, up_front_cost) + decrease_account_balance(vm.db, sender_address, up_front_cost, &mut None) .map_err(|_| TxValidationError::InsufficientAccountFunds)?; // (4) INSUFFICIENT_MAX_FEE_PER_GAS @@ -180,7 +180,7 @@ impl Hook for DefaultHook { )?; // (7) NONCE_IS_MAX - increment_account_nonce(vm.db, sender_address) + increment_account_nonce(vm.db, sender_address, &mut None) .map_err(|_| VMError::TxValidation(TxValidationError::NonceIsMax))?; // check for nonce mismatch @@ -302,7 +302,12 @@ impl Hook for DefaultHook { } else { // Transfer value to receiver // It's here to avoid storing the "to" address in the cache before eip7702_set_access_code() step 7). - increase_account_balance(vm.db, initial_call_frame.to, initial_call_frame.msg_value)?; + increase_account_balance( + vm.db, + initial_call_frame.to, + initial_call_frame.msg_value, + &mut None, + )?; } Ok(()) } @@ -315,7 +320,7 @@ impl Hook for DefaultHook { fn finalize_execution( &self, vm: &mut VM<'_>, - initial_call_frame: &CallFrame, + initial_call_frame: &mut CallFrame, report: &mut ExecutionReport, ) -> Result<(), VMError> { // POST-EXECUTION Changes @@ -324,7 +329,7 @@ impl Hook for DefaultHook { // 1. Undo value transfer if the transaction has reverted if let TxResult::Revert(_) = report.result { - let existing_account = get_account(vm.db, receiver_address)?; //TO Account + let existing_account = get_account(vm.db, receiver_address, &mut None)?; //TO Account if has_delegation(&existing_account.info)? { // This is the case where the "to" address and the @@ -336,13 +341,23 @@ impl Hook for DefaultHook { // If transaction execution results in failure (any // exceptional condition or code reverting), setting // delegation designations is not rolled back. - decrease_account_balance(vm.db, receiver_address, initial_call_frame.msg_value)?; + decrease_account_balance( + vm.db, + receiver_address, + initial_call_frame.msg_value, + &mut None, + )?; } else { // We remove the receiver account from the cache, like nothing changed in it's state. - remove_account(&mut vm.db.cache, &receiver_address); + remove_account(&mut vm.db.cache, &receiver_address, None); } - increase_account_balance(vm.db, sender_address, initial_call_frame.msg_value)?; + increase_account_balance( + vm.db, + sender_address, + initial_call_frame.msg_value, + &mut None, + )?; } // 2. Return unused gas + gas refunds to the sender. @@ -382,7 +397,7 @@ impl Hook for DefaultHook { .checked_mul(U256::from(gas_to_return)) .ok_or(VMError::Internal(InternalError::UndefinedState(1)))?; - increase_account_balance(vm.db, sender_address, wei_return_amount)?; + increase_account_balance(vm.db, sender_address, wei_return_amount, &mut None)?; // 3. Pay coinbase fee let coinbase_address = vm.env.coinbase; @@ -401,14 +416,14 @@ impl Hook for DefaultHook { .ok_or(VMError::BalanceOverflow)?; if coinbase_fee != U256::zero() { - increase_account_balance(vm.db, coinbase_address, coinbase_fee)?; + increase_account_balance(vm.db, coinbase_address, coinbase_fee, &mut None)?; }; // 4. Destruct addresses in vm.estruct set. // In Cancun the only addresses destroyed are contracts created in this transaction let selfdestruct_set = vm.accrued_substate.selfdestruct_set.clone(); for address in selfdestruct_set { - let account_to_remove = get_account_mut_vm(vm.db, address)?; + let account_to_remove = get_account_mut_vm(vm.db, address, &mut None)?; *account_to_remove = Account::default(); } diff --git a/crates/vm/levm/src/hooks/hook.rs b/crates/vm/levm/src/hooks/hook.rs index c7e156792b..2d7219bbed 100644 --- a/crates/vm/levm/src/hooks/hook.rs +++ b/crates/vm/levm/src/hooks/hook.rs @@ -14,7 +14,7 @@ pub trait Hook { fn finalize_execution( &self, vm: &mut VM<'_>, - initial_call_frame: &CallFrame, + initial_call_frame: &mut CallFrame, report: &mut ExecutionReport, ) -> Result<(), VMError>; } diff --git a/crates/vm/levm/src/opcode_handlers/block.rs b/crates/vm/levm/src/opcode_handlers/block.rs index d4afaa3ade..23a748d540 100644 --- a/crates/vm/levm/src/opcode_handlers/block.rs +++ b/crates/vm/levm/src/opcode_handlers/block.rs @@ -150,7 +150,13 @@ impl<'a> VM<'a> { } current_call_frame.increase_consumed_gas(gas_cost::SELFBALANCE)?; - let balance = get_account(self.db, current_call_frame.to)?.info.balance; + let balance = get_account( + self.db, + current_call_frame.to, + &mut Some(current_call_frame), + )? + .info + .balance; current_call_frame.stack.push(balance)?; Ok(OpcodeResult::Continue { pc_increment: 1 }) diff --git a/crates/vm/levm/src/opcode_handlers/stack_memory_storage_flow.rs b/crates/vm/levm/src/opcode_handlers/stack_memory_storage_flow.rs index 9cbfd1a159..4378946c8d 100644 --- a/crates/vm/levm/src/opcode_handlers/stack_memory_storage_flow.rs +++ b/crates/vm/levm/src/opcode_handlers/stack_memory_storage_flow.rs @@ -151,7 +151,7 @@ impl<'a> VM<'a> { let storage_slot_key = H256::from(storage_slot_key.to_big_endian()); let (storage_slot, storage_slot_was_cold) = - self.access_storage_slot(address, storage_slot_key)?; + self.access_storage_slot(address, storage_slot_key, current_call_frame)?; current_call_frame.increase_consumed_gas(gas_cost::sload( storage_slot_was_cold, @@ -188,7 +188,7 @@ impl<'a> VM<'a> { let key = H256::from(storage_slot_key.to_big_endian()); let (storage_slot, storage_slot_was_cold) = - self.access_storage_slot(current_call_frame.to, key)?; + self.access_storage_slot(current_call_frame.to, key, current_call_frame)?; // Gas Refunds // Sync gas refund with global env, ensuring consistency accross contexts. @@ -256,7 +256,12 @@ impl<'a> VM<'a> { self.env.config.fork, )?)?; - self.update_account_storage(current_call_frame.to, key, new_storage_slot_value)?; + self.update_account_storage( + current_call_frame.to, + key, + new_storage_slot_value, + current_call_frame, + )?; Ok(OpcodeResult::Continue { pc_increment: 1 }) } diff --git a/crates/vm/levm/src/opcode_handlers/system.rs b/crates/vm/levm/src/opcode_handlers/system.rs index 139bc30a9d..b8d9ff54e8 100644 --- a/crates/vm/levm/src/opcode_handlers/system.rs +++ b/crates/vm/levm/src/opcode_handlers/system.rs @@ -1,4 +1,5 @@ use crate::{ + account, call_frame::CallFrame, constants::{CREATE_DEPLOYMENT_FAIL, INIT_CODE_MAX_SIZE, REVERT_FOR_CALL, SUCCESS_FOR_CALL}, db::cache, @@ -517,8 +518,18 @@ impl<'a> VM<'a> { // [EIP-6780] - SELFDESTRUCT only in same transaction from CANCUN if self.env.config.fork >= Fork::Cancun { - increase_account_balance(self.db, target_address, balance_to_transfer)?; - decrease_account_balance(self.db, current_call_frame.to, balance_to_transfer)?; + increase_account_balance( + self.db, + target_address, + balance_to_transfer, + &mut Some(current_call_frame), + )?; + decrease_account_balance( + self.db, + current_call_frame.to, + balance_to_transfer, + &mut Some(current_call_frame), + )?; // Selfdestruct is executed in the same transaction as the contract was created if self @@ -527,19 +538,32 @@ impl<'a> VM<'a> { .contains(¤t_call_frame.to) { // If target is the same as the contract calling, Ether will be burnt. - get_account_mut_vm(self.db, current_call_frame.to)? - .info - .balance = U256::zero(); + get_account_mut_vm( + self.db, + current_call_frame.to, + &mut Some(current_call_frame), + )? + .info + .balance = U256::zero(); self.accrued_substate .selfdestruct_set .insert(current_call_frame.to); } } else { - increase_account_balance(self.db, target_address, balance_to_transfer)?; - get_account_mut_vm(self.db, current_call_frame.to)? - .info - .balance = U256::zero(); + increase_account_balance( + self.db, + target_address, + balance_to_transfer, + &mut Some(current_call_frame), + )?; + get_account_mut_vm( + self.db, + current_call_frame.to, + &mut Some(current_call_frame), + )? + .info + .balance = U256::zero(); // [EIP-3529](https://eips.ethereum.org/EIPS/eip-3529) // https://github.com/ethereum/execution-specs/blob/master/src/ethereum/constantinople/vm/instructions/system.py#L471 @@ -635,9 +659,9 @@ impl<'a> VM<'a> { } // THIRD: Validations that push 0 to the stack without returning reserved gas but incrementing deployer's nonce - let new_account = get_account(self.db, new_address)?; + let new_account = get_account(self.db, new_address, &mut Some(current_call_frame))?; if new_account.has_code_or_nonce() { - increment_account_nonce(self.db, deployer_address)?; + increment_account_nonce(self.db, deployer_address, &mut Some(current_call_frame))?; current_call_frame.stack.push(CREATE_DEPLOYMENT_FAIL)?; return Ok(OpcodeResult::Continue { pc_increment: 1 }); } @@ -656,13 +680,23 @@ impl<'a> VM<'a> { } else { Account::new(new_balance, Bytes::new(), 1, Default::default()) }; - cache::insert_account(&mut self.db.cache, new_address, new_account); + cache::insert_account( + &mut self.db.cache, + new_address, + new_account, + &mut Some(current_call_frame), + ); // 2. Increment sender's nonce. - increment_account_nonce(self.db, deployer_address)?; + increment_account_nonce(self.db, deployer_address, &mut Some(current_call_frame))?; // 3. Decrease sender's balance. - decrease_account_balance(self.db, deployer_address, value_in_wei_to_send)?; + decrease_account_balance( + self.db, + deployer_address, + value_in_wei_to_send, + &mut Some(current_call_frame), + )?; let mut new_call_frame = CallFrame::new( deployer_address, @@ -698,13 +732,24 @@ impl<'a> VM<'a> { current_call_frame .stack .push(address_to_word(new_address))?; + + for (address, account_opt) in new_call_frame.backup { + if !current_call_frame.backup.contains_key(&address) { + current_call_frame.backup.insert(address, account_opt); + } + } } TxResult::Revert(err) => { // Return value to sender - increase_account_balance(self.db, deployer_address, value_in_wei_to_send)?; + increase_account_balance( + self.db, + deployer_address, + value_in_wei_to_send, + &mut Some(current_call_frame), + )?; // Deployment failed so account shouldn't exist - cache::remove_account(&mut self.db.cache, &new_address); + cache::remove_account(&mut self.db.cache, &new_address, Some(current_call_frame)); self.accrued_substate.created_accounts.remove(&new_address); // If revert we have to copy the return_data @@ -797,8 +842,8 @@ impl<'a> VM<'a> { // Transfer value from caller to callee. if should_transfer_value { - decrease_account_balance(self.db, msg_sender, value)?; - increase_account_balance(self.db, to, value)?; + decrease_account_balance(self.db, msg_sender, value, &mut Some(current_call_frame))?; + increase_account_balance(self.db, to, value, &mut Some(current_call_frame))?; } let tx_report = self.run_execution(&mut new_call_frame)?; @@ -827,12 +872,22 @@ impl<'a> VM<'a> { match tx_report.result { TxResult::Success => { current_call_frame.stack.push(SUCCESS_FOR_CALL)?; + for (address, account_opt) in new_call_frame.backup { + if !current_call_frame.backup.contains_key(&address) { + current_call_frame.backup.insert(address, account_opt); + } + } } TxResult::Revert(_) => { // Revert value transfer if should_transfer_value { - decrease_account_balance(self.db, to, value)?; - increase_account_balance(self.db, msg_sender, value)?; + decrease_account_balance(self.db, to, value, &mut Some(current_call_frame))?; + increase_account_balance( + self.db, + msg_sender, + value, + &mut Some(current_call_frame), + )?; } // Push 0 to stack current_call_frame.stack.push(REVERT_FOR_CALL)?; diff --git a/crates/vm/levm/src/utils.rs b/crates/vm/levm/src/utils.rs index 435cf31b3c..978a37ab8d 100644 --- a/crates/vm/levm/src/utils.rs +++ b/crates/vm/levm/src/utils.rs @@ -129,6 +129,7 @@ pub fn get_valid_jump_destinations(code: &Bytes) -> Result, VMErr pub fn get_account( db: &mut GeneralizedDatabase, address: Address, + call_frame: &mut Option<&mut CallFrame>, ) -> Result { match cache::get_account(&db.cache, &address) { Some(acc) => Ok(acc.clone()), @@ -138,7 +139,7 @@ pub fn get_account( info: account_info, storage: HashMap::new(), }; - cache::insert_account(&mut db.cache, address, account.clone()); + cache::insert_account(&mut db.cache, address, account.clone(), call_frame); Ok(account) } } @@ -160,19 +161,20 @@ pub fn get_account_no_push_cache( } } -pub fn get_account_mut_vm( - db: &mut GeneralizedDatabase, +pub fn get_account_mut_vm<'a>( + db: &'a mut GeneralizedDatabase, address: Address, -) -> Result<&mut Account, VMError> { + call_frame: &mut Option<&mut CallFrame>, +) -> Result<&'a mut Account, VMError> { if !cache::is_account_cached(&db.cache, &address) { let account_info = db.store.get_account_info(address)?; let account = Account { info: account_info, storage: HashMap::new(), }; - cache::insert_account(&mut db.cache, address, account.clone()); + cache::insert_account(&mut db.cache, address, account.clone(), call_frame); } - cache::get_account_mut(&mut db.cache, &address) + cache::get_account_mut(&mut db.cache, &address, call_frame) .ok_or(VMError::Internal(InternalError::AccountNotFound)) } @@ -180,8 +182,9 @@ pub fn increase_account_balance( db: &mut GeneralizedDatabase, address: Address, increase: U256, + call_frame: &mut Option<&mut CallFrame>, ) -> Result<(), VMError> { - let account = get_account_mut_vm(db, address)?; + let account = get_account_mut_vm(db, address, call_frame)?; account.info.balance = account .info .balance @@ -194,8 +197,9 @@ pub fn decrease_account_balance( db: &mut GeneralizedDatabase, address: Address, decrease: U256, + call_frame: &mut Option<&mut CallFrame>, ) -> Result<(), VMError> { - let account = get_account_mut_vm(db, address)?; + let account = get_account_mut_vm(db, address, call_frame)?; account.info.balance = account .info .balance @@ -226,8 +230,9 @@ pub fn update_account_bytecode( db: &mut GeneralizedDatabase, address: Address, new_bytecode: Bytes, + call_frame: &mut Option<&mut CallFrame>, ) -> Result<(), VMError> { - let account = get_account_mut_vm(db, address)?; + let account = get_account_mut_vm(db, address, call_frame)?; account.info.bytecode = new_bytecode; Ok(()) } @@ -426,8 +431,9 @@ pub fn get_number_of_topics(op: Opcode) -> Result { pub fn increment_account_nonce( db: &mut GeneralizedDatabase, address: Address, + call_frame: &mut Option<&mut CallFrame>, ) -> Result { - let account = get_account_mut_vm(db, address)?; + let account = get_account_mut_vm(db, address, call_frame)?; account.info.nonce = account .info .nonce @@ -439,8 +445,9 @@ pub fn increment_account_nonce( pub fn decrement_account_nonce( db: &mut GeneralizedDatabase, address: Address, + call_frame: &mut Option<&mut CallFrame>, ) -> Result<(), VMError> { - let account = get_account_mut_vm(db, address)?; + let account = get_account_mut_vm(db, address, call_frame)?; account.info.nonce = account .info .nonce @@ -561,15 +568,16 @@ pub fn eip7702_set_access_code( // As a special case, if address is 0x0000000000000000000000000000000000000000 do not write the designation. // Clear the account’s code and reset the account’s code hash to the empty hash. - let auth_account = match cache::get_account_mut(&mut db.cache, &authority_address) { - Some(account_mut) => account_mut, - None => { - // This is to add the account to the cache - // NOTE: Refactor in the future - get_account(db, authority_address)?; - get_account_mut_vm(db, authority_address)? - } - }; + let auth_account = + match cache::get_account_mut(&mut db.cache, &authority_address, &mut None) { + Some(account_mut) => account_mut, + None => { + // This is to add the account to the cache + // NOTE: Refactor in the future + get_account(db, authority_address, &mut None)?; + get_account_mut_vm(db, authority_address, &mut None)? + } + }; auth_account.info.bytecode = if auth_tuple.address != Address::zero() { delegation_bytes.into() @@ -578,7 +586,7 @@ pub fn eip7702_set_access_code( }; // 9. Increase the nonce of authority by one. - increment_account_nonce(db, authority_address) + increment_account_nonce(db, authority_address, &mut None) .map_err(|_| VMError::TxValidation(TxValidationError::NonceIsMax))?; } diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index d46bc2c7b1..b14b61ddae 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -46,7 +46,6 @@ pub struct Substate { /// - Gas Refunds /// - Transient Storage pub struct StateBackup { - cache: CacheDB, substate: Substate, refunded_gas: u64, transient_storage: TransientStorage, @@ -54,13 +53,11 @@ pub struct StateBackup { impl StateBackup { pub fn new( - cache: CacheDB, substate: Substate, refunded_gas: u64, transient_storage: TransientStorage, ) -> StateBackup { StateBackup { - cache, substate, refunded_gas, transient_storage, @@ -282,7 +279,7 @@ impl<'a> VM<'a> { }) } TxKind::Create => { - let sender_nonce = get_account(db, env.origin)?.info.nonce; + let sender_nonce = get_account(db, env.origin, &mut None)?.info.nonce; let new_contract_address = calculate_create_address(env.origin, sender_nonce) .map_err(|_| VMError::Internal(InternalError::CouldNotComputeCreateAddress))?; @@ -332,7 +329,6 @@ impl<'a> VM<'a> { ) -> Result { // Backup of Database, Substate, Gas Refunds and Transient Storage if sub-context is reverted let backup = StateBackup::new( - self.db.cache.clone(), self.accrued_substate.clone(), self.env.refunded_gas, self.env.transient_storage.clone(), @@ -360,8 +356,16 @@ impl<'a> VM<'a> { } } - pub fn restore_state(&mut self, backup: StateBackup) { - self.db.cache = backup.cache; + pub fn restore_state(&mut self, backup: StateBackup, call_frame: &mut CallFrame) { + // self.db.cache = backup.cache; + for (address, account_opt) in &call_frame.backup { + if let Some(account) = account_opt { + cache::insert_account(&mut self.db.cache, *address, account.clone(), &mut None); + } else { + // remove from cache + cache::remove_account(&mut self.db.cache, address, None); + } + } self.accrued_substate = backup.substate; self.env.refunded_gas = backup.refunded_gas; self.env.transient_storage = backup.transient_storage; @@ -428,7 +432,7 @@ impl<'a> VM<'a> { // Add created contract to cache, reverting transaction if the address is already occupied if self.is_create() { let new_contract_address = initial_call_frame.to; - let new_account = get_account(self.db, new_contract_address)?; + let new_account = get_account(self.db, new_contract_address, &mut None)?; let value = initial_call_frame.msg_value; let balance = new_account @@ -438,7 +442,7 @@ impl<'a> VM<'a> { .ok_or(InternalError::ArithmeticOperationOverflow)?; if new_account.has_code_or_nonce() { - return self.handle_create_non_empty_account(&initial_call_frame); + return self.handle_create_non_empty_account(&mut initial_call_frame); } // https://eips.ethereum.org/EIPS/eip-161 @@ -447,12 +451,17 @@ impl<'a> VM<'a> { } else { Account::new(balance, Bytes::new(), 1, HashMap::new()) }; - cache::insert_account(&mut self.db.cache, new_contract_address, created_contract); + cache::insert_account( + &mut self.db.cache, + new_contract_address, + created_contract, + &mut None, + ); } let mut report = self.run_execution(&mut initial_call_frame)?; - self.finalize_execution(&initial_call_frame, &mut report)?; + self.finalize_execution(&mut initial_call_frame, &mut report)?; Ok(report) } @@ -471,6 +480,7 @@ impl<'a> VM<'a> { &mut self, address: Address, key: H256, + call_frame: &mut CallFrame, ) -> Result<(StorageSlot, bool), VMError> { // [EIP-2929] - Introduced conditional tracking of accessed storage slots for Berlin and later specs. let mut storage_slot_was_cold = false; @@ -504,7 +514,7 @@ impl<'a> VM<'a> { // When updating account storage of an account that's not yet cached we need to store the StorageSlot in the account // Note: We end up caching the account because it is the most straightforward way of doing it. - let account = get_account_mut_vm(self.db, address)?; + let account = get_account_mut_vm(self.db, address, &mut Some(call_frame))?; account.storage.insert(key, storage_slot.clone()); Ok((storage_slot, storage_slot_was_cold)) @@ -515,8 +525,9 @@ impl<'a> VM<'a> { address: Address, key: H256, new_value: U256, + call_frame: &mut CallFrame, ) -> Result<(), VMError> { - let account = get_account_mut_vm(self.db, address)?; + let account = get_account_mut_vm(self.db, address, &mut Some(call_frame))?; let account_original_storage_slot_value = account .storage .get(&key) @@ -531,7 +542,7 @@ impl<'a> VM<'a> { fn handle_create_non_empty_account( &mut self, - initial_call_frame: &CallFrame, + initial_call_frame: &mut CallFrame, ) -> Result { let mut report = ExecutionReport { result: TxResult::Revert(VMError::AddressAlreadyOccupied), @@ -559,7 +570,7 @@ impl<'a> VM<'a> { fn finalize_execution( &mut self, - initial_call_frame: &CallFrame, + initial_call_frame: &mut CallFrame, report: &mut ExecutionReport, ) -> Result<(), VMError> { // NOTE: ATTOW the default hook is created in VM::new(), so From ea6d4b49219d7c1bbaf0ee219f4288033a011a39 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Mon, 7 Apr 2025 16:52:37 -0300 Subject: [PATCH 02/47] change remove_account --- crates/vm/levm/src/call_frame.rs | 3 +-- crates/vm/levm/src/db/cache.rs | 2 +- crates/vm/levm/src/hooks/default_hook.rs | 2 +- crates/vm/levm/src/opcode_handlers/system.rs | 6 +++++- crates/vm/levm/src/vm.rs | 2 +- 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/crates/vm/levm/src/call_frame.rs b/crates/vm/levm/src/call_frame.rs index b271b9373a..8374603958 100644 --- a/crates/vm/levm/src/call_frame.rs +++ b/crates/vm/levm/src/call_frame.rs @@ -8,8 +8,7 @@ use crate::{ }; use bytes::Bytes; use ethrex_common::{types::Log, Address, U256}; -use revm_primitives::HashMap; -use std::collections::HashSet; +use std::collections::{HashMap, HashSet}; #[derive(Debug, Clone, Default, PartialEq, Eq)] pub struct Stack { diff --git a/crates/vm/levm/src/db/cache.rs b/crates/vm/levm/src/db/cache.rs index cea3e4baee..ca3c305e74 100644 --- a/crates/vm/levm/src/db/cache.rs +++ b/crates/vm/levm/src/db/cache.rs @@ -64,7 +64,7 @@ pub fn insert_account( pub fn remove_account( cached_accounts: &mut CacheDB, address: &Address, - call_frame: Option<&mut CallFrame>, + call_frame: &mut Option<&mut CallFrame>, ) -> Option { let account_option = cached_accounts.remove(address); diff --git a/crates/vm/levm/src/hooks/default_hook.rs b/crates/vm/levm/src/hooks/default_hook.rs index 7bbe17b885..1104bb0ae4 100644 --- a/crates/vm/levm/src/hooks/default_hook.rs +++ b/crates/vm/levm/src/hooks/default_hook.rs @@ -349,7 +349,7 @@ impl Hook for DefaultHook { )?; } else { // We remove the receiver account from the cache, like nothing changed in it's state. - remove_account(&mut vm.db.cache, &receiver_address, None); + remove_account(&mut vm.db.cache, &receiver_address, &mut None); } increase_account_balance( diff --git a/crates/vm/levm/src/opcode_handlers/system.rs b/crates/vm/levm/src/opcode_handlers/system.rs index b8d9ff54e8..b98da4d719 100644 --- a/crates/vm/levm/src/opcode_handlers/system.rs +++ b/crates/vm/levm/src/opcode_handlers/system.rs @@ -749,7 +749,11 @@ impl<'a> VM<'a> { )?; // Deployment failed so account shouldn't exist - cache::remove_account(&mut self.db.cache, &new_address, Some(current_call_frame)); + cache::remove_account( + &mut self.db.cache, + &new_address, + &mut Some(current_call_frame), + ); self.accrued_substate.created_accounts.remove(&new_address); // If revert we have to copy the return_data diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index b14b61ddae..2836602a99 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -363,7 +363,7 @@ impl<'a> VM<'a> { cache::insert_account(&mut self.db.cache, *address, account.clone(), &mut None); } else { // remove from cache - cache::remove_account(&mut self.db.cache, address, None); + cache::remove_account(&mut self.db.cache, address, &mut None); } } self.accrued_substate = backup.substate; From 8f11f8a3c7e602d3bb5e09612bfb46bb6ba1177d Mon Sep 17 00:00:00 2001 From: JereSalo Date: Mon, 7 Apr 2025 17:20:51 -0300 Subject: [PATCH 03/47] change benchmark stateless_execute for execute() --- crates/vm/levm/bench/revm_comparison/src/lib.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/vm/levm/bench/revm_comparison/src/lib.rs b/crates/vm/levm/bench/revm_comparison/src/lib.rs index 38aa6b372f..989628a92e 100644 --- a/crates/vm/levm/bench/revm_comparison/src/lib.rs +++ b/crates/vm/levm/bench/revm_comparison/src/lib.rs @@ -86,19 +86,19 @@ pub fn run_with_levm(program: &str, runs: u64, calldata: &str) { &mut None, ); - for _ in 0..runs - 1 { - let mut vm = new_vm_with_bytecode(&mut db, 0).unwrap(); + for i in 0..runs - 1 { + let mut vm = new_vm_with_bytecode(&mut db, i).unwrap(); vm.call_frames.last_mut().unwrap().calldata = calldata.clone(); vm.env.gas_limit = u64::MAX - 1; vm.env.block_gas_limit = u64::MAX; - let tx_report = black_box(vm.stateless_execute().unwrap()); + let tx_report = black_box(vm.execute().unwrap()); assert!(tx_report.result == TxResult::Success); } - let mut vm = new_vm_with_bytecode(&mut db, 0).unwrap(); + let mut vm = new_vm_with_bytecode(&mut db, runs - 1).unwrap(); vm.call_frames.last_mut().unwrap().calldata = calldata.clone(); vm.env.gas_limit = u64::MAX - 1; vm.env.block_gas_limit = u64::MAX; - let tx_report = black_box(vm.stateless_execute().unwrap()); + let tx_report = black_box(vm.execute().unwrap()); assert!(tx_report.result == TxResult::Success); match tx_report.result { From 5cc6827b21f181f7750993bd202163f83ce570c2 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Mon, 7 Apr 2025 17:38:54 -0300 Subject: [PATCH 04/47] quick removal of cache_backup --- crates/vm/levm/Makefile | 2 +- crates/vm/levm/src/vm.rs | 18 ++++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/crates/vm/levm/Makefile b/crates/vm/levm/Makefile index c96a2ac288..d49a1b8261 100644 --- a/crates/vm/levm/Makefile +++ b/crates/vm/levm/Makefile @@ -86,7 +86,7 @@ BENCH_FACT_ITERATIONS := 57 BENCH_FACT_REC_ITERATIONS := 57 BENCH_FIB_ITERATIONS := 57 BENCH_HASHES_ITERATIONS := 57 -BENCH_BUBBLESORT_ITERATIONS := 100 # Size of the array to sort +BENCH_BUBBLESORT_ITERATIONS := 10 # Size of the array to sort BENCH_MINT_ITERATIONS := 500 BENCH_TRANSFER_ITERATIONS := 500 BENCH_APPROVAL_ITERATIONS := 500 diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index 2836602a99..6680955f9a 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -171,7 +171,6 @@ pub struct VM<'a> { pub access_list: AccessList, pub authorization_list: Option, pub hooks: Vec>, - pub cache_backup: CacheDB, // Backup of the cache before executing the transaction } pub struct GeneralizedDatabase { @@ -264,8 +263,6 @@ impl<'a> VM<'a> { false, ); - let cache_backup = db.cache.clone(); - Ok(Self { call_frames: vec![initial_call_frame], env, @@ -275,7 +272,6 @@ impl<'a> VM<'a> { access_list, authorization_list, hooks, - cache_backup, }) } TxKind::Create => { @@ -306,8 +302,6 @@ impl<'a> VM<'a> { created_accounts: HashSet::from([new_contract_address]), }; - let cache_backup = db.cache.clone(); - Ok(Self { call_frames: vec![initial_call_frame], env, @@ -317,7 +311,6 @@ impl<'a> VM<'a> { access_list, authorization_list, hooks, - cache_backup, }) } } @@ -415,8 +408,6 @@ impl<'a> VM<'a> { /// Main function for executing an external transaction pub fn execute(&mut self) -> Result { - self.cache_backup = self.db.cache.clone(); - let mut initial_call_frame = self .call_frames .pop() @@ -424,7 +415,14 @@ impl<'a> VM<'a> { if let Err(e) = self.prepare_execution(&mut initial_call_frame) { // We need to do a cleanup of the cache so that it doesn't interfere with next transaction's execution - self.db.cache = self.cache_backup.clone(); + for (address, account_opt) in &initial_call_frame.backup { + if let Some(account) = account_opt { + cache::insert_account(&mut self.db.cache, *address, account.clone(), &mut None); + } else { + // remove from cache + cache::remove_account(&mut self.db.cache, address, &mut None); + } + } return Err(e); } From 4094cc75f7e2f922aedd555ae2e8bd224f7d4f83 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Mon, 7 Apr 2025 18:00:53 -0300 Subject: [PATCH 05/47] fix prepare execution --- crates/vm/levm/src/hooks/default_hook.rs | 45 +++++++++++++++++------- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/crates/vm/levm/src/hooks/default_hook.rs b/crates/vm/levm/src/hooks/default_hook.rs index 1104bb0ae4..b9300e878c 100644 --- a/crates/vm/levm/src/hooks/default_hook.rs +++ b/crates/vm/levm/src/hooks/default_hook.rs @@ -34,7 +34,7 @@ impl Hook for DefaultHook { initial_call_frame: &mut CallFrame, ) -> Result<(), VMError> { let sender_address = vm.env.origin; - let sender_account = get_account(vm.db, sender_address, &mut None)?; + let sender_account = get_account(vm.db, sender_address, &mut Some(initial_call_frame))?; if vm.env.config.fork >= Fork::Prague { // check for gas limit is grater or equal than the minimum required @@ -148,8 +148,13 @@ impl Hook for DefaultHook { // technically, the sender will not be able to pay it. // (3) INSUFFICIENT_ACCOUNT_FUNDS - decrease_account_balance(vm.db, sender_address, up_front_cost, &mut None) - .map_err(|_| TxValidationError::InsufficientAccountFunds)?; + decrease_account_balance( + vm.db, + sender_address, + up_front_cost, + &mut Some(initial_call_frame), + ) + .map_err(|_| TxValidationError::InsufficientAccountFunds)?; // (4) INSUFFICIENT_MAX_FEE_PER_GAS if vm.env.tx_max_fee_per_gas.unwrap_or(vm.env.gas_price) < vm.env.base_fee_per_gas { @@ -180,7 +185,7 @@ impl Hook for DefaultHook { )?; // (7) NONCE_IS_MAX - increment_account_nonce(vm.db, sender_address, &mut None) + increment_account_nonce(vm.db, sender_address, &mut Some(initial_call_frame)) .map_err(|_| VMError::TxValidation(TxValidationError::NonceIsMax))?; // check for nonce mismatch @@ -306,7 +311,7 @@ impl Hook for DefaultHook { vm.db, initial_call_frame.to, initial_call_frame.msg_value, - &mut None, + &mut Some(initial_call_frame), )?; } Ok(()) @@ -329,7 +334,8 @@ impl Hook for DefaultHook { // 1. Undo value transfer if the transaction has reverted if let TxResult::Revert(_) = report.result { - let existing_account = get_account(vm.db, receiver_address, &mut None)?; //TO Account + let existing_account = + get_account(vm.db, receiver_address, &mut Some(initial_call_frame))?; //TO Account if has_delegation(&existing_account.info)? { // This is the case where the "to" address and the @@ -345,18 +351,22 @@ impl Hook for DefaultHook { vm.db, receiver_address, initial_call_frame.msg_value, - &mut None, + &mut Some(initial_call_frame), )?; } else { // We remove the receiver account from the cache, like nothing changed in it's state. - remove_account(&mut vm.db.cache, &receiver_address, &mut None); + remove_account( + &mut vm.db.cache, + &receiver_address, + &mut Some(initial_call_frame), + ); } increase_account_balance( vm.db, sender_address, initial_call_frame.msg_value, - &mut None, + &mut Some(initial_call_frame), )?; } @@ -397,7 +407,12 @@ impl Hook for DefaultHook { .checked_mul(U256::from(gas_to_return)) .ok_or(VMError::Internal(InternalError::UndefinedState(1)))?; - increase_account_balance(vm.db, sender_address, wei_return_amount, &mut None)?; + increase_account_balance( + vm.db, + sender_address, + wei_return_amount, + &mut Some(initial_call_frame), + )?; // 3. Pay coinbase fee let coinbase_address = vm.env.coinbase; @@ -416,14 +431,20 @@ impl Hook for DefaultHook { .ok_or(VMError::BalanceOverflow)?; if coinbase_fee != U256::zero() { - increase_account_balance(vm.db, coinbase_address, coinbase_fee, &mut None)?; + increase_account_balance( + vm.db, + coinbase_address, + coinbase_fee, + &mut Some(initial_call_frame), + )?; }; // 4. Destruct addresses in vm.estruct set. // In Cancun the only addresses destroyed are contracts created in this transaction let selfdestruct_set = vm.accrued_substate.selfdestruct_set.clone(); for address in selfdestruct_set { - let account_to_remove = get_account_mut_vm(vm.db, address, &mut None)?; + let account_to_remove = + get_account_mut_vm(vm.db, address, &mut Some(initial_call_frame))?; *account_to_remove = Account::default(); } From 13dc11b64614db79bfbab18faed58a1092903903 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Mon, 7 Apr 2025 18:09:26 -0300 Subject: [PATCH 06/47] clippy lints --- crates/vm/levm/src/db/cache.rs | 27 +++++++------------- crates/vm/levm/src/opcode_handlers/system.rs | 15 ++++++----- 2 files changed, 17 insertions(+), 25 deletions(-) diff --git a/crates/vm/levm/src/db/cache.rs b/crates/vm/levm/src/db/cache.rs index ca3c305e74..3e94921f30 100644 --- a/crates/vm/levm/src/db/cache.rs +++ b/crates/vm/levm/src/db/cache.rs @@ -22,11 +22,9 @@ pub fn get_account_mut<'cache>( if let Some(call_frame) = call_frame { if !call_frame.backup.contains_key(address) { if let Some(account) = account_option.as_ref() { - call_frame - .backup - .insert(address.clone(), Some((*account).clone())); + call_frame.backup.insert(*address, Some((*account).clone())); } else { - call_frame.backup.insert(address.clone(), None); + call_frame.backup.insert(*address, None); } } } @@ -47,15 +45,10 @@ pub fn insert_account( // insert account_option cloned into call_frame backup if not already there if let Some(call_frame) = call_frame { - if !call_frame.backup.contains_key(&address) { - if let Some(account) = account_option.as_ref() { - call_frame - .backup - .insert(address.clone(), Some((*account).clone())); - } else { - call_frame.backup.insert(address.clone(), None); - } - } + call_frame + .backup + .entry(address) + .or_insert_with(|| account_option.as_ref().map(|account| (*account).clone())); } account_option @@ -70,13 +63,11 @@ pub fn remove_account( // insert account_option cloned into call_frame backup if not already there if let Some(call_frame) = call_frame { - if !call_frame.backup.contains_key(&address) { + if !call_frame.backup.contains_key(address) { if let Some(account) = account_option.as_ref() { - call_frame - .backup - .insert(address.clone(), Some((*account).clone())); + call_frame.backup.insert(*address, Some((*account).clone())); } else { - call_frame.backup.insert(address.clone(), None); + call_frame.backup.insert(*address, None); } } } diff --git a/crates/vm/levm/src/opcode_handlers/system.rs b/crates/vm/levm/src/opcode_handlers/system.rs index b98da4d719..24c2f046f1 100644 --- a/crates/vm/levm/src/opcode_handlers/system.rs +++ b/crates/vm/levm/src/opcode_handlers/system.rs @@ -1,5 +1,4 @@ use crate::{ - account, call_frame::CallFrame, constants::{CREATE_DEPLOYMENT_FAIL, INIT_CODE_MAX_SIZE, REVERT_FOR_CALL, SUCCESS_FOR_CALL}, db::cache, @@ -734,9 +733,10 @@ impl<'a> VM<'a> { .push(address_to_word(new_address))?; for (address, account_opt) in new_call_frame.backup { - if !current_call_frame.backup.contains_key(&address) { - current_call_frame.backup.insert(address, account_opt); - } + current_call_frame + .backup + .entry(address) + .or_insert(account_opt); } } TxResult::Revert(err) => { @@ -877,9 +877,10 @@ impl<'a> VM<'a> { TxResult::Success => { current_call_frame.stack.push(SUCCESS_FOR_CALL)?; for (address, account_opt) in new_call_frame.backup { - if !current_call_frame.backup.contains_key(&address) { - current_call_frame.backup.insert(address, account_opt); - } + current_call_frame + .backup + .entry(address) + .or_insert(account_opt); } } TxResult::Revert(_) => { From 3c136f12e375835379d68cd7828cc371f3c7f35d Mon Sep 17 00:00:00 2001 From: JereSalo Date: Mon, 7 Apr 2025 18:41:46 -0300 Subject: [PATCH 07/47] create cache restore method --- .../vm/levm/bench/revm_comparison/src/lib.rs | 4 +-- crates/vm/levm/src/vm.rs | 30 ++++++++----------- 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/crates/vm/levm/bench/revm_comparison/src/lib.rs b/crates/vm/levm/bench/revm_comparison/src/lib.rs index 989628a92e..8f6d902072 100644 --- a/crates/vm/levm/bench/revm_comparison/src/lib.rs +++ b/crates/vm/levm/bench/revm_comparison/src/lib.rs @@ -91,14 +91,14 @@ pub fn run_with_levm(program: &str, runs: u64, calldata: &str) { vm.call_frames.last_mut().unwrap().calldata = calldata.clone(); vm.env.gas_limit = u64::MAX - 1; vm.env.block_gas_limit = u64::MAX; - let tx_report = black_box(vm.execute().unwrap()); + let tx_report = black_box(vm.stateless_execute().unwrap()); assert!(tx_report.result == TxResult::Success); } let mut vm = new_vm_with_bytecode(&mut db, runs - 1).unwrap(); vm.call_frames.last_mut().unwrap().calldata = calldata.clone(); vm.env.gas_limit = u64::MAX - 1; vm.env.block_gas_limit = u64::MAX; - let tx_report = black_box(vm.execute().unwrap()); + let tx_report = black_box(vm.stateless_execute().unwrap()); assert!(tx_report.result == TxResult::Success); match tx_report.result { diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index 6680955f9a..1b44ede7c9 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -350,15 +350,7 @@ impl<'a> VM<'a> { } pub fn restore_state(&mut self, backup: StateBackup, call_frame: &mut CallFrame) { - // self.db.cache = backup.cache; - for (address, account_opt) in &call_frame.backup { - if let Some(account) = account_opt { - cache::insert_account(&mut self.db.cache, *address, account.clone(), &mut None); - } else { - // remove from cache - cache::remove_account(&mut self.db.cache, address, &mut None); - } - } + self.restore_cache_state(call_frame); self.accrued_substate = backup.substate; self.env.refunded_gas = backup.refunded_gas; self.env.transient_storage = backup.transient_storage; @@ -415,14 +407,7 @@ impl<'a> VM<'a> { if let Err(e) = self.prepare_execution(&mut initial_call_frame) { // We need to do a cleanup of the cache so that it doesn't interfere with next transaction's execution - for (address, account_opt) in &initial_call_frame.backup { - if let Some(account) = account_opt { - cache::insert_account(&mut self.db.cache, *address, account.clone(), &mut None); - } else { - // remove from cache - cache::remove_account(&mut self.db.cache, address, &mut None); - } - } + self.restore_cache_state(&initial_call_frame); return Err(e); } @@ -580,4 +565,15 @@ impl<'a> VM<'a> { Ok(()) } + + fn restore_cache_state(&mut self, call_frame: &CallFrame) { + for (address, account_opt) in &call_frame.backup { + if let Some(account) = account_opt { + cache::insert_account(&mut self.db.cache, *address, account.clone(), &mut None); + } else { + // remove from cache + cache::remove_account(&mut self.db.cache, address, &mut None); + } + } + } } From aaa988b44af24497a5be5a53d960c8cacde49688 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Tue, 8 Apr 2025 07:38:12 -0300 Subject: [PATCH 08/47] fix errors --- crates/vm/levm/src/hooks/default_hook.rs | 30 ++++++------------------ crates/vm/levm/src/vm.rs | 2 ++ 2 files changed, 9 insertions(+), 23 deletions(-) diff --git a/crates/vm/levm/src/hooks/default_hook.rs b/crates/vm/levm/src/hooks/default_hook.rs index b9300e878c..568942e053 100644 --- a/crates/vm/levm/src/hooks/default_hook.rs +++ b/crates/vm/levm/src/hooks/default_hook.rs @@ -334,8 +334,7 @@ impl Hook for DefaultHook { // 1. Undo value transfer if the transaction has reverted if let TxResult::Revert(_) = report.result { - let existing_account = - get_account(vm.db, receiver_address, &mut Some(initial_call_frame))?; //TO Account + let existing_account = get_account(vm.db, receiver_address, &mut None)?; //TO Account if has_delegation(&existing_account.info)? { // This is the case where the "to" address and the @@ -351,22 +350,18 @@ impl Hook for DefaultHook { vm.db, receiver_address, initial_call_frame.msg_value, - &mut Some(initial_call_frame), + &mut None, )?; } else { // We remove the receiver account from the cache, like nothing changed in it's state. - remove_account( - &mut vm.db.cache, - &receiver_address, - &mut Some(initial_call_frame), - ); + remove_account(&mut vm.db.cache, &receiver_address, &mut None); } increase_account_balance( vm.db, sender_address, initial_call_frame.msg_value, - &mut Some(initial_call_frame), + &mut None, )?; } @@ -407,12 +402,7 @@ impl Hook for DefaultHook { .checked_mul(U256::from(gas_to_return)) .ok_or(VMError::Internal(InternalError::UndefinedState(1)))?; - increase_account_balance( - vm.db, - sender_address, - wei_return_amount, - &mut Some(initial_call_frame), - )?; + increase_account_balance(vm.db, sender_address, wei_return_amount, &mut None)?; // 3. Pay coinbase fee let coinbase_address = vm.env.coinbase; @@ -431,20 +421,14 @@ impl Hook for DefaultHook { .ok_or(VMError::BalanceOverflow)?; if coinbase_fee != U256::zero() { - increase_account_balance( - vm.db, - coinbase_address, - coinbase_fee, - &mut Some(initial_call_frame), - )?; + increase_account_balance(vm.db, coinbase_address, coinbase_fee, &mut None)?; }; // 4. Destruct addresses in vm.estruct set. // In Cancun the only addresses destroyed are contracts created in this transaction let selfdestruct_set = vm.accrued_substate.selfdestruct_set.clone(); for address in selfdestruct_set { - let account_to_remove = - get_account_mut_vm(vm.db, address, &mut Some(initial_call_frame))?; + let account_to_remove = get_account_mut_vm(vm.db, address, &mut None)?; *account_to_remove = Account::default(); } diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index 1b44ede7c9..e9f4453a7c 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -410,6 +410,8 @@ impl<'a> VM<'a> { self.restore_cache_state(&initial_call_frame); return Err(e); } + // clear callframe backup because prepare_execution succeeded + initial_call_frame.backup = HashMap::new(); // In CREATE type transactions: // Add created contract to cache, reverting transaction if the address is already occupied From caf51555c97c9bcd4990e9924fbbcc813712fbce Mon Sep 17 00:00:00 2001 From: JereSalo Date: Tue, 8 Apr 2025 08:21:21 -0300 Subject: [PATCH 09/47] move insert_account --- .../vm/levm/bench/revm_comparison/src/lib.rs | 2 -- crates/vm/levm/src/db/cache.rs | 16 +--------- crates/vm/levm/src/hooks/default_hook.rs | 4 +-- crates/vm/levm/src/opcode_handlers/block.rs | 8 +---- crates/vm/levm/src/opcode_handlers/system.rs | 9 ++---- crates/vm/levm/src/utils.rs | 7 ++--- crates/vm/levm/src/vm.rs | 29 +++++++++++++------ 7 files changed, 29 insertions(+), 46 deletions(-) diff --git a/crates/vm/levm/bench/revm_comparison/src/lib.rs b/crates/vm/levm/bench/revm_comparison/src/lib.rs index 8f6d902072..cecf99e185 100644 --- a/crates/vm/levm/bench/revm_comparison/src/lib.rs +++ b/crates/vm/levm/bench/revm_comparison/src/lib.rs @@ -72,7 +72,6 @@ pub fn run_with_levm(program: &str, runs: u64, calldata: &str) { accounts[0].1.info.nonce, HashMap::new(), ), - &mut None, ); cache::insert_account( &mut db.cache, @@ -83,7 +82,6 @@ pub fn run_with_levm(program: &str, runs: u64, calldata: &str) { accounts[1].1.info.nonce, HashMap::new(), ), - &mut None, ); for i in 0..runs - 1 { diff --git a/crates/vm/levm/src/db/cache.rs b/crates/vm/levm/src/db/cache.rs index 3e94921f30..b8366e4756 100644 --- a/crates/vm/levm/src/db/cache.rs +++ b/crates/vm/levm/src/db/cache.rs @@ -36,22 +36,8 @@ pub fn insert_account( cached_accounts: &mut CacheDB, address: Address, account: Account, - call_frame: &mut Option<&mut CallFrame>, ) -> Option { - let account_option = cached_accounts.insert(address, account); - - // None -> Key didn't exist in cache - // Some -> Key existed in cache and we replaced it - - // insert account_option cloned into call_frame backup if not already there - if let Some(call_frame) = call_frame { - call_frame - .backup - .entry(address) - .or_insert_with(|| account_option.as_ref().map(|account| (*account).clone())); - } - - account_option + cached_accounts.insert(address, account.clone()) } pub fn remove_account( diff --git a/crates/vm/levm/src/hooks/default_hook.rs b/crates/vm/levm/src/hooks/default_hook.rs index 568942e053..1ae6e71ac3 100644 --- a/crates/vm/levm/src/hooks/default_hook.rs +++ b/crates/vm/levm/src/hooks/default_hook.rs @@ -34,7 +34,7 @@ impl Hook for DefaultHook { initial_call_frame: &mut CallFrame, ) -> Result<(), VMError> { let sender_address = vm.env.origin; - let sender_account = get_account(vm.db, sender_address, &mut Some(initial_call_frame))?; + let sender_account = get_account(vm.db, sender_address)?; if vm.env.config.fork >= Fork::Prague { // check for gas limit is grater or equal than the minimum required @@ -334,7 +334,7 @@ impl Hook for DefaultHook { // 1. Undo value transfer if the transaction has reverted if let TxResult::Revert(_) = report.result { - let existing_account = get_account(vm.db, receiver_address, &mut None)?; //TO Account + let existing_account = get_account(vm.db, receiver_address)?; //TO Account if has_delegation(&existing_account.info)? { // This is the case where the "to" address and the diff --git a/crates/vm/levm/src/opcode_handlers/block.rs b/crates/vm/levm/src/opcode_handlers/block.rs index 23a748d540..d4afaa3ade 100644 --- a/crates/vm/levm/src/opcode_handlers/block.rs +++ b/crates/vm/levm/src/opcode_handlers/block.rs @@ -150,13 +150,7 @@ impl<'a> VM<'a> { } current_call_frame.increase_consumed_gas(gas_cost::SELFBALANCE)?; - let balance = get_account( - self.db, - current_call_frame.to, - &mut Some(current_call_frame), - )? - .info - .balance; + let balance = get_account(self.db, current_call_frame.to)?.info.balance; current_call_frame.stack.push(balance)?; Ok(OpcodeResult::Continue { pc_increment: 1 }) diff --git a/crates/vm/levm/src/opcode_handlers/system.rs b/crates/vm/levm/src/opcode_handlers/system.rs index 24c2f046f1..b72a7d5b2b 100644 --- a/crates/vm/levm/src/opcode_handlers/system.rs +++ b/crates/vm/levm/src/opcode_handlers/system.rs @@ -658,7 +658,7 @@ impl<'a> VM<'a> { } // THIRD: Validations that push 0 to the stack without returning reserved gas but incrementing deployer's nonce - let new_account = get_account(self.db, new_address, &mut Some(current_call_frame))?; + let new_account = get_account(self.db, new_address)?; if new_account.has_code_or_nonce() { increment_account_nonce(self.db, deployer_address, &mut Some(current_call_frame))?; current_call_frame.stack.push(CREATE_DEPLOYMENT_FAIL)?; @@ -679,12 +679,7 @@ impl<'a> VM<'a> { } else { Account::new(new_balance, Bytes::new(), 1, Default::default()) }; - cache::insert_account( - &mut self.db.cache, - new_address, - new_account, - &mut Some(current_call_frame), - ); + self.insert_account(new_address, new_account, &mut Some(current_call_frame)); // 2. Increment sender's nonce. increment_account_nonce(self.db, deployer_address, &mut Some(current_call_frame))?; diff --git a/crates/vm/levm/src/utils.rs b/crates/vm/levm/src/utils.rs index 978a37ab8d..9af42175cd 100644 --- a/crates/vm/levm/src/utils.rs +++ b/crates/vm/levm/src/utils.rs @@ -129,7 +129,6 @@ pub fn get_valid_jump_destinations(code: &Bytes) -> Result, VMErr pub fn get_account( db: &mut GeneralizedDatabase, address: Address, - call_frame: &mut Option<&mut CallFrame>, ) -> Result { match cache::get_account(&db.cache, &address) { Some(acc) => Ok(acc.clone()), @@ -139,7 +138,7 @@ pub fn get_account( info: account_info, storage: HashMap::new(), }; - cache::insert_account(&mut db.cache, address, account.clone(), call_frame); + cache::insert_account(&mut db.cache, address, account.clone()); Ok(account) } } @@ -172,7 +171,7 @@ pub fn get_account_mut_vm<'a>( info: account_info, storage: HashMap::new(), }; - cache::insert_account(&mut db.cache, address, account.clone(), call_frame); + cache::insert_account(&mut db.cache, address, account.clone()); } cache::get_account_mut(&mut db.cache, &address, call_frame) .ok_or(VMError::Internal(InternalError::AccountNotFound)) @@ -574,7 +573,7 @@ pub fn eip7702_set_access_code( None => { // This is to add the account to the cache // NOTE: Refactor in the future - get_account(db, authority_address, &mut None)?; + get_account(db, authority_address)?; get_account_mut_vm(db, authority_address, &mut None)? } }; diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index e9f4453a7c..7603b87e82 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -275,7 +275,7 @@ impl<'a> VM<'a> { }) } TxKind::Create => { - let sender_nonce = get_account(db, env.origin, &mut None)?.info.nonce; + let sender_nonce = get_account(db, env.origin)?.info.nonce; let new_contract_address = calculate_create_address(env.origin, sender_nonce) .map_err(|_| VMError::Internal(InternalError::CouldNotComputeCreateAddress))?; @@ -417,7 +417,7 @@ impl<'a> VM<'a> { // Add created contract to cache, reverting transaction if the address is already occupied if self.is_create() { let new_contract_address = initial_call_frame.to; - let new_account = get_account(self.db, new_contract_address, &mut None)?; + let new_account = get_account(self.db, new_contract_address)?; let value = initial_call_frame.msg_value; let balance = new_account @@ -436,12 +436,7 @@ impl<'a> VM<'a> { } else { Account::new(balance, Bytes::new(), 1, HashMap::new()) }; - cache::insert_account( - &mut self.db.cache, - new_contract_address, - created_contract, - &mut None, - ); + cache::insert_account(&mut self.db.cache, new_contract_address, created_contract); } let mut report = self.run_execution(&mut initial_call_frame)?; @@ -571,11 +566,27 @@ impl<'a> VM<'a> { fn restore_cache_state(&mut self, call_frame: &CallFrame) { for (address, account_opt) in &call_frame.backup { if let Some(account) = account_opt { - cache::insert_account(&mut self.db.cache, *address, account.clone(), &mut None); + cache::insert_account(&mut self.db.cache, *address, account.clone()); } else { // remove from cache cache::remove_account(&mut self.db.cache, address, &mut None); } } } + + pub fn insert_account( + &mut self, + address: Address, + account: Account, + call_frame: &mut Option<&mut CallFrame>, + ) { + let previous_account = cache::insert_account(&mut self.db.cache, address, account); + + if let Some(call_frame) = call_frame { + call_frame + .backup + .entry(address) + .or_insert_with(|| previous_account.as_ref().map(|account| (*account).clone())); + }; + } } From e5e46fa48cdcf4938af02900257b08638d96386f Mon Sep 17 00:00:00 2001 From: JereSalo Date: Tue, 8 Apr 2025 08:22:59 -0300 Subject: [PATCH 10/47] remove option from insert_account --- crates/vm/levm/src/opcode_handlers/system.rs | 2 +- crates/vm/levm/src/vm.rs | 12 +++++------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/crates/vm/levm/src/opcode_handlers/system.rs b/crates/vm/levm/src/opcode_handlers/system.rs index b72a7d5b2b..52514a1eff 100644 --- a/crates/vm/levm/src/opcode_handlers/system.rs +++ b/crates/vm/levm/src/opcode_handlers/system.rs @@ -679,7 +679,7 @@ impl<'a> VM<'a> { } else { Account::new(new_balance, Bytes::new(), 1, Default::default()) }; - self.insert_account(new_address, new_account, &mut Some(current_call_frame)); + self.insert_account(new_address, new_account, current_call_frame); // 2. Increment sender's nonce. increment_account_nonce(self.db, deployer_address, &mut Some(current_call_frame))?; diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index 7603b87e82..3b9eafa9fb 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -578,15 +578,13 @@ impl<'a> VM<'a> { &mut self, address: Address, account: Account, - call_frame: &mut Option<&mut CallFrame>, + call_frame: &mut CallFrame, ) { let previous_account = cache::insert_account(&mut self.db.cache, address, account); - if let Some(call_frame) = call_frame { - call_frame - .backup - .entry(address) - .or_insert_with(|| previous_account.as_ref().map(|account| (*account).clone())); - }; + call_frame + .backup + .entry(address) + .or_insert_with(|| previous_account.as_ref().map(|account| (*account).clone())); } } From 7b6c4be3666732a61df750d5873bbc15decd23d3 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Tue, 8 Apr 2025 08:35:31 -0300 Subject: [PATCH 11/47] move remove_account --- crates/vm/levm/src/db/cache.rs | 21 ++------------------ crates/vm/levm/src/hooks/default_hook.rs | 2 +- crates/vm/levm/src/opcode_handlers/system.rs | 6 +----- crates/vm/levm/src/vm.rs | 11 +++++++++- 4 files changed, 14 insertions(+), 26 deletions(-) diff --git a/crates/vm/levm/src/db/cache.rs b/crates/vm/levm/src/db/cache.rs index b8366e4756..0b9f03f6ea 100644 --- a/crates/vm/levm/src/db/cache.rs +++ b/crates/vm/levm/src/db/cache.rs @@ -40,25 +40,8 @@ pub fn insert_account( cached_accounts.insert(address, account.clone()) } -pub fn remove_account( - cached_accounts: &mut CacheDB, - address: &Address, - call_frame: &mut Option<&mut CallFrame>, -) -> Option { - let account_option = cached_accounts.remove(address); - - // insert account_option cloned into call_frame backup if not already there - if let Some(call_frame) = call_frame { - if !call_frame.backup.contains_key(address) { - if let Some(account) = account_option.as_ref() { - call_frame.backup.insert(*address, Some((*account).clone())); - } else { - call_frame.backup.insert(*address, None); - } - } - } - - account_option +pub fn remove_account(cached_accounts: &mut CacheDB, address: &Address) -> Option { + cached_accounts.remove(address) } pub fn is_account_cached(cached_accounts: &CacheDB, address: &Address) -> bool { diff --git a/crates/vm/levm/src/hooks/default_hook.rs b/crates/vm/levm/src/hooks/default_hook.rs index 1ae6e71ac3..7108b875a3 100644 --- a/crates/vm/levm/src/hooks/default_hook.rs +++ b/crates/vm/levm/src/hooks/default_hook.rs @@ -354,7 +354,7 @@ impl Hook for DefaultHook { )?; } else { // We remove the receiver account from the cache, like nothing changed in it's state. - remove_account(&mut vm.db.cache, &receiver_address, &mut None); + remove_account(&mut vm.db.cache, &receiver_address); } increase_account_balance( diff --git a/crates/vm/levm/src/opcode_handlers/system.rs b/crates/vm/levm/src/opcode_handlers/system.rs index 52514a1eff..44fec26813 100644 --- a/crates/vm/levm/src/opcode_handlers/system.rs +++ b/crates/vm/levm/src/opcode_handlers/system.rs @@ -744,11 +744,7 @@ impl<'a> VM<'a> { )?; // Deployment failed so account shouldn't exist - cache::remove_account( - &mut self.db.cache, - &new_address, - &mut Some(current_call_frame), - ); + self.remove_account(new_address, current_call_frame); self.accrued_substate.created_accounts.remove(&new_address); // If revert we have to copy the return_data diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index 3b9eafa9fb..6bb03c7023 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -569,7 +569,7 @@ impl<'a> VM<'a> { cache::insert_account(&mut self.db.cache, *address, account.clone()); } else { // remove from cache - cache::remove_account(&mut self.db.cache, address, &mut None); + cache::remove_account(&mut self.db.cache, address); } } } @@ -587,4 +587,13 @@ impl<'a> VM<'a> { .entry(address) .or_insert_with(|| previous_account.as_ref().map(|account| (*account).clone())); } + + pub fn remove_account(&mut self, address: Address, call_frame: &mut CallFrame) { + let previous_account = cache::remove_account(&mut self.db.cache, &address); + + call_frame + .backup + .entry(address) + .or_insert_with(|| previous_account.as_ref().map(|account| (*account).clone())); + } } From 62fda8e109933ef50a17575cd552a39899d2757d Mon Sep 17 00:00:00 2001 From: JereSalo Date: Tue, 8 Apr 2025 09:01:00 -0300 Subject: [PATCH 12/47] make things more tidy --- crates/vm/levm/src/db/cache.rs | 18 ++----------- crates/vm/levm/src/opcode_handlers/system.rs | 1 - crates/vm/levm/src/utils.rs | 28 +++++++++++--------- crates/vm/levm/src/vm.rs | 2 +- 4 files changed, 19 insertions(+), 30 deletions(-) diff --git a/crates/vm/levm/src/db/cache.rs b/crates/vm/levm/src/db/cache.rs index 0b9f03f6ea..c506ef585c 100644 --- a/crates/vm/levm/src/db/cache.rs +++ b/crates/vm/levm/src/db/cache.rs @@ -1,4 +1,4 @@ -use crate::{call_frame::CallFrame, Account}; +use crate::Account; use ethrex_common::Address; use std::collections::HashMap; @@ -14,22 +14,8 @@ pub fn get_account<'cache>( pub fn get_account_mut<'cache>( cached_accounts: &'cache mut CacheDB, address: &Address, - call_frame: &mut Option<&mut CallFrame>, ) -> Option<&'cache mut Account> { - let account_option = cached_accounts.get_mut(address); - - // insert account_option cloned into call_frame backup if not already there - if let Some(call_frame) = call_frame { - if !call_frame.backup.contains_key(address) { - if let Some(account) = account_option.as_ref() { - call_frame.backup.insert(*address, Some((*account).clone())); - } else { - call_frame.backup.insert(*address, None); - } - } - } - - account_option + cached_accounts.get_mut(address) } pub fn insert_account( diff --git a/crates/vm/levm/src/opcode_handlers/system.rs b/crates/vm/levm/src/opcode_handlers/system.rs index 44fec26813..542edd90b0 100644 --- a/crates/vm/levm/src/opcode_handlers/system.rs +++ b/crates/vm/levm/src/opcode_handlers/system.rs @@ -1,7 +1,6 @@ use crate::{ call_frame::CallFrame, constants::{CREATE_DEPLOYMENT_FAIL, INIT_CODE_MAX_SIZE, REVERT_FOR_CALL, SUCCESS_FOR_CALL}, - db::cache, errors::{InternalError, OpcodeResult, OutOfGasError, TxResult, VMError}, gas_cost::{self, max_message_call_gas, SELFDESTRUCT_REFUND}, memory::{self, calculate_memory_size}, diff --git a/crates/vm/levm/src/utils.rs b/crates/vm/levm/src/utils.rs index 9af42175cd..276c5efb98 100644 --- a/crates/vm/levm/src/utils.rs +++ b/crates/vm/levm/src/utils.rs @@ -160,6 +160,9 @@ pub fn get_account_no_push_cache( } } +/// Gets mutable account, first checking the cache and then the database +/// (caching in the second case) +/// This isn't a method of VM because it allows us to use it during VM initialization. pub fn get_account_mut_vm<'a>( db: &'a mut GeneralizedDatabase, address: Address, @@ -173,8 +176,18 @@ pub fn get_account_mut_vm<'a>( }; cache::insert_account(&mut db.cache, address, account.clone()); } - cache::get_account_mut(&mut db.cache, &address, call_frame) - .ok_or(VMError::Internal(InternalError::AccountNotFound)) + + let original_account = cache::get_account_mut(&mut db.cache, &address) + .ok_or(VMError::Internal(InternalError::AccountNotFound))?; + + if let Some(call_frame) = call_frame { + call_frame + .backup + .entry(address) + .or_insert_with(|| Some(original_account.clone())); + }; + + Ok(original_account) } pub fn increase_account_balance( @@ -567,16 +580,7 @@ pub fn eip7702_set_access_code( // As a special case, if address is 0x0000000000000000000000000000000000000000 do not write the designation. // Clear the account’s code and reset the account’s code hash to the empty hash. - let auth_account = - match cache::get_account_mut(&mut db.cache, &authority_address, &mut None) { - Some(account_mut) => account_mut, - None => { - // This is to add the account to the cache - // NOTE: Refactor in the future - get_account(db, authority_address)?; - get_account_mut_vm(db, authority_address, &mut None)? - } - }; + let auth_account = get_account_mut_vm(db, authority_address, &mut None)?; auth_account.info.bytecode = if auth_tuple.address != Address::zero() { delegation_bytes.into() diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index 6bb03c7023..c9f5f40aa3 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -595,5 +595,5 @@ impl<'a> VM<'a> { .backup .entry(address) .or_insert_with(|| previous_account.as_ref().map(|account| (*account).clone())); - } + } } From aabbdaad086c4c4ab8db7ca8a92bf71aabf3e980 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Tue, 8 Apr 2025 09:06:52 -0300 Subject: [PATCH 13/47] run cargo fmt --- crates/vm/levm/src/vm.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index c9f5f40aa3..6bb03c7023 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -595,5 +595,5 @@ impl<'a> VM<'a> { .backup .entry(address) .or_insert_with(|| previous_account.as_ref().map(|account| (*account).clone())); - } + } } From b992149e21497ea449cef04bda57a491ccb895f0 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Tue, 8 Apr 2025 09:12:52 -0300 Subject: [PATCH 14/47] minimal changes --- crates/vm/levm/Makefile | 2 +- crates/vm/levm/bench/revm_comparison/src/lib.rs | 7 ++++--- crates/vm/levm/src/call_frame.rs | 4 ++-- crates/vm/levm/src/db/cache.rs | 2 +- crates/vm/levm/src/opcode_handlers/system.rs | 8 ++++---- crates/vm/levm/src/utils.rs | 2 +- crates/vm/levm/src/vm.rs | 8 ++++---- 7 files changed, 17 insertions(+), 16 deletions(-) diff --git a/crates/vm/levm/Makefile b/crates/vm/levm/Makefile index d49a1b8261..c96a2ac288 100644 --- a/crates/vm/levm/Makefile +++ b/crates/vm/levm/Makefile @@ -86,7 +86,7 @@ BENCH_FACT_ITERATIONS := 57 BENCH_FACT_REC_ITERATIONS := 57 BENCH_FIB_ITERATIONS := 57 BENCH_HASHES_ITERATIONS := 57 -BENCH_BUBBLESORT_ITERATIONS := 10 # Size of the array to sort +BENCH_BUBBLESORT_ITERATIONS := 100 # Size of the array to sort BENCH_MINT_ITERATIONS := 500 BENCH_TRANSFER_ITERATIONS := 500 BENCH_APPROVAL_ITERATIONS := 500 diff --git a/crates/vm/levm/bench/revm_comparison/src/lib.rs b/crates/vm/levm/bench/revm_comparison/src/lib.rs index cecf99e185..2ea3edaeb5 100644 --- a/crates/vm/levm/bench/revm_comparison/src/lib.rs +++ b/crates/vm/levm/bench/revm_comparison/src/lib.rs @@ -84,15 +84,16 @@ pub fn run_with_levm(program: &str, runs: u64, calldata: &str) { ), ); - for i in 0..runs - 1 { - let mut vm = new_vm_with_bytecode(&mut db, i).unwrap(); + // when using stateful execute() we have to use nonce when instantiating the vm. Otherwise use 0. + for _nonce in 0..runs - 1 { + let mut vm = new_vm_with_bytecode(&mut db, 0).unwrap(); vm.call_frames.last_mut().unwrap().calldata = calldata.clone(); vm.env.gas_limit = u64::MAX - 1; vm.env.block_gas_limit = u64::MAX; let tx_report = black_box(vm.stateless_execute().unwrap()); assert!(tx_report.result == TxResult::Success); } - let mut vm = new_vm_with_bytecode(&mut db, runs - 1).unwrap(); + let mut vm = new_vm_with_bytecode(&mut db, 0).unwrap(); vm.call_frames.last_mut().unwrap().calldata = calldata.clone(); vm.env.gas_limit = u64::MAX - 1; vm.env.block_gas_limit = u64::MAX; diff --git a/crates/vm/levm/src/call_frame.rs b/crates/vm/levm/src/call_frame.rs index 8374603958..fe1d2252a2 100644 --- a/crates/vm/levm/src/call_frame.rs +++ b/crates/vm/levm/src/call_frame.rs @@ -86,8 +86,8 @@ pub struct CallFrame { pub valid_jump_destinations: HashSet, /// This is set to true if the function that created this callframe is CREATE or CREATE2 pub create_op_called: bool, - /// backup cache - pub backup: HashMap>, + /// Everytime we want to write an account during execution of a callframe we store the pre-write state so that we can restore if it reverts + pub previous_cache_state: HashMap>, } impl CallFrame { diff --git a/crates/vm/levm/src/db/cache.rs b/crates/vm/levm/src/db/cache.rs index c506ef585c..44b3c3a9d5 100644 --- a/crates/vm/levm/src/db/cache.rs +++ b/crates/vm/levm/src/db/cache.rs @@ -23,7 +23,7 @@ pub fn insert_account( address: Address, account: Account, ) -> Option { - cached_accounts.insert(address, account.clone()) + cached_accounts.insert(address, account) } pub fn remove_account(cached_accounts: &mut CacheDB, address: &Address) -> Option { diff --git a/crates/vm/levm/src/opcode_handlers/system.rs b/crates/vm/levm/src/opcode_handlers/system.rs index 542edd90b0..d3141392e9 100644 --- a/crates/vm/levm/src/opcode_handlers/system.rs +++ b/crates/vm/levm/src/opcode_handlers/system.rs @@ -726,9 +726,9 @@ impl<'a> VM<'a> { .stack .push(address_to_word(new_address))?; - for (address, account_opt) in new_call_frame.backup { + for (address, account_opt) in new_call_frame.previous_cache_state { current_call_frame - .backup + .previous_cache_state .entry(address) .or_insert(account_opt); } @@ -866,9 +866,9 @@ impl<'a> VM<'a> { match tx_report.result { TxResult::Success => { current_call_frame.stack.push(SUCCESS_FOR_CALL)?; - for (address, account_opt) in new_call_frame.backup { + for (address, account_opt) in new_call_frame.previous_cache_state { current_call_frame - .backup + .previous_cache_state .entry(address) .or_insert(account_opt); } diff --git a/crates/vm/levm/src/utils.rs b/crates/vm/levm/src/utils.rs index 276c5efb98..dbce4c47ec 100644 --- a/crates/vm/levm/src/utils.rs +++ b/crates/vm/levm/src/utils.rs @@ -182,7 +182,7 @@ pub fn get_account_mut_vm<'a>( if let Some(call_frame) = call_frame { call_frame - .backup + .previous_cache_state .entry(address) .or_insert_with(|| Some(original_account.clone())); }; diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index 6bb03c7023..6ed65d83c7 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -411,7 +411,7 @@ impl<'a> VM<'a> { return Err(e); } // clear callframe backup because prepare_execution succeeded - initial_call_frame.backup = HashMap::new(); + initial_call_frame.previous_cache_state = HashMap::new(); // In CREATE type transactions: // Add created contract to cache, reverting transaction if the address is already occupied @@ -564,7 +564,7 @@ impl<'a> VM<'a> { } fn restore_cache_state(&mut self, call_frame: &CallFrame) { - for (address, account_opt) in &call_frame.backup { + for (address, account_opt) in &call_frame.previous_cache_state { if let Some(account) = account_opt { cache::insert_account(&mut self.db.cache, *address, account.clone()); } else { @@ -583,7 +583,7 @@ impl<'a> VM<'a> { let previous_account = cache::insert_account(&mut self.db.cache, address, account); call_frame - .backup + .previous_cache_state .entry(address) .or_insert_with(|| previous_account.as_ref().map(|account| (*account).clone())); } @@ -592,7 +592,7 @@ impl<'a> VM<'a> { let previous_account = cache::remove_account(&mut self.db.cache, &address); call_frame - .backup + .previous_cache_state .entry(address) .or_insert_with(|| previous_account.as_ref().map(|account| (*account).clone())); } From 1fe19c79cfcd4b623b170b1d5214cf69cff5ddf9 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Tue, 8 Apr 2025 09:52:50 -0300 Subject: [PATCH 15/47] make database interactions be methods of GeneralizedDatabase --- cmd/ef_tests/state/runner/levm_runner.rs | 4 +- cmd/ef_tests/state/utils.rs | 2 +- crates/vm/backends/levm/mod.rs | 3 +- crates/vm/backends/mod.rs | 2 +- .../vm/levm/bench/revm_comparison/src/lib.rs | 4 +- crates/vm/levm/src/db/mod.rs | 1 + crates/vm/levm/src/execution_handlers.rs | 3 +- crates/vm/levm/src/hooks/default_hook.rs | 31 ++-- crates/vm/levm/src/opcode_handlers/block.rs | 2 +- .../levm/src/opcode_handlers/environment.rs | 16 +- crates/vm/levm/src/opcode_handlers/system.rs | 95 +++++------ crates/vm/levm/src/utils.rs | 147 ++---------------- crates/vm/levm/src/vm.rs | 44 +----- 13 files changed, 95 insertions(+), 259 deletions(-) diff --git a/cmd/ef_tests/state/runner/levm_runner.rs b/cmd/ef_tests/state/runner/levm_runner.rs index 13e2dd786b..4ce847e26e 100644 --- a/cmd/ef_tests/state/runner/levm_runner.rs +++ b/cmd/ef_tests/state/runner/levm_runner.rs @@ -9,9 +9,7 @@ use ethrex_common::{ H256, U256, }; use ethrex_levm::{ - errors::{ExecutionReport, TxValidationError, VMError}, - vm::{EVMConfig, GeneralizedDatabase, VM}, - Environment, + db::gen_db::GeneralizedDatabase, errors::{ExecutionReport, TxValidationError, VMError}, vm::{EVMConfig, VM}, Environment }; use ethrex_storage::AccountUpdate; use ethrex_vm::backends; diff --git a/cmd/ef_tests/state/utils.rs b/cmd/ef_tests/state/utils.rs index c968047700..98e5d94f89 100644 --- a/cmd/ef_tests/state/utils.rs +++ b/cmd/ef_tests/state/utils.rs @@ -5,7 +5,7 @@ use crate::{ types::{EFTest, EFTestTransaction}, }; use ethrex_common::{types::Genesis, H256, U256}; -use ethrex_levm::{db::CacheDB, vm::GeneralizedDatabase}; +use ethrex_levm::db::{gen_db::GeneralizedDatabase, CacheDB}; use ethrex_storage::{EngineType, Store}; use ethrex_vm::{ backends::revm::db::{evm_state, EvmState}, diff --git a/crates/vm/backends/levm/mod.rs b/crates/vm/backends/levm/mod.rs index 90554be954..8be383d38f 100644 --- a/crates/vm/backends/levm/mod.rs +++ b/crates/vm/backends/levm/mod.rs @@ -18,7 +18,8 @@ use ethrex_common::{ }, Address, H256, U256, }; -use ethrex_levm::vm::{GeneralizedDatabase, Substate}; +use ethrex_levm::db::gen_db::GeneralizedDatabase; +use ethrex_levm::vm::Substate; use ethrex_levm::AccountInfo as LevmAccountInfo; use ethrex_levm::{ errors::{ExecutionReport, TxResult, VMError}, diff --git a/crates/vm/backends/mod.rs b/crates/vm/backends/mod.rs index d6ebf10a5c..8c39d13284 100644 --- a/crates/vm/backends/mod.rs +++ b/crates/vm/backends/mod.rs @@ -11,8 +11,8 @@ use ethrex_common::types::{ AccessList, Block, BlockHeader, Fork, GenericTransaction, Receipt, Transaction, Withdrawal, }; use ethrex_common::{Address, H256}; +use ethrex_levm::db::gen_db::GeneralizedDatabase; use ethrex_levm::db::CacheDB; -use ethrex_levm::vm::GeneralizedDatabase; use ethrex_storage::Store; use ethrex_storage::{error::StoreError, AccountUpdate}; use levm::LEVM; diff --git a/crates/vm/levm/bench/revm_comparison/src/lib.rs b/crates/vm/levm/bench/revm_comparison/src/lib.rs index 2ea3edaeb5..87f01e3ee9 100644 --- a/crates/vm/levm/bench/revm_comparison/src/lib.rs +++ b/crates/vm/levm/bench/revm_comparison/src/lib.rs @@ -4,9 +4,9 @@ use ethrex_common::{ Address as EthrexAddress, U256, }; use ethrex_levm::{ - db::{cache, CacheDB}, + db::{cache, gen_db::GeneralizedDatabase, CacheDB}, errors::{TxResult, VMError}, - vm::{GeneralizedDatabase, VM}, + vm::VM, Environment, }; use ethrex_vm::db::ExecutionDB; diff --git a/crates/vm/levm/src/db/mod.rs b/crates/vm/levm/src/db/mod.rs index 5454450a92..96b06cea3b 100644 --- a/crates/vm/levm/src/db/mod.rs +++ b/crates/vm/levm/src/db/mod.rs @@ -9,6 +9,7 @@ use ethrex_common::{ pub mod cache; pub use cache::CacheDB; pub mod error; +pub mod gen_db; pub trait Database: Send + Sync { fn get_account_info(&self, address: Address) -> Result; diff --git a/crates/vm/levm/src/execution_handlers.rs b/crates/vm/levm/src/execution_handlers.rs index 0ec42f484b..8859ebb106 100644 --- a/crates/vm/levm/src/execution_handlers.rs +++ b/crates/vm/levm/src/execution_handlers.rs @@ -205,8 +205,7 @@ impl<'a> VM<'a> { match validate_create { Ok(new_address) => { // Set bytecode to new account if success - update_account_bytecode( - self.db, + self.db.update_account_bytecode( new_address, contract_code, &mut Some(current_call_frame), diff --git a/crates/vm/levm/src/hooks/default_hook.rs b/crates/vm/levm/src/hooks/default_hook.rs index 7108b875a3..94c16a1736 100644 --- a/crates/vm/levm/src/hooks/default_hook.rs +++ b/crates/vm/levm/src/hooks/default_hook.rs @@ -34,7 +34,7 @@ impl Hook for DefaultHook { initial_call_frame: &mut CallFrame, ) -> Result<(), VMError> { let sender_address = vm.env.origin; - let sender_account = get_account(vm.db, sender_address)?; + let sender_account = vm.db.get_account(sender_address)?; if vm.env.config.fork >= Fork::Prague { // check for gas limit is grater or equal than the minimum required @@ -148,13 +148,9 @@ impl Hook for DefaultHook { // technically, the sender will not be able to pay it. // (3) INSUFFICIENT_ACCOUNT_FUNDS - decrease_account_balance( - vm.db, - sender_address, - up_front_cost, - &mut Some(initial_call_frame), - ) - .map_err(|_| TxValidationError::InsufficientAccountFunds)?; + vm.db + .decrease_account_balance(sender_address, up_front_cost, &mut Some(initial_call_frame)) + .map_err(|_| TxValidationError::InsufficientAccountFunds)?; // (4) INSUFFICIENT_MAX_FEE_PER_GAS if vm.env.tx_max_fee_per_gas.unwrap_or(vm.env.gas_price) < vm.env.base_fee_per_gas { @@ -307,8 +303,7 @@ impl Hook for DefaultHook { } else { // Transfer value to receiver // It's here to avoid storing the "to" address in the cache before eip7702_set_access_code() step 7). - increase_account_balance( - vm.db, + vm.db.increase_account_balance( initial_call_frame.to, initial_call_frame.msg_value, &mut Some(initial_call_frame), @@ -334,7 +329,7 @@ impl Hook for DefaultHook { // 1. Undo value transfer if the transaction has reverted if let TxResult::Revert(_) = report.result { - let existing_account = get_account(vm.db, receiver_address)?; //TO Account + let existing_account = vm.db.get_account(receiver_address)?; //TO Account if has_delegation(&existing_account.info)? { // This is the case where the "to" address and the @@ -346,8 +341,7 @@ impl Hook for DefaultHook { // If transaction execution results in failure (any // exceptional condition or code reverting), setting // delegation designations is not rolled back. - decrease_account_balance( - vm.db, + vm.db.decrease_account_balance( receiver_address, initial_call_frame.msg_value, &mut None, @@ -357,8 +351,7 @@ impl Hook for DefaultHook { remove_account(&mut vm.db.cache, &receiver_address); } - increase_account_balance( - vm.db, + vm.db.increase_account_balance( sender_address, initial_call_frame.msg_value, &mut None, @@ -402,7 +395,8 @@ impl Hook for DefaultHook { .checked_mul(U256::from(gas_to_return)) .ok_or(VMError::Internal(InternalError::UndefinedState(1)))?; - increase_account_balance(vm.db, sender_address, wei_return_amount, &mut None)?; + vm.db + .increase_account_balance(sender_address, wei_return_amount, &mut None)?; // 3. Pay coinbase fee let coinbase_address = vm.env.coinbase; @@ -421,14 +415,15 @@ impl Hook for DefaultHook { .ok_or(VMError::BalanceOverflow)?; if coinbase_fee != U256::zero() { - increase_account_balance(vm.db, coinbase_address, coinbase_fee, &mut None)?; + vm.db + .increase_account_balance(coinbase_address, coinbase_fee, &mut None)?; }; // 4. Destruct addresses in vm.estruct set. // In Cancun the only addresses destroyed are contracts created in this transaction let selfdestruct_set = vm.accrued_substate.selfdestruct_set.clone(); for address in selfdestruct_set { - let account_to_remove = get_account_mut_vm(vm.db, address, &mut None)?; + let account_to_remove = vm.db.get_account_mut_vm(address, &mut None)?; *account_to_remove = Account::default(); } diff --git a/crates/vm/levm/src/opcode_handlers/block.rs b/crates/vm/levm/src/opcode_handlers/block.rs index d4afaa3ade..1791f2331b 100644 --- a/crates/vm/levm/src/opcode_handlers/block.rs +++ b/crates/vm/levm/src/opcode_handlers/block.rs @@ -150,7 +150,7 @@ impl<'a> VM<'a> { } current_call_frame.increase_consumed_gas(gas_cost::SELFBALANCE)?; - let balance = get_account(self.db, current_call_frame.to)?.info.balance; + let balance = self.db.get_account(current_call_frame.to)?.info.balance; current_call_frame.stack.push(balance)?; Ok(OpcodeResult::Continue { pc_increment: 1 }) diff --git a/crates/vm/levm/src/opcode_handlers/environment.rs b/crates/vm/levm/src/opcode_handlers/environment.rs index 324738d43a..dadf6e8508 100644 --- a/crates/vm/levm/src/opcode_handlers/environment.rs +++ b/crates/vm/levm/src/opcode_handlers/environment.rs @@ -3,7 +3,7 @@ use crate::{ errors::{InternalError, OpcodeResult, VMError}, gas_cost::{self}, memory::{self, calculate_memory_size}, - utils::{access_account, word_to_address}, + utils::word_to_address, vm::VM, }; use ethrex_common::{types::Fork, U256}; @@ -36,8 +36,9 @@ impl<'a> VM<'a> { ) -> Result { let address = word_to_address(current_call_frame.stack.pop()?); - let (account_info, address_was_cold) = - access_account(self.db, &mut self.accrued_substate, address)?; + let (account_info, address_was_cold) = self + .db + .access_account(&mut self.accrued_substate, address)?; current_call_frame .increase_consumed_gas(gas_cost::balance(address_was_cold, self.env.config.fork)?)?; @@ -282,8 +283,9 @@ impl<'a> VM<'a> { ) -> Result { let address = word_to_address(current_call_frame.stack.pop()?); - let (account_info, address_was_cold) = - access_account(self.db, &mut self.accrued_substate, address)?; + let (account_info, address_was_cold) = self + .db + .access_account(&mut self.accrued_substate, address)?; current_call_frame.increase_consumed_gas(gas_cost::extcodesize( address_was_cold, @@ -312,7 +314,7 @@ impl<'a> VM<'a> { .map_err(|_| VMError::VeryLargeNumber)?; let (account_info, address_was_cold) = - access_account(self.db, &mut self.accrued_substate, address)?; + self.db.access_account(&mut self.accrued_substate, address)?; let new_memory_size = calculate_memory_size(dest_offset, size)?; @@ -438,7 +440,7 @@ impl<'a> VM<'a> { let address = word_to_address(current_call_frame.stack.pop()?); let (account_info, address_was_cold) = - access_account(self.db, &mut self.accrued_substate, address)?; + self.db.access_account(&mut self.accrued_substate, address)?; current_call_frame.increase_consumed_gas(gas_cost::extcodehash( address_was_cold, diff --git a/crates/vm/levm/src/opcode_handlers/system.rs b/crates/vm/levm/src/opcode_handlers/system.rs index d3141392e9..d7654999ae 100644 --- a/crates/vm/levm/src/opcode_handlers/system.rs +++ b/crates/vm/levm/src/opcode_handlers/system.rs @@ -46,7 +46,7 @@ impl<'a> VM<'a> { let new_memory_size = new_memory_size_for_args.max(new_memory_size_for_return_data); let (account_info, address_was_cold) = - access_account(self.db, &mut self.accrued_substate, callee)?; + self.db.access_account(&mut self.accrued_substate, callee)?; let (is_delegation, eip7702_gas_consumed, code_address, bytecode) = eip7702_get_code(self.db, &mut self.accrued_substate, callee)?; @@ -126,8 +126,9 @@ impl<'a> VM<'a> { calculate_memory_size(return_data_start_offset, return_data_size)?; let new_memory_size = new_memory_size_for_args.max(new_memory_size_for_return_data); - let (_account_info, address_was_cold) = - access_account(self.db, &mut self.accrued_substate, code_address)?; + let (_account_info, address_was_cold) = self + .db + .access_account(&mut self.accrued_substate, code_address)?; let (is_delegation, eip7702_gas_consumed, code_address, bytecode) = eip7702_get_code(self.db, &mut self.accrued_substate, code_address)?; @@ -231,8 +232,9 @@ impl<'a> VM<'a> { .map_err(|_err| VMError::VeryLargeNumber)?; // GAS - let (_account_info, address_was_cold) = - access_account(self.db, &mut self.accrued_substate, code_address)?; + let (_account_info, address_was_cold) = self + .db + .access_account(&mut self.accrued_substate, code_address)?; let current_memory_size = current_call_frame.memory.len(); let new_memory_size_for_args = calculate_memory_size(args_start_offset, args_size)?; @@ -312,8 +314,9 @@ impl<'a> VM<'a> { .map_err(|_err| VMError::VeryLargeNumber)?; // GAS - let (_account_info, address_was_cold) = - access_account(self.db, &mut self.accrued_substate, code_address)?; + let (_account_info, address_was_cold) = self + .db + .access_account(&mut self.accrued_substate, code_address)?; let current_memory_size = current_call_frame.memory.len(); let new_memory_size_for_args = calculate_memory_size(args_start_offset, args_size)?; @@ -495,11 +498,13 @@ impl<'a> VM<'a> { let target_address = word_to_address(current_call_frame.stack.pop()?); - let (target_account_info, target_account_is_cold) = - access_account(self.db, &mut self.accrued_substate, target_address)?; + let (target_account_info, target_account_is_cold) = self + .db + .access_account(&mut self.accrued_substate, target_address)?; - let (current_account_info, _current_account_is_cold) = - access_account(self.db, &mut self.accrued_substate, current_call_frame.to)?; + let (current_account_info, _current_account_is_cold) = self + .db + .access_account(&mut self.accrued_substate, current_call_frame.to)?; let balance_to_transfer = current_account_info.balance; let account_is_empty = if self.env.config.fork >= Fork::SpuriousDragon { @@ -516,14 +521,12 @@ impl<'a> VM<'a> { // [EIP-6780] - SELFDESTRUCT only in same transaction from CANCUN if self.env.config.fork >= Fork::Cancun { - increase_account_balance( - self.db, + self.db.increase_account_balance( target_address, balance_to_transfer, &mut Some(current_call_frame), )?; - decrease_account_balance( - self.db, + self.db.decrease_account_balance( current_call_frame.to, balance_to_transfer, &mut Some(current_call_frame), @@ -536,32 +539,25 @@ impl<'a> VM<'a> { .contains(¤t_call_frame.to) { // If target is the same as the contract calling, Ether will be burnt. - get_account_mut_vm( - self.db, - current_call_frame.to, - &mut Some(current_call_frame), - )? - .info - .balance = U256::zero(); + self.db + .get_account_mut_vm(current_call_frame.to, &mut Some(current_call_frame))? + .info + .balance = U256::zero(); self.accrued_substate .selfdestruct_set .insert(current_call_frame.to); } } else { - increase_account_balance( - self.db, + self.db.increase_account_balance( target_address, balance_to_transfer, &mut Some(current_call_frame), )?; - get_account_mut_vm( - self.db, - current_call_frame.to, - &mut Some(current_call_frame), - )? - .info - .balance = U256::zero(); + self.db + .get_account_mut_vm(current_call_frame.to, &mut Some(current_call_frame))? + .info + .balance = U256::zero(); // [EIP-3529](https://eips.ethereum.org/EIPS/eip-3529) // https://github.com/ethereum/execution-specs/blob/master/src/ethereum/constantinople/vm/instructions/system.py#L471 @@ -614,8 +610,10 @@ impl<'a> VM<'a> { let deployer_address = current_call_frame.to; - let deployer_account_info = - access_account(self.db, &mut self.accrued_substate, deployer_address)?.0; + let deployer_account_info = self + .db + .access_account(&mut self.accrued_substate, deployer_address)? + .0; let code = Bytes::from( memory::load_range( @@ -657,7 +655,7 @@ impl<'a> VM<'a> { } // THIRD: Validations that push 0 to the stack without returning reserved gas but incrementing deployer's nonce - let new_account = get_account(self.db, new_address)?; + let new_account = self.db.get_account(new_address)?; if new_account.has_code_or_nonce() { increment_account_nonce(self.db, deployer_address, &mut Some(current_call_frame))?; current_call_frame.stack.push(CREATE_DEPLOYMENT_FAIL)?; @@ -678,14 +676,14 @@ impl<'a> VM<'a> { } else { Account::new(new_balance, Bytes::new(), 1, Default::default()) }; - self.insert_account(new_address, new_account, current_call_frame); + self.db + .insert_account(new_address, new_account, current_call_frame); // 2. Increment sender's nonce. increment_account_nonce(self.db, deployer_address, &mut Some(current_call_frame))?; // 3. Decrease sender's balance. - decrease_account_balance( - self.db, + self.db.decrease_account_balance( deployer_address, value_in_wei_to_send, &mut Some(current_call_frame), @@ -735,15 +733,14 @@ impl<'a> VM<'a> { } TxResult::Revert(err) => { // Return value to sender - increase_account_balance( - self.db, + self.db.increase_account_balance( deployer_address, value_in_wei_to_send, &mut Some(current_call_frame), )?; // Deployment failed so account shouldn't exist - self.remove_account(new_address, current_call_frame); + self.db.remove_account(new_address, current_call_frame); self.accrued_substate.created_accounts.remove(&new_address); // If revert we have to copy the return_data @@ -785,8 +782,10 @@ impl<'a> VM<'a> { memory::load_range(&mut current_call_frame.memory, args_offset, args_size)?.to_vec(); // 1. Validate sender has enough value - let sender_account_info = - access_account(self.db, &mut self.accrued_substate, msg_sender)?.0; + let sender_account_info = self + .db + .access_account(&mut self.accrued_substate, msg_sender)? + .0; if should_transfer_value && sender_account_info.balance < value { current_call_frame.gas_used = current_call_frame .gas_used @@ -836,8 +835,10 @@ impl<'a> VM<'a> { // Transfer value from caller to callee. if should_transfer_value { - decrease_account_balance(self.db, msg_sender, value, &mut Some(current_call_frame))?; - increase_account_balance(self.db, to, value, &mut Some(current_call_frame))?; + self.db + .decrease_account_balance(msg_sender, value, &mut Some(current_call_frame))?; + self.db + .increase_account_balance(to, value, &mut Some(current_call_frame))?; } let tx_report = self.run_execution(&mut new_call_frame)?; @@ -876,9 +877,9 @@ impl<'a> VM<'a> { TxResult::Revert(_) => { // Revert value transfer if should_transfer_value { - decrease_account_balance(self.db, to, value, &mut Some(current_call_frame))?; - increase_account_balance( - self.db, + self.db + .decrease_account_balance(to, value, &mut Some(current_call_frame))?; + self.db.increase_account_balance( msg_sender, value, &mut Some(current_call_frame), diff --git a/crates/vm/levm/src/utils.rs b/crates/vm/levm/src/utils.rs index dbce4c47ec..f98b39343f 100644 --- a/crates/vm/levm/src/utils.rs +++ b/crates/vm/levm/src/utils.rs @@ -1,10 +1,9 @@ use crate::{ - account::Account, call_frame::CallFrame, constants::*, db::{ cache::{self}, - error::DatabaseError, + gen_db::GeneralizedDatabase, }, errors::{InternalError, OutOfGasError, TxValidationError, VMError}, gas_cost::{ @@ -12,7 +11,7 @@ use crate::{ BLOB_GAS_PER_BLOB, COLD_ADDRESS_ACCESS_COST, CREATE_BASE_COST, WARM_ADDRESS_ACCESS_COST, }, opcodes::Opcode, - vm::{EVMConfig, GeneralizedDatabase, Substate}, + vm::{EVMConfig, Substate}, AccountInfo, }; use bytes::Bytes; @@ -123,132 +122,6 @@ pub fn get_valid_jump_destinations(code: &Bytes) -> Result, VMErr Ok(valid_jump_destinations) } -// ================== Account related functions ===================== -/// Gets account, first checking the cache and then the database -/// (caching in the second case) -pub fn get_account( - db: &mut GeneralizedDatabase, - address: Address, -) -> Result { - match cache::get_account(&db.cache, &address) { - Some(acc) => Ok(acc.clone()), - None => { - let account_info = db.store.get_account_info(address)?; - let account = Account { - info: account_info, - storage: HashMap::new(), - }; - cache::insert_account(&mut db.cache, address, account.clone()); - Ok(account) - } - } -} - -pub fn get_account_no_push_cache( - db: &GeneralizedDatabase, - address: Address, -) -> Result { - match cache::get_account(&db.cache, &address) { - Some(acc) => Ok(acc.clone()), - None => { - let account_info = db.store.get_account_info(address)?; - Ok(Account { - info: account_info, - storage: HashMap::new(), - }) - } - } -} - -/// Gets mutable account, first checking the cache and then the database -/// (caching in the second case) -/// This isn't a method of VM because it allows us to use it during VM initialization. -pub fn get_account_mut_vm<'a>( - db: &'a mut GeneralizedDatabase, - address: Address, - call_frame: &mut Option<&mut CallFrame>, -) -> Result<&'a mut Account, VMError> { - if !cache::is_account_cached(&db.cache, &address) { - let account_info = db.store.get_account_info(address)?; - let account = Account { - info: account_info, - storage: HashMap::new(), - }; - cache::insert_account(&mut db.cache, address, account.clone()); - } - - let original_account = cache::get_account_mut(&mut db.cache, &address) - .ok_or(VMError::Internal(InternalError::AccountNotFound))?; - - if let Some(call_frame) = call_frame { - call_frame - .previous_cache_state - .entry(address) - .or_insert_with(|| Some(original_account.clone())); - }; - - Ok(original_account) -} - -pub fn increase_account_balance( - db: &mut GeneralizedDatabase, - address: Address, - increase: U256, - call_frame: &mut Option<&mut CallFrame>, -) -> Result<(), VMError> { - let account = get_account_mut_vm(db, address, call_frame)?; - account.info.balance = account - .info - .balance - .checked_add(increase) - .ok_or(VMError::BalanceOverflow)?; - Ok(()) -} - -pub fn decrease_account_balance( - db: &mut GeneralizedDatabase, - address: Address, - decrease: U256, - call_frame: &mut Option<&mut CallFrame>, -) -> Result<(), VMError> { - let account = get_account_mut_vm(db, address, call_frame)?; - account.info.balance = account - .info - .balance - .checked_sub(decrease) - .ok_or(VMError::BalanceUnderflow)?; - Ok(()) -} - -/// Accesses to an account's information. -/// -/// Accessed accounts are stored in the `touched_accounts` set. -/// Accessed accounts take place in some gas cost computation. -pub fn access_account( - db: &mut GeneralizedDatabase, - accrued_substate: &mut Substate, - address: Address, -) -> Result<(AccountInfo, bool), DatabaseError> { - let address_was_cold = accrued_substate.touched_accounts.insert(address); - let account = match cache::get_account(&db.cache, &address) { - Some(account) => account.info.clone(), - None => db.store.get_account_info(address)?, - }; - Ok((account, address_was_cold)) -} - -// ================== Bytecode related functions ===================== -pub fn update_account_bytecode( - db: &mut GeneralizedDatabase, - address: Address, - new_bytecode: Bytes, - call_frame: &mut Option<&mut CallFrame>, -) -> Result<(), VMError> { - let account = get_account_mut_vm(db, address, call_frame)?; - account.info.bytecode = new_bytecode; - Ok(()) -} - // ==================== Gas related functions ======================= pub fn get_intrinsic_gas( is_create: bool, @@ -445,7 +318,7 @@ pub fn increment_account_nonce( address: Address, call_frame: &mut Option<&mut CallFrame>, ) -> Result { - let account = get_account_mut_vm(db, address, call_frame)?; + let account = db.get_account_mut_vm(address, call_frame)?; account.info.nonce = account .info .nonce @@ -459,7 +332,7 @@ pub fn decrement_account_nonce( address: Address, call_frame: &mut Option<&mut CallFrame>, ) -> Result<(), VMError> { - let account = get_account_mut_vm(db, address, call_frame)?; + let account = db.get_account_mut_vm(address, call_frame)?; account.info.nonce = account .info .nonce @@ -545,7 +418,7 @@ pub fn eip7702_set_access_code( // 4. Add authority to accessed_addresses (as defined in EIP-2929). accrued_substate.touched_accounts.insert(authority_address); - let authority_account_info = get_account_no_push_cache(db, authority_address)?.info; + let authority_account_info = db.get_account_no_push_cache(authority_address)?.info; // 5. Verify the code of authority is either empty or already delegated. let empty_or_delegated = @@ -580,7 +453,7 @@ pub fn eip7702_set_access_code( // As a special case, if address is 0x0000000000000000000000000000000000000000 do not write the designation. // Clear the account’s code and reset the account’s code hash to the empty hash. - let auth_account = get_account_mut_vm(db, authority_address, &mut None)?; + let auth_account = db.get_account_mut_vm(authority_address, &mut None)?; auth_account.info.bytecode = if auth_tuple.address != Address::zero() { delegation_bytes.into() @@ -594,12 +467,12 @@ pub fn eip7702_set_access_code( } let (code_address_info, _) = - access_account(db, accrued_substate, initial_call_frame.code_address)?; + db.access_account(accrued_substate, initial_call_frame.code_address)?; if has_delegation(&code_address_info)? { initial_call_frame.code_address = get_authorized_address(&code_address_info)?; let (auth_address_info, _) = - access_account(db, accrued_substate, initial_call_frame.code_address)?; + db.access_account(accrued_substate, initial_call_frame.code_address)?; initial_call_frame.bytecode = auth_address_info.bytecode.clone(); } else { @@ -703,7 +576,7 @@ pub fn eip7702_get_code( address: Address, ) -> Result<(bool, u64, Address, Bytes), VMError> { // Address is the delgated address - let account = get_account_no_push_cache(db, address)?; + let account = db.get_account_no_push_cache(address)?; let bytecode = account.info.bytecode.clone(); // If the Address doesn't have a delegation code @@ -725,7 +598,7 @@ pub fn eip7702_get_code( COLD_ADDRESS_ACCESS_COST }; - let authorized_bytecode = get_account_no_push_cache(db, auth_address)?.info.bytecode; + let authorized_bytecode = db.get_account_no_push_cache(auth_address)?.info.bytecode; Ok((true, access_cost, auth_address, authorized_bytecode)) } diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index 6ed65d83c7..f235474d28 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -4,7 +4,7 @@ use crate::{ constants::*, db::{ cache::{self}, - CacheDB, Database, + gen_db::GeneralizedDatabase, }, environment::Environment, errors::{ExecutionReport, InternalError, OpcodeResult, TxResult, VMError}, @@ -173,17 +173,6 @@ pub struct VM<'a> { pub hooks: Vec>, } -pub struct GeneralizedDatabase { - pub store: Arc, - pub cache: CacheDB, -} - -impl GeneralizedDatabase { - pub fn new(store: Arc, cache: CacheDB) -> Self { - Self { store, cache } - } -} - impl<'a> VM<'a> { pub fn new( to: TxKind, @@ -275,7 +264,7 @@ impl<'a> VM<'a> { }) } TxKind::Create => { - let sender_nonce = get_account(db, env.origin)?.info.nonce; + let sender_nonce = db.get_account(env.origin)?.info.nonce; let new_contract_address = calculate_create_address(env.origin, sender_nonce) .map_err(|_| VMError::Internal(InternalError::CouldNotComputeCreateAddress))?; @@ -417,7 +406,7 @@ impl<'a> VM<'a> { // Add created contract to cache, reverting transaction if the address is already occupied if self.is_create() { let new_contract_address = initial_call_frame.to; - let new_account = get_account(self.db, new_contract_address)?; + let new_account = self.db.get_account(new_contract_address)?; let value = initial_call_frame.msg_value; let balance = new_account @@ -494,7 +483,7 @@ impl<'a> VM<'a> { // When updating account storage of an account that's not yet cached we need to store the StorageSlot in the account // Note: We end up caching the account because it is the most straightforward way of doing it. - let account = get_account_mut_vm(self.db, address, &mut Some(call_frame))?; + let account = self.db.get_account_mut_vm(address, &mut Some(call_frame))?; account.storage.insert(key, storage_slot.clone()); Ok((storage_slot, storage_slot_was_cold)) @@ -507,7 +496,7 @@ impl<'a> VM<'a> { new_value: U256, call_frame: &mut CallFrame, ) -> Result<(), VMError> { - let account = get_account_mut_vm(self.db, address, &mut Some(call_frame))?; + let account = self.db.get_account_mut_vm(address, &mut Some(call_frame))?; let account_original_storage_slot_value = account .storage .get(&key) @@ -573,27 +562,4 @@ impl<'a> VM<'a> { } } } - - pub fn insert_account( - &mut self, - address: Address, - account: Account, - call_frame: &mut CallFrame, - ) { - let previous_account = cache::insert_account(&mut self.db.cache, address, account); - - call_frame - .previous_cache_state - .entry(address) - .or_insert_with(|| previous_account.as_ref().map(|account| (*account).clone())); - } - - pub fn remove_account(&mut self, address: Address, call_frame: &mut CallFrame) { - let previous_account = cache::remove_account(&mut self.db.cache, &address); - - call_frame - .previous_cache_state - .entry(address) - .or_insert_with(|| previous_account.as_ref().map(|account| (*account).clone())); - } } From 642071de28da0b74f54c96798d6b4ca3a2321996 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Tue, 8 Apr 2025 09:59:04 -0300 Subject: [PATCH 16/47] make callframe immutable in finalize_execution --- crates/vm/levm/src/hooks/default_hook.rs | 2 +- crates/vm/levm/src/hooks/hook.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/vm/levm/src/hooks/default_hook.rs b/crates/vm/levm/src/hooks/default_hook.rs index 7108b875a3..974867d2ad 100644 --- a/crates/vm/levm/src/hooks/default_hook.rs +++ b/crates/vm/levm/src/hooks/default_hook.rs @@ -325,7 +325,7 @@ impl Hook for DefaultHook { fn finalize_execution( &self, vm: &mut VM<'_>, - initial_call_frame: &mut CallFrame, + initial_call_frame: &CallFrame, report: &mut ExecutionReport, ) -> Result<(), VMError> { // POST-EXECUTION Changes diff --git a/crates/vm/levm/src/hooks/hook.rs b/crates/vm/levm/src/hooks/hook.rs index 2d7219bbed..c7e156792b 100644 --- a/crates/vm/levm/src/hooks/hook.rs +++ b/crates/vm/levm/src/hooks/hook.rs @@ -14,7 +14,7 @@ pub trait Hook { fn finalize_execution( &self, vm: &mut VM<'_>, - initial_call_frame: &mut CallFrame, + initial_call_frame: &CallFrame, report: &mut ExecutionReport, ) -> Result<(), VMError>; } From e9564d93eba5db086cb3d62145d734b7a07af35f Mon Sep 17 00:00:00 2001 From: JereSalo Date: Tue, 8 Apr 2025 10:08:16 -0300 Subject: [PATCH 17/47] change option to be immutable --- crates/vm/levm/src/execution_handlers.rs | 2 +- crates/vm/levm/src/hooks/default_hook.rs | 16 ++++++------ crates/vm/levm/src/opcode_handlers/system.rs | 26 ++++++++++---------- crates/vm/levm/src/utils.rs | 8 +++--- crates/vm/levm/src/vm.rs | 4 +-- 5 files changed, 28 insertions(+), 28 deletions(-) diff --git a/crates/vm/levm/src/execution_handlers.rs b/crates/vm/levm/src/execution_handlers.rs index 8859ebb106..1a632f1baa 100644 --- a/crates/vm/levm/src/execution_handlers.rs +++ b/crates/vm/levm/src/execution_handlers.rs @@ -208,7 +208,7 @@ impl<'a> VM<'a> { self.db.update_account_bytecode( new_address, contract_code, - &mut Some(current_call_frame), + Some(current_call_frame), )?; } Err(error) => { diff --git a/crates/vm/levm/src/hooks/default_hook.rs b/crates/vm/levm/src/hooks/default_hook.rs index 6e1510d0df..aebfbaf5e7 100644 --- a/crates/vm/levm/src/hooks/default_hook.rs +++ b/crates/vm/levm/src/hooks/default_hook.rs @@ -149,7 +149,7 @@ impl Hook for DefaultHook { // (3) INSUFFICIENT_ACCOUNT_FUNDS vm.db - .decrease_account_balance(sender_address, up_front_cost, &mut Some(initial_call_frame)) + .decrease_account_balance(sender_address, up_front_cost, Some(initial_call_frame)) .map_err(|_| TxValidationError::InsufficientAccountFunds)?; // (4) INSUFFICIENT_MAX_FEE_PER_GAS @@ -181,7 +181,7 @@ impl Hook for DefaultHook { )?; // (7) NONCE_IS_MAX - increment_account_nonce(vm.db, sender_address, &mut Some(initial_call_frame)) + increment_account_nonce(vm.db, sender_address, Some(initial_call_frame)) .map_err(|_| VMError::TxValidation(TxValidationError::NonceIsMax))?; // check for nonce mismatch @@ -306,7 +306,7 @@ impl Hook for DefaultHook { vm.db.increase_account_balance( initial_call_frame.to, initial_call_frame.msg_value, - &mut Some(initial_call_frame), + Some(initial_call_frame), )?; } Ok(()) @@ -344,7 +344,7 @@ impl Hook for DefaultHook { vm.db.decrease_account_balance( receiver_address, initial_call_frame.msg_value, - &mut None, + None, )?; } else { // We remove the receiver account from the cache, like nothing changed in it's state. @@ -354,7 +354,7 @@ impl Hook for DefaultHook { vm.db.increase_account_balance( sender_address, initial_call_frame.msg_value, - &mut None, + None, )?; } @@ -396,7 +396,7 @@ impl Hook for DefaultHook { .ok_or(VMError::Internal(InternalError::UndefinedState(1)))?; vm.db - .increase_account_balance(sender_address, wei_return_amount, &mut None)?; + .increase_account_balance(sender_address, wei_return_amount, None)?; // 3. Pay coinbase fee let coinbase_address = vm.env.coinbase; @@ -416,14 +416,14 @@ impl Hook for DefaultHook { if coinbase_fee != U256::zero() { vm.db - .increase_account_balance(coinbase_address, coinbase_fee, &mut None)?; + .increase_account_balance(coinbase_address, coinbase_fee, None)?; }; // 4. Destruct addresses in vm.estruct set. // In Cancun the only addresses destroyed are contracts created in this transaction let selfdestruct_set = vm.accrued_substate.selfdestruct_set.clone(); for address in selfdestruct_set { - let account_to_remove = vm.db.get_account_mut_vm(address, &mut None)?; + let account_to_remove = vm.db.get_account_mut_vm(address, None)?; *account_to_remove = Account::default(); } diff --git a/crates/vm/levm/src/opcode_handlers/system.rs b/crates/vm/levm/src/opcode_handlers/system.rs index d7654999ae..930f294566 100644 --- a/crates/vm/levm/src/opcode_handlers/system.rs +++ b/crates/vm/levm/src/opcode_handlers/system.rs @@ -524,12 +524,12 @@ impl<'a> VM<'a> { self.db.increase_account_balance( target_address, balance_to_transfer, - &mut Some(current_call_frame), + Some(current_call_frame), )?; self.db.decrease_account_balance( current_call_frame.to, balance_to_transfer, - &mut Some(current_call_frame), + Some(current_call_frame), )?; // Selfdestruct is executed in the same transaction as the contract was created @@ -540,7 +540,7 @@ impl<'a> VM<'a> { { // If target is the same as the contract calling, Ether will be burnt. self.db - .get_account_mut_vm(current_call_frame.to, &mut Some(current_call_frame))? + .get_account_mut_vm(current_call_frame.to, Some(current_call_frame))? .info .balance = U256::zero(); @@ -552,10 +552,10 @@ impl<'a> VM<'a> { self.db.increase_account_balance( target_address, balance_to_transfer, - &mut Some(current_call_frame), + Some(current_call_frame), )?; self.db - .get_account_mut_vm(current_call_frame.to, &mut Some(current_call_frame))? + .get_account_mut_vm(current_call_frame.to, Some(current_call_frame))? .info .balance = U256::zero(); @@ -657,7 +657,7 @@ impl<'a> VM<'a> { // THIRD: Validations that push 0 to the stack without returning reserved gas but incrementing deployer's nonce let new_account = self.db.get_account(new_address)?; if new_account.has_code_or_nonce() { - increment_account_nonce(self.db, deployer_address, &mut Some(current_call_frame))?; + increment_account_nonce(self.db, deployer_address, Some(current_call_frame))?; current_call_frame.stack.push(CREATE_DEPLOYMENT_FAIL)?; return Ok(OpcodeResult::Continue { pc_increment: 1 }); } @@ -680,13 +680,13 @@ impl<'a> VM<'a> { .insert_account(new_address, new_account, current_call_frame); // 2. Increment sender's nonce. - increment_account_nonce(self.db, deployer_address, &mut Some(current_call_frame))?; + increment_account_nonce(self.db, deployer_address, Some(current_call_frame))?; // 3. Decrease sender's balance. self.db.decrease_account_balance( deployer_address, value_in_wei_to_send, - &mut Some(current_call_frame), + Some(current_call_frame), )?; let mut new_call_frame = CallFrame::new( @@ -736,7 +736,7 @@ impl<'a> VM<'a> { self.db.increase_account_balance( deployer_address, value_in_wei_to_send, - &mut Some(current_call_frame), + Some(current_call_frame), )?; // Deployment failed so account shouldn't exist @@ -836,9 +836,9 @@ impl<'a> VM<'a> { // Transfer value from caller to callee. if should_transfer_value { self.db - .decrease_account_balance(msg_sender, value, &mut Some(current_call_frame))?; + .decrease_account_balance(msg_sender, value, Some(current_call_frame))?; self.db - .increase_account_balance(to, value, &mut Some(current_call_frame))?; + .increase_account_balance(to, value, Some(current_call_frame))?; } let tx_report = self.run_execution(&mut new_call_frame)?; @@ -878,11 +878,11 @@ impl<'a> VM<'a> { // Revert value transfer if should_transfer_value { self.db - .decrease_account_balance(to, value, &mut Some(current_call_frame))?; + .decrease_account_balance(to, value, Some(current_call_frame))?; self.db.increase_account_balance( msg_sender, value, - &mut Some(current_call_frame), + Some(current_call_frame), )?; } // Push 0 to stack diff --git a/crates/vm/levm/src/utils.rs b/crates/vm/levm/src/utils.rs index f98b39343f..c83a1844c4 100644 --- a/crates/vm/levm/src/utils.rs +++ b/crates/vm/levm/src/utils.rs @@ -316,7 +316,7 @@ pub fn get_number_of_topics(op: Opcode) -> Result { pub fn increment_account_nonce( db: &mut GeneralizedDatabase, address: Address, - call_frame: &mut Option<&mut CallFrame>, + call_frame: Option<&mut CallFrame>, ) -> Result { let account = db.get_account_mut_vm(address, call_frame)?; account.info.nonce = account @@ -330,7 +330,7 @@ pub fn increment_account_nonce( pub fn decrement_account_nonce( db: &mut GeneralizedDatabase, address: Address, - call_frame: &mut Option<&mut CallFrame>, + call_frame: Option<&mut CallFrame>, ) -> Result<(), VMError> { let account = db.get_account_mut_vm(address, call_frame)?; account.info.nonce = account @@ -453,7 +453,7 @@ pub fn eip7702_set_access_code( // As a special case, if address is 0x0000000000000000000000000000000000000000 do not write the designation. // Clear the account’s code and reset the account’s code hash to the empty hash. - let auth_account = db.get_account_mut_vm(authority_address, &mut None)?; + let auth_account = db.get_account_mut_vm(authority_address, None)?; auth_account.info.bytecode = if auth_tuple.address != Address::zero() { delegation_bytes.into() @@ -462,7 +462,7 @@ pub fn eip7702_set_access_code( }; // 9. Increase the nonce of authority by one. - increment_account_nonce(db, authority_address, &mut None) + increment_account_nonce(db, authority_address, None) .map_err(|_| VMError::TxValidation(TxValidationError::NonceIsMax))?; } diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index f235474d28..e697e4aa19 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -483,7 +483,7 @@ impl<'a> VM<'a> { // When updating account storage of an account that's not yet cached we need to store the StorageSlot in the account // Note: We end up caching the account because it is the most straightforward way of doing it. - let account = self.db.get_account_mut_vm(address, &mut Some(call_frame))?; + let account = self.db.get_account_mut_vm(address, Some(call_frame))?; account.storage.insert(key, storage_slot.clone()); Ok((storage_slot, storage_slot_was_cold)) @@ -496,7 +496,7 @@ impl<'a> VM<'a> { new_value: U256, call_frame: &mut CallFrame, ) -> Result<(), VMError> { - let account = self.db.get_account_mut_vm(address, &mut Some(call_frame))?; + let account = self.db.get_account_mut_vm(address, Some(call_frame))?; let account_original_storage_slot_value = account .storage .get(&key) From 792ecbb2d71eaf450105e45224f6fed75f8a4525 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Tue, 8 Apr 2025 10:08:28 -0300 Subject: [PATCH 18/47] add gen_db --- crates/vm/levm/src/db/gen_db.rs | 172 ++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 crates/vm/levm/src/db/gen_db.rs diff --git a/crates/vm/levm/src/db/gen_db.rs b/crates/vm/levm/src/db/gen_db.rs new file mode 100644 index 0000000000..da692198ad --- /dev/null +++ b/crates/vm/levm/src/db/gen_db.rs @@ -0,0 +1,172 @@ +use std::sync::Arc; + +use bytes::Bytes; +use ethrex_common::Address; +use ethrex_common::U256; + +use crate::call_frame::CallFrame; +use crate::errors::InternalError; +use crate::errors::VMError; +use crate::vm::Substate; +use crate::Account; +use crate::AccountInfo; +use std::collections::HashMap; + +use super::cache; +use super::error::DatabaseError; +use super::CacheDB; +use super::Database; + +pub struct GeneralizedDatabase { + pub store: Arc, + pub cache: CacheDB, +} + +impl GeneralizedDatabase { + pub fn new(store: Arc, cache: CacheDB) -> Self { + Self { store, cache } + } + + // ================== Account related functions ===================== + /// Gets account, first checking the cache and then the database + /// (caching in the second case) + pub fn get_account(&mut self, address: Address) -> Result { + match cache::get_account(&self.cache, &address) { + Some(acc) => Ok(acc.clone()), + None => { + let account_info = self.store.get_account_info(address)?; + let account = Account { + info: account_info, + storage: HashMap::new(), + }; + cache::insert_account(&mut self.cache, address, account.clone()); + Ok(account) + } + } + } + + pub fn get_account_no_push_cache(&self, address: Address) -> Result { + match cache::get_account(&self.cache, &address) { + Some(acc) => Ok(acc.clone()), + None => { + let account_info = self.store.get_account_info(address)?; + Ok(Account { + info: account_info, + storage: HashMap::new(), + }) + } + } + } + + /// Gets mutable account, first checking the cache and then the database + /// (caching in the second case) + /// This isn't a method of VM because it allows us to use it during VM initialization. + pub fn get_account_mut_vm<'a>( + &'a mut self, + address: Address, + call_frame: Option<&mut CallFrame>, + ) -> Result<&'a mut Account, VMError> { + if !cache::is_account_cached(&self.cache, &address) { + let account_info = self.store.get_account_info(address)?; + let account = Account { + info: account_info, + storage: HashMap::new(), + }; + cache::insert_account(&mut self.cache, address, account.clone()); + } + + let original_account = cache::get_account_mut(&mut self.cache, &address) + .ok_or(VMError::Internal(InternalError::AccountNotFound))?; + + if let Some(call_frame) = call_frame { + call_frame + .previous_cache_state + .entry(address) + .or_insert_with(|| Some(original_account.clone())); + }; + + Ok(original_account) + } + + pub fn increase_account_balance( + &mut self, + address: Address, + increase: U256, + call_frame: Option<&mut CallFrame>, + ) -> Result<(), VMError> { + let account = self.get_account_mut_vm(address, call_frame)?; + account.info.balance = account + .info + .balance + .checked_add(increase) + .ok_or(VMError::BalanceOverflow)?; + Ok(()) + } + + pub fn decrease_account_balance( + &mut self, + address: Address, + decrease: U256, + call_frame: Option<&mut CallFrame>, + ) -> Result<(), VMError> { + let account = self.get_account_mut_vm(address, call_frame)?; + account.info.balance = account + .info + .balance + .checked_sub(decrease) + .ok_or(VMError::BalanceUnderflow)?; + Ok(()) + } + + /// Accesses to an account's information. + /// + /// Accessed accounts are stored in the `touched_accounts` set. + /// Accessed accounts take place in some gas cost computation. + pub fn access_account( + &mut self, + accrued_substate: &mut Substate, + address: Address, + ) -> Result<(AccountInfo, bool), DatabaseError> { + let address_was_cold = accrued_substate.touched_accounts.insert(address); + let account = match cache::get_account(&self.cache, &address) { + Some(account) => account.info.clone(), + None => self.store.get_account_info(address)?, + }; + Ok((account, address_was_cold)) + } + + // ================== Bytecode related functions ===================== + pub fn update_account_bytecode( + &mut self, + address: Address, + new_bytecode: Bytes, + call_frame: Option<&mut CallFrame>, + ) -> Result<(), VMError> { + let account = self.get_account_mut_vm(address, call_frame)?; + account.info.bytecode = new_bytecode; + Ok(()) + } + + pub fn insert_account( + &mut self, + address: Address, + account: Account, + call_frame: &mut CallFrame, + ) { + let previous_account = cache::insert_account(&mut self.cache, address, account); + + call_frame + .previous_cache_state + .entry(address) + .or_insert_with(|| previous_account.as_ref().map(|account| (*account).clone())); + } + + pub fn remove_account(&mut self, address: Address, call_frame: &mut CallFrame) { + let previous_account = cache::remove_account(&mut self.cache, &address); + + call_frame + .previous_cache_state + .entry(address) + .or_insert_with(|| previous_account.as_ref().map(|account| (*account).clone())); + } +} From ab4949ce63005e9a995555bd180e71926efc7663 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Tue, 8 Apr 2025 10:16:21 -0300 Subject: [PATCH 19/47] run cargo fmt --- cmd/ef_tests/state/runner/levm_runner.rs | 5 ++++- crates/vm/levm/src/hooks/default_hook.rs | 7 ++----- crates/vm/levm/src/opcode_handlers/environment.rs | 10 ++++++---- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/cmd/ef_tests/state/runner/levm_runner.rs b/cmd/ef_tests/state/runner/levm_runner.rs index 4ce847e26e..d920171627 100644 --- a/cmd/ef_tests/state/runner/levm_runner.rs +++ b/cmd/ef_tests/state/runner/levm_runner.rs @@ -9,7 +9,10 @@ use ethrex_common::{ H256, U256, }; use ethrex_levm::{ - db::gen_db::GeneralizedDatabase, errors::{ExecutionReport, TxValidationError, VMError}, vm::{EVMConfig, VM}, Environment + db::gen_db::GeneralizedDatabase, + errors::{ExecutionReport, TxValidationError, VMError}, + vm::{EVMConfig, VM}, + Environment, }; use ethrex_storage::AccountUpdate; use ethrex_vm::backends; diff --git a/crates/vm/levm/src/hooks/default_hook.rs b/crates/vm/levm/src/hooks/default_hook.rs index aebfbaf5e7..e442ebcf7a 100644 --- a/crates/vm/levm/src/hooks/default_hook.rs +++ b/crates/vm/levm/src/hooks/default_hook.rs @@ -351,11 +351,8 @@ impl Hook for DefaultHook { remove_account(&mut vm.db.cache, &receiver_address); } - vm.db.increase_account_balance( - sender_address, - initial_call_frame.msg_value, - None, - )?; + vm.db + .increase_account_balance(sender_address, initial_call_frame.msg_value, None)?; } // 2. Return unused gas + gas refunds to the sender. diff --git a/crates/vm/levm/src/opcode_handlers/environment.rs b/crates/vm/levm/src/opcode_handlers/environment.rs index dadf6e8508..1e47d3da5d 100644 --- a/crates/vm/levm/src/opcode_handlers/environment.rs +++ b/crates/vm/levm/src/opcode_handlers/environment.rs @@ -313,8 +313,9 @@ impl<'a> VM<'a> { .try_into() .map_err(|_| VMError::VeryLargeNumber)?; - let (account_info, address_was_cold) = - self.db.access_account(&mut self.accrued_substate, address)?; + let (account_info, address_was_cold) = self + .db + .access_account(&mut self.accrued_substate, address)?; let new_memory_size = calculate_memory_size(dest_offset, size)?; @@ -439,8 +440,9 @@ impl<'a> VM<'a> { ) -> Result { let address = word_to_address(current_call_frame.stack.pop()?); - let (account_info, address_was_cold) = - self.db.access_account(&mut self.accrued_substate, address)?; + let (account_info, address_was_cold) = self + .db + .access_account(&mut self.accrued_substate, address)?; current_call_frame.increase_consumed_gas(gas_cost::extcodehash( address_was_cold, From 191dc3da3d84ade6745bda8aabb60f7404438886 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Tue, 8 Apr 2025 10:34:04 -0300 Subject: [PATCH 20/47] rename get_account_mut_vm to get_account_mut --- crates/vm/levm/src/db/gen_db.rs | 8 ++++---- crates/vm/levm/src/hooks/default_hook.rs | 2 +- crates/vm/levm/src/opcode_handlers/system.rs | 4 ++-- crates/vm/levm/src/utils.rs | 6 +++--- crates/vm/levm/src/vm.rs | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/crates/vm/levm/src/db/gen_db.rs b/crates/vm/levm/src/db/gen_db.rs index da692198ad..eb91a61f6b 100644 --- a/crates/vm/levm/src/db/gen_db.rs +++ b/crates/vm/levm/src/db/gen_db.rs @@ -61,7 +61,7 @@ impl GeneralizedDatabase { /// Gets mutable account, first checking the cache and then the database /// (caching in the second case) /// This isn't a method of VM because it allows us to use it during VM initialization. - pub fn get_account_mut_vm<'a>( + pub fn get_account_mut<'a>( &'a mut self, address: Address, call_frame: Option<&mut CallFrame>, @@ -94,7 +94,7 @@ impl GeneralizedDatabase { increase: U256, call_frame: Option<&mut CallFrame>, ) -> Result<(), VMError> { - let account = self.get_account_mut_vm(address, call_frame)?; + let account = self.get_account_mut(address, call_frame)?; account.info.balance = account .info .balance @@ -109,7 +109,7 @@ impl GeneralizedDatabase { decrease: U256, call_frame: Option<&mut CallFrame>, ) -> Result<(), VMError> { - let account = self.get_account_mut_vm(address, call_frame)?; + let account = self.get_account_mut(address, call_frame)?; account.info.balance = account .info .balance @@ -142,7 +142,7 @@ impl GeneralizedDatabase { new_bytecode: Bytes, call_frame: Option<&mut CallFrame>, ) -> Result<(), VMError> { - let account = self.get_account_mut_vm(address, call_frame)?; + let account = self.get_account_mut(address, call_frame)?; account.info.bytecode = new_bytecode; Ok(()) } diff --git a/crates/vm/levm/src/hooks/default_hook.rs b/crates/vm/levm/src/hooks/default_hook.rs index e442ebcf7a..fd812b8ee7 100644 --- a/crates/vm/levm/src/hooks/default_hook.rs +++ b/crates/vm/levm/src/hooks/default_hook.rs @@ -420,7 +420,7 @@ impl Hook for DefaultHook { // In Cancun the only addresses destroyed are contracts created in this transaction let selfdestruct_set = vm.accrued_substate.selfdestruct_set.clone(); for address in selfdestruct_set { - let account_to_remove = vm.db.get_account_mut_vm(address, None)?; + let account_to_remove = vm.db.get_account_mut(address, None)?; *account_to_remove = Account::default(); } diff --git a/crates/vm/levm/src/opcode_handlers/system.rs b/crates/vm/levm/src/opcode_handlers/system.rs index 930f294566..293a0241cd 100644 --- a/crates/vm/levm/src/opcode_handlers/system.rs +++ b/crates/vm/levm/src/opcode_handlers/system.rs @@ -540,7 +540,7 @@ impl<'a> VM<'a> { { // If target is the same as the contract calling, Ether will be burnt. self.db - .get_account_mut_vm(current_call_frame.to, Some(current_call_frame))? + .get_account_mut(current_call_frame.to, Some(current_call_frame))? .info .balance = U256::zero(); @@ -555,7 +555,7 @@ impl<'a> VM<'a> { Some(current_call_frame), )?; self.db - .get_account_mut_vm(current_call_frame.to, Some(current_call_frame))? + .get_account_mut(current_call_frame.to, Some(current_call_frame))? .info .balance = U256::zero(); diff --git a/crates/vm/levm/src/utils.rs b/crates/vm/levm/src/utils.rs index c83a1844c4..0e42a5047e 100644 --- a/crates/vm/levm/src/utils.rs +++ b/crates/vm/levm/src/utils.rs @@ -318,7 +318,7 @@ pub fn increment_account_nonce( address: Address, call_frame: Option<&mut CallFrame>, ) -> Result { - let account = db.get_account_mut_vm(address, call_frame)?; + let account = db.get_account_mut(address, call_frame)?; account.info.nonce = account .info .nonce @@ -332,7 +332,7 @@ pub fn decrement_account_nonce( address: Address, call_frame: Option<&mut CallFrame>, ) -> Result<(), VMError> { - let account = db.get_account_mut_vm(address, call_frame)?; + let account = db.get_account_mut(address, call_frame)?; account.info.nonce = account .info .nonce @@ -453,7 +453,7 @@ pub fn eip7702_set_access_code( // As a special case, if address is 0x0000000000000000000000000000000000000000 do not write the designation. // Clear the account’s code and reset the account’s code hash to the empty hash. - let auth_account = db.get_account_mut_vm(authority_address, None)?; + let auth_account = db.get_account_mut(authority_address, None)?; auth_account.info.bytecode = if auth_tuple.address != Address::zero() { delegation_bytes.into() diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index e697e4aa19..1467b4484e 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -483,7 +483,7 @@ impl<'a> VM<'a> { // When updating account storage of an account that's not yet cached we need to store the StorageSlot in the account // Note: We end up caching the account because it is the most straightforward way of doing it. - let account = self.db.get_account_mut_vm(address, Some(call_frame))?; + let account = self.db.get_account_mut(address, Some(call_frame))?; account.storage.insert(key, storage_slot.clone()); Ok((storage_slot, storage_slot_was_cold)) @@ -496,7 +496,7 @@ impl<'a> VM<'a> { new_value: U256, call_frame: &mut CallFrame, ) -> Result<(), VMError> { - let account = self.db.get_account_mut_vm(address, Some(call_frame))?; + let account = self.db.get_account_mut(address, Some(call_frame))?; let account_original_storage_slot_value = account .storage .get(&key) From 05efe206bfc38bf1ce49785f999d1c3d46496f8f Mon Sep 17 00:00:00 2001 From: JereSalo Date: Tue, 8 Apr 2025 10:38:10 -0300 Subject: [PATCH 21/47] add some comments --- crates/vm/levm/src/db/gen_db.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/crates/vm/levm/src/db/gen_db.rs b/crates/vm/levm/src/db/gen_db.rs index eb91a61f6b..bd85586e52 100644 --- a/crates/vm/levm/src/db/gen_db.rs +++ b/crates/vm/levm/src/db/gen_db.rs @@ -45,6 +45,7 @@ impl GeneralizedDatabase { } } + /// Gets account without pushing it to the cache pub fn get_account_no_push_cache(&self, address: Address) -> Result { match cache::get_account(&self.cache, &address) { Some(acc) => Ok(acc.clone()), @@ -118,7 +119,7 @@ impl GeneralizedDatabase { Ok(()) } - /// Accesses to an account's information. + /// **Accesses to an account's information.** /// /// Accessed accounts are stored in the `touched_accounts` set. /// Accessed accounts take place in some gas cost computation. @@ -135,7 +136,7 @@ impl GeneralizedDatabase { Ok((account, address_was_cold)) } - // ================== Bytecode related functions ===================== + /// Updates bytecode of given account. pub fn update_account_bytecode( &mut self, address: Address, @@ -147,6 +148,7 @@ impl GeneralizedDatabase { Ok(()) } + /// Inserts account to cache backing up the previus state of it in the callframe (if it wasn't already backed up) pub fn insert_account( &mut self, address: Address, @@ -161,6 +163,7 @@ impl GeneralizedDatabase { .or_insert_with(|| previous_account.as_ref().map(|account| (*account).clone())); } + /// Removes account from cache backing up the previus state of it in the callframe (if it wasn't already backed up) pub fn remove_account(&mut self, address: Address, call_frame: &mut CallFrame) { let previous_account = cache::remove_account(&mut self.cache, &address); From 640e041799946a72843047ac9104e60e292e16b5 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Wed, 9 Apr 2025 16:39:49 -0300 Subject: [PATCH 22/47] remove comment from get account mut --- crates/vm/levm/src/db/gen_db.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/crates/vm/levm/src/db/gen_db.rs b/crates/vm/levm/src/db/gen_db.rs index bd85586e52..bdf079bf24 100644 --- a/crates/vm/levm/src/db/gen_db.rs +++ b/crates/vm/levm/src/db/gen_db.rs @@ -58,10 +58,7 @@ impl GeneralizedDatabase { } } } - - /// Gets mutable account, first checking the cache and then the database - /// (caching in the second case) - /// This isn't a method of VM because it allows us to use it during VM initialization. + pub fn get_account_mut<'a>( &'a mut self, address: Address, From ec906ec160c29f937df237090323b26e483310b3 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Wed, 9 Apr 2025 17:30:03 -0300 Subject: [PATCH 23/47] cargo fmt --- crates/vm/levm/src/db/gen_db.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/vm/levm/src/db/gen_db.rs b/crates/vm/levm/src/db/gen_db.rs index bdf079bf24..efe8c38c23 100644 --- a/crates/vm/levm/src/db/gen_db.rs +++ b/crates/vm/levm/src/db/gen_db.rs @@ -58,7 +58,7 @@ impl GeneralizedDatabase { } } } - + pub fn get_account_mut<'a>( &'a mut self, address: Address, From 1691105723536d54a131c1f40e8203cc05279ee4 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Wed, 9 Apr 2025 17:58:47 -0300 Subject: [PATCH 24/47] clean code --- crates/vm/levm/src/call_frame.rs | 4 +- crates/vm/levm/src/db/gen_db.rs | 64 ++++++++++++------ crates/vm/levm/src/execution_handlers.rs | 2 +- crates/vm/levm/src/hooks/default_hook.rs | 11 ++- crates/vm/levm/src/opcode_handlers/system.rs | 71 +++++++++++++------- crates/vm/levm/src/utils.rs | 31 +-------- crates/vm/levm/src/vm.rs | 12 ++-- 7 files changed, 114 insertions(+), 81 deletions(-) diff --git a/crates/vm/levm/src/call_frame.rs b/crates/vm/levm/src/call_frame.rs index fe1d2252a2..60a1de7074 100644 --- a/crates/vm/levm/src/call_frame.rs +++ b/crates/vm/levm/src/call_frame.rs @@ -87,9 +87,11 @@ pub struct CallFrame { /// This is set to true if the function that created this callframe is CREATE or CREATE2 pub create_op_called: bool, /// Everytime we want to write an account during execution of a callframe we store the pre-write state so that we can restore if it reverts - pub previous_cache_state: HashMap>, + pub cache_backup: CacheBackup, } +pub type CacheBackup = HashMap>; + impl CallFrame { pub fn new_from_bytecode(bytecode: Bytes) -> Self { let valid_jump_destinations = get_valid_jump_destinations(&bytecode).unwrap_or_default(); diff --git a/crates/vm/levm/src/db/gen_db.rs b/crates/vm/levm/src/db/gen_db.rs index efe8c38c23..d6ae620383 100644 --- a/crates/vm/levm/src/db/gen_db.rs +++ b/crates/vm/levm/src/db/gen_db.rs @@ -4,7 +4,7 @@ use bytes::Bytes; use ethrex_common::Address; use ethrex_common::U256; -use crate::call_frame::CallFrame; +use crate::call_frame::CacheBackup; use crate::errors::InternalError; use crate::errors::VMError; use crate::vm::Substate; @@ -62,7 +62,7 @@ impl GeneralizedDatabase { pub fn get_account_mut<'a>( &'a mut self, address: Address, - call_frame: Option<&mut CallFrame>, + cache_backup: Option<&mut CacheBackup>, ) -> Result<&'a mut Account, VMError> { if !cache::is_account_cached(&self.cache, &address) { let account_info = self.store.get_account_info(address)?; @@ -76,9 +76,8 @@ impl GeneralizedDatabase { let original_account = cache::get_account_mut(&mut self.cache, &address) .ok_or(VMError::Internal(InternalError::AccountNotFound))?; - if let Some(call_frame) = call_frame { - call_frame - .previous_cache_state + if let Some(cache_backup) = cache_backup { + cache_backup .entry(address) .or_insert_with(|| Some(original_account.clone())); }; @@ -90,9 +89,9 @@ impl GeneralizedDatabase { &mut self, address: Address, increase: U256, - call_frame: Option<&mut CallFrame>, + cache_backup: Option<&mut CacheBackup>, ) -> Result<(), VMError> { - let account = self.get_account_mut(address, call_frame)?; + let account = self.get_account_mut(address, cache_backup)?; account.info.balance = account .info .balance @@ -105,9 +104,9 @@ impl GeneralizedDatabase { &mut self, address: Address, decrease: U256, - call_frame: Option<&mut CallFrame>, + cache_backup: Option<&mut CacheBackup>, ) -> Result<(), VMError> { - let account = self.get_account_mut(address, call_frame)?; + let account = self.get_account_mut(address, cache_backup)?; account.info.balance = account .info .balance @@ -138,34 +137,61 @@ impl GeneralizedDatabase { &mut self, address: Address, new_bytecode: Bytes, - call_frame: Option<&mut CallFrame>, + cache_backup: Option<&mut CacheBackup>, ) -> Result<(), VMError> { - let account = self.get_account_mut(address, call_frame)?; + let account = self.get_account_mut(address, cache_backup)?; account.info.bytecode = new_bytecode; Ok(()) } - /// Inserts account to cache backing up the previus state of it in the callframe (if it wasn't already backed up) + // =================== Nonce related functions ====================== + pub fn increment_account_nonce( + &mut self, + address: Address, + call_frame: Option<&mut CacheBackup>, + ) -> Result { + let account = self.get_account_mut(address, call_frame)?; + account.info.nonce = account + .info + .nonce + .checked_add(1) + .ok_or(VMError::NonceOverflow)?; + Ok(account.info.nonce) + } + + pub fn decrement_account_nonce( + &mut self, + address: Address, + call_frame: Option<&mut CacheBackup>, + ) -> Result<(), VMError> { + let account = self.get_account_mut(address, call_frame)?; + account.info.nonce = account + .info + .nonce + .checked_sub(1) + .ok_or(VMError::NonceUnderflow)?; + Ok(()) + } + + /// Inserts account to cache backing up the previus state of it in the CacheBackup (if it wasn't already backed up) pub fn insert_account( &mut self, address: Address, account: Account, - call_frame: &mut CallFrame, + cache_backup: &mut CacheBackup, ) { let previous_account = cache::insert_account(&mut self.cache, address, account); - call_frame - .previous_cache_state + cache_backup .entry(address) .or_insert_with(|| previous_account.as_ref().map(|account| (*account).clone())); } - /// Removes account from cache backing up the previus state of it in the callframe (if it wasn't already backed up) - pub fn remove_account(&mut self, address: Address, call_frame: &mut CallFrame) { + /// Removes account from cache backing up the previus state of it in the CacheBackup (if it wasn't already backed up) + pub fn remove_account(&mut self, address: Address, cache_backup: &mut CacheBackup) { let previous_account = cache::remove_account(&mut self.cache, &address); - call_frame - .previous_cache_state + cache_backup .entry(address) .or_insert_with(|| previous_account.as_ref().map(|account| (*account).clone())); } diff --git a/crates/vm/levm/src/execution_handlers.rs b/crates/vm/levm/src/execution_handlers.rs index 1a632f1baa..46be8a4c66 100644 --- a/crates/vm/levm/src/execution_handlers.rs +++ b/crates/vm/levm/src/execution_handlers.rs @@ -208,7 +208,7 @@ impl<'a> VM<'a> { self.db.update_account_bytecode( new_address, contract_code, - Some(current_call_frame), + Some(&mut current_call_frame.cache_backup), )?; } Err(error) => { diff --git a/crates/vm/levm/src/hooks/default_hook.rs b/crates/vm/levm/src/hooks/default_hook.rs index fd812b8ee7..f9bd192740 100644 --- a/crates/vm/levm/src/hooks/default_hook.rs +++ b/crates/vm/levm/src/hooks/default_hook.rs @@ -149,7 +149,11 @@ impl Hook for DefaultHook { // (3) INSUFFICIENT_ACCOUNT_FUNDS vm.db - .decrease_account_balance(sender_address, up_front_cost, Some(initial_call_frame)) + .decrease_account_balance( + sender_address, + up_front_cost, + Some(&mut initial_call_frame.cache_backup), + ) .map_err(|_| TxValidationError::InsufficientAccountFunds)?; // (4) INSUFFICIENT_MAX_FEE_PER_GAS @@ -181,7 +185,8 @@ impl Hook for DefaultHook { )?; // (7) NONCE_IS_MAX - increment_account_nonce(vm.db, sender_address, Some(initial_call_frame)) + vm.db + .increment_account_nonce(sender_address, Some(&mut initial_call_frame.cache_backup)) .map_err(|_| VMError::TxValidation(TxValidationError::NonceIsMax))?; // check for nonce mismatch @@ -306,7 +311,7 @@ impl Hook for DefaultHook { vm.db.increase_account_balance( initial_call_frame.to, initial_call_frame.msg_value, - Some(initial_call_frame), + Some(&mut initial_call_frame.cache_backup), )?; } Ok(()) diff --git a/crates/vm/levm/src/opcode_handlers/system.rs b/crates/vm/levm/src/opcode_handlers/system.rs index 293a0241cd..e0ce79b8f0 100644 --- a/crates/vm/levm/src/opcode_handlers/system.rs +++ b/crates/vm/levm/src/opcode_handlers/system.rs @@ -524,12 +524,12 @@ impl<'a> VM<'a> { self.db.increase_account_balance( target_address, balance_to_transfer, - Some(current_call_frame), + Some(&mut current_call_frame.cache_backup), )?; self.db.decrease_account_balance( current_call_frame.to, balance_to_transfer, - Some(current_call_frame), + Some(&mut current_call_frame.cache_backup), )?; // Selfdestruct is executed in the same transaction as the contract was created @@ -540,7 +540,10 @@ impl<'a> VM<'a> { { // If target is the same as the contract calling, Ether will be burnt. self.db - .get_account_mut(current_call_frame.to, Some(current_call_frame))? + .get_account_mut( + current_call_frame.to, + Some(&mut current_call_frame.cache_backup), + )? .info .balance = U256::zero(); @@ -552,10 +555,13 @@ impl<'a> VM<'a> { self.db.increase_account_balance( target_address, balance_to_transfer, - Some(current_call_frame), + Some(&mut current_call_frame.cache_backup), )?; self.db - .get_account_mut(current_call_frame.to, Some(current_call_frame))? + .get_account_mut( + current_call_frame.to, + Some(&mut current_call_frame.cache_backup), + )? .info .balance = U256::zero(); @@ -657,7 +663,10 @@ impl<'a> VM<'a> { // THIRD: Validations that push 0 to the stack without returning reserved gas but incrementing deployer's nonce let new_account = self.db.get_account(new_address)?; if new_account.has_code_or_nonce() { - increment_account_nonce(self.db, deployer_address, Some(current_call_frame))?; + self.db.increment_account_nonce( + deployer_address, + Some(&mut current_call_frame.cache_backup), + )?; current_call_frame.stack.push(CREATE_DEPLOYMENT_FAIL)?; return Ok(OpcodeResult::Continue { pc_increment: 1 }); } @@ -676,17 +685,23 @@ impl<'a> VM<'a> { } else { Account::new(new_balance, Bytes::new(), 1, Default::default()) }; - self.db - .insert_account(new_address, new_account, current_call_frame); + self.db.insert_account( + new_address, + new_account, + &mut current_call_frame.cache_backup, + ); // 2. Increment sender's nonce. - increment_account_nonce(self.db, deployer_address, Some(current_call_frame))?; + self.db.increment_account_nonce( + deployer_address, + Some(&mut current_call_frame.cache_backup), + )?; // 3. Decrease sender's balance. self.db.decrease_account_balance( deployer_address, value_in_wei_to_send, - Some(current_call_frame), + Some(&mut current_call_frame.cache_backup), )?; let mut new_call_frame = CallFrame::new( @@ -724,9 +739,9 @@ impl<'a> VM<'a> { .stack .push(address_to_word(new_address))?; - for (address, account_opt) in new_call_frame.previous_cache_state { + for (address, account_opt) in new_call_frame.cache_backup { current_call_frame - .previous_cache_state + .cache_backup .entry(address) .or_insert(account_opt); } @@ -736,11 +751,12 @@ impl<'a> VM<'a> { self.db.increase_account_balance( deployer_address, value_in_wei_to_send, - Some(current_call_frame), + Some(&mut current_call_frame.cache_backup), )?; // Deployment failed so account shouldn't exist - self.db.remove_account(new_address, current_call_frame); + self.db + .remove_account(new_address, &mut current_call_frame.cache_backup); self.accrued_substate.created_accounts.remove(&new_address); // If revert we have to copy the return_data @@ -835,10 +851,16 @@ impl<'a> VM<'a> { // Transfer value from caller to callee. if should_transfer_value { - self.db - .decrease_account_balance(msg_sender, value, Some(current_call_frame))?; - self.db - .increase_account_balance(to, value, Some(current_call_frame))?; + self.db.decrease_account_balance( + msg_sender, + value, + Some(&mut current_call_frame.cache_backup), + )?; + self.db.increase_account_balance( + to, + value, + Some(&mut current_call_frame.cache_backup), + )?; } let tx_report = self.run_execution(&mut new_call_frame)?; @@ -867,9 +889,9 @@ impl<'a> VM<'a> { match tx_report.result { TxResult::Success => { current_call_frame.stack.push(SUCCESS_FOR_CALL)?; - for (address, account_opt) in new_call_frame.previous_cache_state { + for (address, account_opt) in new_call_frame.cache_backup { current_call_frame - .previous_cache_state + .cache_backup .entry(address) .or_insert(account_opt); } @@ -877,12 +899,15 @@ impl<'a> VM<'a> { TxResult::Revert(_) => { // Revert value transfer if should_transfer_value { - self.db - .decrease_account_balance(to, value, Some(current_call_frame))?; + self.db.decrease_account_balance( + to, + value, + Some(&mut current_call_frame.cache_backup), + )?; self.db.increase_account_balance( msg_sender, value, - Some(current_call_frame), + Some(&mut current_call_frame.cache_backup), )?; } // Push 0 to stack diff --git a/crates/vm/levm/src/utils.rs b/crates/vm/levm/src/utils.rs index 0e42a5047e..33bac9ae3e 100644 --- a/crates/vm/levm/src/utils.rs +++ b/crates/vm/levm/src/utils.rs @@ -312,35 +312,6 @@ pub fn get_number_of_topics(op: Opcode) -> Result { Ok(number_of_topics) } -// =================== Nonce related functions ====================== -pub fn increment_account_nonce( - db: &mut GeneralizedDatabase, - address: Address, - call_frame: Option<&mut CallFrame>, -) -> Result { - let account = db.get_account_mut(address, call_frame)?; - account.info.nonce = account - .info - .nonce - .checked_add(1) - .ok_or(VMError::NonceOverflow)?; - Ok(account.info.nonce) -} - -pub fn decrement_account_nonce( - db: &mut GeneralizedDatabase, - address: Address, - call_frame: Option<&mut CallFrame>, -) -> Result<(), VMError> { - let account = db.get_account_mut(address, call_frame)?; - account.info.nonce = account - .info - .nonce - .checked_sub(1) - .ok_or(VMError::NonceUnderflow)?; - Ok(()) -} - // ==================== Word related functions ======================= pub fn word_to_address(word: U256) -> Address { Address::from_slice(&word.to_big_endian()[12..]) @@ -462,7 +433,7 @@ pub fn eip7702_set_access_code( }; // 9. Increase the nonce of authority by one. - increment_account_nonce(db, authority_address, None) + db.increment_account_nonce(authority_address, None) .map_err(|_| VMError::TxValidation(TxValidationError::NonceIsMax))?; } diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index 1467b4484e..161d82b523 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -400,7 +400,7 @@ impl<'a> VM<'a> { return Err(e); } // clear callframe backup because prepare_execution succeeded - initial_call_frame.previous_cache_state = HashMap::new(); + initial_call_frame.cache_backup = HashMap::new(); // In CREATE type transactions: // Add created contract to cache, reverting transaction if the address is already occupied @@ -483,7 +483,9 @@ impl<'a> VM<'a> { // When updating account storage of an account that's not yet cached we need to store the StorageSlot in the account // Note: We end up caching the account because it is the most straightforward way of doing it. - let account = self.db.get_account_mut(address, Some(call_frame))?; + let account = self + .db + .get_account_mut(address, Some(&mut call_frame.cache_backup))?; account.storage.insert(key, storage_slot.clone()); Ok((storage_slot, storage_slot_was_cold)) @@ -496,7 +498,9 @@ impl<'a> VM<'a> { new_value: U256, call_frame: &mut CallFrame, ) -> Result<(), VMError> { - let account = self.db.get_account_mut(address, Some(call_frame))?; + let account = self + .db + .get_account_mut(address, Some(&mut call_frame.cache_backup))?; let account_original_storage_slot_value = account .storage .get(&key) @@ -553,7 +557,7 @@ impl<'a> VM<'a> { } fn restore_cache_state(&mut self, call_frame: &CallFrame) { - for (address, account_opt) in &call_frame.previous_cache_state { + for (address, account_opt) in &call_frame.cache_backup { if let Some(account) = account_opt { cache::insert_account(&mut self.db.cache, *address, account.clone()); } else { From c8c560b1d6e3958284c6c9c03a2ca4802ad905f5 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Wed, 9 Apr 2025 18:06:50 -0300 Subject: [PATCH 25/47] add comments --- crates/vm/levm/src/vm.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index 161d82b523..41c1604bbb 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -556,12 +556,14 @@ impl<'a> VM<'a> { Ok(()) } + /// Restores the cache state to the state before changes made during a callframe. fn restore_cache_state(&mut self, call_frame: &CallFrame) { for (address, account_opt) in &call_frame.cache_backup { if let Some(account) = account_opt { + // restore the account to the state before the call cache::insert_account(&mut self.db.cache, *address, account.clone()); } else { - // remove from cache + // remove from cache if it wasn't there before cache::remove_account(&mut self.db.cache, address); } } From 8b91321987c4754a1a9ff0b3683aa37067b0e474 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Thu, 10 Apr 2025 07:29:15 -0300 Subject: [PATCH 26/47] empty commit From 2cc41ba556d09a7eab247856efe3904554aed562 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Fri, 11 Apr 2025 11:24:30 -0300 Subject: [PATCH 27/47] improve restore state arguments --- crates/vm/levm/src/execution_handlers.rs | 6 +++--- crates/vm/levm/src/vm.rs | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/crates/vm/levm/src/execution_handlers.rs b/crates/vm/levm/src/execution_handlers.rs index 46be8a4c66..87040bcbdf 100644 --- a/crates/vm/levm/src/execution_handlers.rs +++ b/crates/vm/levm/src/execution_handlers.rs @@ -38,7 +38,7 @@ impl<'a> VM<'a> { self.call_frames.push(current_call_frame.clone()); - self.restore_state(backup, current_call_frame); + self.restore_state(backup, &mut current_call_frame.cache_backup); Ok(ExecutionReport { result: TxResult::Revert(error), @@ -214,7 +214,7 @@ impl<'a> VM<'a> { Err(error) => { // Revert if error current_call_frame.gas_used = current_call_frame.gas_limit; - self.restore_state(backup, current_call_frame); + self.restore_state(backup, &mut current_call_frame.cache_backup); return Ok(ExecutionReport { result: TxResult::Revert(error), @@ -256,7 +256,7 @@ impl<'a> VM<'a> { current_call_frame.gas_used = current_call_frame.gas_used.saturating_add(left_gas); } - self.restore_state(backup, current_call_frame); + self.restore_state(backup, &mut current_call_frame.cache_backup); Ok(ExecutionReport { result: TxResult::Revert(error), diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index 41c1604bbb..57785071f2 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -1,6 +1,6 @@ use crate::{ account::{Account, StorageSlot}, - call_frame::CallFrame, + call_frame::{CacheBackup, CallFrame}, constants::*, db::{ cache::{self}, @@ -338,8 +338,8 @@ impl<'a> VM<'a> { } } - pub fn restore_state(&mut self, backup: StateBackup, call_frame: &mut CallFrame) { - self.restore_cache_state(call_frame); + pub fn restore_state(&mut self, backup: StateBackup, cache_backup: &mut CacheBackup) { + self.restore_cache_state(&cache_backup); self.accrued_substate = backup.substate; self.env.refunded_gas = backup.refunded_gas; self.env.transient_storage = backup.transient_storage; @@ -396,7 +396,7 @@ impl<'a> VM<'a> { if let Err(e) = self.prepare_execution(&mut initial_call_frame) { // We need to do a cleanup of the cache so that it doesn't interfere with next transaction's execution - self.restore_cache_state(&initial_call_frame); + self.restore_cache_state(&initial_call_frame.cache_backup); return Err(e); } // clear callframe backup because prepare_execution succeeded @@ -557,8 +557,8 @@ impl<'a> VM<'a> { } /// Restores the cache state to the state before changes made during a callframe. - fn restore_cache_state(&mut self, call_frame: &CallFrame) { - for (address, account_opt) in &call_frame.cache_backup { + fn restore_cache_state(&mut self, backup: &CacheBackup) { + for (address, account_opt) in backup { if let Some(account) = account_opt { // restore the account to the state before the call cache::insert_account(&mut self.db.cache, *address, account.clone()); From ce096c0c333de79d79142e2822420e344d0c5397 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Fri, 11 Apr 2025 11:29:36 -0300 Subject: [PATCH 28/47] add comment claryfing clearing cache backup --- crates/vm/levm/src/vm.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index 57785071f2..6e7486f25b 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -399,7 +399,10 @@ impl<'a> VM<'a> { self.restore_cache_state(&initial_call_frame.cache_backup); return Err(e); } - // clear callframe backup because prepare_execution succeeded + + // Here we clear the cache backup because if prepare_execution succeeded we don't want to + // revert the changes it made, like incrementing the sender's nonce by 1. + // Even if the transaction reverts we want to apply these kind of changes! initial_call_frame.cache_backup = HashMap::new(); // In CREATE type transactions: From a4352b0cbb84a303be475f4d6c847e735fa5f743 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Fri, 11 Apr 2025 11:56:25 -0300 Subject: [PATCH 29/47] clippy lint --- crates/vm/levm/src/vm.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index 6e7486f25b..bb13d66e96 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -339,7 +339,7 @@ impl<'a> VM<'a> { } pub fn restore_state(&mut self, backup: StateBackup, cache_backup: &mut CacheBackup) { - self.restore_cache_state(&cache_backup); + self.restore_cache_state(cache_backup); self.accrued_substate = backup.substate; self.env.refunded_gas = backup.refunded_gas; self.env.transient_storage = backup.transient_storage; From 08443e39f93cafb3f8537c412998342f4af5c0c9 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Fri, 11 Apr 2025 18:57:49 -0300 Subject: [PATCH 30/47] starting with fix after merge --- crates/vm/levm/src/db/gen_db.rs | 8 ++-- crates/vm/levm/src/hooks/default_hook.rs | 47 +++++++++--------------- crates/vm/levm/src/vm.rs | 38 +++++++++++-------- 3 files changed, 45 insertions(+), 48 deletions(-) diff --git a/crates/vm/levm/src/db/gen_db.rs b/crates/vm/levm/src/db/gen_db.rs index d6ae620383..fff95c59ef 100644 --- a/crates/vm/levm/src/db/gen_db.rs +++ b/crates/vm/levm/src/db/gen_db.rs @@ -148,9 +148,9 @@ impl GeneralizedDatabase { pub fn increment_account_nonce( &mut self, address: Address, - call_frame: Option<&mut CacheBackup>, + cache_backup: Option<&mut CacheBackup>, ) -> Result { - let account = self.get_account_mut(address, call_frame)?; + let account = self.get_account_mut(address, cache_backup)?; account.info.nonce = account .info .nonce @@ -162,9 +162,9 @@ impl GeneralizedDatabase { pub fn decrement_account_nonce( &mut self, address: Address, - call_frame: Option<&mut CacheBackup>, + cache_backup: Option<&mut CacheBackup>, ) -> Result<(), VMError> { - let account = self.get_account_mut(address, call_frame)?; + let account = self.get_account_mut(address, cache_backup)?; account.info.nonce = account .info .nonce diff --git a/crates/vm/levm/src/hooks/default_hook.rs b/crates/vm/levm/src/hooks/default_hook.rs index fd850a20be..3b051af002 100644 --- a/crates/vm/levm/src/hooks/default_hook.rs +++ b/crates/vm/levm/src/hooks/default_hook.rs @@ -341,40 +341,29 @@ impl Hook for DefaultHook { ) -> Result<(), VMError> { // POST-EXECUTION Changes let sender_address = initial_call_frame.msg_sender; - let receiver_address = initial_call_frame.to; - - // 1. Undo value transfer if the transaction has reverted - if let TxResult::Revert(_) = report.result { - let existing_account = vm.db.get_account(receiver_address)?; //TO Account - - if has_delegation(&existing_account.info)? { - // This is the case where the "to" address and the - // "signer" address are the same. We are setting the code - // and sending some balance to the "to"/"signer" - // address. - // See https://eips.ethereum.org/EIPS/eip-7702#behavior (last sentence). - - // If transaction execution results in failure (any - // exceptional condition or code reverting), setting - // delegation designations is not rolled back. - vm.db.decrease_account_balance( - receiver_address, + let to_address = initial_call_frame.to; + + // 1. Undo value transfer if a transaction that's not Type 4 has reverted. + let to_account = vm.db.get_account(to_address)?; + if !report.is_success() { + if !has_delegation(&to_account.info)? { + // If it's a create type transaction and it reverted the address wasn't updated + if !vm.is_create() { + vm.db.decrease_account_balance( + to_address, + initial_call_frame.msg_value, + None, + )?; + } + + vm.db.increase_account_balance( + sender_address, initial_call_frame.msg_value, None, )?; - } else { - // If the receiver of the transaction was in the cache before the transaction we restore it's state, - // but if it wasn't then we remove the account from cache like nothing happened. - if let Some(receiver_account) = vm.cache_backup.get(&receiver_address) { - insert_account(&mut vm.db.cache, receiver_address, receiver_account.clone()); - } else { - remove_account(&mut vm.db.cache, &receiver_address); - } } - - vm.db - .increase_account_balance(sender_address, initial_call_frame.msg_value, None)?; } + //TODO: See what the appropriate behavior is for EIP 7702... And remove field acc from vm.. // 2. Return unused gas + gas refunds to the sender. diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index 1b6e062044..abe9358903 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -3,7 +3,7 @@ use crate::{ call_frame::{CacheBackup, CallFrame}, constants::*, db::{ - cache::{self}, + cache::{self, get_account}, gen_db::GeneralizedDatabase, }, environment::Environment, @@ -171,6 +171,7 @@ pub struct VM<'a> { pub access_list: AccessList, pub authorization_list: Option, pub hooks: Vec>, + pub account: Option, } impl<'a> VM<'a> { @@ -226,6 +227,8 @@ impl<'a> VM<'a> { match to { TxKind::Call(address_to) => { + let acc = get_account(&db.cache, &address_to).cloned(); + default_touched_accounts.insert(address_to); let mut substate = Substate { @@ -261,6 +264,7 @@ impl<'a> VM<'a> { access_list, authorization_list, hooks, + account: acc, }) } TxKind::Create => { @@ -300,6 +304,7 @@ impl<'a> VM<'a> { access_list, authorization_list, hooks, + account: None, }) } } @@ -402,34 +407,37 @@ impl<'a> VM<'a> { } // Here we clear the cache backup because if prepare_execution succeeded we don't want to - // revert the changes it made, like incrementing the sender's nonce by 1. + // revert the changes it made. // Even if the transaction reverts we want to apply these kind of changes! + // These are: Incrementing sender nonce, transferring value to a delegate account, decreasing sender account balance initial_call_frame.cache_backup = HashMap::new(); // In CREATE type transactions: // Add created contract to cache, reverting transaction if the address is already occupied if self.is_create() { let new_contract_address = initial_call_frame.to; - let new_account = self.db.get_account(new_contract_address)?; - - let value = initial_call_frame.msg_value; - let balance = new_account - .info - .balance - .checked_add(value) - .ok_or(InternalError::ArithmeticOperationOverflow)?; + let new_account = self.db.get_account_mut( + new_contract_address, + Some(&mut initial_call_frame.cache_backup), + )?; if new_account.has_code_or_nonce() { return self.handle_create_non_empty_account(&mut initial_call_frame); } + self.db.increase_account_balance( + new_contract_address, + initial_call_frame.msg_value, + Some(&mut initial_call_frame.cache_backup), + )?; + // https://eips.ethereum.org/EIPS/eip-161 - let created_contract = if self.env.config.fork < Fork::SpuriousDragon { - Account::new(balance, Bytes::new(), 0, HashMap::new()) - } else { - Account::new(balance, Bytes::new(), 1, HashMap::new()) + if self.env.config.fork >= Fork::SpuriousDragon { + self.db.increment_account_nonce( + new_contract_address, + Some(&mut initial_call_frame.cache_backup), + )?; }; - cache::insert_account(&mut self.db.cache, new_contract_address, created_contract); } let mut report = self.run_execution(&mut initial_call_frame)?; From ea5ea56195a35c004a1bb460fd6382e6f914581c Mon Sep 17 00:00:00 2001 From: JereSalo Date: Fri, 11 Apr 2025 22:44:11 -0300 Subject: [PATCH 31/47] fix --- crates/vm/levm/src/hooks/default_hook.rs | 28 ++++++++---------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/crates/vm/levm/src/hooks/default_hook.rs b/crates/vm/levm/src/hooks/default_hook.rs index 3b051af002..46c651331f 100644 --- a/crates/vm/levm/src/hooks/default_hook.rs +++ b/crates/vm/levm/src/hooks/default_hook.rs @@ -2,8 +2,7 @@ use crate::{ account::Account, call_frame::CallFrame, constants::*, - db::cache::{insert_account, remove_account}, - errors::{ExecutionReport, InternalError, TxResult, TxValidationError, VMError}, + errors::{ExecutionReport, InternalError, TxValidationError, VMError}, gas_cost::{self, STANDARD_TOKEN_COST, TOTAL_COST_FLOOR_PER_TOKEN}, hooks::hook::Hook, utils::*, @@ -339,31 +338,22 @@ impl Hook for DefaultHook { initial_call_frame: &CallFrame, report: &mut ExecutionReport, ) -> Result<(), VMError> { - // POST-EXECUTION Changes let sender_address = initial_call_frame.msg_sender; - let to_address = initial_call_frame.to; - // 1. Undo value transfer if a transaction that's not Type 4 has reverted. - let to_account = vm.db.get_account(to_address)?; + // 1. Undo value transfer if Tx reverted if !report.is_success() { - if !has_delegation(&to_account.info)? { - // If it's a create type transaction and it reverted the address wasn't updated - if !vm.is_create() { - vm.db.decrease_account_balance( - to_address, - initial_call_frame.msg_value, - None, - )?; - } - - vm.db.increase_account_balance( - sender_address, + //TODO: Tests pass but I don't know if this is appropriate behavior for Type 4 Transactions. + if !vm.is_create() { + vm.db.decrease_account_balance( + initial_call_frame.to, initial_call_frame.msg_value, None, )?; } + + vm.db + .increase_account_balance(sender_address, initial_call_frame.msg_value, None)?; } - //TODO: See what the appropriate behavior is for EIP 7702... And remove field acc from vm.. // 2. Return unused gas + gas refunds to the sender. From ad400951e8f59e176eb0f228e04277b359d23fba Mon Sep 17 00:00:00 2001 From: JereSalo Date: Fri, 11 Apr 2025 22:47:35 -0300 Subject: [PATCH 32/47] delete comments --- crates/vm/levm/src/hooks/default_hook.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/vm/levm/src/hooks/default_hook.rs b/crates/vm/levm/src/hooks/default_hook.rs index 46c651331f..3ca38bb3c1 100644 --- a/crates/vm/levm/src/hooks/default_hook.rs +++ b/crates/vm/levm/src/hooks/default_hook.rs @@ -342,7 +342,6 @@ impl Hook for DefaultHook { // 1. Undo value transfer if Tx reverted if !report.is_success() { - //TODO: Tests pass but I don't know if this is appropriate behavior for Type 4 Transactions. if !vm.is_create() { vm.db.decrease_account_balance( initial_call_frame.to, From 3ba475ad1c8515585afff33fe313e58c208eebd0 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Mon, 14 Apr 2025 10:12:52 -0300 Subject: [PATCH 33/47] replace CallFrame for CacheBackup in some methods --- .../opcode_handlers/stack_memory_storage_flow.rs | 16 +++++++++++----- crates/vm/levm/src/vm.rs | 12 ++++-------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/crates/vm/levm/src/opcode_handlers/stack_memory_storage_flow.rs b/crates/vm/levm/src/opcode_handlers/stack_memory_storage_flow.rs index 4378946c8d..9f2dff98d1 100644 --- a/crates/vm/levm/src/opcode_handlers/stack_memory_storage_flow.rs +++ b/crates/vm/levm/src/opcode_handlers/stack_memory_storage_flow.rs @@ -150,8 +150,11 @@ impl<'a> VM<'a> { let storage_slot_key = H256::from(storage_slot_key.to_big_endian()); - let (storage_slot, storage_slot_was_cold) = - self.access_storage_slot(address, storage_slot_key, current_call_frame)?; + let (storage_slot, storage_slot_was_cold) = self.access_storage_slot( + address, + storage_slot_key, + &mut current_call_frame.cache_backup, + )?; current_call_frame.increase_consumed_gas(gas_cost::sload( storage_slot_was_cold, @@ -187,8 +190,11 @@ impl<'a> VM<'a> { // Convert key from U256 to H256 let key = H256::from(storage_slot_key.to_big_endian()); - let (storage_slot, storage_slot_was_cold) = - self.access_storage_slot(current_call_frame.to, key, current_call_frame)?; + let (storage_slot, storage_slot_was_cold) = self.access_storage_slot( + current_call_frame.to, + key, + &mut current_call_frame.cache_backup, + )?; // Gas Refunds // Sync gas refund with global env, ensuring consistency accross contexts. @@ -260,7 +266,7 @@ impl<'a> VM<'a> { current_call_frame.to, key, new_storage_slot_value, - current_call_frame, + &mut current_call_frame.cache_backup, )?; Ok(OpcodeResult::Continue { pc_increment: 1 }) } diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index abe9358903..17c2de824e 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -461,7 +461,7 @@ impl<'a> VM<'a> { &mut self, address: Address, key: H256, - call_frame: &mut CallFrame, + cache_backup: &mut CacheBackup, ) -> Result<(StorageSlot, bool), VMError> { // [EIP-2929] - Introduced conditional tracking of accessed storage slots for Berlin and later specs. let mut storage_slot_was_cold = false; @@ -495,9 +495,7 @@ impl<'a> VM<'a> { // When updating account storage of an account that's not yet cached we need to store the StorageSlot in the account // Note: We end up caching the account because it is the most straightforward way of doing it. - let account = self - .db - .get_account_mut(address, Some(&mut call_frame.cache_backup))?; + let account = self.db.get_account_mut(address, Some(cache_backup))?; account.storage.insert(key, storage_slot.clone()); Ok((storage_slot, storage_slot_was_cold)) @@ -508,11 +506,9 @@ impl<'a> VM<'a> { address: Address, key: H256, new_value: U256, - call_frame: &mut CallFrame, + cache_backup: &mut CacheBackup, ) -> Result<(), VMError> { - let account = self - .db - .get_account_mut(address, Some(&mut call_frame.cache_backup))?; + let account = self.db.get_account_mut(address, Some(cache_backup))?; let account_original_storage_slot_value = account .storage .get(&key) From c096368232edd51cc3b903fe3906948b9d7c7934 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Mon, 14 Apr 2025 10:24:18 -0300 Subject: [PATCH 34/47] make callframe immutable in finalize_execution --- crates/vm/levm/src/vm.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index 17c2de824e..4672c36634 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -442,7 +442,7 @@ impl<'a> VM<'a> { let mut report = self.run_execution(&mut initial_call_frame)?; - self.finalize_execution(&mut initial_call_frame, &mut report)?; + self.finalize_execution(&initial_call_frame, &mut report)?; Ok(report) } @@ -551,7 +551,7 @@ impl<'a> VM<'a> { fn finalize_execution( &mut self, - initial_call_frame: &mut CallFrame, + initial_call_frame: &CallFrame, report: &mut ExecutionReport, ) -> Result<(), VMError> { // NOTE: ATTOW the default hook is created in VM::new(), so From bac54a076f12f3a6bbd75cf28ecabbe515a72938 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Mon, 14 Apr 2025 10:26:06 -0300 Subject: [PATCH 35/47] remove field account (used for testing) from vm --- crates/vm/levm/src/vm.rs | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index 4672c36634..7208ebb588 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -1,11 +1,8 @@ use crate::{ - account::{Account, StorageSlot}, + account::StorageSlot, call_frame::{CacheBackup, CallFrame}, constants::*, - db::{ - cache::{self, get_account}, - gen_db::GeneralizedDatabase, - }, + db::{cache, gen_db::GeneralizedDatabase}, environment::Environment, errors::{ExecutionReport, InternalError, OpcodeResult, TxResult, VMError}, gas_cost::{self, STANDARD_TOKEN_COST, TOTAL_COST_FLOOR_PER_TOKEN}, @@ -171,7 +168,6 @@ pub struct VM<'a> { pub access_list: AccessList, pub authorization_list: Option, pub hooks: Vec>, - pub account: Option, } impl<'a> VM<'a> { @@ -227,8 +223,6 @@ impl<'a> VM<'a> { match to { TxKind::Call(address_to) => { - let acc = get_account(&db.cache, &address_to).cloned(); - default_touched_accounts.insert(address_to); let mut substate = Substate { @@ -264,7 +258,6 @@ impl<'a> VM<'a> { access_list, authorization_list, hooks, - account: acc, }) } TxKind::Create => { @@ -304,7 +297,6 @@ impl<'a> VM<'a> { access_list, authorization_list, hooks, - account: None, }) } } From 959becff15b6057cf3ef166621b701a0cb4438cb Mon Sep 17 00:00:00 2001 From: JereSalo Date: Mon, 14 Apr 2025 10:28:14 -0300 Subject: [PATCH 36/47] add comment --- crates/vm/levm/src/hooks/default_hook.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/vm/levm/src/hooks/default_hook.rs b/crates/vm/levm/src/hooks/default_hook.rs index 3ca38bb3c1..a95fdfa11b 100644 --- a/crates/vm/levm/src/hooks/default_hook.rs +++ b/crates/vm/levm/src/hooks/default_hook.rs @@ -342,6 +342,7 @@ impl Hook for DefaultHook { // 1. Undo value transfer if Tx reverted if !report.is_success() { + // In a create if Tx was reverted the account won't even exist by this point. if !vm.is_create() { vm.db.decrease_account_balance( initial_call_frame.to, From 37c285ab4a8055d9caacdcfff1e36d089802cf97 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Mon, 14 Apr 2025 10:35:05 -0300 Subject: [PATCH 37/47] remove coinbase fee check diff than zero --- crates/vm/levm/src/hooks/default_hook.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/crates/vm/levm/src/hooks/default_hook.rs b/crates/vm/levm/src/hooks/default_hook.rs index a95fdfa11b..e3e312f9a7 100644 --- a/crates/vm/levm/src/hooks/default_hook.rs +++ b/crates/vm/levm/src/hooks/default_hook.rs @@ -417,10 +417,8 @@ impl Hook for DefaultHook { .checked_mul(priority_fee_per_gas) .ok_or(VMError::BalanceOverflow)?; - if coinbase_fee != U256::zero() { - vm.db - .increase_account_balance(coinbase_address, coinbase_fee, None)?; - }; + vm.db + .increase_account_balance(coinbase_address, coinbase_fee, None)?; // 4. Destruct addresses in vm.selfdestruct set. // In Cancun the only addresses destroyed are contracts created in this transaction From a453f3c492a16b0e250db78ac0b16d1fdc79cea2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Paradelo?= Date: Tue, 15 Apr 2025 17:44:44 -0300 Subject: [PATCH 38/47] fix merge main --- crates/vm/backends/levm/mod.rs | 3 +- crates/vm/levm/src/hooks/l2_hook.rs | 62 +++++++++++++++-------------- 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/crates/vm/backends/levm/mod.rs b/crates/vm/backends/levm/mod.rs index db47bdc398..bd1ffb301c 100644 --- a/crates/vm/backends/levm/mod.rs +++ b/crates/vm/backends/levm/mod.rs @@ -17,9 +17,10 @@ use ethrex_common::{ }, Address, H256, U256, }; +use ethrex_levm::db::gen_db::GeneralizedDatabase; use ethrex_levm::{ errors::{ExecutionReport, TxResult, VMError}, - vm::{EVMConfig, GeneralizedDatabase, Substate, VM}, + vm::{EVMConfig, Substate, VM}, Account, AccountInfo as LevmAccountInfo, Environment, }; use ethrex_storage::error::StoreError; diff --git a/crates/vm/levm/src/hooks/l2_hook.rs b/crates/vm/levm/src/hooks/l2_hook.rs index 7424bb6e17..b01dde4bb3 100644 --- a/crates/vm/levm/src/hooks/l2_hook.rs +++ b/crates/vm/levm/src/hooks/l2_hook.rs @@ -8,9 +8,8 @@ use crate::{ errors::{InternalError, TxResult, TxValidationError, VMError}, gas_cost::{self, STANDARD_TOKEN_COST, TOTAL_COST_FLOOR_PER_TOKEN}, utils::{ - add_intrinsic_gas, eip7702_set_access_code, get_account, get_account_mut_vm, - get_base_fee_per_blob_gas, get_intrinsic_gas, get_valid_jump_destinations, has_delegation, - increase_account_balance, + add_intrinsic_gas, eip7702_set_access_code, get_base_fee_per_blob_gas, get_intrinsic_gas, + get_valid_jump_destinations, has_delegation, }, Account, }; @@ -30,7 +29,8 @@ impl Hook for L2Hook { vm: &mut crate::vm::VM<'_>, initial_call_frame: &mut crate::call_frame::CallFrame, ) -> Result<(), crate::errors::VMError> { - increase_account_balance(vm.db, self.recipient, initial_call_frame.msg_value)?; + vm.db + .increase_account_balance(self.recipient, initial_call_frame.msg_value, None)?; initial_call_frame.msg_value = U256::from(0); @@ -228,7 +228,7 @@ impl Hook for L2Hook { // 1. Undo value transfer if the transaction has reverted if let TxResult::Revert(_) = report.result { - let existing_account = get_account(vm.db, receiver_address)?; //TO Account + let existing_account = vm.db.get_account(receiver_address)?; //TO Account if has_delegation(&existing_account.info)? { // This is the case where the "to" address and the @@ -247,55 +247,59 @@ impl Hook for L2Hook { } // 2. Return unused gas + gas refunds to the sender. - let mut consumed_gas = report.gas_used; + + // a. Calculate refunded gas + let gas_used_without_refunds = report.gas_used; + // [EIP-3529](https://eips.ethereum.org/EIPS/eip-3529) - let quotient = if vm.env.config.fork < Fork::London { + // "The max refundable proportion of gas was reduced from one half to one fifth by EIP-3529 by Buterin and Swende [2021] in the London release" + let refund_quotient = if vm.env.config.fork < Fork::London { MAX_REFUND_QUOTIENT_PRE_LONDON } else { MAX_REFUND_QUOTIENT }; - let mut refunded_gas = report.gas_refunded.min( - consumed_gas - .checked_div(quotient) + let refunded_gas = report.gas_refunded.min( + gas_used_without_refunds + .checked_div(refund_quotient) .ok_or(VMError::Internal(InternalError::UndefinedState(-1)))?, ); - // "The max refundable proportion of gas was reduced from one half to one fifth by EIP-3529 by Buterin and Swende [2021] in the London release" - report.gas_refunded = refunded_gas; - if vm.env.config.fork >= Fork::Prague { - let floor_gas_price = vm.get_min_gas_used(initial_call_frame)?; - let execution_gas_used = consumed_gas.saturating_sub(refunded_gas); - if floor_gas_price > execution_gas_used { - consumed_gas = floor_gas_price; - refunded_gas = 0; - } - } + // b. Calculate actual gas used in the whole transaction. Since Prague there is a base minimum to be consumed. + let exec_gas_consumed = gas_used_without_refunds + .checked_sub(refunded_gas) + .ok_or(VMError::Internal(InternalError::UndefinedState(-2)))?; + + let actual_gas_used = if vm.env.config.fork >= Fork::Prague { + let minimum_gas_consumed = vm.get_min_gas_used(initial_call_frame)?; + exec_gas_consumed.max(minimum_gas_consumed) + } else { + exec_gas_consumed + }; + + // c. Update gas used and refunded in the Execution Report. + report.gas_used = actual_gas_used; + report.gas_refunded = refunded_gas; // 3. Pay coinbase fee let coinbase_address = vm.env.coinbase; - let gas_to_pay_coinbase = consumed_gas - .checked_sub(refunded_gas) - .ok_or(VMError::Internal(InternalError::UndefinedState(2)))?; - let priority_fee_per_gas = vm .env .gas_price .checked_sub(vm.env.base_fee_per_gas) .ok_or(VMError::GasPriceIsLowerThanBaseFee)?; - let coinbase_fee = U256::from(gas_to_pay_coinbase) + let coinbase_fee = U256::from(actual_gas_used) .checked_mul(priority_fee_per_gas) .ok_or(VMError::BalanceOverflow)?; - if coinbase_fee != U256::zero() { - increase_account_balance(vm.db, coinbase_address, coinbase_fee)?; - }; + vm.db + .increase_account_balance(coinbase_address, coinbase_fee, None)?; // 4. Destruct addresses in vm.estruct set. // In Cancun the only addresses destroyed are contracts created in this transaction let selfdestruct_set = vm.accrued_substate.selfdestruct_set.clone(); for address in selfdestruct_set { - let account_to_remove = get_account_mut_vm(vm.db, address)?; + let account_to_remove = vm.db.get_account_mut(address, None)?; *account_to_remove = Account::default(); } From 27ae20b17ec7299fedfa3b7acecc89941c9b94d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Paradelo?= Date: Tue, 15 Apr 2025 18:52:57 -0300 Subject: [PATCH 39/47] fix import --- crates/l2/utils/prover/save_state.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/utils/prover/save_state.rs b/crates/l2/utils/prover/save_state.rs index 01e40ece79..1c81a88cd6 100644 --- a/crates/l2/utils/prover/save_state.rs +++ b/crates/l2/utils/prover/save_state.rs @@ -384,6 +384,7 @@ pub fn block_number_has_all_needed_proofs( #[allow(clippy::expect_used)] mod tests { use ethrex_blockchain::Blockchain; + use ethrex_levm::db::gen_db::GeneralizedDatabase; use ethrex_storage::{EngineType, Store}; use ethrex_vm::{ backends::levm::{CacheDB, LEVM}, @@ -392,7 +393,6 @@ mod tests { use super::*; use crate::utils::test_data_io; - use ethrex_levm::vm::GeneralizedDatabase; use std::{ fs::{self}, sync::Arc, From d46a1fede7cb847bf4212ae49eedd8f82d2ca990 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jerem=C3=ADas=20Salom=C3=B3n?= <48994069+JereSalo@users.noreply.github.com> Date: Thu, 24 Apr 2025 09:48:09 -0300 Subject: [PATCH 40/47] refactor(levm): merge main to cache_rollback (#2557) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Motivation** - merge main changes to my other PR because main had a huge refactor and my PR was also a huge refactor :) **Description** Closes #issue_number --------- Co-authored-by: Julian Ventura <43799596+JulianVentura@users.noreply.github.com> Co-authored-by: Avila Gastón <72628438+avilagaston9@users.noreply.github.com> Co-authored-by: fmoletta <99273364+fmoletta@users.noreply.github.com> Co-authored-by: Matías Onorato Co-authored-by: Edgar Co-authored-by: Tomás Arjovsky Co-authored-by: Martin Paulucci Co-authored-by: Lucas Fiegl Co-authored-by: Estéfano Bargas Co-authored-by: Javier Rodríguez Chatruc <49622509+jrchatruc@users.noreply.github.com> Co-authored-by: VolodymyrBg Co-authored-by: Tomás Paradelo <112426153+tomip01@users.noreply.github.com> Co-authored-by: Mauro Toscano <12560266+MauroToscano@users.noreply.github.com> Co-authored-by: Cypher Pepe <125112044+cypherpepe@users.noreply.github.com> --- .github/scripts/flamegraph_watcher.sh | 37 +- .github/workflows/daily_loc.yaml | 5 +- .github/workflows/daily_reports.yaml | 15 +- .github/workflows/main_flamegraph_report.yaml | 63 +- .github/workflows/main_prover.yaml | 9 + .github/workflows/pr-main_l1.yaml | 13 +- .github/workflows/pr-main_l2.yaml | 2 + .github/workflows/pr-main_l2_contracts.yaml | 2 + .github/workflows/pr-main_l2_prover.yaml | 2 + ...> pr-main_l2_prover_nightly.yaml.disabled} | 4 + .github/workflows/pr-main_levm.yaml | 2 + .github/workflows/pr_perf_levm.yaml | 4 + CHANGELOG.md | 8 + Makefile | 8 +- README.md | 14 +- cmd/ef_tests/blockchain/Cargo.toml | 1 + cmd/ef_tests/blockchain/Makefile | 11 +- cmd/ef_tests/blockchain/test_runner.rs | 54 +- cmd/ef_tests/blockchain/tests/cancun.rs | 41 +- cmd/ef_tests/blockchain/tests/prague.rs | 47 +- cmd/ef_tests/blockchain/tests/shanghai.rs | 42 +- cmd/ef_tests/state/README.md | 31 +- cmd/ef_tests/state/deserialize.rs | 2 +- cmd/ef_tests/state/parser.rs | 76 +- cmd/ef_tests/state/report.rs | 473 +- cmd/ef_tests/state/runner/levm_runner.rs | 106 +- cmd/ef_tests/state/runner/mod.rs | 128 +- cmd/ef_tests/state/runner/revm_runner.rs | 45 +- cmd/ef_tests/state/tests/all.rs | 1 + cmd/ef_tests/state/types.rs | 15 +- cmd/ef_tests/state/utils.rs | 17 - cmd/ethrex/cli.rs | 71 +- cmd/ethrex/ethrex.rs | 4 +- cmd/ethrex/initializers.rs | 13 + cmd/ethrex/l2.rs | 6 +- cmd/ethrex/networks.rs | 7 + cmd/ethrex/networks/mainnet/bootnodes.json | 6 + cmd/ethrex/networks/mainnet/genesis.json | 26732 ++++++++++++++++ cmd/load_test/README.md | 3 +- cmd/load_test/src/main.rs | 76 + crates/blockchain/blockchain.rs | 186 +- crates/blockchain/dev/block_producer.rs | 4 +- crates/blockchain/metrics/README.md | 5 +- crates/blockchain/payload.rs | 53 +- crates/blockchain/smoke_test.rs | 6 +- crates/common/rlp/error.rs | 2 +- crates/common/rlp/structs.rs | 6 +- crates/common/trie/db.rs | 2 +- crates/common/trie/nibbles.rs | 2 +- crates/common/trie/node.rs | 7 +- crates/common/trie/node/branch.rs | 27 +- crates/common/trie/node/extension.rs | 22 +- crates/common/trie/node/leaf.rs | 10 +- crates/common/trie/node_hash.rs | 78 +- crates/common/trie/rlp.rs | 2 +- crates/common/trie/state.rs | 4 +- crates/common/trie/trie.rs | 27 +- crates/common/trie/trie_iter.rs | 7 +- crates/common/trie/verify_range.rs | 35 +- crates/l2/Makefile | 1 + crates/l2/contracts/deployer.rs | 17 +- crates/l2/contracts/src/l1/CommonBridge.sol | 2 +- .../l2/contracts/src/l1/OnChainProposer.sol | 2 +- .../src/l1/interfaces/ICommonBridge.sol | 2 +- .../src/l1/interfaces/IOnChainProposer.sol | 2 +- .../src/l1/interfaces/IPicoVerifier.sol | 2 +- .../src/l1/interfaces/IRiscZeroVerifier.sol | 2 +- .../src/l1/interfaces/ISP1Verifier.sol | 2 +- crates/l2/contracts/src/l2/CommonBridgeL2.sol | 2 +- .../src/l2/interfaces/ICommonBridgeL2.sol | 2 +- crates/l2/docs/README.md | 9 +- crates/l2/prover/src/backends/exec.rs | 9 +- .../l2/prover/zkvm/interface/pico/src/main.rs | 2 +- .../prover/zkvm/interface/risc0/src/main.rs | 3 +- .../l2/prover/zkvm/interface/sp1/src/main.rs | 3 +- crates/l2/sdk/src/calldata.rs | 125 +- crates/l2/sequencer/block_producer.rs | 20 +- .../block_producer/payload_builder.rs | 314 + crates/l2/sequencer/errors.rs | 15 +- crates/l2/sequencer/l1_committer.rs | 67 +- crates/l2/sequencer/state_diff.rs | 74 +- crates/l2/tests/tests.rs | 48 +- crates/l2/utils/error.rs | 6 + crates/l2/utils/helpers.rs | 29 + crates/l2/utils/mod.rs | 1 + crates/l2/utils/prover/save_state.rs | 6 +- crates/networking/p2p/rlpx/error.rs | 2 + crates/networking/p2p/rlpx/frame.rs | 16 +- crates/networking/p2p/sync.rs | 13 +- crates/networking/p2p/sync/state_healing.rs | 11 +- crates/networking/p2p/sync/storage_healing.rs | 28 +- crates/networking/p2p/sync_manager.rs | 17 +- crates/networking/rpc/clients/auth/errors.rs | 4 +- crates/networking/rpc/clients/auth/mod.rs | 65 +- crates/networking/rpc/engine/fork_choice.rs | 95 +- crates/networking/rpc/engine/payload.rs | 257 +- crates/networking/rpc/net/mod.rs | 6 + crates/networking/rpc/rpc.rs | 9 +- crates/storage/api.rs | 2 +- crates/storage/store.rs | 4 +- crates/storage/store_db/in_memory.rs | 4 +- crates/storage/store_db/libmdbx.rs | 4 +- crates/storage/store_db/redb.rs | 4 +- crates/vm/backends/levm/db.rs | 23 +- crates/vm/backends/levm/mod.rs | 222 +- crates/vm/backends/mod.rs | 2 +- crates/vm/backends/revm/db.rs | 22 + crates/vm/backends/revm/mod.rs | 8 +- crates/vm/levm/Makefile | 8 +- crates/vm/levm/src/call_frame.rs | 2 +- crates/vm/levm/src/db/gen_db.rs | 132 +- crates/vm/levm/src/execution_handlers.rs | 231 +- crates/vm/levm/src/hooks/default_hook.rs | 90 +- crates/vm/levm/src/hooks/hook.rs | 6 +- crates/vm/levm/src/hooks/l2_hook.rs | 90 +- .../vm/levm/src/opcode_handlers/arithmetic.rs | 46 +- .../src/opcode_handlers/bitwise_comparison.rs | 55 +- crates/vm/levm/src/opcode_handlers/block.rs | 133 +- crates/vm/levm/src/opcode_handlers/dup.rs | 8 +- .../levm/src/opcode_handlers/environment.rs | 159 +- .../vm/levm/src/opcode_handlers/exchange.rs | 8 +- crates/vm/levm/src/opcode_handlers/keccak.rs | 7 +- crates/vm/levm/src/opcode_handlers/logging.rs | 8 +- crates/vm/levm/src/opcode_handlers/push.rs | 13 +- .../stack_memory_storage_flow.rs | 172 +- crates/vm/levm/src/opcode_handlers/system.rs | 855 +- crates/vm/levm/src/utils.rs | 234 +- crates/vm/levm/src/vm.rs | 398 +- test_data/genesis-l1-dev.json | 1 + test_data/genesis-l1.json | 2 +- test_data/genesis-l2.json | 2 +- test_data/network_params.yaml | 7 + 132 files changed, 30092 insertions(+), 2841 deletions(-) mode change 100644 => 100755 .github/scripts/flamegraph_watcher.sh rename .github/workflows/{pr-main_l2_prover_nightly.yaml => pr-main_l2_prover_nightly.yaml.disabled} (94%) create mode 100644 cmd/ethrex/networks/mainnet/bootnodes.json create mode 100644 cmd/ethrex/networks/mainnet/genesis.json create mode 100644 crates/l2/sequencer/block_producer/payload_builder.rs create mode 100644 crates/l2/utils/helpers.rs diff --git a/.github/scripts/flamegraph_watcher.sh b/.github/scripts/flamegraph_watcher.sh old mode 100644 new mode 100755 index 368ce462d6..5a0d3b8222 --- a/.github/scripts/flamegraph_watcher.sh +++ b/.github/scripts/flamegraph_watcher.sh @@ -1,31 +1,28 @@ #!/bin/bash +set -e -# This script sends 171 * transactions to a test account, per defined private key -# then polls the account balance until the expected balance has been reached -# and then kills the process. It also measures the elapsed time of the test and -# outputs it to Github Action's outputs. -iterations=3500 -value=1 -account=0x33c6b73432B3aeA0C1725E415CC40D04908B85fd -end_val=$((171 * $iterations * $value)) +# This script runs a load test and then kills the node under test. The load test sends a +# transaction from each rich account to a random one, so we can check their nonce to +# determine that the load test finished. +# +# Usage: +# ./flamegraph_watcher.sh +# Requires a PROGRAM variable to be set (e.g. ethrex). This $PROGRAM will be killed when the +# load test finishes. Must be run from the context of the repo root. -start_time=$(date +%s) -ethrex_l2 test load --path /home/runner/work/ethrex/ethrex/test_data/private_keys.txt -i $iterations -v --value $value --to $account >/dev/null +# TODO(#2486): Move this to a cached build outside. +echo "Building load test" +cargo build --release --manifest-path ./cmd/load_test/Cargo.toml -output=$(ethrex_l2 info -b -a $account --wei 2>&1) -echo "balance: $output" -while [[ $output -lt $end_val ]]; do - sleep 2 - output=$(ethrex_l2 info -b -a $account --wei 2>&1) - echo "balance: $output" -done +echo "Starting load test" +start_time=$(date +%s) +RUST_BACKTRACE=1 ./target/release/load_test -k ./test_data/private_keys.txt -t eth-transfers -N 1000 -n http://localhost:1729 -w 5 >/dev/null end_time=$(date +%s) -elapsed=$((end_time - start_time)) +elapsed=$((end_time - start_time)) minutes=$((elapsed / 60)) seconds=$((elapsed % 60)) -output=$(ethrex_l2 info -b -a $account --wei 2>&1) -echo "Balance of $output reached in $minutes min $seconds s, killing process" +echo "All load test transactions included in $minutes min $seconds s, killing node process." echo killing "$PROGRAM" sudo pkill "$PROGRAM" diff --git a/.github/workflows/daily_loc.yaml b/.github/workflows/daily_loc.yaml index 0155b3175b..890777c79f 100644 --- a/.github/workflows/daily_loc.yaml +++ b/.github/workflows/daily_loc.yaml @@ -55,10 +55,9 @@ jobs: ${{ github.event_name == 'workflow_dispatch' && secrets.TEST_CHANNEL_SLACK || format( - '{0} {1} {2}', + '{0} {1}', secrets.ETHREX_L1_SLACK_WEBHOOK, - secrets.ETHREX_L2_SLACK_WEBHOOK, - secrets.LEVM_SLACK_WEBHOOK + secrets.ETHREX_L2_SLACK_WEBHOOK ) }} run: | diff --git a/.github/workflows/daily_reports.yaml b/.github/workflows/daily_reports.yaml index ab62a0812c..e826b7092c 100644 --- a/.github/workflows/daily_reports.yaml +++ b/.github/workflows/daily_reports.yaml @@ -53,10 +53,9 @@ jobs: ${{ github.event_name == 'workflow_dispatch' && secrets.TEST_CHANNEL_SLACK || format( - '{0} {1} {2}', + '{0} {1}', secrets.ETHREX_L1_SLACK_WEBHOOK, - secrets.ETHREX_L2_SLACK_WEBHOOK, - secrets.LEVM_SLACK_WEBHOOK + secrets.ETHREX_L2_SLACK_WEBHOOK ) }} run: | @@ -72,8 +71,8 @@ jobs: && secrets.TEST_CHANNEL_SLACK || format( '{0} {1}', - secrets.ETHREX_L2_SLACK_WEBHOOK, - secrets.LEVM_SLACK_WEBHOOK + secrets.ETHREX_L1_SLACK_WEBHOOK, + secrets.ETHREX_L2_SLACK_WEBHOOK ) }} run: | @@ -87,7 +86,7 @@ jobs: SLACK_WEBHOOK: > ${{ github.event_name == 'workflow_dispatch' && secrets.TEST_CHANNEL_SLACK - || secrets.LEVM_SLACK_WEBHOOK + || secrets.ETHREX_L1_SLACK_WEBHOOK }} # Only send diff message if the diff has changed run: | @@ -144,7 +143,7 @@ jobs: SLACK_WEBHOOK: > ${{ github.event_name == 'workflow_dispatch' && secrets.TEST_CHANNEL_SLACK - || secrets.LEVM_SLACK_WEBHOOK + || secrets.ETHREX_L1_SLACK_WEBHOOK }} run: sh .github/scripts/publish_levm_ef_tests.sh "$SLACK_WEBHOOK" @@ -163,7 +162,7 @@ jobs: || format( '{0} {1}', secrets.ETHREX_L2_SLACK_WEBHOOK, - secrets.LEVM_SLACK_WEBHOOK + secrets.ETHREX_L1_SLACK_WEBHOOK ) }} run: | diff --git a/.github/workflows/main_flamegraph_report.yaml b/.github/workflows/main_flamegraph_report.yaml index b3334d5f13..af9f018af6 100644 --- a/.github/workflows/main_flamegraph_report.yaml +++ b/.github/workflows/main_flamegraph_report.yaml @@ -6,9 +6,8 @@ permissions: id-token: write on: - # re-enable this when fixing the workflow - # push: - # branches: ["main"] + push: + branches: ["main"] workflow_dispatch: env: @@ -183,13 +182,6 @@ jobs: ${{ env.HOME }}/.cargo/bin/inferno-* key: ${{ runner.os }}-extra-binaries - - name: Cache ethrex_l2 - id: cache-ethrex-l2 - uses: actions/cache@v4 - with: - path: ${{ env.HOME }}/.cargo/bin/ethrex_l2 - key: ${{ runner.os }}-ethrex-l2-${{ hashFiles('cmd/ethrex_l2/Cargo.lock') }} - - name: Change perf settings run: | sudo sysctl kernel.perf_event_paranoid=-1 @@ -236,30 +228,18 @@ jobs: echo "$HOME/.cargo/bin/inferno-collapse-perf" already found fi - - name: Install ethrex_l2 cli - run: | - if [ -f "$HOME/.cargo/bin/ethrex_l2" ]; then - echo "$HOME/.cargo/bin/ethrex_l2" already found - else - cargo install --force --path cmd/ethrex_l2 - fi - ethrex_l2 config create default --default - ethrex_l2 config set default - # By default ethrex uses revm as evm backend. - id: generate-flamegraph-ethrex name: Generate Flamegraph data for Ethrex shell: bash run: | rm -rf target/release/ethrex + cargo build --release --bin ethrex --features dev CARGO_PROFILE_RELEASE_DEBUG=true cargo flamegraph -c "record -o perf.data -F997 --call-graph dwarf,16384 -g" \ - --bin ethrex --features dev -- --dev --network /home/runner/work/ethrex/ethrex/test_data/genesis-l2.json --http.port 1729 >/dev/null & - while [ ! -x "./target/release/ethrex" ]; do - echo "Waiting for ethrex binary to be ready..." - sleep 2 - done + --bin ethrex --release --features dev -- \ + --dev --network /home/runner/work/ethrex/ethrex/test_data/genesis-l2-ci.json --http.port 1729 >/dev/null & sleep 10 - echo "Compilation finished. Executing load test..." + echo "Executing load test..." bash /home/runner/work/ethrex/ethrex/.github/scripts/flamegraph_watcher.sh && echo "Load test finished" @@ -293,12 +273,13 @@ jobs: with: toolchain: ${{ env.RUST_RETH_VERSION }} + # We need a reth version that requires a rustc version <= 1.82.0 - name: Checkout reth uses: actions/checkout@v4 with: repository: paradigmxyz/reth path: "reth" - ref: main + ref: b2ead06d1d0804101de0d1eb3a070e08d8eab857 - name: Caching uses: Swatinem/rust-cache@v2 @@ -316,13 +297,6 @@ jobs: ${{ env.HOME }}/.cargo/bin/inferno-* key: ${{ runner.os }}-extra-binaries - - name: Cache ethrex_l2 - id: cache-ethrex-l2 - uses: actions/cache@v4 - with: - path: ${{ env.HOME }}/.cargo/bin/ethrex_l2 - key: ${{ runner.os }}-ethrex-l2-${{ hashFiles('cmd/ethrex_l2/Cargo.lock') }} - - name: Change perf settings run: | sudo sysctl kernel.perf_event_paranoid=-1 @@ -369,16 +343,6 @@ jobs: echo "$HOME/.cargo/bin/inferno-collapse-perf" already found fi - - name: Install ethrex_l2 cli - run: | - if [ -f "$HOME/.cargo/bin/ethrex_l2" ]; then - echo "$HOME/.cargo/bin/ethrex_l2" already found - else - cargo install --force --path cmd/ethrex_l2 - fi - ethrex_l2 config create default --default - ethrex_l2 config set default - - id: generate-flamegraph-reth name: Build and test reth shell: bash @@ -386,18 +350,15 @@ jobs: run: | cd ./reth rm -rf target/profiling/reth - CARGO_PROFILE_RELEASE_DEBUG=true cargo flamegraph -c "record -o perf.data -F997 --call-graph dwarf,16384 -g" \ - --bin reth --profile profiling -- node --chain /home/runner/work/ethrex/ethrex/test_data/genesis-load-test.json --dev \ + cargo build --bin reth --profile profiling + CARGO_PROFILE_RELEASE_DEBUG=true cargo flamegraph -c "record -o perf.data -F997 --call-graph dwarf,16384 -g" --bin reth --profile profiling -- \ + node --chain /home/runner/work/ethrex/ethrex/test_data/genesis-l2-ci.json --dev \ --dev.block-time 1000ms --http.port 1729 --txpool.max-pending-txns 100000000 --txpool.max-new-txns 1000000000 \ --txpool.pending-max-count 100000000 --txpool.pending-max-size 10000000000 --txpool.basefee-max-count 100000000000 \ --txpool.basefee-max-size 1000000000000 --txpool.queued-max-count 1000000000 >/dev/null & - while [ ! -x "./target/profiling/reth" ]; do - echo "Waiting for reth binary to be ready..." - sleep 10 - done sleep 30 echo "Executing load test..." - bash /home/runner/work/ethrex/ethrex/.github/scripts/flamegraph_watcher.sh && + (cd /home/runner/work/ethrex/ethrex; ./.github/scripts/flamegraph_watcher.sh) echo "Load test finished" - name: Generate SVG diff --git a/.github/workflows/main_prover.yaml b/.github/workflows/main_prover.yaml index c040bf0358..e9227e5386 100644 --- a/.github/workflows/main_prover.yaml +++ b/.github/workflows/main_prover.yaml @@ -71,3 +71,12 @@ jobs: - name: Ensure admin permissions in _work if: always() run: sudo chown admin:admin -R /home/admin/actions-runner/_work/ + + - name: Report Status + if: always() + uses: ravsamhq/notify-slack-action@v2 + with: + status: ${{ job.status }} + notify_when: 'failure' + env: + SLACK_WEBHOOK_URL: ${{ secrets.ETHREX_L2_SLACK_WEBHOOK }} diff --git a/.github/workflows/pr-main_l1.yaml b/.github/workflows/pr-main_l1.yaml index 8e96bbd436..a4c4fcedae 100644 --- a/.github/workflows/pr-main_l1.yaml +++ b/.github/workflows/pr-main_l1.yaml @@ -160,11 +160,11 @@ jobs: ethrex_flags: "" - name: "Cancun Engine tests" simulation: ethereum/engine - test_pattern: "engine-cancun/Blob Transactions On Block 1|Blob Transaction Ordering, Single|Blob Transaction Ordering, Multiple Accounts|Replace Blob Transactions|Parallel Blob Transactions|ForkchoiceUpdatedV3|ForkchoiceUpdatedV2|ForkchoiceUpdated Version|GetPayload|NewPayloadV3 After Cancun|NewPayloadV3 Before Cancun|NewPayloadV3 Versioned Hashes|Incorrect BlobGasUsed|ParentHash equals BlockHash|RPC:|in ForkchoiceState|Unknown SafeBlockHash|Unknown FinalizedBlockHash|Unique|Re-Execute Payload|Multiple New Payloads|NewPayload with|Build Payload with|Re-org to Previously|Safe Re-Org to Side Chain|Transaction Re-Org|Re-Org Back into Canonical Chain, Depth=5|Suggested Fee Recipient Test|PrevRandao Opcode|Fork ID: *|Invalid Missing Ancestor Syncing ReOrg|Request Blob Pooled Transactions" + test_pattern: "engine-cancun/Blob Transactions On Block 1|Blob Transaction Ordering, Single|Blob Transaction Ordering, Multiple Accounts|Replace Blob Transactions|Parallel Blob Transactions|ForkchoiceUpdatedV3|ForkchoiceUpdatedV2|ForkchoiceUpdated Version|GetPayload|NewPayloadV3 After Cancun|NewPayloadV3 Before Cancun|NewPayloadV3 Versioned Hashes|Incorrect BlobGasUsed|ParentHash equals BlockHash|RPC:|in ForkchoiceState|Unknown SafeBlockHash|Unknown FinalizedBlockHash|Unique|Re-Execute Payload|Multiple New Payloads|NewPayload with|Build Payload with|Re-org to Previously|Safe Re-Org to Side Chain|Transaction Re-Org|Re-Org Back into Canonical Chain, Depth=5|Suggested Fee Recipient Test|PrevRandao Opcode|Fork ID: *|Invalid Missing Ancestor Syncing ReOrg|Request Blob Pooled Transactions|Invalid NewPayload, Incomplete Transactions|Invalid P9|Invalid P10|Re-Org Back to Canonical Chain*|Invalid PayloadAttributes*|Invalid NewPayload, VersionedHashes|Invalid NewPayload, Incomplete VersionedHashes|Invalid NewPayload, Extra VersionedHashes|Bad Hash on NewPayload|Unknown HeadBlockHash|In-Order Consecutive Payload Execution|Valid NewPayload->ForkchoiceUpdated|Invalid NewPayload, ParentHash|Syncing=False|Payload Build after New Invalid Payload" ethrex_flags: "" - name: "Paris Engine tests" simulation: ethereum/engine - test_pattern: "engine-api/RPC|Re-org to Previously Validated Sidechain Payload|Re-Org Back into Canonical Chain, Depth=5|Safe Re-Org|Transaction Re-Org|Inconsistent|Suggested Fee|PrevRandao Opcode Transactions|Fork ID|Unknown SafeBlockHash|Unknown FinalizedBlockHash|Unique Payload ID|Re-Execute Payload|Multiple New Payloads|NewPayload with|Payload Build|Build Payload" + test_pattern: "engine-api/RPC|Re-org to Previously Validated Sidechain Payload|Re-Org Back into Canonical Chain, Depth=5|Safe Re-Org|Transaction Re-Org|Inconsistent|Suggested Fee|PrevRandao Opcode Transactions|Fork ID|Unknown SafeBlockHash|Unknown FinalizedBlockHash|Unique Payload ID|Re-Execute Payload|Multiple New Payloads|NewPayload with|Payload Build|Build Payload|Invalid PayloadAttributes|Unknown HeadBlockHash|Valid NewPayload->ForkchoiceUpdated|Invalid NewPayload, ParentHash|Bad Hash on NewPayload|Invalid P9|In-Order Consecutive Payload Execution|Re-Org Back to Canonical Chain" ethrex_flags: "" - name: "Engine withdrawal tests" simulation: ethereum/engine @@ -174,10 +174,11 @@ jobs: simulation: ethereum/sync test_pattern: "" ethrex_flags: "--syncmode full" - - name: "Sync snap" - simulation: ethereum/sync - test_pattern: "" - ethrex_flags: "--syncmode snap" + # Flaky test, reenable when fixed + # - name: "Sync snap" + # simulation: ethereum/sync + # test_pattern: "" + # ethrex_flags: "--syncmode snap" steps: - name: Checkout sources uses: actions/checkout@v4 diff --git a/.github/workflows/pr-main_l2.yaml b/.github/workflows/pr-main_l2.yaml index f9b0325f50..08dd2ea848 100644 --- a/.github/workflows/pr-main_l2.yaml +++ b/.github/workflows/pr-main_l2.yaml @@ -6,6 +6,8 @@ on: branches: ["**"] paths: - "crates/l2/**" + - "test_data/**" + - "crates/blockchain/dev/**" - "crates/vm/levm/**" - ".github/workflows/pr-main_l2.yaml" diff --git a/.github/workflows/pr-main_l2_contracts.yaml b/.github/workflows/pr-main_l2_contracts.yaml index a5c7e8f4a1..8d14d94b36 100644 --- a/.github/workflows/pr-main_l2_contracts.yaml +++ b/.github/workflows/pr-main_l2_contracts.yaml @@ -24,6 +24,8 @@ jobs: uses: dtolnay/rust-toolchain@stable - name: Install solc uses: pontem-network/get-solc@master + with: + version: v0.8.29 - name: Caching uses: Swatinem/rust-cache@v2 - name: Run test of deployer.rs diff --git a/.github/workflows/pr-main_l2_prover.yaml b/.github/workflows/pr-main_l2_prover.yaml index 8149012bc9..24594bd613 100644 --- a/.github/workflows/pr-main_l2_prover.yaml +++ b/.github/workflows/pr-main_l2_prover.yaml @@ -6,6 +6,8 @@ on: branches: ["**"] paths: - "crates/l2/prover/**" + - "test_data/**" + - "crates/blockchain/dev/**" - ".github/workflows/pr-main_l2_prover.yaml" concurrency: diff --git a/.github/workflows/pr-main_l2_prover_nightly.yaml b/.github/workflows/pr-main_l2_prover_nightly.yaml.disabled similarity index 94% rename from .github/workflows/pr-main_l2_prover_nightly.yaml rename to .github/workflows/pr-main_l2_prover_nightly.yaml.disabled index 7caf8e6629..fd2ea97d1a 100644 --- a/.github/workflows/pr-main_l2_prover_nightly.yaml +++ b/.github/workflows/pr-main_l2_prover_nightly.yaml.disabled @@ -1,3 +1,5 @@ +# DISABLED: Temporarily disabled due to Pico dependency issues + # The reason this exists is because the Pico zkVM compiles in nightly only. name: L2 Prover (nightly) on: @@ -7,6 +9,8 @@ on: branches: ["**"] paths: - "crates/l2/prover/**" + - "test_data/**" + - "crates/blockchain/dev/**" - "crates/vm/levm/**" - ".github/workflows/pr-main_l2_prover_nightly.yaml" diff --git a/.github/workflows/pr-main_levm.yaml b/.github/workflows/pr-main_levm.yaml index 9c59d8a171..c3597ce37f 100644 --- a/.github/workflows/pr-main_levm.yaml +++ b/.github/workflows/pr-main_levm.yaml @@ -322,6 +322,8 @@ jobs: - name: Install solc uses: pontem-network/get-solc@master + with: + version: v0.8.29 - name: Run benchmarks run: | diff --git a/.github/workflows/pr_perf_levm.yaml b/.github/workflows/pr_perf_levm.yaml index 2014c1210a..734159f41e 100644 --- a/.github/workflows/pr_perf_levm.yaml +++ b/.github/workflows/pr_perf_levm.yaml @@ -35,6 +35,8 @@ jobs: - name: Install solc uses: pontem-network/get-solc@master + with: + version: v0.8.29 - name: Run PR benchmarks run: | @@ -89,6 +91,8 @@ jobs: - name: Install solc uses: pontem-network/get-solc@master + with: + version: v0.8.29 - name: Run main benchmarks run: | diff --git a/CHANGELOG.md b/CHANGELOG.md index f93d2fb553..30d3ecaae1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,16 @@ ## Perf +### 2025-04-22 + +- Avoid calculating state transitions after every block in bulk mode [2519](https://github.com/lambdaclass/ethrex/pull/2519) + +- Transform the inlined variant of NodeHash to a constant sized array [2516](https://github.com/lambdaclass/ethrex/pull/2516) + ### 2025-04-11 +- Removed some unnecessary clones and made some functions const: [2438](https://github.com/lambdaclass/ethrex/pull/2438) + - Asyncify some DB read APIs, as well as its users [#2430](https://github.com/lambdaclass/ethrex/pull/2430) ### 2025-04-09 diff --git a/Makefile b/Makefile index bdfb9700c2..4be686e54f 100644 --- a/Makefile +++ b/Makefile @@ -161,16 +161,16 @@ start-node-with-flamegraph: rm-test-db ## 🚀🔥 Starts an ethrex client used --datadir test_ethrex load-test: ## 🚧 Runs a load-test. Run make start-node-with-flamegraph and in a new terminal make load-node - cargo run --manifest-path ./cmd/load_test/Cargo.toml -- -k ./test_data/private_keys.txt -t eth-transfers + cargo run --release --manifest-path ./cmd/load_test/Cargo.toml -- -k ./test_data/private_keys.txt -t eth-transfers load-test-erc20: - cargo run --manifest-path ./cmd/load_test/Cargo.toml -- -k ./test_data/private_keys.txt -t erc20 + cargo run --release --manifest-path ./cmd/load_test/Cargo.toml -- -k ./test_data/private_keys.txt -t erc20 load-test-fibonacci: - cargo run --manifest-path ./cmd/load_test/Cargo.toml -- -k ./test_data/private_keys.txt -t fibonacci + cargo run --release --manifest-path ./cmd/load_test/Cargo.toml -- -k ./test_data/private_keys.txt -t fibonacci load-test-io: - cargo run --manifest-path ./cmd/load_test/Cargo.toml -- -k ./test_data/private_keys.txt -t io-heavy + cargo run --release --manifest-path ./cmd/load_test/Cargo.toml -- -k ./test_data/private_keys.txt -t io-heavy rm-test-db: ## 🛑 Removes the DB used by the ethrex client used for testing sudo cargo run --release --bin ethrex -- removedb --force --datadir test_ethrex diff --git a/README.md b/README.md index bc822830be..e9f7ad283d 100644 --- a/README.md +++ b/README.md @@ -205,11 +205,14 @@ Options: Node options: --network - Alternatively, the name of a known network can be provided instead to use its preset genesis file and include its preset bootnodes. The networks currently supported include holesky, sepolia and hoodi. + Alternatively, the name of a known network can be provided instead to use its preset genesis file and include its preset bootnodes. The networks currently supported include holesky, sepolia, hoodi and mainnet. + + [env: ETHREX_NETWORK=] --datadir If the datadir is the word `memory`, ethrex will use the `InMemory Engine`. + [env: ETHREX_DATADIR=] [default: ethrex] --force @@ -219,14 +222,19 @@ Node options: [default: 0.0.0.0] --metrics.port + [env: ETHREX_METRICS_PORT=] [default: 9090] + --metrics + Enable metrics collection and exposition + --dev If set it will be considered as `true`. The Binary has to be built with the `dev` feature enabled. --evm Has to be `levm` or `revm` + [env: ETHREX_EVM=] [default: revm] --log.level @@ -266,11 +274,13 @@ RPC options: --http.addr
Listening address for the http rpc server. + [env: ETHREX_HTTP_ADDR=] [default: localhost] --http.port Listening port for the http rpc server. + [env: ETHREX_HTTP_PORT=] [default: 8545] --authrpc.addr
@@ -314,7 +324,7 @@ At a high level, the following new parts are added to the node: - [Rust (explained in L1 requirements section above)](#build) - [Docker](https://docs.docker.com/engine/install/) (with [Docker Compose](https://docs.docker.com/compose/install/)) -- [The Solidity Compiler](https://docs.soliditylang.org/en/latest/installing-solidity.html) (solc) +- [The Solidity Compiler](https://docs.soliditylang.org/en/latest/installing-solidity.html) (solc v0.8.29) ## How to run diff --git a/cmd/ef_tests/blockchain/Cargo.toml b/cmd/ef_tests/blockchain/Cargo.toml index 868e976113..cd9c69bf3d 100644 --- a/cmd/ef_tests/blockchain/Cargo.toml +++ b/cmd/ef_tests/blockchain/Cargo.toml @@ -27,6 +27,7 @@ path = "./lib.rs" default = ["c-kzg", "blst"] blst = ["ethrex-vm/blst"] c-kzg = ["ethrex-blockchain/c-kzg"] +levm = [] [[test]] name = "cancun" diff --git a/cmd/ef_tests/blockchain/Makefile b/cmd/ef_tests/blockchain/Makefile index 8578a3dfb8..09b29c52b1 100644 --- a/cmd/ef_tests/blockchain/Makefile +++ b/cmd/ef_tests/blockchain/Makefile @@ -23,5 +23,12 @@ clean-vectors: ## 🗑️ Clean test vectors rm -rf $(SPECTEST_VECTORS_DIR) rm -f $(SPECTEST_ARTIFACT) -test: $(SPECTEST_VECTORS_DIR) ## 🧪 Run blockchain tests - cargo test +test-levm: $(SPECTEST_VECTORS_DIR) ## 🧪 Run blockchain tests with LEVM + cargo test --release --features levm + +test-revm: $(SPECTEST_VECTORS_DIR) ## 🧪 Run blockchain tests with REVM + cargo test --release + +test: $(SPECTEST_VECTORS_DIR) ## 🧪 Run blockchain tests with both VMs + $(MAKE) test-levm + $(MAKE) test-revm diff --git a/cmd/ef_tests/blockchain/test_runner.rs b/cmd/ef_tests/blockchain/test_runner.rs index 018c2cebc6..1c395850af 100644 --- a/cmd/ef_tests/blockchain/test_runner.rs +++ b/cmd/ef_tests/blockchain/test_runner.rs @@ -1,14 +1,37 @@ use std::{collections::HashMap, path::Path}; -use crate::types::{BlockWithRLP, TestUnit}; +use crate::{ + network::Network, + types::{BlockWithRLP, TestUnit}, +}; use ethrex_blockchain::{fork_choice::apply_fork_choice, Blockchain}; use ethrex_common::types::{ - Account as CoreAccount, Block as CoreBlock, BlockHeader as CoreBlockHeader, + Account as CoreAccount, Block as CoreBlock, BlockHeader as CoreBlockHeader, EMPTY_KECCACK_HASH, }; use ethrex_rlp::decode::RLPDecode; use ethrex_storage::{EngineType, Store}; +use ethrex_vm::EvmEngine; + +pub fn parse_and_execute(path: &Path, evm: EvmEngine, skipped_tests: Option<&[&str]>) { + let rt = tokio::runtime::Runtime::new().unwrap(); + let tests = parse_test_file(path); + + for (test_key, test) in tests { + let should_skip_test = test.network < Network::Merge + || skipped_tests + .map(|skipped| skipped.contains(&test_key.as_str())) + .unwrap_or(false); + + if should_skip_test { + // Discard this test + continue; + } -pub async fn run_ef_test(test_key: &str, test: &TestUnit) { + rt.block_on(run_ef_test(&test_key, &test, evm)); + } +} + +pub async fn run_ef_test(test_key: &str, test: &TestUnit, evm: EvmEngine) { // check that the decoded genesis block header matches the deserialized one let genesis_rlp = test.genesis_rlp.clone(); let decoded_block = CoreBlock::decode(&genesis_rlp).unwrap(); @@ -20,7 +43,7 @@ pub async fn run_ef_test(test_key: &str, test: &TestUnit) { // Check world_state check_prestate_against_db(test_key, test, &store); - let blockchain = Blockchain::new(ethrex_vm::EvmEngine::REVM, store.clone()); + let blockchain = Blockchain::new(evm, store.clone()); // Execute all blocks in test for block_fixture in test.blocks.iter() { let expects_exception = block_fixture.expect_exception.is_some(); @@ -154,16 +177,19 @@ async fn check_poststate_against_db(test_key: &str, test: &TestUnit, db: &Store) ); // Check code let code_hash = expected_account.info.code_hash; - let db_account_code = db - .get_account_code(code_hash) - .expect("Failed to read from DB") - .unwrap_or_else(|| { - panic!("Account code for code hash {code_hash} not found in DB test:{test_key}") - }); - assert_eq!( - db_account_code, expected_account.code, - "Mismatched account code for code hash {code_hash} test:{test_key}" - ); + if code_hash != *EMPTY_KECCACK_HASH { + // We don't want to get account code if there's no code. + let db_account_code = db + .get_account_code(code_hash) + .expect("Failed to read from DB") + .unwrap_or_else(|| { + panic!("Account code for code hash {code_hash} not found in DB test:{test_key}") + }); + assert_eq!( + db_account_code, expected_account.code, + "Mismatched account code for code hash {code_hash} test:{test_key}" + ); + } // Check storage for (key, value) in expected_account.storage { let db_storage_value = db diff --git a/cmd/ef_tests/blockchain/tests/cancun.rs b/cmd/ef_tests/blockchain/tests/cancun.rs index 64bb063c78..8d67bfc350 100644 --- a/cmd/ef_tests/blockchain/tests/cancun.rs +++ b/cmd/ef_tests/blockchain/tests/cancun.rs @@ -1,22 +1,31 @@ -use ef_tests_blockchain::{ - network::Network, - test_runner::{parse_test_file, run_ef_test}, -}; +use ef_tests_blockchain::test_runner::parse_and_execute; +use ethrex_vm::EvmEngine; use std::path::Path; -fn parse_and_execute(path: &Path) -> datatest_stable::Result<()> { - let rt = tokio::runtime::Runtime::new().unwrap(); - let tests = parse_test_file(path); - - for (test_key, test) in tests { - if test.network < Network::Merge { - // These tests fall into the not supported forks. This produces false positives - continue; - } - rt.block_on(run_ef_test(&test_key, &test)); - } +#[cfg(not(feature = "levm"))] +fn parse_and_execute_with_revm(path: &Path) -> datatest_stable::Result<()> { + parse_and_execute(path, EvmEngine::REVM, None); + Ok(()) +} +#[cfg(feature = "levm")] +fn parse_and_execute_with_levm(path: &Path) -> datatest_stable::Result<()> { + parse_and_execute(path, EvmEngine::LEVM, None); Ok(()) } -datatest_stable::harness!(parse_and_execute, "vectors/cancun/", r".*/.*\.json",); +// REVM execution +#[cfg(not(feature = "levm"))] +datatest_stable::harness!( + parse_and_execute_with_revm, + "vectors/cancun/", + r".*/.*\.json", +); + +// LEVM execution +#[cfg(feature = "levm")] +datatest_stable::harness!( + parse_and_execute_with_levm, + "vectors/cancun/", + r".*/.*\.json", +); diff --git a/cmd/ef_tests/blockchain/tests/prague.rs b/cmd/ef_tests/blockchain/tests/prague.rs index a99f79b1c3..9c476b3676 100644 --- a/cmd/ef_tests/blockchain/tests/prague.rs +++ b/cmd/ef_tests/blockchain/tests/prague.rs @@ -1,28 +1,43 @@ use std::path::Path; -use ef_tests_blockchain::{ - network::Network, - test_runner::{parse_test_file, run_ef_test}, -}; +use ef_tests_blockchain::test_runner::parse_and_execute; +use ethrex_vm::EvmEngine; // TODO: enable these tests once the evm is updated. -const SKIPPED_TEST: [&str; 1] = [ +#[cfg(not(feature = "levm"))] +const SKIPPED_TESTS_REVM: [&str; 1] = [ "tests/prague/eip7702_set_code_tx/test_set_code_txs.py::test_set_code_to_non_empty_storage[fork_Prague-blockchain_test-zero_nonce]", ]; -fn parse_and_execute(path: &Path) -> datatest_stable::Result<()> { - let rt = tokio::runtime::Runtime::new().unwrap(); - let tests = parse_test_file(path); +// NOTE: These 3 tests fail on LEVM with a stack overflow if we do not increase the stack size by using RUST_MIN_STACK=11000000 +//"tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_call_high_depth]", +//"tests/prague/eip7702_set_code_tx/test_set_code_txs.py::test_set_code_max_depth_call_stack[fork_Prague-blockchain_test]", +//"tests/prague/eip7702_set_code_tx/test_set_code_txs_2.py::test_pointer_contract_pointer_loop[fork_Prague-blockchain_test]", - for (test_key, test) in tests { - if test.network < Network::Merge || SKIPPED_TEST.contains(&test_key.as_str()) { - // Discard this test - continue; - } +#[cfg(not(feature = "levm"))] +fn parse_and_execute_with_revm(path: &Path) -> datatest_stable::Result<()> { + parse_and_execute(path, EvmEngine::REVM, Some(&SKIPPED_TESTS_REVM)); + Ok(()) +} - rt.block_on(run_ef_test(&test_key, &test)); - } +#[cfg(feature = "levm")] +fn parse_and_execute_with_levm(path: &Path) -> datatest_stable::Result<()> { + parse_and_execute(path, EvmEngine::LEVM, None); Ok(()) } -datatest_stable::harness!(parse_and_execute, "vectors/prague/", r".*/.*\.json",); +// REVM execution +#[cfg(not(feature = "levm"))] +datatest_stable::harness!( + parse_and_execute_with_revm, + "vectors/prague/", + r".*/.*\.json", +); + +// LEVM execution +#[cfg(feature = "levm")] +datatest_stable::harness!( + parse_and_execute_with_levm, + "vectors/prague/", + r".*/.*\.json", +); diff --git a/cmd/ef_tests/blockchain/tests/shanghai.rs b/cmd/ef_tests/blockchain/tests/shanghai.rs index 2eea5fbc85..e67ff41b4f 100644 --- a/cmd/ef_tests/blockchain/tests/shanghai.rs +++ b/cmd/ef_tests/blockchain/tests/shanghai.rs @@ -1,23 +1,31 @@ +use ef_tests_blockchain::test_runner::parse_and_execute; +use ethrex_vm::EvmEngine; use std::path::Path; -use ef_tests_blockchain::{ - network::Network, - test_runner::{parse_test_file, run_ef_test}, -}; - -fn parse_and_execute(path: &Path) -> datatest_stable::Result<()> { - let rt = tokio::runtime::Runtime::new().unwrap(); - let tests = parse_test_file(path); - - for (test_key, test) in tests { - if test.network < Network::Merge { - // Discard this test - continue; - } +#[cfg(not(feature = "levm"))] +fn parse_and_execute_with_revm(path: &Path) -> datatest_stable::Result<()> { + parse_and_execute(path, EvmEngine::REVM, None); + Ok(()) +} - rt.block_on(run_ef_test(&test_key, &test)); - } +#[cfg(feature = "levm")] +fn parse_and_execute_with_levm(path: &Path) -> datatest_stable::Result<()> { + parse_and_execute(path, EvmEngine::LEVM, None); Ok(()) } -datatest_stable::harness!(parse_and_execute, "vectors/shanghai/", r".*/.*/.*\.json"); +// REVM execution +#[cfg(not(feature = "levm"))] +datatest_stable::harness!( + parse_and_execute_with_revm, + "vectors/shanghai/", + r".*/.*/.*\.json", +); + +// LEVM execution +#[cfg(feature = "levm")] +datatest_stable::harness!( + parse_and_execute_with_levm, + "vectors/shanghai/", + r".*/.*/.*\.json", +); diff --git a/cmd/ef_tests/state/README.md b/cmd/ef_tests/state/README.md index 5c496396fb..21e6fb6bdd 100644 --- a/cmd/ef_tests/state/README.md +++ b/cmd/ef_tests/state/README.md @@ -1,9 +1,36 @@ # State Tests -https://ethereum.github.io/execution-spec-tests/main/consuming_tests/state_test/ +The state tests are individual transactions not related one to each other that test particular behavior of the EVM. Tests are usually run for multiple forks and the result of execution may vary between forks. +Some [docs](https://ethereum.github.io/execution-spec-tests/main/consuming_tests/state_test/). + ## Running the tests ```bash -make run-evm-ef-tests +make run-evm-ef-tests flags= +``` +or +```bash +cargo test --package ef_tests-state --test all --release -- ``` + +**Flags** +- forks: Forks for which we want to run the tests for. +- tests: Tests (.json files) we want to run +- specific_tests: For running tests with a specific name. (Sometimes a .json file has multiple tests) +- summary: For not doing a re-run with REVM of failed tests after LEVM's run. +- skip: For skipping tests +- verbose: For more info while running, like tests names being run. +- revm: For running EFTests ONLY with REVM. + + +Example usage: +```bash +cargo test --package ef_tests-state --test all --release -- --forks Prague,Cancun --summary --tests push0.json,invalidAddr.json +``` +This runs 2 specific tests with LEVM just for Prague and Cancun. If they fail they are not re-run with REVM. + +Most of the tests that we run are from [this repository](https://github.com/ethereum/tests). We run the `GeneralStateTests` from that repo and also from `LegacyTests`, which is another repository that has snapshots of tests from previous forks. + + +Beware: Sometimes there is a test overlap between the tests folders we have downloaded and we may run the same test for a recent fork (Cancun ATTOW) twice. The impact of this in performance is minimal because we are doing runs for other forks anyway so one more run won't harm, but we should be aware that may lead to an inaccurate test count. We chose not to handle this because it wasn't a huge problem, but be conscious about this. diff --git a/cmd/ef_tests/state/deserialize.rs b/cmd/ef_tests/state/deserialize.rs index 9d414b7905..969878a7ee 100644 --- a/cmd/ef_tests/state/deserialize.rs +++ b/cmd/ef_tests/state/deserialize.rs @@ -68,7 +68,7 @@ where "TransactionException.INSUFFICIENT_MAX_FEE_PER_BLOB_GAS" => { TransactionExpectedException::InsufficientMaxFeePerBlobGas } - other => panic!("Unexpected error type: {}", other), // Should not fail, TODO is to return an error + _other => TransactionExpectedException::Other, //TODO: Support exceptions that enter here. }) .collect(); diff --git a/cmd/ef_tests/state/parser.rs b/cmd/ef_tests/state/parser.rs index 6d7f8168ea..cbf2782a38 100644 --- a/cmd/ef_tests/state/parser.rs +++ b/cmd/ef_tests/state/parser.rs @@ -2,10 +2,8 @@ use crate::{ report::format_duration_as_mm_ss, runner::EFTestRunnerOptions, types::{EFTest, EFTests}, - utils::{spinner_success_or_print, spinner_update_text_or_print}, }; use colored::Colorize; -use spinoff::{spinners::Dots, Color, Spinner}; use std::fs::DirEntry; #[derive(Debug, thiserror::Error)] @@ -20,9 +18,12 @@ pub enum EFTestParseError { FailedToParseTestFile(String), } -const IGNORED_TESTS: [&str; 8] = [ - "ValueOverflowParis.json", // Skip because of errors - "loopMul.json", // Skip because it takes too long to run +const IGNORED_TESTS: [&str; 11] = [ + "static_Call50000_sha256.json", // Skip because it takes longer to run than some tests, but not a huge deal. + "CALLBlake2f_MaxRounds.json", // Skip because it takes extremely long to run, but passes. + "ValueOverflow.json", // Skip because it tries to deserialize number > U256::MAX + "ValueOverflowParis.json", // Skip because it tries to deserialize number > U256::MAX + "loopMul.json", // Skip because it takes too long to run "dynamicAccountOverwriteEmpty_Paris.json", // Skip because it fails on REVM "RevertInCreateInInitCreate2Paris.json", // Skip because it fails on REVM. See https://github.com/lambdaclass/ethrex/issues/1555 "RevertInCreateInInit_Paris.json", // Skip because it fails on REVM. See https://github.com/lambdaclass/ethrex/issues/1555 @@ -35,10 +36,8 @@ pub fn parse_ef_tests(opts: &EFTestRunnerOptions) -> Result, EFTestP let parsing_time = std::time::Instant::now(); let cargo_manifest_dir = std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR")); let ef_general_state_tests_path = cargo_manifest_dir.join("vectors"); - let mut spinner = Spinner::new(Dots, "Parsing EF Tests".bold().to_string(), Color::Cyan); - if !opts.spinner { - spinner.stop(); - } + println!("{}", "Parsing EF Tests".bold().cyan()); + let mut tests = Vec::new(); for test_dir in std::fs::read_dir(ef_general_state_tests_path.clone()) .map_err(|err| { @@ -49,17 +48,13 @@ pub fn parse_ef_tests(opts: &EFTestRunnerOptions) -> Result, EFTestP })? .flatten() { - let directory_tests = parse_ef_test_dir(test_dir, opts, &mut spinner)?; + let directory_tests = parse_ef_test_dir(test_dir, opts)?; tests.extend(directory_tests); } - spinner_success_or_print( - &mut spinner, - format!( - "Parsed EF Tests in {}", - format_duration_as_mm_ss(parsing_time.elapsed()) - ), - opts.spinner, + println!( + "Parsed EF Tests in {}", + format_duration_as_mm_ss(parsing_time.elapsed()) ); Ok(tests) @@ -68,13 +63,8 @@ pub fn parse_ef_tests(opts: &EFTestRunnerOptions) -> Result, EFTestP pub fn parse_ef_test_dir( test_dir: DirEntry, opts: &EFTestRunnerOptions, - directory_parsing_spinner: &mut Spinner, ) -> Result, EFTestParseError> { - spinner_update_text_or_print( - directory_parsing_spinner, - format!("Parsing directory {:?}", test_dir.file_name()), - opts.spinner, - ); + println!("Parsing directory {:?}", test_dir.file_name()); let mut directory_tests = Vec::new(); for test in std::fs::read_dir(test_dir.path()) @@ -90,7 +80,7 @@ pub fn parse_ef_test_dir( })? .is_dir() { - let sub_directory_tests = parse_ef_test_dir(test, opts, directory_parsing_spinner)?; + let sub_directory_tests = parse_ef_test_dir(test, opts)?; directory_tests.extend(sub_directory_tests); continue; } @@ -132,13 +122,9 @@ pub fn parse_ef_test_dir( .skip .contains(&test_dir.file_name().to_str().unwrap().to_owned()) { - spinner_update_text_or_print( - directory_parsing_spinner, - format!( - "Skipping test {:?} as it is in the folder of tests to skip", - test.path().file_name().unwrap() - ), - opts.spinner, + println!( + "Skipping test {:?} as it is in the folder of tests to skip", + test.path().file_name().unwrap() ); continue; } @@ -153,13 +139,9 @@ pub fn parse_ef_test_dir( .unwrap() .to_owned(), ) { - spinner_update_text_or_print( - directory_parsing_spinner, - format!( - "Skipping test {:?} as it is in the list of tests to skip", - test.path().file_name().unwrap() - ), - opts.spinner, + println!( + "Skipping test file {:?} as it is in the list of tests to skip", + test.path().file_name().unwrap() ); continue; } @@ -173,6 +155,24 @@ pub fn parse_ef_test_dir( for test in tests.0.iter_mut() { test.dir = test_dir.file_name().into_string().unwrap(); } + + // We only want to include tests that have post states from the specified forks in EFTestsRunnerOptions. + if let Some(forks) = &opts.forks { + for test in tests.0.iter_mut() { + let test_forks_numbers: Vec = forks.iter().map(|fork| *fork as u8).collect(); + + test.post.forks = test + .post + .forks + .iter() + .filter(|a| test_forks_numbers.contains(&(*a.0 as u8))) + .map(|(k, v)| (*k, v.clone())) + .collect(); + } + + tests.0.retain(|test| !test.post.forks.is_empty()); + } + directory_tests.extend(tests.0); } Ok(directory_tests) diff --git a/cmd/ef_tests/state/report.rs b/cmd/ef_tests/state/report.rs index 2dd522808d..b9d6b92fdf 100644 --- a/cmd/ef_tests/state/report.rs +++ b/cmd/ef_tests/state/report.rs @@ -3,7 +3,7 @@ use colored::Colorize; use ethrex_common::{types::Fork, Address, H256}; use ethrex_levm::{ errors::{ExecutionReport, TxResult, VMError}, - Account, StorageSlot, + Account, }; use ethrex_storage::{error::StoreError, AccountUpdate}; use itertools::Itertools; @@ -382,18 +382,17 @@ impl Display for EFTestsReport { writeln!(f, "Test: {}", report.name)?; writeln!(f)?; for (fork, result) in &report.fork_results { - writeln!(f, "\n Fork: {:?}", fork)?; if result.failed_vectors.is_empty() { continue; } - writeln!(f, " Failed Vectors:")?; + writeln!(f, "\tFork: {:?}", fork)?; for (failed_vector, error) in &result.failed_vectors { writeln!( f, - "Vector: (data_index: {}, gas_limit_index: {}, value_index: {})", + "\t\tFailed Vector: (data_index: {}, gas_limit_index: {}, value_index: {})", failed_vector.0, failed_vector.1, failed_vector.2 )?; - writeln!(f, "Error: {error}")?; + writeln!(f, "\t\t\tError: {error}")?; if let Some(re_run_report) = &report.re_run_report { if let Some(execution_report) = re_run_report.execution_report.get(&(*failed_vector, *fork)) @@ -403,7 +402,7 @@ impl Display for EFTestsReport { { writeln!( f, - "Execution result mismatch: LEVM: {levm_result:?}, REVM: {revm_result:?}", + "\t\t\tExecution result mismatch: LEVM: {levm_result:?}, REVM: {revm_result:?}", )?; } if let Some((levm_gas_used, revm_gas_used)) = @@ -411,7 +410,7 @@ impl Display for EFTestsReport { { writeln!( f, - "Gas used mismatch: LEVM: {levm_gas_used}, REVM: {revm_gas_used} (diff: {})", + "\t\t\tGas used mismatch: LEVM: {levm_gas_used}, REVM: {revm_gas_used} (diff: {})", levm_gas_used.abs_diff(*revm_gas_used) )?; } @@ -420,7 +419,7 @@ impl Display for EFTestsReport { { writeln!( f, - "Gas refunded mismatch: LEVM: {levm_gas_refunded}, REVM: {revm_gas_refunded} (diff: {})", + "\t\t\tGas refunded mismatch: LEVM: {levm_gas_refunded}, REVM: {revm_gas_refunded} (diff: {})", levm_gas_refunded.abs_diff(*revm_gas_refunded) )?; } @@ -429,7 +428,7 @@ impl Display for EFTestsReport { { writeln!( f, - "Re-run error: LEVM: {levm_result:?}, REVM: {revm_error}", + "\t\t\tRe-run error: LEVM: {levm_result:?}, REVM: {revm_error}", )?; } } @@ -438,12 +437,12 @@ impl Display for EFTestsReport { .account_updates_report .get(&(*failed_vector, *fork)) { - writeln!(f, "{}", &account_update.to_string())?; + writeln!(f, "\t\t\t{}", &account_update.to_string())?; } else { - writeln!(f, "No account updates report found. Account update reports are only generated for tests that failed at the post-state validation stage.")?; + writeln!(f, "\t\t\tNo account updates report found. Account update reports are only generated for tests that failed at the post-state validation stage.")?; } } else { - writeln!(f, "No re-run report found. Re-run reports are only generated for tests that failed at the post-state validation stage.")?; + writeln!(f, "\t\t\tNo re-run report found. Re-run reports are only generated for tests that failed at the post-state validation stage.")?; } writeln!(f)?; } @@ -584,300 +583,212 @@ pub struct ComparisonReport { impl fmt::Display for ComparisonReport { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { if self.revm_post_state_root != self.expected_post_state_root { - writeln!( - f, - "================ WARNING: REVM *fails* this tests ===================" - )? - } - if self.levm_post_state_root != self.revm_post_state_root { - writeln!( - f, - "Post-state roots mismatch: LEVM: {levm_post_state_root:#x}, REVM: {revm_post_state_root:#x}", - levm_post_state_root = self.levm_post_state_root, - revm_post_state_root = self.revm_post_state_root - )?; - } else { - writeln!( - f, - "Post-state roots match to: {levm_post_state_root:#x}", - levm_post_state_root = self.levm_post_state_root - )?; - } - writeln!(f, "Account Updates:")?; - for levm_updated_account_only in self.levm_updated_accounts_only.iter() { - writeln!(f, " {levm_updated_account_only:#x}:")?; - writeln!(f, " Was updated in LEVM but not in REVM")?; - let initial_account = self - .initial_accounts - .get(levm_updated_account_only) - .cloned() - .unwrap_or_default(); - let updated_account_update = self - .levm_account_updates - .iter() - .find(|account_update| &account_update.address == levm_updated_account_only) - .unwrap(); - let updated_account_storage = updated_account_update - .added_storage - .iter() - .map(|(key, value)| { - let storage_slot = StorageSlot { - original_value: initial_account - .storage - .get(key) - .cloned() - .unwrap_or_default() - .original_value, - current_value: *value, - }; - (*key, storage_slot) - }) - .collect(); - let updated_account_info = updated_account_update.info.clone().unwrap(); - let updated_account = Account::new( - updated_account_info.balance, - updated_account_update.code.clone().unwrap_or_default(), - updated_account_info.nonce, - updated_account_storage, - ); - let mut updates = 0; - if initial_account.info.balance != updated_account.info.balance { - writeln!( - f, - " Balance updated: {initial_balance} -> {updated_balance}", - initial_balance = initial_account.info.balance, - updated_balance = updated_account.info.balance - )?; - updates += 1; - } - if initial_account.info.nonce != updated_account.info.nonce { - writeln!( - f, - " Nonce updated: {initial_nonce} -> {updated_nonce}", - initial_nonce = initial_account.info.nonce, - updated_nonce = updated_account.info.nonce - )?; - updates += 1; - } - if initial_account.info.bytecode != updated_account.info.bytecode { - writeln!( - f, - " Code updated: {initial_code}, {updated_code}", - initial_code = if initial_account.info.bytecode.is_empty() { - "was empty".to_string() - } else { - hex::encode(&initial_account.info.bytecode) - }, - updated_code = hex::encode(&updated_account.info.bytecode) - )?; - updates += 1; - } - for (added_storage_address, added_storage_slot) in updated_account.storage.iter() { - writeln!( - f, - " Storage slot added: {added_storage_address}: {} -> {}", - added_storage_slot.original_value, added_storage_slot.current_value - )?; - updates += 1; - } - if updates == 0 { - writeln!(f, " No changes")?; + writeln!(f, "\n\t\t\tWARNING: REVM fails this test")?; + if self.levm_post_state_root != self.revm_post_state_root { + writeln!(f, "\t\t\tPost-state root mismatch between LEVM and REVM\n")?; + } else { + writeln!(f, "\t\t\tSame Post-state root in LEVM and REVM\n")?; } + } else { + writeln!(f, "\n\t\t\tREVM passes this test")?; } - for revm_updated_account_only in self.revm_updated_accounts_only.iter() { - writeln!(f, " {revm_updated_account_only:#x}:")?; - writeln!(f, " Was updated in REVM but not in LEVM")?; - let initial_account = self + + let all_updated_accounts = &(&self.levm_updated_accounts_only + | &self.revm_updated_accounts_only) + | &self.shared_updated_accounts; + + for address in all_updated_accounts { + writeln!(f, "\n\t\t\t{address:#x}:")?; + + let account_updates_for_address: Vec<(String, AccountUpdate)> = + if self.levm_updated_accounts_only.contains(&address) { + writeln!(f, "\t\t\t\tWas updated in LEVM but not in REVM")?; + self.levm_account_updates + .clone() + .iter() + .filter(|account_update| account_update.address == address) + .map(|account_update| ("LEVM".to_string(), account_update.clone())) + .collect() + } else if self.revm_updated_accounts_only.contains(&address) { + writeln!(f, "\t\t\t\tWas updated in REVM but not in LEVM")?; + self.revm_account_updates + .clone() + .iter() + .filter(|account_update| account_update.address == address) + .map(|account_update| ("REVM".to_string(), account_update.clone())) + .collect() + } else { + writeln!(f, "\t\t\t\tWas updated in both LEVM and REVM")?; + [ + self.revm_account_updates + .clone() + .iter() + .filter(|account_update| account_update.address == address) + .map(|account_update| ("REVM".to_string(), account_update.clone())) + .collect::>(), + self.levm_account_updates + .clone() + .iter() + .filter(|account_update| account_update.address == address) + .map(|account_update| ("LEVM".to_string(), account_update.clone())) + .collect::>(), + ] + .concat() + }; + + // Account before Tx execution + let base_account = self .initial_accounts - .get(revm_updated_account_only) + .get(&address) .cloned() .unwrap_or_default(); - let updated_account_update = self - .revm_account_updates - .iter() - .find(|account_update| &account_update.address == revm_updated_account_only) - .unwrap(); - let updated_account_storage = updated_account_update - .added_storage - .iter() - .map(|(key, value)| { - let storage_slot = StorageSlot { - original_value: initial_account - .storage - .get(key) - .cloned() - .unwrap_or_default() - .original_value, - current_value: *value, - }; - (*key, storage_slot) - }) - .collect(); - let Some(updated_account_info) = updated_account_update.info.clone() else { - continue; - }; - let updated_account = Account::new( - updated_account_info.balance, - updated_account_update.code.clone().unwrap_or_default(), - updated_account_info.nonce, - updated_account_storage, - ); - let mut updates = 0; - if initial_account.info.balance != updated_account.info.balance { - writeln!( - f, - " Balance updated: {initial_balance} -> {updated_balance}", - initial_balance = initial_account.info.balance, - updated_balance = updated_account.info.balance - )?; - updates += 1; - } - if initial_account.info.nonce != updated_account.info.nonce { - writeln!( - f, - " Nonce updated: {initial_nonce} -> {updated_nonce}", - initial_nonce = initial_account.info.nonce, - updated_nonce = updated_account.info.nonce - )?; - updates += 1; - } - if initial_account.info.bytecode != updated_account.info.bytecode { - writeln!( - f, - " Code updated: {initial_code}, {updated_code}", - initial_code = if initial_account.info.bytecode.is_empty() { - "was empty".to_string() - } else { - hex::encode(&initial_account.info.bytecode) - }, - updated_code = hex::encode(&updated_account.info.bytecode) - )?; - updates += 1; - } - for (added_storage_address, added_storage_slot) in updated_account.storage.iter() { - writeln!( - f, - " Storage slot added: {added_storage_address}: {} -> {}", - added_storage_slot.original_value, added_storage_slot.current_value - )?; - updates += 1; - } - if updates == 0 { - writeln!(f, " No changes")?; - } - } - for shared_updated_account in self.shared_updated_accounts.iter() { - writeln!(f, " {shared_updated_account:#x}:")?; - - writeln!(f, " Was updated in both LEVM and REVM")?; - - let levm_updated_account = self - .levm_account_updates - .iter() - .find(|account_update| &account_update.address == shared_updated_account) - .unwrap(); - let revm_updated_account = self - .revm_account_updates - .iter() - .find(|account_update| &account_update.address == shared_updated_account) - .unwrap(); - - let mut diffs = 0; - match (levm_updated_account.removed, revm_updated_account.removed) { - (true, false) => { - writeln!(f, " Removed in LEVM but not in REVM")?; - diffs += 1; - } - (false, true) => { - writeln!(f, " Removed in REVM but not in LEVM")?; - diffs += 1; - } - // Account was removed in both VMs. - (false, false) | (true, true) => {} - } - match (&levm_updated_account.code, &revm_updated_account.code) { - (None, Some(revm_account_code)) => { - if **revm_account_code != *b"" { - writeln!(f, " Has code in REVM but not in LEVM")?; - writeln!(f, " REVM code: {}", hex::encode(revm_account_code))?; - diffs += 1; - } - } - (Some(levm_account_code), None) => { - if **levm_account_code != *b"" { - writeln!(f, " Has code in LEVM but not in REVM")?; - writeln!(f, " LEVM code: {}", hex::encode(levm_account_code))?; - diffs += 1; - } + for (vm, account_update) in &account_updates_for_address { + writeln!(f, "\t\t\t\t{vm} Account Update:")?; + + if account_update.removed { + writeln!(f, "\t\t\t\t\tAccount was removed")?; + continue; } - (Some(levm_account_code), Some(revm_account_code)) => { - if levm_account_code != revm_account_code { - writeln!(f, - " Code mismatch: LEVM: {levm_account_code}, REVM: {revm_account_code}", - levm_account_code = hex::encode(levm_account_code), - revm_account_code = hex::encode(revm_account_code) + + // Display changes in Account Info + if let Some(new_info) = &account_update.info { + writeln!( + f, + "\t\t\t\t\tNonce: {} -> {}", + base_account.info.nonce, new_info.nonce + )?; + writeln!( + f, + "\t\t\t\t\tBalance: {} -> {}", + base_account.info.balance, new_info.balance + )?; + + if base_account.info.bytecode_hash() != new_info.code_hash { + writeln!( + f, + "\t\t\t\t\tCode: {} -> {}", + if base_account.info.bytecode.is_empty() { + "empty".to_string() + } else { + hex::encode(&base_account.info.bytecode) + }, + account_update + .code + .as_ref() + .map(|code| if code.is_empty() { + "empty".to_string() + } else { + hex::encode(code) + }) + .expect("If code hash changed then 'code' shouldn't be None.") )?; } } - (None, None) => {} - } - match (&levm_updated_account.info, &revm_updated_account.info) { - (None, Some(_)) => { + for (key, value) in &account_update.added_storage { + let initial_value = base_account.storage.get(key).cloned().unwrap_or_default(); writeln!( f, - " Account {shared_updated_account:#x} has info in REVM but not in LEVM" + "\t\t\t\t\tStorage slot: {key:#x}: {} -> {}", + initial_value.original_value, value )?; - diffs += 1; - } - (Some(levm_account_info), Some(revm_account_info)) => { - if levm_account_info.balance != revm_account_info.balance { - writeln!(f, - " Balance mismatch: LEVM: {levm_account_balance}, REVM: {revm_account_balance}", - levm_account_balance = levm_account_info.balance, - revm_account_balance = revm_account_info.balance - )?; - diffs += 1; - } - if levm_account_info.nonce != revm_account_info.nonce { - writeln!(f, - " Nonce mismatch: LEVM: {levm_account_nonce}, REVM: {revm_account_nonce}", - levm_account_nonce = levm_account_info.nonce, - revm_account_nonce = revm_account_info.nonce - )?; - diffs += 1; - } } - // We ignore the case (Some(_), None) because we always add the account info to the account update. - (Some(_), None) | (None, None) => {} } - for (levm_key, levm_value) in levm_updated_account.added_storage.iter() { - if let Some(revm_value) = revm_updated_account.added_storage.get(levm_key) { - if revm_value != levm_value { - writeln!(f, " Storage slot added {levm_key} -> value mismatch REVM: {revm_value} LEVM: {levm_value}")?; - diffs += 1; - } - } else { - writeln!(f, " Storage slot added key is in LEVM but not in REVM {levm_key} -> {levm_value}")?; - diffs += 1; + if self.shared_updated_accounts.contains(&address) { + let levm_account_update = account_updates_for_address + .iter() + .find(|(vm, _)| vm == "LEVM") + .map(|(_, update)| update) + .expect("LEVM account update not found"); + let revm_account_update = account_updates_for_address + .iter() + .find(|(vm, _)| vm == "REVM") + .map(|(_, update)| update) + .expect("REVM account update not found"); + + if levm_account_update == revm_account_update { + writeln!(f, "\t\t\t\tNo differences between updates")?; + continue; } - } - for (revm_key, revm_value) in revm_updated_account.added_storage.iter() { - if !levm_updated_account.added_storage.contains_key(revm_key) { + + if levm_account_update.removed != revm_account_update.removed { writeln!( f, - " Storage slot added key is in REVM but not in LEVM: {revm_key} -> {revm_value}" + "\t\t\t\tAccount removal mismatch: LEVM: {}, REVM: {}", + levm_account_update.removed, revm_account_update.removed )?; - diffs += 1; } - } - if diffs == 0 { - writeln!(f, " Same changes")?; + if levm_account_update.info != revm_account_update.info { + match (&levm_account_update.info, &revm_account_update.info) { + (Some(levm_info), Some(revm_info)) => { + if levm_info.nonce != revm_info.nonce { + writeln!( + f, + "\t\t\t\tNonce mismatch: LEVM: {}, REVM: {}", + levm_info.nonce, revm_info.nonce + )?; + } + if levm_info.balance != revm_info.balance { + writeln!( + f, + "\t\t\t\tBalance mismatch: LEVM: {}, REVM: {}", + levm_info.balance, revm_info.balance + )?; + } + } + (Some(levm_info), None) => { + writeln!( + f, + "\t\t\t\tLEVM has account info but REVM does not: Nonce: {}, Balance: {}", + levm_info.nonce, levm_info.balance + )?; + } + (None, Some(revm_info)) => { + writeln!( + f, + "\t\t\t\tREVM has account info but LEVM does not: Nonce: {}, Balance: {}", + revm_info.nonce, revm_info.balance + )?; + } + (None, None) => { + // No account info in either LEVM or REVM, nothing to report. + } + } + } + + // Compare all storage changes between LEVM and REVM. + let all_keys: HashSet<_> = levm_account_update + .added_storage + .keys() + .chain(revm_account_update.added_storage.keys()) + .collect(); + + for key in all_keys { + let levm_value = levm_account_update + .added_storage + .get(key) + .cloned() + .unwrap_or_default(); + let revm_value = revm_account_update + .added_storage + .get(key) + .cloned() + .unwrap_or_default(); + + if levm_value != revm_value { + writeln!( + f, + "\t\t\t\tStorage slot mismatch at key {key:#x}: LEVM: {}, REVM: {}", + levm_value, revm_value + )?; + } + } } } + Ok(()) } } diff --git a/cmd/ef_tests/state/runner/levm_runner.rs b/cmd/ef_tests/state/runner/levm_runner.rs index 984673d683..33455c07ce 100644 --- a/cmd/ef_tests/state/runner/levm_runner.rs +++ b/cmd/ef_tests/state/runner/levm_runner.rs @@ -90,37 +90,19 @@ pub async fn run_ef_test_tx( fork: &Fork, ) -> Result<(), EFTestRunnerError> { let mut db = utils::load_initial_state_levm(test).await; - let mut levm = match prepare_vm_for_tx(vector, test, fork, &mut db) { - Ok(levm) => levm, - Err(EFTestRunnerError::EIP7702ShouldNotBeCreateType) => { - let post = test - .post - .forks - .get(fork) - .unwrap() - .iter() - .find(|post| { - post.indexes.get("data").unwrap().as_usize() == vector.0 - && post.indexes.get("gas").unwrap().as_usize() == vector.1 - && post.indexes.get("value").unwrap().as_usize() == vector.2 - }) - .unwrap(); - if post.expect_exception.as_ref().is_some_and(|exceptions| { - exceptions - .iter() - .any(|e| matches!(e, TransactionExpectedException::Type4TxContractCreation)) - }) { - return Ok(()); - } - return Err(EFTestRunnerError::ExpectedExceptionDoesNotMatchReceived( - "error in tx type 4 being a create type, not found in expected exceptions" - .to_string(), - )); + let vm_creation_result = prepare_vm_for_tx(vector, test, fork, &mut db); + // For handling edge case in which there's a create in a Type 4 Transaction, that sadly is detected before actual execution of the vm, when building the "Transaction" for creating a new instance of vm. + let levm_execution_result = match vm_creation_result { + Err(EFTestRunnerError::EIP7702ShouldNotBeCreateType) => Err(VMError::TxValidation( + TxValidationError::Type4TxContractCreation, + )), + Err(error) => return Err(error), + Ok(mut levm) => { + ensure_pre_state(&levm, test)?; + levm.execute() } - Err(e) => return Err(e), }; - ensure_pre_state(&levm, test)?; - let levm_execution_result = levm.execute(); + ensure_post_state(&levm_execution_result, vector, test, fork, &mut db).await?; Ok(()) } @@ -202,9 +184,7 @@ pub fn prepare_vm_for_tx<'a>( tx_max_priority_fee_per_gas: test_tx.max_priority_fee_per_gas, tx_max_fee_per_gas: test_tx.max_fee_per_gas, tx_max_fee_per_blob_gas: test_tx.max_fee_per_blob_gas, - tx_nonce: test_tx.nonce.try_into().map_err(|_| { - EFTestRunnerError::VMInitializationFailed("Nonce to large".to_string()) - })?, + tx_nonce: test_tx.nonce, block_gas_limit: test.env.current_gas_limit, transient_storage: HashMap::new(), }, @@ -224,7 +204,7 @@ pub fn ensure_pre_state(evm: &VM, test: &EFTest) -> Result<(), EFTestRunnerError ))) })?; ensure_pre_state_condition( - account.nonce == pre_value.nonce.as_u64(), + account.nonce == pre_value.nonce, format!( "Nonce mismatch for account {:#x}: expected {}, got {}", address, pre_value.nonce, account.nonce @@ -328,6 +308,9 @@ fn exception_is_expected( ) | ( TransactionExpectedException::Type4TxContractCreation, VMError::TxValidation(TxValidationError::Type4TxContractCreation) + ) | ( + TransactionExpectedException::Other, + VMError::TxValidation(_) //TODO: Decide whether to support more specific errors, I think this is enough. ) ) }) @@ -340,32 +323,17 @@ pub async fn ensure_post_state( fork: &Fork, db: &mut GeneralizedDatabase, ) -> Result<(), EFTestRunnerError> { + let cache = db.cache.clone(); match levm_execution_result { Ok(execution_report) => { match test.post.vector_post_value(vector, *fork).expect_exception { // Execution result was successful but an exception was expected. Some(expected_exceptions) => { - // Note: expected_exceptions is a vector because can only have 1 or 2 expected errors. - // Here I use a match bc if there is no second position I just print the first one. - let error_reason = match expected_exceptions.get(1) { - Some(second_exception) => { - format!( - "Expected exception: {:?} or {:?}", - expected_exceptions.first().unwrap(), - second_exception - ) - } - None => { - format!( - "Expected exception: {:?}", - expected_exceptions.first().unwrap() - ) - } - }; + let error_reason = format!("Expected exception: {:?}", expected_exceptions); return Err(EFTestRunnerError::FailedToEnsurePostState( execution_report.clone(), error_reason, - db.cache.clone(), + cache, )); } // Execution result was successful and no exception was expected. @@ -377,17 +345,14 @@ pub async fn ensure_post_state( .to_owned(), ) })?; - let pos_state_root = post_state_root(&levm_account_updates, test).await; + let post_state_root_hash = post_state_root(&levm_account_updates, test).await; let expected_post_state_root_hash = test.post.vector_post_value(vector, *fork).hash; - if expected_post_state_root_hash != pos_state_root { - let error_reason = format!( - "Post-state root mismatch: expected {expected_post_state_root_hash:#x}, got {pos_state_root:#x}", - ); + if expected_post_state_root_hash != post_state_root_hash { return Err(EFTestRunnerError::FailedToEnsurePostState( execution_report.clone(), - error_reason, - db.cache.clone(), + "Post-state root mismatch".to_string(), + cache, )); } } @@ -397,28 +362,13 @@ pub async fn ensure_post_state( match test.post.vector_post_value(vector, *fork).expect_exception { // Execution result was unsuccessful and an exception was expected. Some(expected_exceptions) => { - // Note: expected_exceptions is a vector because can only have 1 or 2 expected errors. - // So in exception_is_expected we find out if the obtained error matches one of the expected if !exception_is_expected(expected_exceptions.clone(), err.clone()) { - let error_reason = match expected_exceptions.get(1) { - Some(second_exception) => { - format!( - "Returned exception is not the expected: Returned {:?} but expected {:?} or {:?}", - err, - expected_exceptions.first().unwrap(), - second_exception - ) - } - None => { - format!( - "Returned exception is not the expected: Returned {:?} but expected {:?}", - err, - expected_exceptions.first().unwrap() - ) - } - }; + let error_reason = format!( + "Returned exception {:?} does not match expected {:?}", + err, expected_exceptions + ); return Err(EFTestRunnerError::ExpectedExceptionDoesNotMatchReceived( - format!("Post-state condition failed: {error_reason}"), + error_reason, )); } } diff --git a/cmd/ef_tests/state/runner/mod.rs b/cmd/ef_tests/state/runner/mod.rs index e1626b1608..c0c7e3f37c 100644 --- a/cmd/ef_tests/state/runner/mod.rs +++ b/cmd/ef_tests/state/runner/mod.rs @@ -3,7 +3,6 @@ use std::collections::HashMap; use crate::{ report::{self, format_duration_as_mm_ss, EFTestReport, TestReRunReport}, types::EFTest, - utils::{spinner_success_or_print, spinner_update_text_or_print}, }; use clap::Parser; use colored::Colorize; @@ -52,22 +51,26 @@ pub enum InternalError { Custom(String), } -#[derive(Parser)] +#[derive(Parser, Debug, Default)] pub struct EFTestRunnerOptions { - #[arg(short, long, value_name = "FORK", default_value = "Cancun")] - pub fork: Vec, + /// For running tests of specific forks. Default is all forks. + #[arg(long, value_name = "FORK", use_value_delimiter = true)] + pub forks: Option>, + /// For running specific .json files #[arg(short, long, value_name = "TESTS", use_value_delimiter = true)] pub tests: Vec, + /// For running tests with a specific name #[arg(value_name = "SPECIFIC_TESTS", use_value_delimiter = true)] pub specific_tests: Option>, + /// For running tests only with LEVM without the REVM re-run. #[arg(short, long, value_name = "SUMMARY", default_value = "false")] pub summary: bool, #[arg(long, value_name = "SKIP", use_value_delimiter = true)] pub skip: Vec, - #[arg(long, value_name = "SPINNER", default_value = "false")] - pub spinner: bool, // Replaces prints for spinner, but execution is slower. + /// For providing more detailed information #[arg(long, value_name = "VERBOSE", default_value = "false")] pub verbose: bool, + /// For running tests ONLY with revm #[arg(long, value_name = "REVM", default_value = "false")] pub revm: bool, } @@ -98,21 +101,16 @@ async fn run_with_levm( opts: &EFTestRunnerOptions, ) -> Result<(), EFTestRunnerError> { let levm_run_time = std::time::Instant::now(); - let mut levm_run_spinner = Spinner::new( - Dots, - report::progress(reports, levm_run_time.elapsed()), - Color::Cyan, - ); - if !opts.spinner { - levm_run_spinner.stop(); - } + + println!("{}", report::progress(reports, levm_run_time.elapsed())); + for test in ef_tests.iter() { if opts.specific_tests.is_some() && !opts.specific_tests.clone().unwrap().contains(&test.name) { continue; } - if !opts.spinner && opts.verbose { + if opts.verbose { println!("Running test: {:?}", test.name); } let ef_test_report = match levm_runner::run_ef_test(test).await { @@ -125,32 +123,17 @@ async fn run_with_levm( } }; reports.push(ef_test_report); - spinner_update_text_or_print( - &mut levm_run_spinner, - report::progress(reports, levm_run_time.elapsed()), - opts.spinner, - ); + println!("{}", report::progress(reports, levm_run_time.elapsed())); } - spinner_success_or_print( - &mut levm_run_spinner, - report::progress(reports, levm_run_time.elapsed()), - opts.spinner, - ); + println!("{}", report::progress(reports, levm_run_time.elapsed())); if opts.summary { report::write_summary_for_slack(reports)?; report::write_summary_for_github(reports)?; } - let mut summary_spinner = Spinner::new(Dots, "Loading summary...".to_owned(), Color::Cyan); - if !opts.spinner { - summary_spinner.stop(); - } - spinner_success_or_print( - &mut summary_spinner, - report::summary_for_shell(reports), - opts.spinner, - ); + println!("{}", "Loading summary...".to_owned()); + println!("{}", report::summary_for_shell(reports)); Ok(()) } @@ -162,28 +145,18 @@ async fn run_with_revm( opts: &EFTestRunnerOptions, ) -> Result<(), EFTestRunnerError> { let revm_run_time = std::time::Instant::now(); - let mut revm_run_spinner = Spinner::new( - Dots, - "Running all tests with REVM...".to_owned(), - Color::Cyan, - ); - if !opts.spinner { - revm_run_spinner.stop(); - } + println!("{}", "Running all tests with REVM...".to_owned()); + for (idx, test) in ef_tests.iter().enumerate() { - if !opts.spinner && opts.verbose { + if opts.verbose { println!("Running test: {:?}", test.name); } let total_tests = ef_tests.len(); - spinner_update_text_or_print( - &mut revm_run_spinner, - format!( - "{} {}/{total_tests} - {}", - "Running all tests with REVM".bold(), - idx + 1, - format_duration_as_mm_ss(revm_run_time.elapsed()) - ), - opts.spinner, + println!( + "{} {}/{total_tests} - {}", + "Running all tests with REVM".bold(), + idx + 1, + format_duration_as_mm_ss(revm_run_time.elapsed()) ); let ef_test_report = match revm_runner::_run_ef_test_revm(test).await { Ok(ef_test_report) => ef_test_report, @@ -195,19 +168,11 @@ async fn run_with_revm( } }; reports.push(ef_test_report); - spinner_update_text_or_print( - &mut revm_run_spinner, - report::progress(reports, revm_run_time.elapsed()), - opts.spinner, - ); + println!("{}", report::progress(reports, revm_run_time.elapsed())); } - spinner_success_or_print( - &mut revm_run_spinner, - format!( - "Ran all tests with REVM in {}", - format_duration_as_mm_ss(revm_run_time.elapsed()) - ), - opts.spinner, + println!( + "Ran all tests with REVM in {}", + format_duration_as_mm_ss(revm_run_time.elapsed()) ); Ok(()) } @@ -218,14 +183,7 @@ async fn re_run_with_revm( opts: &EFTestRunnerOptions, ) -> Result<(), EFTestRunnerError> { let revm_run_time = std::time::Instant::now(); - let mut revm_run_spinner = Spinner::new( - Dots, - "Running failed tests with REVM...".to_owned(), - Color::Cyan, - ); - if !opts.spinner { - revm_run_spinner.stop(); - } + println!("{}", "Running failed tests with REVM...".to_owned()); let failed_tests = reports.iter().filter(|report| !report.passed()).count(); // Iterate only over failed tests @@ -234,18 +192,14 @@ async fn re_run_with_revm( .filter(|report| !report.passed()) .enumerate() { - if !opts.spinner && opts.verbose { + if opts.verbose { println!("Running test: {:?}", failed_test_report.name); } - spinner_update_text_or_print( - &mut revm_run_spinner, - format!( - "{} {}/{failed_tests} - {}", - "Re-running failed tests with REVM".bold(), - idx + 1, - format_duration_as_mm_ss(revm_run_time.elapsed()) - ), - opts.spinner, + println!( + "{} {}/{failed_tests} - {}", + "Re-running failed tests with REVM".bold(), + idx + 1, + format_duration_as_mm_ss(revm_run_time.elapsed()) ); match revm_runner::re_run_failed_ef_test( @@ -283,13 +237,9 @@ async fn re_run_with_revm( } } } - spinner_success_or_print( - &mut revm_run_spinner, - format!( - "Re-ran failed tests with REVM in {}", - format_duration_as_mm_ss(revm_run_time.elapsed()) - ), - opts.spinner, + println!( + "Re-ran failed tests with REVM in {}", + format_duration_as_mm_ss(revm_run_time.elapsed()) ); Ok(()) } diff --git a/cmd/ef_tests/state/runner/revm_runner.rs b/cmd/ef_tests/state/runner/revm_runner.rs index ccf40a3b08..f66042c7e0 100644 --- a/cmd/ef_tests/state/runner/revm_runner.rs +++ b/cmd/ef_tests/state/runner/revm_runner.rs @@ -116,8 +116,8 @@ pub fn prepare_revm_for_tx<'state>( None } else { Some(BlobExcessGasAndPrice { - blob_gasprice: 0, excess_blob_gas: test.env.current_excess_blob_gas.unwrap().as_u64(), + blob_gasprice: 0, }) }; let block_env = RevmBlockEnv { @@ -186,8 +186,8 @@ pub fn prepare_revm_for_tx<'state>( }, value: RevmU256::from_limbs(tx.value.0), data: tx.data.to_vec().into(), - nonce: Some(tx.nonce.as_u64()), - chain_id: Some(chain_spec.chain_id), //TODO: See what to do with this... ChainId test fails IDK why. + nonce: Some(tx.nonce), + chain_id: Some(chain_spec.chain_id), access_list: revm_access_list, gas_priority_fee: tx .max_priority_fee_per_gas @@ -373,7 +373,7 @@ pub async fn compare_levm_revm_account_updates( let account = Account::new( pre_state_value.balance, pre_state_value.code.clone(), - pre_state_value.nonce.as_u64(), + pre_state_value.nonce, account_storage, ); (*account_address, account) @@ -382,14 +382,11 @@ pub async fn compare_levm_revm_account_updates( initial_accounts .entry(test.env.current_coinbase) .or_default(); - let levm_updated_accounts = levm_account_updates - .iter() - .map(|account_update| account_update.address) - .collect::>(); - let revm_updated_accounts = revm_account_updates - .iter() - .map(|account_update| account_update.address) - .collect::>(); + + let (levm_updated_accounts, revm_updated_accounts): (HashSet<_>, HashSet<_>) = ( + levm_account_updates.iter().map(|u| u.address).collect(), + revm_account_updates.iter().map(|u| u.address).collect(), + ); ComparisonReport { levm_post_state_root, @@ -398,18 +395,9 @@ pub async fn compare_levm_revm_account_updates( expected_post_state_root: test.post.vector_post_value(vector, *fork).hash, levm_account_updates: levm_account_updates.to_vec(), revm_account_updates: revm_account_updates.to_vec(), - levm_updated_accounts_only: levm_updated_accounts - .difference(&revm_updated_accounts) - .cloned() - .collect::>(), - revm_updated_accounts_only: revm_updated_accounts - .difference(&levm_updated_accounts) - .cloned() - .collect::>(), - shared_updated_accounts: levm_updated_accounts - .intersection(&revm_updated_accounts) - .cloned() - .collect::>(), + levm_updated_accounts_only: &levm_updated_accounts - &revm_updated_accounts, + revm_updated_accounts_only: &revm_updated_accounts - &levm_updated_accounts, + shared_updated_accounts: &levm_updated_accounts & &revm_updated_accounts, } } @@ -527,12 +515,7 @@ pub async fn _ensure_post_state_revm( let expected_post_state_root_hash = test.post.vector_post_value(vector, *fork).hash; if expected_post_state_root_hash != pos_state_root { - println!( - "Post-state root mismatch: expected {expected_post_state_root_hash:#x}, got {pos_state_root:#x}", - ); - let error_reason = format!( - "Post-state root mismatch: expected {expected_post_state_root_hash:#x}, got {pos_state_root:#x}", - ); + println!("Post-state root mismatch",); return Err(EFTestRunnerError::FailedToEnsurePostState( ExecutionReport { result: TxResult::Success, @@ -542,7 +525,7 @@ pub async fn _ensure_post_state_revm( output: Bytes::new(), }, //TODO: This is not a TransactionReport because it is REVM - error_reason, + "Post-state root mismatch".to_string(), HashMap::new(), )); } diff --git a/cmd/ef_tests/state/tests/all.rs b/cmd/ef_tests/state/tests/all.rs index 9c09e709bb..d1a0ce558f 100644 --- a/cmd/ef_tests/state/tests/all.rs +++ b/cmd/ef_tests/state/tests/all.rs @@ -8,6 +8,7 @@ use std::error::Error; #[tokio::main] async fn main() -> Result<(), Box> { let opts = EFTestRunnerOptions::parse(); + dbg!(&opts); // Useful for testing. let ef_tests = parser::parse_ef_tests(&opts)?; runner::run_ef_tests(ef_tests, &opts).await?; Ok(()) diff --git a/cmd/ef_tests/state/types.rs b/cmd/ef_tests/state/types.rs index 632e590893..948778be7d 100644 --- a/cmd/ef_tests/state/types.rs +++ b/cmd/ef_tests/state/types.rs @@ -165,6 +165,7 @@ pub enum TransactionExpectedException { GasLimitPriceProductOverflow, Type3TxPreFork, InsufficientMaxFeePerBlobGas, + Other, //TODO: Implement exceptions } #[derive(Debug, Deserialize, Clone)] @@ -193,8 +194,8 @@ pub struct EFTestPreValue { pub balance: U256, #[serde(deserialize_with = "deserialize_hex_bytes")] pub code: Bytes, - #[serde(deserialize_with = "deserialize_u256_safe")] - pub nonce: U256, + #[serde(deserialize_with = "deserialize_u64_safe")] + pub nonce: u64, #[serde(deserialize_with = "deserialize_u256_valued_hashmap_safe")] pub storage: HashMap, } @@ -205,7 +206,7 @@ impl From<&EFTestPreValue> for GenesisAccount { code: value.code.clone(), storage: value.storage.clone(), balance: value.balance, - nonce: value.nonce.as_u64(), + nonce: value.nonce, } } } @@ -243,8 +244,8 @@ pub struct EFTestRawTransaction { pub gas_limit: Vec, #[serde(default, deserialize_with = "deserialize_u256_optional_safe")] pub gas_price: Option, - #[serde(deserialize_with = "deserialize_u256_safe")] - pub nonce: U256, + #[serde(deserialize_with = "deserialize_u64_safe")] + pub nonce: u64, pub secret_key: H256, pub sender: Address, pub to: TxKind, @@ -270,8 +271,8 @@ pub struct EFTestTransaction { pub data: Bytes, pub gas_limit: u64, pub gas_price: Option, - #[serde(deserialize_with = "deserialize_u256_safe")] - pub nonce: U256, + #[serde(deserialize_with = "deserialize_u64_safe")] + pub nonce: u64, pub secret_key: H256, pub sender: Address, pub to: TxKind, diff --git a/cmd/ef_tests/state/utils.rs b/cmd/ef_tests/state/utils.rs index 98e5d94f89..deb8b77939 100644 --- a/cmd/ef_tests/state/utils.rs +++ b/cmd/ef_tests/state/utils.rs @@ -11,7 +11,6 @@ use ethrex_vm::{ backends::revm::db::{evm_state, EvmState}, StoreWrapper, }; -use spinoff::Spinner; /// Loads initial state, used for REVM as it contains EvmState. pub async fn load_initial_state(test: &EFTest) -> (EvmState, H256) { @@ -46,22 +45,6 @@ pub async fn load_initial_state_levm(test: &EFTest) -> GeneralizedDatabase { GeneralizedDatabase::new(Arc::new(store), CacheDB::new()) } -pub fn spinner_update_text_or_print(spinner: &mut Spinner, text: String, spinner_enabled: bool) { - if !spinner_enabled { - println!("{}", text); - } else { - spinner.update_text(text); - } -} - -pub fn spinner_success_or_print(spinner: &mut Spinner, text: String, spinner_enabled: bool) { - if !spinner_enabled { - println!("{}", text); - } else { - spinner.success(&text); - } -} - // If gas price is not provided, calculate it with current base fee and priority fee pub fn effective_gas_price( test: &EFTest, diff --git a/cmd/ethrex/cli.rs b/cmd/ethrex/cli.rs index 8aff8df87d..9944bcceef 100644 --- a/cmd/ethrex/cli.rs +++ b/cmd/ethrex/cli.rs @@ -5,6 +5,7 @@ use std::{ }; use clap::{ArgAction, Parser as ClapParser, Subcommand as ClapSubcommand}; +use ethrex_blockchain::fork_choice::apply_fork_choice; use ethrex_p2p::{sync::SyncMode, types::Node}; use ethrex_vm::EvmEngine; use tracing::{info, warn, Level}; @@ -36,8 +37,9 @@ pub struct Options { long = "network", value_name = "GENESIS_FILE_PATH", help = "Receives a `Genesis` struct in json format. This is the only argument which is required. You can look at some example genesis files at `test_data/genesis*`.", - long_help = "Alternatively, the name of a known network can be provided instead to use its preset genesis file and include its preset bootnodes. The networks currently supported include holesky, sepolia and hoodi.", - help_heading = "Node options" + long_help = "Alternatively, the name of a known network can be provided instead to use its preset genesis file and include its preset bootnodes. The networks currently supported include holesky, sepolia, hoodi and mainnet.", + help_heading = "Node options", + env = "ETHREX_NETWORK" )] pub network: Option, #[arg(long = "bootnodes", value_parser = clap::value_parser!(Node), value_name = "BOOTNODE_LIST", value_delimiter = ',', num_args = 1.., help = "Comma separated enode URLs for P2P discovery bootstrap.", help_heading = "P2P options")] @@ -49,11 +51,12 @@ pub struct Options { default_value = DEFAULT_DATADIR, help = "Receives the name of the directory where the Database is located.", long_help = "If the datadir is the word `memory`, ethrex will use the `InMemory Engine`.", - help_heading = "Node options" + help_heading = "Node options", + env = "ETHREX_DATADIR" )] pub datadir: String, #[arg( - long = "force", + long = "force", help = "Force remove the database", long_help = "Delete the database without confirmation.", action = clap::ArgAction::SetTrue, @@ -73,9 +76,17 @@ pub struct Options { long = "metrics.port", value_name = "PROMETHEUS_METRICS_PORT", default_value = "9090", // Default Prometheus port (https://prometheus.io/docs/tutorials/getting_started/#show-me-how-it-is-done). - help_heading = "Node options" + help_heading = "Node options", + env = "ETHREX_METRICS_PORT" )] pub metrics_port: String, + #[arg( + long = "metrics", + action = ArgAction::SetTrue, + help = "Enable metrics collection and exposition", + help_heading = "Node options" + )] + pub metrics_enabled: bool, #[arg( long = "dev", action = ArgAction::SetTrue, @@ -90,17 +101,24 @@ pub struct Options { value_name = "EVM_BACKEND", help = "Has to be `levm` or `revm`", value_parser = utils::parse_evm_engine, - help_heading = "Node options" - )] + help_heading = "Node options", + env = "ETHREX_EVM")] pub evm: EvmEngine, - #[arg(long = "log.level", default_value_t = Level::INFO, value_name = "LOG_LEVEL", help = "The verbosity level used for logs.", long_help = "Possible values: info, debug, trace, warn, error",help_heading = "Node options")] + #[arg( + long = "log.level", + default_value_t = Level::INFO, + value_name = "LOG_LEVEL", + help = "The verbosity level used for logs.", + long_help = "Possible values: info, debug, trace, warn, error", + help_heading = "Node options")] pub log_level: Level, #[arg( long = "http.addr", default_value = "localhost", value_name = "ADDRESS", help = "Listening address for the http rpc server.", - help_heading = "RPC options" + help_heading = "RPC options", + env = "ETHREX_HTTP_ADDR" )] pub http_addr: String, #[arg( @@ -108,7 +126,8 @@ pub struct Options { default_value = "8545", value_name = "PORT", help = "Listening port for the http rpc server.", - help_heading = "RPC options" + help_heading = "RPC options", + env = "ETHREX_HTTP_PORT" )] pub http_port: String, #[arg( @@ -189,6 +208,7 @@ impl Default for Options { syncmode: Default::default(), metrics_addr: "0.0.0.0".to_owned(), metrics_port: Default::default(), + metrics_enabled: Default::default(), dev: Default::default(), evm: Default::default(), force: false, @@ -287,7 +307,7 @@ pub async fn import_blocks(path: &str, data_dir: &str, network: &str, evm: EvmEn let store = init_store(&data_dir, network).await; - let blockchain = init_blockchain(evm, store); + let blockchain = init_blockchain(evm, store.clone()); let path_metadata = metadata(path).expect("Failed to read path"); let blocks = if path_metadata.is_dir() { @@ -306,5 +326,32 @@ pub async fn import_blocks(path: &str, data_dir: &str, network: &str, evm: EvmEn info!("Importing blocks from chain file: {path}"); utils::read_chain_file(path) }; - blockchain.import_blocks(&blocks).await; + + let size = blocks.len(); + + for block in &blocks { + let hash = block.hash(); + + info!( + "Adding block {} with hash {:#x}.", + block.header.number, hash + ); + + if let Err(error) = blockchain.add_block(block).await { + warn!( + "Failed to add block {} with hash {:#x}: {}.", + block.header.number, hash, error + ); + return; + } + } + + if let Some(last_block) = blocks.last() { + let hash = last_block.hash(); + if let Err(error) = apply_fork_choice(&store, hash, hash, hash).await { + warn!("Failed to apply fork choice: {}", error); + } + } + + info!("Added {size} blocks to blockchain"); } diff --git a/cmd/ethrex/ethrex.rs b/cmd/ethrex/ethrex.rs index d2492595a2..f6b48d617b 100644 --- a/cmd/ethrex/ethrex.rs +++ b/cmd/ethrex/ethrex.rs @@ -58,7 +58,9 @@ async fn main() -> eyre::Result<()> { ) .await; - init_metrics(&opts, tracker.clone()); + if opts.metrics_enabled { + init_metrics(&opts, tracker.clone()); + } cfg_if::cfg_if! { if #[cfg(feature = "dev")] { diff --git a/cmd/ethrex/initializers.rs b/cmd/ethrex/initializers.rs index 0730ca42b4..d18fed3494 100644 --- a/cmd/ethrex/initializers.rs +++ b/cmd/ethrex/initializers.rs @@ -56,6 +56,11 @@ pub fn init_tracing(opts: &Options) { } pub fn init_metrics(opts: &Options, tracker: TaskTracker) { + tracing::info!( + "Starting metrics server on {}:{}", + opts.metrics_addr, + opts.metrics_port + ); let metrics_api = ethrex_metrics::api::start_prometheus_metrics_api( opts.metrics_addr.clone(), opts.metrics_port.clone(), @@ -257,6 +262,9 @@ pub fn get_network(opts: &Options) -> String { if network == "hoodi" { network = String::from(networks::HOODI_GENESIS_PATH); } + if network == "mainnet" { + network = String::from(networks::MAINNET_GENESIS_PATH); + } network } @@ -280,6 +288,11 @@ pub fn get_bootnodes(opts: &Options, network: &str, data_dir: &str) -> Vec bootnodes.extend(networks::HOODI_BOOTNODES.iter()); } + if network == networks::MAINNET_GENESIS_PATH { + info!("Adding mainnet preset bootnodes"); + bootnodes.extend(networks::MAINNET_BOOTNODES.iter()); + } + if bootnodes.is_empty() { warn!("No bootnodes specified. This node will not be able to connect to the network."); } diff --git a/cmd/ethrex/l2.rs b/cmd/ethrex/l2.rs index 53d317fd04..08f4db8cbc 100644 --- a/cmd/ethrex/l2.rs +++ b/cmd/ethrex/l2.rs @@ -152,8 +152,10 @@ impl Command { ) .await; - // TODO: Add a --metrics flag to enable metrics. - init_metrics(&opts.node_opts, tracker.clone()); + // Initialize metrics if enabled + if opts.node_opts.metrics_enabled { + init_metrics(&opts.node_opts, tracker.clone()); + } if opts.node_opts.p2p_enabled { init_network( diff --git a/cmd/ethrex/networks.rs b/cmd/ethrex/networks.rs index 720fba0670..e5db39959f 100644 --- a/cmd/ethrex/networks.rs +++ b/cmd/ethrex/networks.rs @@ -10,6 +10,9 @@ const SEPOLIA_BOOTNODES_PATH: &str = "cmd/ethrex/networks/sepolia/bootnodes.json pub const HOODI_GENESIS_PATH: &str = "cmd/ethrex/networks/hoodi/genesis.json"; const HOODI_BOOTNODES_PATH: &str = "cmd/ethrex/networks/hoodi/bootnodes.json"; +pub const MAINNET_GENESIS_PATH: &str = "cmd/ethrex/networks/mainnet/genesis.json"; +const MAINNET_BOOTNODES_PATH: &str = "cmd/ethrex/networks/mainnet/bootnodes.json"; + lazy_static! { pub static ref HOLESKY_BOOTNODES: Vec = serde_json::from_reader( std::fs::File::open(HOLESKY_BOOTNODES_PATH).expect("Failed to open holesky bootnodes file") @@ -23,4 +26,8 @@ lazy_static! { std::fs::File::open(HOODI_BOOTNODES_PATH).expect("Failed to open hoodi bootnodes file") ) .expect("Failed to parse hoodi bootnodes file"); + pub static ref MAINNET_BOOTNODES: Vec = serde_json::from_reader( + std::fs::File::open(MAINNET_BOOTNODES_PATH).expect("Failed to open mainnet bootnodes file") + ) + .expect("Failed to parse mainnet bootnodes file"); } diff --git a/cmd/ethrex/networks/mainnet/bootnodes.json b/cmd/ethrex/networks/mainnet/bootnodes.json new file mode 100644 index 0000000000..f8a0de1fbc --- /dev/null +++ b/cmd/ethrex/networks/mainnet/bootnodes.json @@ -0,0 +1,6 @@ +[ + "enode://d860a01f9722d78051619d1e2351aba3f43f943f6f00718d1b9baa4101932a1f5011f16bb2b1bb35db20d6fe28fa0bf09636d26a87d31de9ec6203eeedb1f666@18.138.108.67:30303", + "enode://22a8232c3abc76a16ae9d6c3b164f98775fe226f0917b0ca871128a74a8e9630b458460865bab457221f1d448dd9791d24c4e5d88786180ac185df813a68d4de@3.209.45.79:30303", + "enode://2b252ab6a1d0f971d9722cb839a42cb81db019ba44c08754628ab4a823487071b5695317c8ccd085219c3a03af063495b2f1da8d18218da2d6a82981b45e6ffc@65.108.70.101:30303", + "enode://4aeb4ab6c14b23e2c4cfdce879c04b0748a20d8e9b59e25ded2a08143e265c6c25936e74cbc8e641e3312ca288673d91f2f93f8e277de3cfa444ecdaaf982052@157.90.35.166:30303" +] diff --git a/cmd/ethrex/networks/mainnet/genesis.json b/cmd/ethrex/networks/mainnet/genesis.json new file mode 100644 index 0000000000..2c2d06e098 --- /dev/null +++ b/cmd/ethrex/networks/mainnet/genesis.json @@ -0,0 +1,26732 @@ +{ + "config": { + "chainId": 1, + "homesteadBlock": 1150000, + "daoForkBlock": 1920000, + "daoForkSupport": true, + "eip150Block": 2463000, + "eip150Hash": "0x2086799aeebeae135c246c65021c82b4e15a2c451340993aacfd2751886514f0", + "eip155Block": 2675000, + "eip158Block": 2675000, + "byzantiumBlock": 4370000, + "constantinopleBlock": 7280000, + "petersburgBlock": 7280000, + "istanbulBlock": 9069000, + "muirGlacierBlock": 9200000, + "berlinBlock": 12244000, + "londonBlock": 12965000, + "arrowGlacierBlock": 13773000, + "grayGlacierBlock": 15050000, + "terminalTotalDifficulty": 58750000000000000000000, + "terminalTotalDifficultyPassed": true, + "shanghaiTime": 1681338455, + "cancunTime": 1710338135, + "pragueTime": 1746612311, + "ethash": {}, + "depositContractAddress": "0x00000000219ab540356cBB839Cbe05303d7705Fa", + "blobSchedule": { + "cancun": { + "target": 3, + "max": 6, + "baseFeeUpdateFraction": 3338477 + }, + "prague": { + "target": 6, + "max": 9, + "baseFeeUpdateFraction": 5007716 + } + } + }, + "nonce": "0x42", + "timestamp": "0x0", + "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", + "gasLimit": "0x1388", + "difficulty": "0x400000000", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "alloc": { + "000d836201318ec6899a67540690382780743280": { + "balance": "0xad78ebc5ac6200000" + }, + "001762430ea9c3a26e5749afdb70da5f78ddbb8c": { + "balance": "0xad78ebc5ac6200000" + }, + "001d14804b399c6ef80e64576f657660804fec0b": { + "balance": "0xe3aeb5737240a00000" + }, + "0032403587947b9f15622a68d104d54d33dbd1cd": { + "balance": "0x433874f632cc60000" + }, + "00497e92cdc0e0b963d752b2296acb87da828b24": { + "balance": "0xa8f649fe7c6180000" + }, + "004bfbe1546bc6c65b5c7eaa55304b38bbfec6d3": { + "balance": "0x6c6b935b8bbd400000" + }, + "005a9c03f69d17d66cbb8ad721008a9ebbb836fb": { + "balance": "0x6c6b935b8bbd400000" + }, + "005d0ee8155ec0a6ff6808552ca5f16bb5be323a": { + "balance": "0xaadec983fcff40000" + }, + "007622d84a234bb8b078230fcf84b67ae9a8acae": { + "balance": "0x25e1cc519952f80000" + }, + "007b9fc31905b4994b04c9e2cfdc5e2770503f42": { + "balance": "0x6c5db2a4d815dc0000" + }, + "007f4a23ca00cd043d25c2888c1aa5688f81a344": { + "balance": "0x29f0a95bfbf7290000" + }, + "008639dabbe3aeac887b5dc0e43e13bcd287d76c": { + "balance": "0x10d0e3c87d6e2c0000" + }, + "0089508679abf8c71bf6781687120e3e6a84584d": { + "balance": "0x6194049f30f7200000" + }, + "008fc7cbadffbd0d7fe44f8dfd60a79d721a1c9c": { + "balance": "0x3635c9adc5dea00000" + }, + "009560a3de627868f91fa8bfe1c1b7afaf08186b": { + "balance": "0x1c67f5f7baa0b00000" + }, + "00969747f7a5b30645fe00e44901435ace24cc37": { + "balance": "0x5c283d410394100000" + }, + "009a6d7db326679b77c90391a7476d238f3ba33e": { + "balance": "0xada55474b81340000" + }, + "009eef0a0886056e3f69211853b9b7457f3782e4": { + "balance": "0xa2a878069b28e00000" + }, + "009fdbf44e1f4a6362b769c39a475f95a96c2bc7": { + "balance": "0x1e931283ccc8500000" + }, + "00a5797f52c9d58f189f36b1d45d1bf6041f2f6b": { + "balance": "0x127d1b3461acd1a0000" + }, + "00aa5381b2138ebeffc191d5d8c391753b7098d2": { + "balance": "0x35abb09ffedeb68000" + }, + "00aada25ea2286709abb422d41923fd380cd04c7": { + "balance": "0x233df3299f61720000" + }, + "00acbfb2f25a5485c739ef70a44eeeeb7c65a66f": { + "balance": "0x56bc75e2d63100000" + }, + "00acc6f082a442828764d11f58d6894ae408f073": { + "balance": "0xcb49b44ba602d800000" + }, + "00b277b099a8e866ca0ec65bcb87284fd142a582": { + "balance": "0x6acb3df27e1f880000" + }, + "00bdd4013aa31c04616c2bc9785f2788f915679b": { + "balance": "0xb9f65d00f63c0000" + }, + "00c27d63fde24b92ee8a1e7ed5d26d8dc5c83b03": { + "balance": "0x6c6b935b8bbd400000" + }, + "00c40fe2095423509b9fd9b754323158af2310f3": { + "balance": "0x0" + }, + "00d75ed60c774f8b3a5a5173fb1833ad7105a2d9": { + "balance": "0x6cb7e74867d5e60000" + }, + "00d78d89b35f472716eceafebf600527d3a1f969": { + "balance": "0x5e0549c9632e1d80000" + }, + "00dae27b350bae20c5652124af5d8b5cba001ec1": { + "balance": "0x22b1c8c1227a00000" + }, + "00dc01cbf44978a42e8de8e436edf94205cfb6ec": { + "balance": "0x4f0febbcda8cb40000" + }, + "00e681bc2d10db62de85848324492250348e90bf": { + "balance": "0x43c33c1937564800000" + }, + "00f463e137dcf625fbf3bca39eca98d2b968cf7f": { + "balance": "0x14061b9d77a5e980000" + }, + "010007394b8b7565a1658af88ce463499135d6b7": { + "balance": "0x56bc75e2d63100000" + }, + "010df1df4bed23760d2d1c03781586ddf7918e54": { + "balance": "0x340aad21b3b700000" + }, + "010f4a98dfa1d9799bf5c796fb550efbe7ecd877": { + "balance": "0x1b2f292236292c70000" + }, + "01155057002f6b0d18acb9388d3bc8129f8f7a20": { + "balance": "0x48a43c54602f700000" + }, + "01226e0ad8d62277b162621c62c928e96e0b9a8c": { + "balance": "0x6c6b935b8bbd400000" + }, + "0126e12ebc17035f35c0e9d11dd148393c405d7a": { + "balance": "0x6c660645aa47180000" + }, + "012f396a2b5eb83559bac515e5210df2c8c362ba": { + "balance": "0xad78ebc5ac6200000" + }, + "0134ff38155fabae94fd35c4ffe1d79de7ef9c59": { + "balance": "0x35659ef93f0fc40000" + }, + "0136a5af6c3299c6b5f005fdaddb148c070b299b": { + "balance": "0x11aa9ac15f1280000" + }, + "01488ad3da603c4cdd6cb0b7a1e30d2a30c8fc38": { + "balance": "0xad78ebc5ac6200000" + }, + "014974a1f46bf204944a853111e52f1602617def": { + "balance": "0x6c6b935b8bbd400000" + }, + "014b7f67b14f5d983d87014f570c8b993b9872b5": { + "balance": "0xad78ebc5ac6200000" + }, + "0151fa5d17a2dce2d7f1eb39ef7fe2ad213d5d89": { + "balance": "0xd8d726b7177a800000" + }, + "01577afd4e50890247c9b10d44af73229aec884f": { + "balance": "0x24dce54d34a1a00000" + }, + "015f097d9acddcddafaf2a107eb93a40fc94b04c": { + "balance": "0x43c33c1937564800000" + }, + "0169c1c210eae845e56840412e1f65993ea90fb4": { + "balance": "0x6c6b935b8bbd400000" + }, + "016b60bb6d67928c29fd0313c666da8f1698d9c5": { + "balance": "0x6c6b935b8bbd400000" + }, + "016c85e1613b900fa357b8283b120e65aefcdd08": { + "balance": "0x2b5d9784a97cd50000" + }, + "018492488ba1a292342247b31855a55905fef269": { + "balance": "0x796e3ea3f8ab00000" + }, + "018f20a27b27ec441af723fd9099f2cbb79d6263": { + "balance": "0x75792a8abdef7c0000" + }, + "0191eb547e7bf6976b9b1b577546761de65622e2": { + "balance": "0x6c6b4c4da6ddbe0000" + }, + "019d709579ff4bc09fdcdde431dc1447d2c260bc": { + "balance": "0x1158e460913d00000" + }, + "01a25a5f5af0169b30864c3be4d7563ccd44f09e": { + "balance": "0x4d853c8f8908980000" + }, + "01a7d9fa7d0eb1185c67e54da83c2e75db69e39f": { + "balance": "0x19d4addd0d8bc960000" + }, + "01a818135a414210c37c62b625aca1a54611ac36": { + "balance": "0xe18398e7601900000" + }, + "01b1cae91a3b9559afb33cdc6d689442fdbfe037": { + "balance": "0xad78ebc5ac6200000" + }, + "01b5b5bc5a117fa08b34ed1db9440608597ac548": { + "balance": "0xad78ebc5ac6200000" + }, + "01bbc14f67af0639aab1441e6a08d4ce7162090f": { + "balance": "0x46fcf68ff8be060000" + }, + "01d03815c61f416b71a2610a2daba59ff6a6de5b": { + "balance": "0x205dfe50b81c82e0000" + }, + "01d599ee0d5f8c38ab2d392e2c65b74c3ce31820": { + "balance": "0x1ba5abf9e779380000" + }, + "01e40521122530d9ac91113c06a0190b6d63850b": { + "balance": "0x487a9a304539440000" + }, + "01e6415d587b065490f1ed7f21d6e0f386ee6747": { + "balance": "0x6c6b935b8bbd400000" + }, + "01e864d354741b423e6f42851724468c74f5aa9c": { + "balance": "0x43c33c1937564800000" + }, + "01ed5fba8d2eab673aec042d30e4e8a611d8c55a": { + "balance": "0x6c6b935b8bbd400000" + }, + "01fb8ec12425a04f813e46c54c05748ca6b29aa9": { + "balance": "0xe15730385467c0000" + }, + "01ff1eb1dead50a7f2f9638fdee6eccf3a7b2ac8": { + "balance": "0x2086ac351052600000" + }, + "020362c3ade878ca90d6b2d889a4cc5510eed5f3": { + "balance": "0x3888e8b311adb38000" + }, + "0203ae01d4c41cae1865e04b1f5b53cdfaecae31": { + "balance": "0x3689cdceb28cd70000" + }, + "02089361a3fe7451fb1f87f01a2d866653dc0b07": { + "balance": "0x22ac74832b5040000" + }, + "021f69043de88c4917ca10f1842897eec0589c7c": { + "balance": "0x6b44cfb81487f40000" + }, + "02290fb5f9a517f82845acdeca0fc846039be233": { + "balance": "0x6c6b935b8bbd400000" + }, + "0239b4f21f8e05cd01512b2be7a0e18a6d974607": { + "balance": "0x3635c9adc5dea00000" + }, + "02477212ffdd75e5155651b76506b1646671a1eb": { + "balance": "0x5f68e8131ecf800000" + }, + "024a098ae702bef5406c9c22b78bd4eb2cc7a293": { + "balance": "0xd8d726b7177a800000" + }, + "024bdd2c7bfd500ee7404f7fb3e9fb31dd20fbd1": { + "balance": "0x9c2007651b2500000" + }, + "025367960304beee34591118e9ac2d1358d8021a": { + "balance": "0x6c6b935b8bbd400000" + }, + "0256149f5b5063bea14e15661ffb58f9b459a957": { + "balance": "0x2629f66e0c53000000" + }, + "02603d7a3bb297c67c877e5d34fbd5b913d4c63a": { + "balance": "0x1158e460913d00000" + }, + "0261ad3a172abf1315f0ffec3270986a8409cb25": { + "balance": "0xb08213bcf8ffe0000" + }, + "026432af37dc5113f1f46d480a4de0b28052237e": { + "balance": "0x1349b786e40bfc0000" + }, + "0266ab1c6b0216230b9395443d5fa75e684568c6": { + "balance": "0x3635c9adc5dea00000" + }, + "02751dc68cb5bd737027abf7ddb77390cd77c16b": { + "balance": "0x1158e460913d00000" + }, + "02778e390fa17510a3428af2870c4273547d386c": { + "balance": "0x36c3c66170c0d720000" + }, + "02ade5db22f8b758ee1443626c64ec2f32aa0a15": { + "balance": "0x43c33c1937564800000" + }, + "02af2459a93d0b3f4d062636236cd4b29e3bcecf": { + "balance": "0x678a932062e4180000" + }, + "02b1af72339b2a2256389fd64607de24f0de600a": { + "balance": "0x6c6b935b8bbd400000" + }, + "02b643d6fabd437a851accbe79abb7fde126dccf": { + "balance": "0x18650127cc3dc800000" + }, + "02b6d65cb00b7b36e1fb5ed3632c4cb20a894130": { + "balance": "0x43c33c1937564800000" + }, + "02b7b1d6b34ce053a40eb65cd4a4f7dddd0e9f30": { + "balance": "0x252248deb6e6940000" + }, + "02c9f7940a7b8b7a410bf83dc9c22333d4275dd3": { + "balance": "0x10f0cf064dd59200000" + }, + "02d4a30968a39e2b3498c3a6a4ed45c1c6646822": { + "balance": "0x6c6b935b8bbd400000" + }, + "02dfcb17a1b87441036374b762a5d3418b1cb4d4": { + "balance": "0x48b02ba9d1ba460000" + }, + "02e4cb22be46258a40e16d4338d802fffd00c151": { + "balance": "0x149696eaceba810000" + }, + "02e816afc1b5c0f39852131959d946eb3b07b5ad": { + "balance": "0x3635c9adc5dea00000" + }, + "02f7f67209b16a17550c694c72583819c80b54ad": { + "balance": "0x5559306a78a700000" + }, + "030973807b2f426914ad00181270acd27b8ff61f": { + "balance": "0x121ea68c114e5100000" + }, + "03097923ba155e16d82f3ad3f6b815540884b92c": { + "balance": "0x62a992e53a0af00000" + }, + "030fb3401f72bd3418b7d1da75bf8c519dd707dc": { + "balance": "0xa2a15d09519be00000" + }, + "031e25db516b0f099faebfd94f890cf96660836b": { + "balance": "0x6c6b935b8bbd400000" + }, + "0328510c09dbcd85194a98d67c33ac49f2f94d60": { + "balance": "0x2544faa778090e00000" + }, + "0329188f080657ab3a2afa522467178279832085": { + "balance": "0xbbf510ddfcb260000" + }, + "03317826d1f70aa4bddfa09be0c4105552d2358b": { + "balance": "0x21a754a6dc5280000" + }, + "03337012ae1d7ff3ee7f697c403e7780188bf0ef": { + "balance": "0xad78ebc5ac6200000" + }, + "03377c0e556b640103289a6189e1aeae63493467": { + "balance": "0x43c33c1937564800000" + }, + "0349634dc2a9e80c3f7721ee2b5046aeaaedfbb5": { + "balance": "0xd8d726b7177a800000" + }, + "0355bcacbd21441e95adeedc30c17218c8a408ce": { + "balance": "0x15af1d78b58c400000" + }, + "036eeff5ba90a6879a14dff4c5043b18ca0460c9": { + "balance": "0x56bc75e2d63100000" + }, + "03714b41d2a6f751008ef8dd4d2b29aecab8f36e": { + "balance": "0x14542ba12a337c00000" + }, + "0372e852582e0934344a0fed2178304df25d4628": { + "balance": "0x43c33c1937564800000" + }, + "0372ee5508bf8163ed284e5eef94ce4d7367e522": { + "balance": "0x56bc75e2d63100000" + }, + "037dd056e7fdbd641db5b6bea2a8780a83fae180": { + "balance": "0x796e3ea3f8ab00000" + }, + "038323b184cff7a82ae2e1bda7793fe4319ca0bf": { + "balance": "0x43c33c1937564800000" + }, + "038779ca2dbe663e63db3fe75683ea0ec62e2383": { + "balance": "0x5a87e7d7f5f6580000" + }, + "038e45eadd3d88b87fe4dab066680522f0dfc8f9": { + "balance": "0x21e19e0c9bab2400000" + }, + "0392549a727f81655429cb928b529f25df4d1385": { + "balance": "0x16c43a0eea0740000" + }, + "0394b90fadb8604f86f43fc1e35d3124b32a5989": { + "balance": "0x296aa140278e700000" + }, + "039e7a4ebc284e2ccd42b1bdd60bd6511c0f7706": { + "balance": "0xf015f25736420000" + }, + "039ef1ce52fe7963f166d5a275c4b1069fe3a832": { + "balance": "0x15af39e4aab2740000" + }, + "03a26cfc4c18316f70d59e9e1a79ee3e8b962f4c": { + "balance": "0x6c6b935b8bbd400000" + }, + "03aa622881236dd0f4940c24c324ff8b7b7e2186": { + "balance": "0xad78ebc5ac62000000" + }, + "03af7ad9d5223cf7c8c13f20df67ebe5ffc5bb41": { + "balance": "0xad78ebc5ac6200000" + }, + "03b0f17cd4469ddccfb7da697e82a91a5f9e7774": { + "balance": "0x1158e460913d00000" + }, + "03b41b51f41df20dd279bae18c12775f77ad771c": { + "balance": "0x3635c9adc5dea00000" + }, + "03be5b4629aefbbcab9de26d39576cb7f691d764": { + "balance": "0xadf30ba70c8970000" + }, + "03c647a9f929b0781fe9ae01caa3e183e876777e": { + "balance": "0x182ab7c20ce5240000" + }, + "03c91d92943603e752203e05340e566013b90045": { + "balance": "0x2b7cc2e9c3225c0000" + }, + "03cb4c4f4516c4ff79a1b6244fbf572e1c7fea79": { + "balance": "0x9489237adb9a500000" + }, + "03cb98d7acd817de9d886d22fab3f1b57d92a608": { + "balance": "0x56bc75e2d631000000" + }, + "03cc9d2d21f86b84ac8ceaf971dba78a90e62570": { + "balance": "0x57473d05dabae80000" + }, + "03d1724fd00e54aabcd2de2a91e8462b1049dd3a": { + "balance": "0x8f1d5c1cae37400000" + }, + "03dedfcd0b3c2e17c705da248790ef98a6bd5751": { + "balance": "0x487a9a304539440000" + }, + "03e8b084537557e709eae2e1e1a5a6bce1ef8314": { + "balance": "0x1158e460913d00000" + }, + "03ea6d26d080e57aee3926b18e8ed73a4e5b2826": { + "balance": "0xad78ebc5ac6200000" + }, + "03eb3cb860f6028da554d344a2bb5a500ae8b86f": { + "balance": "0x6c6b935b8bbd400000" + }, + "03ebc63fda6660a465045e235fbe6e5cf195735f": { + "balance": "0x7b06ce87fdd680000" + }, + "03ef6ad20ff7bd4f002bac58d47544cf879ae728": { + "balance": "0x175c758d0b96e5c0000" + }, + "03f7b92008813ae0a676eb212814afab35221069": { + "balance": "0x6c6b935b8bbd400000" + }, + "041170f581de80e58b2a045c8f7c1493b001b7cb": { + "balance": "0x303c74a1a336940000" + }, + "0413d0cf78c001898a378b918cd6e498ea773c4d": { + "balance": "0xf2dc7d47f15600000" + }, + "04241b41ecbd0bfdf1295e9d4fa59ea09e6c6186": { + "balance": "0x655f769450bc780000" + }, + "043707071e2ae21eed977891dc79cd5d8ee1c2da": { + "balance": "0x6c6b935b8bbd400000" + }, + "044e853144e3364495e7a69fa1d46abea3ac0964": { + "balance": "0x2ab2254b1dc9a8000" + }, + "0455dcec8a7fc4461bfd7f37456fce3f4c3caac7": { + "balance": "0x15af1d78b58c400000" + }, + "045ed7f6d9ee9f252e073268db022c6326adfc5b": { + "balance": "0x56bc75e2d63100000" + }, + "046377f864b0143f282174a892a73d3ec8ec6132": { + "balance": "0xa5aa85009e39c0000" + }, + "0469e8c440450b0e512626fe817e6754a8152830": { + "balance": "0x6c6b935b8bbd400000" + }, + "046d274b1af615fb505a764ad8dda770b1db2f3d": { + "balance": "0x6c6b935b8bbd400000" + }, + "047d5a26d7ad8f8e70600f70a398ddaa1c2db26f": { + "balance": "0x14542ba12a337c00000" + }, + "047e87c8f7d1fce3b01353a85862a948ac049f3e": { + "balance": "0x50c5e761a444080000" + }, + "047f9bf1529daf87d407175e6f171b5e59e9ff3e": { + "balance": "0x233c8fe42703e80000" + }, + "04852732b4c652f6c2e58eb36587e60a62da14db": { + "balance": "0x43c33c1937564800000" + }, + "048a8970ea4145c64d5517b8de5b46d0595aad06": { + "balance": "0x43c33c1937564800000" + }, + "049c5d4bc6f25d4e456c697b52a07811ccd19fb1": { + "balance": "0x104400a2470e680000" + }, + "04a1cada1cc751082ff8da928e3cfa000820a9e9": { + "balance": "0x22b1c8c1227a00000" + }, + "04a80afad53ef1f84165cfd852b0fdf1b1c24ba8": { + "balance": "0x324e964b3eca80000" + }, + "04aafc8ae5ce6f4903c89d7fac9cb19512224777": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "04ba4bb87140022c214a6fac42db5a16dd954045": { + "balance": "0x3635c9adc5dea00000" + }, + "04ba8a3f03f08b895095994dda619edaacee3e7a": { + "balance": "0x6c6b935b8bbd400000" + }, + "04c2c64bb54c3eccd05585e10ec6f99a0cdb01a3": { + "balance": "0x56bc75e2d63100000" + }, + "04ce45f600db18a9d0851b29d9393ebdaafe3dc5": { + "balance": "0x1158e460913d00000" + }, + "04d6b8d4da867407bb997749debbcdc0b358538a": { + "balance": "0x3635c9adc5dea00000" + }, + "04d73896cf6593a691972a13a6e4871ff2c42b13": { + "balance": "0x6c6b935b8bbd400000" + }, + "04d82af9e01a936d97f8f85940b970f9d4db9936": { + "balance": "0xad78ebc5ac6200000" + }, + "04e5f5bc7c923fd1e31735e72ef968fd67110c6e": { + "balance": "0x57551dbc8e624c0000" + }, + "04eca501630abce35218b174956b891ba25efb23": { + "balance": "0x36369ed7747d260000" + }, + "0505a08e22a109015a22f685305354662a5531d5": { + "balance": "0x8cf23f909c0fa00000" + }, + "0514954c3c2fb657f9a06f510ea22748f027cdd3": { + "balance": "0x15af1d78b58c400000" + }, + "051633080d07a557adde319261b074997f14692d": { + "balance": "0x13a6b2b564871a00000" + }, + "0517448dada761cc5ba4033ee881c83037036400": { + "balance": "0x6c4fd1ee246e780000" + }, + "051d424276b21239665186133d653bb8b1862f89": { + "balance": "0x3635c9adc5dea00000" + }, + "0521bc3a9f8711fecb10f50797d71083e341eb9d": { + "balance": "0x1158e460913d00000" + }, + "05236d4c90d065f9e3938358aaffd777b86aec49": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "052a58e035f1fe9cdd169bcf20970345d12b9c51": { + "balance": "0x50c5e761a444080000" + }, + "052eab1f61b6d45517283f41d1441824878749d0": { + "balance": "0xd8d726b7177a800000" + }, + "05336e9a722728d963e7a1cf2759fd0274530fca": { + "balance": "0x31a2443f888a798000" + }, + "053471cd9a41925b3904a5a8ffca3659e034be23": { + "balance": "0xad201a6794ff80000" + }, + "05361d8eb6941d4e90fb7e1418a95a32d5257732": { + "balance": "0x1158e460913d00000" + }, + "05423a54c8d0f9707e704173d923b946edc8e700": { + "balance": "0x6ea03c2bf8ba58000" + }, + "05440c5b073b529b4829209dff88090e07c4f6f5": { + "balance": "0x45d29737e22f200000" + }, + "055ab658c6f0ed4f875ed6742e4bc7292d1abbf0": { + "balance": "0x486cb9799191e0000" + }, + "055bd02caf19d6202bbcdc836d187bd1c01cf261": { + "balance": "0x56bc75e2d63100000" + }, + "055eac4f1ad3f58f0bd024d68ea60dbe01c6afb3": { + "balance": "0x56bc75e2d63100000" + }, + "05665155cc49cbf6aabdd5ae92cbfaad82b8c0c1": { + "balance": "0x15af1d78b58c400000" + }, + "056686078fb6bcf9ba0a8a8dc63a906f5feac0ea": { + "balance": "0x1b181e4bf2343c0000" + }, + "05696b73916bd3033e05521e3211dfec026e98e4": { + "balance": "0x6c6b935b8bbd400000" + }, + "056b1546894f9a85e203fb336db569b16c25e04f": { + "balance": "0x92edb09ff08d88000" + }, + "057949e1ca0570469e4ce3c690ae613a6b01c559": { + "balance": "0xad78ebc5ac6200000" + }, + "057dd29f2d19aa3da42327ea50bce86ff5c911d9": { + "balance": "0xd8d726b7177a800000" + }, + "057f7f81cd7a406fc45994408b5049912c566463": { + "balance": "0x5c283d410394100000" + }, + "05915d4e225a668162aee7d6c25fcfc6ed18db03": { + "balance": "0x398c37279259e0000" + }, + "0596a27dc3ee115fce2f94b481bc207a9e261525": { + "balance": "0x3635c9adc5dea00000" + }, + "05a830724302bc0f6ebdaa1ebeeeb46e6ce00b39": { + "balance": "0x556f64c1fe7fa0000" + }, + "05ae7fd4bbcc80ca11a90a1ec7a301f7cccc83db": { + "balance": "0x3154c9729d05780000" + }, + "05bb64a916be66f460f5e3b64332110d209e19ae": { + "balance": "0xe3aeb5737240a00000" + }, + "05bf4fcfe772e45b826443852e6c351350ce72a2": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "05c64004a9a826e94e5e4ee267fa2a7632dd4e6f": { + "balance": "0x36dc42ebff90b7f8000" + }, + "05c736d365aa37b5c0be9c12c8ad5cd903c32cf9": { + "balance": "0x1455e7b800a86880000" + }, + "05cb6c3b0072d3116761b532b218443b53e8f6c5": { + "balance": "0x1e02c3d7fca9b6280000" + }, + "05d0f4d728ebe82e84bf597515ad41b60bf28b39": { + "balance": "0xe3aeb5737240a00000" + }, + "05d68dad61d3bbdfb3f779265c49474aff3fcd30": { + "balance": "0x222c55dc1519d8000" + }, + "05e671de55afec964b074de574d5158d5d21b0a3": { + "balance": "0xd5967be4fc3f100000" + }, + "05e97b09492cd68f63b12b892ed1d11d152c0eca": { + "balance": "0x3708baed3d68900000" + }, + "05f3631f5664bdad5d0132c8388d36d7d8920918": { + "balance": "0x1158e460913d00000" + }, + "0609d83a6ce1ffc9b690f3e9a81e983e8bdc4d9d": { + "balance": "0xed2b525841adfc00000" + }, + "061ea4877cd08944eb64c2966e9db8dedcfec06b": { + "balance": "0x3635c9adc5dea00000" + }, + "0625d06056968b002206ff91980140242bfaa499": { + "balance": "0x3635c9adc5dea00000" + }, + "0628bfbe5535782fb588406bc96660a49b011af5": { + "balance": "0x52663ccab1e1c00000" + }, + "0631d18bbbbd30d9e1732bf36edae2ce8901ab80": { + "balance": "0xa3f98855ec39900000" + }, + "0631dc40d74e5095e3729eddf49544ecd4396f67": { + "balance": "0x8ac7230489e800000" + }, + "063759dd1c4e362eb19398951ff9f8fad1d31068": { + "balance": "0x21e19e0c9bab2400000" + }, + "065ff575fd9c16d3cb6fd68ffc8f483fc32ec835": { + "balance": "0xad78ebc5ac6200000" + }, + "06618e9d5762df62028601a81d4487d6a0ecb80e": { + "balance": "0x487a9a304539440000" + }, + "066647cfc85d23d37605573d208ca154b244d76c": { + "balance": "0x21e19e0c9bab2400000" + }, + "0678654ac6761db904a2f7e8595ec1eaac734308": { + "balance": "0x2f98b29c2818f80000" + }, + "06860a93525955ff624940fadcffb8e149fd599c": { + "balance": "0x6c68ccd09b022c0000" + }, + "068ce8bd6e902a45cb83b51541b40f39c4469712": { + "balance": "0x11c0f9bad4a46e00000" + }, + "068e29b3f191c812a6393918f71ab933ae6847f2": { + "balance": "0x6c6acc67d7b1d40000" + }, + "068e655766b944fb263619658740b850c94afa31": { + "balance": "0x1e87f85809dc00000" + }, + "06964e2d17e9189f88a8203936b40ac96e533c06": { + "balance": "0xfc936392801c0000" + }, + "06994cd83aa2640a97b2600b41339d1e0d3ede6c": { + "balance": "0xd8d726b7177a80000" + }, + "069ed0ab7aa77de571f16106051d92afe195f2d0": { + "balance": "0xad78ebc5ac6200000" + }, + "06ac26ad92cb859bd5905ddce4266aa0ec50a9c5": { + "balance": "0x2a034919dfbfbc0000" + }, + "06b0c1e37f5a5ec4bbf50840548f9d3ac0288897": { + "balance": "0xd8d882e1928e7d0000" + }, + "06b0ff834073cce1cbc9ea557ea87b605963e8b4": { + "balance": "0x1043561a8829300000" + }, + "06b106649aa8c421ddcd1b8c32cd0418cf30da1f": { + "balance": "0x878678326eac9000000" + }, + "06b5ede6fdf1d6e9a34721379aeaa17c713dd82a": { + "balance": "0x6c6b935b8bbd400000" + }, + "06cbfa08cdd4fba737bac407be8224f4eef35828": { + "balance": "0x202be5e8382e8b8000" + }, + "06d6cb308481c336a6e1a225a912f6e6355940a1": { + "balance": "0x5f68e8131ecf800000" + }, + "06dc7f18cee7edab5b795337b1df6a9e8bd8ae59": { + "balance": "0x15af1d78b58c400000" + }, + "06f68de3d739db41121eacf779aada3de8762107": { + "balance": "0x18493fba64ef00000" + }, + "06f7dc8d1b9462cef6feb13368a7e3974b097f9f": { + "balance": "0x6c6b935b8bbd400000" + }, + "0701f9f147ec486856f5e1b71de9f117e99e2105": { + "balance": "0x965da717fd5b80000" + }, + "070d5d364cb7bbf822fc2ca91a35bdd441b215d5": { + "balance": "0x6c6b935b8bbd400000" + }, + "071dd90d14d41f4ff7c413c24238d3359cd61a07": { + "balance": "0x7b53f79e888dac00000" + }, + "0726c42e00f45404836eb1e280d073e7059687f5": { + "balance": "0x58003e3fb947a38000" + }, + "0727be0a2a00212048b5520fbefb953ebc9d54a0": { + "balance": "0x21e19e0c9bab2400000" + }, + "0729a8a4a5ba23f579d0025b1ad0f8a0d35cdfd2": { + "balance": "0x20dd68aaf3289100000" + }, + "0729b4b47c09eb16158464c8aa7fd9690b438839": { + "balance": "0x6c68ccd09b022c0000" + }, + "0734a0a81c9562f4d9e9e10a8503da15db46d76e": { + "balance": "0xfc936392801c0000" + }, + "073c67e09b5c713c5221c8a0c7f3f74466c347b0": { + "balance": "0x41bad155e6512200000" + }, + "073f1ed1c9c3e9c52a9b0249a5c1caa0571fdf05": { + "balance": "0x3d0ff0b013b800000" + }, + "0748713145ef83c3f0ef4d31d823786f7e9cc689": { + "balance": "0xf3f20b8dfa69d00000" + }, + "075d15e2d33d8b4fa7dba8b9e607f04a261e340b": { + "balance": "0x678a932062e4180000" + }, + "076561a856455d7ef86e63f87c73dbb628a55f45": { + "balance": "0x30ca024f987b900000" + }, + "076ee99d3548623a03b5f99859d2d785a1778d48": { + "balance": "0xad78ebc5ac6200000" + }, + "0770b43dbae4b1f35a927b4fa8124d3866caf97b": { + "balance": "0x37193ea7ef5b470000" + }, + "0770c61be78772230cb5a3bb2429a72614a0b336": { + "balance": "0x16ee0a299b713418000" + }, + "07723e3c30e8b731ee456a291ee0e798b0204a77": { + "balance": "0x6c6b935b8bbd400000" + }, + "0773eeacc050f74720b4a1bd57895b1cceeb495d": { + "balance": "0x21e19e0c9bab2400000" + }, + "07800d2f8068e448c79a4f69b1f15ef682aae5f6": { + "balance": "0x41bad155e6512200000" + }, + "07a8dadec142571a7d53a4297051786d072cba55": { + "balance": "0x13b6da1139bda8000" + }, + "07af938c1237a27c9030094dcf240750246e3d2c": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "07b1a306cb4312df66482c2cae72d1e061400fcd": { + "balance": "0x43c33c1937564800000" + }, + "07b7a57033f8f11330e4665e185d234e83ec140b": { + "balance": "0xea7ee92a0c9a0b8000" + }, + "07bc2cc8eedc01970700efc9c4fb36735e98cd71": { + "balance": "0xd8d726b7177a800000" + }, + "07d41217badca5e0e60327d845a3464f0f27f84a": { + "balance": "0xd8d726b7177a800000" + }, + "07d4334ec385e8aa54eedaeadb30022f0cdfa4ab": { + "balance": "0x8e91d520f2eb790000" + }, + "07dae622630d1136381933d2ad6b22b839d82102": { + "balance": "0xad78ebc5ac6200000" + }, + "07dc2bf83bc6af19a842ffea661af5b41b67fda1": { + "balance": "0x5150ae84a8cdf00000" + }, + "07dc8c8b927adbedfa8f5d639b4352351f2f36d2": { + "balance": "0x110aed3b5530db0000" + }, + "07ddd0422c86ef65bf0c7fc3452862b1228b08b8": { + "balance": "0x6ff5d2aa8f9fcf0000" + }, + "07e1162ceae3cf21a3f62d105990302e307f4e3b": { + "balance": "0x52f103edb66ba80000" + }, + "07e2b4cdeed9d087b12e556d9e770c13c099615f": { + "balance": "0x243d4d18229ca20000" + }, + "07feef54c136850829badc4b49c3f2a73c89fb9e": { + "balance": "0x6685ac1bfe32c0000" + }, + "080546508a3d2682c8b9884f13637b8847b44db3": { + "balance": "0x6c6b935b8bbd400000" + }, + "08090876baadfee65c3d363ba55312748cfa873d": { + "balance": "0x5c2a99371cffe10000" + }, + "08166f02313feae18bb044e7877c808b55b5bf58": { + "balance": "0x6acb3df27e1f880000" + }, + "0829d0f7bb7c446cfbb0deadb2394d9db7249a87": { + "balance": "0x22ca3587cf4eb0000" + }, + "08306de51981e7aca1856859b7c778696a6b69f9": { + "balance": "0xad78ebc5ac62000000" + }, + "0837539b5f6a522a482cdcd3a9bb7043af39bdd2": { + "balance": "0x14542ba12a337c00000" + }, + "0838a7768d9c2aca8ba279adfee4b1f491e326f1": { + "balance": "0xad78ebc5ac6200000" + }, + "08411652c871713609af0062a8a1281bf1bbcfd9": { + "balance": "0x4be4e7267b6ae00000" + }, + "084d103254759b343cb2b9c2d8ff9e1ac5f14596": { + "balance": "0x19bff2ff57968c00000" + }, + "08504f05643fab5919f5eea55925d7a3ed7d807a": { + "balance": "0x1158e460913d00000" + }, + "085b4ab75d8362d914435cedee1daa2b1ee1a23b": { + "balance": "0xd255d112e103a00000" + }, + "085ba65febe23eefc2c802666ab1262382cfc494": { + "balance": "0x15af1d78b58c400000" + }, + "087498c0464668f31150f4d3c4bcdda5221ba102": { + "balance": "0x1158e460913d00000" + }, + "0877eeaeab78d5c00e83c32b2d98fa79ad51482f": { + "balance": "0x17d22d71da62260000" + }, + "08936a37df85b3a158cafd9de021f58137681347": { + "balance": "0xfc936392801c0000" + }, + "08a9a44e1f41de3dbba7a363a3ab412c124cd15e": { + "balance": "0xad78ebc5ac6200000" + }, + "08b7bdcf944d5570838be70460243a8694485858": { + "balance": "0x6c6b935b8bbd400000" + }, + "08b84536b74c8c01543da88b84d78bb95747d822": { + "balance": "0xad78ebc5ac6200000" + }, + "08c2f236ac4adcd3fda9fbc6e4532253f9da3bec": { + "balance": "0x1158e460913d00000" + }, + "08c802f87758349fa03e6bc2e2fd0791197eea9a": { + "balance": "0x6c6b935b8bbd400000" + }, + "08c9f1bfb689fdf804d769f82123360215aff93b": { + "balance": "0x6acb3df27e1f880000" + }, + "08cac8952641d8fc526ec1ab4f2df826a5e7710f": { + "balance": "0x1043561a8829300000" + }, + "08ccda50e4b26a0ffc0ef92e9205310706bec2c7": { + "balance": "0x149756c3857c6000000" + }, + "08d0864dc32f9acb36bf4ea447e8dd6726906a15": { + "balance": "0x6c6e59e67c78540000" + }, + "08d4267feb15da9700f7ccc3c84a8918bf17cfde": { + "balance": "0x61093d7c2c6d380000" + }, + "08d4311c9c1bbaf87fabe1a1d01463828d5d98ce": { + "balance": "0x130ee8e7179044400000" + }, + "08d54e83ad486a934cfaeae283a33efd227c0e99": { + "balance": "0x38530583245edc0000" + }, + "08d97eadfcb7b064e1ccd9c8979fbee5e77a9719": { + "balance": "0xe6c5da8d67ac18000" + }, + "08da3a7a0f452161cfbcec311bb68ebfdee17e88": { + "balance": "0x6c6b935b8bbd400000" + }, + "08e38ee0ce48c9ca645c1019f73b5355581c56e6": { + "balance": "0x56bc75e2d631000000" + }, + "08ef3fa4c43ccdc57b22a4b9b2331a82e53818f2": { + "balance": "0xd8d726b7177a800000" + }, + "0909648c18a3ce5bae7a047ec2f868d24cdda81d": { + "balance": "0xcf152640c5c8300000" + }, + "090cd67b60e81d54e7b5f6078f3e021ba65b9a1e": { + "balance": "0x3635c9adc5dea00000" + }, + "090cebef292c3eb081a05fd8aaf7d39bf07b89d4": { + "balance": "0xd8d726b7177a800000" + }, + "090fa9367bda57d0d3253a0a8ff76ce0b8e19a73": { + "balance": "0x3635c9adc5dea00000" + }, + "09146ea3885176f07782e1fe30dce3ce24c49e1f": { + "balance": "0x1158e460913d00000" + }, + "0921605f99164e3bcc28f31caece78973182561d": { + "balance": "0x2b07692a9065a80000" + }, + "09261f9acb451c3788844f0c1451a35bad5098e3": { + "balance": "0x1d5ad27502920600000" + }, + "0927220492194b2eda9fc4bbe38f25d681dfd36c": { + "balance": "0x14542ba12a337c00000" + }, + "092acb624b08c05510189bbbe21e6524d644ccad": { + "balance": "0xfc936392801c0000" + }, + "092e815558402d67f90d6bfe6da0b2fffa91455a": { + "balance": "0x340aad21b3b700000" + }, + "095030e4b82692dcf8b8d0912494b9b378ec9328": { + "balance": "0x48a43c54602f700000" + }, + "095270cc42141dd998ad2862dbd1fe9b44e7e650": { + "balance": "0x410d586a20a4c00000" + }, + "095457f8ef8e2bdc362196b9a9125da09c67e3ab": { + "balance": "0xad78ebc5ac6200000" + }, + "0954a8cb5d321fc3351a7523a617d0f58da676a7": { + "balance": "0x87d9bc7aa498e80000" + }, + "095b0ea2b218d82e0aea7c2889238a39c9bf9077": { + "balance": "0x43c33c1937564800000" + }, + "095b949de3333a377d5019d893754a5e4656ff97": { + "balance": "0x126e72a69a50d00000" + }, + "095e0174829f34c3781be1a5e38d1541ea439b7f": { + "balance": "0x14542ba12a337c00000" + }, + "095f5a51d06f6340d80b6d29ea2e88118ad730fe": { + "balance": "0x6c6e59e67c78540000" + }, + "0968ee5a378f8cadb3bafdbed1d19aaacf936711": { + "balance": "0x3635c9adc5dea00000" + }, + "0977bfba038a44fb49b03970d8d8cf2cb61f8b25": { + "balance": "0x16c4abbebea0100000" + }, + "097da12cfc1f7c1a2464def08c29bed5e2f851e9": { + "balance": "0x1158e460913d00000" + }, + "097ecda22567c2d91cb03f8c5215c22e9dcda949": { + "balance": "0x11651ac3e7a758000" + }, + "0989c200440b878991b69d6095dfe69e33a22e70": { + "balance": "0x678a932062e4180000" + }, + "0990e81cd785599ea236bd1966cf526302c35b9c": { + "balance": "0x3635c9adc5dea00000" + }, + "0998d8273115b56af43c505e087aff0676ed3659": { + "balance": "0xd8d6eddf2d2e180000" + }, + "09a025316f967fa8b9a1d60700063f5a68001caa": { + "balance": "0x21221a99b93ec0000" + }, + "09a928d528ec1b3e25ffc83e218c1e0afe8928c7": { + "balance": "0xfc936392801c0000" + }, + "09ae49e37f121df5dc158cfde806f173a06b0c7f": { + "balance": "0xd8309e26aba1d00000" + }, + "09afa73bc047ef46b977fd9763f87286a6be68c6": { + "balance": "0x1b2fb5e8f06a660000" + }, + "09b4668696f86a080f8bebb91db8e6f87015915a": { + "balance": "0x238ff7b34f60010000" + }, + "09b59b8698a7fbd3d2f8c73a008988de3e406b2b": { + "balance": "0x878678326eac9000000" + }, + "09b7a988d13ff89186736f03fdf46175b53d16e0": { + "balance": "0x14542ba12a337c00000" + }, + "09c177f1ae442411ddacf187d46db956148360e7": { + "balance": "0x1e52e336cde22180000" + }, + "09c88f917e4d6ad473fa12e98ea3c4472a5ed6da": { + "balance": "0x21e19e0c9bab2400000" + }, + "09d0b8cd077c69d9f32d9cca43b3c208a21ed48b": { + "balance": "0x821d221b5291f8000" + }, + "09d6cefd75b0c4b3f8f1d687a522c96123f1f539": { + "balance": "0x14542ba12a337c00000" + }, + "09e437d448861228a232b62ee8d37965a904ed9c": { + "balance": "0x498cf401df8842e8000" + }, + "09ee12b1b42b05af9cf207d5fcac255b2ec411f2": { + "balance": "0x331cddd47e0fe8000" + }, + "09f3f601f605441140586ce0656fa24aa5b1d9ae": { + "balance": "0x5373776fe8c4540000" + }, + "09f9575be57d004793c7a4eb84b71587f97cbb6a": { + "balance": "0xad78ebc5ac6200000" + }, + "0a0650861f785ed8e4bf1005c450bbd06eb48fb6": { + "balance": "0xa6413b79144e7e0000" + }, + "0a06fad7dcd7a492cbc053eeabde6934b39d8637": { + "balance": "0x1158e460913d00000" + }, + "0a077db13ffeb09484c217709d5886b8bf9c5a8b": { + "balance": "0xd8d726b7177a800000" + }, + "0a0ecda6636f7716ef1973614687fd89a820a706": { + "balance": "0x155bd9307f9fe80000" + }, + "0a29a8a4d5fd950075ffb34d77afeb2d823bd689": { + "balance": "0xad78ebc5ac6200000" + }, + "0a2ade95b2e8c66d8ae6f0ba64ca57d783be6d44": { + "balance": "0xd8d726b7177a800000" + }, + "0a2b4fc5d81ace67dc4bba03f7b455413d46fe3d": { + "balance": "0xaadec983fcff40000" + }, + "0a2dcb7a671701dbb8f495728088265873356c8e": { + "balance": "0x83f16ce08a06c0000" + }, + "0a3de155d5ecd8e81c1ff9bbf0378301f8d4c623": { + "balance": "0xd8d726b7177a800000" + }, + "0a47ad9059a249fc936b2662353da6905f75c2b9": { + "balance": "0x6c6b935b8bbd400000" + }, + "0a48296f7631708c95d2b74975bc4ab88ac1392a": { + "balance": "0x10f0cf064dd59200000" + }, + "0a4a011995c681bc999fdd79754e9a324ae3b379": { + "balance": "0x8c19ab06eb89af60000" + }, + "0a58fddd71898de773a74fdae45e7bd84ef43646": { + "balance": "0x1158e460913d00000" + }, + "0a5b79d8f23b6483dbe2bdaa62b1064cc76366ae": { + "balance": "0x6ac882100952c78000" + }, + "0a652e2a8b77bd97a790d0e91361c98890dbb04e": { + "balance": "0x3635c9adc5dea00000" + }, + "0a6ebe723b6ed1f9a86a69ddda68dc47465c2b1b": { + "balance": "0x403d2db599d5e40000" + }, + "0a77e7f72b437b574f00128b21f2ac265133528c": { + "balance": "0x6c6b935b8bbd400000" + }, + "0a917f3b5cb0b883047fd9b6593dbcd557f453b9": { + "balance": "0x3635c9adc5dea00000" + }, + "0a931b449ea8f12cdbd5e2c8cc76bad2c27c0639": { + "balance": "0x13f9e8c79fe058000" + }, + "0a9804137803ba6868d93a55f9985fcd540451e4": { + "balance": "0xb98bc829a6f90000" + }, + "0a9ab2638b1cfd654d25dab018a0aebddf85fd55": { + "balance": "0x12e8cb5fe4c4a8000" + }, + "0ab366e6e7d5abbce6b44a438d69a1cabb90d133": { + "balance": "0x1158e460913d000000" + }, + "0ab4281ebb318590abb89a81df07fa3af904258a": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "0ab59d390702c9c059db148eb4f3fcfa7d04c7e7": { + "balance": "0xfc936392801c0000" + }, + "0abfb39b11486d79572866195ba26c630b6784db": { + "balance": "0x19ba8737f96928f00000" + }, + "0aca9a5626913b08cfc9a66d40508dce52b60f87": { + "balance": "0x678a932062e4180000" + }, + "0ad3e44d3c001fa290b393617030544108ac6eb9": { + "balance": "0x6abda0bc30b2df8000" + }, + "0aec2e426ed6cc0cf3c249c1897eac47a7faa9bd": { + "balance": "0xad78ebc5ac6200000" + }, + "0af65f14784e55a6f95667fd73252a1c94072d2a": { + "balance": "0xa763b8e02d44f8000" + }, + "0af6c8d539c96d50259e1ba6719e9c8060f388c2": { + "balance": "0x3635c9adc5dea00000" + }, + "0b06390f2437b20ec4a3d3431b3279c6583e5ed7": { + "balance": "0xa844a7424d9c80000" + }, + "0b0b3862112aeec3a03492b1b05f440eca54256e": { + "balance": "0xd8d726b7177a800000" + }, + "0b0e055b28cbd03dc5ff44aa64f3dce04f5e63fb": { + "balance": "0x6c6b935b8bbd400000" + }, + "0b119df99c6b8de58a1e2c3f297a6744bf552277": { + "balance": "0x6c6b935b8bbd400000" + }, + "0b14891999a65c9ef73308efe3100ca1b20e8192": { + "balance": "0x2b5e3af16b18800000" + }, + "0b2113504534642a1daf102eee10b9ebde76e261": { + "balance": "0x942cdd7c95f2bd8000" + }, + "0b288a5a8b75f3dc4191eb0457e1c83dbd204d25": { + "balance": "0x10714e77bb43ab40000" + }, + "0b369e002e1b4c7913fcf00f2d5e19c58165478f": { + "balance": "0x37f6516288c340000" + }, + "0b43bd2391025581d8956ce42a072579cbbfcb14": { + "balance": "0x104e70464b1580000" + }, + "0b507cf553568daaf65504ae4eaa17a8ea3cdbf5": { + "balance": "0x6c6b935b8bbd400000" + }, + "0b5d66b13c87b392e94d91d5f76c0d450a552843": { + "balance": "0x6c6b935b8bbd400000" + }, + "0b5e2011ebc25a007f21362960498afb8af280fb": { + "balance": "0x6c6b935b8bbd400000" + }, + "0b649da3b96a102cdc6db652a0c07d65b1e443e6": { + "balance": "0x6c6b935b8bbd400000" + }, + "0b6920a64b363b8d5d90802494cf564b547c430d": { + "balance": "0x410d586a20a4c00000" + }, + "0b701101a4109f9cb360dc57b77442673d5e5983": { + "balance": "0x6c6b935b8bbd400000" + }, + "0b71f554122469ef978e2f1fefd7cbb410982772": { + "balance": "0xd255d112e103a00000" + }, + "0b7bb342f01bc9888e6a9af4a887cbf4c2dd2caf": { + "balance": "0x3635c9adc5dea000000" + }, + "0b7d339371e5be6727e6e331b5821fa24bdb9d5a": { + "balance": "0x2e7f81868262010000" + }, + "0b7fc9ddf70576f6330669eaaa71b6a831e99528": { + "balance": "0x796e3ea3f8ab00000" + }, + "0b80fc70282cbdd5fde35bf78984db3bdb120188": { + "balance": "0x3638021cecdab00000" + }, + "0b924df007e9c0878417cfe63b976ea1a382a897": { + "balance": "0x22b1c8c1227a00000" + }, + "0b93fca4a4f09cac20db60e065edcccc11e0a5b6": { + "balance": "0xad78ebc5ac6200000" + }, + "0b9df80fbe232009dacf0aa8cac59376e2476203": { + "balance": "0x6c6b935b8bbd400000" + }, + "0ba6e46af25a13f57169255a34a4dac7ce12be04": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "0ba8705bf55cf219c0956b5e3fc01c4474a6cdc1": { + "balance": "0x525e0595d4d6b8000" + }, + "0baf6ecdb91acb3606a8357c0bc4f45cfd2d7e6f": { + "balance": "0x3635c9adc5dea00000" + }, + "0bb05f7224bb5804856556c07eeadbed87ba8f7c": { + "balance": "0x15be6174e1912e0000" + }, + "0bb0c12682a2f15c9b5741b2385cbe41f034068e": { + "balance": "0x5150ae84a8cdf00000" + }, + "0bb25ca7d188e71e4d693d7b170717d6f8f0a70a": { + "balance": "0x124302a82fadd70000" + }, + "0bb2650ea01aca755bc0c017b64b1ab5a66d82e3": { + "balance": "0x487a9a304539440000" + }, + "0bb54c72fd6610bfa4363397e020384b022b0c49": { + "balance": "0x487a9a304539440000" + }, + "0bb7160aba293762f8734f3e0326ffc9a4cac190": { + "balance": "0x3635c9adc5dea00000" + }, + "0bc95cb32dbb574c832fa8174a81356d38bc92ac": { + "balance": "0x6c6b935b8bbd400000" + }, + "0bd67dbde07a856ebd893b5edc4f3a5be4202616": { + "balance": "0x6c6b935b8bbd400000" + }, + "0bdbc54cc8bdbbb402a08911e2232a5460ce866b": { + "balance": "0xa2a15d09519be00000" + }, + "0bdd58b96e7c916dd2fb30356f2aebfaaf1d8630": { + "balance": "0x6c6b935b8bbd400000" + }, + "0be1bcb90343fae5303173f461bd914a4839056c": { + "balance": "0x14542ba12a337c00000" + }, + "0be1fdf626ee6189102d70d13b31012c95cd1cd6": { + "balance": "0x6c6b935b8bbd400000" + }, + "0be2b94ad950a2a62640c35bfccd6c67dae450f6": { + "balance": "0x692ae8897081d00000" + }, + "0be6a09e4307fe48d412b8d1a1a8284dce486261": { + "balance": "0x40fbff85c0138300000" + }, + "0befb54707f61b2c9fb04715ab026e1bb72042bd": { + "balance": "0xd8d726b7177a800000" + }, + "0bf064428f83626722a7b5b26a9ab20421a7723e": { + "balance": "0x73f75d1a085ba0000" + }, + "0bfbb6925dc75e52cf2684224bbe0550fea685d3": { + "balance": "0x6acb3df27e1f880000" + }, + "0c088006c64b30c4ddafbc36cb5f05469eb62834": { + "balance": "0x6c6b935b8bbd400000" + }, + "0c2073ba44d3ddbdb639c04e191039a71716237f": { + "balance": "0x4d853c8f8908980000" + }, + "0c222c7c41c9b048efcce0a232434362e12d673b": { + "balance": "0x21e8359697677380000" + }, + "0c2808b951ed9e872d7b32790fcc5994ae41ffdc": { + "balance": "0x15996e5b3cd6b3c00000" + }, + "0c28847e4f09dfce5f9b25af7c4e530f59c880fe": { + "balance": "0x3635c9adc5dea00000" + }, + "0c2d5c920538e953caaf24f0737f554cc6927742": { + "balance": "0x3635c9adc5dea00000" + }, + "0c30cacc3f72269f8b4f04cf073d2b05a83d9ad1": { + "balance": "0x6c7974123f64a40000" + }, + "0c3239e2e841242db989a61518c22247e8c55208": { + "balance": "0xe4af6471734640000" + }, + "0c480de9f7461002908b49f60fc61e2b62d3140b": { + "balance": "0x21e19e0c9bab2400000" + }, + "0c48ae62d1539788eba013d75ea60b64eeba4e80": { + "balance": "0x77fbdc43e030998000" + }, + "0c5589a7a89b9ad15b02751930415948a875fbef": { + "balance": "0x6d499ec6c63380000" + }, + "0c67033dd8ee7f0c8ae534d42a51f7d9d4f7978f": { + "balance": "0xad78ebc5ac6200000" + }, + "0c6845bf41d5ee273c3ee6b5b0d69f6fd5eabbf7": { + "balance": "0xa2a1b9682e58090000" + }, + "0c7f869f8e90d53fdc03e8b2819b016b9d18eb26": { + "balance": "0x43c33c1937564800000" + }, + "0c8692eeff2a53d6d1688ed56a9ddbbd68dabba1": { + "balance": "0x6c6b935b8bbd400000" + }, + "0c8f66c6017bce5b20347204b602b743bad78d60": { + "balance": "0x6c6b935b8bbd400000" + }, + "0c8fd7775e54a6d9c9a3bf890e761f6577693ff0": { + "balance": "0x215f835bc769da80000" + }, + "0c925ad5eb352c8ef76d0c222d115b0791b962a1": { + "balance": "0xac635d7fa34e300000" + }, + "0c967e3061b87a753e84507eb60986782c8f3013": { + "balance": "0x56bc75e2d63100000" + }, + "0ca12ab0b9666cf0cec6671a15292f2653476ab2": { + "balance": "0x2c7827c42d22d07c0000" + }, + "0ca670eb2c8b96cba379217f5929c2b892f39ef6": { + "balance": "0x6c6b935b8bbd400000" + }, + "0cae108e6db99b9e637876b064c6303eda8a65c8": { + "balance": "0xa2a15d09519be00000" + }, + "0cbd921dbe121563b98a6871fecb14f1cc7e88d7": { + "balance": "0xad78ebc5ac6200000" + }, + "0cbf8770f0d1082e5c20c5aead34e5fca9ae7ae2": { + "balance": "0x3635c9adc5dea00000" + }, + "0cc67f8273e1bae0867fd42e8b8193d72679dbf8": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "0cd6a141918d126b106d9f2ebf69e102de4d3277": { + "balance": "0x1158e460913d00000" + }, + "0cda12bf72d461bbc479eb92e6491d057e6b5ad1": { + "balance": "0x21e19e0c9bab2400000" + }, + "0cdc960b998c141998160dc179b36c15d28470ed": { + "balance": "0x1b1b6bd7af64c70000" + }, + "0cfb172335b16c87d519cd1475530d20577f5e0e": { + "balance": "0x152d02c7e14af6800000" + }, + "0d1f2a57713ebc6e94de29846e8844d376665763": { + "balance": "0x10f0cf064dd59200000" + }, + "0d3265d3e7bdb93d5e8e8b1ca47f210a793ecc8e": { + "balance": "0xad78ebc5ac6200000" + }, + "0d35408f226566116fb8acdaa9e2c9d59b76683f": { + "balance": "0x32f51edbaaa3300000" + }, + "0d551ec1a2133c981d5fc6a8c8173f9e7c4f47af": { + "balance": "0x6c6b935b8bbd400000" + }, + "0d5d98565c647ca5f177a2adb9d3022fac287f21": { + "balance": "0xad78ebc5ac6200000" + }, + "0d658014a199061cf6b39433140303c20ffd4e5a": { + "balance": "0x1bc85dc2a89bb200000" + }, + "0d678706d037187f3e22e6f69b99a592d11ebc59": { + "balance": "0x55a6e79ccd1d300000" + }, + "0d69100c395ce6c5eaadf95d05d872837ededd21": { + "balance": "0x15af1d78b58c400000" + }, + "0d747ee5969bf79d57381d6fe3a2406cd0d8ce27": { + "balance": "0x152d02c7e14af6800000" + }, + "0d8023929d917234ae40512b1aabb5e8a4512771": { + "balance": "0x805e99fdcc5d00000" + }, + "0d8aab8f74ea862cdf766805009d3f3e42d8d00b": { + "balance": "0x13b80b99c5185700000" + }, + "0d8c40a79e18994ff99ec251ee10d088c3912e80": { + "balance": "0x63664fcd2bbc40000" + }, + "0d8ed7d0d15638330ed7e4eaccab8a458d75737e": { + "balance": "0x6c6b935b8bbd400000" + }, + "0d92582fdba05eabc3e51538c56db8813785b328": { + "balance": "0xa5aa85009e39c0000" + }, + "0d9443a79468a5bbf7c13c6e225d1de91aee07df": { + "balance": "0x3cb71f51fc5580000" + }, + "0d9a825ff2bcd397cbad5b711d9dcc95f1cc112d": { + "balance": "0x2b5e3af16b188000000" + }, + "0d9d3f9bc4a4c6efbd59679b69826bc1f63d9916": { + "balance": "0x2086ac351052600000" + }, + "0da532c910e3ac0dfb14db61cd739a93353fd05f": { + "balance": "0x4878be1ffaf95d0000" + }, + "0da7401262384e2e8b4b26dd154799b55145efa0": { + "balance": "0x1043561a8829300000" + }, + "0dae3ee5b915b36487f9161f19846d101433318a": { + "balance": "0x678a932062e4180000" + }, + "0dbd417c372b8b0d01bcd944706bd32e60ae28d1": { + "balance": "0x126e72a69a50d00000" + }, + "0dc100b107011c7fc0a1339612a16ccec3285208": { + "balance": "0x6c6b935b8bbd400000" + }, + "0dcf9d8c9804459f647c14138ed50fad563b4154": { + "balance": "0x960db77681e940000" + }, + "0dcfe837ea1cf28c65fccec3bef1f84e59d150c0": { + "balance": "0xad78ebc5ac6200000" + }, + "0dd4e674bbadb1b0dc824498713dce3b5156da29": { + "balance": "0x93739534d28680000" + }, + "0dfbd4817050d91d9d625c02053cf61a3ee28572": { + "balance": "0x126e72a69a50d00000" + }, + "0e024e7f029c6aaf3a8b910f5e080873b85795aa": { + "balance": "0x3635c9adc5dea00000" + }, + "0e09646c99af438e99fa274cb2f9c856cb65f736": { + "balance": "0x678a932062e4180000" + }, + "0e0c9d005ea016c295cd795cc9213e87febc33eb": { + "balance": "0xabbcd4ef377580000" + }, + "0e0d6633db1e0c7f234a6df163a10e0ab39c200f": { + "balance": "0xad78ebc5ac6200000" + }, + "0e11d77a8977fac30d268445e531149b31541a24": { + "balance": "0x6c6b935b8bbd400000" + }, + "0e123d7da6d1e6fac2dcadd27029240bb39052fe": { + "balance": "0x3635c9adc5dea00000" + }, + "0e1801e70b6262861b1134ccbc391f568afc92f7": { + "balance": "0xd8d726b7177a800000" + }, + "0e2094ac1654a46ba1c4d3a40bb8c17da7f39688": { + "balance": "0x13683f7f3c15d80000" + }, + "0e21af1b8dbf27fcf63f37e047b87a825cbe7c27": { + "balance": "0xa2a15d09519be00000" + }, + "0e2e504a2d1122b5a9feee5cb1451bf4c2ace87b": { + "balance": "0xd5967be4fc3f100000" + }, + "0e2f8e28a681f77c583bd0ecde16634bdd7e00cd": { + "balance": "0x52738f659bca20000" + }, + "0e320219838e859b2f9f18b72e3d4073ca50b37d": { + "balance": "0x6c6b935b8bbd400000" + }, + "0e33fcbbc003510be35785b52a9c5d216bc005f4": { + "balance": "0x65ea3db75546600000" + }, + "0e3696cf1f4217b163d1bc12a5ea730f1c32a14a": { + "balance": "0xd8d726b7177a800000" + }, + "0e390f44053ddfcef0d608b35e4d9c2cbe9871bb": { + "balance": "0x6acb3df27e1f880000" + }, + "0e3a28c1dfafb0505bdce19fe025f506a6d01ceb": { + "balance": "0x6c6b935b8bbd400000" + }, + "0e3dd7d4e429fe3930a6414035f52bdc599d784d": { + "balance": "0x22ca3587cf4eb0000" + }, + "0e4765790352656bc656682c24fc5ef3e76a23c7": { + "balance": "0x286d7fc0cb4f50000" + }, + "0e498800447177b8c8afc3fdfa7f69f4051bb629": { + "balance": "0x7405b69b8de5610000" + }, + "0e6baaa3deb989f289620076668618e9ac332865": { + "balance": "0xad78ebc5ac6200000" + }, + "0e6cd664ad9c1ed64bf98749f40644b626e3792c": { + "balance": "0xcb49b44ba602d800000" + }, + "0e6dfd553b2e873d2aec15bd5fbb3f8472d8d394": { + "balance": "0x28a857425466f800000" + }, + "0e6ec313376271dff55423ab5422cc3a8b06b22b": { + "balance": "0xd8d726b7177a800000" + }, + "0e6ece99111cad1961c748ed3df51edd69d2a3b1": { + "balance": "0x152d02c7e14af6800000" + }, + "0e83b850481ab44d49e0a229a2e464902c69539b": { + "balance": "0x56bc75e2d63100000" + }, + "0e89eddd3fa0d71d8ab0ff8da5580686e3d4f74f": { + "balance": "0x6c6b935b8bbd400000" + }, + "0e9096d343c060db581a120112b278607ec6e52b": { + "balance": "0x1158e460913d00000" + }, + "0e9c511864a177f49be78202773f60489fe04e52": { + "balance": "0x14542ba12a337c00000" + }, + "0ea2a210312b3e867ee0d1cc682ce1d666f18ed5": { + "balance": "0x21e19e0c9bab2400000" + }, + "0eb189ef2c2d5762a963d6b7bdf9698ea8e7b48a": { + "balance": "0x487a9a304539440000" + }, + "0eb5b662a1c718608fd52f0c25f9378830178519": { + "balance": "0x14a37281a612e740000" + }, + "0ec46696ffac1f58005fa8439824f08eed1df89b": { + "balance": "0x21e19e0c9bab2400000" + }, + "0ec50aa823f465b9464b0bc0c4a57724a555f5d6": { + "balance": "0xc83d1426ac7b1f00000" + }, + "0ec5308b31282e218fc9e759d4fec5db3708cec4": { + "balance": "0x3643aa647986040000" + }, + "0eccf617844fd61fba62cb0e445b7ac68bcc1fbe": { + "balance": "0x14fe4fe63565c60000" + }, + "0ed3bb3a4eb554cfca97947d575507cdfd6d21d8": { + "balance": "0x1db3205fcc23d58000" + }, + "0ed76c2c3b5d50ff8fb50b3eeacd681590be1c2d": { + "balance": "0x56bc75e2d63100000" + }, + "0eda80f4ed074aea697aeddf283b63dbca3dc4da": { + "balance": "0x6c6b935b8bbd400000" + }, + "0edd4b580ff10fe06c4a03116239ef96622bae35": { + "balance": "0xaadec983fcff40000" + }, + "0ee391f03c765b11d69026fd1ab35395dc3802a0": { + "balance": "0xad78ebc5ac6200000" + }, + "0ee414940487fd24e390378285c5d7b9334d8b65": { + "balance": "0x914878a8c05ee00000" + }, + "0ef54ac7264d2254abbb5f8b41adde875157db7c": { + "balance": "0x22b1c8c1227a00000" + }, + "0ef85b49d08a75198692914eddb4b22cf5fa4450": { + "balance": "0x6cae30621d47200000" + }, + "0efd1789eb1244a3dede0f5de582d8963cb1f39f": { + "balance": "0x5150ae84a8cdf00000" + }, + "0f042c9c2fb18766f836bb59f735f27dc329fe3c": { + "balance": "0x21e19e0c9bab2400000" + }, + "0f049a8bdfd761de8ec02cee2829c4005b23c06b": { + "balance": "0xda933d8d8c6700000" + }, + "0f05f120c89e9fbc93d4ab0c5e2b4a0df092b424": { + "balance": "0x65a4da25d3016c00000" + }, + "0f127bbf8e311caea2ba502a33feced3f730ba42": { + "balance": "0xa31062beeed700000" + }, + "0f1c249cd962b00fd114a9349f6a6cc778d76c4d": { + "balance": "0x6c6b935b8bbd400000" + }, + "0f206e1a1da7207ea518b112418baa8b06260328": { + "balance": "0x2086ac351052600000" + }, + "0f24105abbdaa03fa6309ef6c188e51f714a6e59": { + "balance": "0xad78ebc5ac6200000" + }, + "0f26480a150961b8e30750713a94ee6f2e47fc00": { + "balance": "0x3635c9adc5dea00000" + }, + "0f2d8daf04b5414a0261f549ff6477b80f2f1d07": { + "balance": "0x2a5a058fc295ed000000" + }, + "0f2fb884c8aaff6f543ac6228bd08e4f60b0a5fd": { + "balance": "0xaa7da485136b840000" + }, + "0f32d9cb4d0fdaa0150656bb608dcc43ed7d9301": { + "balance": "0x28df8bf440db790000" + }, + "0f3665d48e9f1419cd984fc7fa92788710c8f2e4": { + "balance": "0x6c6b935b8bbd400000" + }, + "0f3a1023cac04dbf44f5a5fa6a9cf8508cd4fddf": { + "balance": "0x62a992e53a0af00000" + }, + "0f4073c1b99df60a1549d69789c7318d9403a814": { + "balance": "0x43c33c1937564800000" + }, + "0f46c81db780c1674ac73d314f06539ee56ebc83": { + "balance": "0x215f835bc769da80000" + }, + "0f4f94b9191bb7bb556aaad7c74ddb288417a50b": { + "balance": "0x4be4e7267b6ae00000" + }, + "0f6000de1578619320aba5e392706b131fb1de6f": { + "balance": "0x1b1ab319f5ec750000" + }, + "0f6e840a3f2a24647d8e43e09d45c7c335df4248": { + "balance": "0x878678326eac900000" + }, + "0f7515ff0e808f695e0c20485ff96ed2f7b79310": { + "balance": "0x3638221660a5aa8000" + }, + "0f789e30397c53bf256fc364e6ef39f853504114": { + "balance": "0xc55325ca7415e00000" + }, + "0f7b61c59b016322e8226cafaee9d9e76d50a1b3": { + "balance": "0xd8d726b7177a800000" + }, + "0f7bea4ef3f73ae0233df1e100718cbe29310bb0": { + "balance": "0x6c6b935b8bbd400000" + }, + "0f7bf6373f771a4601762c4dae5fbbf4fedd9cc9": { + "balance": "0x6c6b935b8bbd400000" + }, + "0f832a93df9d7f74cd0fb8546b7198bf5377d925": { + "balance": "0x7c0860e5a80dc0000" + }, + "0f83461ba224bb1e8fdd9dae535172b735acb4e0": { + "balance": "0xad78ebc5ac6200000" + }, + "0f85e42b1df321a4b3e835b50c00b06173968436": { + "balance": "0x35659ef93f0fc40000" + }, + "0f88aac9346cb0e7347fba70905475ba8b3e5ece": { + "balance": "0x21e19e0c9bab2400000" + }, + "0f929cf895db017af79f3ead2216b1bd69c37dc7": { + "balance": "0x6c6b935b8bbd400000" + }, + "0fa010ce0c731d3b628e36b91f571300e49dbeab": { + "balance": "0x36330322d5238c0000" + }, + "0fa5d8c5b3f294efd495ab69d768f81872508548": { + "balance": "0x6c6b935b8bbd400000" + }, + "0fa6c7b0973d0bae2940540e247d3627e37ca347": { + "balance": "0x3635c9adc5dea00000" + }, + "0fad05507cdc8f24b2be4cb7fa5d927ddb911b88": { + "balance": "0xa2df13f441f0098000" + }, + "0fb5d2c673bfb1ddca141b9894fd6d3f05da6720": { + "balance": "0x56bc75e2d63100000" + }, + "0fc9a0e34145fbfdd2c9d2a499b617d7a02969b9": { + "balance": "0x9c2007651b2500000" + }, + "0fcfc4065008cfd323305f6286b57a4dd7eee23b": { + "balance": "0x43c33c1937564800000" + }, + "0fdd65402395df9bd19fee4507ef5345f745104c": { + "balance": "0x10f0cf064dd59200000" + }, + "0fec4ee0d7ca180290b6bd20f9992342f60ff68d": { + "balance": "0x12207f0edce9718000" + }, + "0fee81ac331efd8f81161c57382bb4507bb9ebec": { + "balance": "0x15af880d8cdb830000" + }, + "0ffea06d7113fb6aec2869f4a9dfb09007facef4": { + "balance": "0xc384681b1e1740000" + }, + "10097198b4e7ee91ff82cc2f3bd95fed73c540c0": { + "balance": "0x6c6b935b8bbd400000" + }, + "100b4d0977fcbad4debd5e64a0497aeae5168fab": { + "balance": "0x110c9073b5245a0000" + }, + "101a0a64f9afcc448a8a130d4dfcbee89537d854": { + "balance": "0x337fe5feaf2d1800000" + }, + "102c477d69aadba9a0b0f62b7459e17fbb1c1561": { + "balance": "0x6c6b935b8bbd400000" + }, + "1031e0ecb54985ae21af1793950dc811888fde7c": { + "balance": "0x1158e460913d00000" + }, + "10346414bec6d3dcc44e50e54d54c2b8c3734e3e": { + "balance": "0xd8d726b7177a800000" + }, + "10389858b800e8c0ec32f51ed61a355946cc409b": { + "balance": "0xad78ebc5ac6200000" + }, + "1059cbc63e36c43e88f30008aca7ce058eeaa096": { + "balance": "0x152d02c7e14af6800000" + }, + "106ed5c719b5261477890425ae7551dc59bd255c": { + "balance": "0x2896a58c95be5880000" + }, + "10711c3dda32317885f0a2fd8ae92e82069b0d0b": { + "balance": "0xd8d726b7177a800000" + }, + "107379d4c467464f235bc18e55938aad3e688ad7": { + "balance": "0x2b5e3af16b1880000" + }, + "1076212d4f758c8ec7121c1c7d74254926459284": { + "balance": "0x7695b59b5c17b4c0000" + }, + "1078d7f61b0e56c74ee6635b2e1819ef1e3d8785": { + "balance": "0x3635c9adc5dea00000" + }, + "107a03cf0842dbdeb0618fb587ca69189ec92ff5": { + "balance": "0x6acb3df27e1f880000" + }, + "1080c1d8358a15bc84dac8253c6883319020df2c": { + "balance": "0x90f534608a72880000" + }, + "108a2b7c336f784779d8b54d02a8d31d9a139c0a": { + "balance": "0x21e19e0c9bab2400000" + }, + "108ba7c2895c50e072dc6f964932d50c282d3034": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "108fe8ee2a13da487b22c6ab6d582ea71064d98c": { + "balance": "0x15ac56edc4d12c0000" + }, + "1091176be19b9964a8f72e0ece6bf8e3cfad6e9c": { + "balance": "0x21f2f6f0fc3c6100000" + }, + "1098c774c20ca1daac5ddb620365316d353f109c": { + "balance": "0x56bc75e2d63100000" + }, + "1098cc20ef84bad5146639c4cd1ca6c3996cb99b": { + "balance": "0xfc936392801c0000" + }, + "10a1c42dc1ba746986b985a522a73c93eae64c63": { + "balance": "0x3635c9adc5dea00000" + }, + "10a93457496f1108cd98e140a1ecdbae5e6de171": { + "balance": "0x15a99062d416180000" + }, + "10b5b34d1248fcf017f8c8ffc408ce899ceef92f": { + "balance": "0xe7eeba3410b740000" + }, + "10cf560964ff83c1c9674c783c0f73fcd89943fc": { + "balance": "0x878678326eac9000000" + }, + "10d32416722ca4e648630548ead91edd79c06aff": { + "balance": "0x56bc75e2d63100000" + }, + "10d945334ecde47beb9ca3816c173dfbbd0b5333": { + "balance": "0x4be4e7267b6ae00000" + }, + "10df681506e34930ac7a5c67a54c3e89ce92b981": { + "balance": "0x74c1fab8adb4540000" + }, + "10e1e3377885c42d7df218522ee7766887c05e6a": { + "balance": "0x1043c43cde1d398000" + }, + "10e390ad2ba33d82b37388d09c4544c6b0225de5": { + "balance": "0xad78ebc5ac6200000" + }, + "10f4bff0caa5027c0a6a2dcfc952824de2940909": { + "balance": "0x6c6b935b8bbd400000" + }, + "11001b89ed873e3aaec1155634b4681643986323": { + "balance": "0x3635c9adc5dea00000" + }, + "110237cf9117e767922fc4a1b78d7964da82df20": { + "balance": "0xd5967be4fc3f100000" + }, + "1111e5dbf45e6f906d62866f1708101788ddd571": { + "balance": "0x467be6533ec2e40000" + }, + "11172b278ddd44eea2fdf4cb1d16962391c453d9": { + "balance": "0xc62f3d9bfd4895f00000" + }, + "112634b4ec30ff786e024159f796a57939ea144e": { + "balance": "0x6c6acc67d7b1d40000" + }, + "11306c7d57588637780fc9fde8e98ecb008f0164": { + "balance": "0x6c6acc67d7b1d40000" + }, + "113612bc3ba0ee4898b49dd20233905f2f458f62": { + "balance": "0x2f6f10780d22cc00000" + }, + "11415fab61e0dfd4b90676141a557a869ba0bde9": { + "balance": "0x6f05b59d3b20000000" + }, + "114cbbbf6fb52ac414be7ec61f7bb71495ce1dfa": { + "balance": "0xa2a15d09519be00000" + }, + "114cfefe50170dd97ae08f0a44544978c599548d": { + "balance": "0x2ec887e7a14a1c0000" + }, + "116108c12084612eeda7a93ddcf8d2602e279e5c": { + "balance": "0x6c6b935b8bbd400000" + }, + "1164caaa8cc5977afe1fad8a7d6028ce2d57299b": { + "balance": "0x15af1d78b58c400000" + }, + "11675a25554607a3b6c92a9ee8f36f75edd3e336": { + "balance": "0x8a9aba557e36c0000" + }, + "116a09df66cb150e97578e297fb06e13040c893c": { + "balance": "0x6c6b935b8bbd400000" + }, + "116fef5e601642c918cb89160fc2293ba71da936": { + "balance": "0x2b7cc2e9c3225c0000" + }, + "1178501ff94add1c5881fe886136f6dfdbe61a94": { + "balance": "0x890b0c2e14fb80000" + }, + "1179c60dbd068b150b074da4be23033b20c68558": { + "balance": "0x24dce54d34a1a00000" + }, + "117d9aa3c4d13bee12c7500f09f5dd1c66c46504": { + "balance": "0xb2ad30490b2780000" + }, + "117db836377fe15455e02c2ebda40b1ceb551b19": { + "balance": "0x14542ba12a337c00000" + }, + "118c18b2dce170e8f445753ba5d7513cb7636d2d": { + "balance": "0x1dd0c885f9a0d800000" + }, + "118fbd753b9792395aef7a4d78d263cdcaabd4f7": { + "balance": "0x36330322d5238c0000" + }, + "11928378d27d55c520ceedf24ceb1e822d890df0": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "119aa64d5b7d181dae9d3cb449955c89c1f963fa": { + "balance": "0x25f273933db5700000" + }, + "11c0358aa6479de21866fe21071924b65e70f8b9": { + "balance": "0x7b53f79e888dac00000" + }, + "11d2247a221e70c2d66d17ee138d38c55ffb8640": { + "balance": "0x21e19e0c9bab2400000" + }, + "11d7844a471ef89a8d877555583ceebd1439ea26": { + "balance": "0x22369e6ba80c6880000" + }, + "11dd6185d9a8d73ddfdaa71e9b7774431c4dfec2": { + "balance": "0x3635c9adc5dea00000" + }, + "11e7997edd904503d77da6038ab0a4c834bbd563": { + "balance": "0x150894e849b3900000" + }, + "11ec00f849b6319cf51aa8dd8f66b35529c0be77": { + "balance": "0x6c6b935b8bbd400000" + }, + "11efb8a20451161b644a8ccebbc1d343a3bbcb52": { + "balance": "0xad78ebc5ac62000000" + }, + "11fefb5dc1a4598aa712640c517775dfa1d91f8c": { + "balance": "0x21e19e0c9bab2400000" + }, + "120f9de6e0af7ec02a07c609ca8447f157e6344c": { + "balance": "0xe7eeba3410b740000" + }, + "1210f80bdb826c175462ab0716e69e46c24ad076": { + "balance": "0x56bc75e2d63100000" + }, + "12134e7f6b017bf48e855a399ca58e2e892fa5c8": { + "balance": "0x3635c9adc5dea00000" + }, + "12173074980153aeaa4b0dcbc7132eadcec21b64": { + "balance": "0xd02ab486cedc00000" + }, + "121f855b70149ac83473b9706fb44d47828b983b": { + "balance": "0x4be4e7267b6ae00000" + }, + "1227e10a4dbf9caca31b1780239f557615fc35c1": { + "balance": "0xad78ebc5ac6200000" + }, + "122dcfd81addb97d1a0e4925c4b549806e9f3beb": { + "balance": "0x522035cc6e01210000" + }, + "122f56122549d168a5c5e267f52662e5c5cce5c8": { + "balance": "0xa076407d3f7440000" + }, + "12316fc7f178eac22eb2b25aedeadf3d75d00177": { + "balance": "0x43c33be05f6bfb98000" + }, + "123759f333e13e3069e2034b4f05398918119d36": { + "balance": "0x43c33c1937564800000" + }, + "125cc5e4d56b2bcc2ee1c709fb9e68fb177440bd": { + "balance": "0x6c6b935b8bbd400000" + }, + "12632388b2765ee4452b50161d1fffd91ab81f4a": { + "balance": "0x281d901f4fdd100000" + }, + "126897a311a14ad43b78e0920100c4426bfd6bdd": { + "balance": "0x34c726893f2d948000" + }, + "126d91f7ad86debb0557c612ca276eb7f96d00a1": { + "balance": "0x56bc75e2d63100000" + }, + "127d3fc5003bf63c0d83e93957836515fd279045": { + "balance": "0x610c9222e6e750000" + }, + "127db1cadf1b771cbd7475e1b272690f558c8565": { + "balance": "0x2f6f10780d22cc00000" + }, + "1284f0cee9d2ff2989b65574d06ffd9ab0f7b805": { + "balance": "0x15af1d78b58c400000" + }, + "128b908fe743a434203de294c441c7e20a86ea67": { + "balance": "0x26ab14e0c0e13c0000" + }, + "1293c78c7d6a443b9d74b0ba5ee7bb47fd418588": { + "balance": "0x16a6502f15a1e540000" + }, + "1296acded1e063af39fe8ba0b4b63df789f70517": { + "balance": "0x56bf91b1a65eb0000" + }, + "12aa7d86ddfbad301692feac8a08f841cb215c37": { + "balance": "0x76d41c62494840000" + }, + "12afbcba1427a6a39e7ba4849f7ab1c4358ac31b": { + "balance": "0x43c33c1937564800000" + }, + "12b5e28945bb2969f9c64c63cc05b6f1f8d6f4d5": { + "balance": "0x1a29e86913b74050000" + }, + "12cf8b0e465213211a5b53dfb0dd271a282c12c9": { + "balance": "0xd2f13f7789f00000" + }, + "12d20790b7d3dbd88c81a279b812039e8a603bd0": { + "balance": "0x56f985d38644b80000" + }, + "12d60d65b7d9fc48840be5f891c745ce76ee501e": { + "balance": "0x485e5388d0c76840000" + }, + "12d91a92d74fc861a729646db192a125b79f5374": { + "balance": "0xfc936392801c0000" + }, + "12e9a4ad2ad57484dd700565bddb46423bd9bd31": { + "balance": "0x43c30fb0884a96c0000" + }, + "12f32c0a1f2daab676fe69abd9e018352d4ccd45": { + "balance": "0x2b5e3af16b1880000" + }, + "12f460ae646cd2780fd35c50a6af4b9accfa85c6": { + "balance": "0x3635c9adc5dea00000" + }, + "12ffc1128605cb0c13709a7290506f2690977193": { + "balance": "0xb50fcfafebecb00000" + }, + "13032446e7d610aa00ec8c56c9b574d36ca1c016": { + "balance": "0x6c6b935b8bbd400000" + }, + "131c792c197d18bd045d7024937c1f84b60f4438": { + "balance": "0xd8d726b7177a800000" + }, + "131df8d330eb7cc7147d0a55576f05de8d26a8b7": { + "balance": "0xa31062beeed700000" + }, + "131faed12561bb7aee04e5185af802b1c3438d9b": { + "balance": "0xbdf3c4bb0328c0000" + }, + "1321b605026f4ffb296a3e0edcb390c9c85608b7": { + "balance": "0x6c6b935b8bbd400000" + }, + "1321ccf29739b974e5a516f18f3a843671e39642": { + "balance": "0xd8d726b7177a800000" + }, + "1327d759d56e0ab87af37ecf63fe01f310be100a": { + "balance": "0x23bc3cdb68a1800000" + }, + "1329dd19cd4baa9fc64310efeceab22117251f12": { + "balance": "0xad78ebc5ac6200000" + }, + "13371f92a56ea8381e43059a95128bdc4d43c5a6": { + "balance": "0x3635c9adc5dea00000" + }, + "133c490fa5bf7f372888e607d958fab7f955bae1": { + "balance": "0x55a6e79ccd1d300000" + }, + "133e4f15e1e39c53435930aaedf3e0fe56fde843": { + "balance": "0x1158e460913d00000" + }, + "134163be9fbbe1c5696ee255e90b13254395c318": { + "balance": "0xad78ebc5ac6200000" + }, + "135cecd955e5798370769230159303d9b1839f66": { + "balance": "0x10f0cf064dd59200000" + }, + "135d1719bf03e3f866312479fe338118cd387e70": { + "balance": "0x6c6b935b8bbd400000" + }, + "135eb8c0e9e101deedec11f2ecdb66ae1aae8867": { + "balance": "0x43c33c1937564800000" + }, + "1360e87df24c69ee6d51c76e73767ffe19a2131c": { + "balance": "0x4fcc1a89027f00000" + }, + "136c834bf111326d207395295b2e583ea7f33572": { + "balance": "0x56bc75e2d63100000" + }, + "136d4b662bbd1080cfe4445b0fa213864435b7f1": { + "balance": "0xd8d726b7177a800000" + }, + "136f4907cab41e27084b9845069ff2fd0c9ade79": { + "balance": "0xd8d726b7177a800000" + }, + "1374facd7b3f8d68649d60d4550ee69ff0484133": { + "balance": "0xe9ed6e11172da0000" + }, + "137cf341e8516c815814ebcd73e6569af14cf7bc": { + "balance": "0x3635c9adc5dea00000" + }, + "13848b46ea75beb7eaa85f59d866d77fd24cf21a": { + "balance": "0xa968163f0a57b400000" + }, + "139d3531c9922ad56269f6309aa789fb2485f98c": { + "balance": "0xd8d726b7177a800000" + }, + "139e479764b499d666208c4a8a047a97043163dd": { + "balance": "0x2077212aff6df00000" + }, + "13a5eecb38305df94971ef2d9e179ae6cebab337": { + "balance": "0x11e3ab8395c6e80000" + }, + "13acada8980affc7504921be84eb4944c8fbb2bd": { + "balance": "0x56d2aa3a5c09a00000" + }, + "13b9b10715714c09cfd610cf9c9846051cb1d513": { + "balance": "0x6acb3df27e1f880000" + }, + "13ce332dff65a6ab933897588aa23e000980fa82": { + "balance": "0xe020536f028f00000" + }, + "13d67a7e25f2b12cdb85585009f8acc49b967301": { + "balance": "0x6c6acc67d7b1d40000" + }, + "13dee03e3799952d0738843d4be8fc0a803fb20e": { + "balance": "0x6c6b935b8bbd400000" + }, + "13e02fb448d6c84ae17db310ad286d056160da95": { + "balance": "0x6c6b935b8bbd400000" + }, + "13e321728c9c57628058e93fc866a032dd0bda90": { + "balance": "0x26bcca23fe2ea20000" + }, + "13ec812284026e409bc066dfebf9d5a4a2bf801e": { + "balance": "0x57473d05dabae80000" + }, + "140129eaa766b5a29f5b3af2574e4409f8f6d3f1": { + "balance": "0x15af1d78b58c4000000" + }, + "140518a3194bad1350b8949e650565debe6db315": { + "balance": "0x6c6b935b8bbd400000" + }, + "1406854d149e081ac09cb4ca560da463f3123059": { + "balance": "0x487a9a304539440000" + }, + "140ca28ff33b9f66d7f1fc0078f8c1eef69a1bc0": { + "balance": "0x56bc75e2d631000000" + }, + "140fba58dbc04803d84c2130f01978f9e0c73129": { + "balance": "0x15af1d78b58c400000" + }, + "141a5e39ee2f680a600fbf6fa297de90f3225cdd": { + "balance": "0x21e19e0c9bab2400000" + }, + "14254ea126b52d0142da0a7e188ce255d8c47178": { + "balance": "0x2a034919dfbfbc0000" + }, + "142b87c5043ffb5a91df18c2e109ced6fe4a71db": { + "balance": "0xad78ebc5ac6200000" + }, + "143c639752caeecf6a997d39709fc8f19878c7e8": { + "balance": "0x6acb3df27e1f880000" + }, + "143d536b8b1cb84f56a39e0bc81fd5442bcacce1": { + "balance": "0x56bc75e2d63100000" + }, + "143f5f1658d9e578f4f3d95f80c0b1bd3933cbda": { + "balance": "0x50c5e761a444080000" + }, + "14410fb310711be074a80883c635d0ef6afb2539": { + "balance": "0x6c6b935b8bbd400000" + }, + "144b19f1f66cbe318347e48d84b14039466c5909": { + "balance": "0x6c6b935b8bbd400000" + }, + "145250b06e4fa7cb2749422eb817bdda8b54de5f": { + "balance": "0xbdf3c4bb0328c0000" + }, + "145e0600e2a927b2dd8d379356b45a2e7d51d3ae": { + "balance": "0x8a02ab400bb2cb8000" + }, + "145e1de0147911ccd880875fbbea61f6a142d11d": { + "balance": "0xd8d726b7177a800000" + }, + "1463a873555bc0397e575c2471cf77fa9db146e0": { + "balance": "0x21e19e0c9bab2400000" + }, + "1479a9ec7480b74b5db8fc499be352da7f84ee9c": { + "balance": "0x3635c9adc5dea00000" + }, + "147af46ae9ccd18bb35ca01b353b51990e49dce1": { + "balance": "0xd8d726b7177a800000" + }, + "147f4210ab5804940a0b7db8c14c28396b62a6bf": { + "balance": "0x6c6b935b8bbd400000" + }, + "14830704e99aaad5c55e1f502b27b22c12c91933": { + "balance": "0x219c3a7b1966300000" + }, + "149b6dbde632c19f5af47cb493114bebd9b03c1f": { + "balance": "0x28a857425466f800000" + }, + "149ba10f0da2725dc704733e87f5a524ca88515e": { + "balance": "0x1ab2cf7c9f87e200000" + }, + "14a7352066364404db50f0d0d78d754a22198ef4": { + "balance": "0x65ea3db75546600000" + }, + "14ab164b3b524c82d6abfbc0de831126ae8d1375": { + "balance": "0x6c6b935b8bbd400000" + }, + "14b1603ec62b20022033eec4d6d6655ac24a015a": { + "balance": "0x2b5e3af16b1880000" + }, + "14c63ba2dcb1dd4df33ddab11c4f0007fa96a62d": { + "balance": "0x34841b6057afab00000" + }, + "14cdddbc8b09e6675a9e9e05091cb92238c39e1e": { + "balance": "0x11478b7c30abc300000" + }, + "14d00aad39a0a7d19ca05350f7b03727f08dd82e": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "14eec09bf03e352bd6ff1b1e876be664ceffd0cf": { + "balance": "0x116dc3a8994b30000" + }, + "14f221159518783bc4a706676fc4f3c5ee405829": { + "balance": "0xad78ebc5ac6200000" + }, + "14fcd1391e7d732f41766cdacd84fa1deb9ffdd2": { + "balance": "0x6c6b935b8bbd400000" + }, + "150e3dbcbcfc84ccf89b73427763a565c23e60d0": { + "balance": "0x22b1c8c1227a00000" + }, + "1518627b88351fede796d3f3083364fbd4887b0c": { + "balance": "0x3635c9adc5dea000000" + }, + "15224ad1c0face46f9f556e4774a3025ad06bd52": { + "balance": "0xb98bc829a6f90000" + }, + "152f2bd229ddf3cb0fdaf455c183209c0e1e39a2": { + "balance": "0x6c6b935b8bbd400000" + }, + "152f4e860ef3ee806a502777a1b8dbc91a907668": { + "balance": "0x2086ac351052600000" + }, + "153c08aa8b96a611ef63c0253e2a4334829e579d": { + "balance": "0x155bd9307f9fe80000" + }, + "153cf2842cb9de876c276fa64767d1a8ecf573bb": { + "balance": "0x6c6b935b8bbd400000" + }, + "153ef58a1e2e7a3eb6b459a80ab2a547c94182a2": { + "balance": "0x14542ba12a337c000000" + }, + "154459fa2f21318e3434449789d826cdc1570ce5": { + "balance": "0x6c6b935b8bbd400000" + }, + "1547b9bf7ad66274f3413827231ba405ee8c88c1": { + "balance": "0x3a9d5baa4abf1d00000" + }, + "1548b770a5118ede87dba2f690337f616de683ab": { + "balance": "0x1c995685e0bf870000" + }, + "15528350e0d9670a2ea27f7b4a33b9c0f9621d21": { + "balance": "0xd8d8583fa2d52f0000" + }, + "155b3779bb6d56342e2fda817b5b2d81c7f41327": { + "balance": "0x2b8aa3a076c9c0000" + }, + "1565af837ef3b0bd4e2b23568d5023cd34b16498": { + "balance": "0x1551e9724ac4ba0000" + }, + "15669180dee29598869b08a721c7d24c4c0ee63f": { + "balance": "0x3635c9adc5dea00000" + }, + "1572cdfab72a01ce968e78f5b5448da29853fbdd": { + "balance": "0x112626c49060fa60000" + }, + "157559adc55764cc6df79323092534e3d6645a66": { + "balance": "0x14542ba12a337c00000" + }, + "1578bdbc371b4d243845330556fff2d5ef4dff67": { + "balance": "0x56bc75e2d63100000" + }, + "157eb3d3113bd3b597714d3a954edd018982a5cb": { + "balance": "0x6c6b935b8bbd400000" + }, + "1584a2c066b7a455dbd6ae2807a7334e83c35fa5": { + "balance": "0x70c1cc73b00c80000" + }, + "15874686b6733d10d703c9f9bec6c52eb8628d67": { + "balance": "0x6c6b935b8bbd400000" + }, + "158a0d619253bf4432b5cd02c7b862f7c2b75636": { + "balance": "0x75bac7c5b12188000" + }, + "1598127982f2f8ad3b6b8fc3cf27bf617801ba2b": { + "balance": "0x960db77681e940000" + }, + "159adce27aa10b47236429a34a5ac42cad5b6416": { + "balance": "0x6bf90a96edbfa718000" + }, + "15a0aec37ff9ff3d5409f2a4f0c1212aaccb0296": { + "balance": "0x3635c9adc5dea00000" + }, + "15aa530dc36958b4edb38eee6dd9e3c77d4c9145": { + "balance": "0x6c6b935b8bbd400000" + }, + "15acb61568ec4af7ea2819386181b116a6c5ee70": { + "balance": "0x690836c0af5f5600000" + }, + "15b96f30c23b8664e7490651066b00c4391fbf84": { + "balance": "0x1642e9df4876290000" + }, + "15c7edb8118ee27b342285eb5926b47a855bc7a5": { + "balance": "0x1158e460913d00000" + }, + "15d99468507aa0413fb60dca2adc7f569cb36b54": { + "balance": "0x6c6b935b8bbd400000" + }, + "15dbb48c98309764f99ced3692dcca35ee306bac": { + "balance": "0x1fc3842bd1f071c00000" + }, + "15dcafcc2bace7b55b54c01a1c514626bf61ebd8": { + "balance": "0x1fd933494aa5fe00000" + }, + "15e3b584056b62c973cf5eb096f1733e54c15c91": { + "balance": "0x32c75a0223ddf30000" + }, + "15ebd1c7cad2aff19275c657c4d808d010efa0f5": { + "balance": "0xadf30ba70c8970000" + }, + "15ee0fc63ebf1b1fc49d7bb38f8863823a2e17d2": { + "balance": "0x678a932062e4180000" + }, + "15f1b352110d68901d8f67aac46a6cfafe031477": { + "balance": "0xad78ebc5ac6200000" + }, + "15f2b7b16432ee50a5f55b41232f6334ed58bdc0": { + "balance": "0x15af1d78b58c400000" + }, + "16019a4dafab43f4d9bf4163fae0847d848afca2": { + "balance": "0x15bc70139f74a0000" + }, + "160226efe7b53a8af462d117a0108089bdecc2d1": { + "balance": "0xadf30ba70c8970000" + }, + "160ceb6f980e04315f53c4fc988b2bf69e284d7d": { + "balance": "0x10910d4cdc9f60000" + }, + "161caf5a972ace8379a6d0a04ae6e163fe21df2b": { + "balance": "0x152d02c7e14af6800000" + }, + "161d26ef6759ba5b9f20fdcd66f16132c352415e": { + "balance": "0x6c6b935b8bbd400000" + }, + "162110f29eac5f7d02b543d8dcd5bb59a5e33b73": { + "balance": "0x6c6b935b8bbd400000" + }, + "162ba503276214b509f97586bd842110d103d517": { + "balance": "0x1e7ffd8895c22680000" + }, + "162d76c2e6514a3afb6fe3d3cb93a35c5ae783f1": { + "balance": "0x6c6b935b8bbd400000" + }, + "163bad4a122b457d64e8150a413eae4d07023e6b": { + "balance": "0x104e70464b1580000" + }, + "163cc8be227646cb09719159f28ed09c5dc0dce0": { + "balance": "0x487a9a304539440000" + }, + "163dca73d7d6ea3f3e6062322a8734180c0b78ef": { + "balance": "0x9f742003cb7dfc0000" + }, + "164d7aac3eecbaeca1ad5191b753f173fe12ec33": { + "balance": "0x285652b8a468690000" + }, + "16526c9edf943efa4f6d0f0bae81e18b31c54079": { + "balance": "0x35659ef93f0fc40000" + }, + "165305b787322e25dc6ad0cefe6c6f334678d569": { + "balance": "0x6c6b935b8bbd400000" + }, + "1665ab1739d71119ee6132abbd926a279fe67948": { + "balance": "0x56bc75e2d63100000" + }, + "166bf6dab22d841b486c38e7ba6ab33a1487ed8c": { + "balance": "0x43c33c1937564800000" + }, + "167699f48a78c615512515739958993312574f07": { + "balance": "0x21d3bd55e803c0000" + }, + "1678c5f2a522393225196361894f53cc752fe2f3": { + "balance": "0x68f365aea1e4400000" + }, + "167ce7de65e84708595a525497a3eb5e5a665073": { + "balance": "0x1f314773666fc40000" + }, + "167e3e3ae2003348459392f7dfce44af7c21ad59": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "1680cec5021ee93050f8ae127251839e74c1f1fd": { + "balance": "0x2c61461e5d743d68000" + }, + "16816aac0ede0d2d3cd442da79e063880f0f1d67": { + "balance": "0x6c6b935b8bbd400000" + }, + "168b5019b818691644835fe69bf229e17112d52c": { + "balance": "0x5ede20f01a459800000" + }, + "168bdec818eafc6d2992e5ef54aa0e1601e3c561": { + "balance": "0x3637507a30abeb0000" + }, + "168d30e53fa681092b52e9bae15a0dcb41a8c9bb": { + "balance": "0x56bc75e2d63100000" + }, + "169bbefc41cfd7d7cbb8dfc63020e9fb06d49546": { + "balance": "0x6c6b935b8bbd400000" + }, + "16a58e985dccd707a594d193e7cca78b5d027849": { + "balance": "0x49b9ca9a6943400000" + }, + "16a9e9b73ae98b864d1728798b8766dbc6ea8d12": { + "balance": "0x33e7b44b0db5040000" + }, + "16aa52cb0b554723e7060f21f327b0a68315fea3": { + "balance": "0xd8d726b7177a80000" + }, + "16abb8b021a710bdc78ea53494b20614ff4eafe8": { + "balance": "0x890b0c2e14fb80000" + }, + "16afa787fc9f94bdff6976b1a42f430a8bf6fb0f": { + "balance": "0x6c6b935b8bbd400000" + }, + "16bae5d24eff91778cd98b4d3a1cc3162f44aa77": { + "balance": "0x15be6174e1912e0000" + }, + "16bc40215abbd9ae5d280b95b8010b4514ff1292": { + "balance": "0xad78ebc5ac6200000" + }, + "16be75e98a995a395222d00bd79ff4b6e638e191": { + "balance": "0x79f905c6fd34e800000" + }, + "16c1bf5b7dc9c83c179efacbcf2eb174e3561cb3": { + "balance": "0x3635c9adc5dea00000" + }, + "16c7b31e8c376282ac2271728c31c95e35d952c3": { + "balance": "0x6c6b935b8bbd400000" + }, + "16f313cf8ad000914a0a176dc6a4342b79ec2538": { + "balance": "0x6c6b935b8bbd400000" + }, + "16ffac84032940f0121a09668b858a7e79ffa3bb": { + "balance": "0xd24ada6e1087110000" + }, + "1703b4b292b8a9deddede81bb25d89179f6446b6": { + "balance": "0x42b65a455e8b1680000" + }, + "17049311101d817efb1d65910f663662a699c98c": { + "balance": "0x6c68ccd09b022c0000" + }, + "1704cefcfb1331ec7a78388b29393e85c1af7916": { + "balance": "0x15af1d78b58c400000" + }, + "170a88a8997f92d238370f1affdee6347050b013": { + "balance": "0xa2ac77351488300000" + }, + "17108dab2c50f99de110e1b3b3b4cd82f5df28e7": { + "balance": "0x35203b67bccad00000" + }, + "17125b59ac51cee029e4bd78d7f5947d1ea49bb2": { + "balance": "0x4a89f54ef0121c00000" + }, + "171ad9a04bedc8b861e8ed4bddf5717813b1bb48": { + "balance": "0x15af1d78b58c400000" + }, + "171ca02a8b6d62bf4ca47e906914079861972cb2": { + "balance": "0xad78ebc5ac6200000" + }, + "1722c4cbe70a94b6559d425084caeed4d6e66e21": { + "balance": "0xd8d726b7177a800000" + }, + "17580b766f7453525ca4c6a88b01b50570ea088c": { + "balance": "0x56bc75e2d63100000" + }, + "17589a6c006a54cad70103123aae0a82135fdeb4": { + "balance": "0xd8d726b7177a800000" + }, + "175a183a3a235ffbb03ba835675267229417a091": { + "balance": "0x3635c9adc5dea000000" + }, + "175feeea2aa4e0efda12e1588d2f483290ede81a": { + "balance": "0xad78ebc5ac6200000" + }, + "1765361c2ec2f83616ce8363aae21025f2566f40": { + "balance": "0x10f0cf064dd59200000" + }, + "1767525c5f5a22ed80e9d4d7710f0362d29efa33": { + "balance": "0x15af1d78b58c400000" + }, + "17762560e82a93b3f522e0e524adb8612c3a7470": { + "balance": "0x3635c9adc5dea00000" + }, + "177dae78bc0113d8d39c4402f2a641ae2a105ab8": { + "balance": "0x6292425620b4480000" + }, + "1784948bf99848c89e445638504dd698271b5924": { + "balance": "0x1474c410d87baee0000" + }, + "1788da9b57fd05edc4ff99e7fef301519c8a0a1e": { + "balance": "0x6c6b935b8bbd400000" + }, + "178eaf6b8554c45dfde16b78ce0c157f2ee31351": { + "balance": "0x1158e460913d000000" + }, + "17961d633bcf20a7b029a7d94b7df4da2ec5427f": { + "balance": "0xc6ff070f1938b8000" + }, + "1796bcc97b8abc717f4b4a7c6b1036ea2182639f": { + "balance": "0x1341f91cd8e3510000" + }, + "17993d312aa1106957868f6a55a5e8f12f77c843": { + "balance": "0x1865e814f4142e8000" + }, + "179a825e0f1f6e985309668465cffed436f6aea9": { + "balance": "0x1158e460913d00000" + }, + "17b2d6cf65c6f4a347ddc6572655354d8a412b29": { + "balance": "0x6c6b935b8bbd400000" + }, + "17b807afa3ddd647e723542e7b52fee39527f306": { + "balance": "0x15af40ffa7fc010000" + }, + "17c0478657e1d3d17aaa331dd429cecf91f8ae5d": { + "balance": "0x3634fb9f1489a70000" + }, + "17c0fef6986cfb2e4041f9979d9940b69dff3de2": { + "balance": "0xd8d726b7177a800000" + }, + "17d4918dfac15d77c47f9ed400a850190d64f151": { + "balance": "0x6c6b935b8bbd400000" + }, + "17d521a8d9779023f7164d233c3b6420ffd223ed": { + "balance": "0x1158e460913d00000" + }, + "17d931d4c56294dcbe77c8655be4695f006d4a3c": { + "balance": "0x6c6b935b8bbd400000" + }, + "17df49518d73b129f0da36b1c9b40cb66420fdc7": { + "balance": "0x21e19e0c9bab2400000" + }, + "17e4a0e52bac3ee44efe0954e753d4b85d644e05": { + "balance": "0x6c6b935b8bbd400000" + }, + "17e584e810e567702c61d55d434b34cdb5ee30f6": { + "balance": "0x10f0cf064dd59200000" + }, + "17e82e7078dc4fd9e879fb8a50667f53a5c54591": { + "balance": "0xad78ebc5ac6200000" + }, + "17e86f3b5b30c0ba59f2b2e858425ba89f0a10b0": { + "balance": "0x6c6b935b8bbd400000" + }, + "17ee9f54d4ddc84d670eff11e54a659fd72f4455": { + "balance": "0x3635c9adc5dea000000" + }, + "17ef4acc1bf147e326749d10e677dcffd76f9e06": { + "balance": "0x87751f4e0e1b5300000" + }, + "17f14632a7e2820be6e8f6df823558283dadab2d": { + "balance": "0x6c6b935b8bbd400000" + }, + "17f523f117bc9fe978aa481eb4f5561711371bc8": { + "balance": "0x6c69f73e29134e0000" + }, + "17fd9b551a98cb61c2e07fbf41d3e8c9a530cba5": { + "balance": "0x1768c308193048000" + }, + "180478a655d78d0f3b0c4f202b61485bc4002fd5": { + "balance": "0x6c6b935b8bbd400000" + }, + "18136c9df167aa17b6f18e22a702c88f4bc28245": { + "balance": "0xd8d726b7177a800000" + }, + "1815279dff9952da3be8f77249dbe22243377be7": { + "balance": "0x1017cb76e7b26640000" + }, + "181fbba852a7f50178b1c7f03ed9e58d54162929": { + "balance": "0x241a9b4f617a280000" + }, + "1827039f09570294088fddf047165c33e696a492": { + "balance": "0x205b4dfa1ee74780000" + }, + "182db85293f606e88988c3704cb3f0c0bbbfca5a": { + "balance": "0x73f75d1a085ba0000" + }, + "1848003c25bfd4aa90e7fcb5d7b16bcd0cffc0d8": { + "balance": "0x3635c9adc5dea00000" + }, + "184a4f0beb71ffd558a6b6e8f228b78796c4cf3e": { + "balance": "0x28a857425466f800000" + }, + "184d86f3466ae6683b19729982e7a7e1a48347b2": { + "balance": "0x21e19e0c9bab2400000" + }, + "1851a063ccdb30549077f1d139e72de7971197d5": { + "balance": "0x6c6b935b8bbd400000" + }, + "185546e8768d506873818ac9751c1f12116a3bef": { + "balance": "0xad78ebc5ac6200000" + }, + "1858cf11aea79f5398ad2bb22267b5a3c952ea74": { + "balance": "0x215f835bc769da80000" + }, + "185a7fc4ace368d233e620b2a45935661292bdf2": { + "balance": "0x43c33c1937564800000" + }, + "1864a3c7b48155448c54c88c708f166709736d31": { + "balance": "0x73f75d1a085ba0000" + }, + "186afdc085f2a3dce4615edffbadf71a11780f50": { + "balance": "0xad78ebc5ac6200000" + }, + "186b95f8e5effddcc94f1a315bf0295d3b1ea588": { + "balance": "0x6c6acc67d7b1d40000" + }, + "187d9f0c07f8eb74faaad15ebc7b80447417f782": { + "balance": "0x1158e460913d00000" + }, + "1895a0eb4a4372722fcbc5afe6936f289c88a419": { + "balance": "0x3154c9729d05780000" + }, + "1899f69f653b05a5a6e81f480711d09bbf97588c": { + "balance": "0x69fb133df750ac0000" + }, + "18a6d2fc52be73084023c91802f05bc24a4be09f": { + "balance": "0x6c6b935b8bbd400000" + }, + "18b0407cdad4ce52600623bd5e1f6a81ab61f026": { + "balance": "0x1151ccf0c654c68000" + }, + "18b8bcf98321da61fb4e3eacc1ec5417272dc27e": { + "balance": "0x2fb474098f67c00000" + }, + "18c6723a6753299cb914477d04a3bd218df8c775": { + "balance": "0x3635c9adc5dea00000" + }, + "18e113d8177c691a61be785852fa5bb47aeebdaf": { + "balance": "0x487a9a304539440000" + }, + "18e4ce47483b53040adbab35172c01ef64506e0c": { + "balance": "0x1e7e4171bf4d3a00000" + }, + "18e53243981aabc8767da10c73449f1391560eaa": { + "balance": "0x14542ba12a337c00000" + }, + "18fa8625c9dc843c78c7ab259ff87c9599e07f10": { + "balance": "0x3635c9adc5dea00000" + }, + "18fb09188f27f1038e654031924f628a2106703d": { + "balance": "0x6c6b935b8bbd400000" + }, + "18fccf62d2c3395453b7587b9e26f5cff9eb7482": { + "balance": "0x3635c9adc5dea00000" + }, + "191313525238a21c767457a91374f02200c55448": { + "balance": "0x64f5fdf494f780000" + }, + "1914f1eb95d1277e93b6e61b668b7d77f13a11a1": { + "balance": "0x34957444b840e80000" + }, + "1923cfc68b13ea7e2055803645c1e320156bd88d": { + "balance": "0x487a9a304539440000" + }, + "19336a236ded755872411f2e0491d83e3e00159e": { + "balance": "0x32f51edbaaa3300000" + }, + "1933e334c40f3acbad0c0b851158206924beca3a": { + "balance": "0x1995eaf01b896188000" + }, + "1937c5c515057553ccbd46d5866455ce66290284": { + "balance": "0xd3c21bcecceda1000000" + }, + "193ac65183651800e23580f8f0ead3bb597eb8a4": { + "balance": "0x2b62abcfb910a0000" + }, + "193d37ed347d1c2f4e35350d9a444bc57ca4db43": { + "balance": "0x340aad21b3b700000" + }, + "1940dc9364a852165f47414e27f5002445a4f143": { + "balance": "0x24c2dff6a3c7c480000" + }, + "1945fe377fe6d4b71e3e791f6f17db243c9b8b0f": { + "balance": "0x7679e7beb988360000" + }, + "194a6bb302b8aba7a5b579df93e0df1574967625": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "194cebb4929882bf3b4bf9864c2b1b0f62c283f9": { + "balance": "0x1ef861531f74aa0000" + }, + "194ff44aefc17bd20efd7a204c47d1620c86db5d": { + "balance": "0xa29909687f6aa40000" + }, + "194ffe78bbf5d20dd18a1f01da552e00b7b11db1": { + "balance": "0x17b7883c06916600000" + }, + "1953313e2ad746239cb2270f48af34d8bb9c4465": { + "balance": "0x6c6b935b8bbd400000" + }, + "19571a2b8f81c6bcf66ab3a10083295617150003": { + "balance": "0x1ab2cf7c9f87e20000" + }, + "19687daa39c368139b6e7be60dc1753a9f0cbea3": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "196c02210a450ab0b36370655f717aa87bd1c004": { + "balance": "0xe10ace157dbc00000" + }, + "196e85df7e732b4a8f0ed03623f4db9db0b8fa31": { + "balance": "0x125b92f5cef248000" + }, + "19732bf973055dbd91a4533adaa2149a91d38380": { + "balance": "0x6c6b935b8bbd400000" + }, + "197672fd39d6f246ce66a790d13aa922d70ea109": { + "balance": "0x3635c9adc5dea00000" + }, + "19798cbda715ea9a9b9d6aab942c55121e98bf91": { + "balance": "0x410d586a20a4c00000" + }, + "198bfcf1b07ae308fa2c02069ac9dafe7135fb47": { + "balance": "0x1158e460913d00000" + }, + "198ef1ec325a96cc354c7266a038be8b5c558f67": { + "balance": "0x80d1e4373e7f21da0000" + }, + "19918aa09e7d494e98ffa5db50350892f7156ac6": { + "balance": "0x21e19e0c9bab2400000" + }, + "19b36b0c87ea664ed80318dc77b688dde87d95a5": { + "balance": "0x699f499802303d0000" + }, + "19df9445a81c1b3d804aeaeb6f6e204e4236663f": { + "balance": "0x206d94e6a49878000" + }, + "19e5dea3370a2c746aae34a37c531f41da264e83": { + "balance": "0xad78ebc5ac6200000" + }, + "19e7f3eb7bf67f3599209ebe08b62ad3327f8cde": { + "balance": "0x6c6b935b8bbd400000" + }, + "19e94e620050aad766b9e1bad931238312d4bf49": { + "balance": "0x81e32df972abf00000" + }, + "19ecf2abf40c9e857b252fe1dbfd3d4c5d8f816e": { + "balance": "0x6c6b935b8bbd400000" + }, + "19f5caf4c40e6908813c0745b0aea9586d9dd931": { + "balance": "0x23fed9e1fa2b600000" + }, + "19f643e1a8fa04ae16006028138333a59a96de87": { + "balance": "0x1158e460913d00000" + }, + "19f99f2c0b46ce8906875dc9f90ae104dae35594": { + "balance": "0xf4575a5d4d162a0000" + }, + "19ff244fcfe3d4fa2f4fd99f87e55bb315b81eb6": { + "balance": "0xad78ebc5ac6200000" + }, + "1a04cec420ad432215246d77fe178d339ed0b595": { + "balance": "0x11216185c29f700000" + }, + "1a04d5389eb006f9ce880c30d15353f8d11c4b31": { + "balance": "0x39d84b2186dc9100000" + }, + "1a0841b92a7f7075569dc4627e6b76cab05ade91": { + "balance": "0x52663ccab1e1c00000" + }, + "1a085d43ec92414ea27b914fe767b6d46b1eef44": { + "balance": "0x641e8a13563d8f80000" + }, + "1a09fdc2c7a20e23574b97c69e93deba67d37220": { + "balance": "0x6c4fd1ee246e780000" + }, + "1a0a1ddfb031e5c8cc1d46cf05842d50fddc7130": { + "balance": "0x3635c9adc5dea00000" + }, + "1a1c9a26e0e02418a5cf687da75a275c622c9440": { + "balance": "0x10f0cf064dd59200000" + }, + "1a201b4327cea7f399046246a3c87e6e03a3cda8": { + "balance": "0x3635c9adc5dea00000" + }, + "1a2434cc774422d48d53d59c5d562cce8407c94b": { + "balance": "0x1a055690d9db80000" + }, + "1a25e1c5bc7e5f50ec16f8885f210ea1b938800e": { + "balance": "0xd8d726b7177a800000" + }, + "1a2694ec07cf5e4d68ba40f3e7a14c53f3038c6e": { + "balance": "0x3636cd06e2db3a8000" + }, + "1a3520453582c718a21c42375bc50773255253e1": { + "balance": "0x2ad373ce668e980000" + }, + "1a376e1b2d2f590769bb858d4575320d4e149970": { + "balance": "0x106712576391d180000" + }, + "1a3a330e4fcb69dbef5e6901783bf50fd1c15342": { + "balance": "0xe3aeb5737240a00000" + }, + "1a4ec6a0ae7f5a9427d23db9724c0d0cffb2ab2f": { + "balance": "0x9b41fbf9e0aec0000" + }, + "1a505e62a74e87e577473e4f3afa16bedd3cfa52": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "1a5ee533acbfb3a2d76d5b685277b796c56a052b": { + "balance": "0x6c6b935b8bbd400000" + }, + "1a644a50cbc2aee823bd2bf243e825be4d47df02": { + "balance": "0x56be03ca3e47d8000" + }, + "1a7044e2383f8708305b495bd1176b92e7ef043a": { + "balance": "0xad78ebc5ac6200000" + }, + "1a79c7f4039c67a39d7513884cdc0e2c34222490": { + "balance": "0x1158e460913d00000" + }, + "1a89899cbebdbb64bb26a195a63c08491fcd9eee": { + "balance": "0x6c6b935b8bbd400000" + }, + "1a8a5ce414de9cd172937e37f2d59cff71ce57a0": { + "balance": "0x21e19e0c9bab2400000" + }, + "1a95a8a8082e4652e4170df9271cb4bb4305f0b2": { + "balance": "0x2b5e3af16b1880000" + }, + "1a95c9b7546b5d1786c3858fb1236446bc0ca4ce": { + "balance": "0x6acb3df27e1f880000" + }, + "1a987e3f83de75a42f1bde7c997c19217b4a5f24": { + "balance": "0x6c6b935b8bbd400000" + }, + "1a9e702f385dcd105e8b9fa428eea21c57ff528a": { + "balance": "0x4be4e7267b6ae00000" + }, + "1aa1021f550af158c747668dd13b463160f95a40": { + "balance": "0x4fb0591b9b30380000" + }, + "1aa27699cada8dc3a76f7933aa66c71919040e88": { + "balance": "0x15af1d78b58c400000" + }, + "1aa40270d21e5cde86b6316d1ac3c533494b79ed": { + "balance": "0x1158e460913d00000" + }, + "1ab53a11bcc63ddfaa40a02b9e186496cdbb8aff": { + "balance": "0x6c3f2aac800c000000" + }, + "1abc4e253b080aeb437984ab05bca0979aa43e1c": { + "balance": "0x3635c9adc5dea00000" + }, + "1ac089c3bc4d82f06a20051a9d732dc0e734cb61": { + "balance": "0x25f69d63a6ce0e0000" + }, + "1ad4563ea5786be1159935abb0f1d5879c3e7372": { + "balance": "0x14542ba12a337c00000" + }, + "1ad72d20a76e7fcc6b764058f48d417d496fa6cd": { + "balance": "0x6c6b935b8bbd400000" + }, + "1adaf4abfa867db17f99af6abebf707a3cf55df6": { + "balance": "0x14542ba12a337c00000" + }, + "1af60343360e0b2d75255210375720df21db5c7d": { + "balance": "0x3635c9adc5dea00000" + }, + "1afcc585896cd0ede129ee2de5c19ea811540b64": { + "balance": "0xaf2aba0c8e5bef8000" + }, + "1b05ea6a6ac8af7cb6a8b911a8cce8fe1a2acfc8": { + "balance": "0x6c6b935b8bbd400000" + }, + "1b0b31afff4b6df3653a94d7c87978ae35f34aae": { + "balance": "0x133910453fa9840000" + }, + "1b0d076817e8d68ee2df4e1da1c1142d198c4435": { + "balance": "0x54069233bf7f780000" + }, + "1b130d6fa51d5c48ec8d1d52dc8a227be8735c8a": { + "balance": "0x6c6b935b8bbd400000" + }, + "1b23cb8663554871fbbe0d9e60397efb6faedc3e": { + "balance": "0xad78ebc5ac6200000" + }, + "1b2639588b55c344b023e8de5fd4087b1f040361": { + "balance": "0x5150ae84a8cdf00000" + }, + "1b3920d001c43e72b24e7ca46f0fd6e0c20a5ff2": { + "balance": "0x6c6b935b8bbd400000" + }, + "1b3cb81e51011b549d78bf720b0d924ac763a7c2": { + "balance": "0x7695a92c20d6fe000000" + }, + "1b43232ccd4880d6f46fa751a96cd82473315841": { + "balance": "0x4563918244f400000" + }, + "1b4bbcb18165211b265b280716cb3f1f212176e8": { + "balance": "0x199ad37d03d0608000" + }, + "1b4d07acd38183a61bb2783d2b7b178dd502ac8d": { + "balance": "0xad78ebc5ac6200000" + }, + "1b636b7a496f044d7359596e353a104616436f6b": { + "balance": "0x1388ea95c33f1d0000" + }, + "1b6495891240e64e594493c2662171db5e30ce13": { + "balance": "0x95887d695ed580000" + }, + "1b6610fb68bad6ed1cfaa0bbe33a24eb2e96fafb": { + "balance": "0x83d6c7aab63600000" + }, + "1b799033ef6dc7127822f74542bb22dbfc09a308": { + "balance": "0x56bc75e2d63100000" + }, + "1b7ed974b6e234ce81247498429a5bd4a0a2d139": { + "balance": "0x6c6b935b8bbd400000" + }, + "1b826fb3c012b0d159e294ba5b8a499ff3c0e03c": { + "balance": "0x6c6b935b8bbd400000" + }, + "1b8aa0160cd79f005f88510a714913d70ad3be33": { + "balance": "0xaeffb83079ad00000" + }, + "1b8bd6d2eca20185a78e7d98e8e185678dac4830": { + "balance": "0x3894f0e6f9b9f700000" + }, + "1b9b2dc2960e4cb9408f7405827c9b59071612fd": { + "balance": "0x3635c9adc5dea00000" + }, + "1ba9228d388727f389150ea03b73c82de8eb2e09": { + "balance": "0x18974fbe177c9280000" + }, + "1ba9f7997e5387b6b2aa0135ac2452fe36b4c20d": { + "balance": "0x2e141ea081ca080000" + }, + "1bba03ff6b4ad5bf18184acb21b188a399e9eb4a": { + "balance": "0x61093d7c2c6d380000" + }, + "1bbc199e586790be87afedc849c04726745c5d7b": { + "balance": "0xd8d726b7177a800000" + }, + "1bbc60bcc80e5cdc35c5416a1f0a40a83dae867b": { + "balance": "0x6c6b935b8bbd400000" + }, + "1bc44c8761231ba1f11f5faa40fa669a013e12ce": { + "balance": "0xb0952c45aeaad0000" + }, + "1bcf3441a866bdbe963009ce33c81cbb0261b02c": { + "balance": "0x9ddc1e3b901180000" + }, + "1bd28cd5c78aee51357c95c1ef9235e7c18bc854": { + "balance": "0x6c6b935b8bbd400000" + }, + "1bd8ebaa7674bb18e19198db244f570313075f43": { + "balance": "0x821ab0d4414980000" + }, + "1bd909ac0d4a1102ec98dcf2cca96a0adcd7a951": { + "balance": "0x11651ac3e7a758000" + }, + "1be3542c3613687465f15a70aeeb81662b65cca8": { + "balance": "0x6c6b935b8bbd400000" + }, + "1bea4df5122fafdeb3607eddda1ea4ffdb9abf2a": { + "balance": "0x12c1b6eed03d280000" + }, + "1bec4d02ce85fc48feb62489841d85b170586a9b": { + "balance": "0x821ab0d44149800000" + }, + "1bf974d9904f45ce81a845e11ef4cbcf27af719e": { + "balance": "0x56bc75e2d63100000" + }, + "1c045649cd53dc23541f8ed4d341812808d5dd9c": { + "balance": "0x17b7883c06916600000" + }, + "1c128bd6cda5fca27575e4b43b3253c8c4172afe": { + "balance": "0x6c6b935b8bbd400000" + }, + "1c13d38637b9a47ce79d37a86f50fb409c060728": { + "balance": "0x487a9a304539440000" + }, + "1c2010bd662df417f2a271879afb13ef4c88a3ae": { + "balance": "0xd8d726b7177a800000" + }, + "1c257ad4a55105ea3b58ed374b198da266c85f63": { + "balance": "0x21e19e0c9bab2400000" + }, + "1c2e3607e127caca0fbd5c5948adad7dd830b285": { + "balance": "0x42bf06b78ed3b500000" + }, + "1c356cfdb95febb714633b28d5c132dd84a9b436": { + "balance": "0x15af1d78b58c40000" + }, + "1c35aab688a0cd8ef82e76541ba7ac39527f743b": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "1c3ef05dae9dcbd489f3024408669de244c52a02": { + "balance": "0x43c33c1937564800000" + }, + "1c4af0e863d2656c8635bc6ffec8dd9928908cb5": { + "balance": "0x6c6b935b8bbd400000" + }, + "1c601993789207f965bb865cbb4cd657cce76fc0": { + "balance": "0x5541a7037503f0000" + }, + "1c63fa9e2cbbf23c49fcdef1cbabfe6e0d1e14c1": { + "balance": "0x3635c9adc5dea00000" + }, + "1c6702b3b05a5114bdbcaeca25531aeeb34835f4": { + "balance": "0x58556bead45dcae0000" + }, + "1c68a66138783a63c98cc675a9ec77af4598d35e": { + "balance": "0x2b746f48f0f120000" + }, + "1c73d00b6e25d8eb9c1ff4ad827b6b9e9cf6d20c": { + "balance": "0xad78ebc5ac6200000" + }, + "1c751e7f24df9d94a637a5dedeffc58277b5db19": { + "balance": "0xae8e7a0bb575d00000" + }, + "1c7cb2fe6bf3e09cbcdc187af38fa8f5053a70b6": { + "balance": "0x21c84f742d0cead8000" + }, + "1c89060f987c518fa079ec2c0a5ebfa30f5d20f7": { + "balance": "0x80bfbefcb5f0bc00000" + }, + "1c94d636e684eb155895ce6db4a2588fba1d001b": { + "balance": "0x6c6b935b8bbd400000" + }, + "1c99fe9bb6c6d1066d912099547fd1f4809eacd9": { + "balance": "0x6c6b935b8bbd400000" + }, + "1cb450920078aab2317c7db3b38af7dd298b2d41": { + "balance": "0x126e72a69a50d00000" + }, + "1cb5f33b4d488936d13e3161da33a1da7df70d1b": { + "balance": "0xad78ebc5ac6200000" + }, + "1cb6b2d7cfc559b7f41e6f56ab95c7c958cd0e4c": { + "balance": "0x487a9a304539440000" + }, + "1cc1d3c14f0fb8640e36724dc43229d2ea7a1e48": { + "balance": "0x5c283d410394100000" + }, + "1cc90876004109cd79a3dea866cb840ac364ba1b": { + "balance": "0x6c6b935b8bbd400000" + }, + "1cd1f0a314cbb200de0a0cb1ef97e920709d97c2": { + "balance": "0x6c6b935b8bbd400000" + }, + "1cda411bd5163baeca1e558563601ce720e24ee1": { + "balance": "0xfc936392801c0000" + }, + "1ce81d31a7923022e125bf48a3e03693b98dc9dd": { + "balance": "0x6c6b935b8bbd400000" + }, + "1cebf0985d7f680aaa915c44cc62edb49eab269e": { + "balance": "0x3635c9adc5dea00000" + }, + "1ced6715f862b1ff86058201fcce5082b36e62b2": { + "balance": "0x16a5e60bee273b10000" + }, + "1cf04cb14380059efd3f238b65d5beb86afa14d8": { + "balance": "0x1158e460913d00000" + }, + "1cf105ab23023b554c583e86d7921179ee83169f": { + "balance": "0x6acb3df27e1f880000" + }, + "1cf2eb7a8ccac2adeaef0ee87347d535d3b94058": { + "balance": "0x6c6b935b8bbd400000" + }, + "1cfcf7517f0c08459720942b647ad192aa9c8828": { + "balance": "0x2b5e3af16b18800000" + }, + "1d09ad2412691cc581c1ab36b6f9434cd4f08b54": { + "balance": "0x17b7883c06916600000" + }, + "1d157c5876c5cad553c912caf6ce2d5277e05c73": { + "balance": "0x6c6b935b8bbd400000" + }, + "1d2615f8b6ca5012b663bdd094b0c5137c778ddf": { + "balance": "0x21e19e0c9bab2400000" + }, + "1d29c7aab42b2048d2b25225d498dba67a03fbb2": { + "balance": "0xad78ebc5ac6200000" + }, + "1d341fa5a3a1bd051f7db807b6db2fc7ba4f9b45": { + "balance": "0xfc936392801c0000" + }, + "1d344e962567cb27e44db9f2fac7b68df1c1e6f7": { + "balance": "0x692ae8897081d00000" + }, + "1d36683063b7e9eb99462dabd569bddce71686f2": { + "balance": "0x3635c9adc5dea00000" + }, + "1d37616b793f94911838ac8e19ee9449df921ec4": { + "balance": "0x5150ae84a8cdf00000" + }, + "1d395b30adda1cf21f091a4f4a7b753371189441": { + "balance": "0x152d02c7e14af6800000" + }, + "1d45586eb803ca2190650bf748a2b174312bb507": { + "balance": "0x4be4e7267b6ae00000" + }, + "1d572edd2d87ca271a6714c15a3b37761dcca005": { + "balance": "0x6ebd52a8ddd390000" + }, + "1d633097a85225a1ff4321b12988fdd55c2b3844": { + "balance": "0xd8d726b7177a800000" + }, + "1d69c83d28ff0474ceebeacb3ad227a144ece7a3": { + "balance": "0x128cc03920a62d28000" + }, + "1d96bcd58457bbf1d3c2a46ffaf16dbf7d836859": { + "balance": "0x9497209d8467e8000" + }, + "1d9e6aaf8019a05f230e5def05af5d889bd4d0f2": { + "balance": "0x73f75d1a085ba0000" + }, + "1dab172effa6fbee534c94b17e794edac54f55f8": { + "balance": "0x6acb3df27e1f880000" + }, + "1db9ac9a9eaeec0a523757050c71f47278c72d50": { + "balance": "0x487a9a304539440000" + }, + "1dbe8e1c2b8a009f85f1ad3ce80d2e05350ee39c": { + "balance": "0x7570d6e9ebbe40000" + }, + "1dc7f7dad85df53f1271152403f4e1e4fdb3afa0": { + "balance": "0xad78ebc5ac6200000" + }, + "1dcebcb7656df5dcaa3368a055d22f9ed6cdd940": { + "balance": "0x1b181e4bf2343c0000" + }, + "1dd77441844afe9cc18f15d8c77bccfb655ee034": { + "balance": "0x106eb45579944880000" + }, + "1ddefefd35ab8f658b2471e54790bc17af98dea4": { + "balance": "0x3635c9adc5dea00000" + }, + "1deec01abe5c0d952de9106c3dc30639d85005d6": { + "balance": "0x6c6b935b8bbd400000" + }, + "1df6911672679bb0ef3509038c0c27e394fdfe30": { + "balance": "0x1d460162f516f00000" + }, + "1dfaee077212f1beaf0e6f2f1840537ae154ad86": { + "balance": "0x3635c9adc5dea00000" + }, + "1e060dc6c5f1cb8cc7e1452e02ee167508b56542": { + "balance": "0x2b14f02c864c77e0000" + }, + "1e13ec51142cebb7a26083412c3ce35144ba56a1": { + "balance": "0x10f0cf064dd59200000" + }, + "1e1a4828119be309bd88236e4d482b504dc55711": { + "balance": "0xa030dcebbd2f4c0000" + }, + "1e1aed85b86c6562cb8fa1eb6f8f3bc9dcae6e79": { + "balance": "0xf4d2dd84259b240000" + }, + "1e1c6351776ac31091397ecf16002d979a1b2d51": { + "balance": "0x4be4e7267b6ae00000" + }, + "1e1d7a5f2468b94ea826982dbf2125793c6e4a5a": { + "balance": "0x3634f48417401a0000" + }, + "1e210e7047886daa52aaf70f4b991dac68e3025e": { + "balance": "0xad78ebc5ac6200000" + }, + "1e2bf4ba8e5ef18d37de6d6ad636c4cae489d0cc": { + "balance": "0x6c6b935b8bbd400000" + }, + "1e2fe4e4a77d141ff49a0c7fbc95b0a2b283eeeb": { + "balance": "0x6c6b935b8bbd400000" + }, + "1e33d1c2fb5e084f2f1d54bc5267727fec3f985d": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "1e381adcf801a3bf9fd7bfac9ccc2b8482ad5e66": { + "balance": "0x208972c0010d740000" + }, + "1e3badb1b6e1380e27039c576ae6222e963a5b53": { + "balance": "0x43c33c1937564800000" + }, + "1e484d0621f0f5331b35d5408d9aae4eb1acf21e": { + "balance": "0x1158e460913d00000" + }, + "1e5800227d4dcf75e30f5595c5bed3f72e341e3b": { + "balance": "0xd75dace73417e0000" + }, + "1e596a81b357c6f24970cc313df6dbdaabd0d09e": { + "balance": "0x6c6b935b8bbd400000" + }, + "1e6915ebd9a19c81b692ad99b1218a592c1ac7b1": { + "balance": "0xd8d726b7177a800000" + }, + "1e6e0153fc161bc05e656bbb144c7187bf4fe84d": { + "balance": "0x6c6b935b8bbd400000" + }, + "1e706655e284dcf0bb37fe075d613a18dc12ff4a": { + "balance": "0xed43bf1eee82ac0000" + }, + "1e783e522ab7df0acaac9eeed3593039e5ac7579": { + "balance": "0x2b1446dd6aefe41c0000" + }, + "1e7b5e4d1f572becf2c00fc90cb4767b4a6e33d4": { + "balance": "0x61fc6107593e10000" + }, + "1e8e689b02917cdc29245d0c9c68b094b41a9ed6": { + "balance": "0x6c6b935b8bbd400000" + }, + "1ea334b5750807ea74aac5ab8694ec5f28aa77cf": { + "balance": "0x1ab2cf7c9f87e20000" + }, + "1ea4715504c6af107b0194f4f7b1cb6fcccd6f4b": { + "balance": "0x20043197e0b0270000" + }, + "1ea492bce1ad107e337f4bd4a7ac9a7babcccdab": { + "balance": "0x56bc75e2d63100000" + }, + "1ea6bf2f15ae9c1dbc64daa7f8ea4d0d81aad3eb": { + "balance": "0xe3aeb5737240a00000" + }, + "1eb4bf73156a82a0a6822080c6edf49c469af8b9": { + "balance": "0x678a932062e4180000" + }, + "1ebacb7844fdc322f805904fbf1962802db1537c": { + "balance": "0x21e19e0c9bab2400000" + }, + "1ec4ec4b77bf19d091a868e6f49154180541f90e": { + "balance": "0x6c6b935b8bbd400000" + }, + "1ed06ee51662a86c634588fb62dc43c8f27e7c17": { + "balance": "0xad78ebc5ac6200000" + }, + "1ed8bb3f06778b039e9961d81cb71a73e6787c8e": { + "balance": "0x6c6b935b8bbd400000" + }, + "1eda084e796500ba14c5121c0d90846f66e4be62": { + "balance": "0x1cfdd7468216e80000" + }, + "1eee6cbee4fe96ad615a9cf5857a647940df8c78": { + "balance": "0x10d3aa536e2940000" + }, + "1ef2dcbfe0a500411d956eb8c8939c3d6cfe669d": { + "balance": "0x2a1129d09367200000" + }, + "1ef5c9c73650cfbbde5c885531d427c7c3fe5544": { + "balance": "0x14542ba12a337c00000" + }, + "1f0412bfedcd964e837d092c71a5fcbaf30126e2": { + "balance": "0x1158e460913d00000" + }, + "1f174f40a0447234e66653914d75bc003e5690dc": { + "balance": "0x8ac7230489e800000" + }, + "1f2186ded23e0cf9521694e4e164593e690a9685": { + "balance": "0x1043561a8829300000" + }, + "1f2afc0aed11bfc71e77a907657b36ea76e3fb99": { + "balance": "0xd8d726b7177a800000" + }, + "1f3959fc291110e88232c36b7667fc78a379613f": { + "balance": "0xfc936392801c0000" + }, + "1f3da68fe87eaf43a829ab6d7ec5a6e009b204fb": { + "balance": "0x1e1601758c2c7e0000" + }, + "1f49b86d0d3945590698a6aaf1673c37755ca80d": { + "balance": "0x25f273933db5700000" + }, + "1f5f3b34bd134b2781afe5a0424ac5846cdefd11": { + "balance": "0x55de6a779bbac0000" + }, + "1f6f0030349752061c96072bc3d6eb3549208d6b": { + "balance": "0x14b8de1eb88db8000" + }, + "1f7d8e86d6eeb02545aad90e91327bd369d7d2f3": { + "balance": "0x1158e460913d00000" + }, + "1f8116bd0af5570eaf0c56c49c7ab5e37a580458": { + "balance": "0x6c6b935b8bbd400000" + }, + "1f88f8a1338fc7c10976abcd3fb8d38554b5ec9c": { + "balance": "0xb9f65d00f63c0000" + }, + "1f9c3268458da301a2be5ab08257f77bb5a98aa4": { + "balance": "0xad78ebc5ac6200000" + }, + "1fa2319fed8c2d462adf2e17feec6a6f30516e95": { + "balance": "0x6cae30621d4720000" + }, + "1fb463a0389983df7d593f7bdd6d78497fed8879": { + "balance": "0x1158e460913d00000" + }, + "1fb7bd310d95f2a6d9baaf8a8a430a9a04453a8b": { + "balance": "0xa2a15d09519be00000" + }, + "1fcc7ce6a8485895a3199e16481f72e1f762defe": { + "balance": "0x3635c9adc5dea00000" + }, + "1fcfd1d57f872290560cb62d600e1defbefccc1c": { + "balance": "0x50c5e761a444080000" + }, + "1fd296be03ad737c92f9c6869e8d80a71c5714aa": { + "balance": "0xb98bc829a6f90000" + }, + "1fddd85fc98be9c4045961f40f93805ecc4549e5": { + "balance": "0x8e3f50b173c100000" + }, + "2001bef77b66f51e1599b02fb110194a0099b78d": { + "balance": "0x6c6b935b8bbd400000" + }, + "200264a09f8c68e3e6629795280f56254f8640d0": { + "balance": "0x1158e460913d00000" + }, + "2003717907a72560f4307f1beecc5436f43d21e7": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "200dfc0b71e359b2b465440a36a6cdc352773007": { + "balance": "0x5150ae84a8cdf00000" + }, + "20134cbff88bfadc466b52eceaa79857891d831e": { + "balance": "0x3635c9adc5dea00000" + }, + "2014261f01089f53795630ba9dd24f9a34c2d942": { + "balance": "0x487a9a304539440000" + }, + "2016895df32c8ed5478269468423aea7b7fbce50": { + "balance": "0x1158e460913d00000" + }, + "20181c4b41f6f972b66958215f19f570c15ddff1": { + "balance": "0x56bc75e2d631000000" + }, + "201864a8f784c2277b0b7c9ee734f7b377eab648": { + "balance": "0xf2281400d1d5ec0000" + }, + "2020b81ae53926ace9f7d7415a050c031d585f20": { + "balance": "0x127f19e83eb3480000" + }, + "203c6283f20df7bc86542fdfb4e763ecdbbbeef5": { + "balance": "0x54b40b1f852bda00000" + }, + "204ac98867a7c9c7ed711cb82f28a878caf69b48": { + "balance": "0x14542ba12a337c00000" + }, + "205237c4be146fba99478f3a7dad17b09138da95": { + "balance": "0x6c6b935b8bbd400000" + }, + "2053ac97548a0c4e8b80bc72590cd6a098fe7516": { + "balance": "0xa2325753b460c0000" + }, + "205f5166f12440d85762c967d3ae86184f8f4d98": { + "balance": "0x177224aa844c720000" + }, + "205fc843e19a4913d1881eb69b69c0fa3be5c50b": { + "balance": "0x20dd68aaf3289100000" + }, + "206482ee6f138a778fe1ad62b180ce856fbb23e6": { + "balance": "0x6c6b935b8bbd400000" + }, + "2066774d822793ff25f1760909479cf62491bf88": { + "balance": "0xbae3ac685cb72e00000" + }, + "206d55d5792a514ec108e090599f2a065e501185": { + "balance": "0xadf30ba70c8970000" + }, + "20707e425d2a11d2c89f391b2b809f556c592421": { + "balance": "0x6c6b935b8bbd400000" + }, + "207ef80b5d60b6fbffc51f3a64b8c72036a5abbd": { + "balance": "0x16a6502f15a1e540000" + }, + "20824ba1dbebbef9846ef3d0f6c1b017e6912ec4": { + "balance": "0x184b26e4daf1d350000" + }, + "2084fce505d97bebf1ad8c5ff6826fc645371fb2": { + "balance": "0x1a055690d9db80000" + }, + "208c45732c0a378f17ac8324926d459ba8b658b4": { + "balance": "0xa030dcebbd2f4c0000" + }, + "209377b6ad3fe101c9685b3576545c6b1684e73c": { + "balance": "0x62a992e53a0af00000" + }, + "209e8e29d33beae8fb6baa783d133e1d9ec1bc0b": { + "balance": "0x2d43f3ebfafb2c0000" + }, + "20a15256d50ce058bf0eac43aa533aa16ec9b380": { + "balance": "0x1158e460913d00000" + }, + "20a29c5079e26b3f18318bb2e50e8e8b346e5be8": { + "balance": "0x1b1ab319f5ec750000" + }, + "20a81680e465f88790f0074f60b4f35f5d1e6aa5": { + "balance": "0x456180278f0c778000" + }, + "20b9a9e6bd8880d9994ae00dd0b9282a0beab816": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "20c284ba10a20830fc3d699ec97d2dfa27e1b95e": { + "balance": "0x6c6b935b8bbd400000" + }, + "20d1417f99c569e3beb095856530fe12d0fceaaa": { + "balance": "0x4015f94b1183698000" + }, + "20dd8fcbb46ea46fe381a68b8ca0ea5be21fe9a5": { + "balance": "0x6c6b935b8bbd400000" + }, + "20ff3ede8cadb5c37b48cb14580fb65e23090a7b": { + "balance": "0x8e4d316827686400000" + }, + "2100381d60a5b54adc09d19683a8f6d5bb4bfbcb": { + "balance": "0x21e19e0c9bab2400000" + }, + "2118c116ab0cdf6fd11d54a4309307b477c3fc0f": { + "balance": "0x21e19e0c9bab2400000" + }, + "211b29cefc79ae976744fdebcebd3cbb32c51303": { + "balance": "0x2f6f10780d22cc00000" + }, + "21206ce22ea480e85940d31314e0d64f4e4d3a04": { + "balance": "0x3635c9adc5dea00000" + }, + "2132c0516a2e17174ac547c43b7b0020d1eb4c59": { + "balance": "0x35659ef93f0fc40000" + }, + "21408b4d7a2c0e6eca4143f2cacdbbccba121bd8": { + "balance": "0x43c33c1937564800000" + }, + "214b743955a512de6e0d886a8cbd0282bee6d2a2": { + "balance": "0x6c6b935b8bbd400000" + }, + "214c89c5bd8e7d22bc574bb35e48950211c6f776": { + "balance": "0x10654f258fd358000" + }, + "21546914dfd3af2add41b0ff3e83ffda7414e1e0": { + "balance": "0x14395e7385a502e0000" + }, + "21582e99e502cbf3d3c23bdffb76e901ac6d56b2": { + "balance": "0x56bc75e2d63100000" + }, + "2159240813a73095a7ebf7c3b3743e8028ae5f09": { + "balance": "0x6c6b935b8bbd400000" + }, + "2160b4c02cac0a81de9108de434590a8bfe68735": { + "balance": "0x6acb3df27e1f880000" + }, + "216e41864ef98f060da08ecae19ad1166a17d036": { + "balance": "0x1369fb96128ac480000" + }, + "21846f2fdf5a41ed8df36e5ed8544df75988ece3": { + "balance": "0x6c6acc67d7b1d40000" + }, + "21a6db6527467bc6dad54bc16e9fe2953b6794ed": { + "balance": "0x2f6f10780d22cc00000" + }, + "21a6feb6ab11c766fdd977f8df4121155f47a1c0": { + "balance": "0x319cf38f100580000" + }, + "21b182f2da2b384493cf5f35f83d9d1ee14f2a21": { + "balance": "0x6c6b935b8bbd400000" + }, + "21bfe1b45cacde6274fd8608d9a178bf3eeb6edc": { + "balance": "0x6cee06ddbe15ec0000" + }, + "21c07380484f6cbc8724ad32bc864c3b5ad500b7": { + "balance": "0x3635c9adc5dea00000" + }, + "21c3a8bba267c8cca27b1a9afabad86f607af708": { + "balance": "0x1e4a36c49d998300000" + }, + "21ce6d5b9018cec04ad6967944bea39e8030b6b8": { + "balance": "0x1158e460913d00000" + }, + "21d02705f3f64905d80ed9147913ea8c7307d695": { + "balance": "0x49edb1c09887360000" + }, + "21d13f0c4024e967d9470791b50f22de3afecf1b": { + "balance": "0xf15ad35e2e31e50000" + }, + "21dbdb817a0d8404c6bdd61504374e9c43c9210e": { + "balance": "0x21e18b9e9ab45e48000" + }, + "21df1ec24b4e4bfe79b0c095cebae198f291fbd1": { + "balance": "0x43c33c1937564800000" + }, + "21df2dcdaf74b2bf803404dd4de6a35eabec1bbd": { + "balance": "0x177224aa844c7200000" + }, + "21e219c89ca8ac14ae4cba6130eeb77d9e6d3962": { + "balance": "0x2acd9faaa038ee0000" + }, + "21e5d2bae995ccfd08a5c16bb524e1f630448f82": { + "balance": "0x97c9ce4cf6d5c00000" + }, + "21e5d77320304c201c1e53b261a123d0a1063e81": { + "balance": "0x4b6fa9d33dd460000" + }, + "21eae6feffa9fbf4cd874f4739ace530ccbe5937": { + "balance": "0x10f0cf064dd59200000" + }, + "21ecb2dfa65779c7592d041cd2105a81f4fd4e46": { + "balance": "0x3635c9adc5dea00000" + }, + "21efbca09b3580b98e73f5b2f7f4dc0bf02c529c": { + "balance": "0x6c6b935b8bbd400000" + }, + "21fd0bade5f4ef7474d058b7f3d854cb1300524e": { + "balance": "0x1158e460913d00000" + }, + "21fd47c5256012198fa5abf131c06d6aa1965f75": { + "balance": "0x1ab2cf7c9f87e200000" + }, + "21fd6c5d97f9c600b76821ddd4e776350fce2be0": { + "balance": "0x6c6ad382d4fb610000" + }, + "220dc68df019b6b0ccbffb784b5a5ab4b15d4060": { + "balance": "0xd5967be4fc3f100000" + }, + "220e2b92c0f6c902b513d9f1e6fab6a8b0def3d7": { + "balance": "0x2b5e3af16b18800000" + }, + "22561c5931143536309c17e832587b625c390b9a": { + "balance": "0xd8d726b7177a800000" + }, + "2257fca16a6e5c2a647c3c29f36ce229ab93b17e": { + "balance": "0xd8d726b7177a800000" + }, + "225d35faedb391c7bc2db7fa9071160405996d00": { + "balance": "0x91854fc1862630000" + }, + "225f9eb3fb6ff3e9e3c8447e14a66e8d4f3779f6": { + "balance": "0x6c6b935b8bbd400000" + }, + "2272186ef27dcbe2f5fc373050fdae7f2ace2316": { + "balance": "0x368c8623a8b4d100000" + }, + "2273bad7bc4e487622d175ef7a66988b6a93c4ee": { + "balance": "0x1158e460913d00000" + }, + "2276264bec8526c0c0f270677abaf4f0e441e167": { + "balance": "0x3635c9adc5dea00000" + }, + "228242f8336eecd8242e1f000f41937e71dffbbf": { + "balance": "0x10f0cf064dd59200000" + }, + "22842ab830da509913f81dd1f04f10af9edd1c55": { + "balance": "0x6c6b935b8bbd400000" + }, + "22944fbca9b57963084eb84df7c85fb9bcdfb856": { + "balance": "0xfc118fef90ba388000" + }, + "229cc4711b62755ea296445ac3b77fc633821cf2": { + "balance": "0x223e8b05219328000" + }, + "229e430de2b74f442651ddcdb70176bc054cad54": { + "balance": "0xbbf981bc4aaa8000" + }, + "229f4f1a2a4f540774505b4707a81de44410255b": { + "balance": "0x6c6b935b8bbd400000" + }, + "229ff80bf5708009a9f739e0f8b560914016d5a6": { + "balance": "0x1211ecb56d13488000" + }, + "22a25812ab56dcc423175ed1d8adacce33cd1810": { + "balance": "0x6449e84e47a8a80000" + }, + "22b96ab2cad55db100b53001f9e4db378104c807": { + "balance": "0x21e19e0c9bab2400000" + }, + "22bdffc240a88ff7431af3bff50e14da37d5183e": { + "balance": "0x3635c9adc5dea00000" + }, + "22ce349159eeb144ef06ff2636588aef79f62832": { + "balance": "0xa31062beeed700000" + }, + "22db559f2c3c1475a2e6ffe83a5979599196a7fa": { + "balance": "0x3635c9adc5dea00000" + }, + "22e15158b5ee3e86eb0332e3e6a9ac6cd9b55ecd": { + "balance": "0x8ac7230489e800000" + }, + "22e2488e2da26a49ae84c01bd54b21f2947891c6": { + "balance": "0x5dc892aa1131c80000" + }, + "22e512149a18d369b73c71efa43e86c9edabaf1d": { + "balance": "0x4ee02e6714615c0000" + }, + "22eb7db0ba56b0f8b816ccb206e615d929185b0d": { + "balance": "0x45d29737e22f20000" + }, + "22eed327f8eb1d1338a3cb7b0f8a4baa5907cd95": { + "balance": "0x1455d5f4877088000" + }, + "22f004df8de9e6ebf523ccace457accb26f97281": { + "balance": "0x21e19e0c9bab2400000" + }, + "22f2dcff5ad78c3eb6850b5cb951127b659522e6": { + "balance": "0xbe202d6a0eda0000" + }, + "22f3c779dd79023ea92a78b65c1a1780f62d5c4a": { + "balance": "0x6acb3df27e1f880000" + }, + "22fe884d9037291b4d52e6285ae68dea0be9ffb5": { + "balance": "0x6c6b935b8bbd400000" + }, + "2306df931a940d58c01665fa4d0800802c02edfe": { + "balance": "0x3635c9adc5dea00000" + }, + "2309d34091445b3232590bd70f4f10025b2c9509": { + "balance": "0x21e19e0c9bab2400000" + }, + "23120046f6832102a752a76656691c863e17e59c": { + "balance": "0x11e0e4f8a50bd40000" + }, + "231a15acc199c89fa9cb22441cc70330bdcce617": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "231d94155dbcfe2a93a319b6171f63b20bd2b6fa": { + "balance": "0xcf147bb906e2f80000" + }, + "232832cd5977e00a4c30d0163f2e24f088a6cb09": { + "balance": "0xa2a15d09519be00000" + }, + "232c6d03b5b6e6711efff190e49c28eef36c82b0": { + "balance": "0x487a9a304539440000" + }, + "232cb1cd49993c144a3f88b3611e233569a86bd6": { + "balance": "0x34c606c42d0ac600000" + }, + "232ce782506225fd9860a2edc14a7a3047736da2": { + "balance": "0x1158e460913d00000" + }, + "232f525d55859b7d4e608d20487faadb00293135": { + "balance": "0xd8d726b7177a800000" + }, + "2334c590c7a48769103045c5b6534c8a3469f44a": { + "balance": "0x3b199073df72dc00000" + }, + "23376ecabf746ce53321cf42c86649b92b67b2ff": { + "balance": "0x6c6b935b8bbd400000" + }, + "23378f42926d0184b793b0c827a6dd3e3d334fcd": { + "balance": "0x30927f74c9de00000" + }, + "233842b1d0692fd11140cf5acda4bf9630bae5f8": { + "balance": "0x6c6b935b8bbd400000" + }, + "2339e9492870afea2537f389ac2f838302a33c06": { + "balance": "0x6c6b935b8bbd400000" + }, + "233bdddd5da94852f4ade8d212885682d9076bc6": { + "balance": "0xd8d726b7177a800000" + }, + "234f46bab73fe45d31bf87f0a1e0466199f2ebac": { + "balance": "0x1a4aba225c20740000" + }, + "23551f56975fe92b31fa469c49ea66ee6662f41e": { + "balance": "0x678a932062e4180000" + }, + "23569542c97d566018c907acfcf391d14067e87e": { + "balance": "0x6c6b935b8bbd400000" + }, + "235fa66c025ef5540070ebcf0d372d8177c467ab": { + "balance": "0x7129e1cdf373ee00000" + }, + "2372c4c1c9939f7aaf6cfac04090f00474840a09": { + "balance": "0x21e19e0c9bab2400000" + }, + "23730c357a91026e44b1d0e2fc2a51d071d8d77b": { + "balance": "0xd8d726b7177a800000" + }, + "2376ada90333b1d181084c97e645e810aa5b76f1": { + "balance": "0x28a857425466f80000" + }, + "2378fd4382511e968ed192106737d324f454b535": { + "balance": "0x3635c9adc5dea00000" + }, + "2382a9d48ec83ea3652890fd0ee79c907b5b2dc1": { + "balance": "0x73f75d1a085ba0000" + }, + "2383c222e67e969190d3219ef14da37850e26c55": { + "balance": "0x6c6b935b8bbd400000" + }, + "238a6b7635252f5244486c0af0a73a207385e039": { + "balance": "0x4a4491bd6dcd280000" + }, + "239a733e6b855ac592d663156186a8a174d2449e": { + "balance": "0x58be3758b241f60000" + }, + "23ab09e73f87aa0f3be0139df0c8eb6be5634f95": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "23abd9e93e7957e5b636be6579051c15e5ce0b0e": { + "balance": "0x3a3c8f7cbf42c380000" + }, + "23b1c4917fbd93ee3d48389306957384a5496cbf": { + "balance": "0xd8d8583fa2d52f0000" + }, + "23ba3864da583dab56f420873c37679690e02f00": { + "balance": "0x21342520d5fec200000" + }, + "23c55aeb5739876f0ac8d7ebea13be729685f000": { + "balance": "0x487a9a304539440000" + }, + "23c99ba087448e19c9701df66e0cab52368331fa": { + "balance": "0x6c6b935b8bbd400000" + }, + "23ccc3c6acd85c2e460c4ffdd82bc75dc849ea14": { + "balance": "0xd8d726b7177a800000" + }, + "23cd2598a20e149ead2ad69379576ecedb60e38e": { + "balance": "0x6c6b935b8bbd400000" + }, + "23df8f48ee009256ea797e1fa369beebcf6bc663": { + "balance": "0x7cd3fac26d19818000" + }, + "23e2c6a8be8e0acfa5c4df5e36058bb7cbac5a81": { + "balance": "0x6c6b935b8bbd400000" + }, + "23ea669e3564819a83b0c26c00a16d9e826f6c46": { + "balance": "0x4d8d6ca968ca130000" + }, + "23eb6fd85671a9063ab7678ebe265a20f61a02b3": { + "balance": "0x6c6b935b8bbd400000" + }, + "23f9ecf3e5dddca38815d3e59ed34b5b90b4a353": { + "balance": "0xb1781a3f0bb200000" + }, + "23fa7eb51a48229598f97e762be0869652dffc66": { + "balance": "0x3635c9adc5dea00000" + }, + "240305727313d01e73542c775ff59d11cd35f819": { + "balance": "0x141885666807f5c8000" + }, + "24046b91da9b61b629cb8b8ec0c351a07e0703e4": { + "balance": "0x6c6b935b8bbd400000" + }, + "240e559e274aaef0c258998c979f671d1173b88b": { + "balance": "0xd8d726b7177a800000" + }, + "241361559feef80ef137302153bd9ed2f25db3ef": { + "balance": "0x43c33c1937564800000" + }, + "243b3bca6a299359e886ce33a30341fafe4d573d": { + "balance": "0x43c33c1937564800000" + }, + "243c84d12420570cc4ef3baba1c959c283249520": { + "balance": "0x7f1f6993a853040000" + }, + "24434a3e32e54ecf272fe3470b5f6f512f675520": { + "balance": "0x14061b9d77a5e980000" + }, + "2448596f91c09baa30bc96106a2d37b5705e5d28": { + "balance": "0x6c6b935b8bbd400000" + }, + "24586ec5451735eeaaeb470dc8736aae752f82e5": { + "balance": "0xf43fc2c04ee00000" + }, + "2458d6555ff98a129cce4037953d00206eff4287": { + "balance": "0xaadec983fcff40000" + }, + "246291165b59332df5f18ce5c98856fae95897d6": { + "balance": "0x5c283d410394100000" + }, + "2467c6a5c696ede9a1e542bf1ad06bcc4b06aca0": { + "balance": "0x100bd33fb98ba0000" + }, + "2476b2bb751ce748e1a4c4ff7b230be0c15d2245": { + "balance": "0xd8d726b7177a800000" + }, + "247a0a11c57f0383b949de540b66dee68604b0a1": { + "balance": "0x39fbae8d042dd00000" + }, + "2487c3c4be86a2723d917c06b458550170c3edba": { + "balance": "0x3635c9adc5dea00000" + }, + "2489ac126934d4d6a94df08743da7b7691e9798e": { + "balance": "0x3635c9adc5dea00000" + }, + "249db29dbc19d1235da7298a04081c315742e9ac": { + "balance": "0x61acff81a78ad40000" + }, + "24a4eb36a7e498c36f99975c1a8d729fd6b305d7": { + "balance": "0xdfc78210eb2c80000" + }, + "24a750eae5874711116dd7d47b7186ce990d3103": { + "balance": "0xad78ebc5ac6200000" + }, + "24aa1151bb765fa3a89ca50eb6e1b1c706417fd4": { + "balance": "0xa80d24677efef00000" + }, + "24aca08d5be85ebb9f3132dfc1b620824edfedf9": { + "balance": "0xfc936392801c0000" + }, + "24b2be118b16d8b2174769d17b4cf84f07ca946d": { + "balance": "0x6c6b935b8bbd400000" + }, + "24b8b446debd1947955dd084f2c544933346d3ad": { + "balance": "0xea696d904039bd8000" + }, + "24b95ebef79500baa0eda72e77f877415df75c33": { + "balance": "0x3154c9729d05780000" + }, + "24b9e6644f6ba4cde126270d81f6ab60f286dff4": { + "balance": "0x73f75d1a085ba0000" + }, + "24bd5904059091d2f9e12d6a26a010ca22ab14e8": { + "balance": "0x65ea3db75546600000" + }, + "24c0c88b54a3544709828ab4ab06840559f6c5e2": { + "balance": "0x90f534608a72880000" + }, + "24c117d1d2b3a97ab11a4679c99a774a9eade8d1": { + "balance": "0x3635c9adc5dea00000" + }, + "24cff0e9336a9f80f9b1cb968caf6b1d1c4932a4": { + "balance": "0xada55474b81340000" + }, + "24daaaddf7b06bbcea9b80590085a88567682b4e": { + "balance": "0x114b2015d2bbd00000" + }, + "24dcc24bd9c7210ceacfb30da98ae04a4d7b8ab9": { + "balance": "0x3635c9adc5dea00000" + }, + "24f7450ddbf18b020feb1a2032d9d54b633edf37": { + "balance": "0x2b5e3af16b1880000" + }, + "24fc73d20793098e09ddab5798506224fa1e1850": { + "balance": "0xad78ebc5ac6200000" + }, + "24fd9a6c874c2fab3ff36e9afbf8ce0d32c7de92": { + "balance": "0x487a9a304539440000" + }, + "250a40cef3202397f240469548beb5626af4f23c": { + "balance": "0x503b203e9fba20000" + }, + "250a69430776f6347703f9529783955a6197b682": { + "balance": "0x692ae8897081d00000" + }, + "250eb7c66f869ddf49da85f3393e980c029aa434": { + "balance": "0xd8d726b7177a800000" + }, + "25106ab6755df86d6b63a187703b0cfea0e594a0": { + "balance": "0x17c405ad41db40000" + }, + "25185f325acf2d64500698f65c769ddf68301602": { + "balance": "0x10f0cf064dd59200000" + }, + "251c12722c6879227992a304eb3576cd18434ea5": { + "balance": "0x6c6b935b8bbd400000" + }, + "251e6838f7cec5b383c1d90146341274daf8e502": { + "balance": "0x7ff1ccb7561df0000" + }, + "25259d975a21d83ae30e33f800f53f37dfa01938": { + "balance": "0x1158e460913d00000" + }, + "25287b815f5c82380a73b0b13fbaf982be24c4d3": { + "balance": "0x22b1c8c1227a00000" + }, + "252b6555afdc80f2d96d972d17db84ea5ad521ac": { + "balance": "0x1ab2cf7c9f87e200000" + }, + "2538532936813c91e653284f017c80c3b8f8a36f": { + "balance": "0x6c8754c8f30c080000" + }, + "253e32b74ea4490ab92606fda0aa257bf23dcb8b": { + "balance": "0x21e19e0c9bab2400000" + }, + "253f1e742a2cec86b0d7b306e5eacb6ccb2f8554": { + "balance": "0x43e5ede1f878c200000" + }, + "2541314a0b408e95a694444977712a50713591ab": { + "balance": "0x589e1a5df4d7b50000" + }, + "254c1ecc630c2877de8095f0a8dba1e8bf1f550c": { + "balance": "0x5c283d410394100000" + }, + "255abc8d08a096a88f3d6ab55fbc7352bddcb9ce": { + "balance": "0x4743682313ede8000" + }, + "255bdd6474cc8262f26a22c38f45940e1ceea69b": { + "balance": "0xd8d726b7177a800000" + }, + "2560b09b89a4ae6849ed5a3c9958426631714466": { + "balance": "0x5c283d410394100000" + }, + "2561a138dcf83bd813e0e7f108642be3de3d6f05": { + "balance": "0x3634f48417401a0000" + }, + "2561ec0f379218fe5ed4e028a3f744aa41754c72": { + "balance": "0xb98bc829a6f90000" + }, + "256292a191bdda34c4da6b6bd69147bf75e2a9ab": { + "balance": "0xc2ff2e0dfb038000" + }, + "25697ef20cccaa70d32d376f8272d9c1070c3d78": { + "balance": "0xad78ebc5ac6200000" + }, + "256fa150cc87b5056a07d004efc84524739e62b5": { + "balance": "0xad78ebc5ac6200000" + }, + "25721c87b0dc21377c7200e524b14a22f0af69fb": { + "balance": "0xd8d726b7177a800000" + }, + "258939bbf00c9de9af5338f5d714abf6d0c1c671": { + "balance": "0x54069233bf7f780000" + }, + "2590126870e0bde8a663ab040a72a5573d8d41c2": { + "balance": "0x10f0cf064dd59200000" + }, + "259ec4d265f3ab536b7c70fa97aca142692c13fc": { + "balance": "0x11b1b5bea89f80000" + }, + "25a500eeec7a662a841552b5168b707b0de21e9e": { + "balance": "0x21f2f6f0fc3c6100000" + }, + "25a5a44d38a2f44c6a9db9cdbc6b1e2e97abb509": { + "balance": "0x39992648a23c8a00000" + }, + "25a74c2ac75dc8baa8b31a9c7cb4b7829b2456da": { + "balance": "0x6c6b935b8bbd400000" + }, + "25adb8f96f39492c9bb47c5edc88624e46075697": { + "balance": "0x5a9940bc56879500000" + }, + "25aee68d09afb71d8817f3f184ec562f7897b734": { + "balance": "0x6c6b935b8bbd400000" + }, + "25b0533b81d02a617b9229c7ec5d6f2f672e5b5a": { + "balance": "0x3635c9adc5dea00000" + }, + "25b78c9fad85b43343f0bfcd0fac11c9949ca5eb": { + "balance": "0x6c6b935b8bbd400000" + }, + "25bc49ef288cd165e525c661a812cf84fbec8f33": { + "balance": "0x125921aebda9d00000" + }, + "25bdfa3ee26f3849617b230062588a97e3cae701": { + "balance": "0x3635e619bb04d40000" + }, + "25c1a37ee5f08265a1e10d3d90d5472955f97806": { + "balance": "0x62a992e53a0af00000" + }, + "25c6e74ff1d928df98137af4df8430df24f07cd7": { + "balance": "0x15245655b102580000" + }, + "25cfc4e25c35c13b69f7e77dbfb08baf58756b8d": { + "balance": "0x878678326eac9000000" + }, + "25dad495a11a86b9eeece1eeec805e57f157faff": { + "balance": "0x3635c9adc5dea000000" + }, + "25e037f00a18270ba5ec3420229ddb0a2ce38fa2": { + "balance": "0x21e19e0c9bab2400000" + }, + "25e661c939863acc044e6f17b5698cce379ec3cc": { + "balance": "0x4a4491bd6dcd280000" + }, + "26048fe84d9b010a62e731627e49bc2eb73f408f": { + "balance": "0xd8d726b7177a800000" + }, + "2606c3b3b4ca1b091498602cb1978bf3b95221c0": { + "balance": "0x15af1d78b58c400000" + }, + "260a230e4465077e0b14ee4442a482d5b0c914bf": { + "balance": "0x5af606a06b5b118000" + }, + "260df8943a8c9a5dba7945327fd7e0837c11ad07": { + "balance": "0xad78ebc5ac6200000" + }, + "2614f42d5da844377578e6b448dc24305bef2b03": { + "balance": "0x6c6b935b8bbd400000" + }, + "2615100ea7e25bba9bca746058afbbb4ffbe4244": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "261575e9cf59c8226fa7aaf91de86fb70f5ac3ae": { + "balance": "0x1043a4436a523f0000" + }, + "261e0fa64c51137465eecf5b90f197f7937fdb05": { + "balance": "0x3cfc82e37e9a7400000" + }, + "262a8bfd7d9dc5dd3ad78161b6bb560824373655": { + "balance": "0x3f6a8384072b760000" + }, + "262aed4bc0f4a4b2c6fb35793e835a49189cdfec": { + "balance": "0x21e19e0c9bab2400000" + }, + "262dc1364ccf6df85c43268ee182554dae692e29": { + "balance": "0x10b202fec74ced80000" + }, + "263814309de4e635cf585e0d365477fc40e66cf7": { + "balance": "0x7ea28327577080000" + }, + "2639eee9873ceec26fcc9454b548b9e7c54aa65c": { + "balance": "0x3635c9adc5dea00000" + }, + "263e57dacbe0149f82fe65a2664898866ff5b463": { + "balance": "0x80bfbefcb5f0bc00000" + }, + "26475419c06d5f147aa597248eb46cf7befa64a5": { + "balance": "0x58e7926ee858a00000" + }, + "264cc8086a8710f91b21720905912cd7964ae868": { + "balance": "0x1731790534df20000" + }, + "265383d68b52d034161bfab01ae1b047942fbc32": { + "balance": "0x47271dee20d745c0000" + }, + "2659facb1e83436553b5b42989adb8075f9953ed": { + "balance": "0x1976576771a5e0000" + }, + "266f2da7f0085ef3f3fa09baee232b93c744db2e": { + "balance": "0xcb49b44ba602d800000" + }, + "267148fd72c54f620a592fb92799319cc4532b5c": { + "balance": "0x1639e49bba16280000" + }, + "26784ade91c8a83a8e39658c8d8277413ccc9954": { + "balance": "0x14542ba12a337c00000" + }, + "267a7e6e82e1b91d51deddb644f0e96dbb1f7f7e": { + "balance": "0x1158e460913d00000" + }, + "2680713d40808e2a50ed013150a2a694b96a7f1d": { + "balance": "0x61093d7c2c6d380000" + }, + "2697b339813b0c2d964b2471eb1c606f4ecb9616": { + "balance": "0x3e8ef795d890c80000" + }, + "26a68eab905a8b3dce00e317308225dab1b9f6b8": { + "balance": "0x6b56051582a9700000" + }, + "26b11d066588ce74a572a85a6328739212aa8b40": { + "balance": "0x6c6b935b8bbd400000" + }, + "26babf42b267fdcf3861fdd4236a5e474848b358": { + "balance": "0x3635c9adc5dea00000" + }, + "26c0054b700d3a7c2dcbe275689d4f4cad16a335": { + "balance": "0x6c6b935b8bbd400000" + }, + "26c2ffc30efdc5273e76183a16c2698d6e531286": { + "balance": "0x2a1129d09367200000" + }, + "26c99f8849c9802b83c861217fd07a9e84cdb79d": { + "balance": "0x1043561a8829300000" + }, + "26cfffd052152bb3f957b478d5f98b233a7c2b92": { + "balance": "0xd8d726b7177a800000" + }, + "26d4a16891f52922789217fcd886f7fce296d400": { + "balance": "0x6c6b935b8bbd400000" + }, + "26d4ec17d5ceb2c894bdc59d0a6a695dad2b43cc": { + "balance": "0x9f1f78761d341a0000" + }, + "26e801b62c827191dd68d31a011990947fd0ebe0": { + "balance": "0x1158e460913d00000" + }, + "26e9e2ad729702626417ef25de0dc800f7a779b3": { + "balance": "0x3635c9adc5dea00000" + }, + "26f9f7cefd7e394b9d3924412bf2c2831faf1f85": { + "balance": "0xd8d726b7177a800000" + }, + "26fe174cbf526650e0cd009bd6126502ce8e684d": { + "balance": "0x277017338a30ae00000" + }, + "26ff0a51e7cece8400276978dbd6236ef162c0e6": { + "balance": "0x152e185627540a500000" + }, + "27101a0f56d39a88c5a84f9b324cdde33e5cb68c": { + "balance": "0x6c6b935b8bbd400000" + }, + "27144ca9a7771a836ad50f803f64d869b2ae2b20": { + "balance": "0xd8d726b7177a800000" + }, + "27146913563aa745e2588430d9348e86ea7c3510": { + "balance": "0x15af1d78b58c400000" + }, + "271d3d481cb88e7671ad216949b6365e06303de0": { + "balance": "0xd8d726b7177a800000" + }, + "2720f9ca426ef2f2cbd2fecd39920c4f1a89e16d": { + "balance": "0x6c6b935b8bbd400000" + }, + "272a131a5a656a7a3aca35c8bd202222a7592258": { + "balance": "0x90f534608a72880000" + }, + "2744ff67464121e35afc2922177164fa2fcb0267": { + "balance": "0x56bc75e2d63100000" + }, + "274a3d771a3d709796fbc4d5f48fce2fe38c79d6": { + "balance": "0x1158e460913d00000" + }, + "274d69170fe7141401882b886ac4618c6ae40edb": { + "balance": "0x33c5499031720c0000" + }, + "27521deb3b6ef1416ea4c781a2e5d7b36ee81c61": { + "balance": "0x6c6b935b8bbd400000" + }, + "275875ff4fbb0cf3a430213127487f7608d04cba": { + "balance": "0x1b1c010e766d580000" + }, + "276a006e3028ecd44cdb62ba0a77ce94ebd9f10f": { + "balance": "0x6194049f30f7200000" + }, + "276b0521b0e68b277df0bb32f3fd48326350bfb2": { + "balance": "0x2b5e3af16b1880000" + }, + "276fd7d24f8f883f5a7a28295bf17151c7a84b03": { + "balance": "0x6c6b935b8bbd400000" + }, + "2770f14efb165ddeba79c10bb0af31c31e59334c": { + "balance": "0xa2a15d09519be00000" + }, + "277677aba1e52c3b53bfa2071d4e859a0af7e8e1": { + "balance": "0x3635c9adc5dea00000" + }, + "27824666d278d70423f03dfe1dc7a3f02f43e2b5": { + "balance": "0x3636c25e66ece70000" + }, + "27830c5f6023afaaf79745676c204a0faccda0ba": { + "balance": "0xd02ab486cedc00000" + }, + "2784903f1d7c1b5cd901f8875d14a79b3cbe2a56": { + "balance": "0x4bda7e9d74ad5500000" + }, + "278c0bde630ec393b1e7267fc9d7d97019e4145b": { + "balance": "0x6c6b935b8bbd400000" + }, + "27987110221a880826adb2e7ab5eca78c6e31aec": { + "balance": "0xd8d726b7177a800000" + }, + "27ac073be79ce657a93aa693ee43bf0fa41fef04": { + "balance": "0xa968163f0a57b400000" + }, + "27b1694eafa165ebd7cc7bc99e74814a951419dc": { + "balance": "0x2b5e3af16b18800000" + }, + "27b62816e1e3b8d19b79d1513d5dfa855b0c3a2a": { + "balance": "0x56af5c1fd69508000" + }, + "27bf943c1633fe32f8bcccdb6302b407a5724e44": { + "balance": "0x32f84c6df408c08000" + }, + "27bf9f44ba7d05c33540c3a53bb02cbbffe7c3c6": { + "balance": "0x6c6b935b8bbd400000" + }, + "27c2d7ca504daa3d9066dc09137dc42f3aaab452": { + "balance": "0x2086ac351052600000" + }, + "27d158ac3d3e1109ab6e570e90e85d3892cd7680": { + "balance": "0x56bc75e2d63100000" + }, + "27e63989ca1e903bc620cf1b9c3f67b9e2ae6581": { + "balance": "0x487a9a304539440000" + }, + "27f03cf1abc5e1b51dbc444b289e542c9ddfb0e6": { + "balance": "0x10f0cf064dd59200000" + }, + "27fc85a49cff90dbcfdadc9ddd40d6b9a2210a6c": { + "balance": "0x56bc75e2d63100000" + }, + "2805415e1d7fdec6dedfb89e521d10592d743c10": { + "balance": "0x56bc75e2d63100000" + }, + "28073efc17d05cab3195c2db332b61984777a612": { + "balance": "0x3635c9adc5dea00000" + }, + "281250a29121270a4ee5d78d24feafe82c70ba3a": { + "balance": "0x3635c9adc5dea00000" + }, + "2813d263fc5ff2479e970595d6b6b560f8d6d6d1": { + "balance": "0x6c6b935b8bbd400000" + }, + "282e80a554875a56799fa0a97f5510e795974c4e": { + "balance": "0x3635c9adc5dea00000" + }, + "283396ce3cac398bcbe7227f323e78ff96d08767": { + "balance": "0x15af1d78b58c400000" + }, + "28349f7ef974ea55fe36a1583b34cec3c45065f0": { + "balance": "0xcb633d49e65590000" + }, + "2836123046b284e5ef102bfd22b1765e508116ad": { + "balance": "0x1653fbb5c427e40000" + }, + "283c2314283c92d4b064f0aef9bb5246a7007f39": { + "balance": "0xad78ebc5ac6200000" + }, + "283e11203749b1fa4f32febb71e49d135919382a": { + "balance": "0x3635c9adc5dea00000" + }, + "283e6252b4efcf4654391acb75f903c59b78c5fb": { + "balance": "0x28a857425466f800000" + }, + "28510e6eff1fc829b6576f4328bc3938ec7a6580": { + "balance": "0x21e19e0c9bab2400000" + }, + "2858acacaf21ea81cab7598fdbd86b452e9e8e15": { + "balance": "0x241a9b4f617a280000" + }, + "285ae51b9500c58d541365d97569f14bb2a3709b": { + "balance": "0x6c6b935b8bbd400000" + }, + "2866b81decb02ee70ae250cee5cdc77b59d7b679": { + "balance": "0x6c6b935b8bbd400000" + }, + "286906b6bd4972e3c71655e04baf36260c7cb153": { + "balance": "0x126e72a69a50d00000" + }, + "286b186d61ea1fd78d9930fe12b06537b05c3d51": { + "balance": "0x3635c9adc5dea00000" + }, + "2874f3e2985d5f7b406627e17baa772b01abcc9e": { + "balance": "0x146050410765f380000" + }, + "287cf9d0902ef819a7a5f149445bf1775ee8c47c": { + "balance": "0x3635c9adc5dea000000" + }, + "28818e18b610001321b31df6fe7d2815cdadc9f5": { + "balance": "0x3635c9adc5dea00000" + }, + "28868324337e11ba106cb481da962f3a8453808d": { + "balance": "0x6c6b935b8bbd400000" + }, + "28904bb7c4302943b709b14d7970e42b8324e1a1": { + "balance": "0x21f97846a072d7e0000" + }, + "2895e80999d406ad592e2b262737d35f7db4b699": { + "balance": "0x692ae8897081d00000" + }, + "28967280214e218a120c5dda37041b111ea36d74": { + "balance": "0xad78ebc5ac6200000" + }, + "28a3da09a8194819ae199f2e6d9d1304817e28a5": { + "balance": "0x6c6b935b8bbd400000" + }, + "28ab165ffb69eda0c549ae38e9826f5f7f92f853": { + "balance": "0x464df6d7c844590000" + }, + "28b77585cb3d55a199ab291d3a18c68fe89a848a": { + "balance": "0x6a4076cf7995a00000" + }, + "28d4ebf41e3d3c451e943bdd7e1f175fae932a3d": { + "balance": "0x14542ba12a337c00000" + }, + "28d7e5866f1d85fd1ceb32bfbe1dfc36db434566": { + "balance": "0x1864231c610351c0000" + }, + "28d8c35fb7eea622582135e3ad47a227c9a663bd": { + "balance": "0xfc936392801c0000" + }, + "28e4af30cd93f686a122ad7bb19f8a8785eee342": { + "balance": "0x71e53b706cc7b40000" + }, + "28eaea78cd4d95faecfb68836eafe83520f3bbb7": { + "balance": "0xad78ebc5ac6200000" + }, + "28efae6356509edface89fc61a7fdcdb39eea8e5": { + "balance": "0x121ea68c114e5100000" + }, + "28fa2580f9ebe420f3e5eefdd371638e3b7af499": { + "balance": "0x14542ba12a337c00000" + }, + "2901f8077f34190bb47a8e227fa29b30ce113b31": { + "balance": "0x56bc75e2d63100000" + }, + "2905b192e83ce659aa355b9d0c204e3e95f9bb9a": { + "balance": "0x75235c1d00393e8000" + }, + "290a56d41f6e9efbdcea0342e0b7929a8cdfcb05": { + "balance": "0x12a5f58168ee600000" + }, + "2915624bcb679137b8dae9ab57d11b4905eaee4b": { + "balance": "0x1158e460913d00000" + }, + "291efe0081dce8c14799f7b2a43619c0c3b3fc1f": { + "balance": "0x410d586a20a4c00000" + }, + "291f929ca59b54f8443e3d4d75d95dee243cef78": { + "balance": "0x1b1a089237073d0000" + }, + "29298ccbdff689f87fe41aa6e98fdfb53deaf37a": { + "balance": "0x4315c32d71a9e600000" + }, + "292f228b0a94748c8eec612d246f989363e08f08": { + "balance": "0xa076407d3f7440000" + }, + "293384c42b6f8f2905ce52b7205c2274376c612b": { + "balance": "0x4be4e7267b6ae00000" + }, + "2934c0df7bbc172b6c186b0b72547ace8bf75454": { + "balance": "0x340aad21b3b700000" + }, + "293c2306df3604ae4fda0d207aba736f67de0792": { + "balance": "0xad78ebc5ac6200000" + }, + "2949fd1def5c76a286b3872424809a07db3966f3": { + "balance": "0x11bd906daa0c9438000" + }, + "294f494b3f2e143c2ffc9738cbfd9501850b874e": { + "balance": "0x796e3ea3f8ab000000" + }, + "2955c357fd8f75d5159a3dfa69c5b87a359dea8c": { + "balance": "0x6c6b935b8bbd400000" + }, + "2961fb391c61957cb5c9e407dda29338d3b92c80": { + "balance": "0x3634fb9f1489a70000" + }, + "29681d9912ddd07eaabb88d05d90f766e862417d": { + "balance": "0x3635c9adc5dea00000" + }, + "296b71c0015819c242a7861e6ff7eded8a5f71e3": { + "balance": "0x6c68ccd09b022c0000" + }, + "296d66b521571a4e4103a7f562c511e6aa732d81": { + "balance": "0x243d4d18229ca20000" + }, + "296f00de1dc3bb01d47a8ccd1e5d1dd9a1eb7791": { + "balance": "0x3635c9adc5dea00000" + }, + "297385e88634465685c231a314a0d5dcd146af01": { + "balance": "0x54069233bf7f780000" + }, + "29763dd6da9a7c161173888321eba6b63c8fb845": { + "balance": "0x11c7ea162e78200000" + }, + "2979741174a8c1ea0b7f9edf658177859417f512": { + "balance": "0x1901966c8496838000" + }, + "297a88921b5fca10e5bb9ded60025437ae221694": { + "balance": "0xad78ebc5ac6200000" + }, + "297d5dbe222f2fb52531acbd0b013dc446ac7368": { + "balance": "0x43c33c1937564800000" + }, + "29824e94cc4348bc963279dcdf47391715324cd3": { + "balance": "0x692ae8897081d00000" + }, + "2982d76a15f847dd41f1922af368fe678d0e681e": { + "balance": "0x56bc75e2d63100000" + }, + "298887bab57c5ba4f0615229d7525fa113b7ea89": { + "balance": "0x22b1c8c1227a00000" + }, + "298ec76b440d8807b3f78b5f90979bee42ed43db": { + "balance": "0x65a4da25d3016c00000" + }, + "299368609042a858d1ecdf1fc0ada5eaceca29cf": { + "balance": "0x6c6b935b8bbd400000" + }, + "299e0bca55e069de8504e89aca6eca21d38a9a5d": { + "balance": "0x302379bf2ca2e0000" + }, + "29ac2b458454a36c7e96c73a8667222a12242c71": { + "balance": "0xd8d726b7177a800000" + }, + "29adcf83b6b20ac6a434abb1993cbd05c60ea2e4": { + "balance": "0x21e19e0c9bab2400000" + }, + "29aef48de8c9fbad4b9e4ca970797a5533eb722d": { + "balance": "0x21e19e0c9bab2400000" + }, + "29b3f561ee7a6e25941e98a5325b78adc79785f3": { + "balance": "0x56bc75e2d63100000" + }, + "29bdc4f28de0180f433c2694eb74f5504ce94337": { + "balance": "0x6c6b935b8bbd400000" + }, + "29cc804d922be91f5909f348b0aaa5d21b607830": { + "balance": "0xd8d726b7177a800000" + }, + "29da3e35b23bb1f72f8e2258cf7f553359d24bac": { + "balance": "0x43c33c1937564800000" + }, + "29e67990e1b6d52e1055ffe049c53195a81542cf": { + "balance": "0x43c33c1937564800000" + }, + "29eaae82761762f4d2db53a9c68b0f6b0b6d4e66": { + "balance": "0x6c6b935b8bbd400000" + }, + "29eb7eefdae9feb449c63ff5f279d67510eb1422": { + "balance": "0x10d3aa536e2940000" + }, + "29f0edc60338e7112085a1d114da8c42ce8f55d6": { + "balance": "0xa05a7f0fd825780000" + }, + "29f8fba4c30772b057edbbe62ae7420c390572e1": { + "balance": "0x3635c9adc5dea00000" + }, + "29f9286c0e738d1721a691c6b95ab3d9a797ede8": { + "balance": "0x2a5a058fc295ed000000" + }, + "2a085e25b64862f5e68d768e2b0f7a8529858eee": { + "balance": "0x6b883acd5766cd0000" + }, + "2a2ab6b74c7af1d9476bb5bcb4524797bedc3552": { + "balance": "0x3635c9adc5dea00000" + }, + "2a39190a4fde83dfb3ddcb4c5fbb83ac6c49755c": { + "balance": "0x3635c9adc5dea00000" + }, + "2a400dff8594de7228b4fd15c32322b75bb87da8": { + "balance": "0x531a17f607a2d0000" + }, + "2a44a7218fe44d65a1b4b7a7d9b1c2c52c8c3e34": { + "balance": "0xd2d06c305a1eb578000" + }, + "2a46d353777176ff8e83ffa8001f4f70f9733aa5": { + "balance": "0x5bf0ba6634f680000" + }, + "2a595f16eee4cb0c17d9a2d939b3c10f6c677243": { + "balance": "0x3ba1910bf341b00000" + }, + "2a59e47ea5d8f0e7c028a3e8e093a49c1b50b9a3": { + "balance": "0x6c6b935b8bbd400000" + }, + "2a5ba9e34cd58da54c9a2712663a3be274c8e47b": { + "balance": "0xaadec983fcff40000" + }, + "2a5e3a40d2cd0325766de73a3d671896b362c73b": { + "balance": "0x152d02c7e14af6800000" + }, + "2a63590efe9986c3fee09b0a0a338b15bed91f21": { + "balance": "0x15e1c4e05ee26d00000" + }, + "2a67660a1368efcd626ef36b2b1b601980941c05": { + "balance": "0x73f75d1a085ba0000" + }, + "2a742b8910941e0932830a1d9692cfd28494cf40": { + "balance": "0x1b1ab319f5ec750000" + }, + "2a746cd44027af3ebd37c378c85ef7f754ab5f28": { + "balance": "0x155bd9307f9fe80000" + }, + "2a81d27cb6d4770ff4f3c4a3ba18e5e57f07517c": { + "balance": "0x6c6b935b8bbd400000" + }, + "2a91a9fed41b7d0e5cd2d83158d3e8a41a9a2d71": { + "balance": "0x692ae8897081d00000" + }, + "2a9c57fe7b6b138a920d676f3c76b6c2a0eef699": { + "balance": "0x1fd933494aa5fe00000" + }, + "2a9c96c19151ffcbe29a4616d0c52b3933b4659f": { + "balance": "0x3c1379b8765e18000" + }, + "2aa192777ca5b978b6b2c2ff800ac1860f753f47": { + "balance": "0x12290f15180bdc0000" + }, + "2aaa35274d742546670b7426264521032af4f4c3": { + "balance": "0x21e19e0c9bab2400000" + }, + "2aaea1f1046f30f109faec1c63ef5c7594eb08da": { + "balance": "0xd8d726b7177a800000" + }, + "2ab97e8d59eee648ab6caf8696f89937143864d6": { + "balance": "0xcf152640c5c8300000" + }, + "2abce1808940cd4ef5b5e05285f82df7a9ab5e03": { + "balance": "0x21342520d5fec200000" + }, + "2abdf1a637ef6c42a7e2fe217773d677e804ebdd": { + "balance": "0x10f0cf064dd59200000" + }, + "2ac1f8d7bf721f3cfe74d20fea9b87a28aaa982c": { + "balance": "0x8ba52e6fc45e40000" + }, + "2acc9c1a32240b4d5b2f777a2ea052b42fc1271c": { + "balance": "0x8d807ee14d836100000" + }, + "2ad6c9d10c261819a1a0ca2c48d8c7b2a71728df": { + "balance": "0x3635c9adc5dea00000" + }, + "2ae53866fc2d14d572ab73b4a065a1188267f527": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "2ae73a79aea0278533accf21070922b1613f8f32": { + "balance": "0xa7e94bbeae701a8000" + }, + "2ae82dab92a66389eea1abb901d1d57f5a7cca0b": { + "balance": "0x6c6b935b8bbd400000" + }, + "2aec809df9325b9f483996e99f7331097f08aa0e": { + "balance": "0xd8d726b7177a800000" + }, + "2aed2ce531c056b0097efc3c6de10c4762004ed9": { + "balance": "0x2356953ab7ddc380000" + }, + "2afb058c3d31032b353bf24f09ae20d54de57dbe": { + "balance": "0x3ba1910bf341b00000" + }, + "2b0362633614bfcb583569438ecc4ea57b1d337e": { + "balance": "0x43c33c1937564800000" + }, + "2b101e822cd962962a06800a2c08d3b15d82b735": { + "balance": "0x83d6c7aab63600000" + }, + "2b129c26b75dde127f8320bd0f63410c92a9f876": { + "balance": "0x77432217e683600000" + }, + "2b241f037337eb4acc61849bd272ac133f7cdf4b": { + "balance": "0x500b6bca962ab8400000" + }, + "2b3a68db6b0cae8a7c7a476bdfcfbd6205e10687": { + "balance": "0x821ab0d44149800000" + }, + "2b3cf97311ff30f460945a9d8099f4a88e26d456": { + "balance": "0x6c6b935b8bbd400000" + }, + "2b49fba29830360fcdb6da23bbfea5c0bbac5281": { + "balance": "0x1158e460913d00000" + }, + "2b4f4507bb6b9817942ce433781b708fbcd166fd": { + "balance": "0xfc936392801c0000" + }, + "2b5016e2457387956562587115aa8759d8695fdf": { + "balance": "0x2a5a058fc295ed000000" + }, + "2b5c60e84535eeb4d580de127a12eb2677ccb392": { + "balance": "0x43c33c1937564800000" + }, + "2b5ced9987c0765f900e49cf9da2d9f9c1138855": { + "balance": "0x15af1d78b58c400000" + }, + "2b5f4b3f1e11707a227aa5e69fa49dded33fb321": { + "balance": "0x14542ba12a337c00000" + }, + "2b68306ba7f8daaf73f4c644ef7d2743c0f26856": { + "balance": "0x2ee182ca17ddd00000" + }, + "2b6ed29a95753c3ad948348e3e7b1a251080ffb9": { + "balance": "0x34f086f3b33b68400000" + }, + "2b701d16c0d3cc1e4cd85445e6ad02eea4ac012d": { + "balance": "0x2086ac351052600000" + }, + "2b717cd432a323a4659039848d3b87de26fc9546": { + "balance": "0x69e10de76676d0800000" + }, + "2b74c373d04bfb0fd60a18a01a88fbe84770e58c": { + "balance": "0x22b1c8c1227a00000" + }, + "2b77a4d88c0d56a3dbe3bae04a05f4fcd1b757e1": { + "balance": "0x1043561a8829300000" + }, + "2b8488bd2d3c197a3d26151815b5a798d27168dc": { + "balance": "0x16a1f9f5fd7d9600000" + }, + "2b8a0dee5cb0e1e97e15cfca6e19ad21f995efad": { + "balance": "0x1b55438d9a249b0000" + }, + "2b8fe4166e23d11963c0932b8ade8e0145ea0770": { + "balance": "0x92896529baddc880000" + }, + "2b99b42e4f42619ee36baa7e4af2d65eacfcba35": { + "balance": "0x878678326eac9000000" + }, + "2bab0fbe28d58420b52036770a12f9952aea6911": { + "balance": "0xcf152640c5c8300000" + }, + "2bade91d154517620fd4b439ac97157a4102a9f7": { + "balance": "0xd8d726b7177a800000" + }, + "2baf8d6e221174124820ee492b9459ec4fadafbb": { + "balance": "0x6c6b935b8bbd400000" + }, + "2bafbf9e9ed2c219f7f2791374e7d05cb06777e7": { + "balance": "0xbed1d0263d9f00000" + }, + "2bb366b9edcb0da680f0e10b3b6e28748190d6c3": { + "balance": "0x13a62d7b57640640000" + }, + "2bb6f578adfbe7b2a116b3554facf9969813c319": { + "balance": "0x19127a1391ea2a00000" + }, + "2bbe62eac80ca7f4d6fdee7e7d8e28b63acf770e": { + "balance": "0x81e32df972abf00000" + }, + "2bbe672a1857508f630f2a5edb563d9e9de92815": { + "balance": "0x6c6b935b8bbd400000" + }, + "2bc429d618a66a4cf82dbb2d824e9356effa126a": { + "balance": "0x6c6acc67d7b1d40000" + }, + "2bd252e0d732ff1d7c78f0a02e6cb25423cf1b1a": { + "balance": "0x90f534608a72880000" + }, + "2bdd03bebbee273b6ca1059b34999a5bbd61bb79": { + "balance": "0x1158e460913d00000" + }, + "2c04115c3e52961b0dc0b0bf31fba4546f5966fd": { + "balance": "0xad78ebc5ac6200000" + }, + "2c06dd922b61514aafedd84488c0c28e6dcf0e99": { + "balance": "0x152d02c7e14af6800000" + }, + "2c0cc3f951482cc8a2925815684eb9f94e060200": { + "balance": "0x14542ba12a337c00000" + }, + "2c0ee134d8b36145b47beee7af8d2738dbda08e8": { + "balance": "0xae56f730e6d840000" + }, + "2c0f5b9df43625798e7e03c1a5fd6a6d091af82b": { + "balance": "0x1b0fcaab200300000" + }, + "2c128c95d957215101f043dd8fc582456d41016d": { + "balance": "0x2d43f3ebfafb2c0000" + }, + "2c1800f35fa02d3eb6ff5b25285f5e4add13b38d": { + "balance": "0x3122d3adafde100000" + }, + "2c1c19114e3d6de27851484b8d2715e50f8a1065": { + "balance": "0x56bc75e2d63100000" + }, + "2c1cc6e18c152488ba11c2cc1bcefa2df306abd1": { + "balance": "0x5a87e7d7f5f6580000" + }, + "2c1df8a76f48f6b54bcf9caf56f0ee1cf57ab33d": { + "balance": "0x2247f750089da580000" + }, + "2c2147947ae33fb098b489a5c16bfff9abcd4e2a": { + "balance": "0xad78ebc5ac6200000" + }, + "2c234f505ca8dcc77d9b7e01d257c318cc19396d": { + "balance": "0x56bc75e2d63100000" + }, + "2c2428e4a66974edc822d5dbfb241b2728075158": { + "balance": "0x6c6b935b8bbd400000" + }, + "2c2d15ff39561c1b72eda1cc027ffef23743a144": { + "balance": "0xd480ed9ef32b400000" + }, + "2c2db28c3309375eea3c6d72cd6d0eec145afcc0": { + "balance": "0x6c6b935b8bbd400000" + }, + "2c424ee47f583cdce07ae318b6fad462381d4d2b": { + "balance": "0xd8d726b7177a800000" + }, + "2c4b470307a059854055d91ec3794d80b53d0f4a": { + "balance": "0x43c33c1937564800000" + }, + "2c52c984102ee0cd3e31821b84d408930efa1ac7": { + "balance": "0x6c6b935b8bbd400000" + }, + "2c5a2d0abda03bbe215781b4ff296c8c61bdbaf6": { + "balance": "0x1a8e56f48c0228000" + }, + "2c5b7d7b195a371bf9abddb42fe04f2f1d9a9910": { + "balance": "0xad78ebc5ac6200000" + }, + "2c5df866666a194b26cebb407e4a1fd73e208d5e": { + "balance": "0x3635c9adc5dea00000" + }, + "2c603ff0fe93616c43573ef279bfea40888d6ae7": { + "balance": "0x100f4b6d66757900000" + }, + "2c6846a1aa999a2246a287056000ba4dcba8e63d": { + "balance": "0x21f2f6f0fc3c6100000" + }, + "2c6afcd4037c1ed14fa74ff6758e0945a185a8e8": { + "balance": "0xf43fc2c04ee00000" + }, + "2c6b699d9ead349f067f45711a074a641db6a897": { + "balance": "0x1158e460913d00000" + }, + "2c6f5c124cc789f8bb398e3f889751bc4b602d9e": { + "balance": "0x159f20bed00f00000" + }, + "2c83aeb02fcf067d65a47082fd977833ab1cec91": { + "balance": "0x8273823258ac00000" + }, + "2c89f5fdca3d155409b638b98a742e55eb4652b7": { + "balance": "0x14dbb2195ca228900000" + }, + "2c964849b1f69cc7cea4442538ed87fdf16cfc8f": { + "balance": "0x6c6b935b8bbd400000" + }, + "2c9fa72c95f37d08e9a36009e7a4b07f29bad41a": { + "balance": "0xdf6eb0b2d3ca0000" + }, + "2caf6bf4ec7d5a19c5e0897a5eeb011dcece4210": { + "balance": "0x7934835a031160000" + }, + "2cb4c3c16bb1c55e7c6b7a19b127a1ac9390cc09": { + "balance": "0xb82794a9244f0c8000" + }, + "2cb5495a505336c2465410d1cae095b8e1ba5cdd": { + "balance": "0x43c33c1937564800000" + }, + "2cb615073a40dcdb99faa848572e987b3b056efb": { + "balance": "0x2b58addb89a2580000" + }, + "2cba6d5d0dc204ea8a25ada2e26f5675bd5f2fdc": { + "balance": "0x4823ef7ddb9af38000" + }, + "2cbb0c73df91b91740b6693b774a7d05177e8e58": { + "balance": "0x6449e84e47a8a80000" + }, + "2ccb66494d0af689abf9483d365d782444e7dead": { + "balance": "0x3635c9adc5dea00000" + }, + "2ccc1f1cb5f4a8002e186b20885d9dbc030c0894": { + "balance": "0x6c6b935b8bbd400000" + }, + "2ccf80e21898125eb4e807cd82e09b9d28592f6e": { + "balance": "0x6c6b935b8bbd400000" + }, + "2cd19694d1926a0fa9189edebafc671cf1b2caa5": { + "balance": "0x3635c9adc5dea00000" + }, + "2cd39334ac7eac797257abe3736195f5b4b5ce0f": { + "balance": "0x56b47785e37260000" + }, + "2cd79eb52027b12c18828e3eaab2969bfcd287e9": { + "balance": "0x1158e460913d00000" + }, + "2cd87866568dd81ad47d9d3ad0846e5a65507373": { + "balance": "0x15af1d78b58c400000" + }, + "2cdb3944650616e47cb182e060322fa1487978ce": { + "balance": "0x62a992e53a0af00000" + }, + "2ce11a92fad024ff2b3e87e3b542e6c60dcbd996": { + "balance": "0xd8d726b7177a800000" + }, + "2d0326b23f0409c0c0e9236863a133075a94ba18": { + "balance": "0xb679be75be6ae0000" + }, + "2d0dec51a6e87330a6a8fa2a0f65d88d4abcdf73": { + "balance": "0xa076407d3f7440000" + }, + "2d23766b6f6b05737dad80a419c40eda4d77103e": { + "balance": "0xcf152640c5c8300000" + }, + "2d2b032359b363964fc11a518263bfd05431e867": { + "balance": "0x81c1df7629e700000" + }, + "2d3480bf0865074a72c7759ee5137b4d70c51ce9": { + "balance": "0xad78ebc5ac6200000" + }, + "2d35a9df62757f7ffad1049afb06ca4afc464c51": { + "balance": "0x1158e460913d00000" + }, + "2d40558b06f90a3923145592123b6774e46e31f4": { + "balance": "0x3635c9adc5dea00000" + }, + "2d426912d059fad9740b2e390a2eeac0546ff01b": { + "balance": "0x4be4e7267b6ae00000" + }, + "2d532df4c63911d1ce91f6d1fcbff7960f78a885": { + "balance": "0x5a85968a5878da8000" + }, + "2d5391e938b34858cf965b840531d5efda410b09": { + "balance": "0x4be4e7267b6ae00000" + }, + "2d5b42fc59ebda0dfd66ae914bc28c1b0a6ef83a": { + "balance": "0x2bc8b59fdcd836638000" + }, + "2d5d7335acb0362b47dfa3a8a4d3f5949544d380": { + "balance": "0xad78ebc5ac6200000" + }, + "2d61bfc56873923c2b00095dc3eaa0f590d8ae0f": { + "balance": "0x46566dff8ce55600000" + }, + "2d6511fd7a3800b26854c7ec39c0dcb5f4c4e8e8": { + "balance": "0x15adddba2f9e770000" + }, + "2d7d5c40ddafc450b04a74a4dabc2bb5d665002e": { + "balance": "0x6c6b935b8bbd400000" + }, + "2d89a8006a4f137a20dc2bec46fe2eb312ea9654": { + "balance": "0xad78ebc5ac6200000" + }, + "2d8c52329f38d2a2fa9cbaf5c583daf1490bb11c": { + "balance": "0x1158e460913d00000" + }, + "2d8e061892a5dcce21966ae1bb0788fd3e8ba059": { + "balance": "0xd8e5ce617f2d50000" + }, + "2d8e5bb8d3521695c77e7c834e0291bfacee7408": { + "balance": "0x6acb3df27e1f880000" + }, + "2d90b415a38e2e19cdd02ff3ad81a97af7cbf672": { + "balance": "0x5f3c7f64131e40000" + }, + "2d9bad6f1ee02a70f1f13def5cccb27a9a274031": { + "balance": "0x61093d7c2c6d380000" + }, + "2d9c5fecd2b44fbb6a1ec732ea059f4f1f9d2b5c": { + "balance": "0x36ca32661d1aa70000" + }, + "2da617695009cc57d26ad490b32a5dfbeb934e5e": { + "balance": "0x43c33c1937564800000" + }, + "2da76b7c39b420e388ba2c1020b0856b0270648a": { + "balance": "0x6c6b935b8bbd400000" + }, + "2dc79d6e7f55bce2e2d0c02ad07ceca8bb529354": { + "balance": "0x55a6e79ccd1d300000" + }, + "2dca0e449ab646dbdfd393a96662960bcab5ae1e": { + "balance": "0x878678326eac9000000" + }, + "2dd325fdffb97b19995284afa5abdb574a1df16a": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "2dd578f7407dfbd548d05e95ccc39c485429626a": { + "balance": "0xe3aeb5737240a00000" + }, + "2dd8eeef87194abc2ce7585da1e35b7cea780cb7": { + "balance": "0x3635c6204739d98000" + }, + "2ddf40905769bcc426cb2c2938ffe077e1e89d98": { + "balance": "0xa2a15d09519be00000" + }, + "2de0964400c282bdd78a919c6bf77c6b5f796179": { + "balance": "0xad78ebc5ac6200000" + }, + "2de31afd189a13a76ff6fe73ead9f74bb5c4a629": { + "balance": "0x14542ba12a337c00000" + }, + "2dec98329d1f96c3a59caa7981755452d4da49d5": { + "balance": "0xad78ebc5ac6200000" + }, + "2dee90a28f192d676a8773232b56f18f239e2fad": { + "balance": "0x3efa7e747b6d1ad0000" + }, + "2e0880a34596230720f05ac8f065af8681dcb6c2": { + "balance": "0x152d02c7e14af6800000" + }, + "2e0c57b47150f95aa6a7e16ab9b1cbf54328979a": { + "balance": "0x56bc75e2d63100000" + }, + "2e10910ba6e0bc17e055556614cb87090f4d7e5b": { + "balance": "0xad78ebc5ac6200000" + }, + "2e24b597873bb141bdb237ea8a5ab747799af02d": { + "balance": "0x43c33c1937564800000" + }, + "2e2810dee44ae4dff3d86342ab126657d653c336": { + "balance": "0xad78ebc5ac6200000" + }, + "2e2cbd7ad82547b4f5ff8b3ab56f942a6445a3b0": { + "balance": "0xad78ebc5ac6200000" + }, + "2e2d7ea66b9f47d8cc52c01c52b6e191bc7d4786": { + "balance": "0xd8d4602c26bf6c0000" + }, + "2e439348df8a4277b22a768457d1158e97c40904": { + "balance": "0x2a1e9ff26fbf410000" + }, + "2e46fcee6a3bb145b594a243a3913fce5dad6fba": { + "balance": "0x21e19e0c9bab2400000" + }, + "2e47f287f498233713850d3126823cc67dcee255": { + "balance": "0xca9d9ea558b40000" + }, + "2e4ee1ae996aa0a1d92428d06652a6bea6d2d15d": { + "balance": "0x6c6b935b8bbd400000" + }, + "2e52912bc10ea39d54e293f7aed6b99a0f4c73be": { + "balance": "0x15af1d78b58c400000" + }, + "2e619f57abc1e987aa936ae3a2264962e7eb2d9a": { + "balance": "0x28fb9b8a8a53500000" + }, + "2e64a8d71111a22f4c5de1e039b336f68d398a7c": { + "balance": "0x6c6b935b8bbd400000" + }, + "2e6933543d4f2cc00b5350bd8068ba9243d6beb0": { + "balance": "0x6c6b935b8bbd400000" + }, + "2e7e05e29edda7e4ae25c5173543efd71f6d3d80": { + "balance": "0x14542ba12a337c00000" + }, + "2e7f465520ec35cc23d68e75651bb6689544a196": { + "balance": "0x38ec5b721a1a268000" + }, + "2e8eb30a716e5fe15c74233e039bfb1106e81d12": { + "balance": "0x56bc75e2d63100000" + }, + "2e9824b5c132111bca24ddfba7e575a5cd7296c1": { + "balance": "0x3a484516e6d7ffe0000" + }, + "2ea5fee63f337a376e4b918ea82148f94d48a626": { + "balance": "0x650f8e0dd293c50000" + }, + "2eaf4e2a46b789ccc288c8d1d9294e3fb0853896": { + "balance": "0x6c6b935b8bbd400000" + }, + "2eaff9f8f8113064d3957ac6d6e11eee42c8195d": { + "balance": "0x6acb3df27e1f880000" + }, + "2eba0c6ee5a1145c1c573984963a605d880a7a20": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "2ec95822eb887bc113b4712a4dfd7f13b097b5e7": { + "balance": "0x3635c9adc5dea00000" + }, + "2eca6a3c5d9f449d0956bd43fa7b4d7be8435958": { + "balance": "0x6c6bda69709cc20000" + }, + "2ecac504b233866eb5a4a99e7bd2901359e43b3d": { + "balance": "0x43c33c1937564800000" + }, + "2eebf59432b52892f9380bd140aa99dcf8ad0c0f": { + "balance": "0x83d6c7aab63600000" + }, + "2eeed50471a1a2bf53ee30b1232e6e9d80ef866d": { + "balance": "0x1158e460913d00000" + }, + "2eef6b1417d7b10ecfc19b123a8a89e73e526c58": { + "balance": "0x2086ac351052600000" + }, + "2ef869f0350b57d53478d701e3fee529bc911c75": { + "balance": "0x2b5e3af16b1880000" + }, + "2ef9e465716acacfb8c8252fa8e7bc7969ebf6e4": { + "balance": "0x959eb1c0e4ae200000" + }, + "2efc4c647dac6acac35577ad221758fef6616faa": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "2f13657526b177cad547c3908c840eff647b45d9": { + "balance": "0x3f76849cf1ee2c8000" + }, + "2f187d5a704d5a338c5b2876a090dce964284e29": { + "balance": "0xd8d726b7177a800000" + }, + "2f2523cc834f0086052402626296675186a8e582": { + "balance": "0x3635c9adc5dea000000" + }, + "2f282abbb6d4a3c3cd3b5ca812f7643e80305f06": { + "balance": "0x6449e84e47a8a80000" + }, + "2f2bba1b1796821a766fce64b84f28ec68f15aea": { + "balance": "0x1158e460913d00000" + }, + "2f315d9016e8ee5f536681202f9084b032544d4d": { + "balance": "0x383cd12b9e863c0000" + }, + "2f4da753430fc09e73acbccdcde9da647f2b5d37": { + "balance": "0xad78ebc5ac6200000" + }, + "2f5080b83f7e2dc0a1dd11b092ad042bff788f4c": { + "balance": "0xb4f8fb79231d2b8000" + }, + "2f61efa5819d705f2b1e4ee754aeb8a819506a75": { + "balance": "0x4f2591f896a6500000" + }, + "2f66bfbf2262efcc8d2bd0444fc5b0696298ff1e": { + "balance": "0x21ad935f79f76d00000" + }, + "2f6dce1330c59ef921602154572d4d4bacbd048a": { + "balance": "0x3635c9adc5dea00000" + }, + "2f7d3290851be5c6b4b43f7d4574329f61a792c3": { + "balance": "0x56bc75e2d63100000" + }, + "2f853817afd3b8f3b86e9f60ee77b5d97773c0e3": { + "balance": "0x4eaeea44e368b90000" + }, + "2fa491fb5920a6574ebd289f39c1b2430d2d9a6a": { + "balance": "0x6c6b935b8bbd400000" + }, + "2fb566c94bbba4e3cb67cdda7d5fad7131539102": { + "balance": "0x6c6b935b8bbd400000" + }, + "2fbb504a5dc527d3e3eb0085e2fc3c7dd538cb7a": { + "balance": "0x43c2b18aec3c0a8000" + }, + "2fbc85798a583598b522166d6e9dda121d627dbc": { + "balance": "0xad78ebc5ac6200000" + }, + "2fbcef3384d420e4bf61a0669990bc7054f1a5af": { + "balance": "0x6c6b935b8bbd400000" + }, + "2fc82ef076932341264f617a0c80dd571e6ae939": { + "balance": "0x18424f5f0b1b4e00000" + }, + "2fdd9b79df8df530ad63c20e62af431ae99216b8": { + "balance": "0x1236efcbcbb340000" + }, + "2fe0023f5722650f3a8ac01009125e74e3f82e9b": { + "balance": "0xa2a15d09519be00000" + }, + "2fe0cc424b53a31f0916be08ec81c50bf8eab0c1": { + "balance": "0x2086ac351052600000" + }, + "2fe13a8d0785de8758a5e41876c36e916cf75074": { + "balance": "0xd8d726b7177a800000" + }, + "2fea1b2f834f02fc54333f8a809f0438e5870aa9": { + "balance": "0x11854d0f9cee40000" + }, + "2fee36a49ee50ecf716f1047915646779f8ba03f": { + "balance": "0x394222c4da86d70000" + }, + "2fef81478a4b2e8098db5ff387ba2153f4e22b79": { + "balance": "0x3627e8f712373c0000" + }, + "2ff160c44f72a299b5ec2d71e28ce5446d2fcbaf": { + "balance": "0x138400eca364a00000" + }, + "2ff1ca55fd9cec1b1fe9f0a9abb74c513c1e2aaa": { + "balance": "0xa2a15d09519be00000" + }, + "2ff5cab12c0d957fd333f382eeb75107a64cb8e8": { + "balance": "0x21e19e0c9bab2400000" + }, + "2ff830cf55fb00d5a0e03514fecd44314bd6d9f1": { + "balance": "0x21e19e0c9bab2400000" + }, + "2ffe93ec1a5636e9ee34af70dff52682e6ff7079": { + "balance": "0x6c6b935b8bbd400000" + }, + "30037988702671acbe892c03fe5788aa98af287a": { + "balance": "0x97c9ce4cf6d5c00000" + }, + "30248d58e414b20fed3a6c482b59d9d8f5a4b7e2": { + "balance": "0x340aad21b3b700000" + }, + "303139bc596403d5d3931f774c66c4ba467454db": { + "balance": "0x5c25e14aea283f0000" + }, + "30380087786965149e81423b15e313ba32c5c783": { + "balance": "0xfc936392801c0000" + }, + "303a30ac4286ae17cf483dad7b870c6bd64d7b4a": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "303fbaebbe46b35b6e5b74946a5f99bc1585cae7": { + "balance": "0x2f9ac0695f5bba0000" + }, + "3041445a33ba158741160d9c344eb88e5c306f94": { + "balance": "0x340aad21b3b700000" + }, + "30480164bcd84974ebc0d90c9b9afab626cd1c73": { + "balance": "0x2b5e3af16b18800000" + }, + "304ec69a74545721d7316aef4dcfb41ac59ee2f0": { + "balance": "0xad78ebc5ac6200000" + }, + "30511832918d8034a7bee72ef2bfee440ecbbcf6": { + "balance": "0x368c8623a8b4d100000" + }, + "30513fca9f36fd788cfea7a340e86df98294a244": { + "balance": "0x183b5f03b1479c0000" + }, + "3055efd26029e0d11b930df4f53b162c8c3fd2ce": { + "balance": "0x1b1a089237073d0000" + }, + "305d26c10bdc103f6b9c21272eb7cb2d9108c47e": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "305f78d618b990b4295bac8a2dfa262884f804ea": { + "balance": "0xd8d726b7177a800000" + }, + "3064899a963c4779cbf613cd6980846af1e6ec65": { + "balance": "0x17b773ce6e5df0a0000" + }, + "30730466b8eb6dc90d5496aa76a3472d7dbe0bbe": { + "balance": "0x6c68ccd09b022c0000" + }, + "30742ccdf4abbcd005681f8159345c9e79054b1a": { + "balance": "0x243d4d18229ca20000" + }, + "3083ef0ed4c4401196774a95cf4edc83edc1484f": { + "balance": "0x23ffb7ed6565d6400000" + }, + "308dd21cebe755126704b48c0f0dc234c60ba9b1": { + "balance": "0xad78ebc5ac6200000" + }, + "3090f8130ec44466afadb36ed3c926133963677b": { + "balance": "0xd8d726b7177a800000" + }, + "309544b6232c3dd737f945a03193d19b5f3f65b9": { + "balance": "0x3af342f67ef6c80000" + }, + "3096dca34108085bcf04ae72b94574a13e1a3e1d": { + "balance": "0xad78ebc5ac6200000" + }, + "3098b65db93ecacaf7353c48808390a223d57684": { + "balance": "0x186484cf7bb6a48000" + }, + "30a9da72574c51e7ee0904ba1f73a6b7b83b9b9d": { + "balance": "0x11854d0f9cee40000" + }, + "30acd858875fa24eef0d572fc7d62aad0ebddc35": { + "balance": "0x15af1d78b58c400000" + }, + "30b66150f1a63457023fdd45d0cc6cb54e0c0f06": { + "balance": "0x3635c9adc5dea00000" + }, + "30bb4357cd6910c86d2238bf727cbe8156680e62": { + "balance": "0x56bf91b1a65eb0000" + }, + "30bf61b2d877fe10635126326fa189e4b0b1c3b0": { + "balance": "0x37b48985a5d7e60000" + }, + "30c01142907acb1565f70438b9980ae731818738": { + "balance": "0x6c6b935b8bbd400000" + }, + "30c26a8e971baa1855d633ba703f028cc7873140": { + "balance": "0x21e19e0c9bab2400000" + }, + "30db6b9b107e62102f434a9dd0960c2021f5ce4c": { + "balance": "0x2083179b6e42530000" + }, + "30e33358fc21c85006e40f32357dc8895940aaf0": { + "balance": "0x678a932062e4180000" + }, + "30e60900cacc7203f314dc604347255167fc2a0f": { + "balance": "0x6c6b935b8bbd400000" + }, + "30e789b3d2465e946e6210fa5b35de4e8c93085f": { + "balance": "0x6c6b935b8bbd400000" + }, + "30e9698cf1e08a9d048bd8d8048f28be7ed9409f": { + "balance": "0x16a6502f15a1e540000" + }, + "30e9d5a0088f1ddb2fd380e2a049192266c51cbf": { + "balance": "0xaacacd9b9e22b0000" + }, + "30eac740e4f02cb56eef0526e5d300322600d03e": { + "balance": "0x6acb3df27e1f880000" + }, + "30ec9392244a2108c987bc5cdde0ed9f837a817b": { + "balance": "0x549925f6c9c5250000" + }, + "30ed11b77bc17e5e6694c8bc5b6e4798f68d9ca7": { + "balance": "0x1e6fb3421fe0299e0000" + }, + "30f7d025d16f7bee105580486f9f561c7bae3fef": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "30fbe5885f9fcce9ea5edb82ed4a1196dd259aed": { + "balance": "0x119e47f21381f400000" + }, + "31047d703f63b93424fbbd6e2f1f9e74de13e709": { + "balance": "0x9a8166f7e6b2a78000" + }, + "31313ffd635bf2f3324841a88c07ed146144ceeb": { + "balance": "0x6acb3df27e1f880000" + }, + "3159e90c48a915904adfe292b22fa5fd5e72796b": { + "balance": "0x36afe98f2606100000" + }, + "315db7439fa1d5b423afa7dd7198c1cf74c918bc": { + "balance": "0x2086ac351052600000" + }, + "315ef2da620fd330d12ee55de5f329a696e0a968": { + "balance": "0x821ab0d4414980000" + }, + "316e92a91bbda68b9e2f98b3c048934e3cc0b416": { + "balance": "0x6c6b935b8bbd400000" + }, + "316eb4e47df71b42e16d6fe46825b7327baf3124": { + "balance": "0xd8d726b7177a800000" + }, + "3171877e9d820cc618fc0919b29efd333fda4934": { + "balance": "0x3635c9adc5dea00000" + }, + "317cf4a23cb191cdc56312c29d15e210b3b9b784": { + "balance": "0x7ce66c50e28400000" + }, + "318b2ea5f0aaa879c4d5e548ac9d92a0c67487b7": { + "balance": "0xad78ebc5ac6200000" + }, + "318c76ecfd8af68d70555352e1f601e35988042d": { + "balance": "0x1b31192e68c7f00000" + }, + "318f1f8bd220b0558b95fb33100ffdbb640d7ca6": { + "balance": "0xd8d726b7177a800000" + }, + "31aa3b1ebe8c4dbcb6a708b1d74831e60e497660": { + "balance": "0x15af1d78b58c400000" + }, + "31ab088966ecc7229258f6098fce68cf39b38485": { + "balance": "0x3635c9adc5dea00000" + }, + "31ad4d9946ef09d8e988d946b1227f9141901736": { + "balance": "0x4d853c8f89089800000" + }, + "31b43b015d0081643c6cda46a7073a6dfdbca825": { + "balance": "0xa97916520cd18e80000" + }, + "31ccc616b3118268e75d9ab8996c8858ebd7f3c3": { + "balance": "0x15ae0f771ca1520000" + }, + "31d81d526c195e3f10b5c6db52b5e59afbe0a995": { + "balance": "0xe4fbc69449f200000" + }, + "31e9c00f0c206a4e4e7e0522170dc81e88f3eb70": { + "balance": "0x918ddc3a42a3d40000" + }, + "31ea12d49a35a740780ddeeaece84c0835b26270": { + "balance": "0xad78ebc5ac6200000" + }, + "31ea6eab19d00764e9a95e183f2b1b22fc7dc40f": { + "balance": "0x1158e460913d00000" + }, + "31eb123c95c82bf685ace7a75a1881a289efca10": { + "balance": "0x31e009607371bd0000" + }, + "31ed858788bda4d5270992221cc04206ec62610d": { + "balance": "0x3fc0474948f3600000" + }, + "31f006f3494ed6c16eb92aaf9044fa8abb5fd5a3": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "3201259caf734ad7581c561051ba0bca7fd6946b": { + "balance": "0x261dd1ce2f2088800000" + }, + "32034e8581d9484e8af42a28df190132ec29c466": { + "balance": "0xbb9125542263900000" + }, + "322021022678a0166d204b3aaa7ad4ec4b88b7d0": { + "balance": "0x15af1d78b58c400000" + }, + "3225c1ca5f2a9c88156bb7d9cdc44a326653c214": { + "balance": "0x15af1d78b58c400000" + }, + "322788b5e29bf4f5f55ae1ddb32085fda91b8ebe": { + "balance": "0xad78ebc5ac6200000" + }, + "322d6f9a140d213f4c80cd051afe25c620bf4c7d": { + "balance": "0x1158e460913d00000" + }, + "322e5c43b0f524389655a9b3ff24f2d4db3da10f": { + "balance": "0xfc13b69b3e7e680000" + }, + "323486ca64b375474fb2b759a9e7a135859bd9f6": { + "balance": "0x15af1d78b58c400000" + }, + "323749a3b971959e46c8b4822dcafaf7aaf9bd6e": { + "balance": "0x11671a5b245700000" + }, + "323aad41df4b6fc8fece8c93958aa901fa680843": { + "balance": "0x34957444b840e80000" + }, + "323b3cfe3ee62bbde2a261e53cb3ecc05810f2c6": { + "balance": "0x2eb8eb1a172dcb80000" + }, + "323fca5ed77f699f9d9930f5ceeff8e56f59f03c": { + "balance": "0x487a9a304539440000" + }, + "32485c818728c197fea487fbb6e829159eba8370": { + "balance": "0x3921b413bc4ec08000" + }, + "3250e3e858c26adeccadf36a5663c22aa84c4170": { + "balance": "0x10f0cf064dd59200000" + }, + "3259bd2fddfbbc6fbad3b6e874f0bbc02cda18b5": { + "balance": "0x2846056495b0d188000" + }, + "3275496fd4dd8931fd69fb0a0b04c4d1ff879ef5": { + "balance": "0x182d7e4cfda0380000" + }, + "327bb49e754f6fb4f733c6e06f3989b4f65d4bee": { + "balance": "0x1158e460913d00000" + }, + "3282791d6fd713f1e94f4bfd565eaa78b3a0599d": { + "balance": "0x487a9a304539440000" + }, + "3283eb7f9137dd39bed55ffe6b8dc845f3e1a079": { + "balance": "0x3970ae92155780000" + }, + "32860997d730b2d83b73241a25d3667d51c908ef": { + "balance": "0x1b1a089237073d0000" + }, + "3286d1bc657a312c8847d93cb3cb7950f2b0c6e3": { + "balance": "0x43c33c1937564800000" + }, + "32a20d028e2c6218b9d95b445c771524636a22ef": { + "balance": "0x202fefbf2d7c2f00000" + }, + "32a70691255c9fc9791a4f75c8b81f388e0a2503": { + "balance": "0x35659ef93f0fc40000" + }, + "32b7feebc5c59bf65e861c4c0be42a7611a5541a": { + "balance": "0x77e9aaa8525c100000" + }, + "32ba9a7d0423e03a525fe2ebeb661d2085778bd8": { + "balance": "0x43c33c1937564800000" + }, + "32bb2e9693e4e085344d2f0dbd46a283e3a087fd": { + "balance": "0x15af1d78b58c400000" + }, + "32c2fde2b6aabb80e5aea2b949a217f3cb092283": { + "balance": "0x1306160afdf20378000" + }, + "32d950d5e93ea1d5b48db4714f867b0320b31c0f": { + "balance": "0x3708baed3d68900000" + }, + "32dbb6716c54e83165829a4abb36757849b6e47d": { + "balance": "0x3635c9adc5dea00000" + }, + "32eb64be1b5dede408c6bdefbe6e405c16b7ed02": { + "balance": "0x6acb3df27e1f880000" + }, + "32ef5cdc671df5562a901aee5db716b9be76dcf6": { + "balance": "0x6c6b935b8bbd400000" + }, + "32f29e8727a74c6b4301e3ffff0687c1b870dae9": { + "balance": "0x3635c9adc5dea00000" + }, + "32fa0e86cd087dd68d693190f32d93310909ed53": { + "balance": "0xd8d726b7177a800000" + }, + "32fbeed6f626fcdfd51acafb730b9eeff612f564": { + "balance": "0x6c6b935b8bbd400000" + }, + "3300fb149aded65bcba6c04e9cd6b7a03b893bb1": { + "balance": "0xfc936392801c0000" + }, + "3301d9ca2f3bfe026279cd6819f79a293d98156e": { + "balance": "0xa968163f0a57b400000" + }, + "3308b03466c27a17dfe1aafceb81e16d2934566f": { + "balance": "0x39992648a23c8a00000" + }, + "331a1c26cc6994cdd3c14bece276ffff4b9df77c": { + "balance": "0xfa7aeddf4f068000" + }, + "3326b88de806184454c40b27f309d9dd6dcfb978": { + "balance": "0x3ca5c66d9bc44300000" + }, + "3329eb3baf4345d600ced40e6e9975656f113742": { + "balance": "0x10f08eda8e555098000" + }, + "33320dd90f2baa110dd334872a998f148426453c": { + "balance": "0x36356633ebd8ea0000" + }, + "3336c3ef6e8b50ee90e037b164b7a8ea5faac65d": { + "balance": "0xec8a3a71c22540000" + }, + "33380c6fff5acd2651309629db9a71bf3f20c5ba": { + "balance": "0x368c8623a8b4d100000" + }, + "333ad1596401e05aea2d36ca47318ef4cd2cb3df": { + "balance": "0x9dc05cce28c2b80000" + }, + "334340ee4b9cdc81f850a75116d50ee9b69825bf": { + "balance": "0x6c6b935b8bbd400000" + }, + "33481e856ebed48ea708a27426ef28e867f57cd1": { + "balance": "0xad78ebc5ac6200000" + }, + "33565ba9da2c03e778ce12294f081dfe81064d24": { + "balance": "0x3635c9adc5dea000000" + }, + "33581cee233088c0860d944e0cf1ceabb8261c2e": { + "balance": "0xb98bc829a6f90000" + }, + "335858f749f169cabcfe52b796e3c11ec47ea3c2": { + "balance": "0xad78ebc5ac6200000" + }, + "335e22025b7a77c3a074c78b8e3dfe071341946e": { + "balance": "0x227ca730ab3f6ac0000" + }, + "33629bd52f0e107bc071176c64df108f64777d49": { + "balance": "0x1cfdd7468216e8000" + }, + "337b3bdf86d713dbd07b5dbfcc022b7a7b1946ae": { + "balance": "0xd7c198710e66b00000" + }, + "337cfe1157a5c6912010dd561533791769c2b6a6": { + "balance": "0x3635c9adc5dea00000" + }, + "33b336f5ba5edb7b1ccc7eb1a0d984c1231d0edc": { + "balance": "0x6c6b935b8bbd400000" + }, + "33c407133b84b3ca4c3ded1f4658900c38101624": { + "balance": "0x97c9ce4cf6d5c00000" + }, + "33d172ab075c51db1cd40a8ca8dbff0d93b843bb": { + "balance": "0x136780510d12de38000" + }, + "33e9b71823952e1f66958c278fc28b1196a6c5a4": { + "balance": "0x56bc75e2d63100000" + }, + "33ea6b7855e05b07ab80dab1e14de9b649e99b6c": { + "balance": "0x1cd6fbad57dbd00000" + }, + "33f15223310d44de8b6636685f3a4c3d9c5655a5": { + "balance": "0xd9462c6cb4b5a0000" + }, + "33f4a6471eb1bca6a9f85b3b4872e10755c82be1": { + "balance": "0x6c6b935b8bbd400000" + }, + "33fb577a4d214fe010d32cca7c3eeda63f87ceef": { + "balance": "0x3635c9adc5dea00000" + }, + "33fd718f0b91b5cec88a5dc15eecf0ecefa4ef3d": { + "balance": "0x177224aa844c720000" + }, + "341480cc8cb476f8d01ff30812e7c70e05afaf5d": { + "balance": "0x6c6b935b8bbd400000" + }, + "34272d5e7574315dcae9abbd317bac90289d4765": { + "balance": "0x62a992e53a0af00000" + }, + "3430a16381f869f6ea5423915855e800883525a9": { + "balance": "0x3ca5c66d9bc44300000" + }, + "34318625818ec13f11835ae97353ce377d6f590a": { + "balance": "0x52663ccab1e1c00000" + }, + "34393c5d91b9de597203e75bac4309b5fa3d28c3": { + "balance": "0xa844a7424d9c80000" + }, + "3439998b247cb4bf8bc80a6d2b3527f1dfe9a6d2": { + "balance": "0x796e3ea3f8ab00000" + }, + "34437d1465640b136cb5841c3f934f9ba0b7097d": { + "balance": "0x960db77681e940000" + }, + "344a8db086faed4efc37131b3a22b0782dad7095": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "34664d220fa7f37958024a3332d684bcc6d4c8bd": { + "balance": "0x21e19e0c9bab2400000" + }, + "3466f67e39636c01f43b3a21a0e8529325c08624": { + "balance": "0x2db1167650acd80000" + }, + "3485361ee6bf06ef6508ccd23d94641f814d3e2f": { + "balance": "0x6c6b935b8bbd400000" + }, + "3485f621256433b98a4200dad857efe55937ec98": { + "balance": "0x6c6b935b8bbd400000" + }, + "34958a46d30e30b273ecc6e5d358a212e5307e8c": { + "balance": "0x6c6b935b8bbd400000" + }, + "3497dd66fd118071a78c2cb36e40b6651cc82598": { + "balance": "0x5f1016b5076d00000" + }, + "349a816b17ab3d27bbc0ae0051f6a070be1ff29d": { + "balance": "0x21e19e0c9bab2400000" + }, + "349d2c918fd09e2807318e66ce432909176bd50b": { + "balance": "0x3cb71f51fc55800000" + }, + "34a0431fff5ead927f3c69649616dc6e97945f6f": { + "balance": "0x15af1d78b58c400000" + }, + "34a85d6d243fb1dfb7d1d2d44f536e947a4cee9e": { + "balance": "0x43c33c1937564800000" + }, + "34a901a69f036bcf9f7843c0ba01b426e8c3dc2b": { + "balance": "0xd8d726b7177a800000" + }, + "34b454416e9fb4274e6addf853428a0198d62ee1": { + "balance": "0x161042779f1ffc0000" + }, + "34c8e5f1330fcb4b14ca75cb2580a4b93d204e36": { + "balance": "0x6c6b935b8bbd400000" + }, + "34e2849bea583ab0cc37975190f322b395055582": { + "balance": "0x1a5c5e857fdf2b20000" + }, + "34fa7792bad8bbd7ff64056214a33eb6600c1ea8": { + "balance": "0x2b5e3af16b1880000" + }, + "34ff26eb60a8d1a95a489fae136ee91d4e58084c": { + "balance": "0x2086ac351052600000" + }, + "34ff582952ff24458f7b13d51f0b4f987022c1fe": { + "balance": "0x9806de3da6e9780000" + }, + "35106ba94e8563d4b3cb3c5c692c10e604b7ced8": { + "balance": "0x6c6b935b8bbd400000" + }, + "35145f620397c69cb8e00962961f0f4886643989": { + "balance": "0x14542ba12a337c00000" + }, + "35147430c3106500e79fa2f502462e94703c23b1": { + "balance": "0x6c6acc67d7b1d40000" + }, + "351787843505f8e4eff46566cce6a59f4d1c5fe7": { + "balance": "0x1f5718987664b480000" + }, + "351f16e5e0735af56751b0e225b2421171394090": { + "balance": "0x2d4ca05e2b43ca80000" + }, + "3524a000234ebaaf0789a134a2a417383ce5282a": { + "balance": "0x1317955947d8e2c0000" + }, + "3526eece1a6bdc3ee7b400fe935b48463f31bed7": { + "balance": "0x477879b6d14300000" + }, + "352a785f4a921632504ce5d015f83c49aa838d6d": { + "balance": "0xe9e7e0fb35b7780000" + }, + "352d29a26e8a41818181746467f582e6e84012e0": { + "balance": "0x14542ba12a337c00000" + }, + "352e77c861696ef96ad54934f894aa8ea35151dd": { + "balance": "0x3635c9adc5dea00000" + }, + "352f25babf4a690673e35195efa8f79d05848aad": { + "balance": "0xe253c39be6e7dc00000" + }, + "3536453322c1466cb905af5c335ca8db74bff1e6": { + "balance": "0x183b5f03b1479c0000" + }, + "353dbec42f92b50f975129b93c4c997375f09073": { + "balance": "0x6c5db2a4d815dc0000" + }, + "3540c7bd7a8442d5bee21a2180a1c4edff1649e0": { + "balance": "0x432eac4c6f05b98000" + }, + "3549bd40bbbc2b30095cac8be2c07a0588e0aed6": { + "balance": "0x1158e460913d00000" + }, + "3552a496eba67f12be6eedab360cd13661dc7480": { + "balance": "0x1043561a8829300000" + }, + "3554947b7b947b0040da52ca180925c6d3b88ffe": { + "balance": "0x39fbae8d042dd0000" + }, + "355c0c39f5d5700b41d375b3f17851dcd52401f9": { + "balance": "0xd7b3b7ba5abf4c0000" + }, + "355ccfe0e77d557b971be1a558bc02df9eee0594": { + "balance": "0x5f5cb1afc865280000" + }, + "3571cf7ad304ecaee595792f4bbfa484418549d6": { + "balance": "0x13bcd0d892d9e160000" + }, + "3575c770668a9d179f1ef768c293f80166e2aa3d": { + "balance": "0x19b21248a3ef280000" + }, + "357a02c0a9dfe287de447fb67a70ec5b62366647": { + "balance": "0x1731790534df20000" + }, + "35855ec641ab9e081ed0c2a6dcd81354d0244a87": { + "balance": "0x4127abe993a7aa8000" + }, + "3588895ac9fbafec012092dc05c0c302d90740fa": { + "balance": "0xa2a15d09519be00000" + }, + "3599493ce65772cf93e98af1195ec0955dc98002": { + "balance": "0x5151590c67b3280000" + }, + "35a08081799173e001cc5bd46a02406dc95d1787": { + "balance": "0x21e19e0c9bab2400000" + }, + "35a549e8fd6c368d6dcca6d2e7d18e4db95f5284": { + "balance": "0x1b1a089237073d0000" + }, + "35a6885083c899dabbf530ed6c12f4dd3a204cf5": { + "balance": "0xad78ebc5ac6200000" + }, + "35aaa0465d1c260c420fa30e2629869fb6559207": { + "balance": "0x263781e0e087c80000" + }, + "35ac1d3ed7464fa3db14e7729213ceaa378c095e": { + "balance": "0x52663ccab1e1c00000" + }, + "35af040a0cc2337a76af288154c7561e1a233349": { + "balance": "0x3635c9adc5dea00000" + }, + "35b03ea4245736f57b85d2eb79628f036ddcd705": { + "balance": "0xd8d726b7177a800000" + }, + "35bd246865fab490ac087ac1f1d4f2c10d0cda03": { + "balance": "0x15af1d78b58c400000" + }, + "35bf6688522f35467a7f75302314c02ba176800e": { + "balance": "0x3af418202d954e00000" + }, + "35c8adc11125432b3b77acd64625fe58ebee9d66": { + "balance": "0x6c6b935b8bbd400000" + }, + "35d2970f49dcc81ea9ee707e9c8a0ab2a8bb7463": { + "balance": "0x4e1003b28d92800000" + }, + "35e096120deaa5c1ecb1645e2ccb8b4edbd9299a": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "35ea2163a38cdf9a123f82a5ec00258dae0bc767": { + "balance": "0xd8d726b7177a800000" + }, + "35f1da127b83376f1b88c82a3359f67a5e67dd50": { + "balance": "0x678a932062e4180000" + }, + "35f2949cf78bc219bb4f01907cf3b4b3d3865482": { + "balance": "0xfb5c86c92e4340000" + }, + "35f5860149e4bbc04b8ac5b272be55ad1aca58e0": { + "balance": "0xad78ebc5ac6200000" + }, + "3602458da86f6d6a9d9eb03daf97fe5619d442fa": { + "balance": "0x6c6b935b8bbd400000" + }, + "3605372d93a9010988018f9f315d032ed1880fa1": { + "balance": "0x1b1bcf51896a7d0000" + }, + "3616d448985f5d32aefa8b93a993e094bd854986": { + "balance": "0xb227f63be813c0000" + }, + "3616fb46c81578c9c8eb4d3bf880451a88379d7d": { + "balance": "0xad78ebc5ac6200000" + }, + "361c75931696bc3d427d93e76c77fd13b241f6f4": { + "balance": "0x1dc5d8fc266dd60000" + }, + "361d9ed80b5bd27cf9f1226f26753258ee5f9b3f": { + "balance": "0xbf6914ba7d72c20000" + }, + "361f3ba9ed956b770f257d3672fe1ff9f7b0240c": { + "balance": "0x2086ac351052600000" + }, + "36227cdfa0fd3b9d7e6a744685f5be9aa366a7f0": { + "balance": "0xac2730ee9c6c18000" + }, + "362fbcb10662370a068fc2652602a2577937cce6": { + "balance": "0xad78ebc5ac6200000" + }, + "3630c5e565ceaa8a0f0ffe32875eae2a6ce63c19": { + "balance": "0x937722b3774d00000" + }, + "36339f84a5c2b44ce53dfdb6d4f97df78212a7df": { + "balance": "0x116f18b81715a00000" + }, + "36343aeca07b6ed58a0e62fa4ecb498a124fc971": { + "balance": "0x1043561a8829300000" + }, + "366175403481e0ab15bb514615cbb989ebc68f82": { + "balance": "0x6c6b935b8bbd400000" + }, + "36726f3b885a24f92996da81625ec8ad16d8cbe6": { + "balance": "0x53af75d18148578000" + }, + "3673954399f6dfbe671818259bb278e2e92ee315": { + "balance": "0x2a5a058fc295ed000000" + }, + "36758e049cd98bcea12277a676f9297362890023": { + "balance": "0xd8d726b7177a800000" + }, + "367f59cc82795329384e41e1283115e791f26a01": { + "balance": "0x6c6b935b8bbd400000" + }, + "36810ff9d213a271eda2b8aa798be654fa4bbe06": { + "balance": "0x6c6b935b8bbd400000" + }, + "368c5414b56b8455171fbf076220c1cba4b5ca31": { + "balance": "0x1e3ef911e83d720000" + }, + "3690246ba3c80679e22eac4412a1aefce6d7cd82": { + "balance": "0x43c33c1937564800000" + }, + "36928b55bc861509d51c8cf1d546bfec6e3e90af": { + "balance": "0x6acb3df27e1f880000" + }, + "369822f5578b40dd1f4471706b22cd971352da6b": { + "balance": "0x12c1b6eed03d280000" + }, + "369ef761195f3a373e24ece6cd22520fe0b9e86e": { + "balance": "0x1cffafc94db2088000" + }, + "36a08fd6fd1ac17ce15ed57eefb12a2be28188bf": { + "balance": "0x487a9a304539440000" + }, + "36a0e61e1be47fa87e30d32888ee0330901ca991": { + "balance": "0x1158e460913d00000" + }, + "36b2c85e3aeeebb70d63c4a4730ce2e8e88a3624": { + "balance": "0x21e19e0c9bab2400000" + }, + "36bf43ff35df90908824336c9b31ce33067e2f50": { + "balance": "0x49721510c1c1e9480000" + }, + "36bfe1fa3b7b70c172eb042f6819a8972595413e": { + "balance": "0x3635c9adc5dea00000" + }, + "36c510bf8d6e569bf2f37d47265dbcb502ff2bce": { + "balance": "0x65a4da25d3016c00000" + }, + "36d85dc3683156e63bf880a9fab7788cf8143a27": { + "balance": "0x43c33c1937564800000" + }, + "36df8f883c1273ec8a171f7a33cfd649b1fe6075": { + "balance": "0xc52484ac416890000" + }, + "36e156610cd8ff64e780d89d0054385ca76755aa": { + "balance": "0x2f6f10780d22cc00000" + }, + "36fec62c2c425e219b18448ad757009d8c54026f": { + "balance": "0x15af1d78b58c400000" + }, + "3700e3027424d939dbde5d42fb78f6c4dbec1a8f": { + "balance": "0x22b1c8c1227a00000" + }, + "3702e704cc21617439ad4ea27a5714f2fda1e932": { + "balance": "0x3635c9adc5dea00000" + }, + "3703350c4d6fe337342cddc65bf1e2386bf3f9b2": { + "balance": "0x6d8121a194d1100000" + }, + "3708e59de6b4055088782902e0579c7201a8bf50": { + "balance": "0x2a5a058fc295ed000000" + }, + "3712367e5e55a96d5a19168f6eb2bc7e9971f869": { + "balance": "0x3635c9adc5dea00000" + }, + "37195a635dcc62f56a718049d47e8f9f96832891": { + "balance": "0x6acb3df27e1f880000" + }, + "3727341f26c12001e378405ee38b2d8464ec7140": { + "balance": "0x6c6b935b8bbd400000" + }, + "372e453a6b629f27678cc8aeb5e57ce85ec0aef9": { + "balance": "0xad78ebc5ac6200000" + }, + "3734cb187491ede713ae5b3b2d12284af46b8101": { + "balance": "0xa2a15d09519be00000" + }, + "3737216ee91f177732fb58fa4097267207e2cf55": { + "balance": "0x52663ccab1e1c00000" + }, + "373c547e0cb5ce632e1c5ad66155720c01c40995": { + "balance": "0xfe54dcdce6c55a0000" + }, + "376cd7577383e902951b60a2017ba7ea29e33576": { + "balance": "0x6c6b935b8bbd400000" + }, + "378ea1dc8edc19bae82638029ea8752ce98bcfcd": { + "balance": "0x6c6b935b8bbd400000" + }, + "378f37243f3ff0bef5e1dc85eb4308d9340c29f9": { + "balance": "0x6c6e59e67c78540000" + }, + "37959c20b7e9931d72f5a8ae869dafddad3b6d5c": { + "balance": "0xad78ebc5ac6200000" + }, + "379a7f755a81a17edb7daaa28afc665dfa6be63a": { + "balance": "0x15af1d78b58c40000" + }, + "379c7166849bc24a02d6535e2def13daeef8aa8d": { + "balance": "0x56bc75e2d63100000" + }, + "37a05aceb9395c8635a39a7c5d266ae610d10bf2": { + "balance": "0x65a4da25d3016c00000" + }, + "37a10451f36166cf643dd2de6c1cbba8a011cfa3": { + "balance": "0x14998f32ac78700000" + }, + "37a7a6ff4ea3d60ec307ca516a48d3053bb79cbb": { + "balance": "0x6c6b935b8bbd400000" + }, + "37ab66083a4fa23848b886f9e66d79cdc150cc70": { + "balance": "0x12be22ffb5ec00380000" + }, + "37ac29bda93f497bc4aeaab935452c431510341e": { + "balance": "0x35659ef93f0fc40000" + }, + "37b8beac7b1ca38829d61ab552c766f48a10c32f": { + "balance": "0x15af1d78b58c400000" + }, + "37bbc47212d82fcb5ee08f5225ecc2041ad2da7d": { + "balance": "0xb1cf24ddd0b1400000" + }, + "37cb868d2c3f95b257611eb34a4188d58b749802": { + "balance": "0x6c6b935b8bbd400000" + }, + "37d980a12ee3bf23cc5cdb63b4ae45691f74c837": { + "balance": "0x6c6b935b8bbd400000" + }, + "37e169a93808d8035698f815c7235613c1e659f2": { + "balance": "0x3635c9adc5dea00000" + }, + "37eada93c475ded2f7e15e7787d400470fa52062": { + "balance": "0xad78ebc5ac6200000" + }, + "37fac1e6bc122e936dfb84de0c4bef6e0d60c2d7": { + "balance": "0x6c6b935b8bbd400000" + }, + "3807eff43aa97c76910a19752dd715ee0182d94e": { + "balance": "0xd90156f6fc2fb0000" + }, + "3815b0743f94fc8cc8654fd9d597ed7d8b77c57e": { + "balance": "0x2809d429d896750000" + }, + "381db4c8465df446a4ce15bf81d47e2f17c980bf": { + "balance": "0x6c6b935b8bbd4000000" + }, + "38202c5cd7078d4f887673ab07109ad8ada89720": { + "balance": "0x3635c9adc5dea00000" + }, + "3821862493242c0aeb84b90de05d250c1e50c074": { + "balance": "0x11776c58e946dc0000" + }, + "382591e7217b435e8e884cdbf415fe377a6fe29e": { + "balance": "0x1b2df9d219f57980000" + }, + "382ba76db41b75606dd48a48f0137e9174e031b6": { + "balance": "0x1158e460913d00000" + }, + "3831757eae7557cb8a37a4b10644b63e4d3b3c75": { + "balance": "0xad78ebc5ac6200000" + }, + "383304dd7a5720b29c1a10f60342219f48032f80": { + "balance": "0x12f939c99edab800000" + }, + "383a7c899ee18bc214969870bc7482f6d8f3570e": { + "balance": "0x21e19e0c9bab2400000" + }, + "38430e931d93be01b4c3ef0dc535f1e0a9610063": { + "balance": "0x21e19e0c9bab2400000" + }, + "38439aaa24e3636f3a18e020ea1da7e145160d86": { + "balance": "0x8cf23f909c0fa00000" + }, + "38458e0685573cb4d28f53098829904570179266": { + "balance": "0x22b1c8c1227a00000" + }, + "3847667038f33b01c1cc795d8daf5475eff5a0d4": { + "balance": "0x277b9bf4246c410000" + }, + "38643babea6011316cc797d9b093c897a17bdae7": { + "balance": "0x1220bb7445daa00000" + }, + "38695fc7e1367ceb163ebb053751f9f68ddb07a0": { + "balance": "0x6c6b935b8bbd400000" + }, + "3872f48dc5e3f817bc6b2ad2d030fc5e0471193d": { + "balance": "0xd8d726b7177a800000" + }, + "387eeafd6b4009deaf8bd5b85a72983a8dcc3487": { + "balance": "0xd8d726b7177a800000" + }, + "3881defae1c07b3ce04c78abe26b0cdc8d73f010": { + "balance": "0xad78ebc5ac6200000" + }, + "3883becc08b9be68ad3b0836aac3b620dc0017ef": { + "balance": "0x6c6b935b8bbd400000" + }, + "3885fee67107dc3a3c741ee290c98918c9b99397": { + "balance": "0x1158e460913d00000" + }, + "3887192c7f705006b630091276b39ac680448d6b": { + "balance": "0x340aad21b3b700000" + }, + "38898bbb4553e00bbfd0cf268b2fc464d154add5": { + "balance": "0x1158e460913d000000" + }, + "388bdcdae794fc44082e667501344118ea96cd96": { + "balance": "0x5a87e7d7f5f6580000" + }, + "388c85a9b9207d8146033fe38143f6d34b595c47": { + "balance": "0xad78ebc5ac6200000" + }, + "3896ad743579d38e2302454d1fb6e2ab69e01bfd": { + "balance": "0x65ea3db75546600000" + }, + "38a3dccf2fcfe0c91a2624bd0cbf88ee4a076c33": { + "balance": "0x6c6b935b8bbd400000" + }, + "38a744efa6d5c2137defef8ef9187b649eee1c78": { + "balance": "0xd8d726b7177a800000" + }, + "38ac664ee8e0795e4275cb852bcba6a479ad9c8d": { + "balance": "0x1158e460913d00000" + }, + "38b2197106123387a0d4de368431a8bacdda30e2": { + "balance": "0x1158e460913d00000" + }, + "38b3965c21fa893931079beacfffaf153678b6eb": { + "balance": "0x93c6a0a51e2670000" + }, + "38b403fb1fb7c14559a2d6f6564a5552bca39aff": { + "balance": "0x6c6b935b8bbd400000" + }, + "38b50146e71916a5448de12a4d742135dcf39833": { + "balance": "0x6d190c475169a200000" + }, + "38bf2a1f7a69de0e2546adb808b36335645da9ff": { + "balance": "0x6c700439d9b5600000" + }, + "38c10b90c859cbb7815692f99dae520ab5febf5e": { + "balance": "0x2c9e4966fa5cf240000" + }, + "38c7851f5ffd4cee98df30f3b25597af8a6ca263": { + "balance": "0x8ead3a2f7d7e180000" + }, + "38d2e9154964b41c8d50a7487d391e7ee2c3d3c2": { + "balance": "0xbdbc41e0348b300000" + }, + "38da1ba2de9e2c954b092dd9d81204fd016ba016": { + "balance": "0x2268ed01f34b3300000" + }, + "38df0c4abe7ded5fe068eadf154ac691774324a4": { + "balance": "0x61093d7c2c6d380000" + }, + "38e2af73393ea98a1d993a74df5cd754b98d529a": { + "balance": "0x61093d7c2c6d380000" + }, + "38e46de4453c38e941e7930f43304f94bb7b2be8": { + "balance": "0x6cb7e74867d5e60000" + }, + "38e7dba8fd4f1f850dbc2649d8e84f0952e3eb3c": { + "balance": "0x2b5e3af16b1880000" + }, + "38e8a31af2d265e31a9fff2d8f46286d1245a467": { + "balance": "0x1158e460913d00000" + }, + "38ea6f5b5a7b88417551b4123dc127dfe9342da6": { + "balance": "0x15af1d78b58c400000" + }, + "38eec6e217f4d41aa920e424b9525197041cd4c6": { + "balance": "0xf00d25eb922e670000" + }, + "38f387e1a4ed4a73106ef2b462e474e2e3143ad0": { + "balance": "0x14542ba12a337c00000" + }, + "391161b0e43c302066e8a68d2ce7e199ecdb1d57": { + "balance": "0xd8d726b7177a800000" + }, + "3915eab5ab2e5977d075dec47d96b68b4b5cf515": { + "balance": "0xd07018185120f400000" + }, + "391a77405c09a72b5e8436237aaaf95d68da1709": { + "balance": "0x2a9264af3d1b90000" + }, + "391f20176d12360d724d51470a90703675594a4d": { + "balance": "0x56bc75e2d631000000" + }, + "392433d2ce83d3fb4a7602cca3faca4ec140a4b0": { + "balance": "0x2c3c465ca58ec0000" + }, + "393f783b5cdb86221bf0294fb714959c7b45899c": { + "balance": "0x14061b9d77a5e980000" + }, + "393ff4255e5c658f2e7f10ecbd292572671bc2d2": { + "balance": "0x6c6b935b8bbd400000" + }, + "394132600f4155e07f4d45bc3eb8d9fb72dcd784": { + "balance": "0x9f6e92edea07d40000" + }, + "3951e48e3c869e6b72a143b6a45068cdb9d466d0": { + "balance": "0x1158e460913d00000" + }, + "3954bdfe0bf587c695a305d9244c3d5bdddac9bb": { + "balance": "0x410278327f985608000" + }, + "395d6d255520a8db29abc47d83a5db8a1a7df087": { + "balance": "0x56bc75e2d63100000" + }, + "39636b25811b176abfcfeeca64bc87452f1fdff4": { + "balance": "0x15af1d78b58c400000" + }, + "3969b4f71bb8751ede43c016363a7a614f76118e": { + "balance": "0x6c6b935b8bbd400000" + }, + "39782ffe06ac78822a3c3a8afe305e50a56188ce": { + "balance": "0x21e19e0c9bab2400000" + }, + "397a6ef8763a18f00fac217e055c0d3094101011": { + "balance": "0x6c6b935b8bbd400000" + }, + "397cdb8c80c67950b18d654229610e93bfa6ee1a": { + "balance": "0x3f95c8e08215210000" + }, + "39824f8bced176fd3ea22ec6a493d0ccc33fc147": { + "balance": "0xd8d726b7177a800000" + }, + "39936c2719450b9420cc2522cf91db01f227c1c1": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "3995e096b08a5a726800fcd17d9c64c64e088d2b": { + "balance": "0xad78ebc5ac6200000" + }, + "399aa6f5d078cb0970882bc9992006f8fbdf3471": { + "balance": "0x3635c9adc5dea00000" + }, + "39aa05e56d7d32385421cf9336e90d3d15a9f859": { + "balance": "0x168d28e3f00280000" + }, + "39aaf0854db6eb39bc7b2e43846a76171c0445de": { + "balance": "0x6449e84e47a8a80000" + }, + "39b1c471ae94e12164452e811fbbe2b3cd7275ac": { + "balance": "0x6c6b935b8bbd400000" + }, + "39b299327490d72f9a9edff11b83afd0e9d3c450": { + "balance": "0xad78ebc5ac6200000" + }, + "39bac68d947859f59e9226089c96d62e9fbe3cde": { + "balance": "0x22b1c8c1227a00000" + }, + "39bfd978689bec048fc776aa15247f5e1d7c39a2": { + "balance": "0x43c33c1937564800000" + }, + "39c773367c8825d3596c686f42bf0d14319e3f84": { + "balance": "0x73f75d1a085ba0000" + }, + "39d4a931402c0c79c457186f24df8729cf957031": { + "balance": "0xd8d726b7177a800000" + }, + "39d6caca22bccd6a72f87ee7d6b59e0bde21d719": { + "balance": "0x6c8754c8f30c080000" + }, + "39e0db4d60568c800b8c5500026c2594f5768960": { + "balance": "0x3635c9adc5dea00000" + }, + "39ee4fe00fbced647068d4f57c01cb22a80bccd1": { + "balance": "0x14542ba12a337c00000" + }, + "39f198331e4b21c1b760a3155f4ab2fe00a74619": { + "balance": "0x6c6b935b8bbd400000" + }, + "39f44663d92561091b82a70dcf593d754005973a": { + "balance": "0xad78b2edc21598000" + }, + "3a035594c747476d42d1ee966c36224cdd224993": { + "balance": "0x134af74569f9c50000" + }, + "3a04572847d31e81f7765ca5bfc9d557159f3683": { + "balance": "0x7362d0dabeafd8000" + }, + "3a06e3bb1edcfd0c44c3074de0bb606b049894a2": { + "balance": "0x21e19e0c9bab2400000" + }, + "3a10888b7e149cae272c01302c327d0af01a0b24": { + "balance": "0xebec21ee1da40000" + }, + "3a3108c1e680a33b336c21131334409d97e5adec": { + "balance": "0x1158e460913d00000" + }, + "3a368efe4ad786e26395ec9fc6ad698cae29fe01": { + "balance": "0x2245899675f9f40000" + }, + "3a3dd104cd7eb04f21932fd433ea7affd39369f5": { + "balance": "0x13614f23e242260000" + }, + "3a4297da3c555e46c073669d0478fce75f2f790e": { + "balance": "0x6ac5c62d9486070000" + }, + "3a476bd2c9e664c63ab266aa4c6e4a4825f516c3": { + "balance": "0xad78ebc5ac6200000" + }, + "3a48e0a7098b06a905802b87545731118e89f439": { + "balance": "0x6c6b935b8bbd400000" + }, + "3a4da78dce05aeb87de9aead9185726da1926798": { + "balance": "0xad78ebc5ac6200000" + }, + "3a59a08246a8206f8d58f70bb1f0d35c5bcc71bd": { + "balance": "0xa076407d3f7440000" + }, + "3a72d635aadeee4382349db98a1813a4cfeb3df1": { + "balance": "0x2a5a058fc295ed000000" + }, + "3a7db224acae17de7798797d82cdf8253017dfa8": { + "balance": "0x10f0cf064dd59200000" + }, + "3a805fa0f7387f73055b7858ca8519edd93d634f": { + "balance": "0x6449e84e47a8a80000" + }, + "3a84e950ed410e51b7e8801049ab2634b285fea1": { + "balance": "0x3f52fdaa822d2c80000" + }, + "3a86ee94862b743dd34f410969d94e2c5652d4ad": { + "balance": "0xaede69ad30e810000" + }, + "3a9132b7093d3ec42e1e4fb8cb31ecdd43ae773c": { + "balance": "0x6c6b935b8bbd400000" + }, + "3a9960266df6492063538a99f487c950a3a5ec9e": { + "balance": "0x5150ae84a8cdf000000" + }, + "3a9b111029ce1f20c9109c7a74eeeef34f4f2eb2": { + "balance": "0xd8d726b7177a800000" + }, + "3a9e5441d44b243be55b75027a1ceb9eacf50df2": { + "balance": "0x3635c9adc5dea00000" + }, + "3aa07a34a1afc8967d3d1383b96b62cf96d5fa90": { + "balance": "0x43c33c1937564800000" + }, + "3aa42c21b9b31c3e27ccd17e099af679cdf56907": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "3aa948ea02397755effb2f9dc9392df1058f7e33": { + "balance": "0x2e141ea081ca080000" + }, + "3aadf98b61e5c896e7d100a3391d3250225d61df": { + "balance": "0xcaf67003701680000" + }, + "3aae4872fd9093cbcad1406f1e8078bab50359e2": { + "balance": "0x222c8eb3ff6640000" + }, + "3abb8adfc604f48d5984811d7f1d52fef6758270": { + "balance": "0xf29719b66f110c0000" + }, + "3ac2f0ff1612e4a1c346d53382abf6d8a25baa53": { + "balance": "0x6c6b935b8bbd400000" + }, + "3ac9dc7a436ae98fd01c7a9621aa8e9d0b8b531d": { + "balance": "0x61093d7c2c6d380000" + }, + "3ad06149b21c55ff867cc3fb9740d2bcc7101231": { + "balance": "0x29b76432b94451200000" + }, + "3ad70243d88bf0400f57c8c1fd57811848af162a": { + "balance": "0x2e9ee5c38653f00000" + }, + "3ad915d550b723415620f5a9b5b88a85f382f035": { + "balance": "0x3635c9adc5dea00000" + }, + "3ae160e3cd60ae31b9d6742d68e14e76bd96c517": { + "balance": "0x1a055690d9db80000" + }, + "3ae62bd271a760637fad79c31c94ff62b4cd12f7": { + "balance": "0x6c6b935b8bbd400000" + }, + "3aea4e82d2400248f99871a41ca257060d3a221b": { + "balance": "0x3635c9adc5dea00000" + }, + "3af65b3e28895a4a001153391d1e69c31fb9db39": { + "balance": "0xd5967be4fc3f100000" + }, + "3b07db5a357f5af2484cbc9d77d73b1fd0519fc7": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "3b0accaf4b607cfe61d17334c214b75cdefdbd89": { + "balance": "0x6c6b935b8bbd400000" + }, + "3b13631a1b89cb566548899a1d60915cdcc4205b": { + "balance": "0x6c6b935b8bbd400000" + }, + "3b159099075207c6807663b1f0f7eda54ac8cce3": { + "balance": "0x6ac4e65b69f92d8000" + }, + "3b1937d5e793b89b63fb8eb5f1b1c9ca6ba0fa8e": { + "balance": "0x6c6b935b8bbd400000" + }, + "3b22da2a0271c8efe102532773636a69b1c17e09": { + "balance": "0x1b36a6444a3e180000" + }, + "3b22dea3c25f1b59c7bd27bb91d3a3eaecef3984": { + "balance": "0x56bc75e2d63100000" + }, + "3b2367f8494b5fe18d683c055d89999c9f3d1b34": { + "balance": "0x21e19e0c9bab2400000" + }, + "3b2c45990e21474451cf4f59f01955b331c7d7c9": { + "balance": "0x6c6b935b8bbd400000" + }, + "3b4100e30a73b0c734b18ffa8426d19b19312f1a": { + "balance": "0xbb5d1aa700afd900000" + }, + "3b42a66d979f582834747a8b60428e9b4eeccd23": { + "balance": "0x21a1c790fadc580000" + }, + "3b4768fd71e2db2cbe7fa050483c27b4eb931df3": { + "balance": "0x6c6b935b8bbd400000" + }, + "3b566a8afad19682dc2ce8679a3ce444a5b0fd4f": { + "balance": "0x6c6b935b8bbd400000" + }, + "3b5c251d7fd7893ba209fe541cecd0ce253a990d": { + "balance": "0x65a4da25d3016c00000" + }, + "3b5e8b3c77f792decb7a8985df916efb490aac23": { + "balance": "0x6c6b935b8bbd400000" + }, + "3b6e814f770748a7c3997806347605480a3fd509": { + "balance": "0x6c6b935b8bbd400000" + }, + "3b7b4f53c45655f3dc5f017edc23b16f9bc536fa": { + "balance": "0x56bc75e2d63100000" + }, + "3b7b8e27de33d3ce7961b98d19a52fe79f6c25be": { + "balance": "0x152d02c7e14af6800000" + }, + "3b7c77dbe95dc2602ce3269a9545d04965fefdbd": { + "balance": "0x6c6b935b8bbd400000" + }, + "3b8098533f7d9bdcd307dbb23e1777ca18418936": { + "balance": "0x6c6b935b8bbd400000" + }, + "3b93b16136f11eaf10996c95990d3b2739ccea5f": { + "balance": "0x21e19e0c9bab2400000" + }, + "3bab4b01a7c84ba13feea9b0bb191b77a3aadca3": { + "balance": "0xad78ebc5ac6200000" + }, + "3bb53598cc20e2055dc553b049404ac9b7dd1e83": { + "balance": "0x21571df77c00be0000" + }, + "3bbc13d04accc0707aebdcaef087d0b87e0b5ee3": { + "balance": "0xbed1d0263d9f000000" + }, + "3bc6e3ee7a56ce8f14a37532590f63716b9966e8": { + "balance": "0x6c6b935b8bbd400000" + }, + "3bc85d6c735b9cda4bba5f48b24b13e70630307b": { + "balance": "0x6acb3df27e1f880000" + }, + "3bd624b548cb659736907ed8aa3c0c705e24b575": { + "balance": "0x6c6b935b8bbd400000" + }, + "3bd9a06d1bd36c4edd27fc0d1f5b088ddae3c72a": { + "balance": "0x1b1a7a420ba00d0000" + }, + "3bddbc8134f77d55597fc97c26d26698090604eb": { + "balance": "0xbe202d6a0eda0000" + }, + "3bf86ed8a3153ec933786a02ac090301855e576b": { + "balance": "0x5f4a8c8375d155400000" + }, + "3bfbd3847c17a61cf3f17b52f8eba1b960b3f39f": { + "balance": "0xa2a15d09519be00000" + }, + "3c03bbc023e1e93fa3a3a6e428cf0cd8f95e1ec6": { + "balance": "0x52663ccab1e1c00000" + }, + "3c0c3defac9cea7acc319a96c30b8e1fedab4574": { + "balance": "0x692ae8897081d00000" + }, + "3c15b3511df6f0342e7348cc89af39a168b7730f": { + "balance": "0x3635c9adc5dea00000" + }, + "3c1f91f301f4b565bca24751aa1f761322709ddd": { + "balance": "0x61093d7c2c6d380000" + }, + "3c286cfb30146e5fd790c2c8541552578de334d8": { + "balance": "0x2291b11aa306e8c0000" + }, + "3c322e611fdb820d47c6f8fc64b6fad74ca95f5e": { + "balance": "0xd258ece1b13150000" + }, + "3c5a241459c6abbf630239c98a30d20b8b3ac561": { + "balance": "0x88b23acffd9900000" + }, + "3c79c863c3d372b3ff0c6f452734a7f97042d706": { + "balance": "0x98a7d9b8314c00000" + }, + "3c83c1701db0388b68210d00f5717cd9bd322c6a": { + "balance": "0x65a4da25d3016c00000" + }, + "3c860e2e663f46db53427b29fe3ea5e5bf62bbcc": { + "balance": "0x556f64c1fe7fa0000" + }, + "3c869c09696523ced824a070414605bb76231ff2": { + "balance": "0x3635c9adc5dea00000" + }, + "3c925619c9b33144463f0537d896358706c520b0": { + "balance": "0x6c6b935b8bbd400000" + }, + "3c98594bf68b57351e8814ae9e6dfd2d254aa06f": { + "balance": "0x1043561a8829300000" + }, + "3cadeb3d3eed3f62311d52553e70df4afce56f23": { + "balance": "0xd8d726b7177a800000" + }, + "3caedb5319fe806543c56e5021d372f71be9062e": { + "balance": "0x878678326eac9000000" + }, + "3cafaf5e62505615068af8eb22a13ad8a9e55070": { + "balance": "0x6c660645aa47180000" + }, + "3cb179cb4801a99b95c3b0c324a2bdc101a65360": { + "balance": "0x168d28e3f00280000" + }, + "3cb561ce86424b359891e364ec925ffeff277df7": { + "balance": "0xad78ebc5ac6200000" + }, + "3ccb71aa6880cb0b84012d90e60740ec06acd78f": { + "balance": "0x6c6b935b8bbd400000" + }, + "3ccef88679573947e94997798a1e327e08603a65": { + "balance": "0x2bc916d69f3b020000" + }, + "3cd1d9731bd548c1dd6fcea61beb75d91754f7d3": { + "balance": "0x1161d01b215cae48000" + }, + "3cd3a6e93579c56d494171fc533e7a90e6f59464": { + "balance": "0x6c6b935b8bbd400000" + }, + "3cd6b7593cbee77830a8b19d0801958fcd4bc57a": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "3cd7f7c7c2353780cde081eeec45822b25f2860c": { + "balance": "0xad78ebc5ac6200000" + }, + "3ce1dc97fcd7b7c4d3a18a49d6f2a5c1b1a906d7": { + "balance": "0xad78ebc5ac6200000" + }, + "3cea302a472a940379dd398a24eafdbadf88ad79": { + "balance": "0xa2a15d09519be00000" + }, + "3ceca96bb1cdc214029cbc5e181d398ab94d3d41": { + "balance": "0x10f0cf064dd592000000" + }, + "3cf484524fbdfadae26dc185e32b2b630fd2e726": { + "balance": "0x185452cb2a91c30000" + }, + "3cf9a1d465e78b7039e3694478e2627b36fcd141": { + "balance": "0x4a60532ad51bf00000" + }, + "3cfbf066565970639e130df2a7d16b0e14d6091c": { + "balance": "0x5c283d410394100000" + }, + "3d09688d93ad07f3abe68c722723cd680990435e": { + "balance": "0x65a4ce99f769e6e0000" + }, + "3d31587b5fd5869845788725a663290a49d3678c": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "3d3fad49c9e5d2759c8e8e5a7a4d60a0dd135692": { + "balance": "0x1158e460913d00000" + }, + "3d574fcf00fae1d98cc8bf9ddfa1b3953b9741bc": { + "balance": "0x6acb3df27e1f880000" + }, + "3d5a8b2b80be8b35d8ecf789b5ed7a0775c5076c": { + "balance": "0x1158e460913d00000" + }, + "3d66cd4bd64d5c8c1b5eea281e106d1c5aad2373": { + "balance": "0x69c4f3a8a110a60000" + }, + "3d6ae053fcbc318d6fd0fbc353b8bf542e680d27": { + "balance": "0xc673ce3c40160000" + }, + "3d6ff82c9377059fb30d9215723f60c775c891fe": { + "balance": "0xd8e5ce617f2d50000" + }, + "3d79a853d71be0621b44e29759656ca075fdf409": { + "balance": "0x6c6b935b8bbd400000" + }, + "3d7ea5bf03528100ed8af8aed2653e921b6e6725": { + "balance": "0x3635c9adc5dea00000" + }, + "3d813ff2b6ed57b937dabf2b381d148a411fa085": { + "balance": "0x56bc75e2d63100000" + }, + "3d881433f04a7d0d27f84944e08a512da3555287": { + "balance": "0x410d586a20a4c00000" + }, + "3d89e505cb46e211a53f32f167a877bec87f4b0a": { + "balance": "0x15b3557f1937f8000" + }, + "3d8d0723721e73a6c0d860aa0557abd14c1ee362": { + "balance": "0x10f0cf064dd59200000" + }, + "3d8f39881b9edfe91227c33fa4cdd91e678544b0": { + "balance": "0x4ab07ba43ada98000" + }, + "3d9d6be57ff83e065985664f12564483f2e600b2": { + "balance": "0x6eace43f23bd800000" + }, + "3da39ce3ef4a7a3966b32ee7ea4ebc2335a8f11f": { + "balance": "0x6c6b935b8bbd400000" + }, + "3daa01ceb70eaf9591fa521ba4a27ea9fb8ede4a": { + "balance": "0x5a63d2c9bc76540000" + }, + "3db5fe6a68bd3612ac15a99a61e555928eeceaf3": { + "balance": "0x55a6e79ccd1d300000" + }, + "3db9ed7f024c7e26372feacf2b050803445e3810": { + "balance": "0x45b148b4996a300000" + }, + "3dbf0dbfd77890800533f09dea8301b9f025d2a6": { + "balance": "0x3635c9adc5dea00000" + }, + "3dcef19c868b15d34eda426ec7e04b18b6017002": { + "balance": "0x6c68ccd09b022c0000" + }, + "3dd12e556a603736feba4a6fa8bd4ac45d662a04": { + "balance": "0x23757b9183e078280000" + }, + "3dde8b15b3ccbaa5780112c3d674f313bba68026": { + "balance": "0x601d515a3e4f940000" + }, + "3ddedbe48923fbf9e536bf9ffb0747c9cdd39eef": { + "balance": "0x368c8623a8b4d100000" + }, + "3deae43327913f62808faa1b6276a2bd6368ead9": { + "balance": "0x6c6b935b8bbd400000" + }, + "3df762049eda8ac6927d904c7af42f94e5519601": { + "balance": "0x6c6b935b8bbd400000" + }, + "3e040d40cb80ba0125f3b15fdefcc83f3005da1b": { + "balance": "0x384524cc70b7780000" + }, + "3e0b8ed86ed669e12723af7572fbacfe829b1e16": { + "balance": "0x514de7f9b812dc0000" + }, + "3e0cbe6a6dcb61f110c45ba2aa361d7fcad3da73": { + "balance": "0x1b2df9d219f57980000" + }, + "3e194b4ecef8bb711ea2ff24fec4e87bd032f7d1": { + "balance": "0x8b9dc1bc1a036a8000" + }, + "3e1b2230afbbd310b4926a4c776d5ae7819c661d": { + "balance": "0x65a4da25d3016c00000" + }, + "3e1c53300e4c168912163c7e99b95da268ad280a": { + "balance": "0x3662325cd18fe00000" + }, + "3e1c962063e0d5295941f210dca3ab531eec8809": { + "balance": "0xa2a15d09519be00000" + }, + "3e2ca0d234baf607ad466a1b85f4a6488ef00ae7": { + "balance": "0x4da21a3483d568000" + }, + "3e2f26235e137a7324e4dc154b5df5af46ea1a49": { + "balance": "0x137aad8032db90000" + }, + "3e3161f1ea2fbf126e79da1801da9512b37988c9": { + "balance": "0xa6dd90cae5114480000" + }, + "3e36c17253c11cf38974ed0db1b759160da63783": { + "balance": "0x17b7883c06916600000" + }, + "3e3cd3bec06591d6346f254b621eb41c89008d31": { + "balance": "0x35dfbeda9f37340000" + }, + "3e45bd55db9060eced923bb9cb733cb3573fb531": { + "balance": "0x58e7926ee858a00000" + }, + "3e4d13c55a84e46ed7e9cb90fd355e8ad991e38f": { + "balance": "0x3635c9adc5dea00000" + }, + "3e4e9265223c9738324cf20bd06006d0073edb8c": { + "balance": "0x73f75d1a085ba0000" + }, + "3e4fbd661015f6461ed6735cefef01f31445de3a": { + "balance": "0x36e342998b8b0200000" + }, + "3e53ff2107a8debe3328493a92a586a7e1f49758": { + "balance": "0x4e69c2a71a405ab0000" + }, + "3e5a39fdda70df1126ab0dc49a7378311a537a1f": { + "balance": "0x821ab0d44149800000" + }, + "3e5abd09ce5af7ba8487c359e0f2a93a986b0b18": { + "balance": "0x21e19e0c9bab2400000" + }, + "3e5cb8928c417825c03a3bfcc52183e5c91e42d7": { + "balance": "0xe731d9c52c962f0000" + }, + "3e5e93fb4c9c9d1246f8f247358e22c3c5d17b6a": { + "balance": "0x821ab0d4414980000" + }, + "3e618350fa01657ab0ef3ebac8e37012f8fc2b6f": { + "balance": "0x9806de3da6e9780000" + }, + "3e63ce3b24ca2865b4c5a687b7aea3597ef6e548": { + "balance": "0x6c6b935b8bbd400000" + }, + "3e66b84769566ab67945d5fa81373556bcc3a1fa": { + "balance": "0x83d6c7aab63600000" + }, + "3e76a62db187aa74f63817533b306cead0e8cebe": { + "balance": "0x69b5afac750bb800000" + }, + "3e7a966b5dc357ffb07e9fe067c45791fd8e3049": { + "balance": "0x3342d60dff1960000" + }, + "3e81772175237eb4cbe0fe2dcafdadffeb6a1999": { + "balance": "0x1dd0c885f9a0d800000" + }, + "3e8349b67f5745449f659367d9ad4712db5b895a": { + "balance": "0x62a992e53a0af00000" + }, + "3e83544f0082552572c782bee5d218f1ef064a9d": { + "balance": "0x56cd55fc64dfe0000" + }, + "3e84b35c5b2265507061d30b6f12da033fe6f8b9": { + "balance": "0x61093d7c2c6d380000" + }, + "3e8641d43c42003f0a33c929f711079deb2b9e46": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "3e8745ba322f5fd6cb50124ec46688c7a69a7fae": { + "balance": "0x10afc1ade3b4ed40000" + }, + "3e914e3018ac00449341c49da71d04dfeeed6221": { + "balance": "0xd8d726b7177a800000" + }, + "3e9410d3b9a87ed5e451a6b91bb8923fe90fb2b5": { + "balance": "0xad78ebc5ac6200000" + }, + "3e94df5313fa520570ef232bc3311d5f622ff183": { + "balance": "0x6c6b935b8bbd400000" + }, + "3e9b34a57f3375ae59c0a75e19c4b641228d9700": { + "balance": "0xf8699329677e0000" + }, + "3eada8c92f56067e1bb73ce378da56dc2cdfd365": { + "balance": "0x77cde93aeb0d480000" + }, + "3eaf0879b5b6db159b589f84578b6a74f6c10357": { + "balance": "0x18938b671fa65a28000" + }, + "3eaf316b87615d88f7adc77c58e712ed4d77966b": { + "balance": "0x56dbc4cee24648000" + }, + "3eb8b33b21d23cda86d8288884ab470e164691b5": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "3eb9ef06d0c259040319947e8c7a6812aa0253d8": { + "balance": "0x90d972f32323c0000" + }, + "3ecc8e1668dde995dc570fe414f44211c534a615": { + "balance": "0x6c6b935b8bbd400000" + }, + "3ecdb532e397579662b2a46141e78f8235936a5f": { + "balance": "0x39fbae8d042dd0000" + }, + "3eee6f1e96360b7689b3069adaf9af8eb60ce481": { + "balance": "0x3635c9adc5dea00000" + }, + "3f08d9ad894f813e8e2148c160d24b353a8e74b0": { + "balance": "0xcb49b44ba602d800000" + }, + "3f0c83aac5717962734e5ceaeaecd39b28ad06be": { + "balance": "0x6c6b935b8bbd400000" + }, + "3f10800282d1b7ddc78fa92d8230074e1bf6aeae": { + "balance": "0x10afc1ade3b4ed40000" + }, + "3f1233714f204de9de4ee96d073b368d8197989f": { + "balance": "0x217c41074e6bb0000" + }, + "3f173aa6edf469d185e59bd26ae4236b92b4d8e1": { + "balance": "0x1158e460913d000000" + }, + "3f1bc420c53c002c9e90037c44fe6a8ef4ddc962": { + "balance": "0x960db77681e940000" + }, + "3f236108eec72289bac3a65cd283f95e041d144c": { + "balance": "0x3634bf39ab98788000" + }, + "3f2da093bb16eb064f8bfa9e30b929d15f8e1c4c": { + "balance": "0x6c6b935b8bbd400000" + }, + "3f2dd55db7eab0ebee65b33ed8202c1e992e958b": { + "balance": "0x2c73c937742c500000" + }, + "3f2f381491797cc5c0d48296c14fd0cd00cdfa2d": { + "balance": "0x2b95bdcc39b6100000" + }, + "3f30d3bc9f602232bc724288ca46cd0b0788f715": { + "balance": "0xd8d726b7177a800000" + }, + "3f3c8e61e5604cef0605d436dd22accd862217fc": { + "balance": "0x487a9a304539440000" + }, + "3f3f46b75cabe37bfacc8760281f4341ca7f463d": { + "balance": "0x20ac448235fae88000" + }, + "3f472963197883bbda5a9b7dfcb22db11440ad31": { + "balance": "0x1a19643cb1eff08000" + }, + "3f4cd1399f8a34eddb9a17a471fc922b5870aafc": { + "balance": "0xad78ebc5ac6200000" + }, + "3f551ba93cd54693c183fb9ad60d65e1609673c9": { + "balance": "0x6c6b935b8bbd400000" + }, + "3f627a769e6a950eb87017a7cd9ca20871136831": { + "balance": "0x2eb8eb1a172dcb80000" + }, + "3f6dd3650ee428dcb7759553b017a96a94286ac9": { + "balance": "0x487a9a304539440000" + }, + "3f747237806fed3f828a6852eb0867f79027af89": { + "balance": "0x5150ae84a8cdf00000" + }, + "3f75ae61cc1d8042653b5baec4443e051c5e7abd": { + "balance": "0x52d542804f1ce0000" + }, + "3fb7d197b3ba4fe045efc23d50a14585f558d9b2": { + "balance": "0x1158e460913d00000" + }, + "3fbc1e4518d73400c6d046359439fb68ea1a49f4": { + "balance": "0x3790bb8551376400000" + }, + "3fbed6e7e0ca9c84fbe9ebcf9d4ef9bb49428165": { + "balance": "0x6c6b935b8bbd400000" + }, + "3fd0bb47798cf44cdfbe4d333de637df4a00e45c": { + "balance": "0x56c5579f722140000" + }, + "3fe40fbd919aad2818df01ee4df46c46842ac539": { + "balance": "0x14542ba12a337c00000" + }, + "3fe801e61335c5140dc7eda2ef5204460a501230": { + "balance": "0x6c6b935b8bbd400000" + }, + "3ff836b6f57b901b440c30e4dbd065cf37d3d48c": { + "balance": "0xad78ebc5ac6200000" + }, + "3ffcb870d4023d255d5167d8a507cefc366b68ba": { + "balance": "0x23343c4354d2ac0000" + }, + "401354a297952fa972ad383ca07a0a2811d74a71": { + "balance": "0xc249fdd327780000" + }, + "4030a925706b2c101c8c5cb9bd05fbb4f6759b18": { + "balance": "0xd8d726b7177a800000" + }, + "403145cb4ae7489fcc90cd985c6dc782b3cc4e44": { + "balance": "0x1453ff387b27cac0000" + }, + "403220600a36f73f24e190d1edb2d61be3f41354": { + "balance": "0x107ad8f556c6c00000" + }, + "4039bd50a2bde15ffe37191f410390962a2b8886": { + "balance": "0xad78ebc5ac6200000" + }, + "403c64896a75cad816a9105e18d8aa5bf80f238e": { + "balance": "0x35659ef93f0fc40000" + }, + "403d53cf620f0922b417848dee96c190b5bc8271": { + "balance": "0x215f835bc769da80000" + }, + "404100db4c5d0eec557823b58343758bcc2c8083": { + "balance": "0x1158e460913d00000" + }, + "4041374b0feef4792e4b33691fb86897a4ff560c": { + "balance": "0x13c9647e25a9940000" + }, + "40467d80e74c35407b7db51789234615fea66818": { + "balance": "0x150894e849b3900000" + }, + "40585200683a403901372912a89834aadcb55fdb": { + "balance": "0x6c6b935b8bbd400000" + }, + "4058808816fdaa3a5fc98ed47cfae6c18315422e": { + "balance": "0xad4c8316a0b0c0000" + }, + "405f596b94b947344c033ce2dcbff12e25b79784": { + "balance": "0x6c6b935b8bbd400000" + }, + "40630024bd2c58d248edd8465617b2bf1647da0e": { + "balance": "0x3635c9adc5dea00000" + }, + "40652360d6716dc55cf9aab21f3482f816cc2cbd": { + "balance": "0x21e19e0c9bab2400000" + }, + "407295ebd94b48269c2d569c9b9af9aa05e83e5e": { + "balance": "0x21e19e0c9bab2400000" + }, + "4073fa49b87117cb908cf1ab512da754a932d477": { + "balance": "0x6acb3df27e1f880000" + }, + "408a69a40715e1b313e1354e600800a1e6dc02a5": { + "balance": "0x1e7b891cc92540000" + }, + "409bd75085821c1de70cdc3b11ffc3d923c74010": { + "balance": "0xd8d726b7177a800000" + }, + "409d5a962edeeebea178018c0f38b9cdb213f289": { + "balance": "0x1158e460913d00000" + }, + "40a331195b977325c2aa28fa2f42cb25ec3c253c": { + "balance": "0x6c6b935b8bbd400000" + }, + "40a7f72867a7dc86770b162b7557a434ed50cce9": { + "balance": "0x3635c9adc5dea00000" + }, + "40ab0a3e83d0c8ac9366910520eab1772bac3b1a": { + "balance": "0x34f10c2dc05e7c0000" + }, + "40ab66fe213ea56c3afb12c75be33f8e32fd085d": { + "balance": "0xd8d726b7177a800000" + }, + "40ad74bc0bce2a45e52f36c3debb1b3ada1b7619": { + "balance": "0x170162de109c6580000" + }, + "40cf890591eae4a18f812a2954cb295f633327e6": { + "balance": "0x29bf736fc591a0000" + }, + "40cf90ef5b768c5da585002ccbe6617650d8e837": { + "balance": "0x36330322d5238c0000" + }, + "40d45d9d7625d15156c932b771ca7b0527130958": { + "balance": "0x152d02c7e14af6800000" + }, + "40db1ba585ce34531edec5494849391381e6ccd3": { + "balance": "0x61093d7c2c6d380000" + }, + "40df495ecf3f8b4cef2a6c189957248fe884bc2b": { + "balance": "0x28a857425466f800000" + }, + "40e0dbf3efef9084ea1cd7e503f40b3b4a8443f6": { + "balance": "0xd8d726b7177a800000" + }, + "40e2440ae142c880366a12c6d4102f4b8434b62a": { + "balance": "0x3635c9adc5dea00000" + }, + "40e3c283f7e24de0410c121bee60a5607f3e29a6": { + "balance": "0x3635c9adc5dea00000" + }, + "40ea5044b204b23076b1a5803bf1d30c0f88871a": { + "balance": "0x2f6f10780d22cc00000" + }, + "40eddb448d690ed72e05c225d34fc8350fa1e4c5": { + "balance": "0x17b7883c06916600000" + }, + "40f4f4c06c732cd35b119b893b127e7d9d0771e4": { + "balance": "0x21e19e0c9bab2400000" + }, + "41010fc8baf8437d17a04369809a168a17ca56fb": { + "balance": "0x56bc75e2d63100000" + }, + "4103299671d46763978fa4aa19ee34b1fc952784": { + "balance": "0xad78ebc5ac6200000" + }, + "41033c1b6d05e1ca89b0948fc64453fbe87ab25e": { + "balance": "0x487a9a304539440000" + }, + "41098a81452317c19e3eef0bd123bbe178e9e9ca": { + "balance": "0x97c9ce4cf6d5c00000" + }, + "411610b178d5617dfab934d293f512a93e5c10e1": { + "balance": "0x93739534d28680000" + }, + "411c831cc6f44f1965ec5757ab4e5b3ca4cffd1f": { + "balance": "0x170a0f5040e5040000" + }, + "412a68f6c645559cc977fc4964047a201d1bb0e2": { + "balance": "0xa968163f0a57b400000" + }, + "413f4b02669ccff6806bc826fcb7deca3b0ea9bc": { + "balance": "0x1158e460913d00000" + }, + "414599092e879ae25372a84d735af5c4e510cd6d": { + "balance": "0x15af1d78b58c400000" + }, + "41485612d03446ec4c05e5244e563f1cbae0f197": { + "balance": "0x34957444b840e80000" + }, + "415d096ab06293183f3c033d25f6cf7178ac3bc7": { + "balance": "0x22b1c8c1227a00000" + }, + "4166fc08ca85f766fde831460e9dc93c0e21aa6c": { + "balance": "0x3635c9adc5dea00000" + }, + "416784af609630b070d49a8bcd12235c6428a408": { + "balance": "0x43c33c1937564800000" + }, + "4167cd48e733418e8f99ffd134121c4a4ab278c4": { + "balance": "0xc55325ca7415e00000" + }, + "416c86b72083d1f8907d84efd2d2d783dffa3efb": { + "balance": "0x6c6acc67d7b1d40000" + }, + "4173419d5c9f6329551dc4d3d0ceac1b701b869e": { + "balance": "0x4c53ecdc18a600000" + }, + "4174fa1bc12a3b7183cbabb77a0b59557ba5f1db": { + "balance": "0x6c6b935b8bbd400000" + }, + "41786a10d447f484d33244ccb7facd8b427b5b8c": { + "balance": "0x3635c9adc5dea00000" + }, + "417a3cd19496530a6d4204c3b5a17ce0f207b1a5": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "417e4e2688b1fd66d821529e46ed4f42f8b3db3d": { + "balance": "0x6c6b935b8bbd400000" + }, + "419a71a36c11d105e0f2aef5a3e598078e85c80b": { + "balance": "0x10f0cf064dd59200000" + }, + "419bde7316cc1ed295c885ace342c79bf7ee33ea": { + "balance": "0x14542ba12a337c00000" + }, + "41a2f2e6ecb86394ec0e338c0fc97e9c5583ded2": { + "balance": "0x6cee06ddbe15ec0000" + }, + "41a8c2830081b102df6e0131657c07ab635b54ce": { + "balance": "0x6c6acc67d7b1d40000" + }, + "41a8e236a30e6d63c1ff644d132aa25c89537e01": { + "balance": "0x1158e460913d00000" + }, + "41a9a404fc9f5bfee48ec265b12523338e29a8bf": { + "balance": "0x150894e849b3900000" + }, + "41ad369f758fef38a19aa3149379832c818ef2a0": { + "balance": "0x36369ed7747d260000" + }, + "41b2d34fde0b1029262b4172c81c1590405b03ae": { + "balance": "0x3635c9adc5dea00000" + }, + "41b2dbd79dda9b864f6a7030275419c39d3efd3b": { + "balance": "0xad78ebc5ac62000000" + }, + "41c3c2367534d13ba2b33f185cdbe6ac43c2fa31": { + "balance": "0xd8d726b7177a800000" + }, + "41cb9896445f70a10a14215296daf614e32cf4d5": { + "balance": "0x678a932062e4180000" + }, + "41ce79950935cff55bf78e4ccec2fe631785db95": { + "balance": "0x6c6b935b8bbd400000" + }, + "41d3b731a326e76858baa5f4bd89b57b36932343": { + "balance": "0x155bd9307f9fe80000" + }, + "41e4a20275e39bdcefeb655c0322744b765140c2": { + "balance": "0x21e19e0c9bab2400000" + }, + "41ed2d8e7081482c919fc23d8f0091b3c82c4685": { + "balance": "0x463a1e765bd78a0000" + }, + "41f27e744bd29de2b0598f02a0bb9f98e681eaa4": { + "balance": "0x1a4aba225c207400000" + }, + "41f489a1ec747bc29c3e5f9d8db97877d4d1b4e9": { + "balance": "0x73f75d1a085ba0000" + }, + "420fb86e7d2b51401fc5e8c72015decb4ef8fc2e": { + "balance": "0x3635c9adc5dea00000" + }, + "421684baa9c0b4b5f55338e6f6e7c8e146d41cb7": { + "balance": "0x5150ae84a8cdf00000" + }, + "42399659aca6a5a863ea2245c933fe9a35b7880e": { + "balance": "0x6ece32c26c82700000" + }, + "423bca47abc00c7057e3ad34fca63e375fbd8b4a": { + "balance": "0x3cfc82e37e9a7400000" + }, + "423c3107f4bace414e499c64390a51f74615ca5e": { + "balance": "0x6c6b935b8bbd400000" + }, + "423cc4594cf4abb6368de59fd2b1230734612143": { + "balance": "0x6c6b935b8bbd400000" + }, + "4244f1331158b9ce26bbe0b9236b9203ca351434": { + "balance": "0x21e19e0c9bab2400000" + }, + "425177eb74ad0a9d9a5752228147ee6d6356a6e6": { + "balance": "0xb98bc829a6f90000" + }, + "425725c0f08f0811f5f006eec91c5c5c126b12ae": { + "balance": "0x821ab0d4414980000" + }, + "4258fd662fc4ce3295f0d4ed8f7bb1449600a0a9": { + "balance": "0x16c452ed6088ad80000" + }, + "425c1816868f7777cc2ba6c6d28c9e1e796c52b3": { + "balance": "0x21e19e0c9bab2400000" + }, + "425c338a1325e3a1578efa299e57d986eb474f81": { + "balance": "0x6c6b935b8bbd400000" + }, + "426259b0a756701a8b663528522156c0288f0f24": { + "balance": "0x218ae196b8d4f300000" + }, + "426d15f407a01135b13a6b72f8f2520b3531e302": { + "balance": "0x1158e460913d00000" + }, + "426f78f70db259ac8534145b2934f4ef1098b5d8": { + "balance": "0x138400eca364a00000" + }, + "42732d8ef49ffda04b19780fd3c18469fb374106": { + "balance": "0x170b00e5e4a9be0000" + }, + "427417bd16b1b3d22dbb902d8f9657016f24a61c": { + "balance": "0x6c6b935b8bbd400000" + }, + "42746aeea14f27beff0c0da64253f1e7971890a0": { + "balance": "0x54069233bf7f780000" + }, + "427b462ab84e5091f48a46eb0cdc92ddcb26e078": { + "balance": "0x6c6b935b8bbd400000" + }, + "427e4751c3babe78cff8830886febc10f9908d74": { + "balance": "0x6acb3df27e1f880000" + }, + "427ec668ac9404e895cc861511d1620a4912be98": { + "balance": "0x878678326eac9000000" + }, + "4280a58f8bb10b9440de94f42b4f592120820191": { + "balance": "0x6c6b935b8bbd400000" + }, + "428a1ee0ed331d7952ccbe1c7974b2852bd1938a": { + "balance": "0x77b74a4e8de5650000" + }, + "429c06b487e8546abdfc958a25a3f0fba53f6f00": { + "balance": "0xbb644af542198000" + }, + "42a98bf16027ce589c4ed2c95831e2724205064e": { + "balance": "0x21e19e0c9bab2400000" + }, + "42c6edc515d35557808d13cd44dcc4400b2504e4": { + "balance": "0xaba14c59ba7320000" + }, + "42cecfd2921079c2d7df3f08b07aa3beee5e219a": { + "balance": "0x3635c9adc5dea00000" + }, + "42d1a6399b3016a8597f8b640927b8afbce4b215": { + "balance": "0xa18bcec34888100000" + }, + "42d34940edd2e7005d46e2188e4cfece8311d74d": { + "balance": "0x890b0c2e14fb80000" + }, + "42d3a5a901f2f6bd9356f112a70180e5a1550b60": { + "balance": "0x3224f42723d4540000" + }, + "42d6b263d9e9f4116c411424fc9955783c763030": { + "balance": "0x6c6b935b8bbd400000" + }, + "42db0b902559e04087dd5c441bc7611934184b89": { + "balance": "0x6d33b17d253a620000" + }, + "42ddd014dc52bfbcc555325a40b516f4866a1dd3": { + "balance": "0x6c6b935b8bbd400000" + }, + "4319263f75402c0b5325f263be4a5080651087f0": { + "balance": "0x354b0f14631bab0000" + }, + "431f2c19e316b044a4b3e61a0c6ff8c104a1a12f": { + "balance": "0x3635c9adc5dea00000" + }, + "43227d65334e691cf231b4a4e1d339b95d598afb": { + "balance": "0x21e19e0c9bab2400000" + }, + "432809a2390f07c665921ff37d547d12f1c9966a": { + "balance": "0x65a4da25d3016c00000" + }, + "4329fc0931cbeb033880fe4c9398ca45b0e2d11a": { + "balance": "0x6c7120716d33680000" + }, + "432d884bd69db1acc0d89c64ade4cb4fc3a88b7a": { + "balance": "0x869a8c10808eec0000" + }, + "4331ab3747d35720a9d8ca25165cd285acd4bda8": { + "balance": "0x6c6b935b8bbd400000" + }, + "433a3b68e56b0df1862b90586bbd39c840ff1936": { + "balance": "0x6c6b935b8bbd400000" + }, + "433e3ba1c51b810fc467d5ba4dea42f7a9885e69": { + "balance": "0x878678326eac9000000" + }, + "433eb94a339086ed12d9bde9cd1d458603c97dd6": { + "balance": "0x152d02c7e14af6800000" + }, + "4349225a62f70aea480a029915a01e5379e64fa5": { + "balance": "0x8cd67e2334c0d80000" + }, + "4354221e62dc09e6406436163a185ef06d114a81": { + "balance": "0x6c6b935b8bbd400000" + }, + "435443b81dfdb9bd8c6787bc2518e2d47e57c15f": { + "balance": "0x1438d9397881ef20000" + }, + "4361d4846fafb377b6c0ee49a596a78ddf3516a3": { + "balance": "0xc2127af858da700000" + }, + "4364309a9fa07095600f79edc65120cdcd23dc64": { + "balance": "0x21e19e0c9bab2400000" + }, + "4367ae4b0ce964f4a54afd4b5c368496db169e9a": { + "balance": "0x6c6b935b8bbd400000" + }, + "43748928e8c3ec4436a1d092fbe43ac749be1251": { + "balance": "0x15af1d78b58c400000" + }, + "43767bf7fd2af95b72e9312da9443cb1688e4343": { + "balance": "0x1043561a8829300000" + }, + "437983388ab59a4ffc215f8e8269461029c3f1c1": { + "balance": "0x43c33c1937564800000" + }, + "43898c49a34d509bfed4f76041ee91caf3aa6aa5": { + "balance": "0x1043561a8829300000" + }, + "438c2f54ff8e629bab36b1442b760b12a88f02ae": { + "balance": "0x6c6b935b8bbd400000" + }, + "4398628ea6632d393e929cbd928464c568aa4a0c": { + "balance": "0x4be4e7267b6ae00000" + }, + "439d2f2f5110a4d58b1757935015408740fec7f8": { + "balance": "0xcfa5c5150f4c888000" + }, + "439dee3f7679ff1030733f9340c096686b49390b": { + "balance": "0x6c6b935b8bbd400000" + }, + "43b079baf0727999e66bf743d5bcbf776c3b0922": { + "balance": "0x6c6b935b8bbd400000" + }, + "43bc2d4ddcd6583be2c7bc094b28fb72e62ba83b": { + "balance": "0x6c6b935b8bbd400000" + }, + "43c7ebc5b3e7af16f47dc5617ab10e0f39b4afbb": { + "balance": "0x678a932062e4180000" + }, + "43cb9652818c6f4d6796b0e89409306c79db6349": { + "balance": "0x6c6b935b8bbd400000" + }, + "43cc08d0732aa58adef7619bed46558ad7774173": { + "balance": "0xf0e7dcb0122a8f0000" + }, + "43d5a71ce8b8f8ae02b2eaf8eaf2ca2840b93fb6": { + "balance": "0x14542ba12a337c00000" + }, + "43db7ff95a086d28ebbfb82fb8fb5f230a5ebccd": { + "balance": "0xdf6eb0b2d3ca0000" + }, + "43e7ec846358d7d0f937ad1c350ba069d7bf72bf": { + "balance": "0x670ae629214680000" + }, + "43f16f1e75c3c06a9478e8c597a40a3cb0bf04cc": { + "balance": "0x9df7dfa8f760480000" + }, + "43f470ed659e2991c375957e5ddec5bd1d382231": { + "balance": "0x56bc75e2d63100000" + }, + "43f7e86e381ec51ec4906d1476cba97a3db584e4": { + "balance": "0x3635c9adc5dea00000" + }, + "43ff38743ed0cd43308c066509cc8e7e72c862aa": { + "balance": "0x692ae8897081d00000" + }, + "43ff8853e98ed8406b95000ada848362d6a0392a": { + "balance": "0x4ae0b1c4d2e84d00000" + }, + "44098866a69b68c0b6bc168229b9603587058967": { + "balance": "0xa31062beeed700000" + }, + "4419ac618d5dea7cdc6077206fb07dbdd71c1702": { + "balance": "0xd8d726b7177a800000" + }, + "441a52001661fac718b2d7b351b7c6fb521a7afd": { + "balance": "0x15af1d78b58c400000" + }, + "441aca82631324acbfa2468bda325bbd78477bbf": { + "balance": "0x14542ba12a337c00000" + }, + "441f37e8a029fd02482f289c49b5d06d00e408a4": { + "balance": "0x1211ecb56d13488000" + }, + "4420aa35465be617ad2498f370de0a3cc4d230af": { + "balance": "0x6c6b935b8bbd400000" + }, + "44232ff66ddad1fd841266380036afd7cf7d7f42": { + "balance": "0xad78ebc5ac6200000" + }, + "44250d476e062484e9080a3967bf3a4a732ad73f": { + "balance": "0x1158e460913d00000" + }, + "4429a29fee198450672c0c1d073162250bec6474": { + "balance": "0x362aaf8202f2500000" + }, + "44355253b27748e3f34fe9cae1fb718c8f249529": { + "balance": "0xad78ebc5ac6200000" + }, + "4438e880cb2766b0c1ceaec9d2418fceb952a044": { + "balance": "0x73fa073903f080000" + }, + "444caf79b71338ee9aa7c733b02acaa7dc025948": { + "balance": "0x22b1c8c1227a00000" + }, + "445cb8de5e3df520b499efc980f52bff40f55c76": { + "balance": "0x6c6b935b8bbd400000" + }, + "446a8039cecf9dce4879cbcaf3493bf545a88610": { + "balance": "0x17b7883c06916600000" + }, + "4474299d0ee090dc90789a1486489c3d0d645e6d": { + "balance": "0x3635c9adc5dea00000" + }, + "448bf410ad9bbc2fecc4508d87a7fc2e4b8561ad": { + "balance": "0xad6eedd17cf3b8000" + }, + "44901e0d0e08ac3d5e95b8ec9d5e0ff5f12e0393": { + "balance": "0x16a1f9f5fd7d960000" + }, + "4493123c021ece3b33b1a452c9268de14007f9d3": { + "balance": "0x16a6502f15a1e540000" + }, + "449ac4fbe383e36738855e364a57f471b2bfa131": { + "balance": "0x29b76432b94451200000" + }, + "44a01fb04ac0db2cce5dbe281e1c46e28b39d878": { + "balance": "0x6c6acc67d7b1d40000" + }, + "44a63d18424587b9b307bfc3c364ae10cd04c713": { + "balance": "0x1158e460913d00000" + }, + "44a8989e32308121f72466978db395d1f76c3a4b": { + "balance": "0x18850299f42b06a0000" + }, + "44c1110b18870ec81178d93d215838c551d48e64": { + "balance": "0xad6f98593bd8f0000" + }, + "44c14765127cde11fab46c5d2cf4d4b2890023fd": { + "balance": "0x6c6b935b8bbd400000" + }, + "44c54eaa8ac940f9e80f1e74e82fc14f1676856a": { + "balance": "0x1ab2cf7c9f87e200000" + }, + "44cd77535a893fa7c4d5eb3a240e79d099a72d2d": { + "balance": "0x2c73c937742c500000" + }, + "44dfba50b829becc5f4f14d1b04aab3320a295e5": { + "balance": "0x3635c9adc5dea00000" + }, + "44e2fdc679e6bee01e93ef4a3ab1bcce012abc7c": { + "balance": "0x163d194900c5458000" + }, + "44f62f2aaabc29ad3a6b04e1ff6f9ce452d1c140": { + "balance": "0x39992648a23c8a00000" + }, + "44fff37be01a3888d3b8b8e18880a7ddefeeead3": { + "balance": "0xe0c5bfc7dae9a8000" + }, + "4506fe19fa4b006baa3984529d8516db2b2b50ab": { + "balance": "0x6c6b935b8bbd400000" + }, + "451b3699475bed5d7905f8905aa3456f1ed788fc": { + "balance": "0x8ac7230489e8000000" + }, + "451b7070259bdba27100e36e23428a53dfe304e9": { + "balance": "0xb98bc829a6f90000" + }, + "45272b8f62e9f9fa8ce04420e1aea3eba9686eac": { + "balance": "0xd8d726b7177a800000" + }, + "452b64db8ef7d6df87c788639c2290be8482d575": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "453e359a3397944c5a275ab1a2f70a5e5a3f6989": { + "balance": "0xd02ab486cedc00000" + }, + "4549b15979255f7e65e99b0d5604db98dfcac8bf": { + "balance": "0xd8d726b7177a800000" + }, + "454b61b344c0ef965179238155f277c3829d0b38": { + "balance": "0x6c6b935b8bbd400000" + }, + "454f0141d721d33cbdc41018bd01119aa4784818": { + "balance": "0x14542ba12a337c00000" + }, + "45533390e340fe0de3b3cf5fb9fc8ea552e29e62": { + "balance": "0x4f2591f896a6500000" + }, + "455396a4bbd9bae8af9fb7c4d64d471db9c24505": { + "balance": "0x8ba52e6fc45e40000" + }, + "455b9296921a74d1fc41617f43b8303e6f3ed76c": { + "balance": "0xe3aeb5737240a00000" + }, + "455cb8ee39ffbc752331e5aefc588ef0ee593454": { + "balance": "0x3635463a780def8000" + }, + "456ae0aca48ebcfae166060250525f63965e760f": { + "balance": "0x1043561a8829300000" + }, + "456f8d746682b224679349064d1b368c7c05b176": { + "balance": "0xc893d09c8f51500000" + }, + "457029c469c4548d168cec3e65872e4428d42b67": { + "balance": "0x6c6b935b8bbd400000" + }, + "4571de672b9904bad8743692c21c4fdcea4c2e01": { + "balance": "0xd8d726b7177a800000" + }, + "45781bbe7714a1c8f73b1c747921df4f84278b70": { + "balance": "0x6c6b935b8bbd400000" + }, + "457bcef37dd3d60b2dd019e3fe61d46b3f1e7252": { + "balance": "0x1158e460913d00000" + }, + "458e3cc99e947844a18e6a42918fef7e7f5f5eb3": { + "balance": "0x7b53f79e888dac00000" + }, + "459393d63a063ef3721e16bd9fde45ee9dbd77fb": { + "balance": "0x6abad6a3c153050000" + }, + "45a570dcc2090c86a6b3ea29a60863dde41f13b5": { + "balance": "0xc9a95ee2986520000" + }, + "45a820a0672f17dc74a08112bc643fd1167736c3": { + "balance": "0xad6c43b2815ed8000" + }, + "45b47105fe42c4712dce6e2a21c05bffd5ea47a9": { + "balance": "0x6c6b935b8bbd400000" + }, + "45bb829652d8bfb58b8527f0ecb621c29e212ec3": { + "balance": "0x6c6b935b8bbd400000" + }, + "45c0d19f0b8e054f9e893836d5ecae7901af2812": { + "balance": "0x10f0cf064dd59200000" + }, + "45c4ecb4ee891ea984a7c5cefd8dfb00310b2850": { + "balance": "0x6b56051582a9700000" + }, + "45ca8d956608f9e00a2f9974028640888465668f": { + "balance": "0x6c6b935b8bbd400000" + }, + "45ca9862003b4e40a3171fb5cafa9028cac8de19": { + "balance": "0x2eb8eb1a172dcb80000" + }, + "45d1c9eedf7cab41a779057b79395f5428d80528": { + "balance": "0x6c6b935b8bbd400000" + }, + "45d4b54d37a8cf599821235f062fa9d170ede8a4": { + "balance": "0x1190673b5fda900000" + }, + "45db03bccfd6a5f4d0266b82a22a368792c77d83": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "45e3a93e72144ada860cbc56ff85145ada38c6da": { + "balance": "0x57473d05dabae80000" + }, + "45e68db8dbbaba5fc2cb337c62bcd0d61b059189": { + "balance": "0x6c6b935b8bbd400000" + }, + "45e68db94c7d0ab7ac41857a71d67147870f4e71": { + "balance": "0x54b40b1f852bda000000" + }, + "45f4fc60f08eaca10598f0336329801e3c92cb46": { + "balance": "0xad78ebc5ac6200000" + }, + "460d5355b2ceeb6e62107d81e51270b26bf45620": { + "balance": "0x6cb7e74867d5e60000" + }, + "46224f32f4ece5c8867090d4409d55e50b18432d": { + "balance": "0x14542ba12a337c00000" + }, + "4627c606842671abde8295ee5dd94c7f549534f4": { + "balance": "0xf895fbd8732f40000" + }, + "462b678b51b584f3ed7ada070b5cd99c0bf7b87f": { + "balance": "0x56bc75e2d63100000" + }, + "464d9c89cce484df000277198ed8075fa63572d1": { + "balance": "0x1158e460913d00000" + }, + "46504e6a215ac83bccf956befc82ab5a679371c8": { + "balance": "0x1c212805c2b4a50000" + }, + "4651dc420e08c3293b27d2497890eb50223ae2f4": { + "balance": "0x43c33c1937564800000" + }, + "46531e8b1bde097fdf849d6d119885608a008df7": { + "balance": "0xad78ebc5ac6200000" + }, + "466292f0e80d43a78774277590a9eb45961214f4": { + "balance": "0x34957444b840e80000" + }, + "4662a1765ee921842ddc88898d1dc8627597bd7e": { + "balance": "0x21e19e0c9bab2400000" + }, + "4665e47396c7db97eb2a03d90863d5d4ba319a94": { + "balance": "0x2086ac351052600000" + }, + "466fda6b9b58c5532750306a10a2a8c768103b07": { + "balance": "0xad6eedd17cf3b8000" + }, + "467124ae7f452f26b3d574f6088894fa5d1cfb3b": { + "balance": "0x925e06eec972b00000" + }, + "46722a36a01e841d03f780935e917d85d5a67abd": { + "balance": "0xcec76f0e71520000" + }, + "46779a5656ff00d73eac3ad0c38b6c853094fb40": { + "balance": "0xc8253c96c6af00000" + }, + "4677b04e0343a32131fd6abb39b1b6156bba3d5b": { + "balance": "0xad78ebc5ac6200000" + }, + "467d5988249a68614716659840ed0ae6f6f457bc": { + "balance": "0x1501a48cefdfde0000" + }, + "467e0ed54f3b76ae0636176e07420815a021736e": { + "balance": "0x6c6b935b8bbd400000" + }, + "467ea10445827ef1e502daf76b928a209e0d4032": { + "balance": "0x6c6b935b8bbd400000" + }, + "467fbf41441600757fe15830c8cd5f4ffbbbd560": { + "balance": "0x21e19e0c9bab2400000" + }, + "469358709332c82b887e20bcddd0220f8edba7d0": { + "balance": "0x3a9d5baa4abf1d00000" + }, + "4697baaf9ccb603fd30430689d435445e9c98bf5": { + "balance": "0xad201a6794ff80000" + }, + "46a30b8a808931217445c3f5a93e882c0345b426": { + "balance": "0xd8db5ebd7b2638000" + }, + "46a430a2d4a894a0d8aa3feac615361415c3f81f": { + "balance": "0x6c6b935b8bbd400000" + }, + "46aa501870677e7f0a504876b4e8801a0ad01c46": { + "balance": "0x2b5e3af16b18800000" + }, + "46bfc5b207eb2013e2e60f775fecd71810c5990c": { + "balance": "0x54069233bf7f780000" + }, + "46c1aa2244b9c8a957ca8fac431b0595a3b86824": { + "balance": "0xd8d726b7177a800000" + }, + "46d80631284203f6288ecd4e5758bb9d41d05dbe": { + "balance": "0x6c6b935b8bbd400000" + }, + "470ac5d1f3efe28f3802af925b571e63868b397d": { + "balance": "0x6c6b935b8bbd400000" + }, + "471010da492f4018833b088d9872901e06129174": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "4712540265cbeec3847022c59f1b318d43400a9e": { + "balance": "0xbdbc41e0348b300000" + }, + "4714cfa4f46bd6bd70737d75878197e08f88e631": { + "balance": "0x27f3edfb34e6e400000" + }, + "472048cc609aeb242165eaaa8705850cf3125de0": { + "balance": "0x3635c9adc5dea00000" + }, + "47219229e8cd56659a65c2a943e2dd9a8f4bfd89": { + "balance": "0x52663ccab1e1c00000" + }, + "4737d042dc6ae73ec73ae2517acea2fdd96487c5": { + "balance": "0x3635c9adc5dea00000" + }, + "474158a1a9dc693c133f65e47b5c3ae2f773a86f": { + "balance": "0xada55474b81340000" + }, + "4745ab181a36aa8cbf2289d0c45165bc7ebe2381": { + "balance": "0x222c8eb3ff6640000" + }, + "475066f9ad26655196d5535327bbeb9b7929cb04": { + "balance": "0xa4cc799563c3800000" + }, + "4752218e54de423f86c0501933917aea08c8fed5": { + "balance": "0x43c33c1937564800000" + }, + "475a6193572d4a4e59d7be09cb960ddd8c530e2f": { + "balance": "0x242cf78cdf07ff8000" + }, + "47648bed01f3cd3249084e635d14daa9e7ec3c8a": { + "balance": "0xa844a7424d9c80000" + }, + "47688410ff25d654d72eb2bc06e4ad24f833b094": { + "balance": "0x8b28d61f3d3ac0000" + }, + "476b5599089a3fb6f29c6c72e49b2e4740ea808d": { + "balance": "0x97c9ce4cf6d5c00000" + }, + "47730f5f8ebf89ac72ef80e46c12195038ecdc49": { + "balance": "0xab4dcf399a3a600000" + }, + "477b24eee8839e4fd19d1250bd0b6645794a61ca": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "4781a10a4df5eebc82f4cfe107ba1d8a7640bd66": { + "balance": "0x61093d7c2c6d380000" + }, + "47885ababedf4d928e1c3c71d7ca40d563ed595f": { + "balance": "0x62a992e53a0af00000" + }, + "478dc09a1311377c093f9cc8ae74111f65f82f39": { + "balance": "0xd8d726b7177a800000" + }, + "478e524ef2a381d70c82588a93ca7a5fa9d51cbf": { + "balance": "0x35fa97226f8899700000" + }, + "479298a9de147e63a1c7d6d2fce089c7e64083bd": { + "balance": "0x21e19dd3c3c0d798000" + }, + "479abf2da4d58716fd973a0d13a75f530150260a": { + "balance": "0x1158e460913d00000" + }, + "47a281dff64167197855bf6e705eb9f2cef632ea": { + "balance": "0x3636c9796436740000" + }, + "47beb20f759100542aa93d41118b3211d664920e": { + "balance": "0x6c6b935b8bbd400000" + }, + "47c247f53b9fbeb17bba0703a00c009fdb0f6eae": { + "balance": "0x43c33c1937564800000" + }, + "47c7e5efb48b3aed4b7c6e824b435f357df4c723": { + "balance": "0xfc936392801c0000" + }, + "47cf9cdaf92fc999cc5efbb7203c61e4f1cdd4c3": { + "balance": "0x71f8a93d01e540000" + }, + "47d20e6ae4cad3f829eac07e5ac97b66fdd56cf5": { + "balance": "0x3635c9adc5dea00000" + }, + "47d792a756779aedf1343e8883a6619c6c281184": { + "balance": "0x6c6b935b8bbd400000" + }, + "47e25df8822538a8596b28c637896b4d143c351d": { + "balance": "0x110be9eb24b881500000" + }, + "47f4696bd462b20da09fb83ed2039818d77625b3": { + "balance": "0x813ca56906d340000" + }, + "47fef58584465248a0810d60463ee93e5a6ee8d3": { + "balance": "0xf58cd3e1269160000" + }, + "47ff6feb43212060bb1503d7a397fc08f4e70352": { + "balance": "0x6c6b935b8bbd400000" + }, + "47fff42c678551d141eb75a6ee398117df3e4a8d": { + "balance": "0x56beae51fd2d10000" + }, + "48010ef3b8e95e3f308f30a8cb7f4eb4bf60d965": { + "balance": "0x6c6b935b8bbd400000" + }, + "480af52076009ca73781b70e43b95916a62203ab": { + "balance": "0x321972f4083d878000" + }, + "480f31b989311e4124c6a7465f5a44094d36f9d0": { + "balance": "0x3790bb855137640000" + }, + "481115296ab7db52492ff7b647d63329fb5cbc6b": { + "balance": "0x368c8623a8b4d100000" + }, + "481e3a91bfdc2f1c8428a0119d03a41601417e1c": { + "balance": "0x3635c9adc5dea00000" + }, + "4828e4cbe34e1510afb72c2beeac8a4513eaebd9": { + "balance": "0xd5967be4fc3f100000" + }, + "482982ac1f1c6d1721feecd9b9c96cd949805055": { + "balance": "0x21e19e0c9bab2400000" + }, + "48302c311ef8e5dc664158dd583c81194d6e0d58": { + "balance": "0xb6676ce0bccb5c0000" + }, + "483ba99034e900e3aedf61499d3b2bce39beb7aa": { + "balance": "0x35659ef93f0fc40000" + }, + "48548b4ba62bcb2f0d34a88dc69a680e539cf046": { + "balance": "0x56cf1cbbb74320000" + }, + "4863849739265a63b0a2bf236a5913e6f959ce15": { + "balance": "0x52663ccab1e1c00000" + }, + "48659d8f8c9a2fd44f68daa55d23a608fbe500dc": { + "balance": "0x6c6b935b8bbd400000" + }, + "48669eb5a801d8b75fb6aa58c3451b7058c243bf": { + "balance": "0x68d42c138dab9f00000" + }, + "486a6c8583a84484e3df43a123837f8c7e2317d0": { + "balance": "0x1187c571ab80450000" + }, + "487adf7d70a6740f8d51cbdd68bb3f91c4a5ce68": { + "balance": "0x39fbae8d042dd0000" + }, + "487e108502b0b189ef9c8c6da4d0db6261eec6c0": { + "balance": "0x678a932062e4180000" + }, + "4888fb25cd50dbb9e048f41ca47d78b78a27c7d9": { + "balance": "0x3a9d5baa4abf1d00000" + }, + "489334c2b695c8ee0794bd864217fb9fd8f8b135": { + "balance": "0xfc936392801c0000" + }, + "48a30de1c919d3fd3180e97d5f2b2a9dbd964d2d": { + "balance": "0x2629f66e0c5300000" + }, + "48bf14d7b1fc84ebf3c96be12f7bce01aa69b03e": { + "balance": "0x68155a43676e00000" + }, + "48c2ee91a50756d8ce9abeeb7589d22c6fee5dfb": { + "balance": "0xae8e7a0bb575d00000" + }, + "48c5c6970b9161bb1c7b7adfed9cdede8a1ba864": { + "balance": "0xd8d726b7177a800000" + }, + "48d2434b7a7dbbff08223b6387b05da2e5093126": { + "balance": "0x3cfc82e37e9a7400000" + }, + "48d4f2468f963fd79a006198bb67895d2d5aa4d3": { + "balance": "0x4be4e7267b6ae00000" + }, + "48e0cbd67f18acdb7a6291e1254db32e0972737f": { + "balance": "0x56be03ca3e47d8000" + }, + "48f60a35484fe7792bcc8a7b6393d0dda1f6b717": { + "balance": "0xc328093e61ee400000" + }, + "48f883e567b436a27bb5a3124dbc84dec775a800": { + "balance": "0x29d76e869dcd800000" + }, + "490145afa8b54522bb21f352f06da5a788fa8f1d": { + "balance": "0x1f46c62901a03fb0000" + }, + "4909b31998ead414b8fb0e846bd5cbde393935be": { + "balance": "0xd8d726b7177a800000" + }, + "4912d902931676ff39fc34fe3c3cc8fb2182fa7a": { + "balance": "0x1158e460913d00000" + }, + "49136fe6e28b7453fcb16b6bbbe9aaacba8337fd": { + "balance": "0x6c6b935b8bbd400000" + }, + "491561db8b6fafb9007e62d050c282e92c4b6bc8": { + "balance": "0x65a4da25d3016c00000" + }, + "49185dd7c23632f46c759473ebae966008cd3598": { + "balance": "0xdc55fdb17647b0000" + }, + "492cb5f861b187f9df21cd4485bed90b50ffe22d": { + "balance": "0x1b19e50b44977c0000" + }, + "492de46aaf8f1d708d59d79af1d03ad2cb60902f": { + "balance": "0x6c6b935b8bbd400000" + }, + "492e70f04d18408cb41e25603730506b35a2876b": { + "balance": "0x222c8eb3ff6640000" + }, + "493a67fe23decc63b10dda75f3287695a81bd5ab": { + "balance": "0x2fb474098f67c00000" + }, + "493d48bda015a9bfcf1603936eab68024ce551e0": { + "balance": "0x138a388a43c000000" + }, + "494256e99b0f9cd6e5ebca3899863252900165c8": { + "balance": "0x2f6f10780d22cc00000" + }, + "494dec4d5ee88a2771a815f1ee7264942fb58b28": { + "balance": "0x6c6b935b8bbd400000" + }, + "495b641b1cdea362c3b4cbbd0f5cc50b1e176b9c": { + "balance": "0x3635c9adc5dea00000" + }, + "4968a2cedb457555a139295aea28776e54003c87": { + "balance": "0x2231aefc9a6628f0000" + }, + "496d365534530a5fc1577c0a5241cb88c4da7072": { + "balance": "0x61093d7c2c6d380000" + }, + "496e319592b341eaccd778dda7c8196d54cac775": { + "balance": "0x1f5718987664b480000" + }, + "496f5843f6d24cd98d255e4c23d1e1f023227545": { + "balance": "0x5f179fd4a6ee098000" + }, + "4970d3acf72b5b1f32a7003cf102c64ee0547941": { + "balance": "0x1da56a4b0835bf800000" + }, + "4977a7939d0939689455ce2639d0ee5a4cd910ed": { + "balance": "0x62a992e53a0af00000" + }, + "4979194ec9e97db9bee8343b7c77d9d7f3f1dc9f": { + "balance": "0x1158e460913d00000" + }, + "49793463e1681083d6abd6e725d5bba745dccde8": { + "balance": "0x1d98e94c4e471f0000" + }, + "4981c5ff66cc4e9680251fc4cd2ff907cb327865": { + "balance": "0x28a857425466f80000" + }, + "49897fe932bbb3154c95d3bce6d93b6d732904dd": { + "balance": "0xd8d726b7177a800000" + }, + "4989e1ab5e7cd00746b3938ef0f0d064a2025ba5": { + "balance": "0x6c6b935b8bbd400000" + }, + "498abdeb14c26b7b7234d70fceaef361a76dff72": { + "balance": "0xa2a15d09519be00000" + }, + "49a645e0667dfd7b32d075cc2467dd8c680907c4": { + "balance": "0x70601958fcb9c0000" + }, + "49b74e169265f01a89ec4c9072c5a4cd72e4e835": { + "balance": "0x368c8623a8b4d100000" + }, + "49bdbc7ba5abebb6389e91a3285220d3451bd253": { + "balance": "0x3635c9adc5dea00000" + }, + "49c941e0e5018726b7290fc473b471d41dae80d1": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "49c9771fca19d5b9d245c891f8158fe49f47a062": { + "balance": "0x21e19e0c9bab2400000" + }, + "49cf1e54be363106b920729d2d0ba46f0867989a": { + "balance": "0xe873f44133cb00000" + }, + "49d2c28ee9bc545eaaf7fd14c27c4073b4bb5f1a": { + "balance": "0x4fe9b806b40daf0000" + }, + "49ddee902e1d0c99d1b11af3cc8a96f78e4dcf1a": { + "balance": "0xacea5e4c18c530000" + }, + "49f028395b5a86c9e07f7778630e4c2e3d373a77": { + "balance": "0x6a74a5038db918000" + }, + "4a192035e2619b24b0709d56590e9183ccf2c1d9": { + "balance": "0x21e19e0c9bab2400000" + }, + "4a4053b31d0ee5dbafb1d06bd7ac7ff3222c47d6": { + "balance": "0x4be4e7267b6ae00000" + }, + "4a430170152de5172633dd8262d107a0afd96a0f": { + "balance": "0xab4dcf399a3a600000" + }, + "4a47fc3e177f567a1e3893e000e36bba23520ab8": { + "balance": "0x6c6b935b8bbd400000" + }, + "4a52bad20357228faa1e996bed790c93674ba7d0": { + "balance": "0x487a9a304539440000" + }, + "4a53dcdb56ce4cdce9f82ec0eb13d67352e7c88b": { + "balance": "0xe3aeb5737240a00000" + }, + "4a5fae3b0372c230c125d6d470140337ab915656": { + "balance": "0x56bc75e2d631000000" + }, + "4a719061f5285495b37b9d7ef8a51b07d6e6acac": { + "balance": "0xad4c8316a0b0c0000" + }, + "4a73389298031b8816cca946421c199e18b343d6": { + "balance": "0x223868b879146f0000" + }, + "4a735d224792376d331367c093d31c8794341582": { + "balance": "0x66ffcbfd5e5a300000" + }, + "4a7494cce44855cc80582842be958a0d1c0072ee": { + "balance": "0x821ab0d44149800000" + }, + "4a75c3d4fa6fccbd5dd5a703c15379a1e783e9b7": { + "balance": "0x62a992e53a0af00000" + }, + "4a81abe4984c7c6bef63d69820e55743c61f201c": { + "balance": "0x36401004e9aa3470000" + }, + "4a82694fa29d9e213202a1a209285df6e745c209": { + "balance": "0xd8d726b7177a800000" + }, + "4a835c25824c47ecbfc79439bf3f5c3481aa75cd": { + "balance": "0x4be4e7267b6ae00000" + }, + "4a918032439159bb315b6725b6830dc83697739f": { + "balance": "0x12a32ef678334c0000" + }, + "4a97e8fcf4635ea7fc5e96ee51752ec388716b60": { + "balance": "0x1d9945ab2b03480000" + }, + "4a9a26fd0a8ba10f977da4f77c31908dab4a8016": { + "balance": "0x61093d7c2c6d380000" + }, + "4aa148c2c33401e66a2b586e6577c4b292d3f240": { + "balance": "0xbb860b285f7740000" + }, + "4aa693b122f314482a47b11cc77c68a497876162": { + "balance": "0x6acb3df27e1f880000" + }, + "4ab2d34f04834fbf7479649cab923d2c4725c553": { + "balance": "0xbed1d0263d9f000000" + }, + "4ac07673e42f64c1a25ec2fa2d86e5aa2b34e039": { + "balance": "0x6c6b935b8bbd400000" + }, + "4ac5acad000b8877214cb1ae00eac9a37d59a0fd": { + "balance": "0xd8d726b7177a800000" + }, + "4ac9905a4cb6ab1cfd62546ee5917300b87c4fde": { + "balance": "0x3708baed3d68900000" + }, + "4acfa9d94eda6625c9dfa5f9f4f5d107c4031fdf": { + "balance": "0x222c8eb3ff6640000" + }, + "4ad047fae67ef162fe68fedbc27d3b65caf10c36": { + "balance": "0x6acb3df27e1f880000" + }, + "4ad95d188d6464709add2555fb4d97fe1ebf311f": { + "balance": "0x12c1b6eed03d280000" + }, + "4adbf4aae0e3ef44f7dd4d8985cfaf096ec48e98": { + "balance": "0x821ab0d4414980000" + }, + "4ae2a04d3909ef454e544ccfd614bfefa71089ae": { + "balance": "0x1801159df1eef80000" + }, + "4ae93082e45187c26160e66792f57fad3551c73a": { + "balance": "0x4961520daff82280000" + }, + "4af0db077bb9ba5e443e21e148e59f379105c592": { + "balance": "0x2086ac351052600000" + }, + "4b0619d9d8aa313a9531ac7dbe04ca0d6a5ad1b6": { + "balance": "0x6c6b935b8bbd400000" + }, + "4b0bd8acfcbc53a6010b40d4d08ddd2d9d69622d": { + "balance": "0x243d4d18229ca20000" + }, + "4b19eb0c354bc1393960eb06063b83926f0d67b2": { + "balance": "0x19274b259f6540000" + }, + "4b29437c97b4a844be71cca3b648d4ca0fdd9ba4": { + "balance": "0x824719834cfac0000" + }, + "4b31bf41abc75c9ae2cd8f7f35163b6e2b745054": { + "balance": "0x14b550a013c7380000" + }, + "4b3a7cc3a7d7b00ed5282221a60259f25bf6538a": { + "balance": "0x3635c9adc5dea00000" + }, + "4b3aab335ebbfaa870cc4d605e7d2e74c668369f": { + "balance": "0xcb49b44ba602d800000" + }, + "4b3c7388cc76da3d62d40067dabccd7ef0433d23": { + "balance": "0x56cd55fc64dfe0000" + }, + "4b3dfbdb454be5279a3b8addfd0ed1cd37a9420d": { + "balance": "0x6c6b935b8bbd400000" + }, + "4b470f7ba030bc7cfcf338d4bf0432a91e2ea5ff": { + "balance": "0x6c6b935b8bbd400000" + }, + "4b53ae59c784b6b5c43616b9a0809558e684e10c": { + "balance": "0x410d586a20a4c00000" + }, + "4b58101f44f7e389e12d471d1635b71614fdd605": { + "balance": "0x8ac7230489e800000" + }, + "4b5cdb1e428c91dd7cb54a6aed4571da054bfe52": { + "balance": "0x4c53ecdc18a600000" + }, + "4b60a3e253bf38c8d5662010bb93a473c965c3e5": { + "balance": "0x50c5e761a444080000" + }, + "4b74f5e58e2edf76daf70151964a0b8f1de0663c": { + "balance": "0x1190ae4944ba120000" + }, + "4b762166dd1118e84369f804c75f9cd657bf730c": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "4b792e29683eb586e394bb33526c6001b397999e": { + "balance": "0x2086ac351052600000" + }, + "4b904e934bd0cc8b20705f879e905b93ea0ccc30": { + "balance": "0x6c6b935b8bbd400000" + }, + "4b9206ba6b549a1a7f969e1d5dba867539d1fa67": { + "balance": "0x1ab2cf7c9f87e200000" + }, + "4b984ef26c576e815a2eaed2f5177f07dbb1c476": { + "balance": "0x54915956c409600000" + }, + "4b9e068fc4680976e61504912985fd5ce94bab0d": { + "balance": "0x243d4d18229ca20000" + }, + "4ba0d9e89601772b496847a2bb4340186787d265": { + "balance": "0x3635c9adc5dea00000" + }, + "4ba53ab549e2016dfa223c9ed5a38fad91288d07": { + "balance": "0x4be4e7267b6ae00000" + }, + "4ba8e0117fc0b6a3e56b24a3a58fe6cef442ff98": { + "balance": "0x131beb925ffd3200000" + }, + "4bac846af4169f1d95431b341d8800b22180af1a": { + "balance": "0x1158e460913d00000" + }, + "4bb6d86b8314c22d8d37ea516d0019f156aae12d": { + "balance": "0x3635c9adc5dea00000" + }, + "4bb9655cfb2a36ea7c637a7b859b4a3154e26ebe": { + "balance": "0x3635c9adc5dea000000" + }, + "4bbcbf38b3c90163a84b1cd2a93b58b2a3348d87": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "4bd6dd0cff23400e1730ba7b894504577d14e74a": { + "balance": "0x2ba0ccddd0df73b00000" + }, + "4be8628a8154874e048d80c142181022b180bcc1": { + "balance": "0x340aad21b3b700000" + }, + "4be90d412129d5a4d0424361d6649d4e47a62316": { + "balance": "0x3708baed3d68900000" + }, + "4bea288eea42c4955eb9faad2a9faf4783cbddac": { + "balance": "0x618be1663c4af490000" + }, + "4bf4479799ef82eea20943374f56a1bf54001e5e": { + "balance": "0xd5967be4fc3f100000" + }, + "4bf8bf1d35a231315764fc8001809a949294fc49": { + "balance": "0x39fbae8d042dd0000" + }, + "4bf8e26f4c2790da6533a2ac9abac3c69a199433": { + "balance": "0xad78ebc5ac6200000" + }, + "4c0aca508b3caf5ee028bc707dd1e800b838f453": { + "balance": "0xfc936392801c0000" + }, + "4c0b1515dfced7a13e13ee12c0f523ae504f032b": { + "balance": "0xa968163f0a57b400000" + }, + "4c13980c32dcf3920b78a4a7903312907c1b123f": { + "balance": "0x3410015faae0c0000" + }, + "4c1579af3312e4f88ae93c68e9449c2e9a68d9c4": { + "balance": "0x6c6b935b8bbd400000" + }, + "4c23b370fc992bb67cec06e26715b62f0b3a4ac3": { + "balance": "0x21e19e0c9bab2400000" + }, + "4c24b78baf2bafc7fcc69016426be973e20a50b2": { + "balance": "0xa2a15d09519be00000" + }, + "4c2f1afef7c5868c44832fc77cb03b55f89e6d6e": { + "balance": "0x43c33c1937564800000" + }, + "4c377bb03ab52c4cb79befa1dd114982924c4ae9": { + "balance": "0x631603ccd38dd70000" + }, + "4c3e95cc3957d252ce0bf0c87d5b4f2234672e70": { + "balance": "0x878678326eac900000" + }, + "4c423c76930d07f93c47a5cc4f615745c45a9d72": { + "balance": "0x56bc75e2d63100000" + }, + "4c45d4c9a725d11112bfcbca00bf31186ccaadb7": { + "balance": "0x15af1d78b58c400000" + }, + "4c4e6f13fb5e3f70c3760262a03e317982691d10": { + "balance": "0x56bc75e2d63100000" + }, + "4c5afe40f18ffc48d3a1aec41fc29de179f4d297": { + "balance": "0x6c6b935b8bbd400000" + }, + "4c5b3dc0e2b9360f91289b1fe13ce12c0fbda3e1": { + "balance": "0x6c6b935b8bbd400000" + }, + "4c666b86f1c5ee8ca41285f5bde4f79052081406": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "4c696be99f3a690440c3436a59a7d7e937d6ba0d": { + "balance": "0xbb9125542263900000" + }, + "4c6a248fc97d705def495ca20759169ef0d36471": { + "balance": "0x29331e6558f0e00000" + }, + "4c6a9dc2cab10abb2e7c137006f08fecb5b779e1": { + "balance": "0x1b0d04202f47ec0000" + }, + "4c6b93a3bec16349540cbfcae96c9621d6645010": { + "balance": "0x6c6b935b8bbd400000" + }, + "4c759813ad1386bed27ffae9e4815e3630cca312": { + "balance": "0x6c6b935b8bbd400000" + }, + "4c760cd9e195ee4f2d6bce2500ff96da7c43ee91": { + "balance": "0xcb49b44ba602d800000" + }, + "4c767b65fd91161f4fbdcc6a69e2f6ad711bb918": { + "balance": "0x270801d946c9400000" + }, + "4c7e2e2b77ad0cd6f44acb2861f0fb8b28750ef9": { + "balance": "0x1158e460913d00000" + }, + "4c85ed362f24f6b9f04cdfccd022ae535147cbb9": { + "balance": "0x5150ae84a8cdf00000" + }, + "4c935bb250778b3c4c7f7e07fc251fa630314aab": { + "balance": "0x5150ae84a8cdf00000" + }, + "4c997992036c5b433ac33d25a8ea1dc3d4e4e6d8": { + "balance": "0x1953b3d4ab1680000" + }, + "4c99dae96481e807c1f99f8b7fbde29b7547c5bf": { + "balance": "0x821ab0d4414980000" + }, + "4c9a862ad115d6c8274ed0b944bdd6a5500510a7": { + "balance": "0x56bc75e2d63100000" + }, + "4ca783b556e5bf53aa13c8116613d65782c9b642": { + "balance": "0x5561840b4ad83c00000" + }, + "4ca7b717d9bc8793b04e051a8d23e1640f5ba5e3": { + "balance": "0x43b514549ecf620000" + }, + "4ca8db4a5efefc80f4cd9bbcccb03265931332b6": { + "balance": "0xad78ebc5ac6200000" + }, + "4cac91fb83a147d2f76c3267984b910a79933348": { + "balance": "0x75792a8abdef7c0000" + }, + "4cadf573ce4ceec78b8e1b21b0ed78eb113b2c0e": { + "balance": "0x6c6b935b8bbd400000" + }, + "4cb5c6cd713ca447b848ae2f56b761ca14d7ad57": { + "balance": "0xe7eeba3410b740000" + }, + "4cc22c9bc9ad05d875a397dbe847ed221c920c67": { + "balance": "0x6c6b935b8bbd400000" + }, + "4cd0b0a6436362595ceade052ebc9b929fb6c6c0": { + "balance": "0x6c6b935b8bbd400000" + }, + "4cda41dd533991290794e22ae324143e309b3d3d": { + "balance": "0x821ab0d44149800000" + }, + "4cee901b4ac8b156c5e2f8a6f1bef572a7dceb7e": { + "balance": "0x3635c9adc5dea00000" + }, + "4cefbe2398e47d52e78db4334c8b697675f193ae": { + "balance": "0xd96fce90cfabcc0000" + }, + "4cf5537b85842f89cfee359eae500fc449d2118f": { + "balance": "0x3635c9adc5dea00000" + }, + "4d08471d68007aff2ae279bc5e3fe4156fbbe3de": { + "balance": "0x878678326eac9000000" + }, + "4d200110124008d56f76981256420c946a6ff45c": { + "balance": "0xad6eedd17cf3b8000" + }, + "4d24b7ac47d2f27de90974ba3de5ead203544bcd": { + "balance": "0x56bc75e2d63100000" + }, + "4d29fc523a2c1629532121da9998e9b5ab9d1b45": { + "balance": "0xdb44e049bb2c0000" + }, + "4d38d90f83f4515c03cc78326a154d358bd882b7": { + "balance": "0xa076407d3f7440000" + }, + "4d4cf5807429615e30cdface1e5aae4dad3055e6": { + "balance": "0x2086ac351052600000" + }, + "4d57e716876c0c95ef5eaebd35c8f41b069b6bfe": { + "balance": "0x6c6b935b8bbd400000" + }, + "4d67f2ab8599fef5fc413999aa01fd7fce70b43d": { + "balance": "0x21e19e0c9bab2400000" + }, + "4d6e8fe109ccd2158e4db114132fe75fecc8be5b": { + "balance": "0x15b3557f1937f8000" + }, + "4d71a6eb3d7f327e1834278e280b039eddd31c2f": { + "balance": "0x14542ba12a337c00000" + }, + "4d7cfaa84cb33106800a8c802fb8aa463896c599": { + "balance": "0x61093d7c2c6d380000" + }, + "4d801093c19ca9b8f342e33cc9c77bbd4c8312cf": { + "balance": "0x12b3e7fb95cda48000" + }, + "4d828894752f6f25175daf2177094487954b6f9f": { + "balance": "0x4f212bc2c49c838000" + }, + "4d82d7700c123bb919419bbaf046799c6b0e2c66": { + "balance": "0x43c33c1937564800000" + }, + "4d836d9d3b0e2cbd4de050596faa490cffb60d5d": { + "balance": "0x1043561a8829300000" + }, + "4d8697af0fbf2ca36e8768f4af22133570685a60": { + "balance": "0x1158e460913d00000" + }, + "4d9279962029a8bd45639737e98b511eff074c21": { + "balance": "0x487a9a304539440000" + }, + "4d93696fa24859f5d2939aebfa54b4b51ae1dccc": { + "balance": "0x10910d4cdc9f60000" + }, + "4d9c77d0750c5e6fbc247f2fd79274686cb353d6": { + "balance": "0x1158e460913d00000" + }, + "4da5edc688b0cb62e1403d1700d9dcb99ffe3fd3": { + "balance": "0x6c6b935b8bbd400000" + }, + "4da8030769844bc34186b85cd4c7348849ff49e9": { + "balance": "0x21e19e0c9bab2400000" + }, + "4db1c43a0f834d7d0478b8960767ec1ac44c9aeb": { + "balance": "0x2f5181305627370000" + }, + "4db21284bcd4f787a7556500d6d7d8f36623cf35": { + "balance": "0x6928374f77a3630000" + }, + "4dc3da13b2b4afd44f5d0d3189f444d4ddf91b1b": { + "balance": "0x6c6b935b8bbd400000" + }, + "4dc4bf5e7589c47b28378d7503cf96488061dbbd": { + "balance": "0x5f68e8131ecf800000" + }, + "4dc9d5bb4b19cecd94f19ec25d200ea72f25d7ed": { + "balance": "0x6c6b935b8bbd400000" + }, + "4dcd11815818ae29b85d01367349a8a7fb12d06b": { + "balance": "0x1ac4286100191f00000" + }, + "4dcf62a3de3f061db91498fd61060f1f6398ff73": { + "balance": "0x6c6acc67d7b1d40000" + }, + "4dd131c74a068a37c90aded4f309c2409f6478d3": { + "balance": "0x15af39e4aab2740000" + }, + "4ddda7586b2237b053a7f3289cf460dc57d37a09": { + "balance": "0x21e19e0c9bab2400000" + }, + "4de3fe34a6fbf634c051997f47cc7f48791f5824": { + "balance": "0x6c5db2a4d815dc0000" + }, + "4df140ba796585dd5489315bca4bba680adbb818": { + "balance": "0x90f534608a72880000" + }, + "4e020779b5ddd3df228a00cb48c2fc979da6ae38": { + "balance": "0x6c6b935b8bbd400000" + }, + "4e0bd32473c4c51bf25654def69f797c6b29a232": { + "balance": "0x56c95de8e8ca1d0000" + }, + "4e2225a1bb59bc88a2316674d333b9b0afca6655": { + "balance": "0x8670e9ec6598c0000" + }, + "4e2310191ead8d3bc6489873a5f0c2ec6b87e1be": { + "balance": "0x3635c9adc5dea00000" + }, + "4e232d53b3e6be8f895361d31c34d4762b12c82e": { + "balance": "0x5f68e8131ecf800000" + }, + "4e2bfa4a466f82671b800eee426ad00c071ba170": { + "balance": "0xd8d726b7177a800000" + }, + "4e3edad4864dab64cae4c5417a76774053dc6432": { + "balance": "0x2008fb478cbfa98000" + }, + "4e4318f5e13e824a54edfe30a7ed4f26cd3da504": { + "balance": "0x6c6b935b8bbd400000" + }, + "4e5b77f9066159e615933f2dda7477fa4e47d648": { + "balance": "0xad78ebc5ac6200000" + }, + "4e6600806289454acda330a2a3556010dfacade6": { + "balance": "0x14542ba12a337c00000" + }, + "4e73cf2379f124860f73d6d91bf59acc5cfc845b": { + "balance": "0x22ca3587cf4eb0000" + }, + "4e7aa67e12183ef9d7468ea28ad239c2eef71b76": { + "balance": "0x10afc1ade3b4ed40000" + }, + "4e7b54474d01fefd388dfcd53b9f662624418a05": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "4e892e8081bf36e488fddb3b2630f3f1e8da30d2": { + "balance": "0x28aba30752451fc0000" + }, + "4e8a6d63489ccc10a57f885f96eb04ecbb546024": { + "balance": "0x3eae3130ecc96900000" + }, + "4e8e47ae3b1ef50c9d54a38e14208c1abd3603c2": { + "balance": "0x7928db1276660c0000" + }, + "4e90ccb13258acaa9f4febc0a34292f95991e230": { + "balance": "0xdb44e049bb2c0000" + }, + "4ea56e1112641c038d0565a9c296c463afefc17e": { + "balance": "0x9ddc1e3b901180000" + }, + "4ea70f04313fae65c3ff224a055c3d2dab28dddf": { + "balance": "0x43c30fb0884a96c0000" + }, + "4eb1454b573805c8aca37edec7149a41f61202f4": { + "balance": "0x1043561a8829300000" + }, + "4eb87ba8788eba0df87e5b9bd50a8e45368091c1": { + "balance": "0x1158e460913d00000" + }, + "4ebc5629f9a6a66b2cf3363ac4895c0348e8bf87": { + "balance": "0x3637096c4bcc690000" + }, + "4ec768295eeabafc42958415e22be216cde77618": { + "balance": "0x33b1dbc39c5480000" + }, + "4ecc19948dd9cd87b4c7201ab48e758f28e7cc76": { + "balance": "0x1b1dab61d3aa640000" + }, + "4ed14d81b60b23fb25054d8925dfa573dcae6168": { + "balance": "0x126e72a69a50d00000" + }, + "4ee13c0d41200b46d19dee5c4bcec71d82bb8e38": { + "balance": "0x1abee13ccbeefaf8000" + }, + "4eead40aad8c73ef08fc84bc0a92c9092f6a36bf": { + "balance": "0x1731790534df20000" + }, + "4eebe80cb6f3ae5904f6f4b28d907f907189fcab": { + "balance": "0x6c6acc67d7b1d40000" + }, + "4eebf1205d0cc20cee6c7f8ff3115f56d48fba26": { + "balance": "0x10d3aa536e2940000" + }, + "4ef1c214633ad9c0703b4e2374a2e33e3e429291": { + "balance": "0x487a9a304539440000" + }, + "4efcd9c79fb4334ca6247b0a33bd9cc33208e272": { + "balance": "0x487a9a304539440000" + }, + "4f06246b8d4bd29661f43e93762201d286935ab1": { + "balance": "0x105394ffc4636110000" + }, + "4f152b2fb8659d43776ebb1e81673aa84169be96": { + "balance": "0x6c6b935b8bbd400000" + }, + "4f177f9d56953ded71a5611f393322c30279895c": { + "balance": "0xd55ef90a2da180000" + }, + "4f1a2da54a4c6da19d142412e56e815741db2325": { + "balance": "0x56bc75e2d63100000" + }, + "4f23b6b817ffa5c664acdad79bb7b726d30af0f9": { + "balance": "0x5f68e8131ecf800000" + }, + "4f26690c992b7a312ab12e1385d94acd58288e7b": { + "balance": "0x2f6f10780d22cc00000" + }, + "4f2b47e2775a1fa7178dad92985a5bbe493ba6d6": { + "balance": "0xad78ebc5ac6200000" + }, + "4f3a4854911145ea01c644044bdb2e5a960a982f": { + "balance": "0xd8d726b7177a800000" + }, + "4f3f2c673069ac97c2023607152981f5cd6063a0": { + "balance": "0x2086ac351052600000" + }, + "4f4a9be10cd5d3fb5de48c17be296f895690645b": { + "balance": "0x878678326eac9000000" + }, + "4f52ad6170d25b2a2e850eadbb52413ff2303e7f": { + "balance": "0xa4cc799563c3800000" + }, + "4f5801b1eb30b712d8a0575a9a71ff965d4f34eb": { + "balance": "0x1043561a8829300000" + }, + "4f5df5b94357de948604c51b7893cddf6076baad": { + "balance": "0xcbd47b6eaa8cc00000" + }, + "4f64a85e8e9a40498c0c75fceb0337fb49083e5e": { + "balance": "0x3635c9adc5dea00000" + }, + "4f67396d2553f998785f704e07a639197dd1948d": { + "balance": "0x104472521ba7380000" + }, + "4f6d4737d7a940382487264886697cf7637f8015": { + "balance": "0x5a87e7d7f5f6580000" + }, + "4f7330096f79ed264ee0127f5d30d2f73c52b3d8": { + "balance": "0x1b1a7a420ba00d0000" + }, + "4f767bc8794aef9a0a38fea5c81f14694ff21a13": { + "balance": "0x1bc433f23f83140000" + }, + "4f85bc1fc5cbc9c001e8f1372e07505370d8c71f": { + "balance": "0x32f51edbaaa3300000" + }, + "4f88dfd01091a45a9e2676021e64286cd36b8d34": { + "balance": "0x3635c9adc5dea00000" + }, + "4f8972838f70c903c9b6c6c46162e99d6216d451": { + "balance": "0xf9e89a0f2c56c80000" + }, + "4f8ae80238e60008557075ab6afe0a7f2e74d729": { + "balance": "0x56bc75e2d63100000" + }, + "4f8e8d274fb22a3fd36a47fe72980471544b3434": { + "balance": "0xad78ebc5ac6200000" + }, + "4f9ce2af9b8c5e42c6808a3870ec576f313545d1": { + "balance": "0x21e19e0c9bab2400000" + }, + "4fa3f32ef4086448b344d5f0a9890d1ce4d617c3": { + "balance": "0x5150ae84a8cdf00000" + }, + "4fa554ab955c249217386a4d3263bbf72895434e": { + "balance": "0x1154e53217ddb0000" + }, + "4fa983bb5e3073a8edb557effeb4f9fb1d60ef86": { + "balance": "0x56b9af57e575ec0000" + }, + "4faf90b76ecfb9631bf9022176032d8b2c207009": { + "balance": "0x36363b5d9a77700000" + }, + "4fc46c396e674869ad9481638f0013630c87caac": { + "balance": "0x3635c9adc5dea00000" + }, + "4fcc19ea9f4c57dcbce893193cfb166aa914edc5": { + "balance": "0x17b8baa7f19546a0000" + }, + "4fce8429ba49caa0369d1e494db57e89eab2ad39": { + "balance": "0x2a5a058fc295ed000000" + }, + "4fdac1aa517007e0089430b3316a1badd12c01c7": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "4fe56ab3bae1b0a44433458333c4b05a248f8241": { + "balance": "0x762d93d1dd6f900000" + }, + "4feb846be43041fd6b34202897943e3f21cb7f04": { + "balance": "0x482fe260cbca90000" + }, + "4fee50c5f988206b09a573469fb1d0b42ebb6dce": { + "balance": "0x6cee06ddbe15ec0000" + }, + "4ff676e27f681a982d8fd9d20e648b3dce05e945": { + "balance": "0x97c9ce4cf6d5c00000" + }, + "4ff67fb87f6efba9279930cfbd1b7a343c79fade": { + "balance": "0x15af1d78b58c400000" + }, + "5006fe4c22173980f00c74342b39cd231c653129": { + "balance": "0x6c6b935b8bbd400000" + }, + "500c16352e901d48ba8d04e2c767121772790b02": { + "balance": "0x1a3a6824973098000" + }, + "500c902958f6421594d1b6ded712490d52ed6c44": { + "balance": "0x6acb3df27e1f880000" + }, + "500e34cde5bd9e2b71bb92d7cf55eee188d5fa0c": { + "balance": "0x121ea68c114e5100000" + }, + "5032e4bcf7932b49fdba377b6f1499636513cfc3": { + "balance": "0x56bc75e2d63100000" + }, + "50378af7ef54043f892ab7ce97d647793511b108": { + "balance": "0x11164759ffb320000" + }, + "503bdbd8bc421c32a443032deb2e3e4cd5ba8b4e": { + "balance": "0x6c6b935b8bbd400000" + }, + "504666ce8931175e11a5ed11c1dcaa06e57f4e66": { + "balance": "0x27f3edfb34e6e400000" + }, + "50584d9206a46ce15c301117ee28f15c30e60e75": { + "balance": "0xb9f65d00f63c0000" + }, + "505a33a18634dd4800693c67f48a1d693d4833f8": { + "balance": "0x18921b79941dcd00000" + }, + "505e4f7c275588c533a20ebd2ac13b409bbdea3c": { + "balance": "0xf43fc2c04ee00000" + }, + "5062e5134c612f12694dbd0e131d4ce197d1b6a4": { + "balance": "0x3635c9adc5dea00000" + }, + "506411fd79003480f6f2b6aac26b7ba792f094b2": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "5067f4549afbfe884c59cbc12b96934923d45db0": { + "balance": "0x3635c9adc5dea00000" + }, + "50763add868fd7361178342fc055eaa2b95f6846": { + "balance": "0x39f9046e0898f0000" + }, + "508cf19119db70aa86454253da764a2cb1b2be1a": { + "balance": "0x3635c9adc5dea00000" + }, + "509982f56237ee458951047e0a2230f804e2e895": { + "balance": "0x3b4ad496106b7f00000" + }, + "509a20bc48e72be1cdaf9569c711e8648d957334": { + "balance": "0x6c6b935b8bbd400000" + }, + "509c8668036d143fb8ae70b11995631f3dfcad87": { + "balance": "0x3635c9adc5dea00000" + }, + "50ad187ab21167c2b6e78be0153f44504a07945e": { + "balance": "0x56cd55fc64dfe0000" + }, + "50b9fef0a1329b02d16506255f5a2db71ec92d1f": { + "balance": "0x47da821564085c0000" + }, + "50bb67c8b8d8bd0f63c4760904f2d333f400aace": { + "balance": "0x6c6b935b8bbd400000" + }, + "50bef2756248f9a7a380f91b051ba3be28a649ed": { + "balance": "0x6c69f73e29134e0000" + }, + "50ca86b5eb1d01874df8e5f34945d49c6c1ab848": { + "balance": "0x3635c9adc5dea00000" + }, + "50cd97e9378b5cf18f173963236c9951ef7438a5": { + "balance": "0x4be4e7267b6ae00000" + }, + "50dcbc27bcad984093a212a9b4178eabe9017561": { + "balance": "0x7e362790b5ca40000" + }, + "50e13023bd9ca96ad4c53fdfd410cb6b1f420bdf": { + "balance": "0xad78ebc5ac6200000" + }, + "50e1c8ec98415bef442618708799437b86e6c205": { + "balance": "0x14542ba12a337c00000" + }, + "50f8fa4bb9e2677c990a4ee8ce70dd1523251e4f": { + "balance": "0x1693d23164f6b0000" + }, + "50fb36c27107ee2ca9a3236e2746cca19ace6b49": { + "balance": "0x6c6b935b8bbd400000" + }, + "50fef296955588caae74c62ec32a23a454e09ab8": { + "balance": "0x411dffabc507380000" + }, + "5102a4a42077e11c58df4773e3ac944623a66d9f": { + "balance": "0x6c7015fd52ed408000" + }, + "51039377eed0c573f986c5e8a95fb99a59e9330f": { + "balance": "0x6acb3df27e1f880000" + }, + "5103bc09933e9921fd53dc536f11f05d0d47107d": { + "balance": "0xd8d726b7177a800000" + }, + "5104ecc0e330dd1f81b58ac9dbb1a9fbf88a3c85": { + "balance": "0x152d02c7e14af6800000" + }, + "510d8159cc945768c7450790ba073ec0d9f89e30": { + "balance": "0x8ac7230489e8000000" + }, + "510eda5601499a0d5e1a006bfffd833672f2e267": { + "balance": "0x6c6b935b8bbd400000" + }, + "51126446ab3d8032557e8eba65597d75fadc815c": { + "balance": "0x1174a5cdf88bc80000" + }, + "5118557d600d05c2fcbf3806ffbd93d02025d730": { + "balance": "0x267d3ab6423f5800000" + }, + "511e0efb04ac4e3ff2e6550e498295bfcd56ffd5": { + "balance": "0x243d4d18229ca20000" + }, + "512116817ba9aaf843d1507c65a5ea640a7b9eec": { + "balance": "0x2b5e3af16b1880000" + }, + "5126460d692c71c9af6f05574d93998368a23799": { + "balance": "0x2d1a51c7e00500000" + }, + "51277fe7c81eebd252a03df69a6b9f326e272207": { + "balance": "0x3402e79cab44c8000" + }, + "51296f5044270d17707646129c86aad1645eadc1": { + "balance": "0x487c72b310d4648000" + }, + "512b91bbfaa9e581ef683fc90d9db22a8f49f48b": { + "balance": "0x41a522386d9b95c00000" + }, + "5135fb8757600cf474546252f74dc0746d06262c": { + "balance": "0x6c6b935b8bbd400000" + }, + "514632efbd642c04de6ca342315d40dd90a2dba6": { + "balance": "0x90f534608a72880000" + }, + "514b7512c9ae5ea63cbf11715b63f21e18d296c1": { + "balance": "0x6c6acc67d7b1d40000" + }, + "5153a0c3c8912881bf1c3501bf64b45649e48222": { + "balance": "0xd8d726b7177a800000" + }, + "515651d6db4faf9ecd103a921bbbbe6ae970fdd4": { + "balance": "0x43c33c1937564800000" + }, + "515f30bc90cdf4577ee47d65d785fbe2e837c6bc": { + "balance": "0x2271b5e018ba0580000" + }, + "5160ed612e1b48e73f3fc15bc4321b8f23b8a24b": { + "balance": "0x1e826b422865d80000" + }, + "5161fd49e847f67455f1c8bb7abb36e985260d03": { + "balance": "0x410d586a20a4c00000" + }, + "516954025fca2608f47da81c215eedfd844a09ff": { + "balance": "0x14b550a013c7380000" + }, + "5169c60aee4ceed1849ab36d664cff97061e8ea8": { + "balance": "0xa2a15d09519be00000" + }, + "517c75430de401c341032686112790f46d4d369e": { + "balance": "0x150894e849b3900000" + }, + "517cd7608e5d0d83a26b717f3603dac2277dc3a4": { + "balance": "0x6c6b935b8bbd400000" + }, + "51865db148881951f51251710e82b9be0d7eadb2": { + "balance": "0x6c6b935b8bbd400000" + }, + "51891b2ccdd2f5a44b2a8bc49a5d9bca6477251c": { + "balance": "0x10ce1d3d8cb3180000" + }, + "518cef27b10582b6d14f69483ddaa0dd3c87bb5c": { + "balance": "0x2086ac351052600000" + }, + "51a6d627f66a8923d88d6094c4715380d3057cb6": { + "balance": "0x3e73d27a35941e0000" + }, + "51a8c2163602a32ee24cf4aa97fd9ea414516941": { + "balance": "0x368f7e6b8672c0000" + }, + "51b4758e9e1450e7af4268c3c7b1e7bd6f5c7550": { + "balance": "0x3635c9adc5dea00000" + }, + "51ca8bd4dc644fac47af675563d5804a0da21eeb": { + "balance": "0x2ab7b260ff3fd00000" + }, + "51d24bc3736f88dd63b7222026886630b6eb878d": { + "balance": "0x6c6b935b8bbd400000" + }, + "51d78b178d707e396e8710965c4f41b1a1d9179d": { + "balance": "0x5fee222041e340000" + }, + "51e32f14f4ca5e287cdac057a7795ea9e0439953": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "51e43fe0d25c782860af81ea89dd793c13f0cbb1": { + "balance": "0x340aad21b3b700000" + }, + "51e7b55c2f9820eed73884361b5066a59b6f45c6": { + "balance": "0x6c6b935b8bbd400000" + }, + "51ea1c0934e3d04022ed9c95a087a150ef705e81": { + "balance": "0x1547081e7224d200000" + }, + "51ee0cca3bcb10cd3e983722ced8493d926c0866": { + "balance": "0x36356633ebd8ea0000" + }, + "51f4663ab44ff79345f427a0f6f8a6c8a53ff234": { + "balance": "0x43c33c1937564800000" + }, + "51f55ef47e6456a418ab32b9221ed27dba6608ee": { + "balance": "0xe3aeb5737240a00000" + }, + "51f9c432a4e59ac86282d6adab4c2eb8919160eb": { + "balance": "0x703b5b89c3a6e7400000" + }, + "520f66a0e2657ff0ac4195f2f064cf2fa4b24250": { + "balance": "0x22b1c8c1227a00000" + }, + "52102354a6aca95d8a2e86d5debda6de69346076": { + "balance": "0x6c6b935b8bbd400000" + }, + "5213f459e078ad3ab95a0920239fcf1633dc04ca": { + "balance": "0x8cf2187c2afb188000" + }, + "5215183b8f80a9bc03d26ce91207832a0d39e620": { + "balance": "0x3635c9adc5dea00000" + }, + "52214378b54004056a7cc08c891327798ac6b248": { + "balance": "0x337fe5feaf2d1800000" + }, + "522323aad71dbc96d85af90f084b99c3f09decb7": { + "balance": "0x14542ba12a337c00000" + }, + "523e140dc811b186dee5d6c88bf68e90b8e096fd": { + "balance": "0x6c6b935b8bbd400000" + }, + "523f6d64690fdacd942853591bb0ff20d3656d95": { + "balance": "0x62a992e53a0af00000" + }, + "524fb210522c5e23bb67dfbf8c26aa616da49955": { + "balance": "0x363562a66d34238000" + }, + "5255dc69155a45b970c604d30047e2f530690e7f": { + "balance": "0x1158e460913d00000" + }, + "5260dc51ee07bddaababb9ee744b393c7f4793a6": { + "balance": "0x1d8665fa5fa4c0000" + }, + "5267f4d41292f370863c90d793296903843625c7": { + "balance": "0x4be4e7267b6ae00000" + }, + "526bb533b76e20c8ee1ebf123f1e9ff4148e40be": { + "balance": "0xaadec983fcff40000" + }, + "526cb09ce3ada3672eec1deb46205be89a4b563e": { + "balance": "0x85ca615bf9c0100000" + }, + "52738c90d860e04cb12f498d96fdb5bf36fc340e": { + "balance": "0x1a055690d9db80000" + }, + "527a8ca1268633a6c939c5de1b929aee92aeac8d": { + "balance": "0x30ca024f987b900000" + }, + "528101ce46b720a2214dcdae6618a53177ffa377": { + "balance": "0x1b9612b9dc01ae0000" + }, + "5281733473e00d87f11e9955e589b59f4ac28e7a": { + "balance": "0x8bd62ff4eec559200000" + }, + "5298ab182a19359ffcecafd7d1b5fa212dede6dd": { + "balance": "0x1158e460913d00000" + }, + "529aa002c6962a3a8545027fd8b05f22b5bf9564": { + "balance": "0x5a87e7d7f5f6580000" + }, + "529e824fa072582b4032683ac7eecc1c04b4cac1": { + "balance": "0x6c6b935b8bbd400000" + }, + "52a5e4de4393eeccf0581ac11b52c683c76ea15d": { + "balance": "0x43c30fb0884a96c0000" + }, + "52b4257cf41b6e28878d50d57b99914ffa89873a": { + "balance": "0xd50dc9aa2c41770000" + }, + "52b8a9592634f7300b7c5c59a3345b835f01b95c": { + "balance": "0x6c6b935b8bbd400000" + }, + "52bdd9af5978850bc24110718b3723759b437e59": { + "balance": "0x5dc892aa1131c80000" + }, + "52cd20403ba7eda6bc307a3d63b5911b817c1263": { + "balance": "0x1158e460913d00000" + }, + "52d380511df19d5ec2807bbcb676581b67fd37a3": { + "balance": "0xb9f65d00f63c0000" + }, + "52e1731350f983cc2c4189842fde0613fad50ce1": { + "balance": "0x277017338a30ae00000" + }, + "52e46783329a769301b175009d346768f4c87ee4": { + "balance": "0x6c6b935b8bbd400000" + }, + "52f058d46147e9006d29bf2c09304ad1cddd6e15": { + "balance": "0x5150ae84a8cdf00000" + }, + "52f15423323c24f19ae2ab673717229d3f747d9b": { + "balance": "0x37a034cbe8e3f38000" + }, + "52f8b509fee1a874ab6f9d87367fbeaf15ac137f": { + "balance": "0x3635c9adc5dea00000" + }, + "52fb46ac5d00c3518b2c3a1c177d442f8165555f": { + "balance": "0x5150ae84a8cdf00000" + }, + "530077c9f7b907ff9cec0c77a41a70e9029add4a": { + "balance": "0x6c6b935b8bbd400000" + }, + "530319db0a8f93e5bb7d4dbf4816314fbed8361b": { + "balance": "0x6c6b935b8bbd400000" + }, + "53047dc8ac9083d90672e8b3473c100ccd278323": { + "balance": "0x22b1c8c1227a00000" + }, + "530b61e42f39426d2408d40852b9e34ab5ebebc5": { + "balance": "0xe7eeba3410b740000" + }, + "530ffac3bc3412e2ec0ea47b7981c770f5bb2f35": { + "balance": "0x73f75d1a085ba0000" + }, + "5317ecb023052ca7f5652be2fa854cfe4563df4d": { + "balance": "0x1b1ab319f5ec750000" + }, + "53194d8afa3e883502767edbc30586af33b114d3": { + "balance": "0x6c6b935b8bbd400000" + }, + "532a7da0a5ad7407468d3be8e07e69c7dd64e861": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "532d32b00f305bcc24dcef56817d622f34fb2c24": { + "balance": "0x6194049f30f7200000" + }, + "533444584082eba654e1ad30e149735c6f7ba922": { + "balance": "0x5dc892aa1131c80000" + }, + "5338ef70eac9dd9af5a0503b5efad1039e67e725": { + "balance": "0x90f534608a72880000" + }, + "53396f4a26c2b4604496306c5442e7fcba272e36": { + "balance": "0x43f2f08d40e5afc0000" + }, + "533a73a4a2228eee05c4ffd718bbf3f9c1b129a7": { + "balance": "0x14542ba12a337c00000" + }, + "533c06928f19d0a956cc28866bf6c8d8f4191a94": { + "balance": "0xfd8c14338e6300000" + }, + "534065361cb854fac42bfb5c9fcde0604ac919da": { + "balance": "0x6c6b935b8bbd400000" + }, + "53437fecf34ab9d435f4deb8ca181519e2592035": { + "balance": "0xa31062beeed700000" + }, + "535201a0a1d73422801f55ded4dfaee4fbaa6e3b": { + "balance": "0x226211f7915428000" + }, + "53608105ce4b9e11f86bf497ffca3b78967b5f96": { + "balance": "0x43c33c1937564800000" + }, + "536e4d8029b73f5579dca33e70b24eba89e11d7e": { + "balance": "0x6acb3df27e1f880000" + }, + "53700d53254d430f22781a4a76a463933b5d6b08": { + "balance": "0x6acb3df27e1f880000" + }, + "537f9d4d31ef70839d84b0d9cdb72b9afedbdf35": { + "balance": "0xed2b525841adfc00000" + }, + "5381448503c0c702542b1de7cc5fb5f6ab1cf6a5": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "53942e7949d6788bb780a7e8a0792781b1614b84": { + "balance": "0x35deb46684f10c80000" + }, + "5395a4455d95d178b4532aa4725b193ffe512961": { + "balance": "0x3635c9adc5dea00000" + }, + "53989ed330563fd57dfec9bd343c3760b0799390": { + "balance": "0x150894e849b39000000" + }, + "53a244672895480f4a2b1cdf7da5e5a242ec4dbc": { + "balance": "0x3635c9adc5dea00000" + }, + "53a714f99fa00fef758e23a2e746326dad247ca7": { + "balance": "0x50c5e761a444080000" + }, + "53af32c22fef99803f178cf90b802fb571c61cb9": { + "balance": "0xd255d112e103a00000" + }, + "53c0bb7fc88ea422d2ef7e540e2d8f28b1bb8183": { + "balance": "0x1158e460913d00000" + }, + "53c5fe0119e1e848640cee30adea96940f2a5d8b": { + "balance": "0x49ada5fa8c10c880000" + }, + "53c9eca40973f63bb5927be0bc6a8a8be1951f74": { + "balance": "0x6c6b935b8bbd400000" + }, + "53ce88e66c5af2f29bbd8f592a56a3d15f206c32": { + "balance": "0x7a28c31cc36040000" + }, + "53cec6c88092f756efe56f7db11228a2db45b122": { + "balance": "0xd8d726b7177a800000" + }, + "53e35b12231f19c3fd774c88fec8cbeedf1408b2": { + "balance": "0x1bc16d674ec8000000" + }, + "53e4d9696dcb3f4d7b3f70dcaa4eecb71782ff5c": { + "balance": "0xad78ebc5ac6200000" + }, + "53faf165be031ec18330d9fce5bd1281a1af08db": { + "balance": "0x796e3ea3f8ab00000" + }, + "540a1819bd7c35861e791804e5fbb3bc97c9abb1": { + "balance": "0x4ed7dac64230200000" + }, + "540c072802014ef0d561345aec481e8e11cb3570": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "540cf23dd95c4d558a279d778d2b3735b3164191": { + "balance": "0x21e19e0c9bab2400000" + }, + "541060fc58c750c40512f83369c0a63340c122b6": { + "balance": "0x6acb3df27e1f880000" + }, + "5413c97ffa4a6e2a7bba8961dc9fce8530a787d7": { + "balance": "0x3635c9adc5dea00000" + }, + "541db20a80cf3b17f1621f1b3ff79b882f50def3": { + "balance": "0x3635c9adc5dea00000" + }, + "542e8096bafb88162606002e8c8a3ed19814aeac": { + "balance": "0x6c6b935b8bbd400000" + }, + "54310b3aa88703a725dfa57de6e646935164802c": { + "balance": "0x678a932062e4180000" + }, + "5431b1d18751b98fc9e2888ac7759f1535a2db47": { + "balance": "0x6c6b935b8bbd400000" + }, + "5431ca427e6165a644bae326bd09750a178c650d": { + "balance": "0x6c6b935b8bbd400000" + }, + "5435c6c1793317d32ce13bba4c4ffeb973b78adc": { + "balance": "0xd8e6b1c1285ef0000" + }, + "543629c95cdef428ad37d453ca9538a9f90900ac": { + "balance": "0x92896529baddc880000" + }, + "54391b4d176d476cea164e5fb535c69700cb2535": { + "balance": "0x56cd55fc64dfe0000" + }, + "543a8c0efb8bcd15c543e2a6a4f807597631adef": { + "balance": "0x13f80e7e14f2d440000" + }, + "543f8c674e2462d8d5daa0e80195a8708e11a29e": { + "balance": "0x37758833b3a7a0000" + }, + "544b5b351d1bc82e9297439948cf4861dac9ae11": { + "balance": "0x4a89f54ef0121c00000" + }, + "544dda421dc1eb73bb24e3e56a248013b87c0f44": { + "balance": "0x6acb3df27e1f880000" + }, + "54575c3114751e3c631971da6a2a02fd3ffbfcc8": { + "balance": "0x692ae8897081d00000" + }, + "545bb070e781172eb1608af7fc2895d6cb87197e": { + "balance": "0x79a5c17ec748900000" + }, + "5475d7f174bdb1f789017c7c1705989646079d49": { + "balance": "0x1fd933494aa5fe00000" + }, + "548558d08cfcb101181dac1eb6094b4e1a896fa6": { + "balance": "0x6c6acc67d7b1d40000" + }, + "54939ff08921b467cf2946751d856378296c63ed": { + "balance": "0x3635c9adc5dea00000" + }, + "549b47649cfad993e4064d2636a4baa0623305cc": { + "balance": "0x209d922f5259c50000" + }, + "549d51af29f724c967f59423b85b2681e7b15136": { + "balance": "0xcbd47b6eaa8cc00000" + }, + "54a1370116fe22099e015d07cd2669dd291cc9d1": { + "balance": "0x1158e460913d00000" + }, + "54a62bf9233e146ffec3876e45f20ee8414adeba": { + "balance": "0x21e19e0c9bab2400000" + }, + "54b4429b182f0377be7e626939c5db6440f75d7a": { + "balance": "0x6acb3df27e1f880000" + }, + "54bcb8e7f73cda3d73f4d38b2d0847e600ba0df8": { + "balance": "0x3a70415882df180000" + }, + "54c93e03a9b2e8e4c3672835a9ee76f9615bc14e": { + "balance": "0x10d3aa536e2940000" + }, + "54ce88275956def5f9458e3b95decacd484021a0": { + "balance": "0x6c6b935b8bbd400000" + }, + "54db5e06b4815d31cb56a8719ba33af2d73e7252": { + "balance": "0x24521e2a3017b80000" + }, + "54e01283cc8b384538dd646770b357c960d6cacd": { + "balance": "0x10f0cf064dd59200000" + }, + "54ec7300b81ac84333ed1b033cd5d7a33972e234": { + "balance": "0xad78ebc5ac6200000" + }, + "54febcce20fe7a9098a755bd90988602a48c089e": { + "balance": "0x22b1c8c1227a000000" + }, + "550aadae1221b07afea39fba2ed62e05e5b7b5f9": { + "balance": "0x1158e460913d00000" + }, + "550c306f81ef5d9580c06cb1ab201b95c748a691": { + "balance": "0x2417d4c470bf140000" + }, + "551999ddd205563327b9b530785acff9bc73a4ba": { + "balance": "0x14542ba12a337c00000" + }, + "551e7784778ef8e048e495df49f2614f84a4f1dc": { + "balance": "0x2086ac351052600000" + }, + "5529830a61c1f13c197e550beddfd6bd195c9d02": { + "balance": "0x21e19e0c9bab2400000" + }, + "552987f0651b915b2e1e5328c121960d4bdd6af4": { + "balance": "0x61093d7c2c6d380000" + }, + "553b6b1c57050e88cf0c31067b8d4cd1ff80cb09": { + "balance": "0x15af1d78b58c400000" + }, + "553f37d92466550e9fd775ae74362df030179132": { + "balance": "0x6c6b935b8bbd400000" + }, + "554336ee4ea155f9f24f87bca9ca72e253e12cd2": { + "balance": "0x56bc75e2d63100000" + }, + "5543dd6d169eec8a213bbf7a8af9ffd15d4ff759": { + "balance": "0xfc936392801c0000" + }, + "5547fdb4ae11953e01292b7807fa9223d0e4606a": { + "balance": "0x55d117dcb1d260000" + }, + "5552f4b3ed3e1da79a2f78bb13e8ae5a68a9df3b": { + "balance": "0x3635c9adc5dea00000" + }, + "555ca9f05cc134ab54ae9bea1c3ff87aa85198ca": { + "balance": "0x56bc75e2d63100000" + }, + "555d8d3ce1798aca902754f164b8be2a02329c6c": { + "balance": "0x21e19e0c9bab2400000" + }, + "555df19390c16d01298772bae8bc3a1152199cbd": { + "balance": "0xad78ebc5ac6200000" + }, + "555ebe84daa42ba256ea789105cec4b693f12f18": { + "balance": "0x56bc75e2d63100000" + }, + "557f5e65e0da33998219ad4e99570545b2a9d511": { + "balance": "0x2559cbb985842400000" + }, + "558360206883dd1b6d4a59639e5629d0f0c675d0": { + "balance": "0x6c6b935b8bbd400000" + }, + "5584423050e3c2051f0bbd8f44bd6dbc27ecb62c": { + "balance": "0xa2a15d09519be00000" + }, + "55852943492970f8d629a15366cdda06a94f4513": { + "balance": "0x6c6b935b8bbd400000" + }, + "55866486ec168f79dbe0e1abb18864d98991ae2c": { + "balance": "0xdf6eb0b2d3ca0000" + }, + "558c54649a8a6e94722bd6d21d14714f71780534": { + "balance": "0x6c6b935b8bbd400000" + }, + "559194304f14b1b93afe444f0624e053c23a0009": { + "balance": "0x15af1d78b58c400000" + }, + "5593c9d4b664730fd93ca60151c25c2eaed93c3b": { + "balance": "0xad78ebc5ac6200000" + }, + "559706c332d20779c45f8a6d046a699159b74921": { + "balance": "0x149b442e85a3cf8000" + }, + "5598b3a79a48f32b1f5fc915b87b645d805d1afe": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "55a3df57b7aaec16a162fd5316f35bec082821cf": { + "balance": "0x6acb3df27e1f880000" + }, + "55a4cac0cb8b582d9fef38c5c9fff9bd53093d1f": { + "balance": "0x6acb3df27e1f880000" + }, + "55a61b109480b5b2c4fcfdef92d90584160c0d35": { + "balance": "0x26c564d2b53f60000" + }, + "55aa5d313ebb084da0e7801091e29e92c5dec3aa": { + "balance": "0x6c6b935b8bbd400000" + }, + "55ab99b0e0e55d7bb874b7cfe834de631c97ec23": { + "balance": "0x37e98ce36899e40000" + }, + "55af092f94ba6a79918b0cf939eab3f01b3f51c7": { + "balance": "0x820d5e39576120000" + }, + "55c564664166a1edf3913e0169f1cd451fdb5d0c": { + "balance": "0x8217ea49508e6c0000" + }, + "55ca6abe79ea2497f46fdbb830346010fe469cbe": { + "balance": "0x1369fb96128ac480000" + }, + "55caff4bba04d220c9a5d2018672ec85e31ef83e": { + "balance": "0x6c6b935b8bbd400000" + }, + "55d057bcc04bd0f4af9642513aa5090bb3ff93fe": { + "balance": "0x3bfe452c8edd4c0000" + }, + "55d42eb495bf46a634997b5f2ea362814918e2b0": { + "balance": "0x5c0d265b5b2a80000" + }, + "55da9dcdca61cbfe1f133c7bcefc867b9c8122f9": { + "balance": "0x2fb474098f67c00000" + }, + "55e220876262c218af4f56784798c7e55da09e91": { + "balance": "0x73d99c15645d30000" + }, + "55fd08d18064bd202c0ec3d2cce0ce0b9d169c4d": { + "balance": "0x6acb3df27e1f880000" + }, + "5600730a55f6b20ebd24811faa3de96d1662abab": { + "balance": "0x65ea3db75546600000" + }, + "5603241eb8f08f721e348c9d9ad92f48e390aa24": { + "balance": "0xad78ebc5ac6200000" + }, + "560536794a9e2b0049d10233c41adc5f418a264a": { + "balance": "0x3635c9adc5dea00000" + }, + "5607590059a9fec1881149a44b36949aef85d560": { + "balance": "0x6c6b935b8bbd400000" + }, + "560becdf52b71f3d8827d927610f1a980f33716f": { + "balance": "0x17474d705f56d08000" + }, + "560da37e956d862f81a75fd580a7135c1b246352": { + "balance": "0x21e19e0c9bab2400000" + }, + "560fc08d079f047ed8d7df75551aa53501f57013": { + "balance": "0x19bff2ff57968c00000" + }, + "561be9299b3e6b3e63b79b09169d1a948ae6db01": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "562020e3ed792d2f1835fe5f55417d5111460c6a": { + "balance": "0x43c33c1937564800000" + }, + "5620f46d1451c2353d6243a5d4b427130be2d407": { + "balance": "0x340aad21b3b700000" + }, + "562105e82b099735de49f62692cc87cd38a8edcd": { + "balance": "0x14542ba12a337c00000" + }, + "562a8dcbbeeef7b360685d27303bd69e094accf6": { + "balance": "0x21e19e0c9bab2400000" + }, + "562bced38ab2ab6c080f3b0541b8456e70824b3f": { + "balance": "0x22ca3587cf4eb00000" + }, + "562be95aba17c5371fe2ba828799b1f55d2177d6": { + "balance": "0x816d37e87b9d1e00000" + }, + "562f16d79abfcec3943e34b20f05f97bdfcda605": { + "balance": "0xd8d726b7177a800000" + }, + "56373daab46316fd7e1576c61e6affcb6559ddd7": { + "balance": "0xbac715d146c9e0000" + }, + "56397638bb3cebf1f62062794b5eb942f916171d": { + "balance": "0x6c6b935b8bbd400000" + }, + "563a03ab9c56b600f6d25b660c21e16335517a75": { + "balance": "0x3635c9adc5dea00000" + }, + "563cb8803c1d32a25b27b64114852bd04d9c20cd": { + "balance": "0xb149ead0ad9d80000" + }, + "56586391040c57eec6f5affd8cd4abde10b50acc": { + "balance": "0xd8d726b7177a800000" + }, + "566c10d638e8b88b47d6e6a414497afdd00600d4": { + "balance": "0x56b394263a40c0000" + }, + "566c28e34c3808d9766fe8421ebf4f2b1c4f7d77": { + "balance": "0x6acb3df27e1f880000" + }, + "568df31856699bb5acfc1fe1d680df9960ca4359": { + "balance": "0x4acf5552f3b2498000" + }, + "5691dd2f6745f20e22d2e1d1b955aa2903d65656": { + "balance": "0x6ac5c62d9486070000" + }, + "56a1d60d40f57f308eebf087dee3b37f1e7c2cba": { + "balance": "0x3edcaec82d06f80000" + }, + "56ac20d63bd803595cec036da7ed1dc66e0a9e07": { + "balance": "0x3772a53ccdc658000" + }, + "56b6c23dd2ec90b4728f3bb2e764c3c50c85f144": { + "balance": "0x3635c9adc5dea00000" + }, + "56df05bad46c3f00ae476ecf017bb8c877383ff1": { + "balance": "0xab15daaef70400000" + }, + "56ee197f4bbf9f1b0662e41c2bbd9aa1f799e846": { + "balance": "0x3635c9adc5dea00000" + }, + "56f493a3d108aaa2d18d98922f8efe1662cfb73d": { + "balance": "0x6d8121a194d1100000" + }, + "56fc1a7bad4047237ce116146296238e078f93ad": { + "balance": "0x9a63f08ea63880000" + }, + "56febf9e1003af15b1bd4907ec089a4a1b91d268": { + "balance": "0xad78ebc5ac6200000" + }, + "5717cc9301511d4a81b9f583148beed3d3cc8309": { + "balance": "0x8cf23f909c0fa00000" + }, + "5717f2d8f18ffcc0e5fe247d3a4219037c3a649c": { + "balance": "0xd8bb6549b02bb80000" + }, + "571950ea2c90c1427d939d61b4f2de4cf1cfbfb0": { + "balance": "0x1158e460913d00000" + }, + "5719f49b720da68856f4b9e708f25645bdbc4b41": { + "balance": "0x22b1c8c1227a000000" + }, + "572ac1aba0de23ae41a7cae1dc0842d8abfc103b": { + "balance": "0x678a932062e4180000" + }, + "572dd8cd3fe399d1d0ec281231b7cefc20b9e4bb": { + "balance": "0x233c8fe42703e800000" + }, + "574921838cc77d6c98b17d903a3ae0ee0da95bd0": { + "balance": "0xb5328178ad0f2a00000" + }, + "574ad9355390e4889ef42acd138b2a27e78c00ae": { + "balance": "0x5467b732a913340000" + }, + "574de1b3f38d915846ae3718564a5ada20c2f3ed": { + "balance": "0xd8d726b7177a800000" + }, + "575c00c2818210c28555a0ff29010289d3f82309": { + "balance": "0x21e19e0c9bab2400000" + }, + "5773b6026721a1dd04b7828cd62b591bfb34534c": { + "balance": "0x5b7ac4553de7ae00000" + }, + "5777441c83e03f0be8dd340bde636850847c620b": { + "balance": "0x21e19e0c9bab2400000" + }, + "5778ffdc9b94c5a59e224eb965b6de90f222d170": { + "balance": "0x122d7ff36603fc0000" + }, + "577aeee8d4bc08fc97ab156ed57fb970925366be": { + "balance": "0x120df1147258bf0000" + }, + "577b2d073c590c50306f5b1195a4b2ba9ecda625": { + "balance": "0x1440bdd49515f00000" + }, + "577bfe64e3a1e3800e94db1c6c184d8dc8aafc66": { + "balance": "0x5134ed17417f280000" + }, + "57825aeb09076caa477887fbc9ae37e8b27cc962": { + "balance": "0x56bc75e2d63100000" + }, + "57883010b4ac857fedac03eab2551723a8447ffb": { + "balance": "0x3635c9adc5dea00000" + }, + "5789d01db12c816ac268e9af19dc0dd6d99f15df": { + "balance": "0xad78ebc5ac6200000" + }, + "5792814f59a33a1843faa01baa089eb02ffb5cf1": { + "balance": "0x1b1ab319f5ec750000" + }, + "5793abe6f1533311fd51536891783b3f9625ef1c": { + "balance": "0x2cd8a656f23fda0000" + }, + "5797b60fd2894ab3c2f4aede86daf2e788d745ad": { + "balance": "0x14542ba12a337c00000" + }, + "57a852fdb9b1405bf53ccf9508f83299d3206c52": { + "balance": "0x6c6b935b8bbd400000" + }, + "57b23d6a1adc06c652a779c6a7fb6b95b9fead66": { + "balance": "0xad78ebc5ac6200000" + }, + "57bc20e2d62b3d19663cdb4c309d5b4f2fc2db8f": { + "balance": "0x56bc75e2d63100000" + }, + "57bddf078834009c89d88e6282759dc45335b470": { + "balance": "0x74717cfb6883100000" + }, + "57beea716cbd81700a73d67f9ff039529c2d9025": { + "balance": "0xad78ebc5ac6200000" + }, + "57d032a43d164e71aa2ef3ffd8491b0a4ef1ea5b": { + "balance": "0x6c6b935b8bbd400000" + }, + "57d3df804f2beee6ef53ab94cb3ee9cf524a18d3": { + "balance": "0x1556616b9606670000" + }, + "57d5fd0e3d3049330ffcdcd020456917657ba2da": { + "balance": "0x6bf20195f554d40000" + }, + "57dd9471cbfa262709f5f486bcb774c5f527b8f8": { + "balance": "0xaadec983fcff40000" + }, + "57df23bebdc65eb75feb9cb2fad1c073692b2baf": { + "balance": "0xd8d726b7177a800000" + }, + "5800cd8130839e94495d2d8415a8ea2c90e0c5cb": { + "balance": "0xad78ebc5ac6200000" + }, + "5803e68b34da121aef08b602badbafb4d12481ca": { + "balance": "0x3cfc82e37e9a7400000" + }, + "5816c2687777b6d7d2a2432d59a41fa059e3a406": { + "balance": "0x1c4fe43adb0a5e900000" + }, + "581a3af297efa4436a29af0072929abf9826f58b": { + "balance": "0x6c6b935b8bbd400000" + }, + "581b9fd6eae372f3501f42eb9619eec820b78a84": { + "balance": "0x42be2c00ca53b8d8000" + }, + "581bdf1bb276dbdd86aedcdb397a01efc0e00c5b": { + "balance": "0x3635c9adc5dea00000" + }, + "581f34b523e5b41c09c87c298e299cbc0e29d066": { + "balance": "0x3d5833aafd39758000" + }, + "5824a7e22838277134308c5f4b50dab65e43bb31": { + "balance": "0x14542ba12a337c00000" + }, + "582b70669c97aab7d68148d8d4e90411e2810d56": { + "balance": "0x36356633ebd8ea0000" + }, + "582e7cc46f1d7b4e6e9d95868bfd370573178f4c": { + "balance": "0x6c6b935b8bbd400000" + }, + "583e83ba55e67e13e0e76f8392d873cd21fbf798": { + "balance": "0x1158e460913d00000" + }, + "5869fb867d71f1387f863b698d09fdfb87c49b5c": { + "balance": "0xc6bbf858b316080000" + }, + "587d6849b168f6c3332b7abae7eb6c42c37f48bf": { + "balance": "0x2fb474098f67c00000" + }, + "5887dc6a33dfed5ac1edefe35ef91a216231ac96": { + "balance": "0xd8d726b7177a80000" + }, + "588ed990a2aff44a94105d58c305257735c868ac": { + "balance": "0x368c8623a8b4d100000" + }, + "58ae2ddc5f4c8ada97e06c0086171767c423f5d7": { + "balance": "0x57473d05dabae80000" + }, + "58aed6674affd9f64233272a578dd9386b99c263": { + "balance": "0xb8507a820728200000" + }, + "58b808a65b51e6338969afb95ec70735e451d526": { + "balance": "0x8784bc1b9837a380000" + }, + "58b8ae8f63ef35ed0762f0b6233d4ac14e64b64d": { + "balance": "0x6c6b935b8bbd400000" + }, + "58ba1569650e5bbbb21d35d3e175c0d6b0c651a9": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "58c555bc293cdb16c6362ed97ae9550b92ea180e": { + "balance": "0x1158e460913d00000" + }, + "58c650ced40bb65641b8e8a924a039def46854df": { + "balance": "0x100bd33fb98ba0000" + }, + "58c90754d2f20a1cb1dd330625e04b45fa619d5c": { + "balance": "0x6c6b935b8bbd400000" + }, + "58e2f11223fc8237f69d99c6289c148c0604f742": { + "balance": "0x5150ae84a8cdf000000" + }, + "58e554af3d87629620da61d538c7f5b4b54c4afe": { + "balance": "0x46509d694534728000" + }, + "58e5c9e344c806650dacfc904d33edba5107b0de": { + "balance": "0x10910d4cdc9f60000" + }, + "58e661d0ba73d6cf24099a5562b808f7b3673b68": { + "balance": "0x6c6b935b8bbd400000" + }, + "58f05b262560503ca761c61890a4035f4c737280": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "58fb947364e7695765361ebb1e801ffb8b95e6d0": { + "balance": "0xad78ebc5ac6200000" + }, + "590181d445007bd0875aaf061c8d51153900836a": { + "balance": "0x6c6b935b8bbd400000" + }, + "5902e44af769a87246a21e079c08bf36b06efeb3": { + "balance": "0x3635c9adc5dea00000" + }, + "590acbda37290c0d3ec84fc2000d7697f9a4b15d": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "590ccb5911cf78f6f622f535c474375f4a12cfcf": { + "balance": "0x43c33c1937564800000" + }, + "5910106debd291a1cd80b0fbbb8d8d9e93a7cc1e": { + "balance": "0x6c6b935b8bbd400000" + }, + "59161749fedcf1c721f2202d13ade2abcf460b3d": { + "balance": "0x6c6b935b8bbd400000" + }, + "591bef3171d1c5957717a4e98d17eb142c214e56": { + "balance": "0x43c33c1937564800000" + }, + "59203cc37599b648312a7cc9e06dacb589a9ae6a": { + "balance": "0x80f7971b6400e8000" + }, + "59268171b833e0aa13c54b52ccc0422e4fa03aeb": { + "balance": "0xa2a15d09519be00000" + }, + "592777261e3bd852c48eca95b3a44c5b7f2d422c": { + "balance": "0x43c33c1937564800000" + }, + "593044670faeff00a55b5ae051eb7be870b11694": { + "balance": "0x73f75d1a085ba0000" + }, + "593b45a1864ac5c7e8f0caaeba0d873cd5d113b2": { + "balance": "0x14542ba12a337c00000" + }, + "593c48935beaff0fde19b04d309cd530a28e52ce": { + "balance": "0xd8d726b7177a800000" + }, + "59473cd300fffae240f5785626c65dfec792b9af": { + "balance": "0x1158e460913d00000" + }, + "5948bc3650ed519bf891a572679fd992f8780c57": { + "balance": "0xaadec983fcff40000" + }, + "594a76f06935388dde5e234696a0668bc20d2ddc": { + "balance": "0x97c9ce4cf6d5c00000" + }, + "59569a21d28fba4bda37753405a081f2063da150": { + "balance": "0xd8d726b7177a800000" + }, + "5956b28ec7890b76fc061a1feb52d82ae81fb635": { + "balance": "0x6c6b935b8bbd400000" + }, + "595e23d788a2d4bb85a15df7136d264a635511b3": { + "balance": "0xd5967be4fc3f100000" + }, + "597038ff91a0900cbbab488af483c790e6ec00a0": { + "balance": "0x21e19e0c9bab2400000" + }, + "5970fb1b144dd751e4ce2eca7caa20e363dc4da3": { + "balance": "0x21e19e0c9bab2400000" + }, + "5975b9528f23af1f0e2ec08ac8ebaa786a2cb8e0": { + "balance": "0x12bf50503ae3038000" + }, + "5975d78d974ee5bb9e4d4ca2ae77c84b9c3b4b82": { + "balance": "0x4a4491bd6dcd280000" + }, + "5985c59a449dfc5da787d8244e746c6d70caa55f": { + "balance": "0x56bc75e2d63100000" + }, + "598aaabae9ed833d7bc222e91fcaa0647b77580b": { + "balance": "0x6194049f30f7200000" + }, + "5992624c54cdec60a5ae938033af8be0c50cbb0a": { + "balance": "0xc454e0f8870f2b0000" + }, + "599728a78618d1a17b9e34e0fed8e857d5c40622": { + "balance": "0x2f6f10780d22cc00000" + }, + "5997ffefb3c1d9d10f1ae2ac8ac3c8e2d2292783": { + "balance": "0x3635c9adc5dea00000" + }, + "59a087b9351ca42f58f36e021927a22988284f38": { + "balance": "0x100bd33fb98ba0000" + }, + "59a12df2e3ef857aceff9306b309f6a500f70134": { + "balance": "0x3635c9adc5dea00000" + }, + "59b96deb8784885d8d3b4a166143cc435d2555a1": { + "balance": "0x487a9a304539440000" + }, + "59b9e733cba4be00429b4bd9dfa64732053a7d55": { + "balance": "0x1158e460913d00000" + }, + "59c5d06b170ee4d26eb0a0eb46cb7d90c1c91019": { + "balance": "0x21e19e0c9bab2400000" + }, + "59c7f785c93160e5807ed34e5e534bc6188647a7": { + "balance": "0x22b1c8c1227a000000" + }, + "59d139e2e40c7b97239d23dfaca33858f602d22b": { + "balance": "0x6c6b935b8bbd400000" + }, + "59f6247b0d582aaa25e5114765e4bf3c774f43c2": { + "balance": "0x2b5e3af16b1880000" + }, + "59fe00696dbd87b7976b29d1156c8842a2e17914": { + "balance": "0x6c6b935b8bbd400000" + }, + "5a0d609aae2332b137ab3b2f26615a808f37e433": { + "balance": "0x21e19e0c9bab24000000" + }, + "5a192b964afd80773e5f5eda6a56f14e25e0c6f3": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "5a1a336962d6e0c63031cc83c6a5c6a6f4478ecb": { + "balance": "0x3635c9adc5dea00000" + }, + "5a1d2d2d1d520304b6208849570437eb3091bb9f": { + "balance": "0x6acb3df27e1f880000" + }, + "5a267331facb262daaecd9dd63a9700c5f5259df": { + "balance": "0x56bc75e2d63100000" + }, + "5a285755391e914e58025faa48cc685f4fd4f5b8": { + "balance": "0x581767ba6189c400000" + }, + "5a2916b8d2e8cc12e207ab464d433e2370d823d9": { + "balance": "0x6c6b935b8bbd400000" + }, + "5a2b1c853aeb28c45539af76a00ac2d8a8242896": { + "balance": "0x15af1d78b58c40000" + }, + "5a2daab25c31a61a92a4c82c9925a1d2ef58585e": { + "balance": "0xc380da9c7950c0000" + }, + "5a30feac37ac9f72d7b4af0f2bc73952c74fd5c3": { + "balance": "0x6c6b935b8bbd400000" + }, + "5a5468fa5ca226c7532ecf06e1bc1c45225d7ec9": { + "balance": "0x678a932062e4180000" + }, + "5a565285374a49eedd504c957d510874d00455bc": { + "balance": "0x56bc75e2d63100000" + }, + "5a5ee8e9bb0e8ab2fecb4b33d29478be50bbd44b": { + "balance": "0x2a1129d09367200000" + }, + "5a5f8508da0ebebb90be9033bd4d9e274105ae00": { + "balance": "0x16a6502f15a1e540000" + }, + "5a6071bcebfcba4ab57f4db96fc7a68bece2ba5b": { + "balance": "0x6c6b935b8bbd400000" + }, + "5a60c924162873fc7ea4da7f972e350167376031": { + "balance": "0x487f277a885798000" + }, + "5a6686b0f17e07edfc59b759c77d5bef164d3879": { + "balance": "0x50c5e761a444080000" + }, + "5a70106f20d63f875265e48e0d35f00e17d02bc9": { + "balance": "0x1158e460913d00000" + }, + "5a74ba62e7c81a3474e27d894fed33dd24ad95fe": { + "balance": "0xfc936392801c0000" + }, + "5a7735007d70b06844da9901cdfadb11a2582c2f": { + "balance": "0x14542ba12a337c00000" + }, + "5a82f96cd4b7e2d93d10f3185dc8f43d4b75aa69": { + "balance": "0x6c633fbab98c040000" + }, + "5a87f034e6f68f4e74ffe60c64819436036cf7d7": { + "balance": "0x1158e460913d00000" + }, + "5a891155f50e42074374c739baadf7df2651153a": { + "balance": "0x102da6fd0f73a3c0000" + }, + "5a9c8b69fc614d69564999b00dcb42db67f97e90": { + "balance": "0xb9e615abad3a778000" + }, + "5aaf1c31254a6e005fba7f5ab0ec79d7fc2b630e": { + "balance": "0x14061b9d77a5e980000" + }, + "5ab1a5615348001c7c775dc75748669b8be4de14": { + "balance": "0x256a72fb29e69c0000" + }, + "5abfec25f74cd88437631a7731906932776356f9": { + "balance": "0x9d83cc0dfa11177ff8000" + }, + "5ac2908b0f398c0df5bac2cb13ca7314fba8fa3d": { + "balance": "0xad4c8316a0b0c0000" + }, + "5ac99ad7816ae9020ff8adf79fa9869b7cea6601": { + "balance": "0x472698b413b43200000" + }, + "5ad12c5ed4fa827e2150cfa0d68c0aa37b1769b8": { + "balance": "0x2b5e3af16b18800000" + }, + "5ad5e420755613886f35aa56ac403eebdfe4b0d0": { + "balance": "0x10f0cf064dd592000000" + }, + "5ade77fd81c25c0af713b10702768c1eb2f975e7": { + "balance": "0x1158e460913d00000" + }, + "5ae64e853ba0a51282cb8db52e41615e7c9f733f": { + "balance": "0x6c6b935b8bbd400000" + }, + "5aed0e6cfe95f9d680c76472a81a2b680a7f93e2": { + "balance": "0xaadec983fcff40000" + }, + "5aef16a226dd68071f2483e1da42598319f69b2c": { + "balance": "0x6c6b935b8bbd400000" + }, + "5af46a25ac09cb73616b53b14fb42ff0a51cddb2": { + "balance": "0xd8d726b7177a800000" + }, + "5af7c072b2c5acd71c76addcce535cf7f8f93585": { + "balance": "0x1158e460913d00000" + }, + "5afda9405c8e9736514574da928de67456010918": { + "balance": "0x145b8b0239a46920000" + }, + "5b06d1e6930c1054692b79e3dbe6ecce53966420": { + "balance": "0xb227f63be813c0000" + }, + "5b25cae86dcafa2a60e7723631fc5fa49c1ad87d": { + "balance": "0x870c58510e85200000" + }, + "5b287c7e734299e727626f93fb1187a60d5057fe": { + "balance": "0x57cd934a914cb0000" + }, + "5b290c01967c812e4dc4c90b174c1b4015bae71e": { + "balance": "0x820eb348d52b90000" + }, + "5b2b64e9c058e382a8b299224eecaa16e09c8d92": { + "balance": "0x8ba52e6fc45e40000" + }, + "5b2e2f1618552eab0db98add55637c2951f1fb19": { + "balance": "0x28a857425466f800000" + }, + "5b30608c678e1ac464a8994c3b33e5cdf3497112": { + "balance": "0x15af1d78b58c400000" + }, + "5b333696e04cca1692e71986579c920d6b2916f9": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "5b430d779696a3653fc60e74fbcbacf6b9c2baf1": { + "balance": "0x2f6f10780d22cc00000" + }, + "5b437365ae3a9a2ff97c68e6f90a7620188c7d19": { + "balance": "0x6c8754c8f30c080000" + }, + "5b49afcd75447838f6e7ceda8d21777d4fc1c3c0": { + "balance": "0xd8d726b7177a800000" + }, + "5b4c0c60f10ed2894bdb42d9dd1d210587810a0d": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "5b4ea16db6809b0352d4b6e81c3913f76a51bb32": { + "balance": "0x15af1d78b58c400000" + }, + "5b5be0d8c67276baabd8edb30d48ea75640b8b29": { + "balance": "0x2cb1f55fb7be100000" + }, + "5b5d517029321562111b43086d0b043591109a70": { + "balance": "0x8cf23f909c0fa00000" + }, + "5b5d8c8eed6c85ac215661de026676823faa0a0c": { + "balance": "0x43c33c1937564800000" + }, + "5b6d55f6712967405c659129f4b1de09acf2cb7b": { + "balance": "0xe7eeba3410b740000" + }, + "5b70c49cc98b3df3fbe2b1597f5c1b6347a388b7": { + "balance": "0x34957444b840e80000" + }, + "5b736eb18353629bde9676dadd165034ce5ecc68": { + "balance": "0x6acb3df27e1f880000" + }, + "5b759fa110a31c88469f54d44ba303d57dd3e10f": { + "balance": "0x5b46dd2f0ea3b80000" + }, + "5b7784caea01799ca30227827667ce207c5cbc76": { + "balance": "0x6c6b935b8bbd400000" + }, + "5b78eca27fbdea6f26befba8972b295e7814364b": { + "balance": "0x6c6b935b8bbd400000" + }, + "5b800bfd1b3ed4a57d875aed26d42f1a7708d72a": { + "balance": "0x15a82d1d5bb88e00000" + }, + "5b85e60e2af0544f2f01c64e2032900ebd38a3c7": { + "balance": "0x6c6b935b8bbd400000" + }, + "5ba2c6c35dfaec296826591904d544464aeabd5e": { + "balance": "0x1158e460913d00000" + }, + "5baf6d749620803e8348af3710e5c4fbf20fc894": { + "balance": "0x10f4002615dfe900000" + }, + "5bc1f95507b1018642e45cd9c0e22733b9b1a326": { + "balance": "0x56bc75e2d63100000" + }, + "5bd23547477f6d09d7b2a005c5ee650c510c56d7": { + "balance": "0x21e19e0c9bab2400000" + }, + "5bd24aac3612b20c609eb46779bf95698407c57c": { + "balance": "0x6acb3df27e1f880000" + }, + "5bd6862d517d4de4559d4eec0a06cad05e2f946e": { + "balance": "0xad78ebc5ac6200000" + }, + "5be045512a026e3f1cebfd5a7ec0cfc36f2dc16b": { + "balance": "0x68155a43676e00000" + }, + "5bf9f2226e5aeacf1d80ae0a59c6e38038bc8db5": { + "balance": "0x14542ba12a337c00000" + }, + "5bfafe97b1dd1d712be86d41df79895345875a87": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "5c0f2e51378f6b0d7bab617331580b6e39ad3ca5": { + "balance": "0x2086ac3510526000000" + }, + "5c29f9e9a523c1f8669448b55c48cbd47c25e610": { + "balance": "0x3446a0dad04cb00000" + }, + "5c308bac4857d33baea074f3956d3621d9fa28e1": { + "balance": "0x10f08eda8e555098000" + }, + "5c312a56c784b122099b764d059c21ece95e84ca": { + "balance": "0x52663ccab1e1c0000" + }, + "5c31996dcac015f9be985b611f468730ef244d90": { + "balance": "0xad78ebc5ac6200000" + }, + "5c323457e187761a8276e359b7b7af3f3b6e3df6": { + "balance": "0x21e19e0c9bab2400000" + }, + "5c3c1c645b917543113b3e6c1c054da1fe742b9a": { + "balance": "0x2b5e3af16b18800000" + }, + "5c3d19441d196cb443662020fcad7fbb79b29e78": { + "balance": "0xc673ce3c40160000" + }, + "5c3f567faff7bad1b5120022e8cbcaa82b4917b3": { + "balance": "0x6c6b935b8bbd400000" + }, + "5c4368918ace6409c79eca80cdaae4391d2b624e": { + "balance": "0xd8d726b7177a800000" + }, + "5c464197791c8a3da3c925436f277ab13bf2faa2": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "5c4881165cb42bb82e97396c8ef44adbf173fb99": { + "balance": "0x5fee222041e340000" + }, + "5c4892907a0720df6fd3413e63ff767d6b398023": { + "balance": "0x2cb009fd3b5790f8000" + }, + "5c4f24e994ed8f850ea7818f471c8fac3bcf0452": { + "balance": "0x5d80688d9e31c00000" + }, + "5c5419565c3aad4e714e0739328e3521c98f05cc": { + "balance": "0x1c9f78d2893e400000" + }, + "5c6136e218de0a61a137b2b3962d2a6112b809d7": { + "balance": "0xff3dbb65ff4868000" + }, + "5c61ab79b408dd3229f662593705d72f1e147bb8": { + "balance": "0x4d0243d3498cd840000" + }, + "5c6d041da7af4487b9dc48e8e1f60766d0a56dbc": { + "balance": "0x4f070a003e9c740000" + }, + "5c6f36af90ab1a656c6ec8c7d521512762bba3e1": { + "balance": "0x6c68ccd09b022c0000" + }, + "5c7b9ec7a2438d1e3c7698b545b9c3fd77b7cd55": { + "balance": "0x3635c9adc5dea00000" + }, + "5c936f3b9d22c403db5e730ff177d74eef42dbbf": { + "balance": "0x410d586a20a4c0000" + }, + "5cb731160d2e8965670bde925d9de5510935347d": { + "balance": "0x22b1c8c1227a00000" + }, + "5cb953a0e42f5030812226217fffc3ce230457e4": { + "balance": "0x56bc75e2d63100000" + }, + "5cbd8daf27ddf704cdd0d909a789ba36ed4f37b2": { + "balance": "0xb9f65d00f63c0000" + }, + "5cc4cba621f220637742057f6055b80dffd77e13": { + "balance": "0x878477b7d253b660000" + }, + "5cc7d3066d45d27621f78bb4b339473e442a860f": { + "balance": "0x21e1899f0377aea0000" + }, + "5cccf1508bfd35c20530aa642500c10dee65eaed": { + "balance": "0x2e141ea081ca080000" + }, + "5cce72d068c7c3f55b1d2819545e77317cae8240": { + "balance": "0x692ae8897081d00000" + }, + "5cd0e475b54421bdfc0c12ea8e082bd7a5af0a6a": { + "balance": "0x332ca1b67940c0000" + }, + "5cd588a14ec648ccf64729f9167aa7bf8be6eb3d": { + "balance": "0x3635c9adc5dea00000" + }, + "5cd8af60de65f24dc3ce5730ba92653022dc5963": { + "balance": "0x61093d7c2c6d380000" + }, + "5cdc4708f14f40dcc15a795f7dc8cb0b7faa9e6e": { + "balance": "0x1d1c5f3eda20c40000" + }, + "5ce0b6862cce9162e87e0849e387cb5df4f9118c": { + "balance": "0x5a87e7d7f5f6580000" + }, + "5ce2e7ceaaa18af0f8aafa7fbad74cc89e3cd436": { + "balance": "0x43c33c1937564800000" + }, + "5ce44068b8f4a3fe799e6a8311dbfdeda29dee0e": { + "balance": "0x6c6b935b8bbd400000" + }, + "5cebe30b2a95f4aefda665651dc0cf7ef5758199": { + "balance": "0xfc936392801c0000" + }, + "5cf18fa7c8a7c0a2b3d5efd1990f64ddc569242c": { + "balance": "0x3635c9adc5dea00000" + }, + "5cf44e10540d65716423b1bcb542d21ff83a94cd": { + "balance": "0x21e19e0c9bab2400000" + }, + "5cf8c03eb3e872e50f7cfd0c2f8d3b3f2cb5183a": { + "balance": "0xad78ebc5ac6200000" + }, + "5cfa8d568575658ca4c1a593ac4c5d0e44c60745": { + "balance": "0xfc66fae3746ac0000" + }, + "5cfa9877f719c79d9e494a08d1e41cf103fc87c9": { + "balance": "0xad78ebc5ac6200000" + }, + "5d1dc3387b47b8451e55106c0cc67d6dc72b7f0b": { + "balance": "0x6c6b935b8bbd400000" + }, + "5d231a70c1dfeb360abd97f616e2d10d39f3cab5": { + "balance": "0x15af1d78b58c400000" + }, + "5d24bdbc1c47f0eb83d128cae48ac33c4817e91f": { + "balance": "0x3635c9adc5dea00000" + }, + "5d2819e8d57821922ee445650ccaec7d40544a8d": { + "balance": "0xad78ebc5ac6200000" + }, + "5d2f7f0b04ba4be161e19cb6f112ce7a5e7d7fe4": { + "balance": "0x1e87f85809dc00000" + }, + "5d32f6f86e787ff78e63d78b0ef95fe6071852b8": { + "balance": "0x15be6174e1912e0000" + }, + "5d39ef9ea6bdfff15d11fe91f561a6f9e31f5da5": { + "balance": "0x6c6b935b8bbd400000" + }, + "5d3f3b1f7130b0bb21a0fd32396239179a25657f": { + "balance": "0xd3ab8ea5e8fd9e80000" + }, + "5d5751819b4f3d26ed0c1ac571552735271dbefa": { + "balance": "0x3635c9adc5dea00000" + }, + "5d5c2c1099bbeefb267e74b58880b444d94449e0": { + "balance": "0xdbf0bd181e2e70000" + }, + "5d5cdbe25b2a044b7b9be383bcaa5807b06d3c6b": { + "balance": "0x6c6b935b8bbd400000" + }, + "5d5d6e821c6eef96810c83c491468560ef70bfb5": { + "balance": "0x6c6b935b8bbd400000" + }, + "5d68324bcb776d3ffd0bf9fea91d9f037fd6ab0f": { + "balance": "0x6c6b935b8bbd400000" + }, + "5d6ae8cbd6b3393c22d16254100d0238e808147c": { + "balance": "0x2707e56d51a30c0000" + }, + "5d6c5c720d66a6abca8397142e63d26818eaab54": { + "balance": "0x22b1c8c1227a00000" + }, + "5d6ccf806738091042ad97a6e095fe8c36aa79c5": { + "balance": "0xa31062beeed700000" + }, + "5d71799c8df3bccb7ee446df50b8312bc4eb71c5": { + "balance": "0xad78ebc5ac6200000" + }, + "5d822d9b3ef4b502627407da272f67814a6becd4": { + "balance": "0x1158e460913d00000" + }, + "5d83b21bd2712360436b67a597ee3378db3e7ae4": { + "balance": "0x6c6b935b8bbd400000" + }, + "5d872b122e994ef27c71d7deb457bf65429eca6c": { + "balance": "0x1b1aded81d394108000" + }, + "5d8d31faa864e22159cd6f5175ccecc53fa54d72": { + "balance": "0x5b696b70dd567100000" + }, + "5d958a9bd189c2985f86c58a8c69a7a78806e8da": { + "balance": "0x228f16f861578600000" + }, + "5da2a9a4c2c0a4a924cbe0a53ab9d0c627a1cfa0": { + "balance": "0x27bf38c6544df50000" + }, + "5da4ca88935c27f55c311048840e589e04a8a049": { + "balance": "0x4563918244f400000" + }, + "5da54785c9bd30575c89deb59d2041d20a39e17b": { + "balance": "0x6aa209f0b91d658000" + }, + "5db69fe93e6fb6fbd450966b97238b110ad8279a": { + "balance": "0x878678326eac9000000" + }, + "5db7bba1f9573f24115d8c8c62e9ce8895068e9f": { + "balance": "0x2b5aad72c65200000" + }, + "5db84400570069a9573cab04b4e6b69535e202b8": { + "balance": "0x20dd68aaf3289100000" + }, + "5dc36de5359450a1ec09cb0c44cf2bb42b3ae435": { + "balance": "0x3c946d893b33060000" + }, + "5dc6f45fef26b06e3302313f884daf48e2746fb9": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "5dcdb6b87a503c6d8a3c65c2cf9a9aa883479a1e": { + "balance": "0x1f2bba5d84f99c00000" + }, + "5dd112f368c0e6ceff77a9df02a5481651a02fb7": { + "balance": "0x93472c85c6d540000" + }, + "5dd53ae897526b167d39f1744ef7c3da5b37a293": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "5dded049a6e1f329dc4b971e722c9c1f2ade83f0": { + "balance": "0x3635c9adc5dea00000" + }, + "5de598aba344378cab4431555b4f79992dc290c6": { + "balance": "0x487a9a304539440000" + }, + "5de9e7d5d1b667d095dd34099c85b0421a0bc681": { + "balance": "0x1158e460913d00000" + }, + "5df3277ca85936c7a0d2c0795605ad25095e7159": { + "balance": "0x6c6b935b8bbd400000" + }, + "5dff811dad819ece3ba602c383fb5dc64c0a3a48": { + "balance": "0xa1544be879ea80000" + }, + "5e031b0a724471d476f3bcd2eb078338bf67fbef": { + "balance": "0xfc936392801c0000" + }, + "5e0785532c7723e4c0af9357d5274b73bdddddde": { + "balance": "0x54b41ea9bdb61dc0000" + }, + "5e11ecf69d551d7f4f84df128046b3a13240a328": { + "balance": "0x1158e460913d00000" + }, + "5e1fbd4e58e2312b3c78d7aaaafa10bf9c3189e3": { + "balance": "0x878678326eac9000000" + }, + "5e32c72191b8392c55f510d8e3326e3a60501d62": { + "balance": "0x9513ea9de0243800000" + }, + "5e51b8a3bb09d303ea7c86051582fd600fb3dc1a": { + "balance": "0x1158e460913d00000" + }, + "5e58e255fc19870a04305ff2a04631f2ff294bb1": { + "balance": "0xf43fc2c04ee00000" + }, + "5e5a441974a83d74c687ebdc633fb1a49e7b1ad7": { + "balance": "0xa2a15d09519be00000" + }, + "5e65458be964ae449f71773704979766f8898761": { + "balance": "0x1ca7cc735b6f7c0000" + }, + "5e67df8969101adabd91accd6bb1991274af8df2": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "5e6e9747e162f8b45c656e0f6cae7a84bac80e4e": { + "balance": "0x6c6b935b8bbd400000" + }, + "5e731b55ced452bb3f3fe871ddc3ed7ee6510a8f": { + "balance": "0xa2a15d09519be00000" + }, + "5e74ed80e9655788e1bb269752319667fe754e5a": { + "balance": "0x30927f74c9de00000" + }, + "5e772e27f28800c50dda973bb33e10762e6eea20": { + "balance": "0x61093d7c2c6d380000" + }, + "5e7b8c54dc57b0402062719dee7ef5e37ea35d62": { + "balance": "0x9bf9810fd05c840000" + }, + "5e7f70378775589fc66a81d3f653e954f55560eb": { + "balance": "0x83f289181d84c80000" + }, + "5e806e845730f8073e6cc9018ee90f5c05f909a3": { + "balance": "0x201e96dacceaf200000" + }, + "5e8e4df18cf0af770978a8df8dac90931510a679": { + "balance": "0x6c6b935b8bbd400000" + }, + "5e90c85877198756b0366c0e17b28e52b446505a": { + "balance": "0x144a4a18efeb680000" + }, + "5e95fe5ffcf998f9f9ac0e9a81dab83ead77003d": { + "balance": "0x1d42c20d32797f0000" + }, + "5ead29037a12896478b1296ab714e9cb95428c81": { + "balance": "0x3e043072d406e0000" + }, + "5eb371c407406c427b3b7de271ad3c1e04269579": { + "balance": "0xa2a15d09519be00000" + }, + "5ecdbaeab9106ffe5d7b519696609a05baeb85ad": { + "balance": "0x1158e460913d00000" + }, + "5ed0d6338559ef44dc7a61edeb893fa5d83fa1b5": { + "balance": "0xbed1d0263d9f00000" + }, + "5ed3bbc05240e0d399eb6ddfe60f62de4d9509af": { + "balance": "0x2914c02475f9d6d30000" + }, + "5ed3f1ebe2ae6756b5d8dc19cad02c419aa5778b": { + "balance": "0x0" + }, + "5ed56115bd6505a88273df5c56839470d24a2db7": { + "balance": "0x38e6591ee56668000" + }, + "5ef8c96186b37984cbfe04c598406e3b0ac3171f": { + "balance": "0x1fd933494aa5fe00000" + }, + "5efbdfe5389999633c26605a5bfc2c1bb5959393": { + "balance": "0x3c057c95cd9080000" + }, + "5f13154631466dcb1353c890932a7c97e0878e90": { + "balance": "0x14542ba12a337c00000" + }, + "5f167aa242bc4c189adecb3ac4a7c452cf192fcf": { + "balance": "0x6c6b4c4da6ddbe0000" + }, + "5f1c8a04c90d735b8a152909aeae636fb0ce1665": { + "balance": "0x17b7827618c5a370000" + }, + "5f23ba1f37a96c45bc490259538a54c28ba3b0d5": { + "balance": "0x410d586a20a4c00000" + }, + "5f26cf34599bc36ea67b9e7a9f9b4330c9d542a3": { + "balance": "0x3635c9adc5dea00000" + }, + "5f29c9de765dde25852af07d33f2ce468fd20982": { + "balance": "0x6c6b935b8bbd400000" + }, + "5f2f07d2d697e8c567fcfdfe020f49f360be2139": { + "balance": "0x6c6b935b8bbd400000" + }, + "5f321b3daaa296cadf29439f9dab062a4bffedd6": { + "balance": "0x47025903ea7ae0000" + }, + "5f333a3b2310765a0d1832b9be4c0a03704c1c09": { + "balance": "0x3635c9adc5dea00000" + }, + "5f344b01c7191a32d0762ac188f0ec2dd460911d": { + "balance": "0x3635c9adc5dea00000" + }, + "5f363e0ab747e02d1b3b66abb69ea53c7baf523a": { + "balance": "0x277017338a30ae00000" + }, + "5f375b86600c40cca8b2676b7a1a1d1644c5f52c": { + "balance": "0x44618d74c623f0000" + }, + "5f3e1e6739b0c62200e00a003691d9efb238d89f": { + "balance": "0xa2a15d09519be00000" + }, + "5f483ffb8f680aedf2a38f7833afdcde59b61e4b": { + "balance": "0x6c6b935b8bbd400000" + }, + "5f4ace4c1cc13391e01f00b198e1f20b5f91cbf5": { + "balance": "0x10f0fa8b9d3811a0000" + }, + "5f521282e9b278dc8c034c72af53ee29e5443d78": { + "balance": "0x161732d2f8f3ae00000" + }, + "5f68a24c7eb4117667737b33393fb3c2148a53b6": { + "balance": "0x2cede918d453c0000" + }, + "5f708eaf39d823946c51b3a3e9b7b3c003e26341": { + "balance": "0x62a992e53a0af00000" + }, + "5f742e487e3ab81af2f94afdbe1b9b8f5ccc81bc": { + "balance": "0x75c445d41163e60000" + }, + "5f74ed0e24ff80d9b2c4a44baa9975428cd6b935": { + "balance": "0xa18bcec34888100000" + }, + "5f76f0a306269c78306b3d650dc3e9c37084db61": { + "balance": "0x821ab0d44149800000" + }, + "5f77a107ab1226b3f95f10ee83aefc6c5dff3edc": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "5f7b3bbac16dab831a4a0fc53b0c549dc36c31ca": { + "balance": "0x692ae8897081d00000" + }, + "5f93ff832774db5114c55bb4bf44ccf3b58f903f": { + "balance": "0x28a9c91a263458290000" + }, + "5f9616c47b4a67f406b95a14fe6fc268396f1721": { + "balance": "0xad78ebc5ac6200000" + }, + "5f981039fcf50225e2adf762752112d1cc26b6e3": { + "balance": "0x1b1a416a2153a50000" + }, + "5f99dc8e49e61d57daef606acdd91b4d7007326a": { + "balance": "0xa2a15d09519be00000" + }, + "5fa61f152de6123516c751242979285f796ac791": { + "balance": "0xb0f11972963b00000" + }, + "5fa7bfe043886127d4011d8356a47e947963aca8": { + "balance": "0x62a992e53a0af00000" + }, + "5fa8a54e68176c4fe2c01cf671c515bfbdd528a8": { + "balance": "0x45e155fa0110fa400000" + }, + "5fad960f6b2c84569c9f4d47bf1985fcb2c65da6": { + "balance": "0x36356633ebd8ea0000" + }, + "5fc6c11426b4a1eae7e51dd512ad1090c6f1a85b": { + "balance": "0x93fe5c57d710680000" + }, + "5fcd84546896dd081db1a320bd4d8c1dd1528c4c": { + "balance": "0x1158e460913d00000" + }, + "5fcda847aaf8d7fa8bca08029ca2849166aa15a3": { + "balance": "0x21cab81259a3bf0000" + }, + "5fd1c3e31778276cb42ea740f5eae9c641dbc701": { + "balance": "0xa844a7424d9c80000" + }, + "5fd3d6777ec2620ae83a05528ed425072d3ca8fd": { + "balance": "0x6c6b935b8bbd400000" + }, + "5fd973af366aa5157c54659bcfb27cbfa5ac15d6": { + "balance": "0xd8d726b7177a800000" + }, + "5fe77703808f823e6c399352108bdb2c527cb87c": { + "balance": "0x6a4076cf7995a00000" + }, + "5fec49c665e64ee89dd441ee74056e1f01e92870": { + "balance": "0x1569b9e733474c00000" + }, + "5ff326cd60fd136b245e29e9087a6ad3a6527f0d": { + "balance": "0x65ea3db75546600000" + }, + "5ff93de6ee054cad459b2d5eb0f6870389dfcb74": { + "balance": "0xbed1d0263d9f00000" + }, + "6006e36d929bf45d8f16231b126a011ae283d925": { + "balance": "0x98a7d9b8314c00000" + }, + "6021e85a8814fce1e82a41abd1d3b2dad2faefe0": { + "balance": "0x6c6b935b8bbd400000" + }, + "6038740ae28d66ba93b0be08482b3205a0f7a07b": { + "balance": "0x11216185c29f700000" + }, + "603f2fab7afb6e017b94766069a4b43b38964923": { + "balance": "0x59d2db2414da990000" + }, + "6042276df2983fe2bc4759dc1943e18fdbc34f77": { + "balance": "0x6acb3df27e1f880000" + }, + "6042c644bae2b96f25f94d31f678c90dc96690db": { + "balance": "0x6c6b935b8bbd400000" + }, + "604cdf18628dbfa8329194d478dd5201eecc4be7": { + "balance": "0x13f306a2409fc0000" + }, + "604e9477ebf4727c745bcabbedcb6ccf29994022": { + "balance": "0x36369ed7747d260000" + }, + "60676d1fa21fca052297e24bf96389c5b12a70d7": { + "balance": "0xd177c5a7a68d60000" + }, + "60676e92d18b000509c61de540e6c5ddb676d509": { + "balance": "0x410d586a20a4c00000" + }, + "606f177121f7855c21a5062330c8762264a97b31": { + "balance": "0xd8d726b7177a800000" + }, + "60864236930d04d8402b5dcbeb807f3caf611ea2": { + "balance": "0xd8d726b7177a800000" + }, + "60ab71cd26ea6d6e59a7a0f627ee079c885ebbf6": { + "balance": "0x1731790534df20000" + }, + "60af0ee118443c9b37d2fead77f5e521debe1573": { + "balance": "0x678a932062e4180000" + }, + "60b358cb3dbefa37f47df2d7365840da8e3bc98c": { + "balance": "0x1158e460913d00000" + }, + "60b8d6b73b79534fb08bb8cbcefac7f393c57bfe": { + "balance": "0x5f68e8131ecf800000" + }, + "60be6f953f2a4d25b6256ffd2423ac1438252e4e": { + "balance": "0x821ab0d4414980000" + }, + "60c3714fdddb634659e4a2b1ea42c4728cc7b8ba": { + "balance": "0xb98bc829a6f90000" + }, + "60cc3d445ebdf76a7d7ae571c6971dff68cc8585": { + "balance": "0x3635c9adc5dea00000" + }, + "60d5667140d12614b21c8e5e8a33082e32dfcf23": { + "balance": "0x43c33c1937564800000" + }, + "60de22a1507432a47b01cc68c52a0bf8a2e0d098": { + "balance": "0x10910d4cdc9f60000" + }, + "60e0bdd0a259bb9cb09d3f37e5cd8b9daceabf8a": { + "balance": "0x4a4491bd6dcd280000" + }, + "60e3cc43bcdb026aad759c7066f555bbf2ac66f5": { + "balance": "0x6c6b935b8bbd400000" + }, + "61042b80fd6095d1b87be2f00f109fabafd157a6": { + "balance": "0x56bc75e2d63100000" + }, + "6107d71dd6d0eefb11d4c916404cb98c753e117d": { + "balance": "0x6c6b935b8bbd400000" + }, + "610fd6ee4eebab10a8c55d0b4bd2e7d6ef817156": { + "balance": "0x1159561065d5d0000" + }, + "6114b0eae5576903f80bfb98842d24ed92237f1e": { + "balance": "0x56bc75e2d63100000" + }, + "6121af398a5b2da69f65c6381aec88ce9cc6441f": { + "balance": "0x22b1c8c1227a000000" + }, + "612667f172135b950b2cd1de10afdece6857b873": { + "balance": "0x3635c9adc5dea00000" + }, + "612ced8dc0dc9e899ee46f7962333315f3f55e44": { + "balance": "0x125e35f9cd3d9b0000" + }, + "6134d942f037f2cc3d424a230c603d67abd3edf7": { + "balance": "0x6c6b935b8bbd400000" + }, + "613ac53be565d46536b820715b9b8d3ae68a4b95": { + "balance": "0xcbd47b6eaa8cc00000" + }, + "613fab44b16bbe554d44afd178ab1d02f37aeaa5": { + "balance": "0x6c6b935b8bbd400000" + }, + "614e8bef3dd2c59b59a4145674401018351884ea": { + "balance": "0x1158e460913d00000" + }, + "61518464fdd8b73c1bb6ac6db600654938dbf17a": { + "balance": "0xad78ebc5ac6200000" + }, + "61547d376e5369bcf978fc162c3c56ae453547e8": { + "balance": "0xad78ebc5ac6200000" + }, + "6158e107c5eb54cb7604e0cd8dc1e07500d91c3c": { + "balance": "0x2b5e3af16b1880000" + }, + "615a6f36777f40d6617eb5819896186983fd3731": { + "balance": "0x14061b9d77a5e980000" + }, + "615f82365c5101f071e7d2cb6af14f7aad2c16c6": { + "balance": "0x1158e460913d00000" + }, + "6170dd0687bd55ca88b87adef51cfdc55c4dd458": { + "balance": "0x6cb32f5c34fe440000" + }, + "61733947fab820dbd351efd67855ea0e881373a0": { + "balance": "0x1158e460913d00000" + }, + "6179979907fe7f037e4c38029d60bcbab832b3d6": { + "balance": "0x57473d05dabae80000" + }, + "617f20894fa70e94a86a49cd74e03238f64d3cd9": { + "balance": "0x10f0dbae61009528000" + }, + "617ff2cc803e31c9082233b825d025be3f7b1056": { + "balance": "0x6acb3df27e1f880000" + }, + "6191ddc9b64a8e0890b4323709d7a07c48b92a64": { + "balance": "0x2a034919dfbfbc0000" + }, + "6196c3d3c0908d254366b7bca55745222d9d4db1": { + "balance": "0xd8d726b7177a800000" + }, + "619f171445d42b02e2e07004ad8afe694fa53d6a": { + "balance": "0x1158e460913d00000" + }, + "61adf5929a5e2981684ea243baa01f7d1f5e148a": { + "balance": "0x5fabf6c984f230000" + }, + "61b1b8c012cd4c78f698e470f90256e6a30f48dd": { + "balance": "0xad78ebc5ac6200000" + }, + "61b3df2e9e9fd968131f1e88f0a0eb5bd765464d": { + "balance": "0xd8d726b7177a800000" + }, + "61b902c5a673885826820d1fe14549e4865fbdc2": { + "balance": "0x1224efed2ae1918000" + }, + "61b905de663fc17386523b3a28e2f7d037a655cd": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "61ba87c77e9b596de7ba0e326fddfeec2163ef66": { + "balance": "0xad78ebc5ac6200000" + }, + "61bf84d5ab026f58c873f86ff0dfca82b55733ae": { + "balance": "0x6c6b935b8bbd400000" + }, + "61c4ee7c864c4d6b5e37ea1331c203739e826b2f": { + "balance": "0x1a1353b382a918000" + }, + "61c830f1654718f075ccaba316faacb85b7d120b": { + "balance": "0x15af1d78b58c400000" + }, + "61c8f1fa43bf846999ecf47b2b324dfb6b63fe3a": { + "balance": "0x2b5e3af16b18800000" + }, + "61c9dce8b2981cb40e98b0402bc3eb28348f03ac": { + "balance": "0xaacacd9b9e22b0000" + }, + "61cea71fa464d62a07063f920b0cc917539733d8": { + "balance": "0x5a87e7d7f5f6580000" + }, + "61d101a033ee0e2ebb3100ede766df1ad0244954": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "61ed5596c697207f3d55b2a51aa7d50f07fa09e8": { + "balance": "0x6c6b935b8bbd400000" + }, + "61ff8e67b34d9ee6f78eb36ffea1b9f7c15787af": { + "balance": "0x58e7926ee858a00000" + }, + "6205c2d5647470848a3840f3887e9b015d34755c": { + "balance": "0x6194049f30f7200000" + }, + "6228ade95e8bb17d1ae23bfb0518414d497e0eb8": { + "balance": "0x15af1d78b58c400000" + }, + "6229dcc203b1edccfdf06e87910c452a1f4d7a72": { + "balance": "0x6e1d41a8f9ec3500000" + }, + "622be4b45495fcd93143efc412d699d6cdc23dc5": { + "balance": "0xf015f25736420000" + }, + "62331df2a3cbee3520e911dea9f73e905f892505": { + "balance": "0x6c6b935b8bbd400000" + }, + "625644c95a873ef8c06cdb9e9f6d8d7680043d62": { + "balance": "0x6194049f30f7200000" + }, + "6265b2e7730f36b776b52d0c9d02ada55d8e3cb6": { + "balance": "0x3635c9adc5dea00000" + }, + "62680a15f8ccb8bdc02f7360c25ad8cfb57b8ccd": { + "balance": "0x3635c9adc5dea00000" + }, + "6294eae6e420a3d5600a39c4141f838ff8e7cc48": { + "balance": "0xa030dcebbd2f4c0000" + }, + "62971bf2634cee0be3c9890f51a56099dbb9519b": { + "balance": "0x238fd42c5cf0400000" + }, + "629be7ab126a5398edd6da9f18447e78c692a4fd": { + "balance": "0x6c6b935b8bbd400000" + }, + "62b4a9226e61683c72c183254690daf511b4117a": { + "balance": "0xe18398e7601900000" + }, + "62b9081e7710345e38e02e16449ace1b85bcfc4e": { + "balance": "0x3154c9729d05780000" + }, + "62c37c52b97f4b040b1aa391d6dec152893c4707": { + "balance": "0x3635c9adc5dea00000" + }, + "62c9b271ffd5b770a5eee4edc9787b5cdc709714": { + "balance": "0x6c6b935b8bbd400000" + }, + "62d5cc7117e18500ac2f9e3c26c86b0a94b0de15": { + "balance": "0x5b12aefafa8040000" + }, + "62dc72729024375fc37cbb9c7c2393d10233330f": { + "balance": "0x6c6b935b8bbd400000" + }, + "62e6b2f5eb94fa7a43831fc87e254a3fe3bf8f89": { + "balance": "0xd8d726b7177a80000" + }, + "62f2e5ccecd52cc4b95e0597df27cc079715608c": { + "balance": "0x7c0860e5a80dc0000" + }, + "62fb8bd1f0e66b90533e071e6cbe6111fef0bc63": { + "balance": "0x3ba1910bf341b000000" + }, + "630a913a9031c9492abd4c41dbb15054cfec4416": { + "balance": "0x13458db67af35e00000" + }, + "630c5273126d517ce67101811cab16b8534cf9a8": { + "balance": "0x1feccc62573bbd38000" + }, + "631030a5b27b07288a45696f189e1114f12a81c0": { + "balance": "0x1b1a7a420ba00d0000" + }, + "6310b020fd98044957995092090f17f04e52cdfd": { + "balance": "0x55a6e79ccd1d300000" + }, + "632b9149d70178a7333634275e82d5953f27967b": { + "balance": "0x25f273933db5700000" + }, + "632cecb10cfcf38ec986b43b8770adece9200221": { + "balance": "0x1158e460913d00000" + }, + "6331028cbb5a21485bc51b565142993bdb2582a9": { + "balance": "0x1cfdd7468216e80000" + }, + "63334fcf1745840e4b094a3bb40bb76f9604c04c": { + "balance": "0xd7a5d703a717e80000" + }, + "63340a57716bfa63eb6cd133721202575bf796f0": { + "balance": "0xb61e0a20c12718000" + }, + "634efc24371107b4cbf03f79a93dfd93e431d5fd": { + "balance": "0x423582e08edc5c8000" + }, + "635c00fdf035bca15fa3610df3384e0fb79068b1": { + "balance": "0x1e7e4171bf4d3a00000" + }, + "63612e7862c27b587cfb6daf9912cb051f030a9f": { + "balance": "0x25b19d4bfe8ed0000" + }, + "63666755bd41b5986997783c13043008242b3cb5": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "637be71b3aa815ff453d5642f73074450b64c82a": { + "balance": "0x6c6b935b8bbd400000" + }, + "637d67d87f586f0a5a479e20ee13ea310a10b647": { + "balance": "0xa3a5926afa1e7300000" + }, + "637f5869d6e4695f0eb9e27311c4878aff333380": { + "balance": "0x6ac04e68aaec860000" + }, + "63977cad7d0dcdc52b9ac9f2ffa136e8642882b8": { + "balance": "0x410d586a20a4c0000" + }, + "63a61dc30a8e3b30a763c4213c801cbf98738178": { + "balance": "0x3635c9adc5dea00000" + }, + "63ac545c991243fa18aec41d4f6f598e555015dc": { + "balance": "0x2086ac351052600000" + }, + "63b9754d75d12d384039ec69063c0be210d5e0e3": { + "balance": "0x920b860cc8ecfd8000" + }, + "63bb664f9117037628594da7e3c5089fd618b5b5": { + "balance": "0x1158e460913d00000" + }, + "63c2a3d235e5eeabd0d4a6afdb89d94627396495": { + "balance": "0x434ef05b9d84820000" + }, + "63c8dfde0b8e01dadc2e748c824cc0369df090b3": { + "balance": "0xd255d112e103a00000" + }, + "63d55ad99b9137fd1b20cc2b4f03d42cbaddf334": { + "balance": "0x15af1d78b58c400000" + }, + "63d80048877596e0c28489e650cd4ac180096a49": { + "balance": "0xf2dc7d47f15600000" + }, + "63e414603e80d4e5a0f5c18774204642258208e4": { + "balance": "0x10f0cf064dd59200000" + }, + "63e88e2e539ffb450386b4e46789b223f5476c45": { + "balance": "0x155170a778e25d00000" + }, + "63ef2fbc3daf5edaf4a295629ccf31bcdf4038e5": { + "balance": "0x4f2591f896a6500000" + }, + "63f0e5a752f79f67124eed633ad3fd2705a397d4": { + "balance": "0xd5967be4fc3f100000" + }, + "63f5b53d79bf2e411489526530223845fac6f601": { + "balance": "0x65a4da25d3016c00000" + }, + "63fc93001305adfbc9b85d29d9291a05f8f1410b": { + "balance": "0x3635c9adc5dea00000" + }, + "63fe6bcc4b8a9850abbe75803730c932251f145b": { + "balance": "0xfc936392801c0000" + }, + "6403d062549690c8e8b63eae41d6c109476e2588": { + "balance": "0x6c6b935b8bbd400000" + }, + "64042ba68b12d4c151651ca2813b7352bd56f08e": { + "balance": "0x2086ac351052600000" + }, + "6405dd13e93abcff377e700e3c1a0086eca27d29": { + "balance": "0xfc936392801c0000" + }, + "640aba6de984d94517377803705eaea7095f4a11": { + "balance": "0x21e19e0c9bab2400000" + }, + "640bf87415e0cf407301e5599a68366da09bbac8": { + "balance": "0x1abc9f416098158000" + }, + "6420f8bcc8164a6152a99d6b99693005ccf7e053": { + "balance": "0x36356633ebd8ea0000" + }, + "64241a7844290e0ab855f1d4aa75b55345032224": { + "balance": "0x56bc75e2d631000000" + }, + "64264aedd52dcae918a012fbcd0c030ee6f71821": { + "balance": "0x3635c9adc5dea00000" + }, + "64370e87202645125a35b207af1231fb6072f9a7": { + "balance": "0xad78ebc5ac6200000" + }, + "643d9aeed4b180947ed2b9207cce4c3ddc55e1f7": { + "balance": "0xad78ebc5ac6200000" + }, + "6443b8ae639de91cf73c5ae763eeeed3ddbb9253": { + "balance": "0x6c6b935b8bbd400000" + }, + "64457fa33b0832506c4f7d1180dce48f46f3e0ff": { + "balance": "0x6c6b935b8bbd400000" + }, + "64464a6805b462412a901d2db8174b06c22deea6": { + "balance": "0x19c846a029c7c80000" + }, + "644ba6c61082e989109f5c11d4b40e991660d403": { + "balance": "0xd8d726b7177a800000" + }, + "64628c6fb8ec743adbd87ce5e018d531d9210437": { + "balance": "0x1731790534df20000" + }, + "6463f715d594a1a4ace4bb9c3b288a74decf294d": { + "balance": "0x6acb3df27e1f880000" + }, + "646628a53c2c4193da88359ce718dadd92b7a48d": { + "balance": "0xad8006c2f5ef00000" + }, + "64672da3ab052821a0243d1ce4b6e0a36517b8eb": { + "balance": "0xad78ebc5ac6200000" + }, + "646afba71d849e80c0ed59cac519b278e7f7abe4": { + "balance": "0x3635c9adc5dea00000" + }, + "646e043d0597a664948fbb0dc15475a3a4f3a6ed": { + "balance": "0x1158e460913d00000" + }, + "6470a4f92ec6b0fccd01234fa59023e9ff1f3aac": { + "balance": "0xa2a15d09519be00000" + }, + "647b85044df2cf0b4ed4882e88819fe22ae5f793": { + "balance": "0x36363b5d9a77700000" + }, + "6485470e61db110aebdbafd536769e3c599cc908": { + "balance": "0x2086ac351052600000" + }, + "648f5bd2a2ae8902db37847d1cb0db9390b06248": { + "balance": "0x1a535ecf0760a048000" + }, + "649a2b9879cd8fb736e6703b0c7747849796f10f": { + "balance": "0x18ee22da01ad34f0000" + }, + "649a85b93653075fa6562c409a565d087ba3e1ba": { + "balance": "0x6c6b935b8bbd400000" + }, + "64adcceec53dd9d9dd15c8cc1a9e736de4241d2c": { + "balance": "0x30927f74c9de00000" + }, + "64cf0935bf19d2cebbecd8780d27d2e2b2c34166": { + "balance": "0x6acb3df27e1f880000" + }, + "64d80c3b8ba68282290b75e65d8978a15a87782c": { + "balance": "0x6acb3df27e1f880000" + }, + "64dba2d6615b8bd7571836dc75bc79d314f5ecee": { + "balance": "0x21e19e0c9bab2400000" + }, + "64e0217a5b38aa40583625967fa9883690388b6f": { + "balance": "0xad78ebc5ac6200000" + }, + "64e02abb016cc23a2934f6bcddb681905021d563": { + "balance": "0x3635c9adc5dea00000" + }, + "64e03ef070a54703b7184e48276c5c0077ef4b34": { + "balance": "0x1158e460913d000000" + }, + "64e2de21200b1899c3a0c0653b5040136d0dc842": { + "balance": "0x43c33c1937564800000" + }, + "64ec8a5b743f3479e707dae9ee20ddaa4f40f1d9": { + "balance": "0xad78ebc5ac6200000" + }, + "6503860b191008c15583bfc88158099301762828": { + "balance": "0x3635c9adc5dea00000" + }, + "65053191319e067a25e6361d47f37f6318f83419": { + "balance": "0x155bd9307f9fe80000" + }, + "65093b239bbfba23c7775ca7da5a8648a9f54cf7": { + "balance": "0x15af1d78b58c400000" + }, + "6509eeb1347e842ffb413e37155e2cbc738273fd": { + "balance": "0x6c6b935b8bbd400000" + }, + "650b425555e4e4c51718146836a2c1ee77a5b421": { + "balance": "0x43c33c1937564800000" + }, + "650cf67db060cce17568d5f2a423687c49647609": { + "balance": "0x56bc75e2d63100000" + }, + "6510df42a599bcb0a519cca961b488759a6f6777": { + "balance": "0x6c6b935b8bbd400000" + }, + "653675b842d7d8b461f722b4117cb81dac8e639d": { + "balance": "0x1ae361fc1451c0000" + }, + "654b7e808799a83d7287c67706f2abf49a496404": { + "balance": "0x6acb3df27e1f880000" + }, + "654f524847b3a6acc0d3d5f1f362b603edf65f96": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "655934da8e744eaa3de34dbbc0894c4eda0b61f2": { + "balance": "0xad78ebc5ac6200000" + }, + "655d5cd7489629e2413c2105b5a172d933c27af8": { + "balance": "0xdb03186cd840a60000" + }, + "656018584130db83ab0591a8128d9381666a8d0e": { + "balance": "0x3779f912019fc0000" + }, + "6560941328ff587cbc56c38c78238a7bb5f442f6": { + "balance": "0x2861906b59c47a0000" + }, + "656579daedd29370d9b737ee3f5cd9d84bc2b342": { + "balance": "0x4d853c8f8908980000" + }, + "657473774f63ac3d6279fd0743d5790c4f161503": { + "balance": "0xad78ebc5ac6200000" + }, + "6580b1bc94390f04b397bd73e95d96ef11eaf3a8": { + "balance": "0x1158e460913d00000" + }, + "65849be1af20100eb8a3ba5a5be4d3ae8db5a70e": { + "balance": "0x15af1d78b58c400000" + }, + "659c0a72c767a3a65ced0e1ca885a4c51fd9b779": { + "balance": "0x6c6b935b8bbd400000" + }, + "65a52141f56bef98991724c6e7053381da8b5925": { + "balance": "0x3429c335d57fe0000" + }, + "65a9dad42e1632ba3e4e49623fab62a17e4d3611": { + "balance": "0x50c4cb2a10c600000" + }, + "65af8d8b5b1d1eedfa77bcbc96c1b133f83306df": { + "balance": "0x55005f0c614480000" + }, + "65af9087e05167715497c9a5a749189489004def": { + "balance": "0x2d43f3ebfafb2c0000" + }, + "65b42faecc1edfb14283ca979af545f63b30e60c": { + "balance": "0xfc936392801c0000" + }, + "65d33eb39cda6453b19e61c1fe4db93170ef9d34": { + "balance": "0xb98bc829a6f90000" + }, + "65d8dd4e251cbc021f05b010f2d5dc520c3872e0": { + "balance": "0x2d43579a36a90e0000" + }, + "65ea26eabbe2f64ccccfe06829c25d4637520225": { + "balance": "0x25f273933db5700000" + }, + "65ea67ad3fb56ad5fb94387dd38eb383001d7c68": { + "balance": "0x56bc75e2d63100000" + }, + "65ebaed27edb9dcc1957aee5f452ac2105a65c0e": { + "balance": "0x937dfadae25e29b8000" + }, + "65ee20b06d9ad589a7e7ce04b9f5f795f402aece": { + "balance": "0x6c6b935b8bbd400000" + }, + "65f534346d2ffb787fa9cf185d745ba42986bd6e": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "65f5870f26bce089677dfc23b5001ee492483428": { + "balance": "0x112b1f155aa32a30000" + }, + "65fd02d704a12a4dace9471b0645f962a89671c8": { + "balance": "0x18d1ce6e427cd8000" + }, + "65ff874fafce4da318d6c93d57e2c38a0d73e820": { + "balance": "0x3638021cecdab00000" + }, + "660557bb43f4be3a1b8b85e7df7b3c5bcd548057": { + "balance": "0x14542ba12a337c00000" + }, + "66082c75a8de31a53913bbd44de3a0374f7faa41": { + "balance": "0x4f2591f896a6500000" + }, + "6611ce59a98b072ae959dc49ad511daaaaa19d6b": { + "balance": "0xad78ebc5ac6200000" + }, + "66201bd227ae6dc6bdfed5fbde811fecfe5e9dd9": { + "balance": "0x203e9e8492788c0000" + }, + "662334814724935b7931ddca6100e00d467727cd": { + "balance": "0x2288269d0783d40000" + }, + "66274fea82cd30b6c29b23350e4f4f3d310a5899": { + "balance": "0x70370550ab82980000" + }, + "662cfa038fab37a01745a364e1b98127c503746d": { + "balance": "0xd5967be4fc3f100000" + }, + "6635b46f711d2da6f0e16370cd8ee43efb2c2d52": { + "balance": "0x6c6b935b8bbd400000" + }, + "663604b0503046e624cd26a8b6fb4742dce02a6f": { + "balance": "0x38b9b797ef68c0000" + }, + "6636d7ac637a48f61d38b14cfd4865d36d142805": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "6640ccf053555c130ae2b656647ea6e31637b9ab": { + "balance": "0x6acb3df27e1f880000" + }, + "66424bd8785b8cb461102a900283c35dfa07ef6a": { + "balance": "0x22e2db26666fc8000" + }, + "664cd67dccc9ac8228b45c55db8d76550b659cdc": { + "balance": "0x155bd9307f9fe80000" + }, + "664e43119870af107a448db1278b044838ffcdaf": { + "balance": "0x15af1d78b58c400000" + }, + "6651736fb59b91fee9c93aa0bd6ea2f7b2506180": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "665b000f0b772750cc3c217a5ef429a92bf1ccbb": { + "balance": "0xd8d726b7177a800000" + }, + "66662006015c1f8e3ccfcaebc8ee6807ee196303": { + "balance": "0x1b1b3a1ac261ec0000" + }, + "666746fb93d1935c5a3c684e725010c4fad0b1d8": { + "balance": "0x1158e460913d00000" + }, + "666b4f37d55d63b7d056b615bb74c96b3b01991a": { + "balance": "0xd8d726b7177a800000" + }, + "66719c0682b2ac7f9e27abebec7edf8decf0ae0d": { + "balance": "0x1158e460913d00000" + }, + "6671b182c9f741a0cd3c356c73c23126d4f9e6f4": { + "balance": "0xad78ebc5ac6200000" + }, + "6679aeecd87a57a73f3356811d2cf49d0c4d96dc": { + "balance": "0x2086ac351052600000" + }, + "667b61c03bb937a9f5d0fc5a09f1ea3363c77035": { + "balance": "0xe664992288f2280000" + }, + "6685fd2e2544702c360b8bb9ee78f130dad16da5": { + "balance": "0x6c6b935b8bbd400000" + }, + "668b6ba8ab08eace39c502ef672bd5ccb6a67a20": { + "balance": "0x697d95d4201333c0000" + }, + "66925de3e43f4b41bf9dadde27d5488ef569ea0d": { + "balance": "0x222c8eb3ff6640000" + }, + "66b0c100c49149935d14c0dc202cce907cea1a3d": { + "balance": "0x6acb3df27e1f880000" + }, + "66b1a63da4dcd9f81fe54f5e3fcb4055ef7ec54f": { + "balance": "0xaeb272adf9cfa0000" + }, + "66b39837cb3cac8a802afe3f12a258bbca62dacd": { + "balance": "0x15af1d78b58c400000" + }, + "66c8331efe7198e98b2d32b938688e3241d0e24f": { + "balance": "0x2098051970e39d00000" + }, + "66cc8ab23c00d1b82acd7d73f38c99e0d05a4fa6": { + "balance": "0x56bc75e2d63100000" + }, + "66dcc5fb4ee7fee046e141819aa968799d644491": { + "balance": "0x487a9a304539440000" + }, + "66e09427c1e63deed7e12b8c55a6a19320ef4b6a": { + "balance": "0x93739534d28680000" + }, + "66ec16ee9caab411c55a6629e318de6ee216491d": { + "balance": "0x2ee449550898e40000" + }, + "66f50406eb1b11a946cab45927cca37470e5a208": { + "balance": "0x6c6b935b8bbd400000" + }, + "66fdc9fee351fa1538eb0d87d819fcf09e7c106a": { + "balance": "0x14627b5d93781b20000" + }, + "67048f3a12a4dd1f626c64264cb1d7971de2ca38": { + "balance": "0x9c2007651b2500000" + }, + "6704f169e0d0b36b57bbc39f3c45437b5ee3d28d": { + "balance": "0x155bd9307f9fe80000" + }, + "671015b97670b10d5e583f3d62a61c1c79c5143f": { + "balance": "0x15af1d78b58c400000" + }, + "6710c2c03c65992b2e774be52d3ab4a6ba217ef7": { + "balance": "0x274d656ac90e3400000" + }, + "671110d96aaff11523cc546bf9940eedffb2faf7": { + "balance": "0xd8d726b7177a800000" + }, + "6715c14035fb57bb3d667f7b707498c41074b855": { + "balance": "0x25f273933db5700000" + }, + "671bbca099ff899bab07ea1cf86965c3054c8960": { + "balance": "0x2b5e3af16b1880000" + }, + "6727daf5b9d68efcab489fedec96d7f7325dd423": { + "balance": "0x6c6b935b8bbd400000" + }, + "672cbca8440a8577097b19aff593a2ad9d28a756": { + "balance": "0x4563918244f400000" + }, + "672ec42faa8cd69aaa71b32cc7b404881d52ff91": { + "balance": "0x21e19e0c9bab2400000" + }, + "672fa0a019088db3166f6119438d07a99f8ba224": { + "balance": "0x2d4ca05e2b43ca80000" + }, + "673144f0ec142e770f4834fee0ee311832f3087b": { + "balance": "0x1b1b6bd7af64c70000" + }, + "67350b5331926f5e28f3c1e986f96443809c8b8c": { + "balance": "0x1314fb370629800000" + }, + "673706b1b0e4dc7a949a7a796258a5b83bb5aa83": { + "balance": "0x368c8623a8b4d100000" + }, + "6742a2cfce8d79a2c4a51b77747498912245cd6a": { + "balance": "0xdfd5b80b7e4680000" + }, + "674adb21df4c98c7a347ac4c3c24266757dd7039": { + "balance": "0x6c6b935b8bbd400000" + }, + "67518e5d02b205180f0463a32004471f753c523e": { + "balance": "0x6b918aac494b168000" + }, + "675d5caa609bf70a18aca580465d8fb7310d1bbb": { + "balance": "0x43c33c1937564800000" + }, + "67632046dcb25a54936928a96f423f3320cbed92": { + "balance": "0x6c6b935b8bbd400000" + }, + "6765df25280e8e4f38d4b1cf446fc5d7eb659e34": { + "balance": "0x56bc75e2d63100000" + }, + "6776e133d9dc354c12a951087b639650f539a433": { + "balance": "0x68155a43676e00000" + }, + "6785513cf732e47e87670770b5419be10cd1fc74": { + "balance": "0x6c6b935b8bbd400000" + }, + "679437eacf437878dc293d48a39c87b7421a216c": { + "balance": "0x37f81821db2680000" + }, + "679b9a109930517e8999099ccf2a914c4c8dd934": { + "balance": "0x340aad21b3b700000" + }, + "67a80e0190721f94390d6802729dd12c31a895ad": { + "balance": "0x6c6b1375bc91560000" + }, + "67b8a6e90fdf0a1cac441793301e8750a9fa7957": { + "balance": "0x30849ebe16369c0000" + }, + "67bc85e87dc34c4e80aafa066ba8d29dbb8e438e": { + "balance": "0x15d1cf4176aeba0000" + }, + "67c926093e9b8927933810d98222d62e2b8206bb": { + "balance": "0x678a932062e4180000" + }, + "67cfda6e70bf7657d39059b59790e5145afdbe61": { + "balance": "0x23050d095866580000" + }, + "67d682a282ef73fb8d6e9071e2614f47ab1d0f5e": { + "balance": "0x3635c9adc5dea00000" + }, + "67d6a8aa1bf8d6eaf7384e993dfdf10f0af68a61": { + "balance": "0xabcbb5718974b8000" + }, + "67da922effa472a6b124e84ea8f86b24e0f515aa": { + "balance": "0x1158e460913d00000" + }, + "67df242d240dd4b8071d72f8fcf35bb3809d71e8": { + "balance": "0xd8d726b7177a800000" + }, + "67ee406ea4a7ae6a3a381eb4edd2f09f174b4928": { + "balance": "0x3829635f0968b00000" + }, + "67f2bb78b8d3e11f7c458a10b5c8e0a1d374467d": { + "balance": "0x61093d7c2c6d380000" + }, + "67fc527dce1785f0fb8bc7e518b1c669f7ecdfb5": { + "balance": "0xd02ab486cedc00000" + }, + "68027d19558ed7339a08aee8de3559be063ec2ea": { + "balance": "0x6c6b935b8bbd400000" + }, + "680640838bd07a447b168d6d923b90cf6c43cdca": { + "balance": "0x5dc892aa1131c80000" + }, + "6807ddc88db489b033e6b2f9a81553571ab3c805": { + "balance": "0x19f8e7559924c0000" + }, + "680d5911ed8dd9eec45c060c223f89a7f620bbd5": { + "balance": "0x43c33c1937564800000" + }, + "6811b54cd19663b11b94da1de2448285cd9f68d9": { + "balance": "0x3ba1910bf341b00000" + }, + "68190ca885da4231874c1cfb42b1580a21737f38": { + "balance": "0xcf152640c5c8300000" + }, + "682897bc4f8e89029120fcffb787c01a93e64184": { + "balance": "0x21e19e0c9bab2400000" + }, + "68295e8ea5afd9093fc0a465d157922b5d2ae234": { + "balance": "0x1154e53217ddb0000" + }, + "682e96276f518d31d7e56e30dfb009c1218201bd": { + "balance": "0x1158e460913d00000" + }, + "6835c8e8b74a2ca2ae3f4a8d0f6b954a3e2a8392": { + "balance": "0x3429c335d57fe0000" + }, + "683633010a88686bea5a98ea53e87997cbf73e69": { + "balance": "0x56b394263a40c0000" + }, + "683dba36f7e94f40ea6aea0d79b8f521de55076e": { + "balance": "0x796e3ea3f8ab00000" + }, + "68419c6dd2d3ce6fcbb3c73e2fa079f06051bde6": { + "balance": "0x6acb3df27e1f880000" + }, + "68473b7a7d965904bedba556dfbc17136cd5d434": { + "balance": "0x56bc75e2d63100000" + }, + "6847825bdee8240e28042c83cad642f286a3bddc": { + "balance": "0x5150ae84a8cdf00000" + }, + "684a44c069339d08e19a75668bdba303be855332": { + "balance": "0xed2b525841adfc00000" + }, + "68531f4dda808f5320767a03113428ca0ce2f389": { + "balance": "0x10d3aa536e2940000" + }, + "687927e3048bb5162ae7c15cf76bd124f9497b9e": { + "balance": "0x6c6b935b8bbd400000" + }, + "68809af5d532a11c1a4d6e32aac75c4c52b08ead": { + "balance": "0x21e19e0c9bab2400000" + }, + "6886ada7bbb0617bda842191c68c922ea3a8ac82": { + "balance": "0x3ee23bde0e7d200000" + }, + "68883e152e5660fee59626e7e3b4f05110e6222f": { + "balance": "0xb94633be975a62a0000" + }, + "688a569e965524eb1d0ac3d3733eab909fb3d61e": { + "balance": "0x478eae0e571ba00000" + }, + "688eb3853bbcc50ecfee0fa87f0ab693cabdef02": { + "balance": "0x6b10a18400647c00000" + }, + "68a7425fe09eb28cf86eb1793e41b211e57bd68d": { + "balance": "0x243d4d18229ca20000" + }, + "68a86c402388fddc59028fec7021e98cbf830eac": { + "balance": "0x10910d4cdc9f60000" + }, + "68acdaa9fb17d3c309911a77b05f5391fa034ee9": { + "balance": "0x1e52e336cde22180000" + }, + "68addf019d6b9cab70acb13f0b3117999f062e12": { + "balance": "0x2b51212e6b7c88000" + }, + "68b31836a30a016ada157b638ac15da73f18cfde": { + "balance": "0x168d28e3f00280000" + }, + "68b6854788a7c6496cdbf5f84b9ec5ef392b78bb": { + "balance": "0x42bf06b78ed3b500000" + }, + "68c08490c89bf0d6b6f320b1aca95c8312c00608": { + "balance": "0xd8d726b7177a800000" + }, + "68c7d1711b011a33f16f1f55b5c902cce970bdd7": { + "balance": "0x83d6c7aab63600000" + }, + "68c8791dc342c373769ea61fb7b510f251d32088": { + "balance": "0x3635c9adc5dea00000" + }, + "68df947c495bebaeb8e889b3f953d533874bf106": { + "balance": "0x1d9945ab2b03480000" + }, + "68e8022740f4af29eb48db32bcecddfd148d3de3": { + "balance": "0x3635c9adc5dea00000" + }, + "68ec79d5be7155716c40941c79d78d17de9ef803": { + "balance": "0x1b233877b5208c0000" + }, + "68eec1e288ac31b6eaba7e1fbd4f04ad579a6b5d": { + "balance": "0x6c6b935b8bbd400000" + }, + "68f525921dc11c329b754fbf3e529fc723c834cd": { + "balance": "0x57473d05dabae80000" + }, + "68f719ae342bd7fef18a05cbb02f705ad38ed5b2": { + "balance": "0x38ebad5cdc90280000" + }, + "68f7573cd457e14c03fea43e302d30347c10705c": { + "balance": "0x10f0cf064dd59200000" + }, + "68f8f45155e98c5029a4ebc5b527a92e9fa83120": { + "balance": "0xf07b44b40793208000" + }, + "68fe1357218d095849cd579842c4aa02ff888d93": { + "balance": "0x6c6b935b8bbd400000" + }, + "690228e4bb12a8d4b5e0a797b0c5cf2a7509131e": { + "balance": "0x65ea3db75546600000" + }, + "690594d306613cd3e2fd24bca9994ad98a3d73f8": { + "balance": "0x6c6b935b8bbd400000" + }, + "69073269729e6414b26ec8dc0fd935c73b579f1e": { + "balance": "0x65a4da25d3016c00000" + }, + "6919dd5e5dfb1afa404703b9faea8cee35d00d70": { + "balance": "0x14061b9d77a5e980000" + }, + "693492a5c51396a482881669ccf6d8d779f00951": { + "balance": "0x12bf50503ae3038000" + }, + "693d83be09459ef8390b2e30d7f7c28de4b4284e": { + "balance": "0x6c6b935b8bbd400000" + }, + "69517083e303d4fbb6c2114514215d69bc46a299": { + "balance": "0x56bc75e2d63100000" + }, + "695550656cbf90b75d92ad9122d90d23ca68ca4d": { + "balance": "0x3635c9adc5dea00000" + }, + "6958f83bb2fdfb27ce0409cd03f9c5edbf4cbedd": { + "balance": "0x43c33c1937564800000" + }, + "695b0f5242753701b264a67071a2dc880836b8db": { + "balance": "0xe398811bec680000" + }, + "695b4cce085856d9e1f9ff3e79942023359e5fbc": { + "balance": "0x10f0cf064dd59200000" + }, + "6966063aa5de1db5c671f3dd699d5abe213ee902": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "6974c8a414ceaefd3c2e4dfdbef430568d9a960b": { + "balance": "0x121ea68c114e510000" + }, + "6978696d5150a9a263513f8f74c696f8b1397cab": { + "balance": "0x167f482d3c5b1c00000" + }, + "69797bfb12c9bed682b91fbc593591d5e4023728": { + "balance": "0x21e19e0c9bab2400000" + }, + "697f55536bf85ada51841f0287623a9f0ed09a17": { + "balance": "0x21e19e0c9bab2400000" + }, + "6982fe8a867e93eb4a0bd051589399f2ec9a5292": { + "balance": "0x6c6b935b8bbd400000" + }, + "698a8a6f01f9ab682f637c7969be885f6c5302bf": { + "balance": "0x10d3aa536e2940000" + }, + "698ab9a2f33381e07c0c47433d0d21d6f336b127": { + "balance": "0x1158e460913d00000" + }, + "6994fb3231d7e41d491a9d68d1fa4cae2cc15960": { + "balance": "0xd8d726b7177a800000" + }, + "699c9ee47195511f35f862ca4c22fd35ae8ffbf4": { + "balance": "0x4563918244f400000" + }, + "699fc6d68a4775573c1dcdaec830fefd50397c4e": { + "balance": "0x340aad21b3b700000" + }, + "69af28b0746cac0da17084b9398c5e36bb3a0df2": { + "balance": "0x3677036edf0af60000" + }, + "69b80ed90f84834afa3ff82eb964703b560977d6": { + "balance": "0x1731790534df20000" + }, + "69b81d5981141ec7a7141060dfcf8f3599ffc63e": { + "balance": "0x10f0cf064dd59200000" + }, + "69bcfc1d43b4ba19de7b274bdffb35139412d3d7": { + "balance": "0x35659ef93f0fc40000" + }, + "69bd25ade1a3346c59c4e930db2a9d715ef0a27a": { + "balance": "0xd8d726b7177a800000" + }, + "69c08d744754de709ce96e15ae0d1d395b3a2263": { + "balance": "0x3635c9adc5dea00000" + }, + "69c2d835f13ee90580408e6a3283c8cca6a434a2": { + "balance": "0x238fd42c5cf0400000" + }, + "69c94e07c4a9be3384d95dfa3cb9290051873b7b": { + "balance": "0x3cb71f51fc5580000" + }, + "69cb3e2153998d86e5ee20c1fcd1a6baeeb2863f": { + "balance": "0xd8d726b7177a800000" + }, + "69d39d510889e552a396135bfcdb06e37e387633": { + "balance": "0xd8d726b7177a800000" + }, + "69d98f38a3ba3dbc01fa5c2c1427d862832f2f70": { + "balance": "0x152d02c7e14af6800000" + }, + "69e2e2e704307ccc5b5ca3f164fece2ea7b2e512": { + "balance": "0x17b7883c06916600000" + }, + "69ff429074cb9b6c63bc914284bce5f0c8fbf7d0": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "69ff8901b541763f817c5f2998f02dcfc1df2997": { + "balance": "0x22b1c8c1227a00000" + }, + "6a023af57d584d845e698736f130db9db40dfa9a": { + "balance": "0x55b201c8900980000" + }, + "6a04f5d53fc0f515be942b8f12a9cb7ab0f39778": { + "balance": "0xa9aab3459be1940000" + }, + "6a05b21c4f17f9d73f5fb2b0cb89ff5356a6cc7e": { + "balance": "0x5150ae84a8cdf00000" + }, + "6a0f056066c2d56628850273d7ecb7f8e6e9129e": { + "balance": "0x10f0d293cc7a5880000" + }, + "6a13d5e32c1fd26d7e91ff6e053160a89b2c8aad": { + "balance": "0x2e62f20a69be40000" + }, + "6a2e86469a5bf37cee82e88b4c3863895d28fcaf": { + "balance": "0x1c229266385bbc0000" + }, + "6a3694424c7cc6b8bcd9bccaba540cc1f5df18d7": { + "balance": "0x6c6b935b8bbd400000" + }, + "6a42ca971c6578d5ade295c3e7f4ad331dd3424e": { + "balance": "0x14542ba12a337c00000" + }, + "6a44af96b3f032ae641beb67f4b6c83342d37c5d": { + "balance": "0x19274b259f6540000" + }, + "6a4c8907b600248057b1e46354b19bdc859c991a": { + "balance": "0x1158e460913d00000" + }, + "6a514e6242f6b68c137e97fea1e78eb555a7e5f7": { + "balance": "0x1158e460913d00000" + }, + "6a53d41ae4a752b21abed5374649953a513de5e5": { + "balance": "0x6c6b935b8bbd400000" + }, + "6a6159074ab573e0ee581f0f3df2d6a594629b74": { + "balance": "0x10ce1d3d8cb3180000" + }, + "6a6337833f8f6a6bf10ca7ec21aa810ed444f4cb": { + "balance": "0x37bd24345ce8a40000" + }, + "6a6353b971589f18f2955cba28abe8acce6a5761": { + "balance": "0xa2a15d09519be00000" + }, + "6a63fc89abc7f36e282d80787b7b04afd6553e71": { + "balance": "0x8ac7230489e800000" + }, + "6a679e378fdce6bfd97fe62f043c6f6405d79e99": { + "balance": "0xd8d726b7177a800000" + }, + "6a686bf220b593deb9b7324615fb9144ded3f39d": { + "balance": "0x4f2591f896a6500000" + }, + "6a6b18a45a76467e2e5d5a2ef911c3e12929857b": { + "balance": "0x115d3a99a9614f400000" + }, + "6a74844d8e9cb5581c45079a2e94462a6cee8821": { + "balance": "0x3ab53a552dd4c90000" + }, + "6a7b2e0d88867ff15d207c222bebf94fa6ce8397": { + "balance": "0xcb49b44ba602d800000" + }, + "6a7c252042e7468a3ff773d6450bba85efa26391": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "6a8a4317c45faa0554ccdb482548183e295a24b9": { + "balance": "0x3635c9adc5dea00000" + }, + "6a8cea2de84a8df997fd3f84e3083d93de57cda9": { + "balance": "0x56be03ca3e47d8000" + }, + "6a9758743b603eea3aa0524b42889723c4153948": { + "balance": "0x22385a827e815500000" + }, + "6aa5732f3b86fb8c81efbe6b5b47b563730b06c8": { + "balance": "0x3635c9adc5dea00000" + }, + "6ab323ae5056ed0a453072c5abe2e42fcf5d7139": { + "balance": "0x2fb474098f67c00000" + }, + "6ab5b4c41cddb829690c2fda7f20c85e629dd5d5": { + "balance": "0x64d4af714c32900000" + }, + "6ac40f532dfee5118117d2ad352da77d4f6da2c8": { + "balance": "0x15af1d78b58c400000" + }, + "6ac4d4be2db0d99da3faaaf7525af282051d6a90": { + "balance": "0x458ca58a962b28000" + }, + "6acddca3cd2b4990e25cd65c24149d0912099e79": { + "balance": "0xa2a1e07c9f6c908000" + }, + "6ad90be252d9cd464d998125fab693060ba8e429": { + "balance": "0xd8d726b7177a800000" + }, + "6add932193cd38494aa3f03aeccc4b7ab7fabca2": { + "balance": "0x4db73254763000000" + }, + "6ae57f27917c562a132a4d1bf7ec0ac785832926": { + "balance": "0x14542ba12a337c00000" + }, + "6aeb9f74742ea491813dbbf0d6fcde1a131d4db3": { + "balance": "0x17e554308aa0300000" + }, + "6af235d2bbe050e6291615b71ca5829658810142": { + "balance": "0xa2a15d09519be00000" + }, + "6af6c7ee99df271ba15bf384c0b764adcb4da182": { + "balance": "0x36356633ebd8ea0000" + }, + "6af8e55969682c715f48ad4fc0fbb67eb59795a3": { + "balance": "0x6c6b935b8bbd400000" + }, + "6af940f63ec9b8d876272aca96fef65cdacecdea": { + "balance": "0xa2a15d09519be00000" + }, + "6af9f0dfeeaebb5f64bf91ab771669bf05295553": { + "balance": "0x15af1d78b58c400000" + }, + "6aff1466c2623675e3cb0e75e423d37a25e442eb": { + "balance": "0x5dc892aa1131c80000" + }, + "6b0da25af267d7836c226bcae8d872d2ce52c941": { + "balance": "0x14542ba12a337c00000" + }, + "6b10f8f8b3e3b60de90aa12d155f9ff5ffb22c50": { + "balance": "0x6c6b935b8bbd400000" + }, + "6b17598a8ef54f797ae515ccb6517d1859bf8011": { + "balance": "0x56bc75e2d63100000" + }, + "6b20c080606a79c73bd8e75b11717a4e8db3f1c3": { + "balance": "0x103f735803f0140000" + }, + "6b2284440221ce16a8382de5ff0229472269deec": { + "balance": "0x3635c9adc5dea00000" + }, + "6b30f1823910b86d3acb5a6afc9defb6f3a30bf8": { + "balance": "0xe3aeb5737240a00000" + }, + "6b38de841fad7f53fe02da115bd86aaf662466bd": { + "balance": "0x5dc892aa1131c80000" + }, + "6b4b99cb3fa9f7b74ce3a48317b1cd13090a1a7a": { + "balance": "0x31b327e695de20000" + }, + "6b5ae7bf78ec75e90cb503c778ccd3b24b4f1aaf": { + "balance": "0x2b5e3af16b18800000" + }, + "6b63a2dfb2bcd0caec0022b88be30c1451ea56aa": { + "balance": "0x2bdb6bf91f7f4c8000" + }, + "6b6577f3909a4d6de0f411522d4570386400345c": { + "balance": "0x65ea3db75546600000" + }, + "6b72a8f061cfe6996ad447d3c72c28c0c08ab3a7": { + "balance": "0xe78c6ac79912620000" + }, + "6b760d4877e6a627c1c967bee451a8507ddddbab": { + "balance": "0x3154c9729d05780000" + }, + "6b83bae7b565244558555bcf4ba8da2011891c17": { + "balance": "0x6c6b935b8bbd400000" + }, + "6b925dd5d8ed6132ab6d0860b82c44e1a51f1fee": { + "balance": "0x503b203e9fba200000" + }, + "6b94615db750656ac38c7e1cf29a9d13677f4e15": { + "balance": "0x28a857425466f800000" + }, + "6b951a43274eeafc8a0903b0af2ec92bf1efc839": { + "balance": "0x56bc75e2d63100000" + }, + "6b992521ec852370848ad697cc2df64e63cc06ff": { + "balance": "0x3635c9adc5dea00000" + }, + "6ba8f7e25fc2d871618e24e40184199137f9f6aa": { + "balance": "0x15af64869a6bc20000" + }, + "6ba9b21b35106be159d1c1c2657ac56cd29ffd44": { + "balance": "0xf2dc7d47f156000000" + }, + "6baf7a2a02ae78801e8904ad7ac05108fc56cff6": { + "balance": "0x3635c9adc5dea00000" + }, + "6bb2aca23fa1626d18efd6777fb97db02d8e0ae4": { + "balance": "0x878678326eac9000000" + }, + "6bb4a661a33a71d424d49bb5df28622ed4dffcf4": { + "balance": "0x222c8eb3ff66400000" + }, + "6bb50813146a9add42ee22038c9f1f7469d47f47": { + "balance": "0xada55474b81340000" + }, + "6bbc3f358a668dd1a11f0380f3f73108426abd4a": { + "balance": "0xd8d726b7177a800000" + }, + "6bbd1e719390e6b91043f8b6b9df898ea8001b34": { + "balance": "0x6c6c4fa6c3da588000" + }, + "6bc85acd5928722ef5095331ee88f484b8cf8357": { + "balance": "0x9c2007651b2500000" + }, + "6bd3e59f239fafe4776bb9bddd6bee83ba5d9d9f": { + "balance": "0x3635c9adc5dea00000" + }, + "6bd457ade051795df3f2465c3839aed3c5dee978": { + "balance": "0x3634bf39ab98788000" + }, + "6be16313643ebc91ff9bb1a2e116b854ea933a45": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "6be7595ea0f068489a2701ec4649158ddc43e178": { + "balance": "0x6c6b935b8bbd400000" + }, + "6be9030ee6e2fbc491aca3de4022d301772b7b7d": { + "balance": "0x1731790534df20000" + }, + "6bec311ad05008b4af353c958c40bd06739a3ff3": { + "balance": "0x377f62a0f0a62700000" + }, + "6bf7b3c065f2c1e7c6eb092ba0d15066f393d1b8": { + "balance": "0x15af1d78b58c400000" + }, + "6bf86f1e2f2b8032a95c4d7738a109d3d0ed8104": { + "balance": "0x62a992e53a0af00000" + }, + "6c05e34e5ef2f42ed09deff1026cd66bcb6960bb": { + "balance": "0x6c6b935b8bbd400000" + }, + "6c08a6dc0173c7342955d1d3f2c065d62f83aec7": { + "balance": "0x1158e460913d00000" + }, + "6c0ae9f043c834d44271f13406593dfe094f389f": { + "balance": "0x52442ae133b62a8000" + }, + "6c0cc917cbee7d7c099763f14e64df7d34e2bf09": { + "balance": "0xd8d726b7177a80000" + }, + "6c0e712f405c59725fe829e9774bf4df7f4dd965": { + "balance": "0xc2868889ca68a440000" + }, + "6c101205b323d77544d6dc52af37aca3cec6f7f1": { + "balance": "0x21e19e0c9bab2400000" + }, + "6c15ec3520bf8ebbc820bd0ff19778375494cf9d": { + "balance": "0x6cb7e74867d5e60000" + }, + "6c1ddd33c81966dc8621776071a4129482f2c65f": { + "balance": "0x878678326eac9000000" + }, + "6c25327f8dcbb2f45e561e86e35d8850e53ab059": { + "balance": "0x3bcdf9bafef2f00000" + }, + "6c2e9be6d4ab450fd12531f33f028c614674f197": { + "balance": "0xc2127af858da700000" + }, + "6c359e58a13d4578a9338e335c67e7639f5fb4d7": { + "balance": "0xbd15b94fc8b280000" + }, + "6c3d18704126aa99ee3342ce60f5d4c85f1867cd": { + "balance": "0x2b5e3af16b1880000" + }, + "6c474bc66a54780066aa4f512eefa773abf919c7": { + "balance": "0x5188315f776b80000" + }, + "6c4e426e8dc005dfa3516cb8a680b02eea95ae8e": { + "balance": "0x487a9a304539440000" + }, + "6c52cf0895bb35e656161e4dc46ae0e96dd3e62c": { + "balance": "0xd8d8583fa2d52f0000" + }, + "6c5422fb4b14e6d98b6091fdec71f1f08640419d": { + "balance": "0x15af1d78b58c400000" + }, + "6c5c3a54cda7c2f118edba434ed81e6ebb11dd7a": { + "balance": "0xad78ebc5ac6200000" + }, + "6c63f84556d290bfcd99e434ee9997bfd779577a": { + "balance": "0x6c6b935b8bbd400000" + }, + "6c63fc85029a2654d79b2bea4de349e4524577c5": { + "balance": "0x23c757072b8dd00000" + }, + "6c6564e5c9c24eaaa744c9c7c968c9e2c9f1fbae": { + "balance": "0x499b42a21139640000" + }, + "6c67d6db1d03516c128b8ff234bf3d49b26d2941": { + "balance": "0x152d02c7e14af6800000" + }, + "6c67e0d7b62e2a08506945a5dfe38263339f1f22": { + "balance": "0x6acb3df27e1f880000" + }, + "6c6aa0d30b64721990b9504a863fa0bfb5e57da7": { + "balance": "0x925e06eec972b00000" + }, + "6c714a58fff6e97d14b8a5e305eb244065688bbd": { + "balance": "0xd8d726b7177a800000" + }, + "6c800d4b49ba07250460f993b8cbe00b266a2553": { + "balance": "0x1ab2cf7c9f87e20000" + }, + "6c808cabb8ff5fbb6312d9c8e84af8cf12ef0875": { + "balance": "0xd8d8583fa2d52f0000" + }, + "6c822029218ac8e98a260c1e064029348839875b": { + "balance": "0x10f97b787e1e3080000" + }, + "6c84cba77c6db4f7f90ef13d5ee21e8cfc7f8314": { + "balance": "0x6c6b935b8bbd400000" + }, + "6c8687e3417710bb8a93559021a1469e6a86bc77": { + "balance": "0x25b2da278d96b7b8000" + }, + "6c882c27732cef5c7c13a686f0a2ea77555ac289": { + "balance": "0x152d02c7e14af6800000" + }, + "6ca5de00817de0cedce5fd000128dede12648b3c": { + "balance": "0x1158e460913d00000" + }, + "6ca6a132ce1cd288bee30ec7cfeffb85c1f50a54": { + "balance": "0x6c6b935b8bbd400000" + }, + "6cb11ecb32d3ce829601310636f5a10cf7cf9b5f": { + "balance": "0x43fe8949c3801f50000" + }, + "6cc1c878fa6cde8a9a0b8311247e741e4642fe6d": { + "balance": "0x35659ef93f0fc40000" + }, + "6ccb03acf7f53ce87aadcc21a9932de915f89804": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "6cd212aee04e013f3d2abad2a023606bfb5c6ac7": { + "balance": "0x6c6acc67d7b1d40000" + }, + "6cd228dc712169307fe27ceb7477b48cfc8272e5": { + "balance": "0x434ea94db8a500000" + }, + "6ce1b0f6adc47051e8ab38b39edb4186b03babcc": { + "balance": "0x41799794cd24cc0000" + }, + "6ceae3733d8fa43d6cd80c1a96e8eb93109c83b7": { + "balance": "0x102794ad20da680000" + }, + "6d0569e5558fc7df2766f2ba15dc8aeffc5beb75": { + "balance": "0xd8e6001e6c302b0000" + }, + "6d120f0caae44fd94bcafe55e2e279ef96ba5c7a": { + "balance": "0xd8d726b7177a800000" + }, + "6d1456fff0104ee844a3314737843338d24cd66c": { + "balance": "0x7b06ce87fdd680000" + }, + "6d20ef9704670a500bb269b5832e859802049f01": { + "balance": "0x70c1cc73b00c80000" + }, + "6d2f976734b9d0070d1883cf7acab8b3e4920fc1": { + "balance": "0x21e19e0c9bab2400000" + }, + "6d39a9e98f81f769d73aad2cead276ac1387babe": { + "balance": "0x155bd9307f9fe80000" + }, + "6d3b7836a2b9d899721a4d237b522385dce8dfcd": { + "balance": "0x3636c25e66ece70000" + }, + "6d3f2ba856ccbb0237fa7661156b14b013f21240": { + "balance": "0x3635c9adc5dea00000" + }, + "6d4008b4a888a826f248ee6a0b0dfde9f93210b9": { + "balance": "0x127fcb8afae20d00000" + }, + "6d40ca27826d97731b3e86effcd7b92a4161fe89": { + "balance": "0x6c6b935b8bbd400000" + }, + "6d44974a31d187eda16ddd47b9c7ec5002d61fbe": { + "balance": "0x32f51edbaaa3300000" + }, + "6d4b5c05d06a20957e1748ab6df206f343f92f01": { + "balance": "0x21f360699bf825f8000" + }, + "6d4cbf3d8284833ae99344303e08b4d614bfda3b": { + "balance": "0x28a857425466f800000" + }, + "6d59b21cd0e2748804d9abe064eac2bef0c95f27": { + "balance": "0x6c6b935b8bbd400000" + }, + "6d63d38ee8b90e0e6ed8f192eda051b2d6a58bfd": { + "balance": "0x1a055690d9db80000" + }, + "6d6634b5b8a40195d949027af4828802092ceeb6": { + "balance": "0xa2a15d09519be00000" + }, + "6d7d1c949511f88303808c60c5ea0640fcc02683": { + "balance": "0x21e19e0c9bab2400000" + }, + "6d846dc12657e91af25008519c3e857f51707dd6": { + "balance": "0xf8d30bc92342f80000" + }, + "6d9193996b194617211106d1635eb26cc4b66c6c": { + "balance": "0x15aa1e7e9dd51c0000" + }, + "6d9997509882027ea947231424bedede2965d0ba": { + "balance": "0x6c81c7b31195e00000" + }, + "6da0ed8f1d69339f059f2a0e02471cb44fb8c3bb": { + "balance": "0x32bc38bb63a8160000" + }, + "6db72bfd43fef465ca5632b45aab7261404e13bf": { + "balance": "0x6c6b935b8bbd400000" + }, + "6dbe8abfa1742806263981371bf3d35590806b6e": { + "balance": "0x43c33c1937564800000" + }, + "6dc3f92baa1d21dab7382b893261a0356fa7c187": { + "balance": "0x5dc892aa1131c80000" + }, + "6dc7053a718616cfc78bee6382ee51add0c70330": { + "balance": "0x6c6b935b8bbd400000" + }, + "6dcc7e64fcafcbc2dc6c0e5e662cb347bffcd702": { + "balance": "0x43c33c1937564800000" + }, + "6dda5f788a6c688ddf921fa3852eb6d6c6c62966": { + "balance": "0x22b1c8c1227a00000" + }, + "6ddb6092779d5842ead378e21e8120fd4c6bc132": { + "balance": "0x6c6b935b8bbd400000" + }, + "6ddfef639155daab0a5cb4953aa8c5afaa880453": { + "balance": "0x62a992e53a0af00000" + }, + "6de02f2dd67efdb7393402fa9eaacbcf589d2e56": { + "balance": "0x40138b917edfb80000" + }, + "6de4b581385cf7fc9fe8c77d131fe2ee7724c76a": { + "balance": "0x7d2997733dcce40000" + }, + "6de4d15219182faf3aa2c5d4d2595ff23091a727": { + "balance": "0x55a6e79ccd1d300000" + }, + "6dedf62e743f4d2c2a4b87a787f5424a7aeb393c": { + "balance": "0x9c2007651b2500000" + }, + "6df24f6685a62f791ba337bf3ff67e91f3d4bc3a": { + "balance": "0x756b49d40a48180000" + }, + "6df5c84f7b909aab3e61fe0ecb1b3bf260222ad2": { + "balance": "0xd8d726b7177a800000" + }, + "6dff90e6dc359d2590882b1483edbcf887c0e423": { + "balance": "0x3635c9adc5dea00000" + }, + "6e01e4ad569c95d007ada30d5e2db12888492294": { + "balance": "0xd8d726b7177a800000" + }, + "6e073b66d1b8c66744d88096a8dd99ec7e0228da": { + "balance": "0xd8d726b7177a800000" + }, + "6e0ee70612c976287d499ddfa6c0dcc12c06deea": { + "balance": "0x70bd5b95621460000" + }, + "6e12b51e225b4a4372e59ad7a2a1a13ea3d3a137": { + "balance": "0x30046c8cc775f040000" + }, + "6e1a046caf5b4a57f4fd4bc173622126b4e2fd86": { + "balance": "0x61093d7c2c6d380000" + }, + "6e1ea4b183e252c9bb7767a006d4b43696cb8ae9": { + "balance": "0xff3783c85eed08000" + }, + "6e255b700ae7138a4bacf22888a9e2c00a285eec": { + "balance": "0xd8d726b7177a800000" + }, + "6e270ad529f1f0b8d9cb6d2427ec1b7e2dc64a74": { + "balance": "0xad78ebc5ac6200000" + }, + "6e2eab85dc89fe29dc0aa1853247dab43a523d56": { + "balance": "0x4563918244f400000" + }, + "6e3a51db743d334d2fe88224b5fe7c008e80e624": { + "balance": "0x5bf0ba6634f680000" + }, + "6e4c2ab7db026939dbd3bc68384af660a61816b2": { + "balance": "0x90d972f32323c0000" + }, + "6e4d2e39c8836629e5b487b1918a669aebdd9536": { + "balance": "0x3635c9adc5dea00000" + }, + "6e5c2d9b1c546a86eefd5d0a5120c9e4e730190e": { + "balance": "0xad201a6794ff80000" + }, + "6e60aee1a78f8eda8b424c73e353354ae67c3042": { + "balance": "0xbd35a48d9919e60000" + }, + "6e64e6129f224e378c0e6e736a7e7a06c211e9ec": { + "balance": "0x3635c9adc5dea00000" + }, + "6e6d5bbbb9053b89d744a27316c2a7b8c09b547d": { + "balance": "0x3152710a023e6d8000" + }, + "6e72b2a1186a8e2916543b1cb36a68870ea5d197": { + "balance": "0xa1544be879ea80000" + }, + "6e761eaa0f345f777b5441b73a0fa5b56b85f22d": { + "balance": "0x6c6b935b8bbd400000" + }, + "6e79edd4845b076e4cd88d188b6e432dd93f35aa": { + "balance": "0x33c5499031720c0000" + }, + "6e8212b722afd408a7a73ed3e2395ee6454a0330": { + "balance": "0x89e917994f71c0000" + }, + "6e84876dbb95c40b6656e42ba9aea08a993b54dc": { + "balance": "0x3bbc60e3b6cbbe0000" + }, + "6e84c2fd18d8095714a96817189ca21cca62bab1": { + "balance": "0x127b6c702621cd8000" + }, + "6e866d032d405abdd65cf651411d803796c22311": { + "balance": "0x6c6b935b8bbd400000" + }, + "6e899e59a9b41ab7ea41df7517860f2acb59f4fd": { + "balance": "0x43c33c1937564800000" + }, + "6e89c51ea6de13e06cdc748b67c4410fe9bcab03": { + "balance": "0xd8d726b7177a800000" + }, + "6e8a26689f7a2fdefd009cbaaa5310253450daba": { + "balance": "0x6f213717bad8d30000" + }, + "6e96faeda3054302c45f58f161324c99a3eebb62": { + "balance": "0x1158e460913d00000" + }, + "6eb0a5a9ae96d22cf01d8fd6483b9f38f08c2c8b": { + "balance": "0xd8d726b7177a800000" + }, + "6eb3819617404058268f0c3cff3596bfe9148c1c": { + "balance": "0x5a87e7d7f5f6580000" + }, + "6eb5578a6bb7c32153195b0d8020a6914852c059": { + "balance": "0x8bc2abf40221f4800000" + }, + "6ebb5e6957aa821ef659b6018a393a504cae4450": { + "balance": "0x6c6b935b8bbd400000" + }, + "6ebcf9957f5fc5e985add475223b04b8c14a7aed": { + "balance": "0x5dc892aa1131c80000" + }, + "6ec3659571b11f889dd439bcd4d67510a25be57e": { + "balance": "0x6aaf7c8516d0c0000" + }, + "6ec89b39f9f5276a553e8da30e6ec17aa47eefc7": { + "balance": "0x18424f5f0b1b4e0000" + }, + "6ec96d13bdb24dc7a557293f029e02dd74b97a55": { + "balance": "0xd8d726b7177a800000" + }, + "6ecaefa6fc3ee534626db02c6f85a0c395571e77": { + "balance": "0x2086ac351052600000" + }, + "6ed2a12b02f8c688c7b5d3a6ea14d63687dab3b6": { + "balance": "0x6c6b935b8bbd400000" + }, + "6ed884459f809dfa1016e770edaf3e9fef46fa30": { + "balance": "0xb852d6782093f10000" + }, + "6edf7f5283725c953ee64317f66188af1184b033": { + "balance": "0x1b464311d45a6880000" + }, + "6ee8aad7e0a065d8852d7c3b9a6e5fdc4bf50c00": { + "balance": "0x1158e460913d00000" + }, + "6eefdc850e87b715c72791773c0316c3559b58a4": { + "balance": "0xd8d726b7177a800000" + }, + "6ef9e8c9b6217d56769af97dbb1c8e1b8be799d2": { + "balance": "0x9ddc1e3b901180000" + }, + "6efba8fb2ac5b6730729a972ec224426a287c3ad": { + "balance": "0xf5985fbcbe1680000" + }, + "6efd90b535e00bbd889fda7e9c3184f879a151db": { + "balance": "0x22385a827e815500000" + }, + "6f051666cb4f7bd2b1907221b829b555d7a3db74": { + "balance": "0x5f68e8131ecf800000" + }, + "6f0edd23bcd85f6015f9289c28841fe04c83efeb": { + "balance": "0x10910d4cdc9f60000" + }, + "6f137a71a6f197df2cbbf010dcbd3c444ef5c925": { + "balance": "0x6c6b935b8bbd400000" + }, + "6f176065e88e3c6fe626267d18a088aaa4db80bc": { + "balance": "0xbed1d0263d9f000000" + }, + "6f18ec767e320508195f1374500e3f2e125689ff": { + "balance": "0x3635c9adc5dea00000" + }, + "6f1f4907b8f61f0c51568d692806b382f50324f5": { + "balance": "0x6c6b935b8bbd400000" + }, + "6f24c9af2b763480515d1b0951bb77a540f1e3f9": { + "balance": "0x6acb3df27e1f880000" + }, + "6f2576da4de283bbe8e3ee69ddd66e5e711db3f5": { + "balance": "0x44591d67fecc800000" + }, + "6f29bb375be5ed34ed999bb830ee2957dde76d16": { + "balance": "0x6c6b935b8bbd400000" + }, + "6f2a31900e240395b19f159c1d00dfe4d898ebdf": { + "balance": "0x6c660645aa47180000" + }, + "6f2a42e6e033d01061131929f7a6ee1538021e52": { + "balance": "0x6c6b935b8bbd400000" + }, + "6f39cc37caaa2ddc9b610f6131e0619fae772a3c": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "6f44ca09f0c6a8294cbd519cdc594ad42c67579f": { + "balance": "0x2b5e3af16b1880000" + }, + "6f50929777824c291a49c46dc854f379a6bea080": { + "balance": "0x138400eca364a00000" + }, + "6f6cf20649a9e973177ac67dbadee4ebe5c7bdda": { + "balance": "0x11363297d01a8600000" + }, + "6f791d359bc3536a315d6382b88311af8ed6da47": { + "balance": "0x4fcc1a89027f00000" + }, + "6f794dbdf623daa6e0d00774ad6962737c921ea4": { + "balance": "0x6c6b935b8bbd400000" + }, + "6f7ac681d45e418fce8b3a1db5bc3be6f06c9849": { + "balance": "0x6c6b935b8bbd400000" + }, + "6f81f3abb1f933b1df396b8e9cc723a89b7c9806": { + "balance": "0xf2dc7d47f15600000" + }, + "6f8f0d15cc96fb7fe94f1065bc6940f8d12957b2": { + "balance": "0x3635c9adc5dea00000" + }, + "6f92d6e4548c78996509ee684b2ee29ba3c532b4": { + "balance": "0x3635c9adc5dea00000" + }, + "6fa60df818a5446418b1bbd62826e0b9825e1318": { + "balance": "0x2cb92cc8f6714400000" + }, + "6fa6388d402b30afe59934c3b9e13d1186476018": { + "balance": "0x24521e2a3017b80000" + }, + "6fa72015fa78696efd9a86174f7f1f21019286b1": { + "balance": "0x487a9a304539440000" + }, + "6fc25e7e00ca4f60a9fe6f28d1fde3542e2d1079": { + "balance": "0x2aef353bcddd600000" + }, + "6fc53662371dca587b59850de78606e2359df383": { + "balance": "0x9c2007651b2500000" + }, + "6fcc2c732bdd934af6ccd16846fb26ef89b2aa9b": { + "balance": "0x21e2b1d42261d490000" + }, + "6fd4e0f3f32bee6d3767fdbc9d353a6d3aab7899": { + "balance": "0x25b064a875ea940000" + }, + "6fd947d5a73b175008ae6ee8228163da289b167d": { + "balance": "0x65a4da25d3016c00000" + }, + "6fd98e563d12ce0fd60f4f1f850ae396a9823c02": { + "balance": "0x445be3f2ef87940000" + }, + "6fddbd9bca66e28765c2162c8433548c1052ed11": { + "balance": "0x1184429b82a818800000" + }, + "6ff5d361b52ad0b68b1588607ec304ae5665fc98": { + "balance": "0x692ae8897081d00000" + }, + "6ff6cc90d649de4e96cffee1077a5b302a848dcb": { + "balance": "0x18ce79c78802c0000" + }, + "6ffe5cf82cc9ea5e36cad7c2974ce7249f3749e6": { + "balance": "0x692ae8897081d00000" + }, + "7005a772282b1f62afda63f89b5dc6ab64c84cb9": { + "balance": "0x3cfc82e37e9a7400000" + }, + "700711e311bb947355f755b579250ca7fd765a3e": { + "balance": "0x61093d7c2c6d380000" + }, + "7010be2df57bd0ab9ae8196cd50ab0c521aba9f9": { + "balance": "0x6acb3df27e1f880000" + }, + "7023c70956e04a92d70025aad297b539af355869": { + "balance": "0x6c6b935b8bbd400000" + }, + "7025965d2b88da197d4459be3dc9386344cc1f31": { + "balance": "0x6cb7e74867d5e60000" + }, + "702802f36d00250fab53adbcd696f0176f638a49": { + "balance": "0x6c6b935b8bbd400000" + }, + "704819d2e44d6ed1da25bfce84c49fcca25613e5": { + "balance": "0x15af1d78b58c400000" + }, + "704a6eb41ba34f13addde7d2db7df04915c7a221": { + "balance": "0x62a992e53a0af00000" + }, + "704ab1150d5e10f5e3499508f0bf70650f028d4b": { + "balance": "0xd8d726b7177a800000" + }, + "704ae21d762d6e1dde28c235d13104597236db1a": { + "balance": "0x6c6b935b8bbd400000" + }, + "704d243c2978e46c2c86adbecd246e3b295ff633": { + "balance": "0x6d121bebf795f00000" + }, + "704d5de4846d39b53cd21d1c49f096db5c19ba29": { + "balance": "0x83d6c7aab63600000" + }, + "705ddd38355482b8c7d3b515bda1500dd7d7a817": { + "balance": "0x15af1d78b58c400000" + }, + "70616e2892fa269705b2046b8fe3e72fa55816d3": { + "balance": "0x43c33c1937564800000" + }, + "70670fbb05d33014444b8d1e8e7700258b8caa6d": { + "balance": "0x6c6b935b8bbd400000" + }, + "7081fa6baad6cfb7f51b2cca16fb8970991a64ba": { + "balance": "0xcaec005f6c0f68000" + }, + "7085ae7e7e4d932197b5c7858c00a3674626b7a5": { + "balance": "0x14542ba12a337c00000" + }, + "7086b4bde3e35d4aeb24b825f1a215f99d85f745": { + "balance": "0x6c68ccd09b022c0000" + }, + "708a2af425ceb01e87ffc1be54c0f532b20eacd6": { + "balance": "0x745d483b1f5a18000" + }, + "708ea707bae4357f1ebea959c3a250acd6aa21b3": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "708fa11fe33d85ad1befcbae3818acb71f6a7d7e": { + "balance": "0xfc936392801c0000" + }, + "7091303116d5f2389b23238b4d656a8596d984d3": { + "balance": "0x3b4e7e80aa58330000" + }, + "7099d12f6ec656899b049a7657065d62996892c8": { + "balance": "0x15af1d78b58c400000" + }, + "709fe9d2c1f1ce42207c9585044a60899f35942f": { + "balance": "0x6c6b935b8bbd400000" + }, + "70a03549aa6168e97e88a508330a5a0bea74711a": { + "balance": "0x487a9a304539440000" + }, + "70a4067d448cc25dc8e70e651cea7cf84e92109e": { + "balance": "0x98a7d9b8314c00000" + }, + "70ab34bc17b66f9c3b63f151274f2a727c539263": { + "balance": "0x6c6b935b8bbd400000" + }, + "70c213488a020c3cfb39014ef5ba6404724bcaa3": { + "balance": "0x692ae8897081d00000" + }, + "70d25ed2c8ada59c088cf70dd22bf2db93acc18a": { + "balance": "0x39474545e4adbc0000" + }, + "70e5e9da735ff077249dcb9aaf3db2a48d9498c0": { + "balance": "0x3635c9adc5dea00000" + }, + "70fee08b00c6c2c04a3c625c1ff77caf1c32df01": { + "balance": "0xad78ebc5ac6200000" + }, + "7101bd799e411cde14bdfac25b067ac890eab8e8": { + "balance": "0x4e9b8aae48de470000" + }, + "7109dd011d15f3122d9d3a27588c10d77744508b": { + "balance": "0x6c6b935b8bbd400000" + }, + "710b0274d712c77e08a5707d6f3e70c0ce3d92cf": { + "balance": "0x15af1d78b58c4000000" + }, + "710be8fd5e2918468be2aabea80d828435d79612": { + "balance": "0xf43fc2c04ee00000" + }, + "71135d8f05963c905a4a07922909235a896a52ea": { + "balance": "0xa2a15d09519be00000" + }, + "711ecf77d71b3d0ea95ce4758afecdb9c131079d": { + "balance": "0x29331e6558f0e00000" + }, + "71213fca313404204ecba87197741aa9dfe96338": { + "balance": "0x340aad21b3b700000" + }, + "712b76510214dc620f6c3a1dd29aa22bf6d214fb": { + "balance": "0x14542ba12a337c00000" + }, + "712ff7370a13ed360973fedc9ff5d2c93a505e9e": { + "balance": "0xd5967be4fc3f100000" + }, + "7133843a78d939c69d4486e10ebc7b602a349ff7": { + "balance": "0x11d5cacce21f840000" + }, + "7148aef33261d8031fac3f7182ff35928daf54d9": { + "balance": "0xde42ee1544dd900000" + }, + "7163758cbb6c4c525e0414a40a049dcccce919bb": { + "balance": "0xad78ebc5ac6200000" + }, + "7168b3bb8c167321d9bdb023a6e9fd11afc9afd9": { + "balance": "0x61093d7c2c6d380000" + }, + "7169724ee72271c534cad6420fb04ee644cb86fe": { + "balance": "0x163c2b40dba5520000" + }, + "716ad3c33a9b9a0a18967357969b94ee7d2abc10": { + "balance": "0x1a2117fe412a480000" + }, + "716ba01ead2a91270635f95f25bfaf2dd610ca23": { + "balance": "0x979e7012056aa780000" + }, + "716d50cca01e938500e6421cc070c3507c67d387": { + "balance": "0x6c6b935b8bbd400000" + }, + "71762c63678c18d1c6378ce068e666381315147e": { + "balance": "0x6c6b935b8bbd400000" + }, + "71784c105117c1f68935797fe159abc74e43d16a": { + "balance": "0x6c81c7b31195e00000" + }, + "7179726f5c71ae1b6d16a68428174e6b34b23646": { + "balance": "0x18ea250097cbaf60000" + }, + "717cf9beab3638308ded7e195e0c86132d163fed": { + "balance": "0x3326ee6f865f4220000" + }, + "7180b83ee5574317f21c8072b191d895d46153c3": { + "balance": "0x18efc84ad0c7b00000" + }, + "71946b7117fc915ed107385f42d99ddac63249c2": { + "balance": "0x6c6b935b8bbd400000" + }, + "719e891fbcc0a33e19c12dc0f02039ca05b801df": { + "balance": "0x14f5538463a1b540000" + }, + "71c7230a1d35bdd6819ed4b9a88e94a0eb0786dd": { + "balance": "0xeca08b353d24140000" + }, + "71d2cc6d02578c65f73c575e76ce8fbcfadcf356": { + "balance": "0x3ecc078688a480000" + }, + "71d9494e50c5dd59c599dba3810ba1755e6537f0": { + "balance": "0xd8d726b7177a800000" + }, + "71e38ff545f30fe14ca863d4f5297fd48c73a5ce": { + "balance": "0xc2127af858da700000" + }, + "71ea5b11ad8d29b1a4cb67bf58ca6c9f9c338c16": { + "balance": "0x56bc75e2d631000000" + }, + "71ec3aec3f8f9221f9149fede06903a0f9a232f2": { + "balance": "0xad78ebc5ac6200000" + }, + "71f2cdd1b046e2da2fbb5a26723422b8325e25a3": { + "balance": "0x56b394263a40c0000" + }, + "71fa22cc6d33206b7d701a163a0dab31ae4d31d6": { + "balance": "0x57473d05dabae80000" + }, + "7201d1c06920cd397ae8ad869bcda6e47ffb1b5a": { + "balance": "0x1158e460913d00000" + }, + "72072a0ef1cff3d567cdd260e708ddc11cbc9a31": { + "balance": "0x56bc75e2d63100000" + }, + "72094f3951ffc9771dced23ada080bcaf9c7cca7": { + "balance": "0x14542ba12a337c00000" + }, + "720994dbe56a3a95929774e20e1fe525cf3704e4": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "720e6b22bf430966fa32b6acb9a506eebf662c61": { + "balance": "0x83d6c7aab63600000" + }, + "721158be5762b119cc9b2035e88ee4ee78f29b82": { + "balance": "0x21e19e0c9bab2400000" + }, + "721f9d17e5a0e74205947aeb9bc6a7938961038f": { + "balance": "0x2d041d705a2c60000" + }, + "7222fec7711781d26eaa4e8485f7aa3fac442483": { + "balance": "0x18b84570022a200000" + }, + "72393d37b451effb9e1ff3b8552712e2a970d8c2": { + "balance": "0x35659ef93f0fc40000" + }, + "723d8baa2551d2addc43c21b45e8af4ca2bfb2c2": { + "balance": "0x5f68e8131ecf800000" + }, + "72402300e81d146c2e644e2bbda1da163ca3fb56": { + "balance": "0x17b7883c06916600000" + }, + "72480bede81ad96423f2228b5c61be44fb523100": { + "balance": "0x15af1d78b58c4000000" + }, + "724ce858857ec5481c86bd906e83a04882e5821d": { + "balance": "0xa2a15d09519be00000" + }, + "726a14c90e3f84144c765cffacba3e0df11b48be": { + "balance": "0x21e19e0c9bab2400000" + }, + "7283cd4675da58c496556151dafd80c7f995d318": { + "balance": "0x29331e6558f0e00000" + }, + "7286e89cd9de8f7a8a00c86ffdb53992dd9251d1": { + "balance": "0x692ae8897081d00000" + }, + "728f9ab080157db3073156dbca1a169ef3179407": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "7294c918b1aefb4d25927ef9d799e71f93a28e85": { + "balance": "0xaadec983fcff40000" + }, + "7294ec9da310bc6b4bbdf543b0ef45abfc3e1b4d": { + "balance": "0x4a89f54ef0121c00000" + }, + "729aad4627744e53f5d66309aa74448b3acdf46f": { + "balance": "0x6c6b935b8bbd400000" + }, + "72a2fc8675feb972fa41b50dffdbbae7fa2adfb7": { + "balance": "0x9ab4fc67b528c80000" + }, + "72a8260826294726a75bf39cd9aa9e07a3ea14cd": { + "balance": "0x6c6b935b8bbd400000" + }, + "72b05962fb2ad589d65ad16a22559eba1458f387": { + "balance": "0x73f75d1a085ba0000" + }, + "72b5633fe477fe542e742facfd690c137854f216": { + "balance": "0x5a87e7d7f5f6580000" + }, + "72b7a03dda14ca9c661a1d469fd33736f673c8e8": { + "balance": "0x6c6b935b8bbd400000" + }, + "72b904440e90e720d6ac1c2ad79c321dcc1c1a86": { + "balance": "0x54069233bf7f780000" + }, + "72b90a4dc097239492c5b9777dcd1e52ba2be2c2": { + "balance": "0x14542ba12a337c00000" + }, + "72bb27cb99f3e2c2cf90a98f707d30e4a201a071": { + "balance": "0x58e7926ee858a00000" + }, + "72c083beadbdc227c5fb43881597e32e83c26056": { + "balance": "0x43c33c1937564800000" + }, + "72cd048a110574482983492dfb1bd27942a696ba": { + "balance": "0x6c6b935b8bbd400000" + }, + "72d03d4dfab3500cf89b86866f15d4528e14a195": { + "balance": "0xf34b82fd8e91200000" + }, + "72dabb5b6eed9e99be915888f6568056381608f8": { + "balance": "0xb4c96c52cb4fe8000" + }, + "72fb49c29d23a18950c4b2dc0ddf410f532d6f53": { + "balance": "0x6c6b935b8bbd400000" + }, + "72feaf124579523954645b7fafff0378d1c8242e": { + "balance": "0x3635c9adc5dea00000" + }, + "7301dc4cf26d7186f2a11bf8b08bf229463f64a3": { + "balance": "0x6c6b935b8bbd400000" + }, + "730447f97ce9b25f22ba1afb36df27f9586beb9b": { + "balance": "0x2c73c937742c500000" + }, + "7306de0e288b56cfdf987ef0d3cc29660793f6dd": { + "balance": "0x1b8abfb62ec8f60000" + }, + "730d8763c6a4fd824ab8b859161ef7e3a96a1200": { + "balance": "0x43c33c1937564800000" + }, + "73128173489528012e76b41a5e28c68ba4e3a9d4": { + "balance": "0x3635c9adc5dea00000" + }, + "7313461208455455465445a459b06c3773b0eb30": { + "balance": "0x6c6b935b8bbd400000" + }, + "732fead60f7bfdd6a9dec48125e3735db1b6654f": { + "balance": "0x1158e460913d00000" + }, + "734223d27ff23e5906caed22595701bb34830ca1": { + "balance": "0x6c6b935b8bbd400000" + }, + "73473e72115110d0c3f11708f86e77be2bb0983c": { + "balance": "0x1158e460913d00000" + }, + "7352586d021ad0cf77e0e928404a59f374ff4582": { + "balance": "0xb8507a820728200000" + }, + "73550beb732ba9ddafda7ae406e18f7feb0f8bb2": { + "balance": "0x97c9ce4cf6d5c00000" + }, + "735b97f2fc1bd24b12076efaf3d1288073d20c8c": { + "balance": "0x1158e460913d00000" + }, + "735e328666ed5637142b3306b77ccc5460e72c3d": { + "balance": "0x6ab8f37879c9910000" + }, + "7363cd90fbab5bb8c49ac20fc62c398fe6fb744c": { + "balance": "0x6c6b935b8bbd400000" + }, + "736b44503dd2f6dd5469ff4c5b2db8ea4fec65d0": { + "balance": "0x1104ee759f21e30000" + }, + "736bf1402c83800f893e583192582a134eb532e9": { + "balance": "0x21e19d293c01f260000" + }, + "738ca94db7ce8be1c3056cd6988eb376359f3353": { + "balance": "0x5665b96cf35acf00000" + }, + "73914b22fc2f131584247d82be4fecbf978ad4ba": { + "balance": "0x6c6b935b8bbd400000" + }, + "73932709a97f02c98e51b091312865122385ae8e": { + "balance": "0x4d853c8f8908980000" + }, + "7393cbe7f9ba2165e5a7553500b6e75da3c33abf": { + "balance": "0x56bc75e2d63100000" + }, + "73b4d499de3f38bf35aaf769a6e318bc6d123692": { + "balance": "0x6c6b935b8bbd400000" + }, + "73bedd6fda7ba3272185087b6351fc133d484e37": { + "balance": "0x11226bf9dce59780000" + }, + "73bfe7710f31cab949b7a2604fbf5239cee79015": { + "balance": "0x6c6b935b8bbd400000" + }, + "73cf80ae9688e1580e68e782cd0811f7aa494d2c": { + "balance": "0x1a4aba225c207400000" + }, + "73d7269ff06c9ffd33754ce588f74a966abbbbba": { + "balance": "0x165c96647b38a200000" + }, + "73d8fee3cb864dce22bb26ca9c2f086d5e95e63b": { + "balance": "0x3635c9adc5dea00000" + }, + "73df3c3e7955f4f2d859831be38000b1076b3884": { + "balance": "0x6acb3df27e1f880000" + }, + "73e4a2b60cf48e8baf2b777e175a5b1e4d0c2d8f": { + "balance": "0x56bc75e2d63100000" + }, + "740af1eefd3365d78ba7b12cb1a673e06a077246": { + "balance": "0x42bf06b78ed3b500000" + }, + "740bfd52e01667a3419b029a1b8e45576a86a2db": { + "balance": "0x38ebad5cdc902800000" + }, + "740f641614779dcfa88ed1d425d60db42a060ca6": { + "balance": "0x3622c6760810570000" + }, + "7412c9bc30b4df439f023100e63924066afd53af": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "741693c30376508513082020cc2b63e9fa92131b": { + "balance": "0x410d586a20a4c00000" + }, + "7421ce5be381738ddc83f02621974ff0686c79b8": { + "balance": "0x58788cb94b1d800000" + }, + "74316adf25378c10f576d5b41a6f47fa98fce33d": { + "balance": "0x1238131e5c7ad50000" + }, + "743651b55ef8429df50cf81938c2508de5c8870f": { + "balance": "0x6c6b935b8bbd400000" + }, + "743de50026ca67c94df54f066260e1d14acc11ac": { + "balance": "0x6c6b935b8bbd400000" + }, + "7445202f0c74297a004eb3726aa6a82dd7c02fa1": { + "balance": "0x6c6b935b8bbd400000" + }, + "744b03bba8582ae5498e2dc22d19949467ab53fc": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "744c0c77ba7f236920d1e434de5da33e48ebf02c": { + "balance": "0x6acb3df27e1f880000" + }, + "7450ff7f99eaa9116275deac68e428df5bbcd8b9": { + "balance": "0x6c6b935b8bbd400000" + }, + "7456c5b2c5436e3e571008933f1805ccfe34e9ec": { + "balance": "0x3635c9adc5dea00000" + }, + "745ad3abc6eeeb2471689b539e789ce2b8268306": { + "balance": "0x3d4194bea011928000" + }, + "745aecbaf9bb39b74a67ea1ce623de368481baa6": { + "balance": "0x21e19e0c9bab2400000" + }, + "745ccf2d819edbbddea8117b5c49ed3c2a066e93": { + "balance": "0xd8d726b7177a800000" + }, + "7462c89caa9d8d7891b2545def216f7464d5bb21": { + "balance": "0x5eaed54a28b310000" + }, + "74648caac748dd135cd91ea14c28e1bd4d7ff6ae": { + "balance": "0xa80d24677efef00000" + }, + "7471f72eeb300624eb282eab4d03723c649b1b58": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "747abc9649056d3926044d28c3ad09ed17b67d70": { + "balance": "0x10f0dbae61009528000" + }, + "747ff7943b71dc4dcdb1668078f83dd7cc4520c2": { + "balance": "0x340aad21b3b700000" + }, + "7480de62254f2ba82b578219c07ba5be430dc3cb": { + "balance": "0x17da3a04c7b3e000000" + }, + "7484d26becc1eea8c6315ec3ee0a450117dc86a0": { + "balance": "0x28a857425466f800000" + }, + "74863acec75d03d53e860e64002f2c165e538377": { + "balance": "0x3635c9adc5dea00000" + }, + "7489cc8abe75cda4ef0d01cef2605e47eda67ab1": { + "balance": "0x73f75d1a085ba0000" + }, + "748c285ef1233fe4d31c8fb1378333721c12e27a": { + "balance": "0x6c6b935b8bbd400000" + }, + "749087ac0f5a97c6fad021538bf1d6cda18e0daa": { + "balance": "0x3635c9adc5dea00000" + }, + "7495ae78c0d90261e2140ef2063104731a60d1ed": { + "balance": "0x1db50718925210000" + }, + "749a4a768b5f237248938a12c623847bd4e688dc": { + "balance": "0x3e733628714200000" + }, + "749ad6f2b5706bbe2f689a44c4b640b58e96b992": { + "balance": "0x56bc75e2d63100000" + }, + "74a17f064b344e84db6365da9591ff1628257643": { + "balance": "0x1158e460913d00000" + }, + "74aeec915de01cc69b2cb5a6356feea14658c6c5": { + "balance": "0xc9a95ee2986520000" + }, + "74afe54902d615782576f8baac13ac970c050f6e": { + "balance": "0x9a1aaa3a9fba70000" + }, + "74b7e0228baed65957aebb4d916d333aae164f0e": { + "balance": "0x6c6b935b8bbd400000" + }, + "74bc4a5e2045f4ff8db184cf3a9b0c065ad807d2": { + "balance": "0x6c6b935b8bbd400000" + }, + "74bce9ec38362d6c94ccac26d5c0e13a8b3b1d40": { + "balance": "0x363526410442f50000" + }, + "74bf7a5ab59293149b5c60cf364263e5ebf1aa0d": { + "balance": "0x6470c3e771e3c0000" + }, + "74c73c90528a157336f1e7ea20620ae53fd24728": { + "balance": "0x1e63a2e538f16e30000" + }, + "74d1a4d0c7524e018d4e06ed3b648092b5b6af2c": { + "balance": "0x2b5e3af16b1880000" + }, + "74d366b07b2f56477d7c7077ac6fe497e0eb6559": { + "balance": "0x10f0cf064dd59200000" + }, + "74d37a51747bf8b771bfbf43943933d100d21483": { + "balance": "0x3635c9adc5dea00000" + }, + "74d671d99cbea1ab57906375b63ff42b50451d17": { + "balance": "0x3635c9adc5dea00000" + }, + "74ebf4425646e6cf81b109ce7bf4a2a63d84815f": { + "balance": "0x22b1c8c1227a00000" + }, + "74ed33acf43f35b98c9230b9e6642ecb5330839e": { + "balance": "0x24f6dffb498d280000" + }, + "74ef2869cbe608856045d8c2041118579f2236ea": { + "balance": "0x33cd64591956e0000" + }, + "74fc5a99c0c5460503a13b0509459da19ce7cd90": { + "balance": "0xad78ebc5ac6200000" + }, + "750bbb8c06bbbf240843cc75782ee02f08a97453": { + "balance": "0x2d43f3ebfafb2c0000" + }, + "7514adbdc63f483f304d8e94b67ff3309f180b82": { + "balance": "0x21c4a06e2d13598000" + }, + "7517f16c28d132bb40e3ba36c6aef131c462da17": { + "balance": "0xfc936392801c0000" + }, + "751a2ca34e7187c163d28e3618db28b13c196d26": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "751abcb6cc033059911815c96fd191360ab0442d": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "7526e482529f0a14eec98871dddd0e721b0cd9a2": { + "balance": "0x1158e460913d00000" + }, + "7529f3797bb6a20f7ea6492419c84c867641d81c": { + "balance": "0x6c6b935b8bbd400000" + }, + "752a5ee232612cd3005fb26e5b597de19f776be6": { + "balance": "0x127fcb8afae20d00000" + }, + "752c9febf42f66c4787bfa7eb17cf5333bba5070": { + "balance": "0x6a99f2b54fdd580000" + }, + "7539333046deb1ef3c4daf50619993f444e1de68": { + "balance": "0x40138b917edfb80000" + }, + "7553aa23b68aa5f57e135fe39fdc235eaca8c98c": { + "balance": "0x3635c9adc5dea00000" + }, + "755a60bf522fbd8fff9723446b7e343a7068567e": { + "balance": "0x43c33c1937564800000" + }, + "755f587e5efff773a220726a13d0f2130d9f896b": { + "balance": "0x3635c9adc5dea00000" + }, + "75621865b6591365606ed378308c2d1def4f222c": { + "balance": "0xa80d24677efef00000" + }, + "75636cdb109050e43d5d6ec47e359e218e857eca": { + "balance": "0x4d8b2276c8962280000" + }, + "7566496162ba584377be040a4f87777a707acaeb": { + "balance": "0xd8d726b7177a800000" + }, + "756b84eb85fcc1f4fcdcc2b08db6a86e135fbc25": { + "balance": "0xae8e7a0bb575d00000" + }, + "756f45e3fa69347a9a973a725e3c98bc4db0b5a0": { + "balance": "0xad78ebc5ac6200000" + }, + "757b65876dbf29bf911d4f0692a2c9beb1139808": { + "balance": "0xdf93a59337d6dd8000" + }, + "757fa55446c460968bb74b5ebca96c4ef2c709c5": { + "balance": "0x3708baed3d68900000" + }, + "75804aac64b4199083982902994d9c5ed8828f11": { + "balance": "0x1e3d07b0a620e40000" + }, + "7592c69d067b51b6cc639d1164d5578c60d2d244": { + "balance": "0x1158e460913d00000" + }, + "75abe5270f3a78ce007cf37f8fbc045d489b7bb1": { + "balance": "0x6c6acc67d7b1d40000" + }, + "75ac547017134c04ae1e11d60e63ec04d18db4ef": { + "balance": "0x14542ba12a337c00000" + }, + "75b0e9c942a4f0f6f86d3f95ff998022fa67963b": { + "balance": "0x50c5e761a444080000" + }, + "75b95696e8ec4510d56868a7c1a735c68b244890": { + "balance": "0x15af1d78b58c4000000" + }, + "75be8ff65e5788aec6b2a52d5fa7b1e7a03ba675": { + "balance": "0x3abcdc5343d740000" + }, + "75c11d024d12ae486c1095b7a7b9c4af3e8edeb9": { + "balance": "0x1158e460913d00000" + }, + "75c1ad23d23f24b384d0c3149177e86697610d21": { + "balance": "0x15c5bcd6c288bbd0000" + }, + "75c2ffa1bef54919d2097f7a142d2e14f9b04a58": { + "balance": "0x90f358504032a10000" + }, + "75d67ce14e8d29e8c2ffe381917b930b1aff1a87": { + "balance": "0xa2a15d09519be00000" + }, + "75de7e9352e90b13a59a5878ffecc7831cac4d82": { + "balance": "0x9489237adb9a500000" + }, + "75f7539d309e9039989efe2e8b2dbd865a0df088": { + "balance": "0x855b5ba65c84f00000" + }, + "7608f437b31f18bc0b64d381ae86fd978ed7b31f": { + "balance": "0x2b5e3af16b1880000" + }, + "760ff3354e0fde938d0fb5b82cef5ba15c3d2916": { + "balance": "0x21e19e0c9bab2400000" + }, + "761a6e362c97fbbd7c5977acba2da74687365f49": { + "balance": "0x9f74ae1f953d00000" + }, + "761e6caec189c230a162ec006530193e67cf9d19": { + "balance": "0x6c6b935b8bbd400000" + }, + "761f8a3a2af0a8bdbe1da009321fb29764eb62a1": { + "balance": "0x21e19e0c9bab2400000" + }, + "762998e1d75227fced7a70be109a4c0b4ed86414": { + "balance": "0x1158e460913d00000" + }, + "762d6f30dab99135e4eca51d5243d6c8621102d5": { + "balance": "0xf498941e664280000" + }, + "76331e30796ce664b2700e0d4153700edc869777": { + "balance": "0x6c6b935b8bbd400000" + }, + "763886e333c56feff85be3951ab0b889ce262e95": { + "balance": "0x6c6b935b8bbd400000" + }, + "763a7cbab70d7a64d0a7e52980f681472593490c": { + "balance": "0x2086ac351052600000" + }, + "763eece0b08ac89e32bfa4bece769514d8cb5b85": { + "balance": "0xd8d726b7177a800000" + }, + "7640a37f8052981515bce078da93afa4789b5734": { + "balance": "0x6c6b935b8bbd400000" + }, + "7641f7d26a86cddb2be13081810e01c9c83c4b20": { + "balance": "0xb98bc829a6f90000" + }, + "764692cccb33405dd0ab0c3379b49caf8e6221ba": { + "balance": "0x1158e460913d00000" + }, + "764d5212263aff4a2a14f031f04ec749dc883e45": { + "balance": "0x6449e84e47a8a80000" + }, + "764fc46d428b6dbc228a0f5f55c9508c772eab9f": { + "balance": "0x581767ba6189c400000" + }, + "76506eb4a780c951c74a06b03d3b8362f0999d71": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "765be2e12f629e6349b97d21b62a17b7c830edab": { + "balance": "0x14542ba12a337c00000" + }, + "76628150e2995b5b279fc83e0dd5f102a671dd1c": { + "balance": "0x878678326eac9000000" + }, + "766b3759e8794e926dac473d913a8fb61ad0c2c9": { + "balance": "0x4b06dbbb40f4a0000" + }, + "7670b02f2c3cf8fd4f4730f3381a71ea431c33c7": { + "balance": "0xe7eeba3410b740000" + }, + "767a03655af360841e810d83f5e61fb40f4cd113": { + "balance": "0x35659ef93f0fc40000" + }, + "767ac690791c2e23451089fe6c7083fe55deb62b": { + "balance": "0x2c73c937742c500000" + }, + "767fd7797d5169a05f7364321c19843a8c348e1e": { + "balance": "0x104e70464b1580000" + }, + "76846f0de03b5a76971ead298cdd08843a4bc6c6": { + "balance": "0xd71b0fe0a28e0000" + }, + "768498934e37e905f1d0e77b44b574bcf3ec4ae8": { + "balance": "0x43c33c1937564800000" + }, + "768ce0daa029b7ded022e5fc574d11cde3ecb517": { + "balance": "0x1174a5cdf88bc80000" + }, + "7693bdeb6fc82b5bca721355223175d47a084b4d": { + "balance": "0x4a89f54ef0121c00000" + }, + "76aaf8c1ac012f8752d4c09bb46607b6651d5ca8": { + "balance": "0x1158e460913d00000" + }, + "76ab87dd5a05ad839a4e2fc8c85aa6ba05641730": { + "balance": "0x6c6b935b8bbd400000" + }, + "76afc225f4fa307de484552bbe1d9d3f15074c4a": { + "balance": "0xa290b5c7ad39680000" + }, + "76becae4a31d36f3cb577f2a43594fb1abc1bb96": { + "balance": "0x543a9ce0e1332f00000" + }, + "76c27535bcb59ce1fa2d8c919cabeb4a6bba01d1": { + "balance": "0x6c6b935b8bbd400000" + }, + "76ca22bcb8799e5327c4aa2a7d0949a1fcce5f29": { + "balance": "0x52a03f228c5ae20000" + }, + "76cac488111a4fd595f568ae3a858770fc915d5f": { + "balance": "0xad78ebc5ac6200000" + }, + "76cb9c8b69f4387675c48253e234cb7e0d74a426": { + "balance": "0x190f4482eb91dae0000" + }, + "76f83ac3da30f7092628c7339f208bfc142cb1ee": { + "balance": "0x9a18ffe7427d640000" + }, + "76f9ad3d9bbd04ae055c1477c0c35e7592cb2a20": { + "balance": "0x8833f11e3458f200000" + }, + "76ffc157ad6bf8d56d9a1a7fddbc0fea010aabf4": { + "balance": "0x3635c9adc5dea00000" + }, + "77028e409cc43a3bd33d21a9fc53ec606e94910e": { + "balance": "0xd255d112e103a00000" + }, + "770c2fb2c4a81753ac0182ea460ec09c90a516f8": { + "balance": "0x1158e460913d00000" + }, + "770d98d31b4353fceee8560c4ccf803e88c0c4e0": { + "balance": "0x2086ac351052600000" + }, + "7713ab8037411c09ba687f6f9364f0d3239fac28": { + "balance": "0x21e19e0c9bab2400000" + }, + "771507aeee6a255dc2cd9df55154062d0897b297": { + "balance": "0x121ea68c114e510000" + }, + "7719888795ad745924c75760ddb1827dffd8cda8": { + "balance": "0x6c6b4c4da6ddbe0000" + }, + "7727af101f0aaba4d23a1cafe17c6eb5dab1c6dc": { + "balance": "0x6c6b935b8bbd400000" + }, + "772c297f0ad194482ee8c3f036bdeb01c201d5cc": { + "balance": "0xad78ebc5ac6200000" + }, + "77306ffe2e4a8f3ca826c1a249f7212da43aeffd": { + "balance": "0x43c33c1937564800000" + }, + "773141127d8cf318aebf88365add3d5527d85b6a": { + "balance": "0x3636d7af5ec98e0000" + }, + "7746b6c6699c8f34ca2768a820f1ffa4c207fe05": { + "balance": "0xd8d8583fa2d52f0000" + }, + "7751f363a0a7fd0533190809ddaf9340d8d11291": { + "balance": "0x1158e460913d00000" + }, + "7757a4b9cc3d0247ccaaeb9909a0e56e1dd6dcc2": { + "balance": "0x1158e460913d00000" + }, + "775c10c93e0db7205b2643458233c64fc33fd75b": { + "balance": "0x6c6b935b8bbd400000" + }, + "77617ebc4bebc5f5ddeb1b7a70cdeb6ae2ffa024": { + "balance": "0x6acb3df27e1f880000" + }, + "776943ffb2ef5cdd35b83c28bc046bd4f4677098": { + "balance": "0xa2a15d09519be00000" + }, + "77701e2c493da47c1b58f421b5495dee45bea39b": { + "balance": "0x148f649cf6142a58000" + }, + "77798f201257b9c35204957057b54674aefa51df": { + "balance": "0x813ca56906d340000" + }, + "778c43d11afe3b586ff374192d96a7f23d2b9b7f": { + "balance": "0x8bb4fcfa3b7d6b8000" + }, + "778c79f4de1953ebce98fe8006d53a81fb514012": { + "balance": "0x36330322d5238c0000" + }, + "779274bf1803a336e4d3b00ddd93f2d4f5f4a62e": { + "balance": "0x3635c9adc5dea00000" + }, + "77a17122fa31b98f1711d32a99f03ec326f33d08": { + "balance": "0x5c283d410394100000" + }, + "77a34907f305a54c85db09c363fde3c47e6ae21f": { + "balance": "0x35659ef93f0fc40000" + }, + "77a769fafdecf4a638762d5ba3969df63120a41d": { + "balance": "0x6c6b935b8bbd400000" + }, + "77be6b64d7c733a436adec5e14bf9ad7402b1b46": { + "balance": "0x3635c9adc5dea00000" + }, + "77bfe93ccda750847e41a1affee6b2da96e7214e": { + "balance": "0x1043561a8829300000" + }, + "77c4a697e603d42b12056cbba761e7f51d0443f5": { + "balance": "0x24dce54d34a1a00000" + }, + "77cc02f623a9cf98530997ea67d95c3b491859ae": { + "balance": "0x497303c36ea0c20000" + }, + "77d43fa7b481dbf3db530cfbf5fdced0e6571831": { + "balance": "0x6c6b935b8bbd400000" + }, + "77da5e6c72fb36bce1d9798f7bcdf1d18f459c2e": { + "balance": "0x13695bb6cf93e0000" + }, + "77f4e3bdf056883cc87280dbe640a18a0d02a207": { + "balance": "0xa81993a2bfb5b0000" + }, + "77f609ca8720a023262c55c46f2d26fb3930ac69": { + "balance": "0xf015f25736420000" + }, + "77f81b1b26fc84d6de97ef8b9fbd72a33130cc4a": { + "balance": "0x3635c9adc5dea00000" + }, + "7819b0458e314e2b53bfe00c38495fd4b9fdf8d6": { + "balance": "0x1158e460913d00000" + }, + "781b1501647a2e06c0ed43ff197fccec35e1700b": { + "balance": "0xa2a15d09519be00000" + }, + "782f52f0a676c77716d574c81ec4684f9a020a97": { + "balance": "0x2e14e206b730ad8000" + }, + "78355df0a230f83d032c703154414de3eedab557": { + "balance": "0x6c6b935b8bbd400000" + }, + "7836f7ef6bc7bd0ff3acaf449c84dd6b1e2c939f": { + "balance": "0xe08de7a92cd97c0000" + }, + "7837fcb876da00d1eb3b88feb3df3fa4042fac82": { + "balance": "0x5f68e8131ecf800000" + }, + "783eec8aa5dac77b2e6623ed5198a431abbaee07": { + "balance": "0x17da3a04c7b3e00000" + }, + "785c8ea774d73044a734fa790a1b1e743e77ed7c": { + "balance": "0xcf152640c5c830000" + }, + "7860a3de38df382ae4a4dce18c0c07b98bce3dfa": { + "balance": "0x3635c9adc5dea00000" + }, + "78634371e17304cbf339b1452a4ce438dc764cce": { + "balance": "0x21e19e0c9bab2400000" + }, + "7864dc999fe4f8e003c0f43decc39aae1522dc0f": { + "balance": "0x51e102bd8ece00000" + }, + "78746a958dced4c764f876508c414a68342cecb9": { + "balance": "0x2be374fe8e2c40000" + }, + "787d313fd36b053eeeaedbce74b9fb0678333289": { + "balance": "0x5c058b7842719600000" + }, + "78859c5b548b700d9284cee4b6633c2f52e529c2": { + "balance": "0xa030dcebbd2f4c0000" + }, + "788e809741a3b14a22a4b1d937c82cfea489eebe": { + "balance": "0x17b7883c06916600000" + }, + "78a1e254409fb1b55a7cb4dd8eba3b30c8bad9ef": { + "balance": "0x56bc75e2d63100000" + }, + "78a5e89900bd3f81dd71ba869d25fec65261df15": { + "balance": "0xafd812fee03d5700000" + }, + "78b978a9d7e91ee529ea4fc4b76feaf8762f698c": { + "balance": "0x6c6b935b8bbd4000000" + }, + "78ce3e3d474a8a047b92c41542242d0a08c70f99": { + "balance": "0x21e19e0c9bab2400000" + }, + "78cf8336b328db3d87813a472b9e89b75e0cf3bc": { + "balance": "0x3635c9adc5dea00000" + }, + "78d4f8c71c1e68a69a98f52fcb45da8af56ea1a0": { + "balance": "0x6c6b935b8bbd400000" + }, + "78df2681d6d602e22142d54116dea15d454957aa": { + "balance": "0x102794ad20da680000" + }, + "78e08bc533413c26e291b3143ffa7cc9afb97b78": { + "balance": "0xad78ebc5ac6200000" + }, + "78e83f80b3678c7a0a4e3e8c84dccde064426277": { + "balance": "0x61093d7c2c6d380000" + }, + "78f5c74785c5668a838072048bf8b453594ddaab": { + "balance": "0x15af1d78b58c400000" + }, + "790f91bd5d1c5cc4739ae91300db89e1c1303c93": { + "balance": "0x6c6b935b8bbd400000" + }, + "7917e5bd82a9790fd650d043cdd930f7799633db": { + "balance": "0xd8d4602c26bf6c0000" + }, + "7919e7627f9b7d54ea3b14bb4dd4649f4f39dee0": { + "balance": "0x5a87e7d7f5f6580000" + }, + "791f6040b4e3e50dcf3553f182cd97a90630b75d": { + "balance": "0xd8d726b7177a800000" + }, + "7930c2d9cbfa87f510f8f98777ff8a8448ca5629": { + "balance": "0xad6eedd17cf3b8000" + }, + "794529d09d017271359730027075b87ad83dae6e": { + "balance": "0x10ce1d3d8cb3180000" + }, + "794b51c39e53d9e762b0613b829a44b472f4fff3": { + "balance": "0x2435e0647841cc8000" + }, + "79551cede376f747e3716c8d79400d766d2e0195": { + "balance": "0x9cb37afa4ff78680000" + }, + "795ebc2626fc39b0c86294e0e837dcf523553090": { + "balance": "0x3635c9adc5dea00000" + }, + "796ebbf49b3e36d67694ad79f8ff36767ac6fab0": { + "balance": "0x34bc4fdde27c00000" + }, + "796f87ba617a2930b1670be92ed1281fb0b346e1": { + "balance": "0x6f5e86fb528280000" + }, + "797427e3dbf0feae7a2506f12df1dc40326e8505": { + "balance": "0x3635c9adc5dea00000" + }, + "797510e386f56393ced8f477378a444c484f7dad": { + "balance": "0x3635c9adc5dea00000" + }, + "797bb7f157d9feaa17f76da4f704b74dc1038341": { + "balance": "0xb50fcfafebecb00000" + }, + "7988901331e387f713faceb9005cb9b65136eb14": { + "balance": "0x6acb3df27e1f880000" + }, + "7989d09f3826c3e5af8c752a8115723a84d80970": { + "balance": "0x1686f8614cf0ad0000" + }, + "7995bd8ce2e0c67bf1c7a531d477bca1b2b97561": { + "balance": "0x14248d617829ece0000" + }, + "79aeb34566b974c35a5881dec020927da7df5d25": { + "balance": "0x6c6b935b8bbd400000" + }, + "79b120eb8806732321288f675a27a9225f1cd2eb": { + "balance": "0x85a0bf37dec9e40000" + }, + "79b48d2d6137c3854d611c01ea42427a0f597bb7": { + "balance": "0xa5aa85009e39c0000" + }, + "79b8aad879dd30567e8778d2d231c8f37ab8734e": { + "balance": "0x6c6b935b8bbd400000" + }, + "79bf2f7b6e328aaf26e0bb093fa22da29ef2f471": { + "balance": "0x61093d7c2c6d380000" + }, + "79c130c762b8765b19d2abc9a083ab8f3aad7940": { + "balance": "0xd5967be4fc3f100000" + }, + "79c1be19711f73bee4e6316ae7549459aacea2e0": { + "balance": "0x15af1d78b58c400000" + }, + "79c6002f8452ca157f1317e80a2faf24475559b7": { + "balance": "0x1158e460913d00000" + }, + "79cac6494f11ef2798748cb53285bd8e22f97cda": { + "balance": "0x6c6b935b8bbd400000" + }, + "79cfa9780ae6d87b2c31883f09276986c89a6735": { + "balance": "0x3635c9adc5dea00000" + }, + "79dba256472db4e058f2e4cdc3ea4e8a42773833": { + "balance": "0x4f2591f896a6500000" + }, + "79ed10cf1f6db48206b50919b9b697081fbdaaf3": { + "balance": "0x6c6b935b8bbd400000" + }, + "79f08e01ce0988e63c7f8f2908fade43c7f9f5c9": { + "balance": "0xfc936392801c0000" + }, + "79fd6d48315066c204f9651869c1096c14fc9781": { + "balance": "0x6c6b935b8bbd400000" + }, + "79ffb4ac13812a0b78c4a37b8275223e176bfda5": { + "balance": "0xf015f25736420000" + }, + "7a0589b143a8e5e107c9ac66a9f9f8597ab3e7ab": { + "balance": "0x51e932d76e8f7b0000" + }, + "7a0a78a9cc393f91c3d9e39a6b8c069f075e6bf5": { + "balance": "0x487a9a304539440000" + }, + "7a1370a742ec2687e761a19ac5a794329ee67404": { + "balance": "0xa2a1326761e2920000" + }, + "7a2dfc770e24368131b7847795f203f3d50d5b56": { + "balance": "0x269fec7f0361d200000" + }, + "7a33834e8583733e2d52aead589bd1affb1dd256": { + "balance": "0x3635c9adc5dea00000" + }, + "7a36aba5c31ea0ca7e277baa32ec46ce93cf7506": { + "balance": "0x43c33c1937564800000" + }, + "7a381122bada791a7ab1f6037dac80432753baad": { + "balance": "0x21e19e0c9bab2400000" + }, + "7a48d877b63a8f8f9383e9d01e53e80c528e955f": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "7a4f9b850690c7c94600dbee0ca4b0a411e9c221": { + "balance": "0x678a932062e4180000" + }, + "7a63869fc767a4c6b1cd0e0649f3634cb121d24b": { + "balance": "0x433874f632cc60000" + }, + "7a67dd043a504fc2f2fc7194e9becf484cecb1fb": { + "balance": "0xd8d726b7177a80000" + }, + "7a6b26f438d9a352449155b8876cbd17c9d99b64": { + "balance": "0x14542ba12a337c00000" + }, + "7a6d781c77c4ba1fcadf687341c1e31799e93d27": { + "balance": "0xeda838c4929080000" + }, + "7a7068e1c3375c0e599db1fbe6b2ea23b8f407d2": { + "balance": "0x6c6b935b8bbd400000" + }, + "7a74cee4fa0f6370a7894f116cd00c1147b83e59": { + "balance": "0x2b5e3af16b18800000" + }, + "7a79e30ff057f70a3d0191f7f53f761537af7dff": { + "balance": "0x15af1d78b58c400000" + }, + "7a7a4f807357a4bbe68e1aa806393210c411ccb3": { + "balance": "0x65a4da25d3016c00000" + }, + "7a8563867901206f3f2bf0fa3e1c8109cabccd85": { + "balance": "0x76d41c62494840000" + }, + "7a8797690ab77b5470bf7c0c1bba612508e1ac7d": { + "balance": "0x1e09296c3378de40000" + }, + "7a8c89c014509d56d7b68130668ff6a3ecec7370": { + "balance": "0x1043561a8829300000" + }, + "7a94b19992ceb8ce63bc92ee4b5aded10c4d9725": { + "balance": "0x38d1a8064bb64c80000" + }, + "7aa79ac04316cc8d08f20065baa6d4142897d54e": { + "balance": "0x4be4e7267b6ae00000" + }, + "7aad4dbcd3acf997df93586956f72b64d8ad94ee": { + "balance": "0xd8d726b7177a800000" + }, + "7ab256b204800af20137fabcc916a23258752501": { + "balance": "0x43c33c1937564800000" + }, + "7aba56f63a48bc0817d6b97039039a7ad62fae2e": { + "balance": "0x2086ac351052600000" + }, + "7abb10f5bd9bc33b8ec1a82d64b55b6b18777541": { + "balance": "0x43c33c1937564800000" + }, + "7ac48d40c664cc9a6d89f1c5f5c80a1c70e744e6": { + "balance": "0xa31062beeed7000000" + }, + "7ac58f6ffc4f8107ae6e30378e4e9f99c57fbb24": { + "balance": "0x22b1c8c1227a00000" + }, + "7ad3f307616f19dcb143e6444dab9c3c33611f52": { + "balance": "0x2b5e3af16b1880000" + }, + "7ad82caea1a8b4ed05319b9c9870173c814e06ee": { + "balance": "0x2164b7a04ac8a00000" + }, + "7ade5d66b944bb860c0efdc86276d58f4653f711": { + "balance": "0x6c6b935b8bbd400000" + }, + "7adfedb06d91f3cc7390450b85550270883c7bb7": { + "balance": "0x1178fa40515db40000" + }, + "7ae1c19e53c71cee4c73fae2d7fc73bf9ab5e392": { + "balance": "0x3635c9adc5dea00000" + }, + "7ae659eb3bc46852fa86fac4e21c768d50388945": { + "balance": "0xf810c1cb501b80000" + }, + "7aea25d42b2612286e99c53697c6bc4100e2dbbf": { + "balance": "0x6c6b935b8bbd400000" + }, + "7aef7b551f0b9c46e755c0f38e5b3a73fe1199f5": { + "balance": "0x50c5e761a444080000" + }, + "7b0b31ff6e24745ead8ed9bb85fc0bf2fe1d55d4": { + "balance": "0x2b5e3af16b18800000" + }, + "7b0fea1176d52159333a143c294943da36bbddb4": { + "balance": "0x1fc7da64ea14c100000" + }, + "7b11673cc019626b290cbdce26046f7e6d141e21": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "7b122162c913e7146cad0b7ed37affc92a0bf27f": { + "balance": "0x51af096b2301d18000" + }, + "7b1bf53a9cbe83a7dea434579fe72aac8d2a0cd0": { + "balance": "0xad4c8316a0b0c0000" + }, + "7b1daf14891b8a1e1bd429d8b36b9a4aa1d9afbf": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "7b1fe1ab4dfd0088cdd7f60163ef59ec2aee06f5": { + "balance": "0x6c6b935b8bbd400000" + }, + "7b25bb9ca8e702217e9333225250e53c36804d48": { + "balance": "0x65ea3db75546600000" + }, + "7b27d0d1f3dd3c140294d0488b783ebf4015277d": { + "balance": "0x15af1d78b58c400000" + }, + "7b4007c45e5a573fdbb6f8bd746bf94ad04a3c26": { + "balance": "0x33821f5135d259a0000" + }, + "7b43c7eea8d62355b0a8a81da081c6446b33e9e0": { + "balance": "0xd8d726b7177a800000" + }, + "7b4d2a38269069c18557770d591d24c5121f5e83": { + "balance": "0x25f273933db5700000" + }, + "7b6175ec9befc738249535ddde34688cd36edf25": { + "balance": "0x21e19e0c9bab2400000" + }, + "7b66126879844dfa34fe65c9f288117fefb449ad": { + "balance": "0x14542ba12a337c00000" + }, + "7b6a84718dd86e63338429ac811d7c8a860f21f1": { + "balance": "0x61093d7c2c6d380000" + }, + "7b712c7af11676006a66d2fc5c1ab4c479ce6037": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "7b73242d75ca9ad558d650290df17692d54cd8b8": { + "balance": "0x6c6e59e67c78540000" + }, + "7b761feb7fcfa7ded1f0eb058f4a600bf3a708cb": { + "balance": "0xf95dd2ec27cce00000" + }, + "7b827cae7ff4740918f2e030ab26cb98c4f46cf5": { + "balance": "0x194684c0b39de100000" + }, + "7b893286427e72db219a21fc4dcd5fbf59283c31": { + "balance": "0x21e19e0c9bab2400000" + }, + "7b9226d46fe751940bc416a798b69ccf0dfab667": { + "balance": "0xe3aeb5737240a00000" + }, + "7b98e23cb96beee80a168069ebba8f20edd55ccf": { + "balance": "0xba0c91587c14a0000" + }, + "7bb0fdf5a663b5fba28d9c902af0c811e252f298": { + "balance": "0xad78ebc5ac6200000" + }, + "7bb9571f394b0b1a8eba5664e9d8b5e840677bea": { + "balance": "0x11164759ffb320000" + }, + "7bb984c6dbb9e279966afafda59c01d02627c804": { + "balance": "0x1b464311d45a6880000" + }, + "7bbbec5e70bdead8bb32b42805988e9648c0aa97": { + "balance": "0x3636d7af5ec98e0000" + }, + "7bca1da6c80a66baa5db5ac98541c4be276b447d": { + "balance": "0x24cf049680fa3c0000" + }, + "7bddb2ee98de19ee4c91f661ee8e67a91d054b97": { + "balance": "0x3635c9adc5dea00000" + }, + "7be2f7680c802da6154c92c0194ae732517a7169": { + "balance": "0xfc936392801c0000" + }, + "7be7f2456971883b9a8dbe4c91dec08ac34e8862": { + "balance": "0xa2a15d09519be00000" + }, + "7be8ccb4f11b66ca6e1d57c0b5396221a31ba53a": { + "balance": "0x1158e460913d00000" + }, + "7beb81fb2f5e91526b2ac9795e76c69bcff04bc0": { + "balance": "0xeb22e794f0a8d600000" + }, + "7c0883054c2d02bc7a852b1f86c42777d0d5c856": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "7c0f5e072043c9ee740242197e78cc4b98cdf960": { + "balance": "0xad78ebc5ac6200000" + }, + "7c1df24a4f7fb2c7b472e0bb006cb27dcd164156": { + "balance": "0x3635c9adc5dea00000" + }, + "7c29d47d57a733f56b9b217063b513dc3b315923": { + "balance": "0xd8d726b7177a800000" + }, + "7c2b9603884a4f2e464eceb97d17938d828bc02c": { + "balance": "0xa2a15d09519be00000" + }, + "7c382c0296612e4e97e440e02d3871273b55f53b": { + "balance": "0xab640391201300000" + }, + "7c3eb713c4c9e0381cd8154c7c9a7db8645cde17": { + "balance": "0xad78ebc5ac6200000" + }, + "7c4401ae98f12ef6de39ae24cf9fc51f80eba16b": { + "balance": "0xad78ebc5ac6200000" + }, + "7c45f0f8442a56dbd39dbf159995415c52ed479b": { + "balance": "0x6c6b935b8bbd400000" + }, + "7c532db9e0c06c26fd40acc56ac55c1ee92d3c3a": { + "balance": "0x3f870857a3e0e3800000" + }, + "7c60a05f7a4a5f8cf2784391362e755a8341ef59": { + "balance": "0x6694f0182a37ae0000" + }, + "7c60e51f0be228e4d56fdd2992c814da7740c6bc": { + "balance": "0xad78ebc5ac6200000" + }, + "7c6924d07c3ef5891966fe0a7856c87bef9d2034": { + "balance": "0x6c6b935b8bbd400000" + }, + "7c8bb65a6fbb49bd413396a9d7e31053bbb37aa9": { + "balance": "0x14542ba12a337c00000" + }, + "7c9a110cb11f2598b2b20e2ca400325e41e9db33": { + "balance": "0x581767ba6189c400000" + }, + "7cbca88fca6a0060b960985c9aa1b02534dc2208": { + "balance": "0x19127a1391ea2a0000" + }, + "7cbeb99932e97e6e02058cfc62d0b26bc7cca52b": { + "balance": "0x6c6b935b8bbd400000" + }, + "7cc24a6a958c20c7d1249660f7586226950b0d9a": { + "balance": "0x6acb3df27e1f880000" + }, + "7cd20eccb518b60cab095b720f571570caaa447e": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "7cd5d81eab37e11e6276a3a1091251607e0d7e38": { + "balance": "0x3684d5ef981f40000" + }, + "7cdf74213945953db39ad0e8a9781add792e4d1d": { + "balance": "0x6c6b935b8bbd400000" + }, + "7ce4686446f1949ebed67215eb0d5a1dd72c11b8": { + "balance": "0x7839d321b81ab80000" + }, + "7cef4d43aa417f9ef8b787f8b99d53f1fea1ee88": { + "balance": "0x678a932062e4180000" + }, + "7d0350e40b338dda736661872be33f1f9752d755": { + "balance": "0x2b4f5a6f191948000" + }, + "7d04d2edc058a1afc761d9c99ae4fc5c85d4c8a6": { + "balance": "0x42a9c4675c9467d00000" + }, + "7d0b255efb57e10f7008aa22d40e9752dfcf0378": { + "balance": "0x19f8e7559924c0000" + }, + "7d13d6705884ab2157dd8dcc7046caf58ee94be4": { + "balance": "0x1d0da07cbb3ee9c00000" + }, + "7d273e637ef1eac481119413b91c989dc5eac122": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "7d2a52a7cf0c8436a8e007976b6c26b7229d1e15": { + "balance": "0x17bf06b32a241c0000" + }, + "7d34803569e00bd6b59fff081dfa5c0ab4197a62": { + "balance": "0x5cd87cb7b9fb860000" + }, + "7d34ff59ae840a7413c6ba4c5bb2ba2c75eab018": { + "balance": "0xa2a15d09519be00000" + }, + "7d392852f3abd92ff4bb5bb26cb60874f2be6795": { + "balance": "0x3636c25e66ece70000" + }, + "7d445267c59ab8d2a2d9e709990e09682580c49f": { + "balance": "0x3635c9adc5dea00000" + }, + "7d551397f79a2988b064afd0efebee802c7721bc": { + "balance": "0x857e0d6f1da76a00000" + }, + "7d5aa33fc14b51841a06906edb2bb49c2a117269": { + "balance": "0x104400a2470e680000" + }, + "7d5d2f73949dadda0856b206989df0078d51a1e5": { + "balance": "0x23c757072b8dd000000" + }, + "7d6e990daa7105de2526339833f77b5c0b85d84f": { + "balance": "0x43c33c1937564800000" + }, + "7d73863038ccca22f96affda10496e51e1e6cd48": { + "balance": "0x1158e460913d00000" + }, + "7d7dd5ee614dbb6fbfbcd26305247a058c41faa1": { + "balance": "0x6c6b935b8bbd400000" + }, + "7d7e7c61779adb7706c94d32409a2bb4e994bf60": { + "balance": "0x2ef20d9fc71a140000" + }, + "7d82e523cc2dc591da3954e8b6bb2caf6461e69c": { + "balance": "0x7d8dc2efffb1a90000" + }, + "7d858493f07415e0912d05793c972113eae8ae88": { + "balance": "0x628dd177d2bc280000" + }, + "7d901b28bf7f88ef73d8f73cca97564913ea8a24": { + "balance": "0x33c5499031720c0000" + }, + "7d980f4b566bb045517e4c14c87750de9346744b": { + "balance": "0x487a9a304539440000" + }, + "7d9c59631e2ba2e8e82891f3979922aaa3b567a1": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "7d9d221a3df89ddd7b5f61c1468c6787d6b333e6": { + "balance": "0x77b227cd83be80000" + }, + "7da7613445a21299aa74f0ad71431ec43fbb1be9": { + "balance": "0x3afb087b876900000" + }, + "7db4c7d5b797e9296e6382f203693db409449d62": { + "balance": "0x15af1d78b58c400000" + }, + "7db9eacc52e429dc83b461c5f4d86010e5383a28": { + "balance": "0x3635c9adc5dea00000" + }, + "7dd46da677e161825e12e80dc446f58276e1127c": { + "balance": "0x2c73c937742c500000" + }, + "7dd8d7a1a34fa1f8e73ccb005fc2a03a15b8229c": { + "balance": "0xad78ebc5ac6200000" + }, + "7ddd57165c87a2707f025dcfc2508c09834759bc": { + "balance": "0x4be4e7267b6ae00000" + }, + "7de442c82386154d2e993cbd1280bb7ca6b12ada": { + "balance": "0xd8f2e8247ec9480000" + }, + "7de7fe419cc61f91f408d234cc80d5ca3d054d99": { + "balance": "0x1158e460913d00000" + }, + "7dece6998ae1900dd3770cf4b93812bad84f0322": { + "balance": "0x56bc75e2d63100000" + }, + "7dfc342dffcf45dfee74f84c0995397bd1a63172": { + "balance": "0xd8d726b7177a80000" + }, + "7dfd2962b575bcbeee97f49142d63c30ab009f66": { + "balance": "0xd8d726b7177a800000" + }, + "7e1e29721d6cb91057f6c4042d8a0bbc644afe73": { + "balance": "0x8a9aba557e36c0000" + }, + "7e236666b2d06e63ea4e2ab84357e2dfc977e50e": { + "balance": "0x36356633ebd8ea0000" + }, + "7e24d9e22ce1da3ce19f219ccee523376873f367": { + "balance": "0x13fd9079caa60ff0000" + }, + "7e24fbdad290175eb2df6d180a19b9a9f41370be": { + "balance": "0x3635c9adc5dea00000" + }, + "7e268f131ddf687cc325c412f78ba961205e9112": { + "balance": "0x36364ee7d301b3c0000" + }, + "7e29290038493559194e946d4e460b96fc38a156": { + "balance": "0x10c13c527763880000" + }, + "7e2ba86da52e785d8625334f3397ba1c4bf2e8d1": { + "balance": "0xaadec983fcff40000" + }, + "7e3f63e13129a221ba1ab06326342cd98b5126ae": { + "balance": "0x56a02659a523340000" + }, + "7e47637e97c14622882be057bea229386f4052e5": { + "balance": "0x17da3a04c7b3e00000" + }, + "7e4e9409704121d1d77997026ff06ea9b19a8b90": { + "balance": "0x8d16549ed58fa40000" + }, + "7e59dc60be8b2fc19abd0a5782c52c28400bce97": { + "balance": "0x3635c9adc5dea00000" + }, + "7e5b19ae1be94ff4dee635492a1b012d14db0213": { + "balance": "0x56bc75e2d63100000" + }, + "7e5d9993104e4cb545e179a2a3f971f744f98482": { + "balance": "0x6c6b935b8bbd400000" + }, + "7e71171f2949fa0c3ac254254b1f0440e5e6a038": { + "balance": "0x22b1c8c1227a00000" + }, + "7e7c1e9a61a08a83984835c70ec31d34d3eaa87f": { + "balance": "0xa5aa85009e39c0000" + }, + "7e7f18a02eccaa5d61ab8fbf030343c434a25ef7": { + "balance": "0x39fbae8d042dd0000" + }, + "7e81f6449a03374191f3b7cb05d938b72e090dff": { + "balance": "0x56bc75e2d63100000" + }, + "7e8649e690fc8c1bfda1b5e186581f649b50fe33": { + "balance": "0x556f64c1fe7fa0000" + }, + "7e87863ec43a481df04d017762edcb5caa629b5a": { + "balance": "0x222c8eb3ff6640000" + }, + "7e8f96cc29f57b0975120cb593b7dd833d606b53": { + "balance": "0xaadec983fcff40000" + }, + "7e972a8a7c2a44c93b21436c38d21b9252c345fe": { + "balance": "0x61093d7c2c6d380000" + }, + "7e99dfbe989d3ba529d19751b7f4317f8953a3e2": { + "balance": "0x15af1d78b58c400000" + }, + "7ea0f96ee0a573a330b56897761f3d4c0130a8e3": { + "balance": "0x487a9a304539440000" + }, + "7ea791ebab0445a00efdfc4e4a8e9a7e7565136d": { + "balance": "0xfc936392801c0000" + }, + "7eaba035e2af3793fd74674b102540cf190addb9": { + "balance": "0x45026c835b60440000" + }, + "7eb4b0185c92b6439a08e7322168cb353c8a774a": { + "balance": "0x227196ca04983ca0000" + }, + "7ebd95e9c470f7283583dc6e9d2c4dce0bea8f84": { + "balance": "0x2f6f10780d22cc00000" + }, + "7ed0a5a847bef9a9da7cba1d6411f5c316312619": { + "balance": "0x228eb37e8751d0000" + }, + "7edafba8984baf631a820b6b92bbc2c53655f6bd": { + "balance": "0x6c6b935b8bbd400000" + }, + "7edb02c61a227287611ad950696369cc4e647a68": { + "balance": "0xeda838c4929080000" + }, + "7ee5ca805dce23af89c2d444e7e40766c54c7404": { + "balance": "0xd0bd412edbd820000" + }, + "7ee604c7a9dc2909ce321de6b9b24f5767577555": { + "balance": "0x12bf9c7985cf62d8000" + }, + "7ef16fd8d15b378a0fba306b8d03dd98fc92619f": { + "balance": "0x25f273933db5700000" + }, + "7ef98b52bee953bef992f305fda027f8911c5851": { + "balance": "0x1be722206996bc8000" + }, + "7efc90766a00bc52372cac97fabd8a3c831f8ecd": { + "balance": "0x890b0c2e14fb80000" + }, + "7efec0c6253caf397f71287c1c07f6c9582b5b86": { + "balance": "0x1a2cbcb84f30d58000" + }, + "7f01dc7c3747ca608f983dfc8c9b39e755a3b914": { + "balance": "0xb386cad5f7a5a0000" + }, + "7f0662b410298c99f311d3a1454a1eedba2fea76": { + "balance": "0xad78ebc5ac6200000" + }, + "7f06c89d59807fa60bc60136fcf814cbaf2543bd": { + "balance": "0x21e19e0c9bab2400000" + }, + "7f0b90a1fdd48f27b268feb38382e55ddb50ef0f": { + "balance": "0x32f51edbaaa3300000" + }, + "7f0ec3db804692d4d1ea3245365aab0590075bc4": { + "balance": "0xd8d726b7177a800000" + }, + "7f0f04fcf37a53a4e24ede6e93104e78be1d3c9e": { + "balance": "0x6c6b935b8bbd400000" + }, + "7f13d760498d7193ca6859bc95c901386423d76c": { + "balance": "0x10f0cf064dd59200000" + }, + "7f150afb1a77c2b45928c268c1e9bdb4641d47d8": { + "balance": "0x6c6b935b8bbd400000" + }, + "7f1619988f3715e94ff1d253262dc5581db3de1c": { + "balance": "0x30ca024f987b900000" + }, + "7f1c81ee1697fc144b7c0be5493b5615ae7fddca": { + "balance": "0x1b1dab61d3aa640000" + }, + "7f2382ffd8f83956467937f9ba72374623f11b38": { + "balance": "0x2086ac351052600000" + }, + "7f3709391f3fbeba3592d175c740e87a09541d02": { + "balance": "0x1a055690d9db800000" + }, + "7f389c12f3c6164f6446566c77669503c2792527": { + "balance": "0x556f64c1fe7fa0000" + }, + "7f3a1e45f67e92c880e573b43379d71ee089db54": { + "balance": "0x152d02c7e14af6800000" + }, + "7f3d7203c8a447f7bf36d88ae9b6062a5eee78ae": { + "balance": "0x14542ba12a337c00000" + }, + "7f46bb25460dd7dae4211ca7f15ad312fc7dc75c": { + "balance": "0x16a6502f15a1e540000" + }, + "7f49e7a4269882bd8722d4a6f566347629624079": { + "balance": "0x6c6b935b8bbd400000" + }, + "7f49f20726471ac1c7a83ef106e9775ceb662566": { + "balance": "0x14061b9d77a5e980000" + }, + "7f4b5e278578c046cceaf65730a0e068329ed5b6": { + "balance": "0x65ea3db75546600000" + }, + "7f4f593b618c330ba2c3d5f41eceeb92e27e426c": { + "balance": "0x966edc756b7cfc0000" + }, + "7f541491d2ac00d2612f94aa7f0bcb014651fbd4": { + "balance": "0x14620c57dddae00000" + }, + "7f5ae05ae0f8cbe5dfe721f044d7a7bef4c27997": { + "balance": "0x340aad21b3b700000" + }, + "7f603aec1759ea5f07c7f8d41a1428fbbaf9e762": { + "balance": "0x1158e460913d00000" + }, + "7f616c6f008adfa082f34da7d0650460368075fb": { + "balance": "0x3635c9adc5dea00000" + }, + "7f61fa6cf5f898b440dac5abd8600d6d691fdef9": { + "balance": "0xf2dc7d47f15600000" + }, + "7f655c6789eddf455cb4b88099720639389eebac": { + "balance": "0x14542ba12a337c00000" + }, + "7f6b28c88421e4857e459281d78461692489d3fb": { + "balance": "0x6c6b935b8bbd400000" + }, + "7f6efb6f4318876d2ee624e27595f44446f68e93": { + "balance": "0x54069233bf7f780000" + }, + "7f7192c0df1c7db6d9ed65d71184d8e4155a17ba": { + "balance": "0x453728d33942c0000" + }, + "7f7a3a21b3f5a65d81e0fcb7d52dd00a1aa36dba": { + "balance": "0x56bc75e2d63100000" + }, + "7f8dbce180ed9c563635aad2d97b4cbc428906d9": { + "balance": "0x90f534608a72880000" + }, + "7f993ddb7e02c282b898f6155f680ef5b9aff907": { + "balance": "0x43c33c1937564800000" + }, + "7f9f9b56e4289dfb58e70fd5f12a97b56d35c6a5": { + "balance": "0x6acb3df27e1f880000" + }, + "7fa37ed67887751a471f0eb306be44e0dbcd6089": { + "balance": "0x3976747fe11a100000" + }, + "7faa30c31519b584e97250ed2a3cf3385ed5fd50": { + "balance": "0x6c6b935b8bbd400000" + }, + "7fcf5ba6666f966c5448c17bf1cb0bbcd8019b06": { + "balance": "0x56bc3d0aebe498000" + }, + "7fd679e5fb0da2a5d116194dcb508318edc580f3": { + "balance": "0x1639e49bba162800000" + }, + "7fdba031c78f9c096d62d05a369eeab0bccc55e5": { + "balance": "0x97c9ce4cf6d5c00000" + }, + "7fdbc3a844e40d96b2f3a635322e6065f4ca0e84": { + "balance": "0x6c6b935b8bbd400000" + }, + "7fdfc88d78bf1b285ac64f1adb35dc11fcb03951": { + "balance": "0x7c06fda02fb0360000" + }, + "7fea1962e35d62059768c749bedd96cab930d378": { + "balance": "0x6c6b935b8bbd400000" + }, + "7fef8c38779fb307ec6f044bebe47f3cfae796f1": { + "balance": "0x92340f86cf09e8000" + }, + "7ff0c63f70241bece19b737e5341b12b109031d8": { + "balance": "0x12c1b6eed03d280000" + }, + "7ffabfbc390cbe43ce89188f0868b27dcb0f0cad": { + "balance": "0x1595182224b26480000" + }, + "7ffd02ed370c7060b2ae53c078c8012190dfbb75": { + "balance": "0x21e19e0c9bab2400000" + }, + "80022a1207e910911fc92849b069ab0cdad043d3": { + "balance": "0xb98bc829a6f90000" + }, + "8009a7cbd192b3aed4adb983d5284552c16c7451": { + "balance": "0xd8d726b7177a800000" + }, + "800e7d631c6e573a90332f17f71f5fd19b528cb9": { + "balance": "0x83d6c7aab63600000" + }, + "80156d10efa8b230c99410630d37e269d4093cea": { + "balance": "0x6c6b935b8bbd400000" + }, + "801732a481c380e57ed62d6c29de998af3fa3b13": { + "balance": "0x56bc75e2d63100000" + }, + "801d65c518b11d0e3f4f470221417013c8e53ec5": { + "balance": "0xd8d726b7177a800000" + }, + "8026435aac728d497b19b3e7e57c28c563954f2b": { + "balance": "0x5dc892aa1131c80000" + }, + "802dc3c4ff2d7d925ee2859f4a06d7ba60f1308c": { + "balance": "0x550940c8fd34c0000" + }, + "8030b111c6983f0485ddaca76224c6180634789f": { + "balance": "0x4563918244f400000" + }, + "8035bcffaefdeeea35830c497d14289d362023de": { + "balance": "0x1043561a8829300000" + }, + "8035fe4e6b6af27ae492a578515e9d39fa6fa65b": { + "balance": "0xd8d726b7177a800000" + }, + "8043ed22f997e5a2a4c16e364486ae64975692c4": { + "balance": "0x3d4904ffc9112e8000" + }, + "8043fdd0bc4c973d1663d55fc135508ec5d4f4fa": { + "balance": "0x1158e460913d00000" + }, + "804ca94972634f633a51f3560b1d06c0b293b3b1": { + "balance": "0xad78ebc5ac6200000" + }, + "80522ddf944ec52e27d724ed4c93e1f7be6083d6": { + "balance": "0xad78ebc5ac6200000" + }, + "80591a42179f34e64d9df75dcd463b28686f5574": { + "balance": "0x43c33c1937564800000" + }, + "805ce51297a0793b812067f017b3e7b2df9bb1f9": { + "balance": "0x56bc75e2d63100000" + }, + "805d846fb0bc02a7337226d685be9ee773b9198a": { + "balance": "0x43c30fb0884a96c0000" + }, + "8063379a7bf2cb923a84c5093e68dac7f75481c5": { + "balance": "0x1176102e6e32df0000" + }, + "806854588ecce541495f81c28a290373df0274b2": { + "balance": "0x1f8cdf5c6e8d580000" + }, + "806f44bdeb688037015e84ff218049e382332a33": { + "balance": "0x6c5db2a4d815dc0000" + }, + "80744618de396a543197ee4894abd06398dd7c27": { + "balance": "0x6c6b935b8bbd400000" + }, + "8077c3e4c445586e094ce102937fa05b737b568c": { + "balance": "0x56bc75e2d63100000" + }, + "80907f593148b57c46c177e23d25abc4aae18361": { + "balance": "0x56bc75e2d63100000" + }, + "80977316944e5942e79b0e3abad38da746086519": { + "balance": "0x21a754a6dc5280000" + }, + "80a0f6cc186cf6201400736e065a391f52a9df4a": { + "balance": "0x21e19e0c9bab2400000" + }, + "80abec5aa36e5c9d098f1b942881bd5acac6963d": { + "balance": "0x6c6b935b8bbd400000" + }, + "80b23d380b825c46e0393899a85556462da0e18c": { + "balance": "0x6c6b935b8bbd400000" + }, + "80b42de170dbd723f454e88f7716452d92985092": { + "balance": "0x104623c0762dd10000" + }, + "80b79f338390d1ba1b3737a29a0257e5d91e0731": { + "balance": "0x1158e460913d00000" + }, + "80bf995ed8ba92701d10fec49f9e7d014dbee026": { + "balance": "0x1f0437ca1a7e128000" + }, + "80c04efd310f440483c73f744b5b9e64599ce3ec": { + "balance": "0x410d586a20a4c00000" + }, + "80c3a9f695b16db1597286d1b3a8b7696c39fa27": { + "balance": "0x56bc75e2d63100000" + }, + "80c53ee7e3357f94ce0d7868009c208b4a130125": { + "balance": "0x6c6b935b8bbd400000" + }, + "80cc21bd99f39005c58fe4a448909220218f66cb": { + "balance": "0x3636c9796436740000" + }, + "80d5c40c59c7f54ea3a55fcfd175471ea35099b3": { + "balance": "0x3635c9adc5dea00000" + }, + "80da2fdda29a9e27f9e115975e69ae9cfbf3f27e": { + "balance": "0xad78ebc5ac6200000" + }, + "80e7b3205230a566a1f061d922819bb4d4d2a0e1": { + "balance": "0x2f6f10780d22cc00000" + }, + "80ea1acc136eca4b68c842a95adf6b7fee7eb8a2": { + "balance": "0xd8d726b7177a800000" + }, + "80f07ac09e7b2c3c0a3d1e9413a544c73a41becb": { + "balance": "0x1158e460913d00000" + }, + "810db25675f45ea4c7f3177f37ce29e22d67999c": { + "balance": "0xad78ebc5ac6200000" + }, + "81139bfdcca656c430203f72958c543b6580d40c": { + "balance": "0x6c6b935b8bbd400000" + }, + "811461a2b0ca90badac06a9ea16e787b33b196cc": { + "balance": "0x8e3f50b173c100000" + }, + "81164deb10814ae08391f32c08667b6248c27d7a": { + "balance": "0x155bd9307f9fe80000" + }, + "81186931184137d1192ac88cd3e1e5d0fdb86a74": { + "balance": "0x9d3595ab2438d00000" + }, + "812a55c43caedc597218379000ce510d548836fd": { + "balance": "0xfc936392801c0000" + }, + "812ea7a3b2c86eed32ff4f2c73514cc63bacfbce": { + "balance": "0x3635c9adc5dea00000" + }, + "8134dd1c9df0d6c8a5812426bb55c761ca831f08": { + "balance": "0x6a2160bb57ccc0000" + }, + "814135da8f9811075783bf1ab67062af8d3e9f40": { + "balance": "0x1158e460913d00000" + }, + "81498ca07b0f2f17e8bbc7e61a7f4ae7be66b78b": { + "balance": "0x581fbb5b33bb00000" + }, + "81556db27349ab8b27004944ed50a46e941a0f5f": { + "balance": "0xd8bb6549b02bb80000" + }, + "8155fa6c51eb31d808412d748aa086105018122f": { + "balance": "0x65ea3db75546600000" + }, + "8156360bbd370961ceca6b6691d75006ad204cf2": { + "balance": "0x878678326eac9000000" + }, + "8161d940c3760100b9080529f8a60325030f6edc": { + "balance": "0x1043561a8829300000" + }, + "8164e78314ae16b28926cc553d2ccb16f356270d": { + "balance": "0x1ca134e95fb32c80000" + }, + "8165cab0eafb5a328fc41ac64dae715b2eef2c65": { + "balance": "0x3635c9adc5dea00000" + }, + "8168edce7f2961cf295b9fcd5a45c06cdeda6ef5": { + "balance": "0xad78ebc5ac6200000" + }, + "816d9772cf11399116cc1e72c26c6774c9edd739": { + "balance": "0xad78ebc5ac6200000" + }, + "8173c835646a672e0152be10ffe84162dd256e4c": { + "balance": "0x1aabdf2145b4300000" + }, + "817493cd9bc623702a24a56f9f82e3fd48f3cd31": { + "balance": "0x9e4b23f12d4ca00000" + }, + "8179c80970182cc5b7d82a4df06ea94db63a25f3": { + "balance": "0x276f259de66bf40000" + }, + "817ac33bd8f847567372951f4a10d7a91ce3f430": { + "balance": "0xad7c406c66dc18000" + }, + "818ffe271fc3973565c303f213f6d2da89897ebd": { + "balance": "0x136e05342fee1b98000" + }, + "8197948121732e63d9c148194ecad46e30b749c8": { + "balance": "0xd8d726b7177a800000" + }, + "819af9a1c27332b1c369bbda1b3de1c6e933d640": { + "balance": "0x1109e654b98f7a0000" + }, + "819cdaa5303678ef7cec59d48c82163acc60b952": { + "balance": "0x31351545f79816c0000" + }, + "819eb4990b5aba5547093da12b6b3c1093df6d46": { + "balance": "0x3635c9adc5dea00000" + }, + "81a88196fac5f23c3e12a69dec4b880eb7d97310": { + "balance": "0x6c6b935b8bbd400000" + }, + "81bccbff8f44347eb7fca95b27ce7c952492aaad": { + "balance": "0x840c12165dd780000" + }, + "81bd75abd865e0c3f04a0b4fdbcb74d34082fbb7": { + "balance": "0xd8d726b7177a800000" + }, + "81c18c2a238ddc4cba230a072dd7dc101e620273": { + "balance": "0x487a9a304539440000" + }, + "81c9e1aee2d3365d53bcfdcd96c7c538b0fd7eec": { + "balance": "0x62a992e53a0af00000" + }, + "81cfad760913d3c322fcc77b49c2ae3907e74f6e": { + "balance": "0xaadec983fcff40000" + }, + "81d619ff5726f2405f12904c72eb1e24a0aaee4f": { + "balance": "0x43c33c1937564800000" + }, + "81efe296ae76c860d1c5fbd33d47e8ce9996d157": { + "balance": "0x3635c9adc5dea00000" + }, + "81f8de2c283d5fd4afbda85dedf9760eabbbb572": { + "balance": "0xa2a15d09519be00000" + }, + "820c19291196505b65059d9914b7090be1db87de": { + "balance": "0x796e3ea3f8ab00000" + }, + "821cb5cd05c7ef909fe1be60733d8963d760dc41": { + "balance": "0xd8d726b7177a800000" + }, + "821d798af19989c3ae5b84a7a7283cd7fda1fabe": { + "balance": "0x43c33c1937564800000" + }, + "821eb90994a2fbf94bdc3233910296f76f9bf6e7": { + "balance": "0x21e19e0c9bab2400000" + }, + "82249fe70f61c6b16f19a324840fdc020231bb02": { + "balance": "0x20336b08a93635b0000" + }, + "8228ebc087480fd64547ca281f5eace3041453b9": { + "balance": "0x6acb3df27e1f880000" + }, + "8229ceb9f0d70839498d44e6abed93c5ca059f5d": { + "balance": "0x1a1c1b3c989a20100000" + }, + "822edff636563a6106e52e9a2598f7e6d0ef2782": { + "balance": "0x1f4f9693d42d38000" + }, + "823219a25976bb2aa4af8bad41ac3526b493361f": { + "balance": "0x6c6b935b8bbd400000" + }, + "8232d1f9742edf8dd927da353b2ae7b4cbce7592": { + "balance": "0x243d4d18229ca20000" + }, + "8234f463d18485501f8f85ace4972c9b632dbccc": { + "balance": "0x6c6b935b8bbd400000" + }, + "823768746737ce6da312d53e54534e106f967cf3": { + "balance": "0x1158e460913d00000" + }, + "823ba7647238d113bce9964a43d0a098118bfe4d": { + "balance": "0xad78ebc5ac6200000" + }, + "824074312806da4748434266ee002140e3819ac2": { + "balance": "0x51b1d3839261ac0000" + }, + "82438fd2b32a9bdd674b49d8cc5fa2eff9781847": { + "balance": "0x1158e460913d00000" + }, + "82485728d0e281563758c75ab27ed9e882a0002d": { + "balance": "0x7f808e9291e6c0000" + }, + "824b3c3c443e19295d7ef6faa7f374a4798486a8": { + "balance": "0x1158e460913d00000" + }, + "8251358ca4e060ddb559ca58bc0bddbeb4070203": { + "balance": "0x6c6b935b8bbd400000" + }, + "825135b1a7fc1605614c8aa4d0ac6dbad08f480e": { + "balance": "0x4d853c8f8908980000" + }, + "825309a7d45d1812f51e6e8df5a7b96f6c908887": { + "balance": "0x8034f7d9b166d40000" + }, + "825a7f4e10949cb6f8964268f1fa5f57e712b4c4": { + "balance": "0x1158e460913d00000" + }, + "8261fa230c901d43ff579f4780d399f31e6076bc": { + "balance": "0x6c6b935b8bbd400000" + }, + "8262169b615870134eb4ac6c5f471c6bf2f789fc": { + "balance": "0x19127a1391ea2a0000" + }, + "8263ece5d709e0d7ae71cca868ed37cd2fef807b": { + "balance": "0x35ab028ac154b80000" + }, + "826ce5790532e0548c6102a30d3eac836bd6388f": { + "balance": "0x3cfc82e37e9a7400000" + }, + "826eb7cd7319b82dd07a1f3b409071d96e39677f": { + "balance": "0x3635c9adc5dea00000" + }, + "827531a6c5817ae35f82b00b9754fcf74c55e232": { + "balance": "0xc328093e61ee400000" + }, + "8275cd684c3679d5887d03664e338345dc3cdde1": { + "balance": "0xdb44e049bb2c0000" + }, + "8284923b62e68bbf7c2b9f3414d13ef6c812a904": { + "balance": "0xd255d112e103a00000" + }, + "828ba651cb930ed9787156299a3de44cd08b7212": { + "balance": "0x487a9a304539440000" + }, + "82a15cef1d6c8260eaf159ea3f0180d8677dce1c": { + "balance": "0x6c6b935b8bbd400000" + }, + "82a8b96b6c9e13ebec1e9f18ac02a60ea88a48ff": { + "balance": "0x6c6b8c408e73b30000" + }, + "82a8cbbfdff02b2e38ae4bbfca15f1f0e83b1aea": { + "balance": "0x49b991c27ef6d8000" + }, + "82e4461eb9d849f0041c1404219e4272c4900ab4": { + "balance": "0x6c6b935b8bbd400000" + }, + "82e577b515cb2b0860aafe1ce09a59e09fe7d040": { + "balance": "0x2086ac351052600000" + }, + "82ea01e3bf2e83836e71704e22a2719377efd9c3": { + "balance": "0xa4cc799563c3800000" + }, + "82f2e991fd324c5f5d17768e9f61335db6319d6c": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "82f39b2758ae42277b86d69f75e628d958ebcab0": { + "balance": "0x878678326eac9000000" + }, + "82f854c9c2f087dffa985ac8201e626ca5467686": { + "balance": "0x152d02c7e14af6800000" + }, + "82ff716fdf033ec7e942c909d9831867b8b6e2ef": { + "balance": "0x61093d7c2c6d380000" + }, + "8308ed0af7f8a3c1751fafc877b5a42af7d35882": { + "balance": "0x3635c9adc5dea00000" + }, + "831c44b3084047184b2ad218680640903750c45d": { + "balance": "0x6acb3df27e1f880000" + }, + "83210583c16a4e1e1dac84ebd37e3d0f7c57eba4": { + "balance": "0x6c6b935b8bbd400000" + }, + "832c54176bdf43d2c9bcd7b808b89556b89cbf31": { + "balance": "0xad78ebc5ac6200000" + }, + "833316985d47742bfed410604a91953c05fb12b0": { + "balance": "0x6c6b935b8bbd400000" + }, + "8334764b7b397a4e578f50364d60ce44899bff94": { + "balance": "0x503b203e9fba20000" + }, + "833b6a8ec8da408186ac8a7d2a6dd61523e7ce84": { + "balance": "0x3635c9adc5dea000000" + }, + "833d3fae542ad5f8b50ce19bde2bec579180c88c": { + "balance": "0x12c1b6eed03d280000" + }, + "833db42c14163c7be4cab86ac593e06266d699d5": { + "balance": "0x24e40d2b6943ef900000" + }, + "83563bc364ed81a0c6da3b56ff49bbf267827a9c": { + "balance": "0x3ab91d17b20de500000" + }, + "837a645dc95c49549f899c4e8bcf875324b2f57c": { + "balance": "0x208c394af1c8880000" + }, + "838bd565f99fde48053f7917fe333cf84ad548ab": { + "balance": "0xad78ebc5ac6200000" + }, + "83908aa7478a6d1c9b9b0281148f8f9f242b9fdc": { + "balance": "0x6c6b935b8bbd400000" + }, + "8392e53776713578015bff4940cf43849d7dcba1": { + "balance": "0x84df0355d56170000" + }, + "8397a1bc47acd647418159b99cea57e1e6532d6e": { + "balance": "0x1f10fa827b550b40000" + }, + "8398e07ebcb4f75ff2116de77c1c2a99f303a4cf": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "83a3148833d9644984f7c475a7850716efb480ff": { + "balance": "0xb8507a820728200000" + }, + "83a402438e0519773d5448326bfb61f8b20cf52d": { + "balance": "0x52663ccab1e1c00000" + }, + "83a93b5ba41bf88720e415790cdc0b67b4af34c4": { + "balance": "0xad78ebc5ac6200000" + }, + "83c23d8a502124ee150f08d71dc6727410a0f901": { + "balance": "0x7331f3bfe661b180000" + }, + "83c897a84b695eebe46679f7da19d776621c2694": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "83d532d38d6dee3f60adc68b936133c7a2a1b0dd": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "83dbf8a12853b40ac61996f8bf1dc8fdbaddd329": { + "balance": "0x34957444b840e80000" + }, + "83dbfd8eda01d0de8e158b16d0935fc2380a5dc7": { + "balance": "0x2086ac351052600000" + }, + "83e48055327c28b5936fd9f4447e73bdb2dd3376": { + "balance": "0x90f534608a72880000" + }, + "83fe5a1b328bae440711beaf6aad6026eda6d220": { + "balance": "0x43c33c1937564800000" + }, + "84008a72f8036f3feba542e35078c057f32a8825": { + "balance": "0x56bc75e2d63100000" + }, + "840ec83ea93621f034e7bb3762bb8e29ded4c479": { + "balance": "0x878678326eac900000" + }, + "841145b44840c946e21dbc190264b8e0d5029369": { + "balance": "0x3f870857a3e0e3800000" + }, + "84232107932b12e03186583525ce023a703ef8d9": { + "balance": "0x6c6b935b8bbd400000" + }, + "84244fc95a6957ed7c1504e49f30b8c35eca4b79": { + "balance": "0x6c6b935b8bbd400000" + }, + "8431277d7bdd10457dc017408c8dbbbd414a8df3": { + "balance": "0x222c8eb3ff6640000" + }, + "84375afbf59b3a1d61a1be32d075e0e15a4fbca5": { + "balance": "0xad78ebc5ac6200000" + }, + "843bd3502f45f8bc4da370b323bdac3fcf5f19a6": { + "balance": "0x50039d63d11c900000" + }, + "84503334630d77f74147f68b2e086613c8f1ade9": { + "balance": "0x56bc75e2d631000000" + }, + "845203750f7148a9aa262921e86d43bf641974fd": { + "balance": "0x56bc75e2d63100000" + }, + "8461ecc4a6a45eb1a5b947fb86b88069b91fcd6f": { + "balance": "0x6c6b935b8bbd400000" + }, + "84675e9177726d45eaa46b3992a340ba7f710c95": { + "balance": "0x3635c9adc5dea00000" + }, + "84686c7bad762c54b667d59f90943cd14d117a26": { + "balance": "0x1158e460913d00000" + }, + "8489f6ad1d9a94a297789156899db64154f1dbb5": { + "balance": "0x137407c03c8c268000" + }, + "848c994a79003fe7b7c26cc63212e1fc2f9c19eb": { + "balance": "0x6c6b935b8bbd400000" + }, + "848fbd29d67cf4a013cb02a4b176ef244e9ee68d": { + "balance": "0x1172a636bbdc20000" + }, + "84949dba559a63bfc845ded06e9f2d9b7f11ef24": { + "balance": "0x6c6b935b8bbd400000" + }, + "849ab80790b28ff1ffd6ba394efc7463105c36f7": { + "balance": "0x1e02be4ae6c840000" + }, + "849b116f596301c5d8bb62e0e97a8248126e39f3": { + "balance": "0x1043561a8829300000" + }, + "84a74ceecff65cb93b2f949d773ef1ad7fb4a245": { + "balance": "0x50a9b444685c70000" + }, + "84aac7fa197ff85c30e03b7a5382b957f41f3afb": { + "balance": "0x88b23acffd9900000" + }, + "84af1b157342d54368260d17876230a534b54b0e": { + "balance": "0x35659ef93f0fc40000" + }, + "84b0ee6bb837d3a4c4c5011c3a228c0edab4634a": { + "balance": "0x1158e460913d00000" + }, + "84b4b74e6623ba9d1583e0cfbe49643f16384149": { + "balance": "0x1158e460913d00000" + }, + "84b6b6adbe2f5b3e2d682c66af1bc4905340c3ed": { + "balance": "0x2192f8d22215008000" + }, + "84b91e2e2902d05e2b591b41083bd7beb2d52c74": { + "balance": "0x215e5128b4504648000" + }, + "84bcbf22c09607ac84341d2edbc03bfb1739d744": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "84bfcef0491a0ae0694b37ceac024584f2aa0467": { + "balance": "0x6c6acc67d7b1d40000" + }, + "84cb7da0502df45cf561817bbd2362f451be02da": { + "balance": "0x487a9a304539440000" + }, + "84cc7878da605fdb019fab9b4ccfc157709cdda5": { + "balance": "0x48798513af04c90000" + }, + "84db1459bb00812ea67ecb3dc189b72187d9c501": { + "balance": "0x811b8fbda85ab8000" + }, + "84e9949680bece6841b9a7e5250d08acd87d16cd": { + "balance": "0xad78ebc5ac6200000" + }, + "84e9cf8166c36abfa49053b7a1ad4036202681ef": { + "balance": "0x6c6b935b8bbd400000" + }, + "84ec06f24700fe42414cb9897c154c88de2f6132": { + "balance": "0x487a9a304539440000" + }, + "84f522f0520eba52dd18ad21fa4b829f2b89cb97": { + "balance": "0x10c5106d5134f130000" + }, + "850b9db18ff84bf0c7da49ea3781d92090ad7e64": { + "balance": "0x8cf23f909c0fa00000" + }, + "8510ee934f0cbc900e1007eb38a21e2a5101b8b2": { + "balance": "0x5bf0ba6634f680000" + }, + "8516fcaf77c893970fcd1a958ba9a00e49044019": { + "balance": "0xaa3eb1691bce58000" + }, + "851aa91c82f42fad5dd8e8bb5ea69c8f3a5977d1": { + "balance": "0x80e561f2578798000" + }, + "851c0d62be4635d4777e8035e37e4ba8517c6132": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "851dc38adb4593729a76f33a8616dab6f5f59a77": { + "balance": "0x56bc75e2d63100000" + }, + "8532490897bbb4ce8b7f6b837e4cba848fbe9976": { + "balance": "0x56bc75e2d63100000" + }, + "853e6abaf44469c72f151d4e223819aced4e3728": { + "balance": "0x6c6b935b8bbd400000" + }, + "854691ce714f325ced55ce5928ce9ba12facd1b8": { + "balance": "0xed70b5e9c3f2f00000" + }, + "854c0c469c246b83b5d1b3eca443b39af5ee128a": { + "balance": "0x56bc75e2d631000000" + }, + "855d9aef2c39c6230d09c99ef6494989abe68785": { + "balance": "0x8ba52e6fc45e40000" + }, + "8563c49361b625e768771c96151dbfbd1c906976": { + "balance": "0x6c6b935b8bbd400000" + }, + "8566610901aace38b83244f3a9c831306a67b9dc": { + "balance": "0xb08213bcf8ffe00000" + }, + "856aa23c82d7215bec8d57f60ad75ef14fa35f44": { + "balance": "0x43c33c1937564800000" + }, + "856e5ab3f64c9ab56b009393b01664fc0324050e": { + "balance": "0x61093d7c2c6d380000" + }, + "856eb204241a87830fb229031343dc30854f581a": { + "balance": "0x3635c9adc5dea00000" + }, + "85732c065cbd64119941aed430ac59670b6c51c4": { + "balance": "0x27a57362ab0a0e8000" + }, + "8578e10212ca14ff0732a8241e37467db85632a9": { + "balance": "0x14542ba12a337c00000" + }, + "8579dadf1a395a3471e20b6f763d9a0ff19a3f6f": { + "balance": "0xd8d726b7177a800000" + }, + "857f100b1a5930225efc7e9020d78327b41c02cb": { + "balance": "0x6c6b935b8bbd400000" + }, + "85946d56a4d371a93368539690b60ec825107454": { + "balance": "0x5dc892aa1131c80000" + }, + "8599cbd5a6a9dcd4b966be387d69775da5e33c6f": { + "balance": "0xc51f1b1d52622900000" + }, + "859c600cf13d1d0273d5d1da3cd789e495899f27": { + "balance": "0x90f534608a72880000" + }, + "85a2f6ea94d05e8c1d9ae2f4910338a358e98ded": { + "balance": "0x6c6b935b8bbd400000" + }, + "85b16f0b8b34dff3804f69e2168a4f7b24d1042b": { + "balance": "0x112f423c7646d40000" + }, + "85b2998d0c73302cb2ba13f489313301e053be15": { + "balance": "0x21e19e0c9bab2400000" + }, + "85bb51bc3bfe9a1b2a2f6b1cda95bca8b38c8d5e": { + "balance": "0x11712da04ba1ef0000" + }, + "85c8f3cc7a354feac99a5e7bfe7cdfa351cfe355": { + "balance": "0x15af1d78b58c400000" + }, + "85ca1e727e9d1a87991cc2c41840ebb9edf21d1b": { + "balance": "0xb98bc829a6f90000" + }, + "85ca8bc6da2803d0725f5e1a456c89f9bc774e2f": { + "balance": "0x2086ac351052600000" + }, + "85d0d88754ac84b8b21ba93dd2bfec72626faba8": { + "balance": "0x3635c9adc5dea00000" + }, + "85eb256b51c819d60ea61a82d12c9358d59c1cae": { + "balance": "0x18efc84ad0c7b00000" + }, + "85f0e7c1e3aff805a627a2aaf2cff6b4c0dbe9cb": { + "balance": "0x1158e460913d00000" + }, + "86026cad3fe4ea1ce7fca260d3d45eb09ea6a364": { + "balance": "0xad78ebc5ac6200000" + }, + "860f5ffc10de767ded807f71e861d647dfd219b1": { + "balance": "0x21e19e0c9bab2400000" + }, + "86153063a1ae7f02f1a88136d4d69c7c5e3e4327": { + "balance": "0x3635c9adc5dea00000" + }, + "86245f596691093ece3f3d3ca2263eace81941d9": { + "balance": "0xa31062beeed700000" + }, + "862569211e8c6327b5415e3a67e5738b15baaf6e": { + "balance": "0x796e3ea3f8ab00000" + }, + "86297d730fe0f7a9ee24e08fb1087b31adb306a7": { + "balance": "0x6c6b935b8bbd400000" + }, + "8644cc281be332ccced36da483fb2a0746d9ba2e": { + "balance": "0x15af1d78b58c400000" + }, + "86499a1228ff2d7ee307759364506f8e8c8307a5": { + "balance": "0x6acb3df27e1f880000" + }, + "864bec5069f855a4fd5892a6c4491db07c88ff7c": { + "balance": "0x3635c9adc5dea00000" + }, + "86570ab259c9b1c32c9729202f77f590c07dd612": { + "balance": "0xad78ebc5ac6200000" + }, + "8663a241a0a89e70e182c845e2105c8ad7264bcf": { + "balance": "0x323b13d8398f3238000" + }, + "8667fa1155fed732cfb8dca5a0d765ce0d0705ed": { + "balance": "0x46ec965c393b10000" + }, + "8668af868a1e98885f937f2615ded6751804eb2d": { + "balance": "0x1158e460913d00000" + }, + "86740a46648e845a5d96461b18091ff57be8a16f": { + "balance": "0x14c0973485bf39400000" + }, + "867eba56748a5904350d2ca2a5ce9ca00b670a9b": { + "balance": "0x43c33c1937564800000" + }, + "86806474c358047d9406e6a07f40945bc8328e67": { + "balance": "0x1752eb0f7013d100000" + }, + "86883d54cd3915e549095530f9ab1805e8c5432d": { + "balance": "0xd8d726b7177a800000" + }, + "868c23be873466d4c74c220a19b245d1787e807f": { + "balance": "0x4a13bbbd92c88e8000" + }, + "86924fb211aad23cf5ce600e0aae806396444087": { + "balance": "0x21e19e0c9bab2400000" + }, + "8693e9b8be94425eef7969bc69f9d42f7cad671e": { + "balance": "0x3637096c4bcc690000" + }, + "869f1aa30e4455beb1822091de5cadec79a8f946": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "86a1eadeeb30461345d9ef6bd05216fa247c0d0c": { + "balance": "0x6c6b935b8bbd400000" + }, + "86a5f8259ed5b09e188ce346ee92d34aa5dd93fa": { + "balance": "0xad78ebc5ac6200000" + }, + "86b7bd563ceab686f96244f9ddc02ad7b0b14bc2": { + "balance": "0x21e19e0c9bab2400000" + }, + "86c28b5678af37d727ec05e4447790f15f71f2ea": { + "balance": "0xad78ebc5ac6200000" + }, + "86c4ce06d9ac185bb148d96f7b7abe73f441006d": { + "balance": "0x21e19e0c9bab2400000" + }, + "86c8d0d982b539f48f9830f9891f9d607a942659": { + "balance": "0x2ced37761824fb00000" + }, + "86c934e38e53be3b33f274d0539cfca159a4d0d1": { + "balance": "0x34957444b840e80000" + }, + "86ca0145957e6b0dfe36875fbe7a0dec55e17a28": { + "balance": "0x21e19e0c9bab2400000" + }, + "86caafacf32aa0317c032ac36babed974791dc03": { + "balance": "0x878678326eac9000000" + }, + "86cdb7e51ac44772be3690f61d0e59766e8bfc18": { + "balance": "0xd8d726b7177a800000" + }, + "86df73bd377f2c09de63c45d67f283eaefa0f4ab": { + "balance": "0x3635c9adc5dea00000" + }, + "86e3fe86e93da486b14266eadf056cbfa4d91443": { + "balance": "0x6c6b935b8bbd400000" + }, + "86e8670e27598ea09c3899ab7711d3b9fe901c17": { + "balance": "0xad78ebc5ac6200000" + }, + "86ef6426211949cc37f4c75e7850369d0cf5f479": { + "balance": "0x2d65f32ea045af60000" + }, + "86f05d19063e9369c6004eb3f123943a7cff4eab": { + "balance": "0x6c6acc67d7b1d40000" + }, + "86f23e9c0aafc78b9c404dcd60339a925bffa266": { + "balance": "0x15af1d78b58c400000" + }, + "86f4f40ad984fbb80933ae626e0e42f9333fdd41": { + "balance": "0x3635c9adc5dea00000" + }, + "86f95c5b11a293940e35c0b898d8b75f08aab06d": { + "balance": "0x644e3e875fccf740000" + }, + "86fff220e59305c09f483860d6f94e96fbe32f57": { + "balance": "0x2535b6ab4c0420000" + }, + "870796abc0db84af82da52a0ed68734de7e636f5": { + "balance": "0x1043561a8829300000" + }, + "870f15e5df8b0eabd02569537a8ef93b56785c42": { + "balance": "0x150894e849b3900000" + }, + "87183160d172d2e084d327b86bcb7c1d8e6784ef": { + "balance": "0xd8d8583fa2d52f0000" + }, + "871b8a8b51dea1989a5921f13ec1a955a515ad47": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "8725e8c753b3acbfdca55f3c62dfe1a59454968a": { + "balance": "0x3637096c4bcc690000" + }, + "8737dae671823a8d5917e0157ace9c43468d946b": { + "balance": "0x6c6acc67d7b1d40000" + }, + "873b7f786d3c99ff012c4a7cae2677270240b9c5": { + "balance": "0x5dc892aa1131c80000" + }, + "873c6f70efb6b1d0f2bbc57eebcd70617c6ce662": { + "balance": "0x36f0d5275d09570000" + }, + "873e49135c3391991060290aa7f6ccb8f85a78db": { + "balance": "0x1158e460913d00000" + }, + "875061ee12e820041a01942cb0e65bb427b00060": { + "balance": "0x97c9ce4cf6d5c00000" + }, + "87584a3f613bd4fac74c1e780b86d6caeb890cb2": { + "balance": "0x5c283d410394100000" + }, + "8764d02722000996ecd475b433298e9f540b05bf": { + "balance": "0xad78ebc5ac6200000" + }, + "876c3f218b4776df3ca9dbfb270de152d94ed252": { + "balance": "0x56bc75e2d63100000" + }, + "8775a610c502b9f1e6ad4cdadb8ce29bff75f6e4": { + "balance": "0x2086ac351052600000" + }, + "87764e3677eef604cbc59aed24abdc566b09fc25": { + "balance": "0xa2a15d09519be00000" + }, + "8787d12677a5ec291e57e31ffbfad105c3324b87": { + "balance": "0x2a24eb53208f3128000" + }, + "8794bf47d54540ece5c72237a1ffb511ddb74762": { + "balance": "0x6c6b935b8bbd400000" + }, + "87a53ea39f59a35bada8352521645594a1a714cb": { + "balance": "0x678a932062e4180000" + }, + "87a7c508ef71582dd9a54372f89cb01f252fb180": { + "balance": "0xad78ebc5ac6200000" + }, + "87af25d3f6f8eea15313d5fe4557e810c524c083": { + "balance": "0x42bf06b78ed3b500000" + }, + "87b10f9c280098179a2b76e9ce90be61fc844d0d": { + "balance": "0x487a9a304539440000" + }, + "87bf7cd5d8a929e1c785f9e5449106ac232463c9": { + "balance": "0x437b11fcc45640000" + }, + "87c498170934b8233d1ad1e769317d5c475f2f40": { + "balance": "0x3708baed3d68900000" + }, + "87cf36ad03c9eae9053abb5242de9117bb0f2a0b": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "87d7ac0653ccc67aa9c3469eef4352193f7dbb86": { + "balance": "0x2a5a058fc295ed000000" + }, + "87e3062b2321e9dfb0875ce3849c9b2e3522d50a": { + "balance": "0x21e19e0c9bab2400000" + }, + "87e6034ecf23f8b5639d5f0ea70a22538a920423": { + "balance": "0x11c7ea162e78200000" + }, + "87ef6d8b6a7cbf9b5c8c97f67ee2adc2a73b3f77": { + "balance": "0xadd1bd23c3c480000" + }, + "87fb26c31e48644d693134205cae43b21f18614b": { + "balance": "0x4a4491bd6dcd280000" + }, + "87fc4635263944ce14a46c75fa4a821f39ce7f72": { + "balance": "0x1158e460913d00000" + }, + "87fcbe7c4193ffcb08143779c9bec83fe7fda9fc": { + "balance": "0x56f985d38644b8000" + }, + "88015d7203c5e0224aeda286ed12f1a51b789333": { + "balance": "0x10f08eda8e555098000" + }, + "88106c27d20b74b4b98ca62b232bd5c97411171f": { + "balance": "0xaadec983fcff40000" + }, + "881230047c211d2d5b00d8de4c5139de5e3227c7": { + "balance": "0x21e19e0c9bab2400000" + }, + "882aa798bf41df179f85520130f15ccdf59b5e58": { + "balance": "0x6c6b935b8bbd400000" + }, + "882bd3a2e9d74110b24961c53777f22f1f46dc5d": { + "balance": "0x2d4ca05e2b43ca80000" + }, + "882c8f81872c79fed521cb5f950d8b032322ea69": { + "balance": "0x878678326eac9000000" + }, + "882f75708386653c80171d0663bfe30b017ed0ad": { + "balance": "0x6c6b935b8bbd400000" + }, + "88344909644c7ad4930fd873ca1c0da2d434c07f": { + "balance": "0x727739fcb004d0000" + }, + "8834b2453471f324fb26be5b25166b5b5726025d": { + "balance": "0x1f0ff8f01daad40000" + }, + "883a78aeabaa50d8ddd8570bcd34265f14b19363": { + "balance": "0xd25522fda379a18000" + }, + "8845e9f90e96336bac3c616be9d88402683e004c": { + "balance": "0x6c6b935b8bbd400000" + }, + "8846928d683289a2d11df8db7a9474988ef01348": { + "balance": "0x21e19e0c9bab2400000" + }, + "884980eb4565c1048317a8f47fdbb461965be481": { + "balance": "0xd8d6119a8146050000" + }, + "884a7a39d0916e05f1c242df55607f37df8c5fda": { + "balance": "0x4f4843c157c8ca00000" + }, + "885493bda36a0432976546c1ddce71c3f4570021": { + "balance": "0xbbf510ddfcb260000" + }, + "88609e0a465b6e99fce907166d57e9da0814f5c8": { + "balance": "0x43c33c1937564800000" + }, + "886d0a9e17c9c095af2ea2358b89ec705212ee94": { + "balance": "0x18493fba64ef00000" + }, + "88797e58675ed5cc4c19980783dbd0c956085153": { + "balance": "0x6c6b935b8bbd400000" + }, + "887cac41cd706f3345f2d34ac34e01752a6e5909": { + "balance": "0x20465cee9da1370000" + }, + "88888a57bd9687cbf950aeeacf9740dcc4d1ef59": { + "balance": "0x62a992e53a0af00000" + }, + "8889448316ccf14ed86df8e2f478dc63c4338340": { + "balance": "0xd2f13f7789f00000" + }, + "888c16144933197cac26504dd76e06fd6600c789": { + "balance": "0x56bc75e2d63100000" + }, + "888e94917083d152202b53163939869d271175b4": { + "balance": "0xd8d726b7177a800000" + }, + "889087f66ff284f8b5efbd29493b706733ab1447": { + "balance": "0x215f835bc769da80000" + }, + "8895eb726226edc3f78cc6a515077b3296fdb95e": { + "balance": "0xd5967be4fc3f100000" + }, + "88975a5f1ef2528c300b83c0c607b8e87dd69315": { + "balance": "0x486cb9799191e0000" + }, + "889da40fb1b60f9ea9bd7a453e584cf7b1b4d9f7": { + "balance": "0x22b1c8c1227a00000" + }, + "889da662eb4a0a2a069d2bc24b05b4ee2e92c41b": { + "balance": "0x5a2c8c5456c9f28000" + }, + "88a122a2382c523931fb51a0ccad3beb5b7259c3": { + "balance": "0x6c6b935b8bbd400000" + }, + "88a2154430c0e41147d3c1fee3b3b006f851edbd": { + "balance": "0x36356633ebd8ea0000" + }, + "88b217ccb786a254cf4dc57f5d9ac3c455a30483": { + "balance": "0x3224f42723d4540000" + }, + "88bc43012edb0ea9f062ac437843250a39b78fbb": { + "balance": "0x43c33c1937564800000" + }, + "88c2516a7cdb09a6276d7297d30f5a4db1e84b86": { + "balance": "0xd8d726b7177a800000" + }, + "88c361640d6b69373b081ce0c433bd590287d5ec": { + "balance": "0xa968163f0a57b400000" + }, + "88d541c840ce43cefbaf6d19af6b9859b573c145": { + "balance": "0x93739534d28680000" + }, + "88de13b09931877c910d593165c364c8a1641bd3": { + "balance": "0xa2a15d09519be00000" + }, + "88dec5bd3f4eba2d18b8aacefa7b721548c319ba": { + "balance": "0x4a4491bd6dcd280000" + }, + "88e6f9b247f988f6c0fc14c56f1de53ec69d43cc": { + "balance": "0x56bc75e2d63100000" + }, + "88ee7f0efc8f778c6b687ec32be9e7d6f020b674": { + "balance": "0x6c6b935b8bbd400000" + }, + "88f1045f19f2d3191816b1df18bb6e1435ad1b38": { + "balance": "0xd02ab486cedc00000" + }, + "89009e3c6488bd5e570d1da34eabe28ed024de1b": { + "balance": "0x43c33c1937564800000" + }, + "89054430dcdc28ac15fa635ef87c105e602bf70c": { + "balance": "0x5dacd13ca9e300000" + }, + "8908760cd39b9c1e8184e6a752ee888e3f0b7045": { + "balance": "0x14542ba12a337c00000" + }, + "890fe11f3c24db8732d6c2e772e2297c7e65f139": { + "balance": "0xd5627137da8b5900000" + }, + "8914a680a5aec5226d4baaec2e5552b44dd7c874": { + "balance": "0x56cd55fc64dfe0000" + }, + "891cb8238c88e93a1bcf61db49bd82b47a7f4f84": { + "balance": "0x914878a8c05ee00000" + }, + "8925da4549e15155e57a628522cea9dddf627d81": { + "balance": "0x3636c25e66ece70000" + }, + "893017ff1adad499aa065401b4236ce6e92b625a": { + "balance": "0x6c6acc67d7b1d40000" + }, + "8933491760c8f0b4df8caac78ed835caee21046d": { + "balance": "0x43c33c1937564800000" + }, + "893608751d68d046e85802926673cdf2f57f7cb8": { + "balance": "0x11164759ffb320000" + }, + "8938d1b4daee55a54d738cf17e4477f6794e46f7": { + "balance": "0xfc936392801c0000" + }, + "893a6c2eb8b40ab096b4f67e74a897b840746e86": { + "balance": "0x5dc892aa1131c80000" + }, + "893cdddf5377f3c751bf2e541120045a47cba101": { + "balance": "0x56bc75e2d63100000" + }, + "895613236f3584216ad75c5d3e07e3fa6863a778": { + "balance": "0x6c6b935b8bbd400000" + }, + "8957727e72cf629020f4e05edf799aa7458062d0": { + "balance": "0x77432217e683600000" + }, + "895d694e880b13ccd0848a86c5ce411f88476bbf": { + "balance": "0xad6eedd17cf3b8000" + }, + "895ec5545644e0b78330fffab8ddeac9e833156c": { + "balance": "0x2086ac351052600000" + }, + "896009526a2c7b0c09a6f63a80bdf29d9c87de9c": { + "balance": "0xbbb86b8223edeb0000" + }, + "8967d7b9bdb7b4aed22e65a15dc803cb7a213f10": { + "balance": "0x15af1d78b58c400000" + }, + "896e335ca47af57962fa0f4dbf3e45e688cba584": { + "balance": "0x4a2fc0ab6052120000" + }, + "8973aefd5efaee96095d9e288f6a046c97374b43": { + "balance": "0x7a4c4a0f332140000" + }, + "898c72dd736558ef9e4be9fdc34fef54d7fc7e08": { + "balance": "0x3635c9adc5dea00000" + }, + "899b3c249f0c4b81df75d212004d3d6d952fd223": { + "balance": "0x6c6b935b8bbd400000" + }, + "89ab13ee266d779c35e8bb04cd8a90cc2103a95b": { + "balance": "0xcb49b44ba602d800000" + }, + "89c433d601fad714da6369308fd26c1dc9942bbf": { + "balance": "0x6c6b935b8bbd400000" + }, + "89d75b8e0831e46f80bc174188184e006fde0eae": { + "balance": "0x3635c9adc5dea00000" + }, + "89e3b59a15864737d493c1d23cc53dbf8dcb1362": { + "balance": "0xd8d726b7177a800000" + }, + "89fc8e4d386b0d0bb4a707edf3bd560df1ad8f4e": { + "balance": "0xa030dcebbd2f4c0000" + }, + "89fee30d1728d96cecc1dab3da2e771afbcfaa41": { + "balance": "0x6c6acc67d7b1d40000" + }, + "8a1cc5ac111c49bfcfd848f37dd768aa65c88802": { + "balance": "0x21e19e0c9bab2400000" + }, + "8a20e5b5cee7cd1f5515bace3bf4f77ffde5cc07": { + "balance": "0x4563918244f400000" + }, + "8a217db38bc35f215fd92906be42436fe7e6ed19": { + "balance": "0x14542ba12a337c00000" + }, + "8a243a0a9fea49b839547745ff2d11af3f4b0522": { + "balance": "0x35659ef93f0fc40000" + }, + "8a247d186510809f71cffc4559471c3910858121": { + "balance": "0x61093d7c2c6d380000" + }, + "8a3470282d5e2a2aefd7a75094c822c4f5aeef8a": { + "balance": "0xd28bc606478a58000" + }, + "8a36869ad478997cbf6d8924d20a3c8018e9855b": { + "balance": "0x1158e460913d00000" + }, + "8a4314fb61cd938fc33e15e816b113f2ac89a7fb": { + "balance": "0x17764e7aed65100000" + }, + "8a4f4a7f52a355ba105fca2072d3065fc8f7944b": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "8a5831282ce14a657a730dc18826f7f9b99db968": { + "balance": "0xeabe8a5b41c1360000" + }, + "8a5fb75793d043f1bcd43885e037bd30a528c927": { + "balance": "0x13536e6d2e9ac20000" + }, + "8a66abbc2d30ce21a833b0db8e561d5105e0a72c": { + "balance": "0x25f1de5c76acdf0000" + }, + "8a746c5d67064711bfca685b95a4fe291a27028e": { + "balance": "0x22b1c8c1227a00000" + }, + "8a780ab87a9145fe10ed60fa476a740af4cab1d2": { + "balance": "0x121b2e5e6464780000" + }, + "8a7a06be199a3a58019d846ac9cbd4d95dd757de": { + "balance": "0xa2a423944256f40000" + }, + "8a810114b2025db9fbb50099a6e0cb9e2efa6bdc": { + "balance": "0x678a932062e4180000" + }, + "8a86e4a51c013b1fb4c76bcf30667c78d52eedef": { + "balance": "0x6c6b935b8bbd400000" + }, + "8a9eca9c5aba8e139f8003edf1163afb70aa3aa9": { + "balance": "0x23c757072b8dd00000" + }, + "8ab839aeaf2ad37cb78bacbbb633bcc5c099dc46": { + "balance": "0x6c6b935b8bbd400000" + }, + "8ac89bd9b8301e6b0677fa25fcf0f58f0cc7b611": { + "balance": "0x1158e460913d00000" + }, + "8adc53ef8c18ed3051785d88e996f3e4b20ecd51": { + "balance": "0x8e4d316827686400000" + }, + "8ae6f80b70e1f23c91fbd5a966b0e499d95df832": { + "balance": "0xaadec983fcff40000" + }, + "8ae9ef8c8a8adfa6ab798ab2cdc405082a1bbb70": { + "balance": "0x6c6b935b8bbd400000" + }, + "8af626a5f327d7506589eeb7010ff9c9446020d2": { + "balance": "0x4be4e7267b6ae00000" + }, + "8b01da34d470c1d115acf4d8113c4dd8a8c338e4": { + "balance": "0x5572dcefab697900000" + }, + "8b07d050754dc9ba230db01c310afdb5395aa1b3": { + "balance": "0x666b06e62a6200000" + }, + "8b20ad3b94656dbdc0dd21a393d8a7d9e02138cb": { + "balance": "0xa2a15d09519be00000" + }, + "8b27392206b958cd375d7ef8af2cf8ef0598c0bc": { + "balance": "0x3635c9adc5dea00000" + }, + "8b30c04098d7a7e6420c357ea7bfa49bac9a8a18": { + "balance": "0x1b1b113f91fb0140000" + }, + "8b338411f26ccf37658cc75521d77629099e467d": { + "balance": "0x6c6b935b8bbd400000" + }, + "8b36224c7356e751f0c066c35e3b44860364bfc2": { + "balance": "0x3627bac7a3d9278000" + }, + "8b3696f3c60de32432a2e4c395ef0303b7e81e75": { + "balance": "0x65a4da25d3016c00000" + }, + "8b393fb0813ee101db1e14ecc7d322c72b8c0473": { + "balance": "0x18b26a313e8ae90000" + }, + "8b48e19d39dd35b66e6e1bb6b9c657cb2cf59d04": { + "balance": "0x3c755ac9c024a018000" + }, + "8b505e2871f7deb7a63895208e8227dcaa1bff05": { + "balance": "0xcf68efc308d79bc0000" + }, + "8b57b2bc83cc8d4de331204e893f2f3b1db1079a": { + "balance": "0x22b1c8c1227a00000" + }, + "8b5c914b128bf1695c088923fa467e7911f351fa": { + "balance": "0x556f64c1fe7fa0000" + }, + "8b5f29cc2faa262cdef30ef554f50eb488146eac": { + "balance": "0x13b68705c9720810000" + }, + "8b7056f6abf3b118d026e944d5c073433ca451d7": { + "balance": "0x3635c6204739d98000" + }, + "8b714522fa2839620470edcf0c4401b713663df1": { + "balance": "0xad78ebc5ac6200000" + }, + "8b74a7cb1bb8c58fce267466a30358adaf527f61": { + "balance": "0x2e257784e25b4500000" + }, + "8b7e9f6f05f7e36476a16e3e7100c9031cf404af": { + "balance": "0x3635c9adc5dea00000" + }, + "8b81156e698639943c01a75272ad3d35851ab282": { + "balance": "0x12b3165f65d3e50000" + }, + "8b9577920053b1a00189304d888010d9ef2cb4bf": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "8b9841862e77fbbe919470935583a93cf027e450": { + "balance": "0x6c6c5334427f1f0000" + }, + "8b997dbc078ad02961355da0a159f2927ed43d64": { + "balance": "0xaadec983fcff40000" + }, + "8b9fda7d981fe9d64287f85c94d83f9074849fcc": { + "balance": "0x2f6f10780d22cc00000" + }, + "8bb0212f3295e029cab1d961b04133a1809e7b91": { + "balance": "0x6c6b935b8bbd400000" + }, + "8bbeacfc29cfe93402db3c41d99ab759662e73ec": { + "balance": "0x6c6b935b8bbd400000" + }, + "8bc1ff8714828bf286ff7e8a7709106548ed1b18": { + "balance": "0x21e19e0c9bab2400000" + }, + "8bd0b65a50ef5cef84fec420be7b89ed1470ceb9": { + "balance": "0x28a77936e92c81c0000" + }, + "8bd6b1c6d74d010d1008dba6ef835d4430b35c32": { + "balance": "0x2b5e3af16b1880000" + }, + "8bd8d4c4e943f6c8073921dc17e3e8d7a0761627": { + "balance": "0x9f04219d8d34950000" + }, + "8bdfda6c215720eda2136f91052321af4e936c1f": { + "balance": "0x3635e619bb04d40000" + }, + "8bea40379347a5c891d59a6363315640f5a7e07a": { + "balance": "0x6c6b76ef96970c0000" + }, + "8bf02bd748690e1fd1c76d270833048b66b25fd3": { + "balance": "0x27fade568eba9600000" + }, + "8bf297f8f453523ed66a1acb7676856337b93bf0": { + "balance": "0xd8d726b7177a800000" + }, + "8bf373d076814cbc57e1c6d16a82c5be13c73d37": { + "balance": "0xad78ebc5ac6200000" + }, + "8c1023fde1574db8bb54f1739670157ca47da652": { + "balance": "0x179cf9ac3a1b1770000" + }, + "8c1fbe5f0aea359c5aa1fa08c8895412ca8e05a6": { + "balance": "0x3635c9adc5dea00000" + }, + "8c22426055b76f11f0a2de1a7f819a619685fe60": { + "balance": "0x6b56051582a9700000" + }, + "8c2b7d8b608d28b77f5caa9cd645242a823e4cd9": { + "balance": "0x62a992e53a0af00000" + }, + "8c2fbeee8eacc5c5d77c16abd462ee9c8145f34b": { + "balance": "0x692ae8897081d00000" + }, + "8c3a9ee71f729f236cba3867b4d79d8ceee25dbc": { + "balance": "0x56bc75e2d63100000" + }, + "8c50aa2a9212bcde56418ae261f0b35e7a9dbb82": { + "balance": "0x15af1d78b58c400000" + }, + "8c54c7f8b9896e75d7d5f5c760258699957142ad": { + "balance": "0x22b1c8c1227a00000" + }, + "8c5d16ed65e3ed7e8b96ca972bc86173e3500b03": { + "balance": "0x6c6b935b8bbd400000" + }, + "8c6aa882ee322ca848578c06cb0fa911d3608305": { + "balance": "0x2086ac351052600000" + }, + "8c6ae7a05a1de57582ae2768204276c0ff47ed03": { + "balance": "0x2c0bb3dd30c4e2000000" + }, + "8c6f9f4e5b7ae276bf58497bd7bf2a7d25245f64": { + "balance": "0x93fe5c57d710680000" + }, + "8c75956e8fed50f5a7dd7cfd27da200f6746aea6": { + "balance": "0x3635c9adc5dea00000" + }, + "8c7cb4e48b25031aa1c4f92925d631a8c3edc761": { + "balance": "0x3635c9adc5dea00000" + }, + "8c7fa5cae82fedb69ab189d3ff27ae209293fb93": { + "balance": "0x15af880d8cdb830000" + }, + "8c81410ea8354cc5c65c41be8bd5de733c0b111d": { + "balance": "0x205b4dfa1ee74780000" + }, + "8c83d424a3cf24d51f01923dd54a18d6b6fede7b": { + "balance": "0xd8d726b7177a800000" + }, + "8c900a8236b08c2b65405d39d75f20062a7561fd": { + "balance": "0x58e7926ee858a00000" + }, + "8c93c3c6db9d37717de165c3a1b4fe51952c08de": { + "balance": "0x15af1d78b58c400000" + }, + "8c999591fd72ef7111efca7a9e97a2356b3b000a": { + "balance": "0xdd64e2aa0a67500000" + }, + "8ca6989746b06e32e2487461b1ce996a273acfd7": { + "balance": "0x1158e460913d00000" + }, + "8cb3aa3fcd212854d7578fcc30fdede6742a312a": { + "balance": "0x1043561a8829300000" + }, + "8cc0d7c016fa7aa950114aa1db094882eda274ea": { + "balance": "0x8a9aba557e36c0000" + }, + "8cc652dd13e7fe14dabbb36d5d320db9ffee8a54": { + "balance": "0x61093d7c2c6d380000" + }, + "8ccabf25077f3aa41545344d53be1b2b9c339000": { + "balance": "0x5be866c562c5440000" + }, + "8ccf3aa21ab742576ad8c422f71bb188591dea8a": { + "balance": "0x3635c9adc5dea00000" + }, + "8cd0cd22e620eda79c0461e896c93c44837e2968": { + "balance": "0x6c6b935b8bbd400000" + }, + "8cde8b732e6023878eb23ed16229124b5f7afbec": { + "balance": "0x73f75d1a085ba0000" + }, + "8ce22f9fa372449a420610b47ae0c8d565481232": { + "balance": "0x6c6b935b8bbd400000" + }, + "8ce4949d8a16542d423c17984e6739fa72ceb177": { + "balance": "0x54b405926f4a63d8000" + }, + "8ce5e3b5f591d5eca38abf228f2e3c35134bdac0": { + "balance": "0x7dc35b84897c380000" + }, + "8cee38d6595788a56e3fb94634b3ffe1fbdb26d6": { + "balance": "0x43c33c1937564800000" + }, + "8ceea15eec3bdad8023f98ecf25b2b8fef27db29": { + "balance": "0x6c6b935b8bbd400000" + }, + "8cf3546fd1cda33d58845fc8fcfecabca7c5642a": { + "balance": "0x1f1e39932cb3278000" + }, + "8cf6da0204dbc4860b46ad973fc111008d9e0c46": { + "balance": "0xad78ebc5ac6200000" + }, + "8cfedef198db0a9143f09129b3fd64dcbb9b4956": { + "balance": "0x6c6b935b8bbd400000" + }, + "8d04a5ebfb5db409db0617c9fa5631c192861f4a": { + "balance": "0x34957444b840e80000" + }, + "8d06e464245cad614939e0af0845e6d730e20374": { + "balance": "0xadc8a28f3d87d8000" + }, + "8d07d42d831c2d7c838aa1872b3ad5d277176823": { + "balance": "0x12ee1f9ddbee680000" + }, + "8d0b9ea53fd263415eac11391f7ce9123c447062": { + "balance": "0x6c6b935b8bbd400000" + }, + "8d1794da509cb297053661a14aa892333231e3c1": { + "balance": "0xad201a6794ff80000" + }, + "8d1abd897dacd4312e18080c88fb9647eab44052": { + "balance": "0xbb59a27953c600000" + }, + "8d2303341e1e1eb5e8189bde03f73a60a2a54861": { + "balance": "0x56bc75e2d63100000" + }, + "8d238e036596987643d73173c37b0ad06055b96c": { + "balance": "0x7148bf0a2af0660000" + }, + "8d2e31b08803b2c5f13d398ecad88528209f6057": { + "balance": "0x21db8bbcad11e840000" + }, + "8d378f0edc0bb0f0686d6a20be6a7692c4fa24b8": { + "balance": "0x56bc75e2d63100000" + }, + "8d4b603c5dd4570c34669515fdcc665890840c77": { + "balance": "0xfc936392801c0000" + }, + "8d51a4cc62011322c696fd725b9fb8f53feaaa07": { + "balance": "0x3635c9adc5dea00000" + }, + "8d544c32c07fd0842c761d53a897d6c950bb7599": { + "balance": "0xad78ebc5ac6200000" + }, + "8d5ef172bf77315ea64e85d0061986c794c6f519": { + "balance": "0xd5967be4fc3f100000" + }, + "8d616b1eee77eef6f176e0698db3c0c141b2fc8f": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "8d6170ff66978e773bb621bf72b1ba7be3a7f87e": { + "balance": "0xad78ebc5ac6200000" + }, + "8d620bde17228f6cbba74df6be87264d985cc179": { + "balance": "0x56bc75e2d63100000" + }, + "8d629c20608135491b5013f1002586a0383130e5": { + "balance": "0x4a4491bd6dcd280000" + }, + "8d6657f59711b1f803c6ebef682f915b62f92dc9": { + "balance": "0x6c6b935b8bbd400000" + }, + "8d667637e29eca05b6bfbef1f96d460eefbf9984": { + "balance": "0xd8d726b7177a800000" + }, + "8d6df209484d7b94702b03a53e56b9fb0660f6f0": { + "balance": "0x6c6b935b8bbd400000" + }, + "8d795c5f4a5689ad62da961671f028065286d554": { + "balance": "0x6f05b59d3b20000000" + }, + "8d7f3e61299c2db9b9c0487cf627519ed00a9123": { + "balance": "0x5e74a8505e80a00000" + }, + "8d89170b92b2be2c08d57c48a7b190a2f146720f": { + "balance": "0x42bf06b78ed3b500000" + }, + "8d93dac785f88f1a84bf927d53652b45a154ccdd": { + "balance": "0x890b0c2e14fb80000" + }, + "8d9952d0bb4ebfa0efd01a3aa9e8e87f0525742e": { + "balance": "0xbb9125542263900000" + }, + "8d9a0c70d2262042df1017d6c303132024772712": { + "balance": "0x6c6b935b8bbd400000" + }, + "8d9ed7f4553058c26f7836a3802d3064eb1b363d": { + "balance": "0x4e1003b28d9280000" + }, + "8da1178f55d97772bb1d24111a404a4f8715b95d": { + "balance": "0x2f9ac3f6de00808000" + }, + "8da1d359ba6cb4bcc57d7a437720d55db2f01c72": { + "balance": "0x4563918244f400000" + }, + "8dab948ae81da301d972e3f617a912e5a753712e": { + "balance": "0x15af1d78b58c400000" + }, + "8daddf52efbd74da95b969a5476f4fbbb563bfd2": { + "balance": "0x2d43f3ebfafb2c0000" + }, + "8db185fe1b70a94a6a080e7e23a8bedc4acbf34b": { + "balance": "0x4be4e7267b6ae00000" + }, + "8db58e406e202df9bc703c480bd8ed248d52a032": { + "balance": "0x6c6b935b8bbd400000" + }, + "8dbc3e6cb433e194f40f82b40faadb1f8b856116": { + "balance": "0x678a932062e4180000" + }, + "8dc1d5111d09af25fdfcac455c7cec283e6d6775": { + "balance": "0x6c6b935b8bbd400000" + }, + "8dd484ff8a307364eb66c525a571aac701c5c318": { + "balance": "0xd8d726b7177a800000" + }, + "8dd6a9bae57f518549ada677466fea8ab04fd9b4": { + "balance": "0xd8d726b7177a800000" + }, + "8dde3cb8118568ef4503fe998ccdf536bf19a098": { + "balance": "0xd8d726b7177a800000" + }, + "8dde60eb08a099d7daa356daaab2470d7b025a6b": { + "balance": "0xaadec983fcff40000" + }, + "8df339214b6ad1b24663ce716034749d6ef838d9": { + "balance": "0x2544faa778090e00000" + }, + "8df53d96191471e059de51c718b983e4a51d2afd": { + "balance": "0x6c6b935b8bbd4000000" + }, + "8dfbafbc0e5b5c86cd1ad697feea04f43188de96": { + "balance": "0x15252b7f5fa0de0000" + }, + "8e073bad25e42218615f4a0e6b2ea8f8de2230c0": { + "balance": "0x823d629d026bfa0000" + }, + "8e0fee38685a94aabcd7ce857b6b1409824f75b8": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "8e23facd12c765c36ab81a6dd34d8aa9e68918ae": { + "balance": "0x911e4868dba9b0000" + }, + "8e2f9034c9254719c38e50c9aa64305ed696df1e": { + "balance": "0x1004e2e45fb7ee00000" + }, + "8e3240b0810e1cf407a500804740cf8d616432a4": { + "balance": "0x22f6655ef0b388000" + }, + "8e486a0442d171c8605be348fee57eb5085eff0d": { + "balance": "0xd8d726b7177a800000" + }, + "8e6156336be2cdbe32140df08a2ba55fd0a58463": { + "balance": "0x4099e1d6357180000" + }, + "8e670815fb67aeaea57b86534edc00cdf564fee5": { + "balance": "0xb2e4b323d9c5100000" + }, + "8e6d7485cbe990acc1ad0ee9e8ccf39c0c93440e": { + "balance": "0x33c5499031720c0000" + }, + "8e74e0d1b77ebc823aca03f119854cb12027f6d7": { + "balance": "0x16b352da5e0ed3000000" + }, + "8e78f351457d016f4ad2755ec7424e5c21ba6d51": { + "balance": "0x7ea28327577080000" + }, + "8e7936d592008fdc7aa04edeeb755ab513dbb89d": { + "balance": "0x1158e460913d00000" + }, + "8e7fd23848f4db07906a7d10c04b21803bb08227": { + "balance": "0x3635c9adc5dea00000" + }, + "8e92aba38e72a098170b92959246537a2e5556c0": { + "balance": "0xe7eeba3410b740000" + }, + "8e98766524b0cf2747c50dd43b9567594d9731de": { + "balance": "0x6c44b7c26182280000" + }, + "8e9b35ad4a0a86f758446fffde34269d940ceacd": { + "balance": "0xd8d726b7177a800000" + }, + "8e9c08f738661f9676236eff82ba6261dd3f4822": { + "balance": "0x56bc75e2d63100000" + }, + "8e9c429266df057efa78dd1d5f77fc40742ad466": { + "balance": "0x10442ed1b56c7c8000" + }, + "8ea656e71ec651bfa17c5a5759d86031cc359977": { + "balance": "0x56bc75e2d63100000" + }, + "8eae29435598ba8f1c93428cdb3e2b4d31078e00": { + "balance": "0x6c6b935b8bbd400000" + }, + "8eb1fbe4e5d3019cd7d30dae9c0d5b4c76fb6331": { + "balance": "0x6c6b935b8bbd400000" + }, + "8eb51774af206b966b8909c45aa6722748802c0c": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "8eb8c71982a00fb84275293253f8044544b66b49": { + "balance": "0x15af1d78b58c400000" + }, + "8ecbcfacbfafe9f00c3922a24e2cf0026756ca20": { + "balance": "0x131beb925ffd3200000" + }, + "8eceb2e124536c5b5ffc640ed14ff15ed9a8cb71": { + "balance": "0x6c6b935b8bbd400000" + }, + "8ed0af11ff2870da0681004afe18b013f7bd3882": { + "balance": "0xd8d726b7177a800000" + }, + "8ed143701f2f72280fd04a7b4164281979ea87c9": { + "balance": "0xc249fdd327780000" + }, + "8ed1528b447ed4297902f639c514d0944a88f8c8": { + "balance": "0xac6e77ab663a80000" + }, + "8ed4284c0f47449c15b8d9b3245de8beb6ce80bf": { + "balance": "0x2b5e3af16b18800000" + }, + "8ede7e3dc50749c6c50e2e28168478c34db81946": { + "balance": "0x43c30fb0884a96c0000" + }, + "8ee584337ddbc80f9e3498df55f0a21eacb57fb1": { + "balance": "0x1158e460913d00000" + }, + "8eebec1a62c08b05a7d1d59180af9ff0d18e3f36": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "8ef4d8a2c23c5279187b64e96f741404085385f3": { + "balance": "0x103dc1e9a9697b0000" + }, + "8ef711e43a13918f1303e81d0ea78c9eefd67eb2": { + "balance": "0xd8d726b7177a800000" + }, + "8efec058cc546157766a632775404a334aaada87": { + "balance": "0x6c5db2a4d815dc0000" + }, + "8f02bda6c36922a6be6a509be51906d393f7b99b": { + "balance": "0x37490dc12ebe7f8000" + }, + "8f0538ed71da1155e0f3bde5667ceb84318a1a87": { + "balance": "0x692ae8897081d00000" + }, + "8f067c7c1bbd57780b7b9eeb9ec0032f90d0dcf9": { + "balance": "0x43c33c1937564800000" + }, + "8f0ab894bd3f4e697dbcfb859d497a9ba195994a": { + "balance": "0x85d638b65472aa20000" + }, + "8f0af37566d152802f1ae8f928b25af9b139b448": { + "balance": "0xad78ebc5ac6200000" + }, + "8f1952eed1c548d9ee9b97d0169a07933be69f63": { + "balance": "0x3635c9adc5dea00000" + }, + "8f1fcc3c51e252b693bc5b0ec3f63529fe69281e": { + "balance": "0x14542ba12a337c00000" + }, + "8f226096c184ebb40105e08dac4d22e1c2d54d30": { + "balance": "0x109e437bd1618c0000" + }, + "8f29a14a845ad458f2d108b568d813166bcdf477": { + "balance": "0x21e19e0c9bab2400000" + }, + "8f31c7005197ec997a87e69bec48649ab94bb2a5": { + "balance": "0xd8d726b7177a800000" + }, + "8f41b1fbf54298f5d0bc2d122f4eb95da4e5cd3d": { + "balance": "0x1333832f5e335c0000" + }, + "8f47328ee03201c9d35ed2b5412b25decc859362": { + "balance": "0x6c6b935b8bbd400000" + }, + "8f473d0ab876ddaa15608621d7013e6ff714b675": { + "balance": "0x19801c83b6c7c00000" + }, + "8f4d1d41693e462cf982fd81d0aa701d3a5374c9": { + "balance": "0xd8d726b7177a800000" + }, + "8f4d1e7e4561284a34fef9673c0d34e12af4aa03": { + "balance": "0x6c6b935b8bbd400000" + }, + "8f4fb1aea7cd0f570ea5e61b40a4f4510b6264e4": { + "balance": "0xd8d726b7177a800000" + }, + "8f561b41b209f248c8a99f858788376250609cf3": { + "balance": "0x5c283d410394100000" + }, + "8f58d8348fc1dc4e0dd8343b6543c857045ee940": { + "balance": "0x2e3038df47303280000" + }, + "8f60895fbebbb5017fcbff3cdda397292bf25ba6": { + "balance": "0x174406ff9f6fd28000" + }, + "8f64b9c1246d857831643107d355b5c75fef5d4f": { + "balance": "0x6c6acc67d7b1d40000" + }, + "8f660f8b2e4c7cc2b4ac9c47ed28508d5f8f8650": { + "balance": "0x43c33c1937564800000" + }, + "8f69eafd0233cadb4059ab779c46edf2a0506e48": { + "balance": "0x60f06620a849450000" + }, + "8f717ec1552f4c440084fba1154a81dc003ebdc0": { + "balance": "0x21e19e0c9bab2400000" + }, + "8f8acb107607388479f64baaabea8ff007ada97d": { + "balance": "0x5c6f3080ad423f40000" + }, + "8f8cd26e82e7c6defd02dfad07979021cbf7150c": { + "balance": "0xa2a15d09519be00000" + }, + "8f8f37d0ad8f335d2a7101b41156b688a81a9cbe": { + "balance": "0x3cb71f51fc5580000" + }, + "8f92844f282a92999ee5b4a8d773d06b694dbd9f": { + "balance": "0x692ae8897081d00000" + }, + "8fac748f784a0fed68dba43319b42a75b4649c6e": { + "balance": "0x3154c9729d05780000" + }, + "8fd9a5c33a7d9edce0997bdf77ab306424a11ea9": { + "balance": "0x6c6b935b8bbd400000" + }, + "8feffadb387a1547fb284da9b8147f3e7c6dc6da": { + "balance": "0x2d627be45305080000" + }, + "8ff46045687723dc33e4d099a06904f1ebb584dc": { + "balance": "0x6c6b935b8bbd400000" + }, + "8ffa062122ac307418821adb9311075a3703bfa3": { + "balance": "0x3635c9adc5dea00000" + }, + "8ffe322997b8e404422d19c54aadb18f5bc8e9b7": { + "balance": "0xd5967be4fc3f100000" + }, + "900194c4b1074305d19de405b0ac78280ecaf967": { + "balance": "0x3635c9adc5dea00000" + }, + "9003d270891ba2df643da8341583193545e3e000": { + "balance": "0xd8d726b7177a800000" + }, + "90057af9aa66307ec9f033b29724d3b2f41eb6f9": { + "balance": "0x19d1d6aadb2c52e80000" + }, + "900f0b8e35b668f81ef252b13855aa5007d012e7": { + "balance": "0x170a0f5040e5040000" + }, + "9018cc1f48d2308e252ab6089fb99a7c1d569410": { + "balance": "0xad78ebc5ac6200000" + }, + "901d99b699e5c6911519cb2076b4c76330c54d22": { + "balance": "0x6c6b935b8bbd400000" + }, + "902d74a157f7d2b9a3378b1f56703730e03a1719": { + "balance": "0xd8d726b7177a800000" + }, + "903413878aea3bc1086309a3fe768b65559e8cab": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "904966cc2213b5b8cb5bd6089ef9cddbef7edfcc": { + "balance": "0x6c6b935b8bbd400000" + }, + "904caa429c619d940f8e6741826a0db692b19728": { + "balance": "0x3635c9adc5dea00000" + }, + "9052f2e4a3e3c12dd1c71bf78a4ec3043dc88b7e": { + "balance": "0xe7eeba3410b740000" + }, + "905526568ac123afc0e84aa715124febe83dc87c": { + "balance": "0xf8699329677e0000" + }, + "9092918707c621fdbd1d90fb80eb787fd26f7350": { + "balance": "0x855b5ba65c84f00000" + }, + "909b5e763a39dcc795223d73a1dbb7d94ca75ac8": { + "balance": "0x6c6b935b8bbd400000" + }, + "90acced7e48c08c6b934646dfa0adf29dc94074f": { + "balance": "0x30b4b157bbd490000" + }, + "90b1f370f9c1eb0be0fb8e2b8ad96a416371dd8a": { + "balance": "0x30ca024f987b900000" + }, + "90b62f131a5f29b45571513ee7a74a8f0b232202": { + "balance": "0x890b0c2e14fb80000" + }, + "90bd62a050845261fa4a9f7cf241ea630b05efb8": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "90c41eba008e20cbe927f346603fc88698125969": { + "balance": "0x246ddf97976680000" + }, + "90d2809ae1d1ffd8f63eda01de49dd552df3d1bc": { + "balance": "0xd8bb6549b02bb80000" + }, + "90dc09f717fc2a5b69fd60ba08ebf40bf4e8246c": { + "balance": "0xd8d8583fa2d52f0000" + }, + "90e300ac71451e401f887f6e7728851647a80e07": { + "balance": "0x15af1d78b58c400000" + }, + "90e35aabb2deef408bb9b5acef714457dfde6272": { + "balance": "0x56cd55fc64dfe0000" + }, + "90e7070f4d033fe6910c9efe5a278e1fc6234def": { + "balance": "0x571380819b3040000" + }, + "90e93e4dc17121487952333614002be42356498e": { + "balance": "0x678a932062e4180000" + }, + "90e9a9a82edaa814c284d232b6e9ba90701d4952": { + "balance": "0x56be03ca3e47d8000" + }, + "90f774c9147dde90853ddc43f08f16d455178b8c": { + "balance": "0xd8d726b7177a800000" + }, + "90fc537b210658660a83baa9ac4a8402f65746a8": { + "balance": "0x65ea3db75546600000" + }, + "91050a5cffadedb4bb6eaafbc9e5013428e96c80": { + "balance": "0x5c283d410394100000" + }, + "91051764af6b808e4212c77e30a5572eaa317070": { + "balance": "0x3635c9adc5dea00000" + }, + "910b7d577a7e39aa23acf62ad7f1ef342934b968": { + "balance": "0x21e19e0c9bab2400000" + }, + "910e996543344c6815fb97cda7af4b8698765a5b": { + "balance": "0x59af69829cf640000" + }, + "911feea61fe0ed50c5b9e5a0d66071399d28bdc6": { + "balance": "0x340aad21b3b700000" + }, + "911ff233e1a211c0172c92b46cf997030582c83a": { + "balance": "0x6acb3df27e1f880000" + }, + "9120e71173e1ba19ba8f9f4fdbdcaa34e1d6bb78": { + "balance": "0x6c6b935b8bbd400000" + }, + "91211712719f2b084d3b3875a85069f466363141": { + "balance": "0x3635c9adc5dea00000" + }, + "912304118b80473d9e9fe3ee458fbe610ffda2bb": { + "balance": "0xad78ebc5ac6200000" + }, + "91546b79ecf69f936b5a561508b0d7e50cc5992f": { + "balance": "0xe7eeba3410b740000" + }, + "9156d18029350e470408f15f1aa3be9f040a67c6": { + "balance": "0x3635c9adc5dea00000" + }, + "91620f3eb304e813d28b0297556d65dc4e5de5aa": { + "balance": "0xcf152640c5c8300000" + }, + "916bf7e3c545921d3206d900c24f14127cbd5e70": { + "balance": "0x3d0ddbc7df2bb100000" + }, + "916cf17d71412805f4afc3444a0b8dd1d9339d16": { + "balance": "0xc673ce3c40160000" + }, + "917b8f9f3a8d09e9202c52c29e724196b897d35e": { + "balance": "0x8ba52e6fc45e40000" + }, + "918967918cd897dd0005e36dc6c883ef438fc8c7": { + "balance": "0x796e3ea3f8ab00000" + }, + "91898eab8c05c0222883cd4db23b7795e1a24ad7": { + "balance": "0x6c6b935b8bbd400000" + }, + "9191f94698210516cf6321a142070e20597674ed": { + "balance": "0xee9d5be6fc110000" + }, + "91a4149a2c7b1b3a67ea28aff34725e0bf8d7524": { + "balance": "0x692ae8897081d00000" + }, + "91a787bc5196f34857fe0c372f4df376aaa76613": { + "balance": "0x6c6b935b8bbd400000" + }, + "91a8baaed012ea2e63803b593d0d0c2aab4c5b0a": { + "balance": "0x5150ae84a8cdf00000" + }, + "91ac5cfe67c54aa7ebfba448666c461a3b1fe2e1": { + "balance": "0x15c93492bf9dfc0000" + }, + "91bb3f79022bf3c453f4ff256e269b15cf2c9cbd": { + "balance": "0x52585c13fe3a5c0000" + }, + "91c75e3cb4aa89f34619a164e2a47898f5674d9c": { + "balance": "0x6c6b935b8bbd400000" + }, + "91c80caa081b38351d2a0e0e00f80a34e56474c1": { + "balance": "0x3635c9adc5dea00000" + }, + "91cc46aa379f856a6640dccd5a648a7902f849d9": { + "balance": "0xad78ebc5ac6200000" + }, + "91d2a9ee1a6db20f5317cca7fbe2313895db8ef8": { + "balance": "0x1ccc3a52f306e280000" + }, + "91d66ea6288faa4b3d606c2aa45c7b6b8a252739": { + "balance": "0x6c6b935b8bbd400000" + }, + "91dbb6aaad149585be47375c5d6de5ff09191518": { + "balance": "0x43c33c1937564800000" + }, + "91e8810652e8e6161525d63bb7751dc20f676076": { + "balance": "0x274d656ac90e340000" + }, + "91f516146cda20281719978060c6be4149067c88": { + "balance": "0x6c6b935b8bbd400000" + }, + "91f624b24a1fa5a056fe571229e7379db14b9a1e": { + "balance": "0x28a8517c669b3570000" + }, + "91fe8a4c6164df8fa606995d6ba7adcaf1c893ce": { + "balance": "0x39992648a23c8a00000" + }, + "921f5261f4f612760706892625c75e7bce96b708": { + "balance": "0x6c6b935b8bbd400000" + }, + "9221c9ce01232665741096ac07235903ad1fe2fc": { + "balance": "0x6db63335522628000" + }, + "9225983860a1cb4623c72480ac16272b0c95e5f5": { + "balance": "0x6c6b935b8bbd400000" + }, + "9225d46a5a80943924a39e5b84b96da0ac450581": { + "balance": "0x878678326eac9000000" + }, + "922a20c79a1d3a26dd3829677bf1d45c8f672bb6": { + "balance": "0xd8d726b7177a800000" + }, + "92438e5203b6346ff886d7c36288aacccc78ceca": { + "balance": "0x3635c9adc5dea00000" + }, + "9243d7762d77287b12638688b9854e88a769b271": { + "balance": "0x3635c9adc5dea00000" + }, + "924bce7a853c970bb5ec7bb759baeb9c7410857b": { + "balance": "0xbe202d6a0eda0000" + }, + "924efa6db595b79313277e88319625076b580a10": { + "balance": "0x6c6b935b8bbd400000" + }, + "92558226b384626cad48e09d966bf1395ee7ea5d": { + "balance": "0x121ea68c114e510000" + }, + "926082cb7eed4b1993ad245a477267e1c33cd568": { + "balance": "0x144a74badfa4b60000" + }, + "926209b7fda54e8ddb9d9e4d3d19ebdc8e88c29f": { + "balance": "0x6c6b935b8bbd400000" + }, + "9268d62646563611dc3b832a30aa2394c64613e3": { + "balance": "0x6c6b935b8bbd400000" + }, + "92698e345378c62d8eda184d94366a144b0c105b": { + "balance": "0x4be4e7267b6ae00000" + }, + "92793ac5b37268774a7130de2bbd330405661773": { + "balance": "0x22ca3587cf4eb0000" + }, + "9279b2228cec8f7b4dda3f320e9a0466c2f585ca": { + "balance": "0x10f0cf064dd59200000" + }, + "927cb7dc187036b5427bc7e200c5ec450c1d27d4": { + "balance": "0xbb59a27953c600000" + }, + "927cc2bfda0e088d02eff70b38b08aa53cc30941": { + "balance": "0x646f60a1f986360000" + }, + "9284f96ddb47b5186ee558aa31324df5361c0f73": { + "balance": "0x3635c9adc5dea000000" + }, + "929d368eb46a2d1fbdc8ffa0607ede4ba88f59ad": { + "balance": "0x6c6b935b8bbd400000" + }, + "92a7c5a64362e9f842a23deca21035857f889800": { + "balance": "0x6c6acc67d7b1d40000" + }, + "92a898d46f19719c38126a8a3c27867ae2cee596": { + "balance": "0x6c6b935b8bbd400000" + }, + "92a971a739799f8cb48ea8475d72b2d2474172e6": { + "balance": "0xd5967be4fc3f100000" + }, + "92aae59768eddff83cfe60bb512e730a05a161d7": { + "balance": "0x5c9778410c76d18000" + }, + "92ad1b3d75fba67d54663da9fc848a8ade10fa67": { + "balance": "0x6c6b935b8bbd400000" + }, + "92ae5b7c7eb492ff1ffa16dd42ad9cad40b7f8dc": { + "balance": "0x2ee449550898e40000" + }, + "92c0f573eccf62c54810ee6ba8d1f113542b301b": { + "balance": "0xb7726f16ccb1e00000" + }, + "92c13fe0d6ce87fd50e03def9fa6400509bd7073": { + "balance": "0x22b1c8c1227a00000" + }, + "92c94c2820dfcf7156e6f13088ece7958b3676fd": { + "balance": "0x52d542804f1ce0000" + }, + "92cfd60188efdfb2f8c2e7b1698abb9526c1511f": { + "balance": "0x6c6b935b8bbd400000" + }, + "92d8ad9a4d61683b80d4a6672e84c20d62421e80": { + "balance": "0x1158e460913d00000" + }, + "92dca5e102b3b81b60f1a504634947c374a88ccb": { + "balance": "0x6c6b935b8bbd400000" + }, + "92e435340e9d253c00256389f52b067d55974e76": { + "balance": "0xe873f44133cb00000" + }, + "92e4392816e5f2ef5fb65837cec2c2325cc64922": { + "balance": "0x21e19e0c9bab2400000" + }, + "92e6581e1da1f9b846e09347333dc818e2d2ac66": { + "balance": "0xc55325ca7415e00000" + }, + "931df34d1225bcd4224e63680d5c4c09bce735a6": { + "balance": "0x3afb087b876900000" + }, + "931fe712f64207a2fd5022728843548bfb8cbb05": { + "balance": "0x6c6b935b8bbd400000" + }, + "93235f340d2863e18d2f4c52996516138d220267": { + "balance": "0x4002e44fda7d40000" + }, + "93258255b37c7f58f4b10673a932dd3afd90f4f2": { + "balance": "0x3635c9adc5dea00000" + }, + "9328d55ccb3fce531f199382339f0e576ee840a3": { + "balance": "0xd8d726b7177a800000" + }, + "9329ffdc268babde8874b366406c81445b9b2d35": { + "balance": "0x16e62f8c730ca18000" + }, + "932b9c04d40d2ac83083d94298169dae81ab2ed0": { + "balance": "0x6c6b935b8bbd400000" + }, + "933436c8472655f64c3afaaf7c4c621c83a62b38": { + "balance": "0x3635c9adc5dea00000" + }, + "933bf33f8299702b3a902642c33e0bfaea5c1ca3": { + "balance": "0xd2f13f7789f00000" + }, + "9340345ca6a3eabdb77363f2586043f29438ce0b": { + "balance": "0x1cc805da0dfff10000" + }, + "9340b5f678e45ee05eb708bb7abb6ec8f08f1b6b": { + "balance": "0x14542ba12a337c00000" + }, + "934af21b7ebfa467e2ced65aa34edd3a0ec71332": { + "balance": "0x7801f3e80cc0ff00000" + }, + "935069444a6a984de2084e46692ab99f671fc727": { + "balance": "0x1e7e4171bf4d3a00000" + }, + "93507e9e8119cbceda8ab087e7ecb071383d6981": { + "balance": "0x2f6f10780d22cc00000" + }, + "93678a3c57151aeb68efdc43ef4d36cb59a009f3": { + "balance": "0x1a12a92bc3c3e0000" + }, + "936dcf000194e3bff50ac5b4243a3ba014d661d8": { + "balance": "0x21e19e0c9bab2400000" + }, + "936f3813f5f6a13b8e4ffec83fe7f826186a71cd": { + "balance": "0x1c30731cec03200000" + }, + "9374869d4a9911ee1eaf558bc4c2b63ec63acfdd": { + "balance": "0x3635c9adc5dea00000" + }, + "937563d8a80fd5a537b0e66d20a02525d5d88660": { + "balance": "0x878678326eac900000" + }, + "9376dce2af2ec8dcda741b7e7345664681d93668": { + "balance": "0x3635c9adc5dea00000" + }, + "93868ddb2a794d02ebda2fa4807c76e3609858dc": { + "balance": "0x6dee15fc7c24a78000" + }, + "939c4313d2280edf5e071bced846063f0a975d54": { + "balance": "0x1969368974c05b000000" + }, + "93a6b3ab423010f981a7489d4aad25e2625c5741": { + "balance": "0x44680fe6a1ede4e8000" + }, + "93aa8f92ebfff991fc055e906e651ac768d32bc8": { + "balance": "0x32f51edbaaa3300000" + }, + "93b4bf3fdff6de3f4e56ba6d7799dc4b93a6548f": { + "balance": "0x10910d4cdc9f60000" + }, + "93bc7d9a4abd44c8bbb8fe8ba804c61ad8d6576c": { + "balance": "0xd8d6119a8146050000" + }, + "93c2e64e5de5589ed25006e843196ee9b1cf0b3e": { + "balance": "0x5a87e7d7f5f6580000" + }, + "93c88e2d88621e30f58a9586bed4098999eb67dd": { + "balance": "0x69b5afac750bb800000" + }, + "93e0f37ecdfb0086e3e862a97034447b1e4dec1a": { + "balance": "0x1a055690d9db80000" + }, + "93e303411afaf6c107a44101c9ac5b36e9d6538b": { + "balance": "0xdf9ddfecd0365400000" + }, + "93f18cd2526040761488c513174d1e7963768b2c": { + "balance": "0x82ffac9ad593720000" + }, + "940f715140509ffabf974546fab39022a41952d2": { + "balance": "0x4be4e7267b6ae00000" + }, + "942c6b8c955bc0d88812678a236725b32739d947": { + "balance": "0x54069233bf7f780000" + }, + "943d37864a4a537d35c8d99723cd6406ce2562e6": { + "balance": "0x6c6b935b8bbd400000" + }, + "94439ca9cc169a79d4a09cae5e67764a6f871a21": { + "balance": "0xd02ab486cedc00000" + }, + "94449c01b32a7fa55af8104f42cdd844aa8cbc40": { + "balance": "0x38111a1f4f03c100000" + }, + "9445ba5c30e98961b8602461d0385d40fbd80311": { + "balance": "0x21e19e0c9bab2400000" + }, + "944f07b96f90c5f0d7c0c580533149f3f585a078": { + "balance": "0x402f4cfee62e80000" + }, + "9454b3a8bff9709fd0e190877e6cb6c89974dbd6": { + "balance": "0x90f534608a72880000" + }, + "945d96ea573e8df7262bbfa572229b4b16016b0f": { + "balance": "0xb589ef914c1420000" + }, + "945e18769d7ee727c7013f92de24d117967ff317": { + "balance": "0x6c6b935b8bbd400000" + }, + "94612781033b57b146ee74e753c672017f5385e4": { + "balance": "0xc328093e61ee400000" + }, + "94644ad116a41ce2ca7fbec609bdef738a2ac7c7": { + "balance": "0x10f0cf064dd59200000" + }, + "9470cc36594586821821c5c996b6edc83b6d5a32": { + "balance": "0x14d1120d7b1600000" + }, + "9475c510ec9a26979247744c3d8c3b0e0b5f44d3": { + "balance": "0x21e19e0c9bab2400000" + }, + "947e11e5ea290d6fc3b38048979e0cd44ec7c17f": { + "balance": "0x6c6b935b8bbd400000" + }, + "9483d98f14a33fdc118d403955c29935edfc5f70": { + "balance": "0x18ea3b34ef51880000" + }, + "949131f28943925cfc97d41e0cea0b262973a730": { + "balance": "0x97c9ce4cf6d5c00000" + }, + "949f84f0b1d7c4a7cf49ee7f8b2c4a134de32878": { + "balance": "0x252248deb6e6940000" + }, + "949f8c107bc7f0aceaa0f17052aadbd2f9732b2e": { + "balance": "0x6c6b935b8bbd400000" + }, + "94a7cda8f481f9d89d42c303ae1632b3b709db1d": { + "balance": "0x1043561a8829300000" + }, + "94a9a71691317c2064271b51c9353fbded3501a8": { + "balance": "0xb50fcfafebecb00000" + }, + "94ad4bad824bd0eb9ea49c58cebcc0ff5e08346b": { + "balance": "0x692ae8897081d00000" + }, + "94bbc67d13f89ebca594be94bc5170920c30d9f3": { + "balance": "0x458ffa3150a540000" + }, + "94be3ae54f62d663b0d4cc9e1ea8fe9556ea9ebf": { + "balance": "0x143132ca843180000" + }, + "94c055e858357aaa30cf2041fa9059ce164a1f91": { + "balance": "0x43c25e0dcc1bd1c0000" + }, + "94c742fd7a8b7906b3bfe4f8904fc0be5c768033": { + "balance": "0x43c33c1937564800000" + }, + "94ca56de777fd453177f5e0694c478e66aff8a84": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "94d81074db5ae197d2bb1373ab80a87d121c4bd3": { + "balance": "0x1fd933494aa5fe00000" + }, + "94db807873860aac3d5aea1e885e52bff2869954": { + "balance": "0xae8e7a0bb575d00000" + }, + "94e1f5cb9b8abace03a1a6428256553b690c2355": { + "balance": "0x1158e460913d00000" + }, + "94ef8be45077c7d4c5652740de946a62624f713f": { + "balance": "0x56cf5593a18f88000" + }, + "94f13f9f0836a3ee2437a84922d2984dc0f7d53b": { + "balance": "0xa2a0329bc38abe0000" + }, + "94f8f057db7e60e675ad940f155885d1a477348e": { + "balance": "0x15be6174e1912e0000" + }, + "94fcceadfe5c109c5eaeaf462d43873142c88e22": { + "balance": "0x1043561a88293000000" + }, + "95034e1621865137cd4739b346dc17da3a27c34e": { + "balance": "0x55a6e79ccd1d300000" + }, + "950c68a40988154d2393fff8da7ccda99614f72c": { + "balance": "0xf94146fd8dcde58000" + }, + "950fe9c6cad50c18f11a9ed9c45740a6180612d0": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "952183cfd38e352e579d36decec5b18450f7fba0": { + "balance": "0x6c6b935b8bbd400000" + }, + "95278b08dee7c0f2c8c0f722f9fcbbb9a5241fda": { + "balance": "0x829309f64f0db00000" + }, + "952c57d2fb195107d4cd5ca300774119dfad2f78": { + "balance": "0x6c6b935b8bbd400000" + }, + "953572f0ea6df9b197cae40e4b8ecc056c4371c5": { + "balance": "0x3635c9adc5dea00000" + }, + "953ef652e7b769f53d6e786a58952fa93ee6abe7": { + "balance": "0x9b0a791f1211300000" + }, + "95447046313b2f3a5e19b948fd3b8bedc82c717c": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "955db3b74360b9a268677e73cea821668af6face": { + "balance": "0x65a4da25d3016c00000" + }, + "9560e8ac6718a6a1cdcff189d603c9063e413da6": { + "balance": "0xd8d726b7177a800000" + }, + "9567a0de811de6ff095b7ee64e7f1b83c2615b80": { + "balance": "0xe7eeba3410b740000" + }, + "95681cdae69b2049ce101e325c759892cac3f811": { + "balance": "0x9ae92a9bc94c400000" + }, + "9568b7de755628af359a84543de23504e15e41e6": { + "balance": "0x878678326eac9000000" + }, + "9569c63a9284a805626db3a32e9d236393476151": { + "balance": "0x6acb3df27e1f880000" + }, + "95809e8da3fbe4b7f281f0b8b1715f420f7d7d63": { + "balance": "0x6c6b935b8bbd400000" + }, + "959f57fded6ae37913d900b81e5f48a79322c627": { + "balance": "0xddb26104749118000" + }, + "959ff17f1d51b473b44010052755a7fa8c75bd54": { + "balance": "0x6acb3df27e1f880000" + }, + "95a577dc2eb3ae6cb9dfc77af697d7efdfe89a01": { + "balance": "0x75f610f70ed200000" + }, + "95cb6d8a6379f94aba8b885669562c4d448e56a7": { + "balance": "0x6c6b935b8bbd400000" + }, + "95d550427b5a514c751d73a0f6d29fb65d22ed10": { + "balance": "0x1043561a8829300000" + }, + "95d98d0c1069908f067a52acac2b8b534da37afd": { + "balance": "0x6f59b630a929708000" + }, + "95df4e3445d7662624c48eba74cf9e0a53e9f732": { + "balance": "0xbdbc41e0348b3000000" + }, + "95e6a54b2d5f67a24a4875af75107ca7ea9fd2fa": { + "balance": "0x487a9a304539440000" + }, + "95e6f93dac228bc7585a25735ac2d076cc3a4017": { + "balance": "0x14542ba12a337c00000" + }, + "95e7616424cd0961a71727247437f0069272280e": { + "balance": "0x15af1d78b58c400000" + }, + "95e80a82c20cbe3d2060242cb92d735810d034a2": { + "balance": "0x1c32e463fd4b98000" + }, + "95f62d0243ede61dad9a3165f53905270d54e242": { + "balance": "0x57473d05dabae80000" + }, + "95fb5afb14c1ef9ab7d179c5c300503fd66a5ee2": { + "balance": "0x1daf7a02b0dbe8000" + }, + "9610592202c282ab9bd8a884518b3e0bd4758137": { + "balance": "0xe873f44133cb00000" + }, + "961c59adc74505d1864d1ecfcb8afa0412593c93": { + "balance": "0x878678326eac9000000" + }, + "962c0dec8a3d464bf39b1215eafd26480ae490cd": { + "balance": "0x6c82e3eaa513e80000" + }, + "962cd22a8edf1e4f4e55b4b15ddbfb5d9d541971": { + "balance": "0x6c6b935b8bbd400000" + }, + "96334bfe04fffa590213eab36514f338b864b736": { + "balance": "0x15af1d78b58c400000" + }, + "9637dc12723d9c78588542eab082664f3f038d9d": { + "balance": "0x3635c9adc5dea00000" + }, + "964eab4b276b4cd8983e15ca72b106900fe41fce": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "9662ee021926682b31c5f200ce457abea76c6ce9": { + "balance": "0x24590e8589eb6a0000" + }, + "966c04781cb5e67dde3235d7f8620e1ab663a9a5": { + "balance": "0x100d2050da6351600000" + }, + "967076a877b18ec15a415bb116f06ef32645dba3": { + "balance": "0x6c6b935b8bbd400000" + }, + "967bfaf76243cdb9403c67d2ceefdee90a3feb73": { + "balance": "0x349d87f2a2dc2f0000" + }, + "967d4142af770515dd7062af93498dbfdff29f20": { + "balance": "0x11854d0f9cee40000" + }, + "968b14648f018333687cd213fa640aec04ce6323": { + "balance": "0x3635c9adc5dea00000" + }, + "968dea60df3e09ae3c8d3505e9c080454be0e819": { + "balance": "0x14542ba12a337c00000" + }, + "96924191b7df655b3319dc6d6137f481a73a0ff3": { + "balance": "0xd9ecb4fd208e500000" + }, + "9696052138338c722f1140815cf7749d0d3b3a74": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "96a55f00dff405dc4de5e58c57f6f6f0cac55d2f": { + "balance": "0x6a6616379c87b58000" + }, + "96aa573fed2f233410dbae5180145b23c31a02f0": { + "balance": "0x5dc892aa1131c80000" + }, + "96ad579bbfa8db8ebec9d286a72e4661eed8e356": { + "balance": "0x3a0ba42bec61830000" + }, + "96b434fe0657e42acc8212b6865139dede15979c": { + "balance": "0xd8d726b7177a800000" + }, + "96b906ea729f4655afe3e57d35277c967dfa1577": { + "balance": "0x3635c9adc5dea00000" + }, + "96d62dfd46087f62409d93dd606188e70e381257": { + "balance": "0x6c6b935b8bbd400000" + }, + "96d9cca8f55eea0040ec6eb348a1774b95d93ef4": { + "balance": "0xd8d726b7177a800000" + }, + "96e7c0c9d5bf10821bf140c558a145b7cac21397": { + "balance": "0x393ef1a5127c800000" + }, + "96ea6ac89a2bac95347b51dba63d8bd5ebdedce1": { + "balance": "0x6c6b935b8bbd400000" + }, + "96eafbf2fb6f4db9a436a74c45b5654452e23819": { + "balance": "0x1158e460913d00000" + }, + "96eb523e832f500a017de13ec27f5d366c560eff": { + "balance": "0x10acceba43ee280000" + }, + "96f0462ae6f8b96088f7e9c68c74b9d8ad34b347": { + "balance": "0x61093d7c2c6d380000" + }, + "96f820500b70f4a3e3239d619cff8f222075b135": { + "balance": "0xad78ebc5ac6200000" + }, + "96fe59c3dbb3aa7cc8cb62480c65e56e6204a7e2": { + "balance": "0x43c33c1937564800000" + }, + "96ff6f509968f36cb42cba48db32f21f5676abf8": { + "balance": "0x6acb3df27e1f880000" + }, + "970938522afb5e8f994873c9fbdc26e3b37e314c": { + "balance": "0x3635c9adc5dea00000" + }, + "970abd53a54fca4a6429207c182d4d57bb39d4a0": { + "balance": "0x6c6b935b8bbd400000" + }, + "970d8b8a0016d143054f149fb3b8e550dc0797c7": { + "balance": "0x3635c9adc5dea00000" + }, + "972c2f96aa00cf8a2f205abcf8937c0c75f5d8d9": { + "balance": "0xad78ebc5ac6200000" + }, + "973f4e361fe5decd989d4c8f7d7cc97990385daf": { + "balance": "0x150f8543a387420000" + }, + "974d0541ab4a47ec7f75369c0069b64a1b817710": { + "balance": "0x15af1d78b58c400000" + }, + "974d2f17895f2902049deaaecf09c3046507402d": { + "balance": "0xcc19c29437ab8000" + }, + "9752d14f5e1093f071711c1adbc4e3eb1e5c57f3": { + "balance": "0x6c6b935b8bbd400000" + }, + "9756e176c9ef693ee1eec6b9f8b151d313beb099": { + "balance": "0x410d586a20a4c00000" + }, + "975f3764e97bbccf767cbd3b795ba86d8ba9840e": { + "balance": "0x12c1b6eed03d280000" + }, + "976a18536af41874426308871bcd1512a775c9f8": { + "balance": "0x21e19e0c9bab2400000" + }, + "976e3ceaf3f1af51f8c29aff5d7fa21f0386d8ee": { + "balance": "0xd02ab486cedc00000" + }, + "9777cc61cf756be3b3c20cd4491c69d275e7a120": { + "balance": "0x21e19e0c9bab2400000" + }, + "97810bafc37e84306332aacb35e92ad911d23d24": { + "balance": "0x3635c9adc5dea00000" + }, + "978c430ce4359b06bc2cdf5c2985fc950e50d5c8": { + "balance": "0x1a055690d9db800000" + }, + "9795f64319fc17dd0f8261f9d206fb66b64cd0c9": { + "balance": "0xad78ebc5ac6200000" + }, + "9799ca21dbcf69bfa1b3f72bac51b9e3ca587cf9": { + "balance": "0x5c283d410394100000" + }, + "979cbf21dfec8ace3f1c196d82df962534df394f": { + "balance": "0x9991d478dd4d160000" + }, + "979d681c617da16f21bcaca101ed16ed015ab696": { + "balance": "0x65ea3db75546600000" + }, + "979f30158b574b999aab348107b9eed85b1ff8c1": { + "balance": "0x34957444b840e80000" + }, + "97a86f01ce3f7cfd4441330e1c9b19e1b10606ef": { + "balance": "0x6c6b935b8bbd400000" + }, + "97b91efe7350c2d57e7e406bab18f3617bcde14a": { + "balance": "0x21e1999bbd5d2be0000" + }, + "97d0d9725e3b70e675843173938ed371b62c7fac": { + "balance": "0x93739534d28680000" + }, + "97d9e46a7604d7b5a4ea4ee61a42b3d2350fc3ed": { + "balance": "0x6c6b935b8bbd400000" + }, + "97dc26ec670a31e0221d2a75bc5dc9f90c1f6fd4": { + "balance": "0x2b5e3af16b1880000" + }, + "97de21e421c37fe4b8025f9a51b7b390b5df7804": { + "balance": "0x10f0cf064dd592000000" + }, + "97e28973b860c567402800fbb63ce39a048a3d79": { + "balance": "0x542253a126ce40000" + }, + "97e5cc6127c4f885be02f44b42d1c8b0ac91e493": { + "balance": "0xad78ebc5ac6200000" + }, + "97f1fe4c8083e596212a187728dd5cf80a31bec5": { + "balance": "0x1158e460913d00000" + }, + "97f7760657c1e202759086963eb4211c5f8139b9": { + "balance": "0xa8a097fcb3d17680000" + }, + "97f99b6ba31346cd98a9fe4c308f87c5a58c5151": { + "balance": "0x14542ba12a337c00000" + }, + "980a84b686fc31bdc83c221058546a71b11f838a": { + "balance": "0x2a415548af86818000" + }, + "9810e34a94db6ed156d0389a0e2b80f4fd6b0a8a": { + "balance": "0x6c6b935b8bbd400000" + }, + "981ddf0404e4d22dda556a0726f00b2d98ab9569": { + "balance": "0x36356633ebd8ea0000" + }, + "981f712775c0dad97518ffedcb47b9ad1d6c2762": { + "balance": "0x16a6502f15a1e540000" + }, + "9834682180b982d166badb9d9d1d9bbf016d87ee": { + "balance": "0x6c6b935b8bbd400000" + }, + "9836b4d30473641ab56aeee19242761d72725178": { + "balance": "0x6c6b935b8bbd400000" + }, + "98397342ec5f3d4cb877e54ef5d6f1d366731bd4": { + "balance": "0x14061b9d77a5e980000" + }, + "9846648836a307a057184fd51f628a5f8c12427c": { + "balance": "0x40b69bf43dce8f00000" + }, + "984a7985e3cc7eb5c93691f6f8cc7b8f245d01b2": { + "balance": "0x14542ba12a337c00000" + }, + "985d70d207892bed398590024e2421b1cc119359": { + "balance": "0x43c33c1937564800000" + }, + "986df47e76e4d7a789cdee913cc9831650936c9d": { + "balance": "0x10f0cf064dd59200000" + }, + "9874803fe1f3a0365e7922b14270eaeb032cc1b5": { + "balance": "0x3cf5928824c6c20000" + }, + "9875623495a46cdbf259530ff838a1799ec38991": { + "balance": "0x6c6b935b8bbd400000" + }, + "987618c85656207c7bac1507c0ffefa2fb64b092": { + "balance": "0x37dfe433189e38000" + }, + "987c9bcd6e3f3990a52be3eda4710c27518f4f72": { + "balance": "0x15af1d78b58c400000" + }, + "9882967cee68d2a839fad8ab4a7c3dddf6c0adc8": { + "balance": "0x4878be1ffaf95d0000" + }, + "98855c7dfbee335344904a12c40c731795b13a54": { + "balance": "0x39fbae8d042dd00000" + }, + "989c0ccff654da03aeb11af701054561d6297e1d": { + "balance": "0xd8d726b7177a800000" + }, + "98a0e54c6d9dc8be96276cebf4fec460f6235d85": { + "balance": "0x6ac882100952c78000" + }, + "98b769cc305cecfb629a00c907069d7ef9bc3a12": { + "balance": "0x168d28e3f00280000" + }, + "98ba4e9ca72fddc20c69b4396f76f8183f7a2a4e": { + "balance": "0x2b5e3af16b188000000" + }, + "98be696d51e390ff1c501b8a0f6331b628ddc5ad": { + "balance": "0x6c6b935b8bbd400000" + }, + "98bed3a72eccfbafb923489293e429e703c7e25b": { + "balance": "0x6c6b935b8bbd400000" + }, + "98bf4af3810b842387db70c14d46099626003d10": { + "balance": "0xd8d726b7177a800000" + }, + "98c10ebf2c4f97cba5a1ab3f2aafe1cac423f8cb": { + "balance": "0x1043561a8829300000" + }, + "98c19dba810ba611e68f2f83ee16f6e7744f0c1f": { + "balance": "0xad78ebc5ac6200000" + }, + "98c5494a03ac91a768dffc0ea1dde0acbf889019": { + "balance": "0x2a5a058fc295ed000000" + }, + "98d204f9085f8c8e7de23e589b64c6eff692cc63": { + "balance": "0x6c6b935b8bbd400000" + }, + "98d3731992d1d40e1211c7f735f2189afa0702e0": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "98e2b6d606fd2d6991c9d6d4077fdf3fdd4585da": { + "balance": "0x30df1a6f8ad6280000" + }, + "98e3e90b28fccaee828779b8d40a5568c4116e21": { + "balance": "0x22b1c8c1227a00000" + }, + "98e6f547db88e75f1f9c8ac2c5cf1627ba580b3e": { + "balance": "0x3635c9adc5dea00000" + }, + "98f4af3af0aede5fafdc42a081ecc1f89e3ccf20": { + "balance": "0x1fd933494aa5fe00000" + }, + "98f6b8e6213dbc9a5581f4cce6655f95252bdb07": { + "balance": "0x115872b0bca4300000" + }, + "9909650dd5b1397b8b8b0eb69499b291b0ad1213": { + "balance": "0xad78ebc5ac6200000" + }, + "991173601947c2084a62d639527e961512579af9": { + "balance": "0x2086ac351052600000" + }, + "99129d5b3c0cde47ea0def4dfc070d1f4a599527": { + "balance": "0x6c6b935b8bbd400000" + }, + "9917d68d4af341d651e7f0075c6de6d7144e7409": { + "balance": "0x132d4476c08e6f00000" + }, + "991ac7ca7097115f26205eee0ef7d41eb4e311ae": { + "balance": "0x1158e460913d00000" + }, + "992365d764c5ce354039ddfc912e023a75b8e168": { + "balance": "0xfc936392801c0000" + }, + "992646ac1acaabf5ddaba8f9429aa6a94e7496a7": { + "balance": "0x3637507a30abeb0000" + }, + "99268327c373332e06c3f6164287d455b9d5fa4b": { + "balance": "0x6c6b935b8bbd400000" + }, + "9928ff715afc3a2b60f8eb4cc4ba4ee8dab6e59d": { + "balance": "0x17da3a04c7b3e00000" + }, + "9932ef1c85b75a9b2a80057d508734c51085becc": { + "balance": "0x2b83fa5301d590000" + }, + "993f146178605e66d517be782ef0b3c61a4e1925": { + "balance": "0x17c1f0535d7a5830000" + }, + "99413704b1a32e70f3bc0d69dd881c38566b54cb": { + "balance": "0x5cc6b694631f7120000" + }, + "994152fc95d5c1ca8b88113abbad4d710e40def6": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "9944fee9d34a4a880023c78932c00b59d5c82a82": { + "balance": "0x28a8a56b3690070000" + }, + "994cc2b5227ec3cf048512467c41b7b7b748909f": { + "balance": "0x6c6b935b8bbd400000" + }, + "9971df60f0ae66dce9e8c84e17149f09f9c52f64": { + "balance": "0xad78ebc5ac6200000" + }, + "9976947eff5f6ae5da08dd541192f378b428ff94": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "997d6592a31589acc31b9901fbeb3cc3d65b3215": { + "balance": "0x6c6b935b8bbd400000" + }, + "9982a5890ffb5406d3aca8d2bfc1dd70aaa80ae0": { + "balance": "0x6c6b935b8bbd400000" + }, + "99878f9d6e0a7ed9aec78297b73879a80195afe0": { + "balance": "0xd7c198710e66b00000" + }, + "998c1f93bcdb6ff23c10d0dc924728b73be2ff9f": { + "balance": "0x365bf3a433eaf30000" + }, + "9991614c5baa47dd6c96874645f97add2c3d8380": { + "balance": "0x6acb3df27e1f880000" + }, + "99924a9816bb7ddf3fec1844828e9ad7d06bf4e6": { + "balance": "0x5f68e8131ecf800000" + }, + "99997668f7c1a4ff9e31f9977ae3224bcb887a85": { + "balance": "0xfc936392801c00000" + }, + "999c49c174ca13bc836c1e0a92bff48b271543ca": { + "balance": "0xb1cf24ddd0b1400000" + }, + "99a4de19ded79008cfdcd45d014d2e584b8914a8": { + "balance": "0x5150ae84a8cdf00000" + }, + "99a96bf2242ea1b39ece6fcc0d18aed00c0179f3": { + "balance": "0x1043561a8829300000" + }, + "99b018932bcad355b6792b255db6702dec8ce5dd": { + "balance": "0xd8d8583fa2d52f0000" + }, + "99b743d1d9eff90d9a1934b4db21d519d89b4a38": { + "balance": "0x56bc75e2d63100000" + }, + "99b8c824869de9ed24f3bff6854cb6dd45cc3f9f": { + "balance": "0x65ea3db75546600000" + }, + "99c0174cf84e0783c220b4eb6ae18fe703854ad3": { + "balance": "0x7079a2573d0c780000" + }, + "99c1d9f40c6ab7f8a92fce2fdce47a54a586c53f": { + "balance": "0x35659ef93f0fc40000" + }, + "99c236141daec837ece04fdaee1d90cf8bbdc104": { + "balance": "0x766516acac0d200000" + }, + "99c31fe748583787cdd3e525b281b218961739e3": { + "balance": "0x3708baed3d68900000" + }, + "99c475bf02e8b9214ada5fad02fdfd15ba365c0c": { + "balance": "0x2009c5c8bf6fdc0000" + }, + "99c883258546cc7e4e971f522e389918da5ea63a": { + "balance": "0xd8d726b7177a800000" + }, + "99c9f93e45fe3c1418c353e4c5ac3894eef8121e": { + "balance": "0x585baf145050b0000" + }, + "99d1579cd42682b7644e1d4f7128441eeffe339d": { + "balance": "0x43c33c1937564800000" + }, + "99d1b585965f406a42a49a1ca70f769e765a3f98": { + "balance": "0x3894f0e6f9b9f700000" + }, + "99dfd0504c06c743e46534fd7b55f1f9c7ec3329": { + "balance": "0x6c6b935b8bbd400000" + }, + "99f4147ccc6bcb80cc842e69f6d00e30fa4133d9": { + "balance": "0x15af1d78b58c400000" + }, + "99f77f998b20e0bcdcd9fc838641526cf25918ef": { + "balance": "0x61093d7c2c6d380000" + }, + "99fad50038d0d9d4c3fbb4bce05606ecadcd5121": { + "balance": "0x6c6b935b8bbd400000" + }, + "99fe0d201228a753145655d428eb9fd94985d36d": { + "balance": "0x6920bff3515a3a0000" + }, + "9a079c92a629ca15c8cafa2eb28d5bc17af82811": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "9a0d3cee3d9892ea3b3700a27ff84140d9025493": { + "balance": "0x340aad21b3b700000" + }, + "9a24ce8d485cc4c86e49deb39022f92c7430e67e": { + "balance": "0x46791fc84e07d00000" + }, + "9a2ce43b5d89d6936b8e8c354791b8afff962425": { + "balance": "0x6c6b935b8bbd400000" + }, + "9a390162535e398877e416787d6239e0754e937c": { + "balance": "0x3635c9adc5dea00000" + }, + "9a3da65023a13020d22145cfc18bab10bd19ce4e": { + "balance": "0x18bf6ea3464a3a0000" + }, + "9a3e2b1bf346dd070b027357feac44a4b2c97db8": { + "balance": "0x21e19e0c9bab2400000" + }, + "9a4ca8b82117894e43db72b9fa78f0b9b93ace09": { + "balance": "0x2b5e3af16b1880000" + }, + "9a522e52c195bfb7cf5ffaaedb91a3ba7468161d": { + "balance": "0x3635c9adc5dea00000" + }, + "9a5af31c7e06339ac8b4628d7c4db0ce0f45c8a4": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "9a633fcd112cceeb765fe0418170732a9705e79c": { + "balance": "0xfc936392801c0000" + }, + "9a63d185a79129fdab19b58bb631ea36a420544e": { + "balance": "0x246ddf97976680000" + }, + "9a6708ddb8903c289f83fe889c1edcd61f854423": { + "balance": "0x3635c9adc5dea00000" + }, + "9a6ff5f6a7af7b7ae0ed9c20ecec5023d281b786": { + "balance": "0x8a12b9bd6a67ec0000" + }, + "9a82826d3c29481dcc2bd2950047e8b60486c338": { + "balance": "0x43c33c1937564800000" + }, + "9a8eca4189ff4aa8ff7ed4b6b7039f0902219b15": { + "balance": "0x1158e460913d00000" + }, + "9a953b5bcc709379fcb559d7b916afdaa50cadcc": { + "balance": "0x56bc75e2d63100000" + }, + "9a990b8aeb588d7ee7ec2ed8c2e64f7382a9fee2": { + "balance": "0x1d127db69fd8b0000" + }, + "9a9d1dc0baa77d6e20c3d849c78862dd1c054c87": { + "balance": "0x2fb474098f67c00000" + }, + "9aa48c66e4fb4ad099934e32022e827427f277ba": { + "balance": "0x21e19e0c9bab2400000" + }, + "9aa8308f42910e5ade09c1a5e282d6d91710bdbf": { + "balance": "0xad78ebc5ac6200000" + }, + "9aaafa0067647ed999066b7a4ca5b4b3f3feaa6f": { + "balance": "0x3635c9adc5dea00000" + }, + "9ab988b505cfee1dbe9cd18e9b5473b9a2d4f536": { + "balance": "0x1158e460913d000000" + }, + "9ab98d6dbb1eaae16d45a04568541ad3d8fe06cc": { + "balance": "0xec50464fe23f38000" + }, + "9aba2b5e27ff78baaab5cdc988b7be855cebbdce": { + "balance": "0x21e0c0013070adc0000" + }, + "9ac4da51d27822d1e208c96ea64a1e5b55299723": { + "balance": "0x56c5579f722140000" + }, + "9ac85397792a69d78f286b86432a07aeceb60e64": { + "balance": "0xc673ce3c40160000" + }, + "9ac907ee85e6f3e223459992e256a43fa08fa8b2": { + "balance": "0x21e19e0c9bab2400000" + }, + "9ad47fdcf9cd942d28effd5b84115b31a658a13e": { + "balance": "0xb259ec00d53b280000" + }, + "9adbd3bc7b0afc05d1d2eda49ff863939c48db46": { + "balance": "0xad6eedd17cf3b8000" + }, + "9adf458bff3599eee1a26398853c575bc38c6313": { + "balance": "0xf2dc7d47f15600000" + }, + "9ae13bd882f2576575921a94974cbea861ba0d35": { + "balance": "0xab4dcf399a3a600000" + }, + "9ae9476bfecd3591964dd325cf8c2a24faed82c1": { + "balance": "0xd8d726b7177a800000" + }, + "9af100cc3dae83a33402051ce4496b16615483f6": { + "balance": "0x6c6b935b8bbd400000" + }, + "9af11399511c213181bfda3a8b264c05fc81b3ce": { + "balance": "0x2f6f10780d22cc00000" + }, + "9af5c9894c33e42c2c518e3ac670ea9505d1b53e": { + "balance": "0xfc936392801c0000" + }, + "9af9dbe47422d177f945bdead7e6d82930356230": { + "balance": "0xd5967be4fc3f100000" + }, + "9afa536b4c66bc38d875c4b30099d9261fdb38eb": { + "balance": "0xb2a8f842a77bc8000" + }, + "9b06ad841dffbe4ccf46f1039fc386f3c321446e": { + "balance": "0x6c6b935b8bbd400000" + }, + "9b1168de8ab64b47552f3389800a9cc08b4666cf": { + "balance": "0x5dc892aa1131c80000" + }, + "9b1811c3051f46e664ae4bc9c824d18592c4574a": { + "balance": "0xad6eedd17cf3b8000" + }, + "9b18478655a4851cc906e660feac61f7f4c8bffc": { + "balance": "0xe2478d38907d840000" + }, + "9b22a80d5c7b3374a05b446081f97d0a34079e7f": { + "balance": "0xa2a15d09519be00000" + }, + "9b2be7f56754f505e3441a10f7f0e20fd3ddf849": { + "balance": "0x126e72a69a50d00000" + }, + "9b32cf4f5115f4b34a00a64c617de06387354323": { + "balance": "0x5b81ed888207c8000" + }, + "9b43dcb95fde318075a567f1e6b57617055ef9e8": { + "balance": "0xd5967be4fc3f100000" + }, + "9b444fd337e5d75293adcfff70e1ea01db023222": { + "balance": "0x56bc75e2d63100000" + }, + "9b4824ff9fb2abda554dee4fb8cf549165570631": { + "balance": "0x1158e460913d00000" + }, + "9b4c2715780ca4e99e60ebf219f1590c8cad500a": { + "balance": "0x56bc75e2d631000000" + }, + "9b59eb213b1e7565e45047e04ea0374f10762d16": { + "balance": "0x6c6b935b8bbd400000" + }, + "9b5c39f7e0ac168c8ed0ed340477117d1b682ee9": { + "balance": "0x55005f0c614480000" + }, + "9b5ec18e8313887df461d2902e81e67a8f113bb1": { + "balance": "0x56bc75e2d63100000" + }, + "9b64d3cd8d2b73f66841b5c46bb695b88a9ab75d": { + "balance": "0x1203a4f760c168000" + }, + "9b658fb361e046d4fcaa8aef6d02a99111223625": { + "balance": "0x6c6b935b8bbd400000" + }, + "9b6641b13e172fc072ca4b8327a3bc28a15b66a9": { + "balance": "0x68155a43676e00000" + }, + "9b68f67416a63bf4451a31164c92f672a68759e9": { + "balance": "0xcb49b44ba602d800000" + }, + "9b773669e87d76018c090f8255e54409b9dca8b2": { + "balance": "0x1158e460913d00000" + }, + "9b77ebced7e215f0920e8c2b870024f6ecb2ff31": { + "balance": "0x3635c9adc5dea00000" + }, + "9b7c8810cc7cc89e804e6d3e38121850472877fe": { + "balance": "0x6c6b935b8bbd400000" + }, + "9ba53dc8c95e9a472feba2c4e32c1dc4dd7bab46": { + "balance": "0x487a9a304539440000" + }, + "9bacd3d40f3b82ac91a264d9d88d908eac8664b9": { + "balance": "0x43c33c1937564800000" + }, + "9bb760d5c289a3e1db18db095345ca413b9a43c2": { + "balance": "0xaadec983fcff40000" + }, + "9bb76204186af2f63be79168601687fc9bad661f": { + "balance": "0x1043561a8829300000" + }, + "9bb9b02a26bfe1ccc3f0c6219e261c397fc5ca78": { + "balance": "0x487a9a304539440000" + }, + "9bc573bcda23b8b26f9073d90c230e8e71e0270b": { + "balance": "0x362f75a4305d0c0000" + }, + "9bd7c38a4210304a4d653edeff1b3ce45fce7843": { + "balance": "0xf498941e664280000" + }, + "9bd88068e13075f3a8cac464a5f949d6d818c0f6": { + "balance": "0x14542ba12a337c00000" + }, + "9bd905f1719fc7acd0159d4dc1f8db2f21472338": { + "balance": "0x3635c9adc5dea00000" + }, + "9bdbdc9b973431d13c89a3f9757e9b3b6275bfc7": { + "balance": "0x1b1a7dcf8a44d38000" + }, + "9be3c329b62a28b8b0886cbd8b99f8bc930ce3e6": { + "balance": "0x409e52b48369a0000" + }, + "9bf58efbea0784eb068adecfa0bb215084c73a35": { + "balance": "0x13a6b2b564871a00000" + }, + "9bf672d979b36652fc5282547a6a6bc212ae4368": { + "balance": "0x238fd42c5cf0400000" + }, + "9bf703b41c3624e15f4054962390bcba3052f0fd": { + "balance": "0x1483e01533c2e3c0000" + }, + "9bf71f7fb537ac54f4e514947fa7ff6728f16d2f": { + "balance": "0x1cf84a30a0a0c0000" + }, + "9bf9b3b2f23cf461eb591f28340bc719931c8364": { + "balance": "0x3635c9adc5dea00000" + }, + "9bfc659c9c601ea42a6b21b8f17084ec87d70212": { + "balance": "0x21e19e0c9bab2400000" + }, + "9bfff50db36a785555f07652a153b0c42b1b8b76": { + "balance": "0x6c6b935b8bbd400000" + }, + "9c05e9d0f0758e795303717e31da213ca157e686": { + "balance": "0x3635c9adc5dea00000" + }, + "9c1b771f09af882af0643083de2aa79dc097c40e": { + "balance": "0x8670e9ec6598c00000" + }, + "9c28a2c4086091cb5da226a657ce3248e8ea7b6f": { + "balance": "0xf2dc7d47f15600000" + }, + "9c2fd54089af665df5971d73b804616039647375": { + "balance": "0x3635c9adc5dea00000" + }, + "9c344098ba615a398f11d009905b177c44a7b602": { + "balance": "0x3635c9adc5dea00000" + }, + "9c3d0692ceeef80aa4965ceed262ffc7f069f2dc": { + "balance": "0xad78ebc5ac6200000" + }, + "9c405cf697956138065e11c5f7559e67245bd1a5": { + "balance": "0xad78ebc5ac6200000" + }, + "9c45202a25f6ad0011f115a5a72204f2f2198866": { + "balance": "0x10fcf3a62b080980000" + }, + "9c49deff47085fc09704caa2dca8c287a9a137da": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "9c4bbcd5f1644a6f075824ddfe85c571d6abf69c": { + "balance": "0x6194049f30f7200000" + }, + "9c526a140683edf1431cfaa128a935e2b614d88b": { + "balance": "0x6046f37e5945c0000" + }, + "9c54e4ed479a856829c6bb42da9f0b692a75f728": { + "balance": "0x197a8f6dd5519800000" + }, + "9c581a60b61028d934167929b22d70b313c34fd0": { + "balance": "0xa968163f0a57b400000" + }, + "9c5cc111092c122116f1a85f4ee31408741a7d2f": { + "balance": "0x1ab2cf7c9f87e20000" + }, + "9c6bc9a46b03ae5404f043dfcf21883e4110cc33": { + "balance": "0xad78ebc5ac6200000" + }, + "9c78963fbc263c09bd72e4f8def74a9475f7055c": { + "balance": "0x2eb8eb1a172dcb80000" + }, + "9c78fbb4df769ce2c156920cfedfda033a0e254a": { + "balance": "0x6acb3df27e1f880000" + }, + "9c7b6dc5190fe2912963fcd579683ec7395116b0": { + "balance": "0x2a1129d09367200000" + }, + "9c80bc18e9f8d4968b185da8c79fa6e11ffc3e23": { + "balance": "0xd02ab486cedc00000" + }, + "9c98fdf1fdcd8ba8f4c5b04c3ae8587efdf0f6e6": { + "balance": "0x14542ba12a337c00000" + }, + "9c99a1da91d5920bc14e0cb914fdf62b94cb8358": { + "balance": "0x43c33c1937564800000" + }, + "9c99b62606281b5cefabf36156c8fe62839ef5f3": { + "balance": "0xd8d726b7177a800000" + }, + "9c9a07a8e57c3172a919ef64789474490f0d9f51": { + "balance": "0x21e19e0c9bab2400000" + }, + "9c9de44724a4054da0eaa605abcc802668778bea": { + "balance": "0xad7d5ca3fa5a20000" + }, + "9c9f3b8a811b21f3ff3fe20fe970051ce66a824f": { + "balance": "0x3ec2debc07d4be0000" + }, + "9c9f89a3910f6a2ae8a91047a17ab788bddec170": { + "balance": "0x21e19e0c9bab2400000" + }, + "9ca0429f874f8dcee2e9c062a9020a842a587ab9": { + "balance": "0x6c6b935b8bbd400000" + }, + "9ca42ee7a0b898f6a5cc60b5a5d7b1bfa3c33231": { + "balance": "0x6c6b935b8bbd400000" + }, + "9cb28ac1a20a106f7f373692c5ce4c73f13732a1": { + "balance": "0x3635c9adc5dea00000" + }, + "9ccddcb2cfc2b25b08729a0a98d9e6f0202ea2c1": { + "balance": "0x56bc75e2d63100000" + }, + "9ce27f245e02d1c312c1d500788c9def7690453b": { + "balance": "0xad78ebc5ac6200000" + }, + "9ce5363b13e8238aa4dd15acd0b2e8afe0873247": { + "balance": "0xad78ebc5ac6200000" + }, + "9cf2928beef09a40f9bfc953be06a251116182fb": { + "balance": "0x14542ba12a337c00000" + }, + "9d069197d1de50045a186f5ec744ac40e8af91c6": { + "balance": "0x6c6b935b8bbd400000" + }, + "9d0e7d92fb305853d798263bf15e97c72bf9d7e0": { + "balance": "0x3635c9adc5dea00000" + }, + "9d0f347e826b7dceaad279060a35c0061ecf334b": { + "balance": "0xd8d726b7177a800000" + }, + "9d207517422cc0d60de7c237097a4d4fce20940c": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "9d250ae4f110d71cafc7b0adb52e8d9acb6679b8": { + "balance": "0x2156d6e997213c00000" + }, + "9d2bfc36106f038250c01801685785b16c86c60d": { + "balance": "0x5077d75df1b675800000" + }, + "9d30cb237bc096f17036fc80dd21ca68992ca2d9": { + "balance": "0x66ee7318fdc8f300000" + }, + "9d32962ea99700d93228e9dbdad2cc37bb99f07e": { + "balance": "0xb4632bedd4ded40000" + }, + "9d34dac25bd15828faefaaf28f710753b39e89dc": { + "balance": "0x3b1c56fed02df00000" + }, + "9d369165fb70b81a3a765f188fd60cbe5e7b0968": { + "balance": "0x6c6b935b8bbd400000" + }, + "9d40e012f60425a340d82d03a1c757bfabc706fb": { + "balance": "0x9346f3addc88d8000" + }, + "9d4174aa6af28476e229dadb46180808c67505c1": { + "balance": "0x421afda42ed6970000" + }, + "9d4213339a01551861764c87a93ce8f85f87959a": { + "balance": "0xad78ebc5ac6200000" + }, + "9d460c1b379ddb19a8c85b4c6747050ddf17a875": { + "balance": "0xb50fcfafebecb00000" + }, + "9d47ba5b4c8505ad8da42934280b61a0e1e8b971": { + "balance": "0x56bc75e2d63100000" + }, + "9d4d321177256ebd9afbda304135d517c3dc5693": { + "balance": "0x2164b7a04ac8a00000" + }, + "9d4ff989b7bed9ab109d10c8c7e55f02d76734ad": { + "balance": "0x3635c9adc5dea00000" + }, + "9d511543b3d9dc60d47f09d49d01b6c498d82078": { + "balance": "0x26197b9516fc3940000" + }, + "9d6ecfa03af2c6e144b7c4692a86951e902e9e1f": { + "balance": "0xa2a5aa60ad243f0000" + }, + "9d7655e9f3e5ba5d6e87e412aebe9ee0d49247ee": { + "balance": "0x8e09311c1d80fa0000" + }, + "9d7831e834c20b1baa697af1d8e0c621c5afff9a": { + "balance": "0x4b06dbbb40f4a0000" + }, + "9d78a975b7db5e4d8e28845cfbe7e31401be0dd9": { + "balance": "0x48a43c54602f700000" + }, + "9d799e943e306ba2e5b99c8a6858cbb52c0cf735": { + "balance": "0x1043561a8829300000" + }, + "9d7fda7070bf3ee9bbd9a41f55cad4854ae6c22c": { + "balance": "0x255cba3c46fcf120000" + }, + "9d81aea69aed6ad07089d61445348c17f34bfc5b": { + "balance": "0x1043561a8829300000" + }, + "9d911f3682f32fe0792e9fb6ff3cfc47f589fca5": { + "balance": "0xd8d726b7177a800000" + }, + "9d913b5d339c95d87745562563fea98b23c60cc4": { + "balance": "0x941302c7f4d230000" + }, + "9d93fab6e22845f8f45a07496f11de71530debc7": { + "balance": "0x6c4fd1ee246e780000" + }, + "9d99b189bbd9a48fc2e16e8fcda33bb99a317bbb": { + "balance": "0x3d16e10b6d8bb20000" + }, + "9d9c4efe9f433989e23be94049215329fa55b4cb": { + "balance": "0xde3b28903c6b58000" + }, + "9d9e57fde30e5068c03e49848edce343b7028358": { + "balance": "0x5dc892aa1131c80000" + }, + "9da3302240af0511c6fd1857e6ddb7394f77ab6b": { + "balance": "0xa80d24677efef00000" + }, + "9da4ec407077f4b9707b2d9d2ede5ea5282bf1df": { + "balance": "0xd8d726b7177a800000" + }, + "9da609fa3a7e6cf2cc0e70cdabe78dc4e382e11e": { + "balance": "0x410d586a20a4c00000" + }, + "9da61ccd62bf860656e0325d7157e2f160d93bb5": { + "balance": "0x10f0ca956f8799e0000" + }, + "9da6e075989c7419094cc9f6d2e49393bb199688": { + "balance": "0x259bb71d5adf3f00000" + }, + "9da8e22ca10e67fea44e525e4751eeac36a31194": { + "balance": "0xe18398e7601900000" + }, + "9db2e15ca681f4c66048f6f9b7941ed08b1ff506": { + "balance": "0xd8d726b7177a800000" + }, + "9dc10fa38f9fb06810e11f60173ec3d2fd6a751e": { + "balance": "0x6acb3df27e1f880000" + }, + "9dd2196624a1ddf14a9d375e5f07152baf22afa2": { + "balance": "0x41b05e2463a5438000" + }, + "9dd46b1c6d3f05e29e9c6f037eed9a595af4a9aa": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "9ddd355e634ee9927e4b7f6c97e7bf3a2f1e687a": { + "balance": "0x2b5e3af16b1880000" + }, + "9de20ae76aa08263b205d5142461961e2408d266": { + "balance": "0xda933d8d8c6700000" + }, + "9de20bc37e7f48a80ffd7ad84ffbf1a1abe1738c": { + "balance": "0xad78ebc5ac6200000" + }, + "9de7386dde401ce4c67b71b6553f8aa34ea5a17d": { + "balance": "0x340aad21b3b700000" + }, + "9deb39027af877992b89f2ec4a1f822ecdf12693": { + "balance": "0x6c6b935b8bbd400000" + }, + "9defe56a0ff1a1947dba0923f7dd258d8f12fa45": { + "balance": "0x5b12aefafa804000000" + }, + "9df057cd03a4e27e8e032f857985fd7f01adc8d7": { + "balance": "0x6c6b935b8bbd400000" + }, + "9df32a501c0b781c0281022f42a1293ffd7b892a": { + "balance": "0x1e7e4171bf4d3a00000" + }, + "9e01765aff08bc220550aca5ea2e1ce8e5b09923": { + "balance": "0x3635c9adc5dea00000" + }, + "9e20e5fd361eabcf63891f5b87b09268b8eb3793": { + "balance": "0x56bc75e2d63100000" + }, + "9e232c08c14dc1a6ed0b8a3b2868977ba5c17d10": { + "balance": "0x1158e460913d00000" + }, + "9e23c5e4b782b00a5fadf1aead87dacf5b0367a1": { + "balance": "0x1158e460913d00000" + }, + "9e35399071a4a101e9194daa3f09f04a0b5f9870": { + "balance": "0xd8d726b7177a800000" + }, + "9e3eb509278fe0dcd8e0bbe78a194e06b6803943": { + "balance": "0x32f51edbaaa3300000" + }, + "9e427272516b3e67d4fcbf82f59390d04c8e28e5": { + "balance": "0xd8d726b7177a800000" + }, + "9e4cec353ac3e381835e3c0991f8faa5b7d0a8e6": { + "balance": "0x21e18b9e9ab45e48000" + }, + "9e5811b40be1e2a1e1d28c3b0774acde0a09603d": { + "balance": "0xa2a15d09519be00000" + }, + "9e5a311d9f69898a7c6a9d6360680438e67a7b2f": { + "balance": "0x50c5e761a444080000" + }, + "9e7c2050a227bbfd60937e268cea3e68fea8d1fe": { + "balance": "0x56bc75e2d63100000" + }, + "9e7f65a90e8508867bccc914256a1ea574cf07e3": { + "balance": "0x433874f632cc600000" + }, + "9e8144e08e89647811fe6b72d445d6a5f80ad244": { + "balance": "0x21e19e0c9bab2400000" + }, + "9e8f64ddcde9b8b451bafaa235a9bf511a25ac91": { + "balance": "0x90f534608a72880000" + }, + "9e951f6dc5e352afb8d04299d2478a451259bf56": { + "balance": "0x3e7419881a73a0000" + }, + "9e960dcd03d5ba99cb115d17ff4c09248ad4d0be": { + "balance": "0xad78ebc5ac6200000" + }, + "9eaf6a328a4076024efa6b67b48b21eedcc0f0b8": { + "balance": "0x890b0c2e14fb80000" + }, + "9eb1ff71798f28d6e989fa1ea0588e27ba86cb7d": { + "balance": "0x7a1fe160277000000" + }, + "9eb281c32719c40fdb3e216db0f37fbc73a026b7": { + "balance": "0x1158e460913d00000" + }, + "9eb3a7cb5e6726427a3a361cfa8d6164dbd0ba16": { + "balance": "0x2b95bdcc39b6100000" + }, + "9eb7834e171d41e069a77947fca87622f0ba4e48": { + "balance": "0x56bc75e2d63100000" + }, + "9ec03e02e587b7769def538413e97f7e55be71d8": { + "balance": "0x42bf06b78ed3b500000" + }, + "9ecbabb0b22782b3754429e1757aaba04b81189f": { + "balance": "0x2ca7bb061f5e998000" + }, + "9ece1400800936c7c6485fcdd3626017d09afbf6": { + "balance": "0x10ce1d3d8cb3180000" + }, + "9ed4e63f526542d44fddd34d59cd25388ffd6bda": { + "balance": "0xd29b34a46348940000" + }, + "9ed80eda7f55054db9fb5282451688f26bb374c1": { + "balance": "0x1043561a8829300000" + }, + "9edc90f4be210865214ab5b35e5a8dd77415279d": { + "balance": "0xd8d726b7177a800000" + }, + "9edeac4c026b93054dc5b1d6610c6f3960f2ad73": { + "balance": "0x410d586a20a4c00000" + }, + "9ee93f339e6726ec65eea44f8a4bfe10da3d3282": { + "balance": "0x6c6b935b8bbd400000" + }, + "9ee9760cc273d4706aa08375c3e46fa230aff3d5": { + "balance": "0x1e52e336cde22180000" + }, + "9eeb07bd2b7890195e7d46bdf2071b6617514ddb": { + "balance": "0x6c6b935b8bbd400000" + }, + "9eef442d291a447d74c5d253c49ef324eac1d8f0": { + "balance": "0xb96608c8103bf00000" + }, + "9ef1896b007c32a15114fb89d73dbd47f9122b69": { + "balance": "0xd8d726b7177a800000" + }, + "9f017706b830fb9c30efb0a09f506b9157457534": { + "balance": "0x6c6b935b8bbd400000" + }, + "9f10f2a0463b65ae30b070b3df18cf46f51e89bd": { + "balance": "0x678a932062e4180000" + }, + "9f19fac8a32437d80ac6837a0bb7841729f4972e": { + "balance": "0x233df3299f61720000" + }, + "9f1aa8fcfc89a1a5328cbd6344b71f278a2ca4a0": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "9f21302ca5096bea7402b91b0fd506254f999a3d": { + "balance": "0x4397451a003dd80000" + }, + "9f271d285500d73846b18f733e25dd8b4f5d4a8b": { + "balance": "0x2723c346ae18080000" + }, + "9f3497f5ef5fe63095836c004eb9ce02e9013b4b": { + "balance": "0x2256861bf9cf080000" + }, + "9f3a74fd5e7edcc1162993171381cbb632b7cff0": { + "balance": "0x21e19e0c9bab2400000" + }, + "9f46e7c1e9078cae86305ac7060b01467d6685ee": { + "balance": "0x243d4d18229ca20000" + }, + "9f496cb2069563144d0811677ba0e4713a0a4143": { + "balance": "0x3cd2e0bf63a4480000" + }, + "9f4a7195ac7c151ca258cafda0cab083e049c602": { + "balance": "0x53538c32185cee0000" + }, + "9f4ac9c9e7e24cb2444a0454fa5b9ad9d92d3853": { + "balance": "0x2d43f3ebfafb2c0000" + }, + "9f5f44026b576a4adb41e95961561d41039ca391": { + "balance": "0xd8d726b7177a80000" + }, + "9f607b3f12469f446121cebf3475356b71b4328c": { + "balance": "0xd8d726b7177a800000" + }, + "9f61beb46f5e853d0a8521c7446e68e34c7d0973": { + "balance": "0x1e5b8fa8fe2ac00000" + }, + "9f64a8e8dacf4ade30d10f4d59b0a3d5abfdbf74": { + "balance": "0x36369ed7747d260000" + }, + "9f662e95274121f177566e636d23964cf1fd686f": { + "balance": "0x6c6b935b8bbd400000" + }, + "9f6a322a6d469981426ae844865d7ee0bb15c7b3": { + "balance": "0x2b5ee57929fdb8000" + }, + "9f7986924aeb02687cd64189189fb167ded2dd5c": { + "balance": "0x35659ef93f0fc40000" + }, + "9f7a0392f857732e3004a375e6b1068d49d83031": { + "balance": "0x6c6b935b8bbd400000" + }, + "9f8245c3ab7d173164861cd3991b94f1ba40a93a": { + "balance": "0x9b0a791f1211300000" + }, + "9f83a293c324d4106c18faa8888f64d299054ca0": { + "balance": "0xad78ebc5ac6200000" + }, + "9f86a066edb61fcb5856de93b75c8c791864b97b": { + "balance": "0x6c6b935b8bbd400000" + }, + "9f98eb34d46979b0a6de8b05aa533a89b825dcf1": { + "balance": "0x4b06dbbb40f4a0000" + }, + "9f9fe0c95f10fee87af1af207236c8f3614ef02f": { + "balance": "0x14542ba12a337c00000" + }, + "9faea13c733412dc4b490402bfef27a0397a9bc3": { + "balance": "0x10ce1d3d8cb3180000" + }, + "9fbe066de57236dc830725d32a02aef9246c6c5e": { + "balance": "0x6c6b935b8bbd400000" + }, + "9fd1052a60506bd1a9ef003afd9d033c267d8e99": { + "balance": "0x3635c9adc5dea00000" + }, + "9fd64373f2fbcd9c0faca60547cad62e26d9851f": { + "balance": "0x3635c9adc5dea00000" + }, + "9fe501aa57ead79278937cd6308c5cfa7a5629fe": { + "balance": "0x2b5ee57929fdb8000" + }, + "9ffc5fe06f33f5a480b75aa94eb8556d997a16c0": { + "balance": "0x1158e460913d00000" + }, + "9ffcf5ef46d933a519d1d16c6ba3189b27496224": { + "balance": "0x3635c9adc5dea00000" + }, + "9ffedcc36b7cc312ad2a9ede431a514fccb49ba3": { + "balance": "0x244f579f3f5ca40000" + }, + "a006268446643ec5e81e7acb3f17f1c351ee2ed9": { + "balance": "0xd8d726b7177a800000" + }, + "a008019863c1a77c1499eb39bbd7bf2dd7a31cb9": { + "balance": "0x76d41c62494840000" + }, + "a009bf076f1ba3fa57d2a7217218bed5565a7a7a": { + "balance": "0x3635c9adc5dea00000" + }, + "a01e9476df84431825c836e8803a97e22fa5a0cd": { + "balance": "0x14542ba12a337c00000" + }, + "a01f12d70f44aa7b113b285c22dcdb45873454a7": { + "balance": "0xfc936392801c0000" + }, + "a01fd1906a908506dedae1e208128872b56ee792": { + "balance": "0xa2a15d09519be00000" + }, + "a0228240f99e1de9cb32d82c0f2fa9a3d44b0bf3": { + "balance": "0x56bc75e2d631000000" + }, + "a02bde6461686e19ac650c970d0672e76dcb4fc2": { + "balance": "0x1e09296c3378de40000" + }, + "a02c1e34064f0475f7fa831ccb25014c3aa31ca2": { + "balance": "0x340aad21b3b700000" + }, + "a02dc6aa328b880de99eac546823fccf774047fb": { + "balance": "0x6acb3df27e1f880000" + }, + "a02e3f8f5959a7aab7418612129b701ca1b80010": { + "balance": "0x1158e460913d00000" + }, + "a0347f0a98776390165c166d32963bf74dcd0a2f": { + "balance": "0x3635c9adc5dea00000" + }, + "a035a3652478f82dbd6d115faa8ca946ec9e681d": { + "balance": "0x5f4e42dd4afec0000" + }, + "a03a3dc7c533d1744295be955d61af3f52b51af5": { + "balance": "0x22b1c8c1227a00000" + }, + "a0459ef3693aacd1647cd5d8929839204cef53be": { + "balance": "0x3635c9adc5dea00000" + }, + "a04f2ae02add14c12faf65cb259022d0830a8e26": { + "balance": "0x152d02c7e14af6800000" + }, + "a06cd1f396396c0a64464651d7c205efaf387ca3": { + "balance": "0x6c6acc67d7b1d40000" + }, + "a072691c8dd7cd4237ff72a75c1a9506d0ce5b9e": { + "balance": "0x140ec80fa7ee880000" + }, + "a072cebe62a9e9f61cc3fbf88a9efbfe3e9a8d70": { + "balance": "0x15af1d78b58c400000" + }, + "a07682000b1bcf3002f85c80c0fa2949bd1e82fd": { + "balance": "0xd8d726b7177a800000" + }, + "a07aa16d74aee8a9a3288d52db1551d593883297": { + "balance": "0x2086ac351052600000" + }, + "a08d215b5b6aac4861a281ac7e400b78fef04cbf": { + "balance": "0x1158e460913d00000" + }, + "a0951970dfd0832fb83bda12c23545e79041756c": { + "balance": "0x2086ac351052600000" + }, + "a09f4d5eaa65a2f4cb750a49923401dae59090af": { + "balance": "0x796e3ea3f8ab00000" + }, + "a0a0e65204541fca9b2fb282cd95138fae16f809": { + "balance": "0x21e19e0c9bab2400000" + }, + "a0aa5f0201f04d3bbeb898132f7c11679466d901": { + "balance": "0x1fbed5215bb4c0000" + }, + "a0aadbd9509722705f6d2358a5c79f37970f00f6": { + "balance": "0xad78ebc5ac6200000" + }, + "a0b771951ce1deee363ae2b771b73e07c4b5e800": { + "balance": "0x4be4e7267b6ae00000" + }, + "a0de5c601e696635c698b7ae9ca4539fc7b941ec": { + "balance": "0x12c3cbd704c9770000" + }, + "a0e8ba661b48154cf843d4c2a5c0f792d528ee29": { + "balance": "0x15af1d78b58c400000" + }, + "a0fc7e53c5ebd27a2abdac45261f84ab3b51aefb": { + "balance": "0xa313daec9bc0d90000" + }, + "a0ff5b4cf016027e8323497d4428d3e5a83b8795": { + "balance": "0x16598d3c83ec0420000" + }, + "a106465bbd19e1b6bce50d1b1157dc59095a3630": { + "balance": "0x6c6b935b8bbd400000" + }, + "a106e6923edd53ca8ed650968a9108d6ccfd9670": { + "balance": "0x202fe1505afec898000" + }, + "a109e18bb0a39c9ef82fa19597fc5ed8e9eb6d58": { + "balance": "0x58e7926ee858a00000" + }, + "a11a03c4bb26d21eff677d5d555c80b25453ee7a": { + "balance": "0x3cb2759bc410f8000" + }, + "a11effab6cf0f5972cffe4d56596e98968144a8f": { + "balance": "0x5a87e7d7f5f6580000" + }, + "a1204dad5f560728a35c0d8fc79481057bf77386": { + "balance": "0x3635c9adc5dea00000" + }, + "a12623e629df93096704b16084be2cd89d562da4": { + "balance": "0x1ccc9324511e4500000" + }, + "a12a6c2d985daf0e4f5f207ae851aaf729b332cd": { + "balance": "0x152d02c7e14af6800000" + }, + "a1336dfb96b6bcbe4b3edf3205be5723c90fad52": { + "balance": "0x10f0cf064dd59200000" + }, + "a13b9d82a99b3c9bba5ae72ef2199edc7d3bb36c": { + "balance": "0x6c6acc67d7b1d40000" + }, + "a13cfe826d6d1841dcae443be8c387518136b5e8": { + "balance": "0x1da56a4b0835bf800000" + }, + "a1432ed2c6b7777a88e8d46d388e70477f208ca5": { + "balance": "0x1b1a7e413a196c50000" + }, + "a144f6b60f72d64a21e330dadb62d8990ade2b09": { + "balance": "0x3635c9adc5dea00000" + }, + "a15025f595acdbf3110f77c5bf24477e6548f9e8": { + "balance": "0x6c6b935b8bbd400000" + }, + "a158148a2e0f3e92dc2ce38febc20107e3253c96": { + "balance": "0x6c6b935b8bbd400000" + }, + "a16160851d2b9c349b92e46f829abfb210943595": { + "balance": "0x61093d7c2c6d380000" + }, + "a166f911c644ac3213d29e0e1ae010f794d5ad26": { + "balance": "0x6c6b935b8bbd400000" + }, + "a16d9e3d63986159a800b46837f45e8bb980ee0b": { + "balance": "0x6e1175da7ad1200000" + }, + "a17070c2e9c5a940a4ec0e4954c4d7d643be8f49": { + "balance": "0x6c6b17033b361c8000" + }, + "a17c9e4323069518189d5207a0728dcb92306a3f": { + "balance": "0x3635c9adc5dea00000" + }, + "a18360e985f2062e8f8efe02ad2cbc91ad9a5aad": { + "balance": "0xa2a15d09519be00000" + }, + "a1911405cf6e999ed011f0ddcd2a4ff7c28f2526": { + "balance": "0x22b1c8c1227a00000" + }, + "a192698007cc11aa603d221d5feea076bcf7c30d": { + "balance": "0x6c6b935b8bbd400000" + }, + "a192f06ab052d5fd7f94eea8318e827815fe677a": { + "balance": "0x71f8a93d01e540000" + }, + "a1998144968a5c70a6415554cefec2824690c4a5": { + "balance": "0x1158e460913d00000" + }, + "a1a1f0fa6d20b50a794f02ef52085c9d036aa6ca": { + "balance": "0x3635c9adc5dea00000" + }, + "a1ae8d4540d4db6fdde7146f415b431eb55c7983": { + "balance": "0xaadec983fcff40000" + }, + "a1b47c4d0ed6018842e6cfc8630ac3a3142e5e6b": { + "balance": "0x1158e460913d00000" + }, + "a1c4f45a82e1c478d845082eb18875c4ea6539ab": { + "balance": "0x2a5a058fc295ed000000" + }, + "a1dcd0e5b05a977c9623e5ae2f59b9ada2f33e31": { + "balance": "0x56bc75e2d63100000" + }, + "a1e4380a3b1f749673e270229993ee55f35663b4": { + "balance": "0x6c6b935b8bbd400000" + }, + "a1f193a0592f1feb9fdfc90aa813784eb80471c9": { + "balance": "0x4be4e7267b6ae00000" + }, + "a1f2854050f872658ed82e52b0ad7bbc1cb921f6": { + "balance": "0x6d0317e2b326f70000" + }, + "a1f5b840140d5a9acef402ac3cc3886a68cad248": { + "balance": "0x6c6b935b8bbd400000" + }, + "a1f765c44fe45f790677944844be4f2d42165fbd": { + "balance": "0xc7e9cfde768ec70000" + }, + "a1f7dde1d738d8cd679ea1ee965bee224be7d04d": { + "balance": "0x3d184450e5e93c0000" + }, + "a1f8d8bcf90e777f19b3a649759ad95027abdfc3": { + "balance": "0xad78ebc5ac6200000" + }, + "a202547242806f6e70e74058d6e5292defc8c8d4": { + "balance": "0x6c8754c8f30c080000" + }, + "a20d071b1b003063497d7990e1249dabf36c35f7": { + "balance": "0x3635c9adc5dea00000" + }, + "a20d8ff60caae31d02e0b665fa435d76f77c9442": { + "balance": "0x1a8a909dfcef400000" + }, + "a211da03cc0e31ecce5309998718515528a090df": { + "balance": "0xad78ebc5ac6200000" + }, + "a21442ab05340ade68c915f3c3399b9955f3f7eb": { + "balance": "0x2a034919dfbfbc0000" + }, + "a2222259dd9c3e3ded127084f808e92a1887302c": { + "balance": "0x8c8339dafed480000" + }, + "a22ade0ddb5c6ef8d0cd8de94d82b11082cb2e91": { + "balance": "0x374b57f3cef2700000" + }, + "a24c3ab62181e9a15b78c4621e4c7c588127be26": { + "balance": "0x8cde43a83d3310000" + }, + "a257ad594bd88328a7d90fc0a907df95eecae316": { + "balance": "0x1c3786ff3846930000" + }, + "a25b086437fd2192d0a0f64f6ed044f38ef3da32": { + "balance": "0x12290f15180bdc0000" + }, + "a276b058cb98d88beedb67e543506c9a0d9470d8": { + "balance": "0x90aafc76e02fbe0000" + }, + "a282e969cac9f7a0e1c0cd90f5d0c438ac570da3": { + "balance": "0x2207eb89fc27380000" + }, + "a291e9c7990d552dd1ae16cebc3fca342cbaf1d1": { + "balance": "0x43c33c1937564800000" + }, + "a29319e81069e5d60df00f3de5adee3505ecd5fb": { + "balance": "0x6c6b935b8bbd400000" + }, + "a2968fc1c64bac0b7ae0d68ba949874d6db253f4": { + "balance": "0x43c33c1937564800000" + }, + "a29d5bda74e003474872bd5894b88533ff64c2b5": { + "balance": "0x21e19e0c9bab2400000" + }, + "a29d661a6376f66d0b74e2fe9d8f26c0247ec84c": { + "balance": "0xdf3304079c13d20000" + }, + "a2a435de44a01bd0ecb29e44e47644e46a0cdffb": { + "balance": "0x1b1d445a7affe78000" + }, + "a2ace4c993bb1e5383f8ac74e179066e814f0591": { + "balance": "0x56bc75e2d63100000" + }, + "a2b701f9f5cdd09e4ba62baebae3a88257105885": { + "balance": "0x3635c9adc5dea00000" + }, + "a2c5854ff1599f98892c5725d262be1da98aadac": { + "balance": "0x1109ff333010e78000" + }, + "a2c7eaffdc2c9d937345206c909a52dfb14c478f": { + "balance": "0x7c0860e5a80dc0000" + }, + "a2d2aa626b09d6d4e4b13f7ffc5a88bd7ad36742": { + "balance": "0xfb8078507553830000" + }, + "a2d38de1c73906f6a7ca6efeb97cf6f69cc421be": { + "balance": "0x3635c9adc5dea00000" + }, + "a2dc65ee256b59a5bd7929774f904b358df3ada1": { + "balance": "0x483bce28beb09f80000" + }, + "a2e0683a805de6a05edb2ffbb5e96f0570b637c3": { + "balance": "0x1158e460913d00000" + }, + "a2e1b8aa900e9c139b3fa122354f6156d92a18b1": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "a2e2b5941e0c01944bfe1d5fb4e8a34b922ccfb1": { + "balance": "0xad78ebc5ac6200000" + }, + "a2e460a989cb15565f9ecca7d121a18e4eb405b6": { + "balance": "0x6c6b935b8bbd400000" + }, + "a2ecce2c49f72a0995a0bda57aacf1e9f001e22a": { + "balance": "0xd8d726b7177a800000" + }, + "a2f472fe4f22b77db489219ea4023d11582a9329": { + "balance": "0x878678326eac9000000" + }, + "a2f798e077b07d86124e1407df32890dbb4b6379": { + "balance": "0xad78ebc5ac6200000" + }, + "a2f86bc061884e9eef05640edd51a2f7c0596c69": { + "balance": "0x6c6c44fe47ec050000" + }, + "a2fa17c0fb506ce494008b9557841c3f641b8cae": { + "balance": "0x1158e460913d00000" + }, + "a304588f0d850cd8d38f76e9e83c1bf63e333ede": { + "balance": "0x2285601216c8c0000" + }, + "a3058c51737a4e96c55f2ef6bd7bb358167ec2a7": { + "balance": "0x20db3ae4481ad48000" + }, + "a309df54cabce70c95ec3033149cd6678a6fd4cf": { + "balance": "0xc1f12c75101580000" + }, + "a30a45520e5206d9004070e6af3e7bb2e8dd5313": { + "balance": "0x15af1d78b58c400000" + }, + "a30e0acb534c9b3084e8501da090b4eb16a2c0cd": { + "balance": "0x6c6b935b8bbd400000" + }, + "a3203095edb7028e6871ce0a84f548459f83300a": { + "balance": "0xd8d726b7177a800000" + }, + "a321091d3018064279db399d2b2a88a6f440ae24": { + "balance": "0xad78ebc5ac62000000" + }, + "a3232d068d50064903c9ebc563b515acc8b7b097": { + "balance": "0x6c8754c8f30c080000" + }, + "a3241d890a92baf52908dc4aa049726be426ebd3": { + "balance": "0x43c2da661ca2f540000" + }, + "a3294626ec2984c43b43da4d5d8e4669b11d4b59": { + "balance": "0x36a4cf636319c00000" + }, + "a32cf7dde20c3dd5679ff5e325845c70c5962662": { + "balance": "0x1158e460913d00000" + }, + "a339a3d8ca280e27d2415b26d1fc793228b66043": { + "balance": "0x36f28695b78ff00000" + }, + "a33cb450f95bb46e25afb50fe05feee6fb8cc8ea": { + "balance": "0x2a1129d09367200000" + }, + "a33f70da7275ef057104dfa7db64f472e9f5d553": { + "balance": "0x45946b0f9e9d60000" + }, + "a34076f84bd917f20f8342c98ba79e6fb08ecd31": { + "balance": "0xe3aeb5737240a00000" + }, + "a3430e1f647f321ed34739562323c7d623410b56": { + "balance": "0x3634fb9f1489a70000" + }, + "a34f9d568bf7afd94c2a5b8a5ff55c66c4087999": { + "balance": "0x847d503b220eb00000" + }, + "a35606d51220ee7f2146d411582ee4ee4a45596e": { + "balance": "0xd8aabe080bc9400000" + }, + "a356551bb77d4f45a6d7e09f0a089e79cca249cb": { + "balance": "0x126e72a69a50d00000" + }, + "a35c19132cac1935576abfed6c0495fb07881ba0": { + "balance": "0x6c6b935b8bbd400000" + }, + "a365918bfe3f2627b9f3a86775d8756e0fd8a94b": { + "balance": "0x15af1d78b58c400000" + }, + "a36e0d94b95364a82671b608cb2d373245612909": { + "balance": "0x821d221b5291f8000" + }, + "a375b4bc24a24e1f797593cc302b2f331063fa5c": { + "balance": "0xad78ebc5ac6200000" + }, + "a37622ac9bbdc4d82b75015d745b9f8de65a28ec": { + "balance": "0x9dc05cce28c2b80000" + }, + "a379a5070c503d2fac89b8b3afa080fd45ed4bec": { + "balance": "0x42bf06b78ed3b500000" + }, + "a3802d8a659e89a2c47e905430b2a827978950a7": { + "balance": "0x3635c9adc5dea00000" + }, + "a38306cb70baa8e49186bd68aa70a83d242f2907": { + "balance": "0x6c6b935b8bbd400000" + }, + "a38476691d34942eea6b2f76889223047db4617a": { + "balance": "0x6c6b935b8bbd400000" + }, + "a387ce4e961a7847f560075c64e1596b5641d21c": { + "balance": "0x243d4d18229ca20000" + }, + "a387ecde0ee4c8079499fd8e03473bd88ad7522a": { + "balance": "0x6acb3df27e1f880000" + }, + "a3883a24f7f166205f1a6a9949076c26a76e7178": { + "balance": "0x62a992e53a0af00000" + }, + "a38b5bd81a9db9d2b21d5ec7c60552cd02ed561b": { + "balance": "0x14542ba12a337c00000" + }, + "a390ca122b8501ee3e5e07a8ca4b419f7e4dae15": { + "balance": "0x56bc75e2d63100000" + }, + "a3932a31d6ff75fb3b1271ace7caa7d5e1ff1051": { + "balance": "0x43c33c1937564800000" + }, + "a394ad4fd9e6530e6f5c53faecbede81cb172da1": { + "balance": "0x12f939c99edab800000" + }, + "a3979a92760a135adf69d72f75e167755f1cb8c3": { + "balance": "0x56bc75e2d63100000" + }, + "a39bfee4aec9bd75bd22c6b672898ca9a1e95d32": { + "balance": "0x21e19e0c9bab2400000" + }, + "a3a262afd2936819230892fde84f2d5a594ab283": { + "balance": "0x65ea3db75546600000" + }, + "a3a2e319e7d3a1448b5aa2468953160c2dbcba71": { + "balance": "0x6c6b935b8bbd400000" + }, + "a3a57b0716132804d60aac281197ff2b3d237b01": { + "balance": "0x4be4e7267b6ae00000" + }, + "a3a93ef9dbea2636263d06d8492f6a41de907c22": { + "balance": "0x340aad21b3b700000" + }, + "a3ae1879007d801cb5f352716a4dd8ba2721de3d": { + "balance": "0x2a5a058fc295ed000000" + }, + "a3ba0d3a3617b1e31b4e422ce269e873828d5d69": { + "balance": "0x2e141ea081ca080000" + }, + "a3bc979b7080092fa1f92f6e0fb347e28d995045": { + "balance": "0x97c9ce4cf6d5c00000" + }, + "a3bff1dfa9971668360c0d82828432e27bf54e67": { + "balance": "0xad78ebc5ac6200000" + }, + "a3c14ace28b192cbb062145fcbbd5869c67271f6": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "a3c33afc8cb4704e23153de2049d35ae71332472": { + "balance": "0x2b58addb89a2580000" + }, + "a3d0b03cffbb269f796ac29d80bfb07dc7c6ad06": { + "balance": "0x6c6b935b8bbd400000" + }, + "a3d583a7b65b23f60b7905f3e4aa62aac87f4227": { + "balance": "0x38befa126d5a9f8000" + }, + "a3db364a332d884ba93b2617ae4d85a1489bea47": { + "balance": "0x5c283d410394100000" + }, + "a3e051fb744aa3410c3b88f899f5d57f168df12d": { + "balance": "0xa030dcebbd2f4c0000" + }, + "a3e3a6ea509573e21bd0239ece0523a7b7d89b2f": { + "balance": "0x6acb3df27e1f880000" + }, + "a3f4ad14e0bb44e2ce2c14359c75b8e732d37054": { + "balance": "0xad78ebc5ac6200000" + }, + "a3facc50195c0b4933c85897fecc5bbd995c34b8": { + "balance": "0x1158e460913d00000" + }, + "a4035ab1e5180821f0f380f1131b7387c8d981cd": { + "balance": "0x1158e460913d00000" + }, + "a40aa2bbce0c72b4d0dfffcc42715b2b54b01bfa": { + "balance": "0x3635c9adc5dea00000" + }, + "a419a984142363267575566089340eea0ea20819": { + "balance": "0x6c6acc67d7b1d40000" + }, + "a421dbb89b3a07419084ad10c3c15dfe9b32d0c2": { + "balance": "0x43c33c1937564800000" + }, + "a422e4bf0bf74147cc895bed8f16d3cef3426154": { + "balance": "0x12ef3f62ee11368000" + }, + "a4259f8345f7e3a8b72b0fec2cf75e321fda4dc2": { + "balance": "0x678a932062e4180000" + }, + "a42908e7fe53980a9abf4044e957a54b70e99cbe": { + "balance": "0x6c6b935b8bbd400000" + }, + "a429fa88731fdd350e8ecd6ea54296b6484fe695": { + "balance": "0x6ac5c62d9486070000" + }, + "a430995ddb185b9865dbe62539ad90d22e4b73c2": { + "balance": "0x21e19e0c9bab2400000" + }, + "a436c75453ccca4a1f1b62e5c4a30d86dde4be68": { + "balance": "0x6c6b935b8bbd400000" + }, + "a437fe6ec103ca8d158f63b334224eccac5b3ea3": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "a43b6da6cb7aac571dff27f09d39f846f53769b1": { + "balance": "0x14998f32ac78700000" + }, + "a43b81f99356c0af141a03010d77bd042c71c1ee": { + "balance": "0x6c6b935b8bbd400000" + }, + "a43e1947a9242b355561c30a829dfeeca2815af8": { + "balance": "0xd23d99969fd6918000" + }, + "a4489a50ead5d5445a7bee4d2d5536c2a76c41f8": { + "balance": "0xad78ebc5ac6200000" + }, + "a44fe800d96fcad73b7170d0f610cb8c0682d6ce": { + "balance": "0xd8d726b7177a800000" + }, + "a45432a6f2ac9d56577b938a37fabac8cc7c461c": { + "balance": "0x3635c9adc5dea00000" + }, + "a466d770d898d8c9d405e4a0e551efafcde53cf9": { + "balance": "0x1ab2cf7c9f87e20000" + }, + "a4670731175893bbcff4fa85ce97d94fc51c4ba8": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "a46b4387fb4dcce011e76e4d73547d4481e09be5": { + "balance": "0x487a9a304539440000" + }, + "a46cd237b63eea438c8e3b6585f679e4860832ac": { + "balance": "0x3635c9adc5dea00000" + }, + "a47779d8bc1c7bce0f011ccb39ef68b854f8de8f": { + "balance": "0x6c6b935b8bbd400000" + }, + "a4826b6c3882fad0ed5c8fbb25cc40cc4f33759f": { + "balance": "0x701b43e34433d00000" + }, + "a4875928458ec2005dbb578c5cd33580f0cf1452": { + "balance": "0x3635c9adc5dea00000" + }, + "a49f523aa51364cbc7d995163d34eb590ded2f08": { + "balance": "0x9027421b2a9fbc0000" + }, + "a4a49f0bc8688cc9e6dc04e1e08d521026e65574": { + "balance": "0xad78ebc5ac6200000" + }, + "a4a7d306f510cd58359428c0d2f7c3609d5674d7": { + "balance": "0xb58cb61c3ccf340000" + }, + "a4a83a0738799b971bf2de708c2ebf911ca79eb2": { + "balance": "0x2086ac351052600000" + }, + "a4b09de6e713dc69546e76ef0acf40b94f0241e6": { + "balance": "0x117dc0627ec8700000" + }, + "a4d2b429f1ad5349e31704969edc5f25ee8aca10": { + "balance": "0x21e19e0c9bab2400000" + }, + "a4d6c82eddae5947fbe9cdfbd548ae33d91a7191": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "a4da34450d22ec0ffcede0004b02f7872ee0b73a": { + "balance": "0x50f616673f0830000" + }, + "a4dd59ab5e517d398e49fa537f899fed4c15e95d": { + "balance": "0x43c33c1937564800000" + }, + "a4e623451e7e94e7e89ba5ed95c8a83a62ffc4ea": { + "balance": "0x1158e460913d00000" + }, + "a4ed11b072d89fb136759fc69b428c48aa5d4ced": { + "balance": "0xe3f1527a03ca80000" + }, + "a4fb14409a67b45688a8593e5cc2cf596ced6f11": { + "balance": "0x61093d7c2c6d380000" + }, + "a514d00edd7108a6be839a638db2415418174196": { + "balance": "0x65a4da25d3016c00000" + }, + "a522de7eb6ae1250522a513133a93bd42849475c": { + "balance": "0x43c33c1937564800000" + }, + "a524a8cccc49518d170a328270a2f88133fbaf5d": { + "balance": "0xff7022dac108a0000" + }, + "a539b4a401b584dfe0f344b1b422c65543167e2e": { + "balance": "0xad78ebc5ac6200000" + }, + "a53ead54f7850af21438cbe07af686279a315b86": { + "balance": "0x21e19e0c9bab2400000" + }, + "a543a066fb32a8668aa0736a0c9cd40d78098727": { + "balance": "0x3635c9adc5dea00000" + }, + "a567770b6ae320bdde50f904d663e746a61dace6": { + "balance": "0x6c6b935b8bbd400000" + }, + "a568db4d57e4d67462d733c69a9e0fe26e218327": { + "balance": "0x3b6bff9266c0ae0000" + }, + "a5698035391e67a49013c0002079593114feb353": { + "balance": "0xd02ab486cedc00000" + }, + "a570223ae3caa851418a9843a1ac55db4824f4fd": { + "balance": "0xad78ebc5ac6200000" + }, + "a57360f002e0d64d2d74457d8ca4857ee00bcddf": { + "balance": "0x1233e232f618aa0000" + }, + "a575f2891dcfcda83c5cf01474af11ee01b72dc2": { + "balance": "0x56cd55fc64dfe0000" + }, + "a5783bf33432ff82ac498985d7d460ae67ec3673": { + "balance": "0x62a992e53a0af00000" + }, + "a5874d754635a762b381a5c4c792483af8f23d1d": { + "balance": "0x2b5e3af16b1880000" + }, + "a5a4227f6cf98825c0d5baff5315752ccc1a1391": { + "balance": "0x21e19e0c9bab2400000" + }, + "a5ab4bd3588f46cb272e56e93deed386ba8b753d": { + "balance": "0x4842f04105872c8000" + }, + "a5bad86509fbe0e0e3c0e93f6d381f1af6e9d481": { + "balance": "0x14542ba12a337c00000" + }, + "a5c336083b04f9471b8c6ed73679b74d66c363ec": { + "balance": "0xa3650a4c9d20e20000" + }, + "a5cd123992194b34c4781314303b03c54948f4b9": { + "balance": "0x6cfcc3d91da5630000" + }, + "a5d5b8b62d002def92413710d13b6ff8d4fc7dd3": { + "balance": "0x15af1d78b58c400000" + }, + "a5d96e697d46358d119af7819dc7087f6ae47fef": { + "balance": "0x317bee8af3315a78000" + }, + "a5de5e434fdcdd688f1c31b6fb512cb196724701": { + "balance": "0x2b5e3af16b18800000" + }, + "a5e0fc3c3affed3db6710947d1d6fb017f3e276d": { + "balance": "0x6c6b935b8bbd400000" + }, + "a5e93b49ea7c509de7c44d6cfeddef5910deaaf2": { + "balance": "0x6c6b935b8bbd400000" + }, + "a5e9cd4b74255d22b7d9b27ae8dd43ed6ed0252b": { + "balance": "0x298db2f54411d98000" + }, + "a5f0077b351f6c505cd515dfa6d2fa7f5c4cd287": { + "balance": "0x878678326eac9000000" + }, + "a5f075fd401335577b6683c281e6d101432dc6e0": { + "balance": "0x914878a8c05ee00000" + }, + "a5fe2ce97f0e8c3856be0de5f4dcb2ce5d389a16": { + "balance": "0x13db0b8b6863e0000" + }, + "a5ff62222d80c013cec1a0e8850ed4d354dac16d": { + "balance": "0xb41075c168b180000" + }, + "a609c26dd350c235e44b2b9c1dddccd0a9d9f837": { + "balance": "0x3635c9adc5dea00000" + }, + "a60c1209754f5d87b181da4f0817a81859ef9fd8": { + "balance": "0x2b5e3af16b1880000" + }, + "a6101c961e8e1c15798ffcd0e3201d7786ec373a": { + "balance": "0x14542ba12a337c00000" + }, + "a613456996408af1c2e93e177788ab55895e2b32": { + "balance": "0x15919ff477c88b80000" + }, + "a61887818f914a20e31077290b83715a6b2d6ef9": { + "balance": "0x65ea3db75546600000" + }, + "a61a54df784a44d71b771b87317509211381f200": { + "balance": "0x3635c9adc5dea00000" + }, + "a61cdbadf04b1e54c883de6005fcdf16beb8eb2f": { + "balance": "0x6c6b935b8bbd400000" + }, + "a639acd96b31ba53b0d08763229e1f06fd105e9d": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "a642501004c90ea9c9ed1998ba140a4cd62c6f5f": { + "balance": "0xd94fb8b10f8b18000" + }, + "a644ed922cc237a3e5c4979a995477f36e50bc62": { + "balance": "0x1fa73d845d7e960000" + }, + "a646a95c6d6f59f104c6541d7760757ab392b08c": { + "balance": "0xe3aeb5737240a00000" + }, + "a6484cc684c4c91db53eb68a4da45a6a6bda3067": { + "balance": "0x14542ba12a337c00000" + }, + "a64e5ffb704c2c9139d77ef61d8cdfa31d7a88e9": { + "balance": "0x7c0860e5a80dc0000" + }, + "a65426cff378ed23253513b19f496de45fa7e18f": { + "balance": "0x18650127cc3dc800000" + }, + "a66a4963b27f1ee1932b172be5964e0d3ae54b51": { + "balance": "0x960db77681e940000" + }, + "a67f38819565423aa85f3e3ab61bc763cbab89dd": { + "balance": "0x7377b022c6be080000" + }, + "a68c313445c22d919ee46cc2d0cdff043a755825": { + "balance": "0x41374fd21b0d88000" + }, + "a68e0c30cba3bc5a883e540320f999c7cd558e5c": { + "balance": "0x6192333762a58c8000" + }, + "a690f1a4b20ab7ba34628620de9ca040c43c1963": { + "balance": "0xd8d726b7177a800000" + }, + "a69d7cd17d4842fe03f62a90b2fbf8f6af7bb380": { + "balance": "0x56bc75e2d63100000" + }, + "a6a08252c8595177cc2e60fc27593e2379c81fb1": { + "balance": "0x11651ac3e7a758000" + }, + "a6a0de421ae54f6d17281308f5646d2f39f7775d": { + "balance": "0x6c6b935b8bbd400000" + }, + "a6b2d573297360102c07a18fc21df2e7499ff4eb": { + "balance": "0xd96fce90cfabcc0000" + }, + "a6c910ce4d494a919ccdaaa1fc3b82aa74ba06cf": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "a6e3baa38e104a1e27a4d82869afb1c0ae6eff8d": { + "balance": "0x11140eead8b710000" + }, + "a6eebbe464d39187bf80ca9c13d72027ec5ba8be": { + "balance": "0xa2a15d09519be00000" + }, + "a6f62b8a3d7f11220701ab9ffffcb327959a2785": { + "balance": "0x1b6e291f18dba80000" + }, + "a6f93307f8bce03195fece872043e8a03f7bd11a": { + "balance": "0x9c734bad5111580000" + }, + "a701df79f594901afe1444485e6b20c3bda2b9b3": { + "balance": "0x3635c9adc5dea00000" + }, + "a7024cfd742c1ec13c01fea18d3042e65f1d5dee": { + "balance": "0x263119a28abd0b08000" + }, + "a718aaad59bf395cba2b23e09b02fe0c89816247": { + "balance": "0x36303c97e468780000" + }, + "a7247c53d059eb7c9310f628d7fc6c6a0a773f08": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "a7253763cf4a75df92ca1e766dc4ee8a2745147b": { + "balance": "0x2463770e90a8f500000" + }, + "a72ee666c4b35e82a506808b443cebd5c632c7dd": { + "balance": "0x2b5e3af16b18800000" + }, + "a74444f90fbb54e56f3ac9b6cfccaa4819e4614a": { + "balance": "0x1158e460913d00000" + }, + "a747439ad0d393b5a03861d77296326de8bb9db9": { + "balance": "0x3635c9adc5dea00000" + }, + "a7607b42573bb6f6b4d4f23c7e2a26b3a0f6b6f0": { + "balance": "0x57473d05dabae80000" + }, + "a76929890a7b47fb859196016c6fdd8289ceb755": { + "balance": "0x10f0cf064dd59200000" + }, + "a76b743f981b693072a131b22ba510965c2fefd7": { + "balance": "0xfc936392801c0000" + }, + "a76d3f156251b72c0ccf4b47a3393cbd6f49a9c5": { + "balance": "0x487a9a304539440000" + }, + "a77428bcb2a0db76fc8ef1e20e461a0a32c5ac15": { + "balance": "0x15be6174e1912e0000" + }, + "a7758cecb60e8f614cce96137ef72b4fbd07774a": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "a7775e4af6a23afa201fb78b915e51a515b7a728": { + "balance": "0x68155a43676e00000" + }, + "a77f3ee19e9388bbbb2215c62397b96560132360": { + "balance": "0xad78ebc5ac6200000" + }, + "a7859fc07f756ea7dcebbccd42f05817582d973f": { + "balance": "0x21e19e0c9bab2400000" + }, + "a7966c489f4c748a7ae980aa27a574251767caf9": { + "balance": "0xa2a15d09519be00000" + }, + "a7a3bb6139b0ada00c1f7f1f9f56d994ba4d1fa8": { + "balance": "0x6c6b935b8bbd400000" + }, + "a7a3f153cdc38821c20c5d8c8241b294a3f82b24": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "a7a517d7ad35820b09d497fa7e5540cde9495853": { + "balance": "0x6c6b935b8bbd400000" + }, + "a7c9d388ebd873e66b1713448397d0f37f8bd3a8": { + "balance": "0x10f0cf064dd59200000" + }, + "a7dcbba9b9bf6762c145416c506a71e3b497209c": { + "balance": "0x6c6acc67d7b1d40000" + }, + "a7e74f0bdb278ff0a805a648618ec52b166ff1be": { + "balance": "0x56bc75e2d63100000" + }, + "a7e83772bc200f9006aa2a260dbaa8483dc52b30": { + "balance": "0xb42d5366637e50000" + }, + "a7ef35ce87eda6c28df248785815053ec97a5045": { + "balance": "0x10f0ce949e00f930000" + }, + "a7f9220c8047826bd5d5183f4e676a6d77bfed36": { + "balance": "0x85068976be81c0000" + }, + "a807104f2703d679f8deafc442befe849e42950b": { + "balance": "0x6c6b935b8bbd400000" + }, + "a80cb1738bac08d4f9c08b4deff515545fa8584f": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "a819d2ece122e028c8e8a04a064d02b9029b08b9": { + "balance": "0x3635c9adc5dea00000" + }, + "a825fd5abb7926a67cf36ba246a24bd27be6f6ed": { + "balance": "0xf43fc2c04ee00000" + }, + "a8285539869d88f8a961533755717d7eb65576ae": { + "balance": "0xad78ebc5ac6200000" + }, + "a83382b6e15267974a8550b98f7176c1a353f9be": { + "balance": "0xbffdaf2fc1b1a40000" + }, + "a8446c4781a737ac4328b1e15b8a0b3fbb0fd668": { + "balance": "0x48794d1f246192a0000" + }, + "a8455b411765d6901e311e726403091e42c56683": { + "balance": "0xb73aec3bfe14500000" + }, + "a86613e6c4a4c9c55f5c10bcda32175dcbb4af60": { + "balance": "0x243d6c2e36be6ae0000" + }, + "a86db07d9f812f4796622d40e03d135874a88a74": { + "balance": "0x1158e460913d00000" + }, + "a87f7abd6fa31194289678efb63cf584ee5e2a61": { + "balance": "0xd8d726b7177a800000" + }, + "a880e2a8bf88a1a82648b4013c49c4594c433cc8": { + "balance": "0x1004e2e45fb7ee00000" + }, + "a88577a073fbaf33c4cd202e00ea70ef711b4006": { + "balance": "0x6c6b935b8bbd400000" + }, + "a8914c95b560ec13f140577338c32bcbb77d3a7a": { + "balance": "0x9c2007651b2500000" + }, + "a89ac93b23370472daac337e9afdf642543f3e57": { + "balance": "0x21e19e0c9bab2400000" + }, + "a89df34859edd7c820db887740d8ff9e15157c7b": { + "balance": "0x6c6b935b8bbd400000" + }, + "a8a43c009100616cb4ae4e033f1fc5d7e0b6f152": { + "balance": "0xd588d078b43f4d8000" + }, + "a8a708e84f82db86a35502193b4c6ee9a76ebe8f": { + "balance": "0x3708baed3d68900000" + }, + "a8a7b68adab4e3eadff19ffa58e34a3fcec0d96a": { + "balance": "0x14542ba12a337c00000" + }, + "a8a8dbdd1a85d1beee2569e91ccc4d09ae7f6ea1": { + "balance": "0x13a6b2b564871a00000" + }, + "a8aca748f9d312ec747f8b6578142694c7e9f399": { + "balance": "0x6c6b935b8bbd400000" + }, + "a8b65ba3171a3f77a6350b9daf1f8d55b4d201eb": { + "balance": "0x2862f3b0d222040000" + }, + "a8beb91c2b99c8964aa95b6b4a184b1269fc3483": { + "balance": "0x15af1d78b58c400000" + }, + "a8c0b02faf02cb5519dda884de7bbc8c88a2da81": { + "balance": "0xe7c2518505060000" + }, + "a8c1d6aa41fe3d65f67bd01de2a866ed1ed9ae52": { + "balance": "0x1a055690d9db80000" + }, + "a8cafac32280d021020bf6f2a9782883d7aabe12": { + "balance": "0x56bc75e2d63100000" + }, + "a8db0b9b201453333c757f6ad9bcb555c02da93b": { + "balance": "0x7742b7830f341d0000" + }, + "a8e42a4e33d7526cca19d9a36dcd6e8040d0ea73": { + "balance": "0x3a8c02c5ea2de00000" + }, + "a8e7201ff619faffc332e6ad37ed41e301bf014a": { + "balance": "0x2086ac351052600000" + }, + "a8ee1df5d44b128469e913569ef6ac81eeda4fc8": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "a8ef9ad274436042903e413c3b0c62f5f52ed584": { + "balance": "0x21e19e0c9bab2400000" + }, + "a8f37f0ab3a1d448a9e3ce40965f97a646083a34": { + "balance": "0x11e0e4f8a50bd40000" + }, + "a8f89dd5cc6e64d7b1eeace00702022cd7d2f03d": { + "balance": "0x25f273933db5700000" + }, + "a90476e2efdfee4f387b0f32a50678b0efb573b5": { + "balance": "0x21e19e0c9bab2400000" + }, + "a9145046fa3628cf5fd4c613927be531e6db1fdd": { + "balance": "0x6124fee993bc00000" + }, + "a914cdb571bfd93d64da66a4e108ea134e50d000": { + "balance": "0x4d8738994713798000" + }, + "a91a5a7b341f99c535144e20be9c6b3bb4c28e4d": { + "balance": "0x126753aa224a70b0000" + }, + "a9252551a624ae513719dabe5207fbefb2fd7749": { + "balance": "0x22b1c8c1227a00000" + }, + "a927d48bb6cb814bc609cbcaa9151f5d459a27e1": { + "balance": "0xeb935090064180000" + }, + "a929c8bd71db0c308dac06080a1747f21b1465aa": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "a94bbb8214cf8da0c2f668a2ac73e86248528d4b": { + "balance": "0x340aad21b3b7000000" + }, + "a951b244ff50cfae591d5e1a148df6a938ef2a1a": { + "balance": "0x5e001584dfcf580000" + }, + "a960b1cadd3b5c1a8e6cb3abcaf52ee7c3d9fa88": { + "balance": "0x528bc3545e52680000" + }, + "a961171f5342b173dd70e7bfe5b5ca238b13bcdd": { + "balance": "0xb82794a9244f0c8000" + }, + "a975b077fcb4cc8efcbf838459b6fa243a4159d6": { + "balance": "0x22b1c8c1227a00000" + }, + "a97beb3a48c45f1528284cb6a95f7de453358ec6": { + "balance": "0x690836c0af5f5600000" + }, + "a97e072144499fe5ebbd354acc7e7efb58985d08": { + "balance": "0x90f534608a72880000" + }, + "a986762f7a4f294f2e0b173279ad2c81a2223458": { + "balance": "0x1158e460913d00000" + }, + "a98f109835f5eacd0543647c34a6b269e3802fac": { + "balance": "0x15af1d78b58c400000" + }, + "a997dfc7986a27050848fa1c64d7a7d6e07acca2": { + "balance": "0x7c0860e5a80dc0000" + }, + "a99991cebd98d9c838c25f7a7416d9e244ca250d": { + "balance": "0x3635c9adc5dea00000" + }, + "a9a1cdc33bfd376f1c0d76fb6c84b6b4ac274d68": { + "balance": "0x10f0cf064dd59200000" + }, + "a9a8eca11a23d64689a2aa3e417dbb3d336bb59a": { + "balance": "0xe3453cd3b67ba8000" + }, + "a9acf600081bb55bb6bfbab1815ffc4e17e85a95": { + "balance": "0xad78ebc5ac6200000" + }, + "a9ad1926bc66bdb331588ea8193788534d982c98": { + "balance": "0x65a4da25d3016c00000" + }, + "a9af21acbe482f8131896a228036ba51b19453c3": { + "balance": "0x2b5e021980cc18000" + }, + "a9b2d2e0494eab18e07d37bbb856d80e80f84cd3": { + "balance": "0x21e19e0c9bab2400000" + }, + "a9ba6f413b82fcddf3affbbdd09287dcf50415ca": { + "balance": "0xd8d726b7177a800000" + }, + "a9be88ad1e518b0bbb024ab1d8f0e73f790e0c76": { + "balance": "0x97c9ce4cf6d5c00000" + }, + "a9bfc410dddb20711e45c07387eab30a054e19ac": { + "balance": "0x3e99601edf4e530000" + }, + "a9d4a2bcbe5b9e0869d70f0fe2e1d6aacd45edc5": { + "balance": "0xac6e77ab663a80000" + }, + "a9d64b4f3bb7850722b58b478ba691375e224e42": { + "balance": "0x14542ba12a337c00000" + }, + "a9d6f871ca781a759a20ac3adb972cf12829a208": { + "balance": "0x3224f42723d4540000" + }, + "a9dc0424c6969d798358b393b1933a1f51bee00a": { + "balance": "0x43c33c1937564800000" + }, + "a9e194661aac704ee9dea043974e9692ded84a5d": { + "balance": "0x1a26a51422a0700000" + }, + "a9e28337e6357193d9e2cb236b01be44b81427df": { + "balance": "0x77432217e683600000" + }, + "a9e6e25e656b762558619f147a21985b8874edfe": { + "balance": "0x6c6b935b8bbd400000" + }, + "a9e9dbce7a2cb03694799897bed7c54d155fdaa8": { + "balance": "0xab5ae8fc99d658000" + }, + "a9ed377b7d6ec25971c1a597a3b0f3bead57c98f": { + "balance": "0x15af1d78b58c400000" + }, + "aa0200f1d17e9c54da0647bb96395d57a78538d8": { + "balance": "0x393ef1a5127c800000" + }, + "aa0ca3737337178a0caac3099c584b056c56301c": { + "balance": "0x2fb474098f67c00000" + }, + "aa136b47962bb8b4fb540db4ccf5fdd042ffb8cf": { + "balance": "0x1b1b6bd7af64c70000" + }, + "aa14422d6f0ae5a758194ed15780c838d67f1ee1": { + "balance": "0x60932056c449de80000" + }, + "aa16269aac9c0d803068d82fc79151dadd334b66": { + "balance": "0xd8d726b7177a800000" + }, + "aa167026d39ab7a85635944ed9edb2bfeba11850": { + "balance": "0x1c1d5e21b4fcf680000" + }, + "aa1b3768c16d821f580e76c8e4c8e86d7dc78853": { + "balance": "0x15af1d78b58c400000" + }, + "aa1df92e51dff70b1973e0e924c66287b494a178": { + "balance": "0x1cf84a30a0a0c00000" + }, + "aa2c670096d3f939305325427eb955a8a60db3c5": { + "balance": "0x6c95590699232d0000" + }, + "aa3135cb54f102cbefe09e96103a1a796718ff54": { + "balance": "0x32222d9c331940000" + }, + "aa321fdbd449180db8ddd34f0fe906ec18ee0914": { + "balance": "0x252248deb6e6940000" + }, + "aa3925dc220bb4ae2177b2883078b6dc346ca1b2": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "aa3f29601a1331745e05c42830a15e71938a6237": { + "balance": "0x5c283d410394100000" + }, + "aa47a4ffc979363232c99b99fada0f2734b0aeee": { + "balance": "0x1b8489df4dbff940000" + }, + "aa493d3f4fb866491cf8f800efb7e2324ed7cfe5": { + "balance": "0x5c283d410394100000" + }, + "aa56a65dc4abb72f11bae32b6fbb07444791d5c9": { + "balance": "0x2894e975bf496c0000" + }, + "aa5afcfd8309c2df9d15be5e6a504e7d706624c5": { + "balance": "0x13cf422e305a1378000" + }, + "aa8eb0823b07b0e6d20aadda0e95cf3835be192e": { + "balance": "0x1bc16d674ec800000" + }, + "aa91237e740d25a92f7fa146faa18ce56dc6e1f3": { + "balance": "0x3224f42723d4540000" + }, + "aa960e10c52391c54e15387cc67af827b5316dcc": { + "balance": "0x6c6b935b8bbd400000" + }, + "aa9bd4589535db27fa2bc903ca17d679dd654806": { + "balance": "0x6c6b935b8bbd400000" + }, + "aaa8defe11e3613f11067fb983625a08995a8dfc": { + "balance": "0xad78ebc5ac6200000" + }, + "aaaae68b321402c8ebc13468f341c63c0cf03fce": { + "balance": "0x52663ccab1e1c00000" + }, + "aaad1baade5af04e2b17439e935987bf8c2bb4b9": { + "balance": "0x6c6b935b8bbd400000" + }, + "aab00abf5828d7ebf26b47ceaccdb8ba03325166": { + "balance": "0x21e19e0c9bab2400000" + }, + "aabdb35c1514984a039213793f3345a168e81ff1": { + "balance": "0x10cac896d239000000" + }, + "aaca60d9d700e78596bbbbb1f1e2f70f4627f9d8": { + "balance": "0x3635bb77cb4b860000" + }, + "aaced8a9563b1bc311dbdffc1ae7f57519c4440c": { + "balance": "0x6c6b935b8bbd400000" + }, + "aad2b7f8106695078e6c138ec81a7486aaca1eb2": { + "balance": "0xad78ebc5ac6200000" + }, + "aae61e43cb0d0c96b30699f77e00d711d0a3979b": { + "balance": "0x3635c9adc5dea00000" + }, + "aae732eda65988c3a00c7f472f351c463b1c968e": { + "balance": "0x6c6b935b8bbd400000" + }, + "aaf023fef290a49bb78bb7abc95d669c50d528b0": { + "balance": "0xad78ebc5ac6200000" + }, + "aaf5b207b88b0de4ac40d747cee06e172df6e745": { + "balance": "0x6a7b71d7f51d0900000" + }, + "aaf9ee4b886c6d1e95496fd274235bf4ecfcb07d": { + "balance": "0x4be4e7267b6ae00000" + }, + "aafb7b013aa1f8541c7e327bf650adbd194c208f": { + "balance": "0x499e092d01f4780000" + }, + "ab098633eeee0ccefdf632f9575456f6dd80fc86": { + "balance": "0x2a5a058fc295ed000000" + }, + "ab0ced762e1661fae1a92afb1408889413794825": { + "balance": "0x678a932062e4180000" + }, + "ab14d221e33d544629198cd096ed63dfa28d9f47": { + "balance": "0x14542ba12a337c00000" + }, + "ab209fdca979d0a647010af9a8b52fc7d20d8cd1": { + "balance": "0x1eee2532c7c2d040000" + }, + "ab27ba78c8e5e3daef31ad05aef0ff0325721e08": { + "balance": "0x195ece006e02d00000" + }, + "ab2871e507c7be3965498e8fb462025a1a1c4264": { + "balance": "0x2a034919dfbfbc0000" + }, + "ab3861226ffec1289187fb84a08ec3ed043264e8": { + "balance": "0x3635c9adc5dea00000" + }, + "ab3d86bc82927e0cd421d146e07f919327cdf6f9": { + "balance": "0x678a932062e4180000" + }, + "ab3e62e77a8b225e411592b1af300752fe412463": { + "balance": "0x215f835bc769da80000" + }, + "ab3e78294ba886a0cfd5d3487fb3a3078d338d6e": { + "balance": "0x6acb3df27e1f880000" + }, + "ab4004c0403f7eabb0ea586f212156c4203d67f1": { + "balance": "0x6c6acc67d7b1d40000" + }, + "ab416fe30d58afe5d9454c7fce7f830bcc750356": { + "balance": "0x6353701c605db8000" + }, + "ab4572fbb1d72b575d69ec6ad17333873e8552fc": { + "balance": "0x6c6ac54cda68470000" + }, + "ab5a79016176320973e8cd38f6375530022531c0": { + "balance": "0x3635c9adc5dea00000" + }, + "ab5dfc1ea21adc42cf8c3f6e361e243fd0da61e5": { + "balance": "0x1043561a8829300000" + }, + "ab6b65eab8dfc917ec0251b9db0ecfa0fa032849": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "ab7091932e4bc39dbb552380ca934fd7166d1e6e": { + "balance": "0xb50fcfafebecb00000" + }, + "ab7416ff32254951cbbc624ec7fb45fc7ecaa872": { + "balance": "0x126e72a69a50d00000" + }, + "ab7c42c5e52d641a07ad75099c62928b7f86622f": { + "balance": "0x12361aa21d14ba0000" + }, + "ab7d54c7c6570efca5b4b8ce70f52a5773e5d53b": { + "balance": "0xf283abe9d9f380000" + }, + "ab7e0b83ed9a424c6d1e6a6f87a4dbf06409c7d6": { + "balance": "0x821ab0d44149800000" + }, + "ab84a0f147ad265400002b85029a41fc9ce57f85": { + "balance": "0x3635c9adc5dea00000" + }, + "ab93b26ece0a0aa21365afed1fa9aea31cd54468": { + "balance": "0x572b7b98736c200000" + }, + "ab948a4ae3795cbca13126e19253bdc21d3a8514": { + "balance": "0xad78ebc5ac6200000" + }, + "ab9ad36e5c74ce2e96399f57839431d0e79f96ab": { + "balance": "0x8e3f50b173c100000" + }, + "abb2e6a72a40ba6ed908cdbcec3c5612583132fe": { + "balance": "0x4f2591f896a6500000" + }, + "abc068b4979b0ea64a62d3b7aa897d73810dc533": { + "balance": "0x6acb3df27e1f880000" + }, + "abc45f84db7382dde54c5f7d8938c42f4f3a3bc4": { + "balance": "0xad78ebc5ac6200000" + }, + "abc4caeb474d4627cb6eb456ecba0ecd08ed8ae1": { + "balance": "0xd5967be4fc3f100000" + }, + "abc74706964960dfe0dca3dca79e9216056f1cf4": { + "balance": "0x878678326eac9000000" + }, + "abc9a99e8a2148a55a6d82bd51b98eb5391fdbaf": { + "balance": "0x14542ba12a337c00000" + }, + "abcdbc8f1dd13af578d4a4774a62182bedf9f9be": { + "balance": "0x1fcc27bc459d20000" + }, + "abd154903513b8da4f019f68284b0656a1d0169b": { + "balance": "0x3635c9adc5dea00000" + }, + "abd21eff954fc6a7de26912a7cbb303a6607804e": { + "balance": "0x523c9aa696eb940000" + }, + "abd4d6c1666358c0406fdf3af248f78ece830104": { + "balance": "0x727de34a24f9000000" + }, + "abd9605b3e91acfd777830d16463478ae0fc7720": { + "balance": "0x73f75d1a085ba0000" + }, + "abdc9f1bcf4d19ee96591030e772c334302f7d83": { + "balance": "0x87e5e11a81cb5f80000" + }, + "abde147b2af789eaa586547e66c4fa2664d328a4": { + "balance": "0xd6b6081f34c128000" + }, + "abe07ced6ac5ddf991eff6c3da226a741bd243fe": { + "balance": "0x21e19e0c9bab2400000" + }, + "abf12fa19e82f76c718f01bdca0003674523ef30": { + "balance": "0x6c6b935b8bbd400000" + }, + "abf728cf9312f22128024e7046c251f5dc5901ed": { + "balance": "0x641e8a13563d8f80000" + }, + "abf8ffe0708a99b528cc1ed4e9ce4b0d0630be8c": { + "balance": "0x7ab5c2aeeee6380000" + }, + "abfcf5f25091ce57875fc674dcf104e2a73dd2f2": { + "balance": "0x11164759ffb320000" + }, + "abfe936425dcc7b74b955082bbaaf2a11d78bc05": { + "balance": "0x4be4e7267b6ae00000" + }, + "ac024f594f9558f04943618eb0e6b2ee501dc272": { + "balance": "0x6c6b935b8bbd400000" + }, + "ac122a03cd058c122e5fe17b872f4877f9df9572": { + "balance": "0x6ac5c62d9486070000" + }, + "ac142eda1157b9a9a64390df7e6ae694fac98905": { + "balance": "0xad78ebc5ac6200000" + }, + "ac1dfc984b71a19929a81d81f04a7cbb14073703": { + "balance": "0x2086ac351052600000" + }, + "ac21c1e5a3d7e0b50681679dd6c792dbca87decb": { + "balance": "0x152d02c7e14af6800000" + }, + "ac2889b5966f0c7f9edb42895cb69d1c04f923a2": { + "balance": "0x10f0cf064dd59200000" + }, + "ac28b5edea05b76f8c5f97084541277c96696a4c": { + "balance": "0x3635c9adc5dea00000" + }, + "ac2c8e09d06493a63858437bd20be01962450365": { + "balance": "0x678a932062e4180000" + }, + "ac2e766dac3f648f637ac6713fddb068e4a4f04d": { + "balance": "0xaadec983fcff40000" + }, + "ac3900298dd14d7cc96d4abb428da1bae213ffed": { + "balance": "0x53ca12974851c010000" + }, + "ac3da526cfce88297302f34c49ca520dc271f9b2": { + "balance": "0x2b5e3af16b18800000" + }, + "ac4460a76e6db2b9fcd152d9c7718d9ac6ed8c6f": { + "balance": "0xad78ebc5ac6200000" + }, + "ac4acfc36ed6094a27e118ecc911cd473e8fb91f": { + "balance": "0x61913e14403c0c0000" + }, + "ac4cc256ae74d624ace80db078b2207f57198f6b": { + "balance": "0x6c7974123f64a40000" + }, + "ac4ee9d502e7d2d2e99e59d8ca7d5f00c94b4dd6": { + "balance": "0x3635c9adc5dea00000" + }, + "ac52b77e15664814f39e4f271be641308d91d6cc": { + "balance": "0xbed1d0263d9f00000" + }, + "ac5999a89d2dd286d5a80c6dee7e86aad40f9e12": { + "balance": "0xd255d112e103a00000" + }, + "ac5f627231480d0d95302e6d89fc32cb1d4fe7e3": { + "balance": "0xad78ebc5ac6200000" + }, + "ac608e2bac9dd20728d2947effbbbf900a9ce94b": { + "balance": "0x1454b0db37568fc0000" + }, + "ac6d02e9a46b379fac4ac9b1d7b5d47bc850ce16": { + "balance": "0x5f68e8131ecf800000" + }, + "ac6f68e837cf1961cb14ab47446da168a16dde89": { + "balance": "0x487a9a304539440000" + }, + "ac77bdf00fd5985b5db12bbef800380abc2a0677": { + "balance": "0x3635c9adc5dea00000" + }, + "ac7e03702723cb16ee27e22dd0b815dc2d5cae9f": { + "balance": "0x3635c9adc5dea000000" + }, + "ac8b509aefea1dbfaf2bb33500d6570b6fd96d51": { + "balance": "0x62a992e53a0af00000" + }, + "ac8e87ddda5e78fcbcb9fa7fc3ce038f9f7d2e34": { + "balance": "0x6c6b935b8bbd400000" + }, + "ac9fff68c61b011efbecf038ed72db97bb9e7281": { + "balance": "0x205b4dfa1ee74780000" + }, + "aca1e6bc64cc3180f620e94dc5b1bcfd8158e45d": { + "balance": "0x6c6b935b8bbd400000" + }, + "aca2a838330b17302da731d30db48a04f0f207c1": { + "balance": "0x487a9a304539440000" + }, + "acaaddcbf286cb0e215dda55598f7ff0f4ada5c6": { + "balance": "0x3635c9adc5dea00000" + }, + "acb94338554bc488cc88ae2d9d94080d6bdf8410": { + "balance": "0x3635c9adc5dea00000" + }, + "acbc2d19e06c3babbb5b6f052b6bf7fc37e07229": { + "balance": "0xad78ebc5ac6200000" + }, + "acbd185589f7a68a67aa4b1bd65077f8c64e4e21": { + "balance": "0xad78ebc5ac6200000" + }, + "acc062702c59615d3444ef6214b8862b009a02ed": { + "balance": "0x514fcb24ff9c500000" + }, + "acc0909fda2ea6b7b7a88db7a0aac868091ddbf6": { + "balance": "0x133765f1e26c78000" + }, + "acc1c78786ab4d2b3b277135b5ba123e0400486b": { + "balance": "0x44591d67fecc80000" + }, + "acc46a2a555c74ded4a2bd094e821b97843b40c0": { + "balance": "0x692ae8897081d00000" + }, + "acc59f3b30ceffc56461cc5b8df48902240e0e7b": { + "balance": "0x6c6b935b8bbd400000" + }, + "acce01e0a70610dc70bb91e9926fa9957f372fba": { + "balance": "0x1d1c5f3eda20c40000" + }, + "acd8dd91f714764c45677c63d852e56eb9eece2e": { + "balance": "0x6c6b935b8bbd400000" + }, + "ace2abb63b0604409fbde3e716d2876d44e8e5dd": { + "balance": "0x83d6c7aab63600000" + }, + "acec91ef6941cf630ba9a3e787a012f4a2d91dd4": { + "balance": "0x10f0cf064dd592000000" + }, + "ad0a4ae478e9636e88c604f242cf5439c6d45639": { + "balance": "0xbed1d0263d9f000000" + }, + "ad1799aad7602b4540cd832f9db5f11150f1687a": { + "balance": "0x6c6b935b8bbd400000" + }, + "ad1d68a038fd2586067ef6d135d9628e79c2c924": { + "balance": "0xfe09a5279e2abc0000" + }, + "ad2a5c00f923aaf21ab9f3fb066efa0a03de2fb2": { + "balance": "0x3635bb77cb4b860000" + }, + "ad3565d52b688added08168b2d3872d17d0a26ae": { + "balance": "0x56bc75e2d63100000" + }, + "ad377cd25eb53e83ae091a0a1d2b4516f484afde": { + "balance": "0x692ae8897081d00000" + }, + "ad414d29cb7ee973fec54e22a388491786cf5402": { + "balance": "0x2f6f10780d22cc00000" + }, + "ad44357e017e244f476931c7b8189efee80a5d0a": { + "balance": "0x1043561a8829300000" + }, + "ad57aa9d00d10c439b35efcc0becac2e3955c313": { + "balance": "0xad78ebc5ac6200000" + }, + "ad59a78eb9a74a7fbdaefafa82eada8475f07f95": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "ad5a8d3c6478b69f657db3837a2575ef8e1df931": { + "balance": "0x20156e104c1b30000" + }, + "ad660dec825522a9f62fcec3c5b731980dc286ea": { + "balance": "0xa2a15d09519be00000" + }, + "ad6628352ed3390bafa86d923e56014cfcb360f4": { + "balance": "0x6c6b935b8bbd400000" + }, + "ad728121873f0456d0518b80ab6580a203706595": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "ad732c976593eec4783b4e2ecd793979780bfedb": { + "balance": "0x6c6b935b8bbd400000" + }, + "ad7dd053859edff1cb6f9d2acbed6dd5e332426f": { + "balance": "0x6acb3df27e1f880000" + }, + "ad80d865b85c34d2e6494b2e7aefea6b9af184db": { + "balance": "0xd8d726b7177a800000" + }, + "ad8bfef8c68a4816b3916f35cb7bfcd7d3040976": { + "balance": "0x878678326eac9000000" + }, + "ad8e48a377695de014363a523a28b1a40c78f208": { + "balance": "0x3635c9adc5dea00000" + }, + "ad910a23d6850613654af786337ad2a70868ac6d": { + "balance": "0x6c68ccd09b022c0000" + }, + "ad927e03d1599a78ca2bf0cad2a183dceb71eac0": { + "balance": "0x6acb3df27e1f880000" + }, + "ad92ca066edb7c711dfc5b166192d1edf8e77185": { + "balance": "0x79f905c6fd34e800000" + }, + "ad94235fc3b3f47a2413af31e884914908ef0c45": { + "balance": "0x1b1b0142d815840000" + }, + "ad9e97a0482f353a05c0f792b977b6c7e811fa5f": { + "balance": "0xad78ebc5ac6200000" + }, + "ad9f4c890a3b511cee51dfe6cfd7f1093b76412c": { + "balance": "0x1b767cbfeb0ce40000" + }, + "adaa0e548c035affed64ca678a963fabe9a26bfd": { + "balance": "0x3cb71f51fc5580000" + }, + "adb948b1b6fefe207de65e9bbc2de98e605d0b57": { + "balance": "0x6c6b935b8bbd400000" + }, + "adc19ec835afe3e58d87dc93a8a9213c90451326": { + "balance": "0x6adbe5342282000000" + }, + "adc8228ef928e18b2a807d00fb3c6c79cd1d9e96": { + "balance": "0x13c69df334ee80000" + }, + "addb26317227f45c87a2cb90dc4cfd02fb23caf8": { + "balance": "0x3635c9adc5dea00000" + }, + "ade6f8163bf7c7bb4abe8e9893bd0cc112fe8872": { + "balance": "0x11c25d004d01f80000" + }, + "adeb204aa0c38e179e81a94ed8b3e7d53047c26b": { + "balance": "0x20f5b1eaad8d800000" + }, + "adeb52b604e5f77faaac88275b8d6b49e9f9f97f": { + "balance": "0x71426b00956ed20000" + }, + "adf1acfe99bc8c14b304c8d905ba27657b8a7bc4": { + "balance": "0x43c33c1937564800000" + }, + "adf85203c8376a5fde9815384a350c3879c4cb93": { + "balance": "0x3e31fc675815aa0000" + }, + "adff0d1d0b97471e76d789d2e49c8a74f9bd54ff": { + "balance": "0x65ea3db75546600000" + }, + "ae062c448618643075de7a0030342dced63dbad7": { + "balance": "0x2cc6cd8cc282b30000" + }, + "ae10e27a014f0d306baf266d4897c89aeee2e974": { + "balance": "0x43c33c1937564800000" + }, + "ae126b382cf257fad7f0bc7d16297e54cc7267da": { + "balance": "0x1043561a8829300000" + }, + "ae13a08511110f32e53be4127845c843a1a57c7b": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "ae179a460db66326743d24e67523a57b246daf7f": { + "balance": "0x10007ae7ce5bbe40000" + }, + "ae222865799079aaf4f0674a0cdaab02a6d570ff": { + "balance": "0x6c6b935b8bbd400000" + }, + "ae239acffd4ebe2e1ba5b4170572dc79cc6533ec": { + "balance": "0x28a857425466f800000" + }, + "ae2f9c19ac76136594432393b0471d08902164d3": { + "balance": "0x25df05c6a897e40000" + }, + "ae34861d342253194ffc6652dfde51ab44cad3fe": { + "balance": "0x194608686316bd8000" + }, + "ae36f7452121913e800e0fcd1a65a5471c23846f": { + "balance": "0x8e3f50b173c100000" + }, + "ae3f98a443efe00f3e711d525d9894dc9a61157b": { + "balance": "0x1004e2e45fb7ee0000" + }, + "ae47e2609cfafe369d66d415d939de05081a9872": { + "balance": "0x5baecf025f9b6500000" + }, + "ae4f122e35c0b1d1e4069291457c83c07f965fa3": { + "balance": "0x3635c9adc5dea00000" + }, + "ae5055814cb8be0c117bb8b1c8d2b63b4698b728": { + "balance": "0x1bc932ec573a38000" + }, + "ae538c73c5b38d8d584d7ebdadefb15cabe48357": { + "balance": "0x3627e8f712373c0000" + }, + "ae57cc129a96a89981dac60d2ffb877d5dc5e432": { + "balance": "0x3c3a2394b396550000" + }, + "ae5aa1e6c2b60f6fd3efe721bb4a719cbe3d6f5d": { + "balance": "0x2b24c6b55a5e620000" + }, + "ae5c9bdad3c5c8a1220444aea5c229c1839f1d64": { + "balance": "0x19e2a4c818b9060000" + }, + "ae5ce3355a7ba9b332760c0950c2bc45a85fa9a0": { + "balance": "0x15af1d78b58c400000" + }, + "ae5d221afcd3d29355f508eadfca408ce33ca903": { + "balance": "0x152d02c7e14af6800000" + }, + "ae635bf73831119d2d29c0d04ff8f8d8d0a57a46": { + "balance": "0x487a9a304539440000" + }, + "ae648155a658370f929be384f7e001047e49dd46": { + "balance": "0x2df24ae32be20440000" + }, + "ae6f0c73fdd77c489727512174d9b50296611c4c": { + "balance": "0x14542ba12a337c00000" + }, + "ae70e69d2c4a0af818807b1a2705f79fd0b5dbc4": { + "balance": "0x35659ef93f0fc40000" + }, + "ae7739124ed153052503fc101410d1ffd8cd13b7": { + "balance": "0x3634fb9f1489a70000" + }, + "ae78bb849139a6ba38ae92a09a69601cc4cb62d1": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "ae842210f44d14c4a4db91fc9d3b3b50014f7bf7": { + "balance": "0xd8d726b7177a800000" + }, + "ae842e81858ecfedf6506c686dc204ac15bf8b24": { + "balance": "0x22b1c8c1227a00000" + }, + "ae8954f8d6166de507cf61297d0fc7ca6b9e7128": { + "balance": "0x1043561a8829300000" + }, + "ae9ecd6bdd952ef497c0050ae0ab8a82a91898ce": { + "balance": "0x1a055690d9db80000" + }, + "ae9f5c3fbbe0c9bcbf1af8ff74ea280b3a5d8b08": { + "balance": "0x5dc892aa1131c80000" + }, + "aead88d689416b1c91f2364421375b7d3c70fb2e": { + "balance": "0x6c6b935b8bbd400000" + }, + "aeadfcd0978edad74a32bd01a0a51d37f246e661": { + "balance": "0xe18398e7601900000" + }, + "aeb916ebf49d0f86c13f7331cef19e129937512d": { + "balance": "0x2085655b8d1b0a0000" + }, + "aebd4f205de799b64b3564b256d42a711d37ef99": { + "balance": "0x3fcf8b4574f84e0000" + }, + "aec27ce2133e82d052520afb5c576d9f7eb93ed2": { + "balance": "0xdd04120ba09cfe60000" + }, + "aec27ff5d7f9ddda91183f46f9d52543b6cd2b2f": { + "balance": "0x18650127cc3dc80000" + }, + "aee49d68adedb081fd43705a5f78c778fb90de48": { + "balance": "0x1158e460913d00000" + }, + "aef5b12258a18dec07d5ec2e316574919d79d6d6": { + "balance": "0x6c6b935b8bbd400000" + }, + "aefcfe88c826ccf131d54eb4ea9eb80e61e1ee25": { + "balance": "0x126e72a69a50d00000" + }, + "af06f5fa6d1214ec43967d1bd4dde74ab814a938": { + "balance": "0x4c53ecdc18a600000" + }, + "af1148ef6c8e103d7530efc91679c9ac27000993": { + "balance": "0xad78ebc5ac6200000" + }, + "af203e229d7e6d419df4378ea98715515f631485": { + "balance": "0x6acb3df27e1f880000" + }, + "af2058c7282cf67c8c3cf930133c89617ce75d29": { + "balance": "0x177224aa844c7200000" + }, + "af26f7c6bf453e2078f08953e4b28004a2c1e209": { + "balance": "0x56bc75e2d63100000" + }, + "af3087e62e04bf900d5a54dc3e946274da92423b": { + "balance": "0x1158e460913d00000" + }, + "af3614dcb68a36e45a4e911e62796247222d595b": { + "balance": "0x7a81065f1103bc0000" + }, + "af3615c789d0b1152ad4db25fe5dcf222804cf62": { + "balance": "0x3635c9adc5dea00000" + }, + "af3cb5965933e7dad883693b9c3e15beb68a4873": { + "balance": "0x6c6b935b8bbd400000" + }, + "af4493e8521ca89d95f5267c1ab63f9f45411e1b": { + "balance": "0xad78ebc5ac6200000" + }, + "af4cf41785161f571d0ca69c94f8021f41294eca": { + "balance": "0x215f835bc769da80000" + }, + "af529bdb459cc185bee5a1c58bf7e8cce25c150d": { + "balance": "0xaadec983fcff40000" + }, + "af67fd3e127fd9dc36eb3fcd6a80c7be4f7532b2": { + "balance": "0x5a87e7d7f5f6580000" + }, + "af771039345a343001bc0f8a5923b126b60d509c": { + "balance": "0x35659ef93f0fc40000" + }, + "af7f79cb415a1fb8dbbd094607ee8d41fb7c5a3b": { + "balance": "0x21e19e0c9bab2400000" + }, + "af87d2371ef378957fbd05ba2f1d66931b01e2b8": { + "balance": "0x25f273933db5700000" + }, + "af880fc7567d5595cacce15c3fc14c8742c26c9e": { + "balance": "0x73f75d1a085ba0000" + }, + "af8e1dcb314c950d3687434d309858e1a8739cd4": { + "balance": "0xe7eeba3410b740000" + }, + "af992dd669c0883e5515d3f3112a13f617a4c367": { + "balance": "0x6c6b935b8bbd400000" + }, + "afa1d5ad38fed44759c05b8993c1aa0dace19f40": { + "balance": "0x4563918244f400000" + }, + "afa539586e4719174a3b46b9b3e663a7d1b5b987": { + "balance": "0x10f0cf064dd59200000" + }, + "afa6946effd5ff53154f82010253df47ae280ccc": { + "balance": "0x6acb3df27e1f880000" + }, + "afc8ebe8988bd4105acc4c018e546a1e8f9c7888": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "afcc7dbb8356d842d43ae7e23c8422b022a30803": { + "balance": "0x66ffcbfd5e5a3000000" + }, + "afd019ff36a09155346b69974815a1c912c90aa4": { + "balance": "0x6c6b935b8bbd400000" + }, + "afdac5c1cb56e245bf70330066a817eaafac4cd1": { + "balance": "0x1158e460913d00000" + }, + "afdd1b786162b8317e20f0e979f4b2ce486d765d": { + "balance": "0x1158e460913d00000" + }, + "aff1045adf27a1aa329461b24de1bae9948a698b": { + "balance": "0x1cf84a30a0a0c0000" + }, + "aff107960b7ec34ed690b665024d60838c190f70": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "aff11ccf699304d5f5862af86083451c26e79ae5": { + "balance": "0x6c5db2a4d815dc0000" + }, + "aff161740a6d909fe99c59a9b77945c91cc91448": { + "balance": "0x340aad21b3b700000" + }, + "affc99d5ebb4a84fe7788d97dce274b038240438": { + "balance": "0x10f0cf064dd59200000" + }, + "affea0473722cb7f0e0e86b9e11883bf428d8d54": { + "balance": "0x692ae8897081d00000" + }, + "b00996b0566ecb3e7243b8227988dcb352c21899": { + "balance": "0x28a857425466f800000" + }, + "b01e389b28a31d8e4995bdd7d7c81beeab1e4119": { + "balance": "0x3635c9adc5dea00000" + }, + "b02d062873334545cea29218e4057760590f7423": { + "balance": "0xacb6a1c7d93a880000" + }, + "b02fa29387ec12e37f6922ac4ce98c5b09e0b00f": { + "balance": "0x6c6b935b8bbd400000" + }, + "b036916bdacf94b69e5a8a65602975eb026104dd": { + "balance": "0x1158e460913d00000" + }, + "b041310fe9eed6864cedd4bee58df88eb4ed3cac": { + "balance": "0x21e19e0c9bab2400000" + }, + "b055af4cadfcfdb425cf65ba6431078f07ecd5ab": { + "balance": "0x56bc75e2d63100000" + }, + "b0571153db1c4ed7acaefe13ecdfdb72e7e4f06a": { + "balance": "0x110cff796ac195200000" + }, + "b06eab09a610c6a53d56a946b2c43487ac1d5b2d": { + "balance": "0x3635c9adc5dea00000" + }, + "b07249e055044a9155359a402937bbd954fe48b6": { + "balance": "0x56bc75e2d63100000" + }, + "b07618328a901307a1b7a0d058fcd5786e9e72fe": { + "balance": "0x667495d4a4330ce0000" + }, + "b079bb4d9866143a6da72ae7ac0022062981315c": { + "balance": "0x29331e6558f0e00000" + }, + "b07bcc085ab3f729f24400416837b69936ba8873": { + "balance": "0x6c6d84bccdd9ce0000" + }, + "b07bcf1cc5d4462e5124c965ecf0d70dc27aca75": { + "balance": "0x56bc75e2d631000000" + }, + "b07cb9c12405b711807543c4934465f87f98bd2d": { + "balance": "0x6c6b935b8bbd400000" + }, + "b07fdeaff91d4460fe6cd0e8a1b0bd8d22a62e87": { + "balance": "0x11d2529f3535ab00000" + }, + "b09fe6d4349b99bc37938054022d54fca366f7af": { + "balance": "0x2a5a058fc295ed000000" + }, + "b0aa00950c0e81fa3210173e729aaf163a27cd71": { + "balance": "0x878678326eac9000000" + }, + "b0ac4eff6680ee14169cdadbffdb30804f6d25f5": { + "balance": "0x6c6b935b8bbd400000" + }, + "b0b36af9aeeedf97b6b02280f114f13984ea3260": { + "balance": "0x35659ef93f0fc40000" + }, + "b0b779b94bfa3c2e1f587bcc9c7e21789222378f": { + "balance": "0x54069233bf7f780000" + }, + "b0baeb30e313776c4c6d247402ba4167afcda1cc": { + "balance": "0x6acb3df27e1f880000" + }, + "b0bb29a861ea1d424d45acd4bfc492fb8ed809b7": { + "balance": "0x4563918244f400000" + }, + "b0c1b177a220e41f7c74d07cde8569c21c75c2f9": { + "balance": "0x12f939c99edab800000" + }, + "b0c7ce4c0dc3c2bbb99cc1857b8a455f611711ce": { + "balance": "0xd8d726b7177a800000" + }, + "b0cef8e8fb8984a6019f01c679f272bbe68f5c77": { + "balance": "0x83d6c7aab63600000" + }, + "b0d32bd7e4e695b7b01aa3d0416f80557dba9903": { + "balance": "0x3739ff0f6e613300000" + }, + "b0d3c9872b85056ea0c0e6d1ecf7a77e3ce6ab85": { + "balance": "0x10f08eda8e555098000" + }, + "b0e469c886593815b3495638595daef0665fae62": { + "balance": "0x692ae8897081d00000" + }, + "b0e760bb07c081777345e0578e8bc898226d4e3b": { + "balance": "0x6c6b935b8bbd400000" + }, + "b1043004ec1941a8cf4f2b00b15700ddac6ff17e": { + "balance": "0x3635c9adc5dea00000" + }, + "b105dd3d987cffd813e9c8500a80a1ad257d56c6": { + "balance": "0x6c6acc67d7b1d40000" + }, + "b10fd2a647102f881f74c9fbc37da632949f2375": { + "balance": "0x22b1c8c1227a00000" + }, + "b115ee3ab7641e1aa6d000e41bfc1ec7210c2f32": { + "balance": "0x2c0bb3dd30c4e200000" + }, + "b1178ad47383c31c8134a1941cbcd474d06244e2": { + "balance": "0x3635c9adc5dea00000" + }, + "b1179589e19db9d41557bbec1cb24ccc2dec1c7f": { + "balance": "0x152d02c7e14af6800000" + }, + "b119e79aa9b916526581cbf521ef474ae84dcff4": { + "balance": "0x4fba1001e5befe0000" + }, + "b11fa7fb270abcdf5a2eab95aa30c4b53636efbf": { + "balance": "0x2b5e3af16b18800000" + }, + "b124bcb6ffa430fcae2e86b45f27e3f21e81ee08": { + "balance": "0x6c6b935b8bbd400000" + }, + "b129a5cb7105fe810bd895dc7206a991a4545488": { + "balance": "0x1a055690d9db80000" + }, + "b12ed07b8a38ad5506363fc07a0b6d799936bdaf": { + "balance": "0x21e19e0c9bab2400000" + }, + "b134c004391ab4992878337a51ec242f42285742": { + "balance": "0x6c6b935b8bbd400000" + }, + "b13f93af30e8d7667381b2b95bc1a699d5e3e129": { + "balance": "0x16c4abbebea0100000" + }, + "b1459285863ea2db3759e546ceb3fb3761f5909c": { + "balance": "0x3cd72a894087e08000" + }, + "b146a0b925553cf06fcaf54a1b4dfea621290757": { + "balance": "0x6c6e59e67c78540000" + }, + "b14a7aaa8f49f2fb9a8102d6bbe4c48ae7c06fb2": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "b14bbeff70720975dc6191b2a44ff49f2672873c": { + "balance": "0x7c0860e5a80dc0000" + }, + "b14cc8de33d6338236539a489020ce4655a32bc6": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "b14ddb0386fb606398b8cc47565afae00ff1d66a": { + "balance": "0xa12aff083e66f00000" + }, + "b153f828dd076d4a7c1c2574bb2dee1a44a318a8": { + "balance": "0x15af1d78b58c400000" + }, + "b1540e94cff3465cc3d187e7c8e3bdaf984659e2": { + "balance": "0xa215e44390e3330000" + }, + "b158db43fa62d30e65f3d09bf781c7b67372ebaa": { + "balance": "0x6c5db2a4d815dc0000" + }, + "b161725fdcedd17952d57b23ef285b7e4b1169e8": { + "balance": "0x2b6dfed3664958000" + }, + "b16479ba8e7df8f63e1b95d149cd8529d735c2da": { + "balance": "0x2de33a6aac32548000" + }, + "b166e37d2e501ae73c84142b5ffb5aa655dd5a99": { + "balance": "0x6c5db2a4d815dc0000" + }, + "b183ebee4fcb42c220e47774f59d6c54d5e32ab1": { + "balance": "0x56f7a9c33c04d10000" + }, + "b188078444027e386798a8ae68698919d5cc230d": { + "balance": "0xe7eeba3410b740000" + }, + "b1896a37e5d8825a2d01765ae5de629977de8352": { + "balance": "0xad78ebc5ac6200000" + }, + "b18e67a5050a1dc9fb190919a33da838ef445014": { + "balance": "0x1158e460913d00000" + }, + "b1a2b43a7433dd150bb82227ed519cd6b142d382": { + "balance": "0x946d620d744b880000" + }, + "b1c0d08b36e184f9952a4037e3e53a667d070a4e": { + "balance": "0x3635c9adc5dea00000" + }, + "b1c328fb98f2f19ab6646f0a7c8c566fda5a8540": { + "balance": "0x878678326eac900000" + }, + "b1c751786939bba0d671a677a158c6abe7265e46": { + "balance": "0x21e19e0c9bab2400000" + }, + "b1cd4bdfd104489a026ec99d597307a04279f173": { + "balance": "0x43c33c1937564800000" + }, + "b1cf94f8091505055f010ab4bac696e0ca0f67a1": { + "balance": "0x55a6e79ccd1d300000" + }, + "b1d6b01b94d854fe8b374aa65e895cf22aa2560e": { + "balance": "0x32f51edbaaa3300000" + }, + "b1dba5250ba9625755246e067967f2ad2f0791de": { + "balance": "0x10f0cf064dd592000000" + }, + "b1e2dd95e39ae9775c55aeb13f12c2fa233053ba": { + "balance": "0x6c6b935b8bbd400000" + }, + "b1e6e810c24ab0488de9e01e574837829f7c77d0": { + "balance": "0x15af1d78b58c400000" + }, + "b1e9c5f1d21e61757a6b2ee75913fc5a1a4101c3": { + "balance": "0x6c6b935b8bbd400000" + }, + "b203d29e6c56b92699c4b92d1f6f84648dc4cfbc": { + "balance": "0x15af1d78b58c400000" + }, + "b216dc59e27c3d7279f5cd5bb2becfb2606e14d9": { + "balance": "0x15af1d78b58c400000" + }, + "b21b7979bf7c5ca01fa82dd640b41c39e6c6bc75": { + "balance": "0x6c6acc67d7b1d40000" + }, + "b223bf1fbf80485ca2b5567d98db7bc3534dd669": { + "balance": "0xd8d726b7177a800000" + }, + "b22d5055d9623135961e6abd273c90deea16a3e7": { + "balance": "0x4be4e7267b6ae00000" + }, + "b22dadd7e1e05232a93237baed98e0df92b1869e": { + "balance": "0x6c6b935b8bbd400000" + }, + "b234035f7544463ce1e22bc553064684c513cd51": { + "balance": "0xd89fa3dc48dcf0000" + }, + "b247cf9c72ec482af3eaa759658f793d670a570c": { + "balance": "0x31708ae00454400000" + }, + "b2676841ee9f2d31c172e82303b0fe9bbf9f1e09": { + "balance": "0xad78ebc5ac6200000" + }, + "b279c7d355c2880392aad1aa21ee867c3b3507df": { + "balance": "0x445be3f2ef87940000" + }, + "b27c1a24204c1e118d75149dd109311e07c073ab": { + "balance": "0xa80d24677efef00000" + }, + "b28181a458a440f1c6bb1de8400281a3148f4c35": { + "balance": "0x14620c57dddae00000" + }, + "b28245037cb192f75785cb86cbfe7c930da258b0": { + "balance": "0x3635c9adc5dea000000" + }, + "b287f7f8d8c3872c1b586bcd7d0aedbf7e732732": { + "balance": "0x1158e460913d00000" + }, + "b28bb39f3466517cd46f979cf59653ee7d8f152e": { + "balance": "0x18650127cc3dc80000" + }, + "b28dbfc6499894f73a71faa00abe0f4bc9d19f2a": { + "balance": "0x56bc75e2d63100000" + }, + "b2968f7d35f208871631c6687b3f3daeabc6616c": { + "balance": "0x875c47f289f760000" + }, + "b29f5b7c1930d9f97a115e067066f0b54db44b3b": { + "balance": "0x3635c9adc5dea00000" + }, + "b2a144b1ea67b9510f2267f9da39d3f93de26642": { + "balance": "0x6c6b935b8bbd400000" + }, + "b2a2c2111612fb8bbb8e7dd9378d67f1a384f050": { + "balance": "0x1158e460913d00000" + }, + "b2a498f03bd7178bd8a789a00f5237af79a3e3f8": { + "balance": "0x41bad155e6512200000" + }, + "b2aa2f1f8e93e79713d92cea9ffce9a40af9c82d": { + "balance": "0x6c6b935b8bbd400000" + }, + "b2b516fdd19e7f3864b6d2cf1b252a4156f1b03b": { + "balance": "0x2e983c76115fc0000" + }, + "b2b7cdb4ff4b61d5b7ce0b2270bbb5269743ec04": { + "balance": "0x6c6b935b8bbd400000" + }, + "b2bdbedf95908476d7148a370cc693743628057f": { + "balance": "0xd8d726b7177a800000" + }, + "b2bfaa58b5196c5cb7f89de15f479d1838de713d": { + "balance": "0x1236efcbcbb340000" + }, + "b2c53efa33fe4a3a1a80205c73ec3b1dbcad0602": { + "balance": "0x6801dab35918938000" + }, + "b2d0360515f17daba90fcbac8205d569b915d6ac": { + "balance": "0x14542ba12a337c00000" + }, + "b2d1e99af91231858e7065dd1918330dc4c747d5": { + "balance": "0x3894f0e6f9b9f700000" + }, + "b2d9ab9664bcf6df203c346fc692fd9cbab9205e": { + "balance": "0x17be78976065180000" + }, + "b2ddb786d3794e270187d0451ad6c8b79e0e8745": { + "balance": "0x15af1d78b58c400000" + }, + "b2e085fddd1468ba07415b274e734e11237fb2a9": { + "balance": "0x56bc75e2d63100000" + }, + "b2e9d76bf50fc36bf7d3944b63e9ca889b699968": { + "balance": "0x9032ea62b74b100000" + }, + "b2f9c972c1e9737755b3ff1b3088738396395b26": { + "balance": "0x43c33c1937564800000" + }, + "b2fc84a3e50a50af02f94da0383ed59f71ff01d7": { + "balance": "0x65a4da25d3016c00000" + }, + "b3050beff9de33c80e1fa15225e28f2c413ae313": { + "balance": "0x25f273933db5700000" + }, + "b31196714a48dff726ea9433cd2912f1a414b3b3": { + "balance": "0x914878a8c05ee00000" + }, + "b3145b74506d1a8d047cdcdc55392a7b5350799a": { + "balance": "0x1b6229741c0d3d5d8000" + }, + "b320834836d1dbfda9e7a3184d1ad1fd4320ccc0": { + "balance": "0x3635c9adc5dea00000" + }, + "b323dcbf2eddc5382ee4bbbb201ca3931be8b438": { + "balance": "0x6c6b935b8bbd400000" + }, + "b32400fd13c5500917cb037b29fe22e7d5228f2d": { + "balance": "0x878678326eac9000000" + }, + "b325674c01e3f7290d5226339fbeac67d221279f": { + "balance": "0x97c9ce4cf6d5c00000" + }, + "b32825d5f3db249ef4e85cc4f33153958976e8bc": { + "balance": "0x1b2df9d219f5798000" + }, + "b32af3d3e8d075344926546f2e32887bf93b16bd": { + "balance": "0xad78ebc5ac6200000" + }, + "b32f1c2689a5ce79f1bc970b31584f1bcf2283e7": { + "balance": "0x1158e460913d00000" + }, + "b33c0323fbf9c26c1d8ac44ef74391d0804696da": { + "balance": "0x1158e460913d00000" + }, + "b34f04b8db65bba9c26efc4ce6efc50481f3d65d": { + "balance": "0x43c33c1937564800000" + }, + "b3557d39b5411b84445f5f54f38f62d2714d0087": { + "balance": "0x2086ac351052600000" + }, + "b358e97c70b605b1d7d729dfb640b43c5eafd1e7": { + "balance": "0x43c33c1937564800000" + }, + "b35e8a1c0dac7e0e66dbac736a592abd44012561": { + "balance": "0xcfce55aa12b30000" + }, + "b3667894b7863c068ad344873fcff4b5671e0689": { + "balance": "0x43c33c1937564800000" + }, + "b3717731dad65132da792d876030e46ac227bb8a": { + "balance": "0x3635c9adc5dea00000" + }, + "b3731b046c8ac695a127fd79d0a5d5fa6ae6d12e": { + "balance": "0x6c4fd1ee246e780000" + }, + "b37c2b9f50637bece0ca959208aefee6463ba720": { + "balance": "0x15af1d78b58c400000" + }, + "b388b5dfecd2c5e4b596577c642556dbfe277855": { + "balance": "0x1158e460913d00000" + }, + "b38c4e537b5df930d65a74d043831d6b485bbde4": { + "balance": "0x15af1d78b58c400000" + }, + "b39139576194a0866195151f33f2140ad1cc86cf": { + "balance": "0x152d02c7e14af6800000" + }, + "b39f4c00b2630cab7db7295ef43d47d501e17fd7": { + "balance": "0xd8d726b7177a800000" + }, + "b3a64b1176724f5409e1414a3523661baee74b4a": { + "balance": "0x16368ff4ff9c10000" + }, + "b3a6bd41f9d9c3201e050b87198fbda399342210": { + "balance": "0xc461e1dd1029b58000" + }, + "b3a8c2cb7d358e5739941d945ba9045a023a8bbb": { + "balance": "0x3635c9adc5dea00000" + }, + "b3ae54fba09d3ee1d6bdd1e957923919024c35fa": { + "balance": "0x38d2cee65b22a8000" + }, + "b3b7f493b44a2c8d80ec78b1cdc75a652b73b06c": { + "balance": "0x6c6b935b8bbd400000" + }, + "b3c228731d186d2ded5b5fbe004c666c8e469b86": { + "balance": "0x19274b259f6540000" + }, + "b3c260609b9df4095e6c5dff398eeb5e2df49985": { + "balance": "0xdc55fdb17647b0000" + }, + "b3c65b845aba6cd816fbaae983e0e46c82aa8622": { + "balance": "0x3635c9adc5dea00000" + }, + "b3c94811e7175b148b281c1a845bfc9bb6fbc115": { + "balance": "0xad78ebc5ac6200000" + }, + "b3e20eb4de18bd060221689894bee5aeb25351ee": { + "balance": "0x3fc80cce516598000" + }, + "b3e3c439069880156600c2892e448d4136c92d9b": { + "balance": "0x2e141ea081ca080000" + }, + "b3f82a87e59a39d0d2808f0751eb72c2329cdcc5": { + "balance": "0x10f0cf064dd59200000" + }, + "b3fc1d6881abfcb8becc0bb021b8b73b7233dd91": { + "balance": "0x2b5e3af16b1880000" + }, + "b40594c4f3664ef849cca6227b8a25aa690925ee": { + "balance": "0xd8d726b7177a800000" + }, + "b41eaf5d51a5ba1ba39bb418dbb54fab750efb1f": { + "balance": "0x3635c9adc5dea00000" + }, + "b424d68d9d0d00cec1938c854e15ffb880ba0170": { + "balance": "0xad78ebc5ac6200000" + }, + "b4256273962bf631d014555cc1da0dcc31616b49": { + "balance": "0x6c6b935b8bbd400000" + }, + "b43067fe70d9b55973ba58dc64dd7f311e554259": { + "balance": "0xad78ebc5ac6200000" + }, + "b43657a50eecbc3077e005d8f8d94f377876bad4": { + "balance": "0x1ec1b3a1ff75a0000" + }, + "b43c27f7a0a122084b98f483922541c8836cee2c": { + "balance": "0x26c29e47c4844c0000" + }, + "b4413576869c08f9512ad311fe925988a52d3414": { + "balance": "0x21e19e0c9bab2400000" + }, + "b44605552471a6eee4daab71ff3bb41326d473e0": { + "balance": "0x2d7e3d51ba53d00000" + }, + "b447571dacbb3ecbb6d1cf0b0c8f3838e52324e2": { + "balance": "0x1a318667fb4058000" + }, + "b44783c8e57b480793cbd69a45d90c7b4f0c48ac": { + "balance": "0x1158e460913d00000" + }, + "b44815a0f28e569d0e921a4ade8fb2642526497a": { + "balance": "0x302379bf2ca2e0000" + }, + "b4496ddb27799a222457d73979116728e8a1845b": { + "balance": "0x8d819ea65fa62f8000" + }, + "b4524c95a7860e21840296a616244019421c4aba": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "b45cca0d36826662683cf7d0b2fdac687f02d0c4": { + "balance": "0x3635c9adc5dea00000" + }, + "b46440c797a556e04c7d9104660491f96bb076bf": { + "balance": "0xcec76f0e71520000" + }, + "b46ace865e2c50ea4698d216ab455dff5a11cd72": { + "balance": "0x3635c9adc5dea00000" + }, + "b46d1182e5aacaff0d26b2fcf72f3c9ffbcdd97d": { + "balance": "0xaa2a603cdd7f2c0000" + }, + "b48921c9687d5510744584936e8886bdbf2df69b": { + "balance": "0x3635c9adc5dea00000" + }, + "b498bb0f520005b6216a4425b75aa9adc52d622b": { + "balance": "0xd8d726b7177a800000" + }, + "b4b11d109f608fa8edd3fea9f8c315649aeb3d11": { + "balance": "0x10f0cf064dd59200000" + }, + "b4b14bf45455d0ab0803358b7524a72be1a2045b": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "b4b185d943ee2b58631e33dff5af6854c17993ac": { + "balance": "0x3635c9adc5dea00000" + }, + "b4bf24cb83686bc469869fefb044b909716993e2": { + "balance": "0x6c6b935b8bbd400000" + }, + "b4c20040ccd9a1a3283da4d4a2f365820843d7e2": { + "balance": "0x3635c9adc5dea00000" + }, + "b4c8170f7b2ab536d1d9a25bdd203ae1288dc3d5": { + "balance": "0xad78ebc5ac6200000" + }, + "b4d82f2e69943f7de0f5f7743879406fac2e9cec": { + "balance": "0x22b1c8c1227a00000" + }, + "b4dd460cd016725a64b22ea4f8e06e06674e033e": { + "balance": "0x1231bb8748547a80000" + }, + "b4dd5499daeb2507fb2de12297731d4c72b16bb0": { + "balance": "0x1158e460913d00000" + }, + "b5046cb3dc1dedbd364514a2848e44c1de4ed147": { + "balance": "0x37b7d9bb820405e0000" + }, + "b508f987b2de34ae4cf193de85bff61389621f88": { + "balance": "0x14542ba12a337c00000" + }, + "b50955aa6e341571986608bdc891c2139f540cdf": { + "balance": "0x6acb3df27e1f880000" + }, + "b50c149a1906fad2786ffb135aab501737e9e56f": { + "balance": "0x150894e849b3900000" + }, + "b50c9f5789ae44e2dce017c714caf00c830084c2": { + "balance": "0x155bd9307f9fe80000" + }, + "b514882c979bb642a80dd38754d5b8c8296d9a07": { + "balance": "0x33c5499031720c0000" + }, + "b51ddcb4dd4e8ae6be336dd9654971d9fec86b41": { + "balance": "0x16d464f83de2948000" + }, + "b51e558eb5512fbcfa81f8d0bd938c79ebb5242b": { + "balance": "0x26c29e47c4844c0000" + }, + "b523fff9749871b35388438837f7e6e0dea9cb6b": { + "balance": "0x6c6b935b8bbd400000" + }, + "b52dfb45de5d74e3df208332bc571c809b8dcf32": { + "balance": "0x14542ba12a337c00000" + }, + "b535f8db879fc67fec58824a5cbe6e5498aba692": { + "balance": "0x678a932062e4180000" + }, + "b537d36a70eeb8d3e5c80de815225c1158cb92c4": { + "balance": "0x5150ae84a8cdf00000" + }, + "b53bcb174c2518348b818aece020364596466ba3": { + "balance": "0x6c6b935b8bbd400000" + }, + "b5493ef173724445cf345c035d279ba759f28d51": { + "balance": "0x1158e460913d00000" + }, + "b553d25d6b5421e81c2ad05e0b8ba751f8f010e3": { + "balance": "0x6c6b935b8bbd400000" + }, + "b55474ba58f0f2f40e6cbabed4ea176e011fcad6": { + "balance": "0x6acb3df27e1f880000" + }, + "b555d00f9190cc3677aef314acd73fdc39399259": { + "balance": "0x6c6b935b8bbd400000" + }, + "b557ab9439ef50d237b553f02508364a466a5c03": { + "balance": "0xad78ebc5ac6200000" + }, + "b56a780028039c81caf37b6775c620e786954764": { + "balance": "0x6c6b935b8bbd400000" + }, + "b56ad2aec6c8c3f19e1515bbb7dd91285256b639": { + "balance": "0x3635c9adc5dea00000" + }, + "b57413060af3f14eb479065f1e9d19b3757ae8cc": { + "balance": "0x22b1c8c1227a00000" + }, + "b57549bfbc9bdd18f736b22650e48a73601fa65c": { + "balance": "0x182d7e4cfda0380000" + }, + "b577b6befa054e9c040461855094b002d7f57bd7": { + "balance": "0x1823f3cf621d23400000" + }, + "b57b04fa23d1203fae061eac4542cb60f3a57637": { + "balance": "0xa5aa85009e39c0000" + }, + "b5870ce342d43343333673038b4764a46e925f3e": { + "balance": "0x3635c9adc5dea00000" + }, + "b587b44a2ca79e4bc1dd8bfdd43a207150f2e7e0": { + "balance": "0x222c8eb3ff66400000" + }, + "b589676d15a04448344230d4ff27c95edf122c49": { + "balance": "0x3635c9adc5dea00000" + }, + "b58b52865ea55d8036f2fab26098b352ca837e18": { + "balance": "0xfc936392801c0000" + }, + "b5906b0ae9a28158e8ac550e39da086ee3157623": { + "balance": "0xad78ebc5ac6200000" + }, + "b5a4679685fa14196c2e9230c8c4e33bffbc10e2": { + "balance": "0x4be4e7267b6ae00000" + }, + "b5a589dd9f4071dbb6fba89b3f5d5dae7d96c163": { + "balance": "0x6c6b935b8bbd400000" + }, + "b5a606f4ddcbb9471ec67f658caf2b00ee73025e": { + "balance": "0xea756ea92afc740000" + }, + "b5ad5157dda921e6bafacd9086ae73ae1f611d3f": { + "balance": "0x6c6b935b8bbd400000" + }, + "b5add1e7809f7d03069bfe883b0a932210be8712": { + "balance": "0x3635c9adc5dea00000" + }, + "b5ba29917c78a1d9e5c5c713666c1e411d7f693a": { + "balance": "0xa80d24677efef00000" + }, + "b5c816a8283ca4df68a1a73d63bd80260488df08": { + "balance": "0xad78ebc5ac6200000" + }, + "b5cac5ed03477d390bb267d4ebd46101fbc2c3da": { + "balance": "0xaadec983fcff40000" + }, + "b5cdbc4115406f52e5aa85d0fea170d2979cc7ba": { + "balance": "0x487a9a304539440000" + }, + "b5d9934d7b292bcf603b2880741eb760288383a0": { + "balance": "0xe7c2518505060000" + }, + "b5dd50a15da34968890a53b4f13fe1af081baaaa": { + "balance": "0xd8d726b7177a800000" + }, + "b5fa8184e43ed3e0b8ab91216461b3528d84fd09": { + "balance": "0x914878a8c05ee00000" + }, + "b5fb7ea2ddc1598b667a9d57dd39e85a38f35d56": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "b600429752f399c80d0734744bae0a022eca67c6": { + "balance": "0x1158e460913d00000" + }, + "b600feab4aa96c537504d96057223141692c193a": { + "balance": "0x15af1d78b58c400000" + }, + "b6047cdf932db3e4045f4976122341537ed5961e": { + "balance": "0x1158e460913d00000" + }, + "b615e940143eb57f875893bc98a61b3d618c1e8c": { + "balance": "0x1158e460913d00000" + }, + "b61c34fcacda701a5aa8702459deb0e4ae838df8": { + "balance": "0x7695a92c20d6fe00000" + }, + "b63064bd3355e6e07e2d377024125a33776c4afa": { + "balance": "0x8375a2abcca24400000" + }, + "b635a4bc71fb28fdd5d2c322983a56c284426e69": { + "balance": "0x93739534d28680000" + }, + "b646df98b49442746b61525c81a3b04ba3106250": { + "balance": "0x6acb3df27e1f880000" + }, + "b65941d44c50d24666670d364766e991c02e11c2": { + "balance": "0x2086ac351052600000" + }, + "b65bd780c7434115162027565223f44e5498ff8c": { + "balance": "0x43c30fb0884a96c0000" + }, + "b66411e3a02dedb726fa79107dc90bc1cae64d48": { + "balance": "0x6c6b935b8bbd400000" + }, + "b66675142e3111a1c2ea1eb2419cfa42aaf7a234": { + "balance": "0x3635c9adc5dea00000" + }, + "b66f92124b5e63035859e390628869dbdea9485e": { + "balance": "0x215f835bc769da80000" + }, + "b672734afcc224e2e609fc51d4f059732744c948": { + "balance": "0x1004e2e45fb7ee0000" + }, + "b6771b0bf3427f9ae7a93e7c2e61ee63941fdb08": { + "balance": "0x3fb26692954bfc00000" + }, + "b67a80f170197d96cdcc4ab6cba627b4afa6e12c": { + "balance": "0x821ab0d44149800000" + }, + "b68899e7610d4c93a23535bcc448945ba1666f1c": { + "balance": "0xad78ebc5ac6200000" + }, + "b6a82933c9eadabd981e5d6d60a6818ff806e36b": { + "balance": "0x15af1d78b58c400000" + }, + "b6aacb8cb30bab2ae4a2424626e6e12b02d04605": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "b6b34a263f10c3d2eceb0acc559a7b2ab85ce565": { + "balance": "0xd8d726b7177a800000" + }, + "b6bfe1c3ef94e1846fb9e3acfe9b50c3e9069233": { + "balance": "0x6c6acc67d7b1d40000" + }, + "b6cd7432d5161be79768ad45de3e447a07982063": { + "balance": "0xd8d726b7177a800000" + }, + "b6ce4dc560fc73dc69fb7a62e388db7e72ea764f": { + "balance": "0x345df169e9a3580000" + }, + "b6decf82969819ba02de29b9b593f21b64eeda0f": { + "balance": "0x281d901f4fdd100000" + }, + "b6e6c3222b6b6f9be2875d2a89f127fb64100fe2": { + "balance": "0x1b21d5323cc30200000" + }, + "b6e8afd93dfa9af27f39b4df06076710bee3dfab": { + "balance": "0x15af1d78b58c40000" + }, + "b6f78da4f4d041b3bc14bc5ba519a5ba0c32f128": { + "balance": "0x247dd32c3fe195048000" + }, + "b6fb39786250081426a342c70d47ee521e5bc563": { + "balance": "0x32d26d12e980b600000" + }, + "b70dba9391682b4a364e77fe99256301a6c0bf1f": { + "balance": "0xad78ebc5ac6200000" + }, + "b71623f35107cf7431a83fb3d204b29ee0b1a7f4": { + "balance": "0x11164759ffb320000" + }, + "b71a13ba8e95167b80331b52d69e37054fe7a826": { + "balance": "0xad78ebc5ac6200000" + }, + "b71b62f4b448c02b1201cb5e394ae627b0a560ee": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "b72220ade364d0369f2d2da783ca474d7b9b34ce": { + "balance": "0x1b1ab319f5ec750000" + }, + "b7230d1d1ff2aca366963914a79df9f7c5ea2c98": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "b7240af2af90b33c08ae9764103e35dce3638428": { + "balance": "0x1cadd2fe9686e638000" + }, + "b727a9fc82e1cffc5c175fa1485a9befa2cdbdd1": { + "balance": "0x3627e8f712373c0000" + }, + "b72c2a011c0df50fbb6e28b20ae1aad217886790": { + "balance": "0xd8d726b7177a800000" + }, + "b7382d37db0398ac72410cf9813de9f8e1ec8dad": { + "balance": "0x3636c25e66ece70000" + }, + "b73b4ff99eb88fd89b0b6d57a9bc338e886fa06a": { + "balance": "0x1bc16d674ec800000" + }, + "b73d6a77559c86cf6574242903394bacf96e3570": { + "balance": "0x4f1a77ccd3ba00000" + }, + "b74372dbfa181dc9242f39bf1d3731dffe2bdacf": { + "balance": "0x6c6b935b8bbd400000" + }, + "b7479dab5022c4d5dbaaf8de171b4e951dd1a457": { + "balance": "0x4563918244f400000" + }, + "b749b54e04d5b19bdcedfb84da7701ab478c27ae": { + "balance": "0x914878a8c05ee00000" + }, + "b74ed2666001c16333cf7af59e4a3d4860363b9c": { + "balance": "0xa7ebd5e4363a00000" + }, + "b75149e185f6e3927057739073a1822ae1cf0df2": { + "balance": "0xd8d8583fa2d52f0000" + }, + "b753a75f9ed10b21643a0a3dc0517ac96b1a4068": { + "balance": "0x15c8185b2c1ff40000" + }, + "b756ad52f3bf74a7d24c67471e0887436936504c": { + "balance": "0x43c33c1937564800000" + }, + "b7576e9d314df41ec5506494293afb1bd5d3f65d": { + "balance": "0x1158e460913d00000" + }, + "b758896f1baa864f17ebed16d953886fee68aae6": { + "balance": "0x3635c9adc5dea00000" + }, + "b768b5234eba3a9968b34d6ddb481c8419b3655d": { + "balance": "0xcfce55aa12b30000" + }, + "b782bfd1e2de70f467646f9bc09ea5b1fcf450af": { + "balance": "0xe7eeba3410b740000" + }, + "b7a2c103728b7305b5ae6e961c94ee99c9fe8e2b": { + "balance": "0xa968163f0a57b400000" + }, + "b7a31a7c38f3db09322eae11d2272141ea229902": { + "balance": "0x6c6b935b8bbd400000" + }, + "b7a6791c16eb4e2162f14b6537a02b3d63bfc602": { + "balance": "0x2a526391ac93760000" + }, + "b7a7f77c348f92a9f1100c6bd829a8ac6d7fcf91": { + "balance": "0x62a992e53a0af00000" + }, + "b7c077946674ba9341fb4c747a5d50f5d2da6415": { + "balance": "0x3635c9adc5dea00000" + }, + "b7c0d0cc0b4d342d4062bac624ccc3c70cc6da3f": { + "balance": "0xd8d726b7177a800000" + }, + "b7c9f12b038e73436d17e1c12ffe1aeccdb3f58c": { + "balance": "0x1d460162f516f00000" + }, + "b7cc6b1acc32d8b295df68ed9d5e60b8f64cb67b": { + "balance": "0x1043561a8829300000" + }, + "b7ce684b09abda53389a875369f71958aeac3bdd": { + "balance": "0x6c6b935b8bbd400000" + }, + "b7d12e84a2e4c4a6345af1dd1da9f2504a2a996e": { + "balance": "0xad78ebc5ac6200000" + }, + "b7d252ee9402b0eef144295f0e69f0db586c0871": { + "balance": "0x23c757072b8dd00000" + }, + "b7d581fe0af1ec383f3b3c416783f385146a7612": { + "balance": "0x43c33c1937564800000" + }, + "b7f67314cb832e32e63b15a40ce0d7ffbdb26985": { + "balance": "0x398279264a818d0000" + }, + "b8040536958d5998ce4bec0cfc9c2204989848e9": { + "balance": "0x52ea70d498fd50a0000" + }, + "b8310a16cc6abc465007694b930f978ece1930bd": { + "balance": "0x281d901f4fdd100000" + }, + "b834acf3015322c58382eeb2b79638906e88b6de": { + "balance": "0x5150ae84a8cdf000000" + }, + "b84b53d0bb125656cddc52eb852ab71d7259f3d5": { + "balance": "0x3635c9adc5dea000000" + }, + "b84c8b9fd33ece00af9199f3cf5fe0cce28cd14a": { + "balance": "0xcf152640c5c8300000" + }, + "b85218f342f8012eda9f274e63ce2152b2dcfdab": { + "balance": "0xa80d24677efef00000" + }, + "b8555010776e3c5cb311a5adeefe9e92bb9a64b9": { + "balance": "0xd8d726b7177a800000" + }, + "b85f26dd0e72d9c29ebaf697a8af77472c2b58b5": { + "balance": "0x28519acc7190c700000" + }, + "b85ff03e7b5fc422981fae5e9941dacbdaba7584": { + "balance": "0x487a9a304539440000" + }, + "b86607021b62d340cf2652f3f95fd2dc67698bdf": { + "balance": "0x10f0cf064dd59200000" + }, + "b87de1bcd29269d521b8761cc39cfb4319d2ead5": { + "balance": "0x3635c9adc5dea00000" + }, + "b87f5376c2de0b6cc3c179c06087aa473d6b4674": { + "balance": "0x487a9a304539440000" + }, + "b884add88d83dc564ab8e0e02cbdb63919aea844": { + "balance": "0x6c6b935b8bbd400000" + }, + "b88a37c27f78a617d5c091b7d5b73a3761e65f2a": { + "balance": "0x6c6b935b8bbd400000" + }, + "b8947822d5ace7a6ad8326e95496221e0be6b73d": { + "balance": "0x1158e460913d00000" + }, + "b89c036ed7c492879921be41e10ca1698198a74c": { + "balance": "0x62a992e53a0af00000" + }, + "b89f4632df5909e58b2a9964f74feb9a3b01e0c5": { + "balance": "0x48875bcc6e7cbeb8000" + }, + "b8a79c84945e47a9c3438683d6b5842cff7684b1": { + "balance": "0x6c6b935b8bbd400000" + }, + "b8a979352759ba09e35aa5935df175bff678a108": { + "balance": "0x1158e460913d00000" + }, + "b8ab39805bd821184f6cbd3d2473347b12bf175c": { + "balance": "0x6685ac1bfe32c0000" + }, + "b8ac117d9f0dba80901445823c4c9d4fa3fedc6e": { + "balance": "0x3564c4427a8fc7d8000" + }, + "b8bc9bca7f71b4ed12e620438d620f53c114342f": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "b8bedd576a4b4c2027da735a5bc3f533252a1808": { + "balance": "0x6c6b935b8bbd400000" + }, + "b8c2703d8c3f2f44c584bc10e7c0a6b64c1c097e": { + "balance": "0x12cddb8ead6f9f80000" + }, + "b8cc0f060aad92d4eb8b36b3b95ce9e90eb383d7": { + "balance": "0x1fc3842bd1f071c00000" + }, + "b8d2ddc66f308c0158ae3ccb7b869f7d199d7b32": { + "balance": "0x2dcbf4840eca000000" + }, + "b8d389e624a3a7aebce4d3e5dbdf6cdc29932aed": { + "balance": "0xad78ebc5ac6200000" + }, + "b8d531a964bcea13829620c0ced72422dadb4cca": { + "balance": "0x93715cc5ab8a70000" + }, + "b8d5c324a8209d7c8049d0d4aede02ba80ab578b": { + "balance": "0x393928629fff75e8000" + }, + "b8f20005b61352ffa7699a1b52f01f5ab39167f1": { + "balance": "0x21e19e0c9bab2400000" + }, + "b8f30758faa808dbc919aa7b425ec922b93b8129": { + "balance": "0x3636d7af5ec98e0000" + }, + "b9013c51bd078a098fae05bf2ace0849c6be17a5": { + "balance": "0x4563918244f400000" + }, + "b9144b677c2dc614ceefdf50985f1183208ea64c": { + "balance": "0x6c6b935b8bbd400000" + }, + "b916b1a01cdc4e56e7657715ea37e2a0f087d106": { + "balance": "0x826e3181e027068000" + }, + "b91d9e916cd40d193db60e79202778a0087716fc": { + "balance": "0x15f1ba7f4716200000" + }, + "b9231eb26e5f9e4b4d288f03906704fab96c87d6": { + "balance": "0x42bf06b78ed3b500000" + }, + "b92427ad7578b4bfe20a9f63a7c5506d5ca12dc8": { + "balance": "0x6c6b935b8bbd400000" + }, + "b927abd2d28aaaa24db31778d27419df8e1b04bb": { + "balance": "0x17e11c2a26f478000" + }, + "b94d47b3c052a5e50e4261ae06a20f45d8eee297": { + "balance": "0x6c6b935b8bbd400000" + }, + "b95396daaa490df2569324fcc6623be052f132ca": { + "balance": "0x6c6b935b8bbd400000" + }, + "b959dce02e91d9db02b1bd8b7d17a9c41a97af09": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "b95c9b10aa981cf4a67a71cc52c504dee8cf58bd": { + "balance": "0xd8d726b7177a800000" + }, + "b95cfda8465ba9c2661b249fc3ab661bdfa35ff0": { + "balance": "0x114a4e79a2c2108000" + }, + "b96841cabbc7dbd69ef0cf8f81dff3c8a5e21570": { + "balance": "0x28a857425466f800000" + }, + "b97a6733cd5fe99864b3b33460d1672434d5cafd": { + "balance": "0x6c65bbaa46c2cf8000" + }, + "b981ad5e6b7793a23fc6c1e8692eb2965d18d0da": { + "balance": "0x21e18d2c821c7520000" + }, + "b98ca31785ef06be49a1e47e864f60d076ca472e": { + "balance": "0xd8d726b7177a800000" + }, + "b9920fd0e2c735c256463caa240fb7ac86a93dfa": { + "balance": "0x5f68e8131ecf800000" + }, + "b992a967308c02b98af91ee760fd3b6b4824ab0e": { + "balance": "0x6c6b935b8bbd400000" + }, + "b9a985501ee950829b17fae1c9cf348c3156542c": { + "balance": "0xff17517ca9a620000" + }, + "b9b0a3219a3288d9b35b091b14650b8fe23dce2b": { + "balance": "0x2f6f10780d22cc00000" + }, + "b9cf71b226583e3a921103a5316f855a65779d1b": { + "balance": "0x5150ae84a8cdf000000" + }, + "b9e90c1192b3d5d3e3ab0700f1bf655f5dd4347a": { + "balance": "0x1b19e50b44977c0000" + }, + "b9fd3833e88e7cf1fa9879bdf55af4b99cd5ce3f": { + "balance": "0x3635c9adc5dea00000" + }, + "ba0249e01d945bef93ee5ec61925e03c5ca509fd": { + "balance": "0xd8d726b7177a800000" + }, + "ba0f39023bdb29eb1862a9f9059cab5d306e662f": { + "balance": "0x6c6b935b8bbd400000" + }, + "ba10f2764290f875434372f79dbf713801caac01": { + "balance": "0x33c5499031720c0000" + }, + "ba1531fb9e791896bcf3a80558a359f6e7c144bd": { + "balance": "0xd5967be4fc3f100000" + }, + "ba176dbe3249e345cd4fa967c0ed13b24c47e586": { + "balance": "0x15aef9f1c31c7f0000" + }, + "ba1f0e03cb9aa021f4dcebfa94e5c889c9c7bc9e": { + "balance": "0x6d190c475169a200000" + }, + "ba1fcaf223937ef89e85675503bdb7ca6a928b78": { + "balance": "0x22b1c8c1227a000000" + }, + "ba24fc436753a739db2c8d40e6d4d04c528e86fa": { + "balance": "0x2c0bb3dd30c4e200000" + }, + "ba42f9aace4c184504abf5425762aca26f71fbdc": { + "balance": "0x207077dd8a79c0000" + }, + "ba469aa5c386b19295d4a1b5473b540353390c85": { + "balance": "0x6c6b935b8bbd400000" + }, + "ba6440aeb3737b8ef0f1af9b0c15f4c214ffc7cf": { + "balance": "0x3635c9adc5dea00000" + }, + "ba6d31b9a261d640b5dea51ef2162c3109f1eba8": { + "balance": "0x10f0cf064dd59200000" + }, + "ba70e8b4759c0c3c82cc00ac4e9a94dd5bafb2b8": { + "balance": "0x3043fa33c412d70000" + }, + "ba8a63f3f40de4a88388bc50212fea8e064fbb86": { + "balance": "0x6c6b935b8bbd400000" + }, + "ba8e46d69d2e2343d86c60d82cf42c2041a0c1c2": { + "balance": "0x56bc75e2d63100000" + }, + "baa4b64c2b15b79f5f204246fd70bcbd86e4a92a": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "bac8922c4acc7d2cb6fd59a14eb45cf3e702214b": { + "balance": "0x2b5e3af16b18800000" + }, + "bad235d5085dc7b068a67c412677b03e1836884c": { + "balance": "0x6c6b935b8bbd400000" + }, + "bad4425e171c3e72975eb46ac0a015db315a5d8f": { + "balance": "0x6c6b935b8bbd400000" + }, + "badc2aef9f5951a8d78a6b35c3d0b3a4e6e2e739": { + "balance": "0x14542ba12a337c00000" + }, + "bade43599e02f84f4c3014571c976b13a36c65ab": { + "balance": "0xd8d726b7177a800000" + }, + "bae9b82f7299631408659dd74e891cb8f3860fe5": { + "balance": "0x6acb3df27e1f880000" + }, + "bb0366a7cfbd3445a70db7fe5ae34885754fd468": { + "balance": "0x14def2c42ebd6400000" + }, + "bb076aac92208069ea318a31ff8eeb14b7e996e3": { + "balance": "0x813ca56906d340000" + }, + "bb0857f1c911b24b86c8a70681473fe6aaa1cce2": { + "balance": "0x56bc75e2d63100000" + }, + "bb19bf91cbad74cceb5f811db27e411bc2ea0656": { + "balance": "0xf43fc2c04ee00000" + }, + "bb27c6a7f91075475ab229619040f804c8ec7a6a": { + "balance": "0x21e19e0c9bab2400000" + }, + "bb371c72c9f0316cea2bd9c6fbb4079e775429ef": { + "balance": "0x5f68e8131ecf800000" + }, + "bb3b010b18e6e2be1135871026b7ba15ea0fde24": { + "balance": "0x2207c80309b77700000" + }, + "bb3b9005f46fd2ca3b30162599928c77d9f6b601": { + "balance": "0x1b1ae7f2b1bf7db0000" + }, + "bb3fc0a29c034d710812dcc775c8cab9d28d6975": { + "balance": "0x39d4e844d1cf5f0000" + }, + "bb48eaf516ce2dec3e41feb4c679e4957641164f": { + "balance": "0xcf152640c5c8300000" + }, + "bb4b4a4b548070ff41432c9e08a0ca6fa7bc9f76": { + "balance": "0x2e141ea081ca080000" + }, + "bb56a404723cff20d0685488b05a02cdc35aacaa": { + "balance": "0x1158e460913d00000" + }, + "bb618e25221ad9a740b299ed1406bc3934b0b16d": { + "balance": "0x3635c9adc5dea00000" + }, + "bb61a04bffd57c10470d45c39103f64650347616": { + "balance": "0x3635c9adc5dea00000" + }, + "bb6823a1bd819f13515538264a2de052b4442208": { + "balance": "0x16368ff4ff9c10000" + }, + "bb6c284aac8a69b75cddb00f28e145583b56bece": { + "balance": "0x6c6b935b8bbd400000" + }, + "bb75cb5051a0b0944b4673ca752a97037f7c8c15": { + "balance": "0xad78ebc5ac6200000" + }, + "bb993b96ee925ada7d99d786573d3f89180ce3aa": { + "balance": "0x6c6b935b8bbd400000" + }, + "bba3c68004248e489573abb2743677066b24c8a7": { + "balance": "0x6c6b935b8bbd400000" + }, + "bba4fac3c42039d828e742cde0efffe774941b39": { + "balance": "0x6c6ad382d4fb610000" + }, + "bba8ab22d2fedbcfc63f684c08afdf1c175090b5": { + "balance": "0x55f29f37e4e3b8000" + }, + "bba976f1a1215f7512871892d45f7048acd356c8": { + "balance": "0x6c6b935b8bbd400000" + }, + "bbab000b0408ed015a37c04747bc461ab14e151b": { + "balance": "0x14542ba12a337c00000" + }, + "bbabf6643beb4bd01c120bd0598a0987d82967d1": { + "balance": "0xb5328178ad0f2a0000" + }, + "bbb4ee1d82f2e156442cc93338a2fc286fa28864": { + "balance": "0x4a4491bd6dcd280000" + }, + "bbb5a0f4802c8648009e8a6998af352cde87544f": { + "balance": "0x52d542804f1ce0000" + }, + "bbb643d2187b364afc10a6fd368d7d55f50d1a3c": { + "balance": "0x3635c9adc5dea00000" + }, + "bbb8ffe43f98de8eae184623ae5264e424d0b8d7": { + "balance": "0x5d53ffde928080000" + }, + "bbbd6ecbb5752891b4ceb3cce73a8f477059376f": { + "balance": "0x1f399b1438a100000" + }, + "bbbf39b1b67995a42241504f9703d2a14a515696": { + "balance": "0x55a6e79ccd1d300000" + }, + "bbc8eaff637e94fcc58d913c7770c88f9b479277": { + "balance": "0xad78ebc5ac6200000" + }, + "bbc9d8112e5beb02dd29a2257b1fe69b3536a945": { + "balance": "0x6c6b935b8bbd400000" + }, + "bbca65b3266ea2fb73a03f921635f912c7bede00": { + "balance": "0x6acb3df27e1f880000" + }, + "bbf84292d954acd9e4072fb860b1504106e077ae": { + "balance": "0x5150ae84a8cdf00000" + }, + "bbf85aaaa683738f073baef44ac9dc34c4c779ea": { + "balance": "0x6c6b935b8bbd400000" + }, + "bbf8616d97724af3def165d0e28cda89b800009a": { + "balance": "0x62ef12e2b17618000" + }, + "bbfe0a830cace87b7293993a7e9496ce64f8e394": { + "balance": "0x14542ba12a337c00000" + }, + "bc0ca4f217e052753614d6b019948824d0d8688b": { + "balance": "0x15af1d78b58c400000" + }, + "bc0e8745c3a549445c2be900f52300804ab56289": { + "balance": "0x7029bf5dd4c53b28000" + }, + "bc0f98598f88056a26339620923b8f1eb074a9fd": { + "balance": "0xad78ebc5ac6200000" + }, + "bc1609d685b76b48ec909aa099219022f89b2ccd": { + "balance": "0x40138b917edfb80000" + }, + "bc171e53d17ac9b61241ae436deec7af452e7496": { + "balance": "0x121ea68c114e5100000" + }, + "bc1b021a78fde42d9b5226d6ec26e06aa3670090": { + "balance": "0x4563918244f400000" + }, + "bc1e80c181616342ebb3fb3992072f1b28b802c6": { + "balance": "0xd8d726b7177a800000" + }, + "bc237148d30c13836ffa2cad520ee4d2e5c4eeff": { + "balance": "0x6acb3df27e1f880000" + }, + "bc46d537cf2edd403565bde733b2e34b215001bd": { + "balance": "0x43c33c1937564800000" + }, + "bc4e471560c99c8a2a4b1b1ad0c36aa6502b7c4b": { + "balance": "0x28a857425466f800000" + }, + "bc62b3096a91e7dc11a1592a293dd2542150d751": { + "balance": "0x3635c9adc5dea00000" + }, + "bc69a0d2a31c3dbf7a9122116901b2bdfe9802a0": { + "balance": "0xa2a15d09519be00000" + }, + "bc6b58364bf7f1951c309e0cba0595201cd73f9a": { + "balance": "0x62401a457e45f80000" + }, + "bc73f7b1ca3b773b34249ada2e2c8a9274cc17c2": { + "balance": "0x6c6b935b8bbd400000" + }, + "bc7afc8477412274fc265df13c054473427d43c6": { + "balance": "0x70c95920ce3250000" + }, + "bc967fe4418c18b99858966d870678dca2b88879": { + "balance": "0x1d9cbdd8d7ed2100000" + }, + "bc999e385c5aebcac8d6f3f0d60d5aa725336d0d": { + "balance": "0x6c6b935b8bbd400000" + }, + "bc9c95dfab97a574cea2aa803b5caa197cef0cff": { + "balance": "0x16c4abbebea0100000" + }, + "bc9e0ec6788f7df4c7fc210aacd220c27e45c910": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "bca3ffd4683fba0ad3bbc90734b611da9cfb457e": { + "balance": "0xad78ebc5ac6200000" + }, + "bcaed0acb6a76f113f7c613555a2c3b0f5bf34a5": { + "balance": "0xa7ebd5e4363a00000" + }, + "bcaf347918efb2d63dde03e39275bbe97d26df50": { + "balance": "0x56bc75e2d63100000" + }, + "bcb422dc4dd2aae94abae95ea45dd1731bb6b0ba": { + "balance": "0x18424f5f0b1b4e0000" + }, + "bcbd31252ec288f91e298cd812c92160e738331a": { + "balance": "0x6b1bc2cac09a590000" + }, + "bcbf6ba166e2340db052ea23d28029b0de6aa380": { + "balance": "0xd255d112e103a00000" + }, + "bcc84597b91e73d5c5b4d69c80ecf146860f779a": { + "balance": "0xed70b5e9c3f2f00000" + }, + "bcc9593b2da6df6a34d71b1aa38dacf876f95b88": { + "balance": "0x1158e460913d00000" + }, + "bcd95ef962462b6edfa10fda87d72242fe3edb5c": { + "balance": "0x121d06e12fff988000" + }, + "bcd99edc2160f210a05e3a1fa0b0434ced00439b": { + "balance": "0x6c6b935b8bbd400000" + }, + "bcdfacb9d9023c3417182e9100e8ea1d373393a3": { + "balance": "0x3342d60dff1960000" + }, + "bce13e22322acfb355cd21fd0df60cf93add26c6": { + "balance": "0xad78ebc5ac6200000" + }, + "bce40475d345b0712dee703d87cd7657fc7f3b62": { + "balance": "0x1a420db02bd7d580000" + }, + "bcedc4267ccb89b31bb764d7211171008d94d44d": { + "balance": "0xad78ebc5ac6200000" + }, + "bcfc98e5c82b6adb180a3fcb120b9a7690c86a3f": { + "balance": "0x6acb3df27e1f880000" + }, + "bd043b67c63e60f841ccca15b129cdfe6590c8e3": { + "balance": "0xad78ebc5ac6200000" + }, + "bd047ff1e69cc6b29ad26497a9a6f27a903fc4dd": { + "balance": "0x2ee449550898e40000" + }, + "bd08e0cddec097db7901ea819a3d1fd9de8951a2": { + "balance": "0x1158e460913d00000" + }, + "bd09126c891c4a83068059fe0e15796c4661a9f4": { + "balance": "0x2b5e3af16b18800000" + }, + "bd0c5cd799ebc48642ef97d74e8e429064fee492": { + "balance": "0x11ac28a8c729580000" + }, + "bd17eed82b9a2592019a1b1b3c0fbad45c408d22": { + "balance": "0xd8d726b7177a80000" + }, + "bd1803370bddb129d239fd16ea8526a6188ae58e": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "bd2b70fecc37640f69514fc7f3404946aad86b11": { + "balance": "0x410d586a20a4c00000" + }, + "bd3097a79b3c0d2ebff0e6e86ab0edadbed47096": { + "balance": "0x5a87e7d7f5f6580000" + }, + "bd325d4029e0d8729f6d399c478224ae9e7ae41e": { + "balance": "0xd255d112e103a00000" + }, + "bd432a3916249b4724293af9146e49b8280a7f2a": { + "balance": "0xd8d726b7177a800000" + }, + "bd47f5f76e3b930fd9485209efa0d4763da07568": { + "balance": "0x3635c9adc5dea00000" + }, + "bd4b60faec740a21e3071391f96aa534f7c1f44e": { + "balance": "0x9ddc1e3b901180000" + }, + "bd4bd5b122d8ef7b7c8f0667450320db2116142e": { + "balance": "0x2086ac351052600000" + }, + "bd51ee2ea143d7b1d6b77e7e44bdd7da12f485ac": { + "balance": "0x477e06ccb2b9280000" + }, + "bd59094e074f8d79142ab1489f148e32151f2089": { + "balance": "0x1158e460913d00000" + }, + "bd5a8c94bd8be6470644f70c8f8a33a8a55c6341": { + "balance": "0xad78ebc5ac6200000" + }, + "bd5e473abce8f97a6932f77c2facaf9cc0a00514": { + "balance": "0x3c9258a106a6b70000" + }, + "bd5f46caab2c3d4b289396bbb07f203c4da82530": { + "balance": "0x4563918244f400000" + }, + "bd66ffedb530ea0b2e856dd12ac2296c31fe29e0": { + "balance": "0xad78ebc5ac6200000" + }, + "bd67d2e2f82da8861341bc96a2c0791fddf39e40": { + "balance": "0xad7c07947c8fb0000" + }, + "bd6a474d66345bcdd707594adb63b30c7822af54": { + "balance": "0xd8d726b7177a800000" + }, + "bd723b289a7367b6ece2455ed61edb49670ab9c4": { + "balance": "0x10f0cdea164213f8000" + }, + "bd73c3cbc26a175062ea0320dd84b253bce64358": { + "balance": "0x155bd9307f9fe80000" + }, + "bd7419dc2a090a46e2873d7de6eaaad59e19c479": { + "balance": "0x170bcb671759f080000" + }, + "bd8765f41299c7f479923c4fd18f126d7229047d": { + "balance": "0xd8d726b7177a800000" + }, + "bd93e550403e2a06113ed4c3fba1a8913b19407e": { + "balance": "0x6c6b935b8bbd400000" + }, + "bd9e56e902f4be1fc8768d8038bac63e2acbbf8e": { + "balance": "0x36356633ebd8ea0000" + }, + "bda4be317e7e4bed84c0495eee32d607ec38ca52": { + "balance": "0x7d32277978ef4e8000" + }, + "bdb60b823a1173d45a0792245fb496f1fd3301cf": { + "balance": "0x6c6b935b8bbd400000" + }, + "bdbaf6434d40d6355b1e80e40cc4ab9c68d96116": { + "balance": "0x56bc75e2d63100000" + }, + "bdc02cd4330c93d6fbda4f6db2a85df22f43c233": { + "balance": "0x6c6b935b8bbd400000" + }, + "bdc461462b6322b462bdb33f22799e8108e2417d": { + "balance": "0x243d4d18229ca20000" + }, + "bdc739a699700b2e8e2c4a4c7b058a0e513ddebe": { + "balance": "0x6c6b935b8bbd400000" + }, + "bdc74873af922b9df474853b0fa7ff0bf8c82695": { + "balance": "0xd8c9460063d31c0000" + }, + "bdca2a0ff34588af625fa8e28fc3015ab5a3aa00": { + "balance": "0x7ed73f773552fc0000" + }, + "bdd3254e1b3a6dc6cc2c697d45711aca21d516b2": { + "balance": "0x6c6b935b8bbd400000" + }, + "bddfa34d0ebf1b04af53b99b82494a9e3d8aa100": { + "balance": "0x28a857425466f800000" + }, + "bde4c73f969b89e9ceae66a2b51844480e038e9a": { + "balance": "0x3635c9adc5dea00000" + }, + "bde9786a84e75b48f18e726dd78d70e4af3ed802": { + "balance": "0x1369fb96128ac480000" + }, + "bded11612fb5c6da99d1e30e320bc0995466141e": { + "balance": "0x15af1d78b58c400000" + }, + "bded7e07d0711e684de65ac8b2ab57c55c1a8645": { + "balance": "0x2009c5c8bf6fdc0000" + }, + "bdf693f833c3fe471753184788eb4bfe4adc3f96": { + "balance": "0x6acb3df27e1f880000" + }, + "bdf6e68c0cd7584080e847d72cbb23aad46aeb1d": { + "balance": "0x6acb3df27e1f880000" + }, + "be0a2f385f09dbfce96732e12bb40ac349871ba8": { + "balance": "0x574c115e02b8be0000" + }, + "be0c2a80b9de084b172894a76cf4737a4f529e1a": { + "balance": "0x6c6acc67d7b1d40000" + }, + "be1cd7f4c472070968f3bde268366b21eeea8321": { + "balance": "0xe91a7cd19fa3b00000" + }, + "be2346a27ff9b702044f500deff2e7ffe6824541": { + "balance": "0x1158e460913d00000" + }, + "be2471a67f6047918772d0e36839255ed9d691ae": { + "balance": "0xd8d726b7177a800000" + }, + "be2b2280523768ea8ac35cd9e888d60a719300d4": { + "balance": "0x6c6b935b8bbd400000" + }, + "be2b326e78ed10e550fee8efa8f8070396522f5a": { + "balance": "0x857e0d6f1da76a00000" + }, + "be305a796e33bbf7f9aeae6512959066efda1010": { + "balance": "0x24dce54d34a1a000000" + }, + "be478e8e3dde6bd403bb2d1c657c4310ee192723": { + "balance": "0x1ab2cf7c9f87e20000" + }, + "be4e7d983f2e2a636b1102ec7039efebc842e98d": { + "balance": "0x393ef1a5127c80000" + }, + "be4fd073617022b67f5c13499b827f763639e4e3": { + "balance": "0x6c6b935b8bbd400000" + }, + "be525a33ea916177f17283fca29e8b350b7f530b": { + "balance": "0x8f019aaf46e8780000" + }, + "be53322f43fbb58494d7cce19dda272b2450e827": { + "balance": "0xad7ceaf425c150000" + }, + "be538246dd4e6f0c20bf5ad1373c3b463a131e86": { + "balance": "0xad78ebc5ac6200000" + }, + "be5a60689998639ad75bc105a371743eef0f7940": { + "balance": "0x1b327c73e1257a0000" + }, + "be5cba8d37427986e8ca2600e858bb03c359520f": { + "balance": "0xa030dcebbd2f4c0000" + }, + "be60037e90714a4b917e61f193d834906703b13a": { + "balance": "0x5c283d410394100000" + }, + "be633a3737f68439bac7c90a52142058ee8e8a6f": { + "balance": "0x340aad21b3b7000000" + }, + "be659d85e7c34f8833ea7f488de1fbb5d4149bef": { + "balance": "0x1ebd23ad9d5bb720000" + }, + "be73274d8c5aa44a3cbefc8263c37ba121b20ad3": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "be86d0b0438419ceb1a038319237ba5206d72e46": { + "balance": "0x3634fb9f1489a70000" + }, + "be8d7f18adfe5d6cc775394989e1930c979d007d": { + "balance": "0x3635c9adc5dea00000" + }, + "be9186c34a52514abb9107860f674f97b821bd5b": { + "balance": "0x1ba01ee40603100000" + }, + "be935793f45b70d8045d2654d8dd3ad24b5b6137": { + "balance": "0x2fb474098f67c00000" + }, + "be98a77fd41097b34f59d7589baad021659ff712": { + "balance": "0x30ca024f987b900000" + }, + "be9b8c34b78ee947ff81472eda7af9d204bc8466": { + "balance": "0x821ab0d4414980000" + }, + "bea00df17067a43a82bc1daecafb6c14300e89e6": { + "balance": "0x62a992e53a0af00000" + }, + "bea0afc93aae2108a3fac059623bf86fa582a75e": { + "balance": "0x5c283d410394100000" + }, + "beb3358c50cf9f75ffc76d443c2c7f55075a0589": { + "balance": "0x90f534608a72880000" + }, + "beb4fd315559436045dcb99d49dcec03f40c42dc": { + "balance": "0x6c6b935b8bbd400000" + }, + "bec2e6de39c07c2bae556acfbee2c4728b9982e3": { + "balance": "0x1f0ff8f01daad40000" + }, + "bec6640f4909b58cbf1e806342961d607595096c": { + "balance": "0x6c6acc67d7b1d40000" + }, + "bec8caf7ee49468fee552eff3ac5234eb9b17d42": { + "balance": "0x6c6b935b8bbd400000" + }, + "becef61c1c442bef7ce04b73adb249a8ba047e00": { + "balance": "0x363b56c3a754c80000" + }, + "bed4649df646e2819229032d8868556fe1e053d3": { + "balance": "0xfc936392801c0000" + }, + "bed4c8f006a27c1e5f7ce205de75f516bfb9f764": { + "balance": "0x3635c9adc5dea000000" + }, + "bee8d0b008421954f92d000d390fb8f8e658eaee": { + "balance": "0x3635c9adc5dea00000" + }, + "beecd6af900c8b064afcc6073f2d85d59af11956": { + "balance": "0x6c6b935b8bbd400000" + }, + "beef94213879e02622142bea61290978939a60d7": { + "balance": "0x136857b32ad86048000" + }, + "bef07d97c3481f9d6aee1c98f9d91a180a32442b": { + "balance": "0x152d02c7e14af6800000" + }, + "befb448c0c5f683fb67ee570baf0db5686599751": { + "balance": "0x6acb3df27e1f880000" + }, + "bf05070c2c34219311c4548b2614a438810ded6d": { + "balance": "0x6c6b935b8bbd400000" + }, + "bf05ff5ecf0df2df887759fb8274d93238ac267d": { + "balance": "0x2b5e3af16b18800000" + }, + "bf09d77048e270b662330e9486b38b43cd781495": { + "balance": "0x5c539b7bf4ff28800000" + }, + "bf17f397f8f46f1bae45d187148c06eeb959fa4d": { + "balance": "0x3649c59624bb300000" + }, + "bf183641edb886ce60b8190261e14f42d93cce01": { + "balance": "0x15b3557f1937f8000" + }, + "bf2aea5a1dcf6ed3b5e8323944e983fedfd1acfb": { + "balance": "0x55a6e79ccd1d300000" + }, + "bf4096bc547dbfc4e74809a31c039e7b389d5e17": { + "balance": "0xd5967be4fc3f100000" + }, + "bf49c14898316567d8b709c2e50594b366c6d38c": { + "balance": "0x27bf38c6544df50000" + }, + "bf4c73a7ede7b164fe072114843654e4d8781dde": { + "balance": "0x6c6b935b8bbd400000" + }, + "bf50ce2e264b9fe2b06830617aedf502b2351b45": { + "balance": "0x3635c9adc5dea00000" + }, + "bf59aee281fa43fe97194351a9857e01a3b897b2": { + "balance": "0x2086ac351052600000" + }, + "bf68d28aaf1eeefef646b65e8cc8d190f6c6da9c": { + "balance": "0x6c6b935b8bbd400000" + }, + "bf6925c00751008440a6739a02bf2b6cdaab5e3a": { + "balance": "0x3635c9adc5dea00000" + }, + "bf7701fc6225d5a17815438a8941d21ebc5d059d": { + "balance": "0x65ea3db75546600000" + }, + "bf8b8005d636a49664f74275ef42438acd65ac91": { + "balance": "0xad78ebc5ac6200000" + }, + "bf92418a0c6c31244d220260cb3e867dd7b4ef49": { + "balance": "0x56900d33ca7fc0000" + }, + "bf9acd4445d9c9554689cabbbab18800ff1741c2": { + "balance": "0x3635c9adc5dea00000" + }, + "bf9f271f7a7e12e36dd2fe9facebf385fe6142bd": { + "balance": "0x366f84f7bb7840000" + }, + "bfa8c858df102cb12421008b0a31c4c7190ad560": { + "balance": "0xad78ebc5ac6200000" + }, + "bfaeb91067617dcf8b44172b02af615674835dba": { + "balance": "0x8b59e884813088000" + }, + "bfb0ea02feb61dec9e22a5070959330299c43072": { + "balance": "0x43c33c1937564800000" + }, + "bfbca418d3529cb393081062032a6e1183c6b2dc": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "bfbe05e88c9cbbcc0e92a405fac1d85de248ee24": { + "balance": "0x56bc75e2d63100000" + }, + "bfbfbcb656c2992be8fcde8219fbc54aadd59f29": { + "balance": "0x21e18d2c821c7520000" + }, + "bfc57aa666fae28e9f107a49cb5089a4e22151dd": { + "balance": "0x3635c9adc5dea00000" + }, + "bfcb9730246304700da90b4153e71141622e1c41": { + "balance": "0x3635c9adc5dea00000" + }, + "bfd93c90c29c07bc5fb5fc49aeea55a40e134f35": { + "balance": "0x5ede20f01a459800000" + }, + "bfe3a1fc6e24c8f7b3250560991f93cba2cf8047": { + "balance": "0x10f0cf064dd592000000" + }, + "bfe6bcb0f0c07852643324aa5df5fd6225abc3ca": { + "balance": "0x409e52b48369a0000" + }, + "bff5df769934b8943ca9137d0efef2fe6ebbb34e": { + "balance": "0x56bc75e2d63100000" + }, + "bffb6929241f788693273e7022e60e3eab1fe84f": { + "balance": "0x6c6b935b8bbd400000" + }, + "c0064f1d9474ab915d56906c9fb320a2c7098c9b": { + "balance": "0x13683f7f3c15d80000" + }, + "c007f0bdb6e7009202b7af3ea90902697c721413": { + "balance": "0xa2a0e43e7fb9830000" + }, + "c00ab080b643e1c2bae363e0d195de2efffc1c44": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "c02077449a134a7ad1ef7e4d927affeceeadb5ae": { + "balance": "0xfc936392801c0000" + }, + "c02471e3fc2ea0532615a7571d493289c13c36ef": { + "balance": "0x1158e460913d00000" + }, + "c02d6eadeacf1b78b3ca85035c637bb1ce01f490": { + "balance": "0xd8d726b7177a800000" + }, + "c033b1325a0af45472c25527853b1f1c21fa35de": { + "balance": "0x6c6b935b8bbd400000" + }, + "c033be10cb48613bd5ebcb33ed4902f38b583003": { + "balance": "0xa2a15d09519be00000" + }, + "c0345b33f49ce27fe82cf7c84d141c68f590ce76": { + "balance": "0x3635c9adc5dea00000" + }, + "c03de42a109b657a64e92224c08dc1275e80d9b2": { + "balance": "0x1158e460913d00000" + }, + "c04069dfb18b096c7867f8bee77a6dc7477ad062": { + "balance": "0x90f534608a72880000" + }, + "c0413f5a7c2d9a4b8108289ef6ecd271781524f4": { + "balance": "0xa968163f0a57b400000" + }, + "c043f2452dcb9602ef62bd360e033dd23971fe84": { + "balance": "0x6c6b935b8bbd400000" + }, + "c04f4bd4049f044685b883b62959ae631d667e35": { + "balance": "0x13b80b99c5185700000" + }, + "c056d4bd6bf3cbacac65f8f5a0e3980b852740ae": { + "balance": "0x56bc75e2d63100000" + }, + "c05b740620f173f16e52471dc38b9c514a0b1526": { + "balance": "0x796e3ea3f8ab00000" + }, + "c069ef0eb34299abd2e32dabc47944b272334824": { + "balance": "0x68155a43676e00000" + }, + "c06cebbbf7f5149a66f7eb976b3e47d56516da2f": { + "balance": "0x6c6b935b8bbd400000" + }, + "c0725ec2bdc33a1d826071dea29d62d4385a8c25": { + "balance": "0x8a08513463aa6100000" + }, + "c07e3867ada096807a051a6c9c34cc3b3f4ad34a": { + "balance": "0x60f06620a849450000" + }, + "c0895efd056d9a3a81c3da578ada311bfb9356cf": { + "balance": "0xad78ebc5ac6200000" + }, + "c090fe23dcd86b358c32e48d2af91024259f6566": { + "balance": "0xad78ebc5ac6200000" + }, + "c09a66172aea370d9a63da04ff71ffbbfcff7f94": { + "balance": "0x6c6b935b8bbd400000" + }, + "c09e3cfc19f605ff3ec9c9c70e2540d7ee974366": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "c0a02ab94ebe56d045b41b629b98462e3a024a93": { + "balance": "0x56bc75e2d63100000" + }, + "c0a39308a80e9e84aaaf16ac01e3b01d74bd6b2d": { + "balance": "0x7664ddd4c1c0b8000" + }, + "c0a6cbad77692a3d88d141ef769a99bb9e3c9951": { + "balance": "0x56bc75e2d63100000" + }, + "c0a7e8435dff14c25577739db55c24d5bf57a3d9": { + "balance": "0xa6dd90cae5114480000" + }, + "c0ae14d724832e2fce2778de7f7b8daf7b12a93e": { + "balance": "0x1158e460913d00000" + }, + "c0afb7d8b79370cfd663c68cc6b9702a37cd9eff": { + "balance": "0x3635c9adc5dea00000" + }, + "c0b0b7a8a6e1acdd05e47f94c09688aa16c7ad8d": { + "balance": "0x37b6d02ac76710000" + }, + "c0b3f244bca7b7de5b48a53edb9cbeab0b6d88c0": { + "balance": "0x13b80b99c5185700000" + }, + "c0c04d0106810e3ec0e54a19f2ab8597e69a573d": { + "balance": "0x2b5e3af16b1880000" + }, + "c0ca3277942e7445874be31ceb902972714f1823": { + "balance": "0xd8d726b7177a80000" + }, + "c0cbad3ccdf654da22cbcf5c786597ca1955c115": { + "balance": "0x6c6b935b8bbd400000" + }, + "c0cbf6032fa39e7c46ff778a94f7d445fe22cf30": { + "balance": "0x10ce1d3d8cb3180000" + }, + "c0e0b903088e0c63f53dd069575452aff52410c3": { + "balance": "0xa2a15d09519be00000" + }, + "c0e457bd56ec36a1246bfa3230fff38e5926ef22": { + "balance": "0x692ae8897081d00000" + }, + "c0ed0d4ad10de03435b153a0fc25de3b93f45204": { + "balance": "0xab4dcf399a3a600000" + }, + "c0f29ed0076611b5e55e130547e68a48e26df5e4": { + "balance": "0xa2a15d09519be00000" + }, + "c1132878235c5ddba5d9f3228b5236e47020dc6f": { + "balance": "0x3635c9adc5dea00000" + }, + "c1170dbaadb3dee6198ea544baec93251860fda5": { + "balance": "0x410d586a20a4c00000" + }, + "c126573d87b0175a5295f1dd07c575cf8cfa15f2": { + "balance": "0x21e19e0c9bab2400000" + }, + "c127aab59065a28644a56ba3f15e2eac13da2995": { + "balance": "0x2086ac351052600000" + }, + "c12b7f40df9a2f7bf983661422ab84c9c1f50858": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "c12cfb7b3df70fceca0ede263500e27873f8ed16": { + "balance": "0x3635c9adc5dea00000" + }, + "c12f881fa112b8199ecbc73ec4185790e614a20f": { + "balance": "0x6c6b935b8bbd400000" + }, + "c1384c6e717ebe4b23014e51f31c9df7e4e25b31": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "c1438c99dd51ef1ca8386af0a317e9b041457888": { + "balance": "0xc1daf81d8a3ce0000" + }, + "c1631228efbf2a2e3a4092ee8900c639ed34fbc8": { + "balance": "0x33c5499031720c0000" + }, + "c175be3194e669422d15fee81eb9f2c56c67d9c9": { + "balance": "0xad78ebc5ac6200000" + }, + "c1827686c0169485ec15b3a7c8c01517a2874de1": { + "balance": "0x22b1c8c1227a00000" + }, + "c18ab467feb5a0aadfff91230ff056464d78d800": { + "balance": "0x6c6b935b8bbd400000" + }, + "c1950543554d8a713003f662bb612c10ad4cdf21": { + "balance": "0xfc936392801c0000" + }, + "c1a41a5a27199226e4c7eb198b031b59196f9842": { + "balance": "0xa5aa85009e39c0000" + }, + "c1b2a0fb9cad45cd699192cd27540b88d3384279": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "c1b2aa8cb2bf62cdc13a47ecc4657facaa995f98": { + "balance": "0x363793fa96e6a68000" + }, + "c1b500011cfba95d7cd636e95e6cbf6167464b25": { + "balance": "0xad78ebc5ac6200000" + }, + "c1b9a5704d351cfe983f79abeec3dbbbae3bb629": { + "balance": "0x1158e460913d00000" + }, + "c1cbd2e2332a524cf219b10d871ccc20af1fb0fa": { + "balance": "0x3635c9adc5dea00000" + }, + "c1cdc601f89c0428b31302d187e0dc08ad7d1c57": { + "balance": "0x14542ba12a337c00000" + }, + "c1d4af38e9ba799040894849b8a8219375f1ac78": { + "balance": "0x43c33c1937564800000" + }, + "c1e1409ca52c25435134d006c2a6a8542dfb7273": { + "balance": "0x1dd1e4bd8d1ee0000" + }, + "c1eba5684aa1b24cba63150263b7a9131aeec28d": { + "balance": "0x1158e460913d00000" + }, + "c1ec81dd123d4b7c2dd9b4d438a7072c11dc874c": { + "balance": "0x6c6b935b8bbd400000" + }, + "c1f39bd35dd9cec337b96f47c677818160df37b7": { + "balance": "0x1158e460913d00000" + }, + "c1ffad07db96138c4b2a530ec1c7de29b8a0592c": { + "balance": "0xf43fc2c04ee00000" + }, + "c21fa6643a1f14c02996ad7144b75926e87ecb4b": { + "balance": "0x43c33c1937564800000" + }, + "c2340a4ca94c9678b7494c3c852528ede5ee529f": { + "balance": "0x2a36b05a3fd7c8000" + }, + "c239abdfae3e9af5457f52ed2b91fd0ab4d9c700": { + "balance": "0x6c6b935b8bbd400000" + }, + "c23b2f921ce4a37a259ee4ad8b2158d15d664f59": { + "balance": "0x1608995e8bd3f8000" + }, + "c24399b4bf86f7338fbf645e3b22b0e0b7973912": { + "balance": "0x6c6b935b8bbd400000" + }, + "c24ccebc2344cce56417fb684cf81613f0f4b9bd": { + "balance": "0x54069233bf7f780000" + }, + "c25266c7676632f13ef29be455ed948add567792": { + "balance": "0x487a9a304539440000" + }, + "c25cf826550c8eaf10af2234fef904ddb95213be": { + "balance": "0x3635c9adc5dea00000" + }, + "c2663f8145dbfec6c646fc5c49961345de1c9f11": { + "balance": "0x2567ac70392b880000" + }, + "c270456885342b640b4cfc1b520e1a544ee0d571": { + "balance": "0x62a992e53a0af00000" + }, + "c27376f45d21e15ede3b26f2655fcee02ccc0f2a": { + "balance": "0x1158e460913d00000" + }, + "c2779771f0536d79a8708f6931abc44b3035e999": { + "balance": "0x43c4f8300dcb3480000" + }, + "c27f4e08099d8cf39ee11601838ef9fc06d7fc41": { + "balance": "0x61093d7c2c6d380000" + }, + "c282e6993fbe7a912ea047153ffd9274270e285b": { + "balance": "0x7960b331247638000" + }, + "c2836188d9a29253e0cbda6571b058c289a0bb32": { + "balance": "0x6c6b935b8bbd400000" + }, + "c2aa74847e86edfdd3f3db22f8a2152feee5b7f7": { + "balance": "0x6f118886b784a20000" + }, + "c2b2cbe65bc6c2ee7a3c75b2e47c189c062e8d8b": { + "balance": "0x43c33c1937564800000" + }, + "c2bae4a233c2d85724f0dabebda0249d833e37d3": { + "balance": "0x10f0cf064dd59200000" + }, + "c2c13e72d268e7150dc799e7c6cf03c88954ced7": { + "balance": "0x25f273933db5700000" + }, + "c2cb1ada5da9a0423873814793f16144ef36b2f3": { + "balance": "0x48557e3b7017df0000" + }, + "c2d1778ef6ee5fe488c145f3586b6ebbe3fbb445": { + "balance": "0x3e1ff1e03b55a80000" + }, + "c2d9eedbc9019263d9d16cc5ae072d1d3dd9db03": { + "balance": "0x43c33c1937564800000" + }, + "c2e0584a71348cc314b73b2029b6230b92dbb116": { + "balance": "0x6c6b935b8bbd400000" + }, + "c2e2d498f70dcd0859e50b023a710a6d4b2133bd": { + "balance": "0x383911f00cbce10000" + }, + "c2ed5ffdd1add855a2692fe062b5d618742360d4": { + "balance": "0x410d586a20a4c00000" + }, + "c2ee91d3ef58c9d1a589844ea1ae3125d6c5ba69": { + "balance": "0x34957444b840e80000" + }, + "c2fafdd30acb6d6706e9293cb02641f9edbe07b5": { + "balance": "0x5100860b430f480000" + }, + "c2fd0bf7c725ef3e047e5ae1c29fe18f12a7299c": { + "balance": "0x487a9a304539440000" + }, + "c2fe7d75731f636dcd09dbda0671393ba0c82a7d": { + "balance": "0x77432217e683600000" + }, + "c3107a9af3322d5238df0132419131629539577d": { + "balance": "0x1ab4e464d414310000" + }, + "c3110be01dc9734cfc6e1ce07f87d77d1345b7e1": { + "balance": "0x10f0ce949e00f930000" + }, + "c32038ca52aee19745be5c31fcdc54148bb2c4d0": { + "balance": "0x2b5aad72c65200000" + }, + "c325c352801ba883b3226c5feb0df9eae2d6e653": { + "balance": "0xd5967be4fc3f100000" + }, + "c32ec7e42ad16ce3e2555ad4c54306eda0b26758": { + "balance": "0x6c6b935b8bbd400000" + }, + "c332df50b13c013490a5d7c75dbfa366da87b6d6": { + "balance": "0xd8d726b7177a800000" + }, + "c33acdb3ba1aab27507b86b15d67faf91ecf6293": { + "balance": "0x6c6b935b8bbd400000" + }, + "c33ece935a8f4ef938ea7e1bac87cb925d8490ca": { + "balance": "0x7038c16781f78480000" + }, + "c340f9b91c26728c31d121d5d6fc3bb56d3d8624": { + "balance": "0x6c6b935b8bbd400000" + }, + "c346cb1fbce2ab285d8e5401f42dd7234d37e86d": { + "balance": "0x486cb9799191e0000" + }, + "c3483d6e88ac1f4ae73cc4408d6c03abe0e49dca": { + "balance": "0x39992648a23c8a00000" + }, + "c348fc5a461323b57be303cb89361b991913df28": { + "balance": "0x152d02c7e14af6800000" + }, + "c34e3ba1322ed0571183a24f94204ee49c186641": { + "balance": "0x327afefa4a7bc0000" + }, + "c35b95a2a3737cb8f0f596b34524872bd30da234": { + "balance": "0x198be85235e2d500000" + }, + "c3631c7698b6c5111989bf452727b3f9395a6dea": { + "balance": "0x243275896641dbe0000" + }, + "c36c0b63bfd75c2f8efb060883d868cccd6cbdb4": { + "balance": "0xa2a15d09519be00000" + }, + "c3756bcdcc7eec74ed896adfc335275930266e08": { + "balance": "0x14542ba12a337c00000" + }, + "c384ac6ee27c39e2f278c220bdfa5baed626d9d3": { + "balance": "0x2086ac351052600000" + }, + "c3a046e3d2b2bf681488826e32d9c061518cfe8c": { + "balance": "0x8cf23f909c0fa00000" + }, + "c3a9226ae275df2cab312b911040634a9c9c9ef6": { + "balance": "0xd8d726b7177a800000" + }, + "c3b928a76fad6578f04f0555e63952cd21d1520a": { + "balance": "0x6c6b935b8bbd400000" + }, + "c3c2297329a6fd99117e54fc6af379b4d556547e": { + "balance": "0x14542ba12a337c00000" + }, + "c3c3c2510d678020485a63735d1307ec4ca6302b": { + "balance": "0x3635c9adc5dea00000" + }, + "c3cb6b36af443f2c6e258b4a39553a818747811f": { + "balance": "0x57473d05dabae80000" + }, + "c3db5657bb72f10d58f231fddf11980aff678693": { + "balance": "0x14061b9d77a5e980000" + }, + "c3db9fb6f46c480af34465d79753b4e2b74a67ce": { + "balance": "0x43c33c1937564800000" + }, + "c3dd58903886303b928625257ae1a013d71ae216": { + "balance": "0x6c6b935b8bbd400000" + }, + "c3e0471c64ff35fa5232cc3121d1d38d1a0fb7de": { + "balance": "0x6c6b935b8bbd400000" + }, + "c3e20c96df8d4e38f50b265a98a906d61bc51a71": { + "balance": "0x6c6b935b8bbd400000" + }, + "c3e387b03ce95ccfd7fa51dd840183bc43532809": { + "balance": "0x6c6b935b8bbd400000" + }, + "c3f8f67295a5cd049364d05d23502623a3e52e84": { + "balance": "0x14542ba12a337c00000" + }, + "c401c427cccff10decb864202f36f5808322a0a8": { + "balance": "0xb47b51a69cd4020000" + }, + "c4088c025f3e85013f5439fb3440a17301e544fe": { + "balance": "0x7e09db4d9f3f340000" + }, + "c41461a3cfbd32c9865555a4813137c076312360": { + "balance": "0x3635c6204739d98000" + }, + "c420388fbee84ad656dd68cdc1fbaa9392780b34": { + "balance": "0xa2dca63aaf4c58000" + }, + "c42250b0fe42e6b7dcd5c890a6f0c88f5f5fb574": { + "balance": "0x81ee4825359840000" + }, + "c42d6aeb710e3a50bfb44d6c31092969a11aa7f3": { + "balance": "0x82263cafd8cea0000" + }, + "c440c7ca2f964b6972ef664a2261dde892619d9c": { + "balance": "0x43c33c1937564800000" + }, + "c44bdec8c36c5c68baa2ddf1d431693229726c43": { + "balance": "0x152d02c7e14af6800000" + }, + "c44f4ab5bc60397c737eb0683391b633f83c48fa": { + "balance": "0x3635c9adc5dea00000" + }, + "c452e0e4b3d6ae06b836f032ca09db409ddfe0fb": { + "balance": "0x2b5e3af16b18800000" + }, + "c45a1ca1036b95004187cdac44a36e33a94ab5c3": { + "balance": "0xdd00f720301880000" + }, + "c45d47ab0c9aa98a5bd62d16223ea2471b121ca4": { + "balance": "0x202e68f2c2aee40000" + }, + "c4681e73bb0e32f6b726204831ff69baa4877e32": { + "balance": "0x62a992e53a0af00000" + }, + "c46bbdef76d4ca60d316c07f5d1a780e3b165f7e": { + "balance": "0x6c6b935b8bbd400000" + }, + "c47d610b399250f70ecf1389bab6292c91264f23": { + "balance": "0xfa7e7b5df3cd00000" + }, + "c4803bb407c762f90b7596e6fde194931e769590": { + "balance": "0xd8d726b7177a800000" + }, + "c48651c1d9c16bff4c9554886c3f3f26431f6f68": { + "balance": "0x23ab9599c43f080000" + }, + "c489c83ffbb0252ac0dbe3521217630e0f491f14": { + "balance": "0xd8d726b7177a800000" + }, + "c48b693cacefdbd6cb5d7895a42e3196327e261c": { + "balance": "0x3635c9adc5dea00000" + }, + "c493489e56c3bdd829007dc2f956412906f76bfa": { + "balance": "0x2a791488e71540000" + }, + "c496cbb0459a6a01600fc589a55a32b454217f9d": { + "balance": "0xeda838c4929080000" + }, + "c49cfaa967f3afbf55031061fc4cef88f85da584": { + "balance": "0x6c6b935b8bbd400000" + }, + "c4b6e5f09cc1b90df07803ce3d4d13766a9c46f4": { + "balance": "0x14542ba12a337c00000" + }, + "c4bec96308a20f90cab18399c493fd3d065abf45": { + "balance": "0x2f6f10780d22cc00000" + }, + "c4c01afc3e0f045221da1284d7878574442fb9ac": { + "balance": "0x1923c688b73ab040000" + }, + "c4c15318d370c73318cc18bdd466dbaa4c6603bf": { + "balance": "0x11164759ffb320000" + }, + "c4c6cb723dd7afa7eb535615e53f3cef14f18118": { + "balance": "0x6c6b8fce0d18798000" + }, + "c4cc45a2b63c27c0b4429e58cd42da59be739bd6": { + "balance": "0x3635c9adc5dea00000" + }, + "c4cf930e5d116ab8d13b9f9a7ec4ab5003a6abde": { + "balance": "0x1158e460913d000000" + }, + "c4d916574e68c49f7ef9d3d82d1638b2b7ee0985": { + "balance": "0x55a6e79ccd1d300000" + }, + "c4dac5a8a0264fbc1055391c509cc3ee21a6e04c": { + "balance": "0x1606b7fa039ce740000" + }, + "c4dd048bfb840e2bc85cb53fcb75abc443c7e90f": { + "balance": "0xc971dc07c9c7900000" + }, + "c4f2913b265c430fa1ab8adf26c333fc1d9b66f2": { + "balance": "0x1158e460913d00000" + }, + "c4f7b13ac6d4eb4db3d4e6a252af8a07bd5957da": { + "balance": "0xad78ebc5ac6200000" + }, + "c4f7d2e2e22084c44f70feaab6c32105f3da376f": { + "balance": "0x6acb3df27e1f880000" + }, + "c4ff6fbb1f09bd9e102ba033d636ac1c4c0f5304": { + "balance": "0x3635c9adc5dea00000" + }, + "c4ffadaaf2823fbea7bff702021bffc4853eb5c9": { + "balance": "0x24a19c1bd6f128000" + }, + "c500b720734ed22938d78c5e48b2ba9367a575ba": { + "balance": "0x7129e1cdf373ee00000" + }, + "c50fe415a641b0856c4e75bf960515441afa358d": { + "balance": "0x6c6b935b8bbd400000" + }, + "c5134cfbb1df7a20b0ed7057622eeed280947dad": { + "balance": "0xcdff97fabcb4600000" + }, + "c517d0315c878813c717e18cafa1eab2654e01da": { + "balance": "0x21e19e0c9bab2400000" + }, + "c518799a5925576213e21896e0539abb85b05ae3": { + "balance": "0x3635c9adc5dea00000" + }, + "c522e20fbf04ed7f6b05a37b4718d6fce0142e1a": { + "balance": "0xd8d726b7177a800000" + }, + "c524086d46c8112b128b2faf6f7c7d8160a8386c": { + "balance": "0x15af1d78b58c400000" + }, + "c52d1a0c73c2a1be84915185f8b34faa0adf1de3": { + "balance": "0x4be4eab3fa0fa68000" + }, + "c53594c7cfb2a08f284cc9d7a63bbdfc0b319732": { + "balance": "0xa6b2328ff3a62c00000" + }, + "c5374928cdf193705443b14cc20da423473cd9cf": { + "balance": "0x77d10509bb3af8000" + }, + "c538a0ff282aaa5f4b75cfb62c70037ee67d4fb5": { + "balance": "0x6c6b935b8bbd400000" + }, + "c53b50fd3b2b72bc6c430baf194a515585d3986d": { + "balance": "0x1158e460913d00000" + }, + "c53d79f7cb9b70952fd30fce58d54b9f0b59f647": { + "balance": "0x113e2d6744345f80000" + }, + "c549df83c6f65eec0f1dc9a0934a5c5f3a50fd88": { + "balance": "0x9dc05cce28c2b80000" + }, + "c55005a6c37e8ca7e543ce259973a3cace961a4a": { + "balance": "0x6c6b935b8bbd400000" + }, + "c555b93156f09101233c6f7cf6eb3c4f196d3346": { + "balance": "0xa2a15d09519be00000" + }, + "c55a6b4761fd11e8c85f15174d74767cd8bd9a68": { + "balance": "0x73f75d1a085ba0000" + }, + "c56e6b62ba6e40e52aab167d21df025d0055754b": { + "balance": "0x6c6b935b8bbd400000" + }, + "c573e841fa08174a208b060ccb7b4c0d7697127f": { + "balance": "0x243d4d18229ca20000" + }, + "c57612de91110c482e6f505bcd23f3c5047d1d61": { + "balance": "0xc2127af858da700000" + }, + "c5843399d150066bf7979c34ba294620368ad7c0": { + "balance": "0xad78ebc5ac6200000" + }, + "c58b9cc61dedbb98c33f224d271f0e228b583433": { + "balance": "0xd255d112e103a00000" + }, + "c58f62fee9711e6a05dc0910b618420aa127f288": { + "balance": "0xd7c198710e66b00000" + }, + "c593b546b7698710a205ad468b2c13152219a342": { + "balance": "0x54069233bf7f780000" + }, + "c593d6e37d14b566643ac4135f243caa0787c182": { + "balance": "0x28a857425466f800000" + }, + "c5a3b98e4593fea0b38c4f455a5065f051a2f815": { + "balance": "0x44cf468af25bf770000" + }, + "c5a48a8500f9b4e22f0eb16c6f4649687674267d": { + "balance": "0x2c0ec50385043e8000" + }, + "c5a629a3962552cb8eded889636aafbd0c18ce65": { + "balance": "0x21e19e0c9bab2400000" + }, + "c5ae86b0c6c7e3900f1368105c56537faf8d743e": { + "balance": "0xa31062beeed700000" + }, + "c5b009baeaf788a276bd35813ad65b400b849f3b": { + "balance": "0x3635c9adc5dea00000" + }, + "c5b56cd234267c28e89c6f6b2266b086a12f970c": { + "balance": "0xd8d726b7177a800000" + }, + "c5c6a4998a33feb764437a8be929a73ba34a0764": { + "balance": "0xa968163f0a57b400000" + }, + "c5c73d61cce7c8fe4c8fce29f39092cd193e0fff": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "c5c7590b5621ecf8358588de9b6890f2626143f1": { + "balance": "0xa2a15d09519be00000" + }, + "c5cdcee0e85d117dabbf536a3f4069bf443f54e7": { + "balance": "0x6ac5c62d9486070000" + }, + "c5d48ca2db2f85d8c555cb0e9cfe826936783f9e": { + "balance": "0xad78ebc5ac6200000" + }, + "c5de1203d3cc2cea31c82ee2de5916880799eafd": { + "balance": "0x10f0cf064dd59200000" + }, + "c5e488cf2b5677933971f64cb8202dd05752a2c0": { + "balance": "0x3635c9adc5dea00000" + }, + "c5e812f76f15f2e1f2f9bc4823483c8804636f67": { + "balance": "0x3f514193abb840000" + }, + "c5e9939334f1252ed2ba26814487dfd2982b3128": { + "balance": "0x3cb71f51fc5580000" + }, + "c5eb42295e9cadeaf2af12dede8a8d53c579c469": { + "balance": "0xcf152640c5c8300000" + }, + "c5edbbd2ca0357654ad0ea4793f8c5cecd30e254": { + "balance": "0x14542ba12a337c00000" + }, + "c5f64babb7033142f20e46d7aa6201ed86f67103": { + "balance": "0x6c6b935b8bbd400000" + }, + "c5f687717246da8a200d20e5e9bcac60b67f3861": { + "balance": "0x18d993f34aef10000" + }, + "c6045b3c350b4ce9ca0c6b754fb41a69b97e9900": { + "balance": "0x3224f42723d4540000" + }, + "c60b04654e003b4683041f1cbd6bc38fda7cdbd6": { + "balance": "0x6c6b935b8bbd400000" + }, + "c61446b754c24e3b1642d9e51765b4d3e46b34b6": { + "balance": "0x6c6b935b8bbd400000" + }, + "c618521321abaf5b26513a4a9528086f220adc6f": { + "balance": "0x176b344f2a78c0000" + }, + "c6234657a807384126f8968ca1708bb07baa493c": { + "balance": "0x1158e460913d00000" + }, + "c625f8c98d27a09a1bcabd5128b1c2a94856af30": { + "balance": "0xad78ebc5ac6200000" + }, + "c6355ec4768c70a49af69513cd83a5bca7e3b9cd": { + "balance": "0x14542ba12a337c00000" + }, + "c63ac417992e9f9b60386ed953e6d7dff2b090e8": { + "balance": "0xd8d8583fa2d52f0000" + }, + "c63cd7882118b8a91e074d4c8f4ba91851303b9a": { + "balance": "0xe18398e7601900000" + }, + "c652871d192422c6bc235fa063b44a7e1d43e385": { + "balance": "0x8670e9ec6598c0000" + }, + "c667441e7f29799aba616451d53b3f489f9e0f48": { + "balance": "0x2f29ace68addd800000" + }, + "c66ae4cee87fb3353219f77f1d6486c580280332": { + "balance": "0x19a16b06ff8cb0000" + }, + "c674f28c8afd073f8b799691b2f0584df942e844": { + "balance": "0x6c6b935b8bbd400000" + }, + "c697b70477cab42e2b8b266681f4ae7375bb2541": { + "balance": "0x12e5732baba5c980000" + }, + "c69b855539ce1b04714728eec25a37f367951de7": { + "balance": "0x6c6b935b8bbd400000" + }, + "c69be440134d6280980144a9f64d84748a37f349": { + "balance": "0x26c29e47c4844c0000" + }, + "c69d663c8d60908391c8d236191533fdf7775613": { + "balance": "0x1a4aba225c20740000" + }, + "c6a286e065c85f3af74812ed8bd3a8ce5d25e21d": { + "balance": "0xfc936392801c0000" + }, + "c6a30ef5bb3320f40dc5e981230d52ae3ac19322": { + "balance": "0x9ddc1e3b901180000" + }, + "c6ae287ddbe1149ba16ddcca4fe06aa2eaa988a9": { + "balance": "0x15af1d78b58c400000" + }, + "c6c7c191379897dd9c9d9a33839c4a5f62c0890d": { + "balance": "0xd8d854b22430688000" + }, + "c6cd68ec35362c5ad84c82ad4edc232125912d99": { + "balance": "0x5e0549c9632e1d80000" + }, + "c6d8954e8f3fc533d2d230ff025cb4dce14f3426": { + "balance": "0x15af1d78b58c400000" + }, + "c6dbdb9efd5ec1b3786e0671eb2279b253f215ed": { + "balance": "0x3635c9adc5dea00000" + }, + "c6df2075ebd240d44869c2be6bdf82e63d4ef1f5": { + "balance": "0x1158e460913d00000" + }, + "c6e2f5af979a03fd723a1b6efa728318cf9c1800": { + "balance": "0x243d4d18229ca20000" + }, + "c6e324beeb5b36765ecd464260f7f26006c5c62e": { + "balance": "0x6c6b935b8bbd400000" + }, + "c6e4cc0c7283fc1c85bc4813effaaf72b49823c0": { + "balance": "0xf031ec9c87dd30000" + }, + "c6ee35934229693529dc41d9bb71a2496658b88e": { + "balance": "0x42bf06b78ed3b500000" + }, + "c6fb1ee37417d080a0d048923bdabab095d077c6": { + "balance": "0xad78ebc5ac6200000" + }, + "c70527d444c490e9fc3f5cc44e66eb4f306b380f": { + "balance": "0xd8d726b7177a800000" + }, + "c70d856d621ec145303c0a6400cd17bbd6f5eaf7": { + "balance": "0x1158e460913d00000" + }, + "c70fa45576bf9c865f983893002c414926f61029": { + "balance": "0x15b4aa8e9702680000" + }, + "c71145e529c7a714e67903ee6206e4c3042b6727": { + "balance": "0x4d853c8f8908980000" + }, + "c71b2a3d7135d2a85fb5a571dcbe695e13fc43cd": { + "balance": "0x3635c9adc5dea00000" + }, + "c71f1d75873f33dcb2dd4b3987a12d0791a5ce27": { + "balance": "0x3708baed3d68900000" + }, + "c71f92a3a54a7b8c2f5ea44305fccb84eee23148": { + "balance": "0x2b59ca131d2060000" + }, + "c721b2a7aa44c21298e85039d00e2e460e670b9c": { + "balance": "0x7a1fe160277000000" + }, + "c72cb301258e91bc08998a805dd192f25c2f9a35": { + "balance": "0x2009c5c8bf6fdc0000" + }, + "c7368b9709a5c1b51c0adf187a65df14e12b7dba": { + "balance": "0x2026fc77f03e5ae8000" + }, + "c739259e7f85f2659bef5f609ed86b3d596c201e": { + "balance": "0xad78ebc5ac6200000" + }, + "c73e2112282215dc0762f32b7e807dcd1a7aae3e": { + "balance": "0x1760cbc623bb3500000" + }, + "c749668042e71123a648975e08ed6382f83e05e2": { + "balance": "0x2f6f10780d22cc00000" + }, + "c74a3995f807de1db01a2eb9c62e97d0548f696f": { + "balance": "0x3635c9adc5dea00000" + }, + "c7506c1019121ff08a2c8c1591a65eb4bdfb4a3f": { + "balance": "0x2086ac351052600000" + }, + "c75c37ce2da06bbc40081159c6ba0f976e3993b1": { + "balance": "0x3a7923151ecf580000" + }, + "c75d2259306aec7df022768c69899a652185dbc4": { + "balance": "0xd8d726b7177a800000" + }, + "c760971bbc181c6a7cf77441f24247d19ce9b4cf": { + "balance": "0x6c6b935b8bbd400000" + }, + "c76130c73cb9210238025c9df95d0be54ac67fbe": { + "balance": "0x5150ae84a8cdf00000" + }, + "c765e00476810947816af142d46d2ee7bca8cc4f": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "c7675e5647b9d8daf4d3dff1e552f6b07154ac38": { + "balance": "0x9c2007651b2500000" + }, + "c77b01a6e911fa988d01a3ab33646beef9c138f3": { + "balance": "0x271b6fa5dbe6cc0000" + }, + "c7837ad0a0bf14186937ace06c5546a36aa54f46": { + "balance": "0xd8d726b7177a800000" + }, + "c79806032bc7d828f19ac6a640c68e3d820fa442": { + "balance": "0x1158e460913d00000" + }, + "c799e34e88ff88be7de28e15e4f2a63d0b33c4cb": { + "balance": "0xad78ebc5ac6200000" + }, + "c79d5062c796dd7761f1f13e558d73a59f82f38b": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "c7a018f0968a51d1f6603c5c49dc545bcb0ff293": { + "balance": "0xd8d726b7177a800000" + }, + "c7aff91929797489555a2ff1d14d5c695a108355": { + "balance": "0x3635c9adc5dea00000" + }, + "c7b1c83e63203f9547263ef6282e7da33b6ed659": { + "balance": "0xfc936392801c0000" + }, + "c7b39b060451000ca1049ba154bcfa00ff8af262": { + "balance": "0x152d02c7e14af6800000" + }, + "c7bf17c4c11f98941f507e77084fffbd2dbd3db5": { + "balance": "0x3635c9adc5dea00000" + }, + "c7bf2ed1ed312940ee6aded1516e268e4a604856": { + "balance": "0x14542ba12a337c00000" + }, + "c7d44fe32c7f8cd5f1a97427b6cd3afc9e45023e": { + "balance": "0x55a6e79ccd1d300000" + }, + "c7d5c7054081e918ec687b5ab36e973d18132935": { + "balance": "0x9ddc1e3b901180000" + }, + "c7de5e8eafb5f62b1a0af2195cf793c7894c9268": { + "balance": "0x3635c9adc5dea00000" + }, + "c7e330cd0c890ac99fe771fcc7e7b009b7413d8a": { + "balance": "0xd8d726b7177a800000" + }, + "c7eac31abce6d5f1dea42202b6a674153db47a29": { + "balance": "0x2009c5c8bf6fdc0000" + }, + "c7ec62b804b1f69b1e3070b5d362c62fb309b070": { + "balance": "0x2c46bf5416066110000" + }, + "c7f72bb758016b374714d4899bce22b4aec70a31": { + "balance": "0x3a26c9478f5e2d0000" + }, + "c80b36d1beafba5fcc644d60ac6e46ed2927e7dc": { + "balance": "0xb98bc829a6f90000" + }, + "c811c2e9aa1ac3462eba5e88fcb5120e9f6e2ca2": { + "balance": "0x4be6d887bd876e0000" + }, + "c817df1b91faf30fe3251571727c9711b45d8f06": { + "balance": "0x6c6acc67d7b1d40000" + }, + "c81fb7d20fd2800192f0aac198d6d6a37d3fcb7d": { + "balance": "0xe1149331c2dde0000" + }, + "c820c711f07705273807aaaa6de44d0e4b48be2e": { + "balance": "0x8670e9ec6598c0000" + }, + "c8231ba5a411a13e222b29bfc1083f763158f226": { + "balance": "0x3637096c4bcc690000" + }, + "c836e24a6fcf29943b3608e662290a215f6529ea": { + "balance": "0xfd45064eaee100000" + }, + "c83ba6dd9549be1d3287a5a654d106c34c6b5da2": { + "balance": "0x17b7883c06916600000" + }, + "c83e9d6a58253beebeb793e6f28b054a58491b74": { + "balance": "0xf46c2b6f5a9140000" + }, + "c841884fa4785fb773b28e9715fae99a5134305d": { + "balance": "0x6c6b935b8bbd400000" + }, + "c84d9bea0a7b9f140220fd8b9097cfbfd5edf564": { + "balance": "0x6ab9ec291ad7d8000" + }, + "c852428d2b586497acd30c56aa13fb5582f84402": { + "balance": "0x3342d60dff19600000" + }, + "c853215b9b9f2d2cd0741e585e987b5fb80c212e": { + "balance": "0x54069233bf7f780000" + }, + "c85325eab2a59b3ed863c86a5f2906a04229ffa9": { + "balance": "0x193d7f7d253de00000" + }, + "c85ef27d820403805fc9ed259fff64acb8d6346a": { + "balance": "0x6c6b935b8bbd400000" + }, + "c8616b4ec09128cdff39d6e4b9ac86eec471d5f2": { + "balance": "0x10d3aa536e2940000" + }, + "c86190904b8d079ec010e462cbffc90834ffaa5c": { + "balance": "0x22385a827e815500000" + }, + "c8710d7e8b5a3bd69a42fe0fa8b87c357fddcdc8": { + "balance": "0xd8d726b7177a800000" + }, + "c87352dba582ee2066b9c002a962e003134f78b1": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "c87c77e3c24adecdcd1038a38b56e18dead3b702": { + "balance": "0x1dd0c885f9a0d800000" + }, + "c87d3ae3d88704d9ab0009dcc1a0067131f8ba3c": { + "balance": "0x6ac5c62d9486070000" + }, + "c8814e34523e38e1f927a7dce8466a447a093603": { + "balance": "0x21e19e0c9bab2400000" + }, + "c88255eddcf521c6f81d97f5a42181c9073d4ef1": { + "balance": "0xfc39044d00a2a8000" + }, + "c885a18aabf4541b7b7b7ecd30f6fae6869d9569": { + "balance": "0x6c6b935b8bbd400000" + }, + "c88ca1e6e5f4d558d13780f488f10d4ad3130d34": { + "balance": "0x54069233bf7f780000" + }, + "c88eec54d305c928cc2848c2fee23531acb96d49": { + "balance": "0x6c6ad382d4fb610000" + }, + "c89cf504b9f3f835181fd8424f5ccbc8e1bddf7d": { + "balance": "0x21e19e0c9bab2400000" + }, + "c8a2c4e59e1c7fc54805580438aed3e44afdf00e": { + "balance": "0x2629f66e0c5300000" + }, + "c8aa49e3809f0899f28ab57e6743709d58419033": { + "balance": "0x2fb474098f67c00000" + }, + "c8ab1a3cf46cb8b064df2e222d39607394203277": { + "balance": "0x6c6b935b8bbd400000" + }, + "c8b1850525d946f2ae84f317b15188c536a5dc86": { + "balance": "0x918ddc3a42a3d40000" + }, + "c8d4e1599d03b79809e0130a8dc38408f05e8cd3": { + "balance": "0x9fad06241279160000" + }, + "c8dd27f16bf22450f5771b9fe4ed4ffcb30936f4": { + "balance": "0xaadec983fcff40000" + }, + "c8de7a564c7f4012a6f6d10fd08f47890fbf07d4": { + "balance": "0x1043561a8829300000" + }, + "c8e2adeb545e499d982c0c117363ceb489c5b11f": { + "balance": "0x35659ef93f0fc40000" + }, + "c8e558a3c5697e6fb23a2594c880b7a1b68f9860": { + "balance": "0x21e19e0c9bab2400000" + }, + "c8f2b320e6dfd70906c597bad2f9501312c78259": { + "balance": "0x51934b8b3a57d00000" + }, + "c90300cb1d4077e6a6d7e169a460468cf4a492d7": { + "balance": "0x6c6b935b8bbd400000" + }, + "c90c3765156bca8e4897ab802419153cbe5225a9": { + "balance": "0xad78ebc5ac6200000" + }, + "c910a970556c9716ea53af66ddef93143124913d": { + "balance": "0x55a6e79ccd1d300000" + }, + "c9127b7f6629ee13fc3f60bc2f4467a20745a762": { + "balance": "0x37c9aa4e7ce421d8000" + }, + "c91bb562e42bd46130e2d3ae4652b6a4eb86bc0f": { + "balance": "0x1d460162f516f00000" + }, + "c9308879056dfe138ef8208f79a915c6bc7e70a8": { + "balance": "0x21e19e0c9bab2400000" + }, + "c934becaf71f225f8b4a4bf7b197f4ac9630345c": { + "balance": "0x43c33c1937564800000" + }, + "c93fbde8d46d2bcc0fa9b33bd8ba7f8042125565": { + "balance": "0x4be4e7267b6ae00000" + }, + "c94089553ae4c22ca09fbc98f57075cf2ec59504": { + "balance": "0xd8d726b7177a800000" + }, + "c94110e71afe578aa218e4fc286403b0330ace8d": { + "balance": "0x6c6b935b8bbd400000" + }, + "c946d5acc1346eba0a7279a0ac1d465c996d827e": { + "balance": "0x3783d545fdf0aa40000" + }, + "c94a28fb3230a9ddfa964e770f2ce3c253a7be4f": { + "balance": "0xad78ebc5ac6200000" + }, + "c94a585203da7bbafd93e15884e660d4b1ead854": { + "balance": "0x17b7883c06916600000" + }, + "c94f7c35c027d47df8ef4f9df85a9248a17dd23b": { + "balance": "0x19f8e7559924c0000" + }, + "c951900c341abbb3bafbf7ee2029377071dbc36a": { + "balance": "0x11c25d004d01f80000" + }, + "c953f934c0eb2d0f144bdab00483fd8194865ce7": { + "balance": "0x6c6b935b8bbd400000" + }, + "c96626728aaa4c4fb3d31c26df3af310081710d1": { + "balance": "0xb50fcfafebecb00000" + }, + "c96751656c0a8ef4357b7344322134b983504aca": { + "balance": "0x6c6b935b8bbd400000" + }, + "c98048687f2bfcc9bd90ed18736c57edd352b65d": { + "balance": "0x3635c9adc5dea00000" + }, + "c981d312d287d558871edd973abb76b979e5c35e": { + "balance": "0x6acb3df27e1f880000" + }, + "c982586d63b0d74c201b1af8418372e30c7616be": { + "balance": "0x56bc75e2d63100000" + }, + "c989434f825aaf9c552f685eba7c11db4a5fc73a": { + "balance": "0x1b28c58d9696b40000" + }, + "c989eec307e8839b9d7237cfda08822962abe487": { + "balance": "0x15af1d78b58c400000" + }, + "c992be59c6721caf4e028f9e8f05c25c55515bd4": { + "balance": "0x1158e460913d00000" + }, + "c9957ba94c1b29e5277ec36622704904c63dc023": { + "balance": "0x683efc6782642c0000" + }, + "c99a9cd6c9c1be3534eecd92ecc22f5c38e9515b": { + "balance": "0x105593b3a169d770000" + }, + "c9ac01c3fb0929033f0ccc7e1acfeaaba7945d47": { + "balance": "0x2a36a9e9ca4d2038000" + }, + "c9b698e898d20d4d4f408e4e4d061922aa856307": { + "balance": "0x22b1c8c1227a00000" + }, + "c9b6b686111691ee6aa197c7231a88dc60bd295d": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "c9c7ac0bdd9342b5ead4360923f68c72a6ba633a": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "c9c80dc12e7bab86e949d01e4c3ed35f2b9bba5f": { + "balance": "0x6c6b935b8bbd400000" + }, + "c9d76446d5aadff80b68b91b08cd9bc8f5551ac1": { + "balance": "0x26b4bd9110dce80000" + }, + "c9dcbb056f4db7d9da39936202c5bd8230b3b477": { + "balance": "0x43c33c1937564800000" + }, + "c9e02608066828848aeb28c73672a12925181f4d": { + "balance": "0x1b1b6bd7af64c70000" + }, + "ca0432cb157b5179f02ebba5c9d1b54fec4d88ca": { + "balance": "0x3635c9adc5dea00000" + }, + "ca122cf0f2948896b74843f49afed0ba1618eed7": { + "balance": "0x1e5b8fa8fe2ac00000" + }, + "ca22cda3606da5cad013b8074706d7e9e721a50c": { + "balance": "0x17181c6fa3981940000" + }, + "ca23f62dff0d6460036c62e840aec5577e0befd2": { + "balance": "0x7a1fe160277000000" + }, + "ca25ff34934c1942e22a4e7bd56f14021a1af088": { + "balance": "0xaadec983fcff40000" + }, + "ca373fe3c906b8c6559ee49ccd07f37cd4fb5266": { + "balance": "0x61093d7c2c6d380000" + }, + "ca41ccac30172052d522cd2f2f957d248153409f": { + "balance": "0x6acb3df27e1f880000" + }, + "ca4288014eddc5632f5facb5e38517a8f8bc5d98": { + "balance": "0x126e72a69a50d00000" + }, + "ca428863a5ca30369892d612183ef9fb1a04bcea": { + "balance": "0x52663ccab1e1c00000" + }, + "ca49a5f58adbefae23ee59eea241cf0482622eaa": { + "balance": "0x4d853c8f8908980000" + }, + "ca4ca9e4779d530ecbacd47e6a8058cfde65d98f": { + "balance": "0x2b5e3af16b18800000" + }, + "ca657ec06fe5bc09cf23e52af7f80cc3689e6ede": { + "balance": "0x30ca024f987b900000" + }, + "ca66b2280fa282c5b67631ce552b62ee55ad8474": { + "balance": "0x6ac422f53492880000" + }, + "ca6c818befd251361e02744068be99d8aa60b84a": { + "balance": "0x14542ba12a337c00000" + }, + "ca70f4ddbf069d2143bd6bbc7f696b52789b32e7": { + "balance": "0xa2a15d09519be00000" + }, + "ca747576446a4c8f30b08340fee198de63ec92cf": { + "balance": "0x17c8e1206722a300000" + }, + "ca7ba3ff536c7e5f0e153800bd383db8312998e0": { + "balance": "0x931ac3d6bb2400000" + }, + "ca8276c477b4a07b80107b843594189607b53bec": { + "balance": "0x14542ba12a337c00000" + }, + "ca8409083e01b397cf12928a05b68455ce6201df": { + "balance": "0x56bc75e2d631000000" + }, + "ca98c7988efa08e925ef9c9945520326e9f43b99": { + "balance": "0xd8d726b7177a800000" + }, + "ca9a042a6a806ffc92179500d24429e8ab528117": { + "balance": "0x3ba1910bf341b00000" + }, + "ca9dec02841adf5cc920576a5187edd2bd434a18": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "ca9faa17542fafbb388eab21bc4c94e8a7b34788": { + "balance": "0x6c6b8fce0d18798000" + }, + "caaa68ee6cdf0d34454a769b0da148a1faaa1865": { + "balance": "0x1872e1de7fe52c00000" + }, + "caad9dc20d589ce428d8fda3a9d53a607b7988b5": { + "balance": "0xd8d726b7177a800000" + }, + "cab0d32cf3767fa6b3537c84328baa9f50458136": { + "balance": "0x1e5b8fa8fe2ac000000" + }, + "cab9a301e6bd46e940355028eccd40ce4d5a1ac3": { + "balance": "0x15af1d78b58c400000" + }, + "cab9a97ada065c87816e6860a8f1426fe6b3d775": { + "balance": "0x3635c9adc5dea00000" + }, + "cabab6274ed15089737e287be878b757934864e2": { + "balance": "0x43c33c1937564800000" + }, + "cabdaf354f4720a466a764a528d60e3a482a393c": { + "balance": "0x3635c9adc5dea00000" + }, + "cacb675e0996235404efafbb2ecb8152271b55e0": { + "balance": "0x25f273933db5700000" + }, + "cad14f9ebba76680eb836b079c7f7baaf481ed6d": { + "balance": "0xcef3d7bd7d0340000" + }, + "cae3a253bcb2cf4e13ba80c298ab0402da7c2aa0": { + "balance": "0x124bc0ddd92e5600000" + }, + "caef027b1ab504c73f41f2a10979b474f97e309f": { + "balance": "0xad78ebc5ac6200000" + }, + "caf4481d9db78dc4f25f7b4ac8bd3b1ca0106b31": { + "balance": "0x10f0cf064dd59200000" + }, + "cafde855864c2598da3cafc05ad98df2898e8048": { + "balance": "0x300a8ed96ff4a940000" + }, + "cb0dd7cf4e5d8661f6028943a4b9b75c914436a7": { + "balance": "0x1969368974c05b000000" + }, + "cb1bb6f1da5eb10d4899f7e61d06c1b00fdfb52d": { + "balance": "0x384524cc70b7780000" + }, + "cb3d766c983f192bcecac70f4ee03dd9ff714d51": { + "balance": "0x56bc75e2d63100000" + }, + "cb42b44eb5fd60b5837e4f9eb47267523d1a229c": { + "balance": "0x2ee449550898e40000" + }, + "cb47bd30cfa8ec5468aaa6a94642ced9c819c8d4": { + "balance": "0xd8d726b7177a800000" + }, + "cb48fe8265d9af55eb7006bc335645b0a3a183be": { + "balance": "0xa2a15d09519be00000" + }, + "cb4a914d2bb029f32e5fef5c234c4fec2d2dd577": { + "balance": "0x6194049f30f7200000" + }, + "cb4abfc282aed76e5d57affda542c1f382fcacf4": { + "balance": "0x1b90f11c3183faa0000" + }, + "cb4ad0c723da46ab56d526da0c1d25c73daff10a": { + "balance": "0x1ba5abf9e779380000" + }, + "cb4bb1c623ba28dc42bdaaa6e74e1d2aa1256c2a": { + "balance": "0x6c6acc67d7b1d40000" + }, + "cb50587412822304ebcba07dab3a0f09fffee486": { + "balance": "0x4a4491bd6dcd280000" + }, + "cb58990bcd90cfbf6d8f0986f6fa600276b94e2d": { + "balance": "0x3634bf39ab98788000" + }, + "cb68ae5abe02dcf8cbc5aa719c25814651af8b85": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "cb7479109b43b26657f4465f4d18c6f974be5f42": { + "balance": "0x62a992e53a0af00000" + }, + "cb7d2b8089e9312cc9aeaa2773f35308ec6c2a7b": { + "balance": "0x21e19e0c9bab2400000" + }, + "cb86edbc8bbb1f9131022be649565ebdb09e32a1": { + "balance": "0x6c6b935b8bbd400000" + }, + "cb93199b9c90bc4915bd859e3d42866dc8c18749": { + "balance": "0xc90df07def78c0000" + }, + "cb94e76febe208116733e76e805d48d112ec9fca": { + "balance": "0x3635c9adc5dea00000" + }, + "cb9b5103e4ce89af4f64916150bff9eecb9faa5c": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "cba25c7a503cc8e0d04971ca05c762f9b762b48b": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "cba288cd3c1eb4d59ddb06a6421c14c345a47b24": { + "balance": "0xd8d726b7177a800000" + }, + "cbb3189e4bd7f45f178b1c30c76e26314d4a4b0a": { + "balance": "0xffe0b677c65a98000" + }, + "cbb7be17953f2ccc93e1bc99805bf45511434e4c": { + "balance": "0xaae5b9df56d2f200000" + }, + "cbc04b4d8b82caf670996f160c362940d66fcf1a": { + "balance": "0x14542ba12a337c00000" + }, + "cbde9734b8e6aa538c291d6d7facedb0f338f857": { + "balance": "0x6c6b935b8bbd400000" + }, + "cbe1b948864d8474e765145858fca4550f784b92": { + "balance": "0x21e19e0c9bab2400000" + }, + "cbe52fc533d7dd608c92a260b37c3f45deb4eb33": { + "balance": "0x3635c9adc5dea00000" + }, + "cbe810fe0fecc964474a1db97728bc87e973fcbd": { + "balance": "0x21e19e0c9bab2400000" + }, + "cbf16a0fe2745258cd52db2bf21954c975fc6a15": { + "balance": "0x1043561a8829300000" + }, + "cbf37ff854a2f1ce53934494777892d3ec655782": { + "balance": "0x21e19e0c9bab2400000" + }, + "cbfa6af6c283b046e2772c6063b0b21553c40106": { + "balance": "0x6c6b935b8bbd400000" + }, + "cbfa76db04ce38fb205d37b8d377cf1380da0317": { + "balance": "0x4d853c8f8908980000" + }, + "cc034985d3f28c2d39b1a34bced4d3b2b6ca234e": { + "balance": "0x9ddc1e3b901180000" + }, + "cc043c4388d345f884c6855e71142a9f41fd6935": { + "balance": "0x1158e460913d00000" + }, + "cc1d6ead01aada3e8dc7b95dca25df26eefa639d": { + "balance": "0x6c6b935b8bbd400000" + }, + "cc2b5f448f3528d3fe41cc7d1fa9c0dc76f1b776": { + "balance": "0x340aad21b3b700000" + }, + "cc2d04f0a4017189b340ca77198641dcf6456b91": { + "balance": "0xd5967be4fc3f100000" + }, + "cc419fd9912b85135659e77a93bc3df182d45115": { + "balance": "0x21e19e0c9bab2400000" + }, + "cc45fb3a555bad807b388a0357c855205f7c75e8": { + "balance": "0x2ee449550898e40000" + }, + "cc48414d2ac4d42a5962f29eee4497092f431352": { + "balance": "0x8ba52e6fc45e40000" + }, + "cc4a2f2cf86cf3e43375f360a4734691195f1490": { + "balance": "0x4915053bd129098000" + }, + "cc4f0ff2aeb67d54ce3bc8c6510b9ae83e9d328b": { + "balance": "0x15af1d78b58c400000" + }, + "cc4faac00be6628f92ef6b8cb1b1e76aac81fa18": { + "balance": "0xb22a2eab0f0fd0000" + }, + "cc4feb72df98ff35a138e01761d1203f9b7edf0a": { + "balance": "0x17b7883c06916600000" + }, + "cc606f511397a38fc7872bd3b0bd03c71bbd768b": { + "balance": "0x3635c9adc5dea00000" + }, + "cc60f836acdef3548a1fefcca13ec6a937db44a0": { + "balance": "0x4b06dbbb40f4a0000" + }, + "cc6c03bd603e09de54e9c4d5ac6d41cbce715724": { + "balance": "0x556f64c1fe7fa0000" + }, + "cc6c2df00e86eca40f21ffda1a67a1690f477c65": { + "balance": "0xab4dcf399a3a600000" + }, + "cc6d7b12061bc96d104d606d65ffa32b0036eb07": { + "balance": "0x21e19e0c9bab2400000" + }, + "cc73dd356b4979b579b401d4cc7a31a268ddce5a": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "cc758d071d25a6320af68c5dc9c4f6955ba94520": { + "balance": "0x14542ba12a337c00000" + }, + "cc7b0481cc32e6faef2386a07022bcb6d2c3b4fc": { + "balance": "0xab4dcf399a3a600000" + }, + "cc943be1222cd1400a2399dd1b459445cf6d54a9": { + "balance": "0x2a740ae6536fc880000" + }, + "cc9519d1f3985f6b255eaded12d5624a972721e1": { + "balance": "0x3635c9adc5dea00000" + }, + "cc9ac715cd6f2610c52b58676456884297018b29": { + "balance": "0xb98bc829a6f90000" + }, + "cca07bb794571d4acf041dad87f0d1ef3185b319": { + "balance": "0x6c6b935b8bbd400000" + }, + "ccabc6048a53464424fcf76eeb9e6e1801fa23d4": { + "balance": "0x2ab7b260ff3fd0000" + }, + "ccae0d3d852a7da3860f0636154c0a6ca31628d4": { + "balance": "0x5c6d12b6bc1a00000" + }, + "ccca24d8c56d6e2c07db086ec07e585be267ac8d": { + "balance": "0xad78ebc5ac6200000" + }, + "ccd521132d986cb96869842622a7dda26c3ed057": { + "balance": "0x6c6b935b8bbd400000" + }, + "ccf43975b76bfe735fec3cb7d4dd24f805ba0962": { + "balance": "0x340aad21b3b700000" + }, + "ccf62a663f1353ba2ef8e6521dc1ecb673ec8ef7": { + "balance": "0x83d6c7aab63600000" + }, + "ccf7110d1bd9a74bfd1d7d7d2d9d55607e7b837d": { + "balance": "0x30ca024f987b900000" + }, + "ccfd725760a68823ff1e062f4cc97e1360e8d997": { + "balance": "0x15ac56edc4d12c0000" + }, + "cd020f8edfcf524798a9b73a640334bbf72f80a5": { + "balance": "0x73f75d1a085ba0000" + }, + "cd06f8c1b5cdbd28e2d96b6346c3e85a0483ba24": { + "balance": "0x3635c9adc5dea00000" + }, + "cd072e6e1833137995196d7bb1725fef8761f655": { + "balance": "0x14542ba12a337c00000" + }, + "cd0a161bc367ae0927a92aac9cf6e5086714efca": { + "balance": "0x6c6b935b8bbd400000" + }, + "cd0af3474e22f069ec3407870dd770443d5b12b0": { + "balance": "0x8e5eb4ee77b2ef0000" + }, + "cd0b0257e783a3d2c2e3ba9d6e79b75ef98024d4": { + "balance": "0x9fad06241279160000" + }, + "cd102cd6db3df14ad6af0f87c72479861bfc3d24": { + "balance": "0x6c6b935b8bbd400000" + }, + "cd1e66ed539dd92fc40bbaa1fa16de8c02c14d45": { + "balance": "0xc77e4256863d80000" + }, + "cd1ed263fbf6f6f7b48aef8f733d329d4382c7c7": { + "balance": "0x100bd33fb98ba0000" + }, + "cd2a36d753e9e0ed012a584d716807587b41d56a": { + "balance": "0xe2ba75b0b1f1c0000" + }, + "cd32a4a8a27f1cc63954aa634f7857057334c7a3": { + "balance": "0x3ad166576c72d40000" + }, + "cd35ff010ec501a721a1b2f07a9ca5877dfcf95a": { + "balance": "0xd96fce90cfabcc0000" + }, + "cd4306d7f6947ac1744d4e13b8ef32cb657e1c00": { + "balance": "0x1b1ab319f5ec750000" + }, + "cd43258b7392a930839a51b2ef8ad23412f75a9f": { + "balance": "0x6c6b935b8bbd400000" + }, + "cd49bf185e70d04507999f92a4de4455312827d0": { + "balance": "0x3635c9adc5dea00000" + }, + "cd5510a242dfb0183de925fba866e312fabc1657": { + "balance": "0x821ab0d44149800000" + }, + "cd566ad7b883f01fd3998a9a58a9dee4724ddca5": { + "balance": "0x330ae1835be300000" + }, + "cd59f3dde77e09940befb6ee58031965cae7a336": { + "balance": "0x21e19e0c9bab2400000" + }, + "cd725d70be97e677e3c8e85c0b26ef31e9955045": { + "balance": "0x487a9a304539440000" + }, + "cd7e47909464d871b9a6dc76a8e9195db3485e7a": { + "balance": "0x215f835bc769da80000" + }, + "cd7ece086b4b619b3b369352ee38b71ddb06439a": { + "balance": "0xad78ebc5ac6200000" + }, + "cd7f09d7ed66d0c38bc5ad4e32b7f2b08dc1b30d": { + "balance": "0x3e3bb34da2a4700000" + }, + "cd9529492b5c29e475acb941402b3d3ba50686b0": { + "balance": "0x6acb3df27e1f880000" + }, + "cd95fa423d6fc120274aacde19f4eeb766f10420": { + "balance": "0xad78ebc5ac6200000" + }, + "cd9b4cef73390c83a8fd71d7b540a7f9cf8b8c92": { + "balance": "0x4e1003b28d9280000" + }, + "cda1741109c0265b3fb2bf8d5ec9c2b8a3346b63": { + "balance": "0x1158e460913d00000" + }, + "cda1b886e3a795c9ba77914e0a2fe5676f0f5ccf": { + "balance": "0x5bf60ea42c2040000" + }, + "cda4530f4b9bc50905b79d17c28fc46f95349bdf": { + "balance": "0x3310e04911f1f80000" + }, + "cdab46a5902080646fbf954204204ae88404822b": { + "balance": "0x1d8a96e5c606eb0000" + }, + "cdb597299030183f6e2d238533f4642aa58754b6": { + "balance": "0x15af1d78b58c400000" + }, + "cdd5d881a7362c9070073bdfbc75e72453ac510e": { + "balance": "0x2da518eae48ee80000" + }, + "cdd60d73efaad873c9bbfb178ca1b7105a81a681": { + "balance": "0x1bc16d674ec800000" + }, + "cdd9efac4d6d60bd71d95585dce5d59705c13564": { + "balance": "0x56bc75e2d63100000" + }, + "cde36d81d128c59da145652193eec2bfd96586ef": { + "balance": "0xd8d726b7177a800000" + }, + "cdea386f9d0fd804d02818f237b7d9fa7646d35e": { + "balance": "0xa349d36d80ec578000" + }, + "cdecf5675433cdb0c2e55a68db5d8bbe78419dd2": { + "balance": "0x1158e460913d00000" + }, + "cdfd8217339725d7ebac11a63655f265eff1cc3d": { + "balance": "0x10f0c696410e3a90000" + }, + "ce079f51887774d8021cb3b575f58f18e9acf984": { + "balance": "0x9c2007651b2500000" + }, + "ce1884ddbbb8e10e4dba6e44feeec2a7e5f92f05": { + "balance": "0xd8d726b7177a800000" + }, + "ce1b0cb46aaecfd79b880cad0f2dda8a8dedd0b1": { + "balance": "0x1158e460913d00000" + }, + "ce26f9a5305f8381094354dbfc92664e84f902b5": { + "balance": "0xc7aaab0591eec0000" + }, + "ce2deab51c0a9ae09cd212c4fa4cc52b53cc0dec": { + "balance": "0x6c6b935b8bbd400000" + }, + "ce2e0da8934699bb1a553e55a0b85c169435bea3": { + "balance": "0x10f0c696410e3a90000" + }, + "ce3a61f0461b00935e85fa1ead82c45e5a64d488": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "ce4b065dbcb23047203262fb48c1188364977470": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "ce53c8cdd74296aca987b2bc19c2b875a48749d0": { + "balance": "0xa2a15d09519be00000" + }, + "ce5e04f0184369bcfa06aca66ffa91bf59fa0fb9": { + "balance": "0x22b1c8c1227a00000" + }, + "ce5eb63a7bf4fbc2f6e4baa0c68ab1cb4cf98fb4": { + "balance": "0x6c6b935b8bbd400000" + }, + "ce62125adec3370ac52110953a4e760be9451e3b": { + "balance": "0x83d6c7aab63600000" + }, + "ce71086d4c602554b82dcbfce88d20634d53cc4d": { + "balance": "0x92896529baddc880000" + }, + "ce8a6b6d5033b1498b1ffeb41a41550405fa03a2": { + "balance": "0xd8d726b7177a800000" + }, + "ce9786d3712fa200e9f68537eeaa1a06a6f45a4b": { + "balance": "0x61093d7c2c6d380000" + }, + "ce9d21c692cd3c01f2011f505f870036fa8f6cd2": { + "balance": "0x15af1d78b58c400000" + }, + "cea2896623f4910287a2bdc5be83aea3f2e6de08": { + "balance": "0x1fb5a3751e490dc0000" + }, + "cea34a4dd93dd9aefd399002a97d997a1b4b89cd": { + "balance": "0x5150ae84a8cdf00000" + }, + "cea43f7075816b60bbfce68b993af0881270f6c4": { + "balance": "0x6c6b935b8bbd400000" + }, + "cea8743341533cb2f0b9c6efb8fda80d77162825": { + "balance": "0x56bc75e2d63100000" + }, + "ceb089ec8a78337e8ef88de11b49e3dd910f748f": { + "balance": "0x3635c9adc5dea00000" + }, + "ceb33d78e7547a9da2e87d51aec5f3441c87923a": { + "balance": "0x1158e460913d00000" + }, + "ceb389381d48a8ae4ffc483ad0bb5e204cfdb1ec": { + "balance": "0x2827e6e4dd62ba8000" + }, + "cec6fc65853f9cce5f8e844676362e1579015f02": { + "balance": "0x6c6b935b8bbd400000" + }, + "ced3c7be8de7585140952aeb501dc1f876ecafb0": { + "balance": "0xd8d726b7177a800000" + }, + "ced81ec3533ff1bfebf3e3843ee740ad11758d3e": { + "balance": "0x6acb3df27e1f880000" + }, + "cedcb3a1d6843fb6bef643617deaf38f8e98dd5f": { + "balance": "0x19e2a4c818b9060000" + }, + "cee699c0707a7836252b292f047ce8ad289b2f55": { + "balance": "0x119a1e21aa69560000" + }, + "ceed47ca5b899fd1623f21e9bd4db65a10e5b09d": { + "balance": "0x73877404c1eee0000" + }, + "cef77451dfa2c643e00b156d6c6ff84e2373eb66": { + "balance": "0xa31062beeed700000" + }, + "cf1169041c1745e45b172435a2fc99b49ace2b00": { + "balance": "0x1bb88baab2d7c0000" + }, + "cf157612764e0fd696c8cb5fba85df4c0ddc3cb0": { + "balance": "0x65a4da25d3016c00000" + }, + "cf1bdb799b2ea63ce134668bdc198b54840f180b": { + "balance": "0xfc936392801c0000" + }, + "cf2288ef4ebf88e86db13d8a0e0bf52a056582c3": { + "balance": "0x89506fbf9740740000" + }, + "cf264e6925130906c4d7c18591aa41b2a67f6f58": { + "balance": "0x6c6b935b8bbd400000" + }, + "cf26b47bd034bc508e6c4bcfd6c7d30034925761": { + "balance": "0x6194049f30f7200000" + }, + "cf2e2ad635e9861ae95cb9bafcca036b5281f5ce": { + "balance": "0x77432217e6836000000" + }, + "cf2e734042a355d05ffb2e3915b16811f45a695e": { + "balance": "0x6c6b935b8bbd400000" + }, + "cf348f2fe47b7e413c077a7baf3a75fbf8428692": { + "balance": "0x6c6b935b8bbd400000" + }, + "cf3f9128b07203a3e10d7d5755c0c4abc6e2cac2": { + "balance": "0x10f0cf064dd59200000" + }, + "cf3fbfa1fd32d7a6e0e6f8ef4eab57be34025c4c": { + "balance": "0x39a1c0f7594d480000" + }, + "cf4166746e1d3bc1f8d0714b01f17e8a62df1464": { + "balance": "0x3677036edf0af60000" + }, + "cf4f1138f1bd6bf5b6d485cce4c1017fcb85f07d": { + "balance": "0x2fd0bc77c32bff0000" + }, + "cf5a6f9df75579c644f794711215b30d77a0ce40": { + "balance": "0x6c6b935b8bbd400000" + }, + "cf5e0eacd1b39d0655f2f77535ef6608eb950ba0": { + "balance": "0x6c6b935b8bbd400000" + }, + "cf684dfb8304729355b58315e8019b1aa2ad1bac": { + "balance": "0x177224aa844c720000" + }, + "cf694081c76d18c64ca71382be5cd63b3cb476f8": { + "balance": "0x3635c9adc5dea00000" + }, + "cf6e52e6b77480b1867efec6446d9fc3cc3577e8": { + "balance": "0xc0901f6bd98790000" + }, + "cf883a20329667ea226a1e3c765dbb6bab32219f": { + "balance": "0xa4be3564d616660000" + }, + "cf8882359c0fb23387f5674074d8b17ade512f98": { + "balance": "0x14542ba12a337c00000" + }, + "cf89f7460ba3dfe83c5a1d3a019ee1250f242f0f": { + "balance": "0x356813cdcefd028000" + }, + "cf923a5d8fbc3d01aa079d1cfe4b43ce071b1611": { + "balance": "0x6c6b935b8bbd400000" + }, + "cf9be9b9ab86c66b59968e67b8d4dcff46b1814a": { + "balance": "0x23c757072b8dd00000" + }, + "cfa8b37127149bdbfee25c34d878510951ea10eb": { + "balance": "0x6c6b935b8bbd400000" + }, + "cfac2e1bf33205b05533691a02267ee19cd81836": { + "balance": "0x3635c9adc5dea00000" + }, + "cfbb32b7d024350e3321fa20c9a914035372ffc6": { + "balance": "0x15be6174e1912e0000" + }, + "cfc4e6f7f8b011414bfba42f23adfaa78d4ecc5e": { + "balance": "0x6449e84e47a8a80000" + }, + "cfd2728dfb8bdbf3bf73598a6e13eaf43052ea2b": { + "balance": "0x93739534d28680000" + }, + "cfd47493c9f89fe680bda5754dd7c9cfe7cb5bbe": { + "balance": "0x2f473513448fe0000" + }, + "cfde0fc75d6f16c443c3038217372d99f5d907f7": { + "balance": "0x83225e6396b5ec0000" + }, + "cfe2caaf3cec97061d0939748739bffe684ae91f": { + "balance": "0x21e19e0c9bab2400000" + }, + "cfeacaaed57285e0ac7268ce6a4e35ecfdb242d7": { + "balance": "0x3ae4d4240190600000" + }, + "cfecbea07c27002f65fe534bb8842d0925c78402": { + "balance": "0xd8d726b7177a800000" + }, + "cfee05c69d1f29e7714684c88de5a16098e91399": { + "balance": "0x6acb3df27e1f880000" + }, + "cff6a6fe3e9a922a12f21faa038156918c4fcb9c": { + "balance": "0x44591d67fecc80000" + }, + "cff7f89a4d4219a38295251331568210ffc1c134": { + "balance": "0x5f68e8131ecf800000" + }, + "cff8d06b00e3f50c191099ad56ba6ae26571cd88": { + "balance": "0x3635c9adc5dea00000" + }, + "cffc49c1787eebb2b56cabe92404b636147d4558": { + "balance": "0x133e0308f40a3da8000" + }, + "d008513b27604a89ba1763b6f84ce688b346945b": { + "balance": "0x3635c9adc5dea00000" + }, + "d00f067286c0fbd082f9f4a61083ec76deb3cee6": { + "balance": "0x3635c9adc5dea00000" + }, + "d015f6fcb84df7bb410e8c8f04894a881dcac237": { + "balance": "0x384524cc70b7780000" + }, + "d01af9134faf5257174e8b79186f42ee354e642d": { + "balance": "0x3635c9adc5dea00000" + }, + "d02108d2ae3cab10cbcf1657af223e027c8210f6": { + "balance": "0x6c6d84bccdd9ce0000" + }, + "d02afecf8e2ec2b62ac8ad204161fd1fae771d0e": { + "balance": "0x6c6b935b8bbd400000" + }, + "d0319139fbab2e8e2accc1d924d4b11df6696c5a": { + "balance": "0xad78ebc5ac6200000" + }, + "d037d215d11d1df3d54fbd321cd295c5465e273b": { + "balance": "0x4be4e7267b6ae00000" + }, + "d03a2da41e868ed3fef5745b96f5eca462ff6fda": { + "balance": "0xa2a15d09519be00000" + }, + "d03fc165576aaed525e5502c8e140f8b2e869639": { + "balance": "0x17356d8b32501c80000" + }, + "d043a011ec4270ee7ec8b968737515e503f83028": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "d04b861b3d9acc563a901689941ab1e1861161a2": { + "balance": "0x1158e460913d00000" + }, + "d05a447c911dbb275bfb2e5a37e5a703a56f9997": { + "balance": "0xad78ebc5ac6200000" + }, + "d05ffb2b74f867204fe531653b0248e21c13544e": { + "balance": "0x3635c9adc5dea00000" + }, + "d062588171cf99bbeb58f126b870f9a3728d61ec": { + "balance": "0xf3f20b8dfa69d00000" + }, + "d0638ea57189a6a699024ad78c71d939c1c2ff8c": { + "balance": "0x8eae566710fc200000" + }, + "d0648a581b3508e135a2935d12c9657045d871ca": { + "balance": "0x1b2df9d219f57980000" + }, + "d071192966eb69c3520fca3aa4dd04297ea04b4e": { + "balance": "0x5f68e8131ecf80000" + }, + "d0718520eae0a4d62d70de1be0ca431c5eea2482": { + "balance": "0x6c6b935b8bbd400000" + }, + "d0775dba2af4c30a3a78365939cd71c2f9de95d2": { + "balance": "0x692ae8897081d00000" + }, + "d07be0f90997caf903c8ac1d53cde904fb190741": { + "balance": "0x36389038b699b40000" + }, + "d07e511864b1cf9969e3560602829e32fc4e71f5": { + "balance": "0x2b5e3af16b1880000" + }, + "d0809498c548047a1e2a2aa6a29cd61a0ee268bd": { + "balance": "0x6c6b935b8bbd400000" + }, + "d082275f745a2cac0276fbdb02d4b2a3ab1711fe": { + "balance": "0x1a055690d9db80000" + }, + "d08fc09a0030fd0928cd321198580182a76aae9f": { + "balance": "0x3635c9adc5dea00000" + }, + "d093e829819fd2e25b973800bb3d5841dd152d05": { + "balance": "0xd8d726b7177a800000" + }, + "d0944aa185a1337061ae20dc9dd96c83b2ba4602": { + "balance": "0xad78ebc5ac6200000" + }, + "d096565b7c7407d06536580355fdd6d239144aa1": { + "balance": "0xd8d726b7177a80000" + }, + "d09cb2e6082d693a13e8d2f68dd1dd8461f55840": { + "balance": "0x3635c9adc5dea00000" + }, + "d0a6c6f9e9c4b383d716b31de78d56414de8fa91": { + "balance": "0x1043561a8829300000" + }, + "d0a7209b80cf60db62f57d0a5d7d521a69606655": { + "balance": "0x8ac7230489e800000" + }, + "d0a8abd80a199b54b08b65f01d209c27fef0115b": { + "balance": "0x161c626dc61a2ef8000" + }, + "d0abcc70c0420e0e172f97d43b87d5e80c336ea9": { + "balance": "0x21e19e0c9bab2400000" + }, + "d0ae735d915e946866e1fea77e5ea466b5cadd16": { + "balance": "0x6c6b935b8bbd400000" + }, + "d0b11d6f2bce945e0c6a5020c3b52753f803f9d1": { + "balance": "0xad78ebc5ac6200000" + }, + "d0c101fd1f01c63f6b1d19bc920d9f932314b136": { + "balance": "0x43c33c1937564800000" + }, + "d0c55abf976fdc3db2afe9be99d499484d576c02": { + "balance": "0x3635c9adc5dea00000" + }, + "d0d0a2ad45f59a9dccc695d85f25ca46ed31a5a3": { + "balance": "0x2d89577d7d40200000" + }, + "d0d62c47ea60fb90a3639209bbfdd4d933991cc6": { + "balance": "0xa844a7424d9c80000" + }, + "d0db456178206f5c4430fe005063903c3d7a49a7": { + "balance": "0x26491e45a753c08000" + }, + "d0e194f34b1db609288509ccd2e73b6131a2538b": { + "balance": "0x36356633ebd8ea0000" + }, + "d0e35e047646e759f4517093d6408642517f084d": { + "balance": "0xd58fa46818eccb8000" + }, + "d0ee4d02cf24382c3090d3e99560de3678735cdf": { + "balance": "0x821ab0d44149800000" + }, + "d0f04f52109aebec9a7b1e9332761e9fe2b97bb5": { + "balance": "0xd8d726b7177a800000" + }, + "d0f9597811b0b992bb7d3757aa25b4c2561d32e2": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "d10302faa1929a326904d376bf0b8dc93ad04c4c": { + "balance": "0x61093d7c2c6d380000" + }, + "d1100dd00fe2ddf18163ad964d0b69f1f2e9658a": { + "balance": "0x143120955b2506b0000" + }, + "d116f3dcd5db744bd008887687aa0ec9fd7292aa": { + "balance": "0x3635c9adc5dea00000" + }, + "d119417c46732cf34d1a1afb79c3e7e2cd8eece4": { + "balance": "0x6c6b935b8bbd400000" + }, + "d12d77ae01a92d35117bac705aacd982d02e74c1": { + "balance": "0x3635c9adc5dea00000" + }, + "d135794b149a18e147d16e621a6931f0a40a969a": { + "balance": "0x43c33c1937564800000" + }, + "d1432538e35b7664956ae495a32abdf041a7a21c": { + "balance": "0x42bf06b78ed3b500000" + }, + "d1438267231704fc7280d563adf4763844a80722": { + "balance": "0xad78ebc5ac6200000" + }, + "d1538e9a87e59ca9ec8e5826a5b793f99f96c4c3": { + "balance": "0x3635c9adc5dea00000" + }, + "d1648503b1ccc5b8be03fa1ec4f3ee267e6adf7b": { + "balance": "0x13befbf51eec0900000" + }, + "d1682c2159018dc3d07f08240a8c606daf65f8e1": { + "balance": "0x2a5a058fc295ed000000" + }, + "d171c3f2258aef35e599c7da1aa07300234da9a6": { + "balance": "0x6c6b935b8bbd400000" + }, + "d1778c13fbd968bc083cb7d1024ffe1f49d02caa": { + "balance": "0xd9ecb4fd208e500000" + }, + "d17fbe22d90462ed37280670a2ea0b3086a0d6d6": { + "balance": "0xad6eedd17cf3b8000" + }, + "d1811c55976980f083901d8a0db269222dfb5cfe": { + "balance": "0x54069233bf7f780000" + }, + "d18eb9e1d285dabe93e5d4bae76beefe43b521e8": { + "balance": "0x243d4d18229ca20000" + }, + "d193e583d6070563e7b862b9614a47e99489f3e5": { + "balance": "0x36356633ebd8ea0000" + }, + "d1978f2e34407fab1dc2183d95cfda6260b35982": { + "balance": "0x2ab7b260ff3fd00000" + }, + "d19caf39bb377fdf2cf19bd4fb52591c2631a63c": { + "balance": "0x3635c9adc5dea00000" + }, + "d1a396dcdab2c7494130b3fd307820340dfd8c1f": { + "balance": "0xf92250e2dfd00000" + }, + "d1a71b2d0858e83270085d95a3b1549650035e23": { + "balance": "0x327bb09d06aa8500000" + }, + "d1acb5adc1183973258d6b8524ffa28ffeb23de3": { + "balance": "0xd8d726b7177a800000" + }, + "d1b37f03cb107424e9c4dd575ccd4f4cee57e6cd": { + "balance": "0x6c6b935b8bbd400000" + }, + "d1b5a454ac3405bb4179208c6c84de006bcb9be9": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "d1c45954a62b911ad701ff2e90131e8ceb89c95c": { + "balance": "0x4b91a2de457e880000" + }, + "d1c96e70f05ae0e6cd6021b2083750a7717cde56": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "d1d5b17ffe2d7bbb79cc7d7930bcb2e518fb1bbf": { + "balance": "0xa2a15d09519be00000" + }, + "d1da0c8fb7c210e0f2ec618f85bdae7d3e734b1c": { + "balance": "0x6acb3df27e1f880000" + }, + "d1dd79fb158160e5b4e8e23f312e6a907fbc4d4e": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "d1de5aad3a5fd803f1b1aeb6103cb8e14fe723b7": { + "balance": "0x1158e460913d00000" + }, + "d1e1f2b9c16c309874dee7fac32675aff129c398": { + "balance": "0x3f24d8e4a00700000" + }, + "d1e5e234a9f44266a4a6241a84d7a1a55ad5a7fe": { + "balance": "0x43c33c1937564800000" + }, + "d1ea4d72a67b5b3e0f315559f52bd0614d713069": { + "balance": "0x6c6b935b8bbd400000" + }, + "d1ee905957fe7cc70ec8f2868b43fe47b13febff": { + "balance": "0x2629f66e0c5300000" + }, + "d1f1694d22671b5aad6a94995c369fbe6133676f": { + "balance": "0x3635c9adc5dea00000" + }, + "d1f4dc1ddb8abb8848a8b14e25f3b55a8591c266": { + "balance": "0xd8d726b7177a80000" + }, + "d1fed0aee6f5dfd7e25769254c3cfad15adeccaa": { + "balance": "0x2792c8fc4b53280000" + }, + "d2051cb3cb6704f0548cc890ab0a19db3415b42a": { + "balance": "0x121b2e5e6464780000" + }, + "d206aaddb336d45e7972e93cb075471d15897b5d": { + "balance": "0x2086ac351052600000" + }, + "d209482bb549abc4777bea6d7f650062c9c57a1c": { + "balance": "0x11651ac3e7a7580000" + }, + "d20dcb0b78682b94bc3000281448d557a20bfc83": { + "balance": "0x30849ebe16369c0000" + }, + "d2107b353726c3a2b46566eaa7d9f80b5d21dbe3": { + "balance": "0x1158e460913d00000" + }, + "d211b21f1b12b5096181590de07ef81a89537ead": { + "balance": "0x6c6b935b8bbd400000" + }, + "d218efb4db981cdd6a797f4bd48c7c26293ceb40": { + "balance": "0xa1466b31c6431c0000" + }, + "d21a7341eb84fd151054e5e387bb25d36e499c09": { + "balance": "0x2f6f10780d22cc00000" + }, + "d224f880f9479a89d32f09e52be990b288135cef": { + "balance": "0x3a9d5baa4abf1d00000" + }, + "d22f0ca4cd479e661775053bcc49e390f670dd8a": { + "balance": "0x3635c9adc5dea00000" + }, + "d231929735132102471ba59007b6644cc0c1de3e": { + "balance": "0x3637096c4bcc690000" + }, + "d235d15cb5eceebb61299e0e827fa82748911d89": { + "balance": "0xd8d726b7177a800000" + }, + "d23a24d7f9468343c143a41d73b88f7cbe63be5e": { + "balance": "0xad78ebc5ac6200000" + }, + "d23d7affacdc3e9f3dae7afcb4006f58f8a44600": { + "balance": "0xc328093e61ee400000" + }, + "d243184c801e5d79d2063f3578dbae81e7b3a9cb": { + "balance": "0x6bdca2681e1aba0000" + }, + "d24b6644f439c8051dfc64d381b8c86c75c17538": { + "balance": "0x6c6b935b8bbd400000" + }, + "d24bf12d2ddf457decb17874efde2052b65cbb49": { + "balance": "0x2f6f10780d22cc00000" + }, + "d251f903ae18727259eee841a189a1f569a5fd76": { + "balance": "0x21e19e0c9bab2400000" + }, + "d252960b0bf6b2848fdead80136db5f507f8be02": { + "balance": "0x6c6b935b8bbd400000" + }, + "d2581a55ce23ab10d8ad8c44378f59079bd6f658": { + "balance": "0x1dd0c885f9a0d800000" + }, + "d25aecd7eb8bd6345b063b5dbd271c77d3514494": { + "balance": "0x62a992e53a0af00000" + }, + "d27c234ff7accace3d996708f8f9b04970f97d36": { + "balance": "0x487a9a304539440000" + }, + "d28298524df5ec4b24b0ffb9df85170a145a9eb5": { + "balance": "0xf98a3b9b337e20000" + }, + "d283b8edb10a25528a4404de1c65e7410dbcaa67": { + "balance": "0x28a857425466f800000" + }, + "d284a50382f83a616d39b8a9c0f396e0ebbfa95d": { + "balance": "0x3636c25e66ece70000" + }, + "d288e7cb7ba9f620ab0f7452e508633d1c5aa276": { + "balance": "0xd8d726b7177a800000" + }, + "d29dc08efbb3d72e263f78ab7610d0226de76b00": { + "balance": "0x28a857425466f800000" + }, + "d2a030ac8952325f9e1db378a71485a24e1b07b2": { + "balance": "0x6c6b935b8bbd400000" + }, + "d2a479404347c5543aab292ae1bb4a6f158357fa": { + "balance": "0xd8d726b7177a800000" + }, + "d2a5a024230a57ccc666760b89b0e26cafd189c7": { + "balance": "0xa96595a5c6e8a3f8000" + }, + "d2a80327cbe55c4c7bd51ff9dde4ca648f9eb3f8": { + "balance": "0x2b5e3af16b1880000" + }, + "d2a84f75675c62d80c88756c428eee2bcb185421": { + "balance": "0x410d586a20a4c00000" + }, + "d2abd84a181093e5e229136f42d835e8235de109": { + "balance": "0x56be03ca3e47d8000" + }, + "d2ac0d3a58605e1d0f0eb3de25b2cad129ed6058": { + "balance": "0xd8d726b7177a800000" + }, + "d2bf67a7f3c6ce56b7be41675dbbadfe7ea93a33": { + "balance": "0x15af1d78b58c400000" + }, + "d2dbebe89b0357aea98bbe8e496338debb28e805": { + "balance": "0xd8d726b7177a800000" + }, + "d2e21ed56868fab28e0947927adaf29f23ebad6c": { + "balance": "0x6c184f1355d0e80000" + }, + "d2e817738abf1fb486583f80c350318bed860c80": { + "balance": "0xd02cecf5f5d810000" + }, + "d2edd1ddd6d86dc005baeb541d22b640d5c7cae5": { + "balance": "0x1158e460913d00000" + }, + "d2f1998e1cb1580cec4f6c047dcd3dcec54cf73c": { + "balance": "0xad78ebc5ac6200000" + }, + "d2f241255dd7c3f73c07043071ec08ddd9c5cde5": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "d2ff672016f63b2f85398f4a6fedbb60a50d3cce": { + "balance": "0x1291246f5b734a0000" + }, + "d30d4c43adcf55b2cb53d68323264134498d89ce": { + "balance": "0x3635c9adc5dea00000" + }, + "d30ee9a12b4d68abace6baca9ad7bf5cd1faf91c": { + "balance": "0x514fcb24ff9c500000" + }, + "d3118ea3c83505a9d893bb67e2de142d537a3ee7": { + "balance": "0x1158e460913d00000" + }, + "d311bcd7aa4e9b4f383ff3d0d6b6e07e21e3705d": { + "balance": "0xad78ebc5ac6200000" + }, + "d315deea1d8c1271f9d1311263ab47c007afb6f5": { + "balance": "0x3c81d4e654b400000" + }, + "d32b2c79c36478c5431901f6d700b04dbe9b8810": { + "balance": "0x15779a9de6eeb00000" + }, + "d32b45564614516c91b07fa9f72dcf787cce4e1c": { + "balance": "0xfc66fae3746ac0000" + }, + "d330728131fe8e3a15487a34573c93457e2afe95": { + "balance": "0xd8d726b7177a800000" + }, + "d331c823825a9e5263d052d8915d4dcde07a5c37": { + "balance": "0x1e931283ccc8500000" + }, + "d333627445f2d787901ef33bb2a8a3675e27ffec": { + "balance": "0x15af1d78b58c400000" + }, + "d33cf82bf14c592640a08608914c237079d5be34": { + "balance": "0x6c6b935b8bbd400000" + }, + "d34d708d7398024533a5a2b2309b19d3c55171bb": { + "balance": "0x15af1d78b58c400000" + }, + "d34e03d36a2bd4d19a5fa16218d1d61e3ffa0b15": { + "balance": "0x1158e460913d000000" + }, + "d35075ca61fe59d123969c36a82d1ab2d918aa38": { + "balance": "0x90f534608a72880000" + }, + "d367009ab658263b62c2333a1c9e4140498e1389": { + "balance": "0x6c6b935b8bbd400000" + }, + "d3679a47df2d99a49b01c98d1c3e0c987ce1e158": { + "balance": "0xf2dc7d47f15600000" + }, + "d38fa2c4cc147ad06ad5a2f75579281f22a7cc1f": { + "balance": "0x43c33c1937564800000" + }, + "d39a5da460392b940b3c69bc03757bf3f2e82489": { + "balance": "0x17c83a97d6b6ca50000" + }, + "d39b7cbc94003fc948f0cde27b100db8ccd6e063": { + "balance": "0x15af1d78b58c400000" + }, + "d3a10ec7a5c9324999dd9e9b6bde7c911e584bda": { + "balance": "0x2086ac351052600000" + }, + "d3a941c961e8ca8b1070f23c6d6d0d2a758a4444": { + "balance": "0xad78ebc5ac6200000" + }, + "d3bb59fa31258be62f8ed232f1a7d47b4a0b41ee": { + "balance": "0x56bc75e2d63100000" + }, + "d3bc730937fa75d8452616ad1ef1fe7fffe0d0e7": { + "balance": "0x484e4ded2eae38000" + }, + "d3c24d4b3a5e0ff8a4622d518edd73f16ab28610": { + "balance": "0x1158e460913d00000" + }, + "d3c6f1e0f50ec3d2a67e6bcd193ec7ae38f1657f": { + "balance": "0x166c5480889db770000" + }, + "d3d6e9fb82542fd29ed9ea3609891e151396b6f7": { + "balance": "0xb6f588aa7bcf5c00000" + }, + "d3dad1b6d08d4581ccae65a8732db6ac69f0c69e": { + "balance": "0x14542ba12a337c00000" + }, + "d3df3b53cb3b4755de54e180451cc44c9e8ae0aa": { + "balance": "0x23c49409b977828000" + }, + "d3f873bd9956135789ab00ebc195b922e94b259d": { + "balance": "0x6c6b935b8bbd400000" + }, + "d402b4f6a099ebe716cb14df4f79c0cd01c6071b": { + "balance": "0x6c6b935b8bbd400000" + }, + "d40d0055fd9a38488aff923fd03d35ec46d711b3": { + "balance": "0x10f08eda8e555098000" + }, + "d40ed66ab3ceff24ca05ecd471efb492c15f5ffa": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "d418870bc2e4fa7b8a6121ae0872d55247b62501": { + "balance": "0x55a6e79ccd1d300000" + }, + "d41d7fb49fe701baac257170426cc9b38ca3a9b2": { + "balance": "0x98a7d9b8314c00000" + }, + "d4205592844055b3c7a1f80cefe3b8eb509bcde7": { + "balance": "0x9b3bfd342a9fc8000" + }, + "d42b20bd0311608b66f8a6d15b2a95e6de27c5bf": { + "balance": "0x6c6b935b8bbd400000" + }, + "d4344f7d5cad65d17e5c2d0e7323943d6f62fe92": { + "balance": "0xe7eeba3410b740000" + }, + "d43ee438d83de9a37562bb4e286cb1bd19f4964d": { + "balance": "0x3635c9adc5dea00000" + }, + "d44334b4e23a169a0c16bd21e866bba52d970587": { + "balance": "0x8cf23f909c0fa00000" + }, + "d44d81e18f46e2cfb5c1fcf5041bc8569767d100": { + "balance": "0x7b442e684f65aa40000" + }, + "d44f4ac5fad76bdc1537a3b3af6472319b410d9d": { + "balance": "0x56bc75e2d631000000" + }, + "d44f5edf2bcf2433f211dadd0cc450db1b008e14": { + "balance": "0xe7eeba3410b740000" + }, + "d44f6ac3923b5fd731a4c45944ec4f7ec52a6ae4": { + "balance": "0x21e19e0c9bab2400000" + }, + "d45b3341e8f15c80329320c3977e3b90e7826a7e": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "d45d5daa138dd1d374c71b9019916811f4b20a4e": { + "balance": "0x1f399b1438a1000000" + }, + "d460a4b908dd2b056759b488850b66a838fc77a8": { + "balance": "0x6acb3df27e1f880000" + }, + "d467cf064c0871989b90d8b2eb14ccc63b360823": { + "balance": "0xad78ebc5ac6200000" + }, + "d46bae61b027e5bb422e83a3f9c93f3c8fc77d27": { + "balance": "0x6c6b935b8bbd400000" + }, + "d46f8223452982a1eea019a8816efc2d6fc00768": { + "balance": "0x76d41c62494840000" + }, + "d475477fa56390d33017518d6711027f05f28dbf": { + "balance": "0x6b111333d4fd4c0000" + }, + "d47c242edffea091bc54d57df5d1fdb93101476c": { + "balance": "0x9df7dfa8f760480000" + }, + "d47d8685faee147c520fd986709175bf2f886bef": { + "balance": "0x6c6b935b8bbd400000" + }, + "d47f50df89a1cff96513bef1b2ae3a2971accf2c": { + "balance": "0x2d89577d7d40200000" + }, + "d482e7f68e41f238fe517829de15477fe0f6dd1d": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "d4879fd12b1f3a27f7e109761b23ca343c48e3d8": { + "balance": "0x241a9b4f617a280000" + }, + "d48e3f9357e303513841b3f84bda83fc89727587": { + "balance": "0x3635c9adc5dea00000" + }, + "d49a75bb933fca1fca9aa1303a64b6cb44ea30e1": { + "balance": "0x21e19e0c9bab2400000" + }, + "d4b085fb086f3d0d68bf12926b1cc3142cae8770": { + "balance": "0xc893d09c8f51500000" + }, + "d4b2ff3bae1993ffea4d3b180231da439f7502a2": { + "balance": "0x6c6b935b8bbd400000" + }, + "d4b38a5fdb63e01714e9801db47bc990bd509183": { + "balance": "0x14534d95bef905c0000" + }, + "d4b8bdf3df9a51b0b91d16abbea05bb4783c8661": { + "balance": "0x3635c9adc5dea00000" + }, + "d4c4d1a7c3c74984f6857b2f5f07e8face68056d": { + "balance": "0x6c6b935b8bbd400000" + }, + "d4c6ac742e7c857d4a05a04c33d4d05c1467571d": { + "balance": "0xad78ebc5ac6200000" + }, + "d4cb21e590c5a0e06801366aff342c7d7db16424": { + "balance": "0x1ac7a08ead02f80000" + }, + "d4d92c62b280e00f626d8657f1b86166cb1f740f": { + "balance": "0xad7f23634cbd60000" + }, + "d4ebb1929a23871cf77fe049ab9602be08be0a73": { + "balance": "0x678a932062e4180000" + }, + "d4ee4919fb37f2bb970c3fff54aaf1f3dda6c03f": { + "balance": "0x878678326eac9000000" + }, + "d4feed99e8917c5c5458635f3603ecb7e817a7d0": { + "balance": "0x1043c43cde1d398000" + }, + "d4ff46203efa23064b1caf00516e28704a82a4f8": { + "balance": "0x487a9a304539440000" + }, + "d500e4d1c9824ba9f5b635cfa3a8c2c38bbd4ced": { + "balance": "0x15af1d78b58c400000" + }, + "d508d39c70916f6abc4cc7f999f011f077105802": { + "balance": "0x5724d24afe77f0000" + }, + "d50f7fa03e389876d3908b60a537a6706304fb56": { + "balance": "0x56bc75e2d63100000" + }, + "d513a45080ff2febe62cd5854abe29ee4467f996": { + "balance": "0x84e13bc4fc5d80000" + }, + "d5276f0cd5ffd5ffb63f98b5703d5594ede0838b": { + "balance": "0x15af1d78b58c400000" + }, + "d5294b666242303b6df0b1c88d37429bc8c965aa": { + "balance": "0x104d0d00d2b7f60000" + }, + "d52aecc6493938a28ca1c367b701c21598b6a02e": { + "balance": "0x3ba1910bf341b00000" + }, + "d53c567f0c3ff2e08b7d59e2b5c73485437fc58d": { + "balance": "0x2086ac351052600000" + }, + "d541ac187ad7e090522de6da3213e9a7f4439673": { + "balance": "0x6c6b935b8bbd400000" + }, + "d54ba2d85681dc130e5b9b02c4e8c851391fd9b9": { + "balance": "0xd5967be4fc3f100000" + }, + "d55508adbbbe9be81b80f97a6ea89add68da674f": { + "balance": "0x6c6b935b8bbd400000" + }, + "d5550caaf743b037c56fd2558a1c8ed235130750": { + "balance": "0x121e4d49036255b0000" + }, + "d5586da4e59583c8d86cccf71a86197f17996749": { + "balance": "0x6c6b935b8bbd400000" + }, + "d55c1c8dfbe1e02cacbca60fdbdd405b09f0b75f": { + "balance": "0x6c6b935b8bbd400000" + }, + "d561cbbc05515de73ab8cf9eae1357341e7dfdf4": { + "balance": "0x14542ba12a337c00000" + }, + "d56a144d7af0ae8df649abae535a15983aa04d02": { + "balance": "0x10f0cf064dd59200000" + }, + "d572309169b1402ec8131a17a6aac3222f89e6eb": { + "balance": "0x2ec1978c47766a00000" + }, + "d5787668c2c5175b01a8ee1ac3ecc9c8b2aba95a": { + "balance": "0x6c6acc67d7b1d40000" + }, + "d588c3a5df228185d98ee7e60748255cdea68b01": { + "balance": "0xd8d726b7177a800000" + }, + "d58a52e078a805596b0d56ea4ae1335af01c66eb": { + "balance": "0xe7eeba3410b740000" + }, + "d5903e9978ee20a38c3f498d63d57f31a39f6a06": { + "balance": "0x232b36ffc672ab00000" + }, + "d59638d3c5faa7711bf085745f9d5bdc23d498d8": { + "balance": "0x6c6b935b8bbd400000" + }, + "d59d92d2c8701980cc073c375d720af064743c0c": { + "balance": "0x405fdf7e5af85e00000" + }, + "d5a7bec332adde18b3104b5792546aa59b879b52": { + "balance": "0x6c6b935b8bbd400000" + }, + "d5b117ec116eb846418961eb7edb629cd0dd697f": { + "balance": "0xa2a15d09519be00000" + }, + "d5b284040130abf7c1d163712371cc7e28ad66da": { + "balance": "0x6acb3df27e1f880000" + }, + "d5b9d277d8aad20697a51f76e20978996bffe055": { + "balance": "0x7c3fe3c076ab50000" + }, + "d5bd5e8455c130169357c471e3e681b7996a7276": { + "balance": "0x2d9e288f8abb360000" + }, + "d5cba5b26bea5d73fabb1abafacdef85def368cc": { + "balance": "0xad78ebc5ac6200000" + }, + "d5ce55d1b62f59433c2126bcec09bafc9dfaa514": { + "balance": "0xaadec983fcff40000" + }, + "d5e55100fbd1956bbed2ca518d4b1fa376032b0b": { + "balance": "0x56bc75e2d63100000" + }, + "d5e5c135d0c4c3303934711993d0d16ff9e7baa0": { + "balance": "0x6c6b935b8bbd400000" + }, + "d5e656a1b916f9bf45afb07dd8afaf73b4c56f41": { + "balance": "0x542253a126ce40000" + }, + "d5ea472cb9466018110af00c37495b5c2c713112": { + "balance": "0x10eee686c854f440000" + }, + "d5f07552b5c693c20067b378b809cee853b8f136": { + "balance": "0x1b67c6df88c6fa0000" + }, + "d5f7c41e07729dfa6dfc64c4423160a22c609fd3": { + "balance": "0x61093d7c2c6d380000" + }, + "d604abce4330842e3d396ca73ddb5519ed3ec03f": { + "balance": "0x8e31fe1689d8a0000" + }, + "d60651e393783423e5cc1bc5f889e44ef7ea243e": { + "balance": "0x159e76371129c80000" + }, + "d609bf4f146eea6b0dc8e06ddcf4448a1fccc9fa": { + "balance": "0x6c6b935b8bbd400000" + }, + "d609ec0be70d0ad26f6e67c9d4762b52ee51122c": { + "balance": "0x3635c9adc5dea00000" + }, + "d60a52580728520df7546bc1e283291788dbae0c": { + "balance": "0x363489ef3ff0d70000" + }, + "d60b247321a32a5affb96b1e279927cc584de943": { + "balance": "0x7ad020d6ddd7760000" + }, + "d6110276cfe31e42825a577f6b435dbcc10cf764": { + "balance": "0x3635c9adc5dea00000" + }, + "d612597bc31743c78633f633f239b1e9426bd925": { + "balance": "0x1017f7df96be17800000" + }, + "d6234aaf45c6f22e66a225ffb93add629b4ef80f": { + "balance": "0x3635c9adc5dea00000" + }, + "d62edb96fce2969aaf6c545e967cf1c0bc805205": { + "balance": "0x4a565536a5ada8000" + }, + "d6300b3215b11de762ecde4b70b7927d01291582": { + "balance": "0x6c6b935b8bbd400000" + }, + "d6395db5a4bb66e60f4cfbcdf0057bb4d97862e2": { + "balance": "0x3154c9729d05780000" + }, + "d64a2d50f8858537188a24e0f50df1681ab07ed7": { + "balance": "0x8375a2abcca24400000" + }, + "d6580ab5ed4c7dfa506fa6fe64ad5ce129707732": { + "balance": "0xd8d726b7177a800000" + }, + "d6598b1386e93c5ccb9602ff4bbbecdbd3701dc4": { + "balance": "0xc25f4ecb041f00000" + }, + "d6644d40e90bc97fe7dfe7cabd3269fd579ba4b3": { + "balance": "0x89e917994f71c0000" + }, + "d6670c036df754be43dadd8f50feea289d061fd6": { + "balance": "0x144a2903448cef78000" + }, + "d668523a90f0293d65c538d2dd6c57673710196e": { + "balance": "0x2242c30b853ee0000" + }, + "d66ab79294074c8b627d842dab41e17dd70c5de5": { + "balance": "0x3635c9adc5dea00000" + }, + "d66acc0d11b689cea6d9ea5ff4014c224a5dc7c4": { + "balance": "0xfc936392801c0000" + }, + "d66ddf1159cf22fd8c7a4bc8d5807756d433c43e": { + "balance": "0x77432217e683600000" + }, + "d687cec0059087fdc713d4d2d65e77daefedc15f": { + "balance": "0x340aad21b3b700000" + }, + "d688e785c98f00f84b3aa1533355c7a258e87948": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "d6a22e598dabd38ea6e958bd79d48ddd9604f4df": { + "balance": "0x3635c9adc5dea00000" + }, + "d6a7ac4de7b510f0e8de519d973fa4c01ba83400": { + "balance": "0x65ea3db75546600000" + }, + "d6acc220ba2e51dfcf21d443361eea765cbd35d8": { + "balance": "0x1158e460913d00000" + }, + "d6acffd0bfd99c382e7bd56ff0e6144a9e52b08e": { + "balance": "0x8ac7230489e800000" + }, + "d6c0d0bc93a62e257174700e10f024c8b23f1f87": { + "balance": "0x6c6b935b8bbd400000" + }, + "d6cf5c1bcf9da662bcea2255905099f9d6e84dcc": { + "balance": "0x1c49e420157d9c20000" + }, + "d6d03572a45245dbd4368c4f82c95714bd2167e2": { + "balance": "0x3f00c3d66686fc0000" + }, + "d6d6776958ee23143a81adadeb08382009e996c2": { + "balance": "0xa2a15d09519be00000" + }, + "d6d9e30f0842012a7176a917d9d2048ca0738759": { + "balance": "0xd8d726b7177a800000" + }, + "d6e09e98fe1300332104c1ca34fbfac554364ed9": { + "balance": "0x6c6b935b8bbd400000" + }, + "d6e8e97ae9839b9ee507eedb28edfb7477031439": { + "balance": "0x6c6b935b8bbd400000" + }, + "d6eea898d4ae2b718027a19ce9a5eb7300abe3ca": { + "balance": "0x17d4aceee63db8000" + }, + "d6f1e55b1694089ebcb4fe7d7882aa66c8976176": { + "balance": "0x43c23bdbe929db30000" + }, + "d6f4a7d04e8faf20e8c6eb859cf7f78dd23d7a15": { + "balance": "0x724ded1c748140000" + }, + "d6fc0446c6a8d40ae3551db7e701d1fa876e4a49": { + "balance": "0x6c6b935b8bbd400000" + }, + "d703c6a4f11d60194579d58c2766a7ef16c30a29": { + "balance": "0x6c6b935b8bbd400000" + }, + "d7052519756af42590f15391b723a03fa564a951": { + "balance": "0xfa3631480d01fd8000" + }, + "d70a612bd6dda9eab0dddcff4aaf4122d38feae4": { + "balance": "0x1d460162f516f00000" + }, + "d70ad2c4e9eebfa637ef56bd486ad2a1e5bce093": { + "balance": "0xad78ebc5ac6200000" + }, + "d7140c8e5a4307fab0cc27badd9295018bf87970": { + "balance": "0x5f1016b5076d00000" + }, + "d7164aa261c09ad9b2b5068d453ed8eb6aa13083": { + "balance": "0xa2a15d09519be00000" + }, + "d71e43a45177ad51cbe0f72184a5cb503917285a": { + "balance": "0xad78ebc5ac6200000" + }, + "d71fb130f0150c565269e00efb43902b52a455a6": { + "balance": "0xad78ebc5ac6200000" + }, + "d7225738dcf3578438f8e7c8b3837e42e04a262f": { + "balance": "0x182b8cebbb83aa0000" + }, + "d7274d50804d9c77da93fa480156efe57ba501de": { + "balance": "0x692ae8897081d00000" + }, + "d731bb6b5f3c37395e09ceaccd14a918a6060789": { + "balance": "0xd5967be4fc3f100000" + }, + "d73ed2d985b5f21b55b274643bc6da031d8edd8d": { + "balance": "0xa6dd90cae5114480000" + }, + "d744ac7e5310be696a63b003c40bd039370561c6": { + "balance": "0x5a87e7d7f5f6580000" + }, + "d74a6e8d6aab34ce85976814c1327bd6ea0784d2": { + "balance": "0x152d02c7e14af6800000" + }, + "d75a502a5b677287470f65c5aa51b87c10150572": { + "balance": "0x3130b4646385740000" + }, + "d76dbaebc30d4ef67b03e6e6ecc6d84e004d502d": { + "balance": "0x6d76b9188e13850000" + }, + "d771d9e0ca8a08a113775731434eb3270599c40d": { + "balance": "0x1158e460913d00000" + }, + "d7788ef28658aa06cc53e1f3f0de58e5c371be78": { + "balance": "0x16a6502f15a1e540000" + }, + "d77892e2273b235d7689e430e7aeed9cbce8a1f3": { + "balance": "0x6c6b935b8bbd400000" + }, + "d781f7fc09184611568570b4986e2c72872b7ed0": { + "balance": "0x1159561065d5d0000" + }, + "d785a8f18c38b9bc4ffb9b8fa8c7727bd642ee1c": { + "balance": "0x3635c9adc5dea00000" + }, + "d78ecd25adc86bc2051d96f65364866b42a426b7": { + "balance": "0xd23058bf2f26120000" + }, + "d78f84e38944a0e0255faece48ba4950d4bd39d2": { + "balance": "0x10f0cf064dd59200000" + }, + "d79483f6a8444f2549d611afe02c432d15e11051": { + "balance": "0x1158e460913d00000" + }, + "d79835e404fb86bf845fba090d6ba25e0c8866a6": { + "balance": "0x821ab0d44149800000" + }, + "d79aff13ba2da75d46240cac0a2467c656949823": { + "balance": "0x5dc892aa1131c80000" + }, + "d79db5ab43621a7a3da795e58929f3dd25af67d9": { + "balance": "0x6c6acc67d7b1d40000" + }, + "d7a1431ee453d1e49a0550d1256879b4f5d10201": { + "balance": "0x5a87e7d7f5f6580000" + }, + "d7ad09c6d32657685355b5c6ec8e9f57b4ebb982": { + "balance": "0x6acb3df27e1f880000" + }, + "d7b740dff8c457668fdf74f6a266bfc1dcb723f9": { + "balance": "0x1158e460913d00000" + }, + "d7c2803ed7b0e0837351411a8e6637d168bc5b05": { + "balance": "0x641daf5c91bd9358000" + }, + "d7c6265dea11876c903b718e4cd8ab24fe265bde": { + "balance": "0x6c6b935b8bbd400000" + }, + "d7ca7fdcfebe4588eff5421d1522b61328df7bf3": { + "balance": "0xd8e6001e6c302b0000" + }, + "d7cdbd41fff20df727c70b6255c1ba7606055468": { + "balance": "0xad78ebc5ac6200000" + }, + "d7d157e4c0a96437a6d285741dd23ec4361fa36b": { + "balance": "0x6c6b935b8bbd400000" + }, + "d7d2c6fca8ad1f75395210b57de5dfd673933909": { + "balance": "0x126e72a69a50d00000" + }, + "d7d3c75920590438b82c3e9515be2eb6ed7a8b1a": { + "balance": "0xcb49b44ba602d800000" + }, + "d7d7f2caa462a41b3b30a34aeb3ba61010e2626f": { + "balance": "0x6c6b935b8bbd400000" + }, + "d7e74afdbad55e96cebc5a374f2c8b768680f2b0": { + "balance": "0x55de6a779bbac0000" + }, + "d7eb903162271c1afa35fe69e37322c8a4d29b11": { + "balance": "0x21e19e0c9bab2400000" + }, + "d7ebddb9f93987779b680155375438db65afcb6a": { + "balance": "0x5741afeff944c0000" + }, + "d7ef340e66b0d7afcce20a19cb7bfc81da33d94e": { + "balance": "0xa2a15d09519be00000" + }, + "d7f370d4bed9d57c6f49c999de729ee569d3f4e4": { + "balance": "0xad78ebc5ac6200000" + }, + "d7fa5ffb6048f96fb1aba09ef87b1c11dd7005e4": { + "balance": "0x3635c9adc5dea00000" + }, + "d8069f84b521493f4715037f3226b25f33b60586": { + "balance": "0x678a932062e4180000" + }, + "d815e1d9f4e2b5e57e34826b7cfd8881b8546890": { + "balance": "0xf015f25736420000" + }, + "d81bd54ba2c44a6f6beb1561d68b80b5444e6dc6": { + "balance": "0x3f170d7ee43c430000" + }, + "d82251456dc1380f8f5692f962828640ab9f2a03": { + "balance": "0x1088b53b2c202be0000" + }, + "d82c6fedbdac98af2eed10b00f32b00056ca5a6d": { + "balance": "0xad78ebc5ac6200000" + }, + "d82fd9fdf6996bedad2843159c06f37e0924337d": { + "balance": "0x5b8ccedc5aa7b00000" + }, + "d83ad260e9a6f432fb6ea28743299b4a09ad658c": { + "balance": "0x6c6b935b8bbd400000" + }, + "d843ee0863ce933e22f89c802d31287b9671e81c": { + "balance": "0xb98bc829a6f90000" + }, + "d84b922f7841fc5774f00e14604ae0df42c8551e": { + "balance": "0xd96fce90cfabcc0000" + }, + "d855b03ccb029a7747b1f07303e0a664793539c8": { + "balance": "0x6c6b935b8bbd400000" + }, + "d85fdeaf2a61f95db902f9b5a53c9b8f9266c3ac": { + "balance": "0x6cf65a7e9047280000" + }, + "d8715ef9176f850b2e30eb8e382707f777a6fbe9": { + "balance": "0x6c6b935b8bbd400000" + }, + "d874b9dfae456a929ba3b1a27e572c9b2cecdfb3": { + "balance": "0x93739534d28680000" + }, + "d8930a39c77357c30ad3a060f00b06046331fd62": { + "balance": "0x2c73c937742c500000" + }, + "d89bc271b27ba3ab6962c94a559006ae38d5f56a": { + "balance": "0x6c6b935b8bbd400000" + }, + "d8b77db9b81bbe90427b62f702b201ffc29ff618": { + "balance": "0x326d1e4396d45c0000" + }, + "d8cd64e0284eec53aa4639afc4750810b97fab56": { + "balance": "0x1158e460913d00000" + }, + "d8d64384249b776794063b569878d5e3b530a4b2": { + "balance": "0x9a043d0b2f9568000" + }, + "d8d65420c18c2327cc5af97425f857e4a9fd51b3": { + "balance": "0x5f68e8131ecf800000" + }, + "d8e5c9675ef4deed266b86956fc4590ea7d4a27d": { + "balance": "0x3635c9adc5dea00000" + }, + "d8e8474292e7a051604ca164c0707783bb2885e8": { + "balance": "0x2d4ca05e2b43ca80000" + }, + "d8eb78503ec31a54a90136781ae109004c743257": { + "balance": "0x3635c9adc5dea00000" + }, + "d8eef4cf4beb01ee20d111748b61cb4d3f641a01": { + "balance": "0x9489237adb9a500000" + }, + "d8f4bae6f84d910d6d7d5ac914b1e68372f94135": { + "balance": "0x56bc75e2d63100000" + }, + "d8f62036f03b7635b858f1103f8a1d9019a892b6": { + "balance": "0x2b5e3af16b1880000" + }, + "d8f665fd8cd5c2bcc6ddc0a8ae521e4dc6aa6060": { + "balance": "0x5c283d410394100000" + }, + "d8f9240c55cff035523c6d5bd300d370dc8f0c95": { + "balance": "0xf732b66015a540000" + }, + "d8f94579496725b5cb53d7985c989749aff849c0": { + "balance": "0x39992648a23c8a00000" + }, + "d8fdf546674738c984d8fab857880b3e4280c09e": { + "balance": "0x1158e460913d00000" + }, + "d8fe088fffce948f5137ee23b01d959e84ac4223": { + "balance": "0xc5b54a94fc0170000" + }, + "d90f3009db437e4e11c780bec8896f738d65ef0d": { + "balance": "0xd8d726b7177a800000" + }, + "d9103bb6b67a55a7fece2d1af62d457c2178946d": { + "balance": "0x3635c9adc5dea00000" + }, + "d913f0771949753c4726acaa2bd3619c5c20ff77": { + "balance": "0xa2a15d09519be00000" + }, + "d91d889164479ce436ece51763e22cda19b22d6b": { + "balance": "0xb66d88126800880000" + }, + "d929c65d69d5bbaea59762662ef418bc21ad924a": { + "balance": "0x3635c9adc5dea00000" + }, + "d930b27a78876485d0f48b70dd5336549679ca8f": { + "balance": "0x22b1c8c1227a00000" + }, + "d931ac2668ba6a84481ab139735aec14b7bfbabf": { + "balance": "0x6c6b935b8bbd400000" + }, + "d9383d4b6d17b3f9cd426e10fb944015c0d44bfb": { + "balance": "0x2b5e3af16b18800000" + }, + "d942de4784f7a48716c0fd4b9d54a6e54c5f2f3e": { + "balance": "0x43c33c1937564800000" + }, + "d944c8a69ff2ca1249690c1229c7192f36251062": { + "balance": "0x6acb3df27e1f880000" + }, + "d94a57882a52739bbe2a0647c80c24f58a2b4f1c": { + "balance": "0x48b54e2adbe12b0000" + }, + "d95342953c8a21e8b635eefac7819bea30f17047": { + "balance": "0x13f06c7ffef05d400000" + }, + "d95c90ffbe5484864780b867494a83c89256d6e4": { + "balance": "0x58e7926ee858a00000" + }, + "d96711540e2e998343d4f590b6fc8fac3bb8b31d": { + "balance": "0x5f5a4068b71cb00000" + }, + "d96ac2507409c7a383ab2eee1822a5d738b36b56": { + "balance": "0xad78ebc5ac6200000" + }, + "d96db33b7b5a950c3efa2dc31b10ba10a532ef87": { + "balance": "0x6c6b935b8bbd400000" + }, + "d9775965b716476675a8d513eb14bbf7b07cd14a": { + "balance": "0x1132e6d2d23c5e40000" + }, + "d97bc84abd47c05bbf457b2ef659d61ca5e5e48f": { + "balance": "0x69d17119dc5a80000" + }, + "d97f4526dea9b163f8e8e33a6bcf92fb907de6ec": { + "balance": "0xf654aaf4db2f00000" + }, + "d97fe6f53f2a58f6d76d752adf74a8a2c18e9074": { + "balance": "0x10cdf9b69a43570000" + }, + "d99999a2490d9494a530cae4daf38554f4dd633e": { + "balance": "0x68155a43676e00000" + }, + "d99df7421b9382e42c89b006c7f087702a0757c0": { + "balance": "0x1a055690d9db800000" + }, + "d9b783d31d32adc50fa3eacaa15d92b568eaeb47": { + "balance": "0x733af90374c1b280000" + }, + "d9d370fec63576ab15b318bf9e58364dc2a3552a": { + "balance": "0x56bc75e2d63100000" + }, + "d9d42fd13ebd4bf69cac5e9c7e82483ab46dd7e9": { + "balance": "0x121ea68c114e5100000" + }, + "d9e27eb07dfc71a706060c7f079238ca93e88539": { + "balance": "0x3635c9adc5dea00000" + }, + "d9e3857efd1e202a441770a777a49dcc45e2e0d3": { + "balance": "0xc1daf81d8a3ce0000" + }, + "d9ec2efe99ff5cf00d03a8317b92a24aef441f7e": { + "balance": "0x6c6b935b8bbd400000" + }, + "d9ec8fe69b7716c0865af888a11b2b12f720ed33": { + "balance": "0xd8d726b7177a800000" + }, + "d9f1b26408f0ec67ad1d0d6fe22e8515e1740624": { + "balance": "0x14d1120d7b1600000" + }, + "d9f547f2c1de0ed98a53d161df57635dd21a00bd": { + "balance": "0x556f64c1fe7fa0000" + }, + "d9ff115d01266c9f73b063c1c238ef3565e63b36": { + "balance": "0x24dce54d34a1a00000" + }, + "da06044e293c652c467fe74146bf185b21338a1c": { + "balance": "0x3635c9adc5dea00000" + }, + "da0b48e489d302b4b7bf204f957c1c9be383b0df": { + "balance": "0x6c6b935b8bbd400000" + }, + "da0d4b7ef91fb55ad265f251142067f10376ced6": { + "balance": "0x43c33c1937564800000" + }, + "da10978a39a46ff0bb848cf65dd9c77509a6d70e": { + "balance": "0x6c6b935b8bbd400000" + }, + "da16dd5c3d1a2714358fe3752cae53dbab2be98c": { + "balance": "0x41bad155e6512200000" + }, + "da214c023e2326ff696c00393168ce46ffac39ec": { + "balance": "0x3635c9adc5dea00000" + }, + "da2a14f9724015d79014ed8e5909681d596148f1": { + "balance": "0x2a10f0f8a91ab8000" + }, + "da2ad58e77deddede2187646c465945a8dc3f641": { + "balance": "0x23c757072b8dd00000" + }, + "da3017c150dd0dce7fcf881b0a48d0d1c756c4c7": { + "balance": "0x56bf91b1a65eb0000" + }, + "da34b2eae30bafe8daeccde819a794cd89e09549": { + "balance": "0x6c6b935b8bbd400000" + }, + "da4a5f557f3bab390a92f49b9b900af30c46ae80": { + "balance": "0x21e19e0c9bab2400000" + }, + "da505537537ffb33c415fec64e69bae090c5f60f": { + "balance": "0x8ac7230489e800000" + }, + "da698d64c65c7f2b2c7253059cd3d181d899b6b7": { + "balance": "0x1004e2e45fb7ee0000" + }, + "da7732f02f2e272eaf28df972ecc0ddeed9cf498": { + "balance": "0xb20bfbf6967890000" + }, + "da7ad025ebde25d22243cb830ea1d3f64a566323": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "da855d53477f505ec4c8d5e8bb9180d38681119c": { + "balance": "0x12f939c99edab800000" + }, + "da875e4e2f3cabe4f37e0eaed7d1f6dcc6ffef43": { + "balance": "0x6c6b935b8bbd400000" + }, + "da8bbee182e455d2098acb338a6d45b4b17ed8b6": { + "balance": "0x6c6b935b8bbd400000" + }, + "da982e9643ffece723075a40fe776e5ace04b29b": { + "balance": "0x8b8b6c9999bf20000" + }, + "da9f55460946d7bfb570ddec757ca5773b58429a": { + "balance": "0x1b845d769eb4480000" + }, + "daa1bd7a9148fb865cd612dd35f162861d0f3bdc": { + "balance": "0xa638ab72d92c138000" + }, + "daa63cbda45dd487a3f1cd4a746a01bb5e060b90": { + "balance": "0x10416d9b02a89240000" + }, + "daa776a6754469d7b9267a89b86725e740da0fa0": { + "balance": "0x6acb3df27e1f880000" + }, + "daac91c1e859d5e57ed3084b50200f9766e2c52b": { + "balance": "0x15af1d78b58c400000" + }, + "daacdaf42226d15cb1cf98fa15048c7f4ceefe69": { + "balance": "0x1043561a8829300000" + }, + "dab6bcdb83cf24a0ae1cb21b3b5b83c2f3824927": { + "balance": "0xa968163f0a57b400000" + }, + "dabb0889fc042926b05ef57b2520910abc4b4149": { + "balance": "0x6c6b935b8bbd400000" + }, + "dabc225042a6592cfa13ebe54efa41040878a5a2": { + "balance": "0xe11fad5d85ca30000" + }, + "dac0c177f11c5c3e3e78f2efd663d13221488574": { + "balance": "0x3635c9adc5dea00000" + }, + "dad136b88178b4837a6c780feba226b98569a94c": { + "balance": "0xad78ebc5ac6200000" + }, + "dadbfafd8b62b92a24efd75256dd83abdbd7bbdb": { + "balance": "0x11164759ffb320000" + }, + "dadc00ab7927603c2fcf31cee352f80e6c4d6351": { + "balance": "0x6c66e9a55378b80000" + }, + "dae0d33eaa341569fa9ff5982684854a4a328a6e": { + "balance": "0x3635c9adc5dea00000" + }, + "dae7201eab8c063302930d693929d07f95e71962": { + "balance": "0x91aec028b419810000" + }, + "daedd4ad107b271e89486cbf80ebd621dd974578": { + "balance": "0x6c6b935b8bbd400000" + }, + "db04fad9c49f9e880beb8fcf1d3a3890e4b3846f": { + "balance": "0x435ae6cc0c58e50000" + }, + "db0cc78f74d9827bdc8a6473276eb84fdc976212": { + "balance": "0x6c6b935b8bbd400000" + }, + "db1293a506e90cad2a59e1b8561f5e66961a6788": { + "balance": "0x6c6b935b8bbd400000" + }, + "db19a3982230368f0177219cb10cb259cdb2257c": { + "balance": "0x6c6b935b8bbd400000" + }, + "db23a6fef1af7b581e772cf91882deb2516fc0a7": { + "balance": "0xad78ebc5ac6200000" + }, + "db244f97d9c44b158a40ed9606d9f7bd38913331": { + "balance": "0x58788cb94b1d80000" + }, + "db288f80ffe232c2ba47cc94c763cf6fc9b82b0d": { + "balance": "0x49b9ca9a694340000" + }, + "db2a0c9ab64df58ddfb1dbacf8ba0d89c85b31b4": { + "balance": "0xd8d726b7177a800000" + }, + "db34745ede8576b499db01beb7c1ecda85cf4abe": { + "balance": "0x4563918244f400000" + }, + "db3f258ab2a3c2cf339c4499f75a4bd1d3472e9e": { + "balance": "0x5150ae84a8cdf00000" + }, + "db4bc83b0e6baadb1156c5cf06e0f721808c52c7": { + "balance": "0x2fb474098f67c00000" + }, + "db63122de7037da4971531fae9af85867886c692": { + "balance": "0xf0425b0641f340000" + }, + "db6c2a73dac7424ab0d031b66761122566c01043": { + "balance": "0xa2a15d09519be00000" + }, + "db6e560c9bc620d4bea3a94d47f7880bf47f2d5f": { + "balance": "0x4da0fdfcf05760000" + }, + "db6ff71b3db0928f839e05a7323bfb57d29c87aa": { + "balance": "0x3154c9729d05780000" + }, + "db73460b59d8e85045d5e752e62559875e42502e": { + "balance": "0x36330322d5238c0000" + }, + "db77b88dcb712fd17ee91a5b94748d720c90a994": { + "balance": "0x6c6b935b8bbd400000" + }, + "db7d4037081f6c65f9476b0687d97f1e044d0a1d": { + "balance": "0x23c757072b8dd00000" + }, + "db882eacedd0eff263511b312adbbc59c6b8b25b": { + "balance": "0x1ed4fde7a2236b00000" + }, + "db9371b30c4c844e59e03e924be606a938d1d310": { + "balance": "0x6c6b935b8bbd400000" + }, + "dba4796d0ceb4d3a836b84c96f910afc103f5ba0": { + "balance": "0x908f493f737410000" + }, + "dbadc61ed5f0460a7f18e51b2fb2614d9264a0e0": { + "balance": "0x22b1c8c1227a00000" + }, + "dbb6ac484027041642bbfd8d80f9d0c1cf33c1eb": { + "balance": "0x6c6b935b8bbd400000" + }, + "dbbcbb79bf479a42ad71dbcab77b5adfaa872c58": { + "balance": "0x5dc892aa1131c80000" + }, + "dbc1ce0e49b1a705d22e2037aec878ee0d75c703": { + "balance": "0xd8d726b7177a80000" + }, + "dbc1d0ee2bab531140de137722cd36bdb4e47194": { + "balance": "0xad78ebc5ac6200000" + }, + "dbc59ed88973dead310884223af49763c05030f1": { + "balance": "0x1158e460913d00000" + }, + "dbc66965e426ff1ac87ad6eb78c1d95271158f9f": { + "balance": "0xfc936392801c0000" + }, + "dbcbcd7a57ea9db2349b878af34b1ad642a7f1d1": { + "balance": "0xad78ebc5ac6200000" + }, + "dbd51cdf2c3bfacdff106221de2e19ad6d420414": { + "balance": "0x5f68e8131ecf800000" + }, + "dbd71efa4b93c889e76593de609c3b04cbafbe08": { + "balance": "0x1158e460913d00000" + }, + "dbf5f061a0f48e5e69618739a77d2ec19768d201": { + "balance": "0x83d6c7aab63600000" + }, + "dbf8b13967f55125272de0562536c450ba5655a0": { + "balance": "0x6ef578f06e0ccb0000" + }, + "dbfb1bb464b8a58e500d2ed8de972c45f5f1c0fb": { + "balance": "0x56bc75e2d631000000" + }, + "dc067ed3e12d711ed475f5156ef7e71a80d934b9": { + "balance": "0x205b4dfa1ee74780000" + }, + "dc087f9390fb9e976ac23ab689544a0942ec2021": { + "balance": "0x62a992e53a0af00000" + }, + "dc1eb9b6e64351f56424509645f83e79eee76cf4": { + "balance": "0xd8d726b7177a800000" + }, + "dc1f1979615f082140b8bb78c67b27a1942713b1": { + "balance": "0x340aad21b3b700000" + }, + "dc23b260fcc26e7d10f4bd044af794579460d9da": { + "balance": "0x1b1b6bd7af64c70000" + }, + "dc29119745d2337320da51e19100c948d980b915": { + "balance": "0x8ac7230489e800000" + }, + "dc2d15a69f6bb33b246aef40450751c2f6756ad2": { + "balance": "0x6c341080bd1fb00000" + }, + "dc3dae59ed0fe18b58511e6fe2fb69b219689423": { + "balance": "0x56bc75e2d63100000" + }, + "dc3f0e7672f71fe7525ba30b9755183a20b9166a": { + "balance": "0x2089cf57b5b3e968000" + }, + "dc4345d6812e870ae90c568c67d2c567cfb4f03c": { + "balance": "0x16b352da5e0ed300000" + }, + "dc44275b1715baea1b0345735a29ac42c9f51b4f": { + "balance": "0x3f19beb8dd1ab00000" + }, + "dc46c13325cd8edf0230d068896486f007bf4ef1": { + "balance": "0x487a9a304539440000" + }, + "dc51b2dc9d247a1d0e5bc36ca3156f7af21ff9f6": { + "balance": "0x3635c9adc5dea00000" + }, + "dc5305b4020a06b49d657c7ca34c35c91c5f2c56": { + "balance": "0x17df6c10dbeba970000" + }, + "dc57345b38e0f067c9a31d9deac5275a10949321": { + "balance": "0xad78ebc5ac6200000" + }, + "dc57477dafa42f705c7fe40eae9c81756e0225f1": { + "balance": "0x1b1b8128a7416e0000" + }, + "dc5f5ad663a6f263327d64cac9cb133d2c960597": { + "balance": "0x6c6b935b8bbd400000" + }, + "dc703a5f3794c84d6cb3544918cae14a35c3bd4f": { + "balance": "0x6449e84e47a8a80000" + }, + "dc738fb217cead2f69594c08170de1af10c419e3": { + "balance": "0x152d02c7e14af6800000" + }, + "dc76e85ba50b9b31ec1e2620bce6e7c8058c0eaf": { + "balance": "0x1158e460913d00000" + }, + "dc83b6fd0d512131204707eaf72ea0c8c9bef976": { + "balance": "0x6c6b935b8bbd400000" + }, + "dc8c2912f084a6d184aa73638513ccbc326e0102": { + "balance": "0x4633bc36cbc2dc0000" + }, + "dc911cf7dc5dd0813656670528e9338e67034786": { + "balance": "0x6c6b935b8bbd400000" + }, + "dcb03bfa6c1131234e56b7ea7c4f721487546b7a": { + "balance": "0x487a9a304539440000" + }, + "dcb64df43758c7cf974fa660484fbb718f8c67c1": { + "balance": "0x43c33c1937564800000" + }, + "dcc52d8f8d9fc742a8b82767f0555387c563efff": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "dccb370ed68aa922283043ef7cad1b9d403fc34a": { + "balance": "0xd8d726b7177a800000" + }, + "dccca42045ec3e16508b603fd936e7fd7de5f36a": { + "balance": "0x11164759ffb320000" + }, + "dcd10c55bb854f754434f1219c2c9a98ace79f03": { + "balance": "0xd8d8583fa2d52f0000" + }, + "dcd5bca2005395b675fde5035659b26bfefc49ee": { + "balance": "0xaadec983fcff40000" + }, + "dcdbbd4e2604e40e1710cc6730289dccfad3892d": { + "balance": "0xf95dd2ec27cce00000" + }, + "dce30c31f3ca66721ecb213c809aab561d9b52e4": { + "balance": "0x6c6b935b8bbd400000" + }, + "dcf33965531380163168fc11f67e89c6f1bc178a": { + "balance": "0x122776853406b08000" + }, + "dcf6b657266e91a4dae6033ddac15332dd8d2b34": { + "balance": "0x5f68e8131ecf800000" + }, + "dcf9719be87c6f46756db4891db9b611d2469c50": { + "balance": "0x3635c9adc5dea00000" + }, + "dcfff3e8d23c2a34b56bd1b3bd45c79374432239": { + "balance": "0x10f0cf064dd59200000" + }, + "dd04eee74e0bf30c3f8d6c2c7f52e0519210df93": { + "balance": "0x4563918244f400000" + }, + "dd26b429fd43d84ec179825324bad5bfb916b360": { + "balance": "0x116bf95bc8432980000" + }, + "dd2a233adede66fe1126d6c16823b62a021feddb": { + "balance": "0x6c6b935b8bbd400000" + }, + "dd2bdfa917c1f310e6fa35aa8af16939c233cd7d": { + "balance": "0x15af1d78b58c400000" + }, + "dd35cfdbcb993395537aecc9f59085a8d5ddb6f5": { + "balance": "0x3635c9adc5dea00000" + }, + "dd47189a3e64397167f0620e484565b762bfbbf4": { + "balance": "0x6449e84e47a8a80000" + }, + "dd4dd6d36033b0636fcc8d0938609f4dd64f4a86": { + "balance": "0x340aad21b3b700000" + }, + "dd4f5fa2111db68f6bde3589b63029395b69a92d": { + "balance": "0x8963dd8c2c5e00000" + }, + "dd63042f25ed32884ad26e3ad959eb94ea36bf67": { + "balance": "0x484d7fde7d593f00000" + }, + "dd65f6e17163b5d203641f51cc7b24b00f02c8fb": { + "balance": "0xad78ebc5ac6200000" + }, + "dd6c062193eac23d2fdbf997d5063a346bb3b470": { + "balance": "0x1158e460913d00000" + }, + "dd7bcda65924aaa49b80984ae173750258b92847": { + "balance": "0x21e19e0c9bab2400000" + }, + "dd7ff441ba6ffe3671f3c0dabbff1823a5043370": { + "balance": "0x6c6b935b8bbd400000" + }, + "dd8254121a6e942fc90828f2431f511dad7f32e6": { + "balance": "0xa39b29e1f360e80000" + }, + "dd8af9e7765223f4446f44d3d509819a3d3db411": { + "balance": "0x21e19e0c9bab2400000" + }, + "dd95dbe30f1f1877c5dd7684aeef302ab6885192": { + "balance": "0x1c5d8d6eb3e32500000" + }, + "dd967c4c5f8ae47e266fb416aad1964ee3e7e8c3": { + "balance": "0x1a420db02bd7d580000" + }, + "dd9b485a3b1cd33a6a9c62f1e5bee92701856d25": { + "balance": "0xc3383ed031b7e8000" + }, + "dda371e600d30688d4710e088e02fdf2b9524d5f": { + "balance": "0x177224aa844c7200000" + }, + "dda4ed2a58a8dd20a73275347b580d71b95bf99a": { + "balance": "0x15a13cc201e4dc0000" + }, + "dda4ff7de491c687df4574dd1b17ff8f246ba3d1": { + "balance": "0x42684a41abfd8400000" + }, + "ddab6b51a9030b40fb95cf0b748a059c2417bec7": { + "balance": "0x6c6b935b8bbd400000" + }, + "ddab75fb2ff9fecb88f89476688e2b00e367ebf9": { + "balance": "0x41bad155e6512200000" + }, + "ddabf13c3c8ea4e3d73d78ec717afafa430e5479": { + "balance": "0x8cf23f909c0fa000000" + }, + "ddac312a9655426a9c0c9efa3fd82559ef4505bf": { + "balance": "0x15be6174e1912e0000" + }, + "ddac6bf4bbdd7d597d9c686d0695593bedccc7fa": { + "balance": "0x2ee449550898e40000" + }, + "ddbd2b932c763ba5b1b7ae3b362eac3e8d40121a": { + "balance": "0x21e19e0c9bab2400000" + }, + "ddbddd1bbd38ffade0305d30f02028d92e9f3aa8": { + "balance": "0x6c6b935b8bbd400000" + }, + "ddbee6f094eae63420b003fb4757142aea6cd0fd": { + "balance": "0x6c6b935b8bbd400000" + }, + "ddd69c5b9bf5eb5a39cee7c3341a120d973fdb34": { + "balance": "0x6bc14b8f8e1b350000" + }, + "dddd7b9e6eab409b92263ac272da801b664f8a57": { + "balance": "0x69e10de76676d0800000" + }, + "dde670d01639667576a22dd05d3246d61f06e083": { + "balance": "0x1731790534df20000" + }, + "dde77a4740ba08e7f73fbe3a1674912931742eeb": { + "balance": "0x434fe4d4382f1d48000" + }, + "dde8f0c31b7415511dced1cd7d46323e4bd12232": { + "balance": "0x57473d05dabae80000" + }, + "dde969aef34ea87ac299b7597e292b4a0155cc8a": { + "balance": "0x1032f2594a01738000" + }, + "ddf0cce1fe996d917635f00712f4052091dff9ea": { + "balance": "0x6c6b935b8bbd400000" + }, + "ddf3ad76353810be6a89d731b787f6f17188612b": { + "balance": "0x43c33c1937564800000" + }, + "ddf5810a0eb2fb2e32323bb2c99509ab320f24ac": { + "balance": "0x3ca5c66d9bc44300000" + }, + "ddf95c1e99ce2f9f5698057c19d5c94027ee4a6e": { + "balance": "0x14542ba12a337c00000" + }, + "ddfafdbc7c90f1320e54b98f374617fbd01d109f": { + "balance": "0xb98bc829a6f90000" + }, + "ddfcca13f934f0cfbe231da13039d70475e6a1d0": { + "balance": "0x3638221660a5aa8000" + }, + "de027efbb38503226ed871099cb30bdb02af1335": { + "balance": "0x3635c9adc5dea00000" + }, + "de06d5ea777a4eb1475e605dbcbf43444e8037ea": { + "balance": "0xa968163f0a57b400000" + }, + "de07fb5b7a464e3ba7fbe09e9acb271af5338c58": { + "balance": "0x2b5e3af16b1880000" + }, + "de1121829c9a08284087a43fbd2fc1142a3233b4": { + "balance": "0x3635c9adc5dea00000" + }, + "de176b5284bcee3a838ba24f67fc7cbf67d78ef6": { + "balance": "0x209ce08c962b00000" + }, + "de212293f8f1d231fa10e609470d512cb8ffc512": { + "balance": "0x6c6b935b8bbd400000" + }, + "de30e49e5ab313214d2f01dcabce8940b81b1c76": { + "balance": "0xaadec983fcff40000" + }, + "de33d708a3b89e909eaf653b30fdc3a5d5ccb4b3": { + "balance": "0x99c88229fd4c20000" + }, + "de374299c1d07d79537385190f442ef9ca24061f": { + "balance": "0x73f75d1a085ba0000" + }, + "de42fcd24ce4239383304367595f068f0c610740": { + "balance": "0x2722a70f1a9a00000" + }, + "de50868eb7e3c71937ec73fa89dd8b9ee10d45aa": { + "balance": "0x3635c9adc5dea00000" + }, + "de55de0458f850b37e4d78a641dd2eb2dd8f38ce": { + "balance": "0xd8d726b7177a800000" + }, + "de5b005fe8daae8d1f05de3eda042066c6c4691c": { + "balance": "0x3ba1910bf341b00000" + }, + "de612d0724e84ea4a7feaa3d2142bd5ee82d3201": { + "balance": "0x1158e460913d00000" + }, + "de6d363106cc6238d2f092f0f0372136d1cd50c6": { + "balance": "0x121ea68c114e5100000" + }, + "de7dee220f0457a7187d56c1c41f2eb00ac56021": { + "balance": "0x2225f39c85052a0000" + }, + "de82cc8d4a1bb1d9434392965b3e80bad3c03d4f": { + "balance": "0x50186e75de97a60000" + }, + "de97f4330700b48c496d437c91ca1de9c4b01ba4": { + "balance": "0x9dcc0515b56e0c0000" + }, + "de9eff4c798811d968dccb460d9b069cf30278e0": { + "balance": "0x15af1d78b58c400000" + }, + "deb1bc34d86d4a4dde2580d8beaf074eb0e1a244": { + "balance": "0x55a6e79ccd1d300000" + }, + "deb2495d6aca7b2a6a2d138b6e1a42e2dc311fdd": { + "balance": "0x6c6b935b8bbd400000" + }, + "deb97254474c0d2f5a7970dcdb2f52fb1098b896": { + "balance": "0x3635c9adc5dea00000" + }, + "deb9a49a43873020f0759185e20bbb4cf381bb8f": { + "balance": "0xb78edb0bf2e5e0000" + }, + "debbdd831e0f20ae6e378252decdf92f7cf0c658": { + "balance": "0x6c6b935b8bbd400000" + }, + "dec3eec2640a752c466e2b7e7ee685afe9ac41f4": { + "balance": "0x47c99753596b288000" + }, + "dec82373ade8ebcf2acb6f8bc2414dd7abb70d77": { + "balance": "0xad78ebc5ac6200000" + }, + "dec8a1a898f1b895d8301fe64ab3ad5de941f689": { + "balance": "0x2ab4f67e8a730f8000" + }, + "dec99e972fca7177508c8e1a47ac22d768acab7c": { + "balance": "0x6c6b935b8bbd400000" + }, + "ded877378407b94e781c4ef4af7cfc5bc220b516": { + "balance": "0x143179d86911020000" + }, + "dee942d5caf5fac11421d86b010b458e5c392990": { + "balance": "0xd8d726b7177a800000" + }, + "deee2689fa9006b59cf285237de53b3a7fd01438": { + "balance": "0x186579f29e20250000" + }, + "defddfd59b8d2c154eecf5c7c167bf0ba2905d3e": { + "balance": "0x512cb5e2647420000" + }, + "defe9141f4704599159d7b223de42bffd80496b3": { + "balance": "0x56bc75e2d63100000" + }, + "df098f5e4e3dffa51af237bda8652c4f73ed9ca6": { + "balance": "0x1b36a6444a3e180000" + }, + "df0d08617bd252a911df8bd41a39b83ddf809673": { + "balance": "0x21e19e0c9bab2400000" + }, + "df0ff1f3d27a8ec9fb8f6b0cb254a63bba8224a5": { + "balance": "0xecc5202945d0020000" + }, + "df1fa2e20e31985ebe2c0f0c93b54c0fb67a264b": { + "balance": "0xad78ebc5ac6200000" + }, + "df211cd21288d6c56fae66c3ff54625dd4b15427": { + "balance": "0x8786cd764e1f2c0000" + }, + "df236bf6abf4f3293795bf0c28718f93e3b1b36b": { + "balance": "0x487a9a304539440000" + }, + "df31025f5649d2c6eea41ed3bdd3471a790f759a": { + "balance": "0x1158e460913d00000" + }, + "df37c22e603aedb60a627253c47d8ba866f6d972": { + "balance": "0x5150ae84a8cdf000000" + }, + "df3b72c5bd71d4814e88a62321a93d4011e3578b": { + "balance": "0xd8d726b7177a800000" + }, + "df3f57b8ee6434d047223def74b20f63f9e4f955": { + "balance": "0xd9462c6cb4b5a0000" + }, + "df44c47fc303ac76e74f97194cca67b5bb3c023f": { + "balance": "0x2009c5c8bf6fdc0000" + }, + "df47a61b72535193c561cccc75c3f3ce0804a20e": { + "balance": "0x15935c0b4e3d780000" + }, + "df47a8ef95f2f49f8e6f58184154145d11f72797": { + "balance": "0x678a932062e4180000" + }, + "df53003346d65c5e7a646bc034f2b7d32fcbe56a": { + "balance": "0x6c6b935b8bbd400000" + }, + "df57353aaff2aadb0a04f9014e8da7884e86589c": { + "balance": "0x84886a66e4fb00000" + }, + "df60f18c812a11ed4e2776e7a80ecf5e5305b3d6": { + "balance": "0x30ca024f987b900000" + }, + "df6485c4297ac152b289b19dde32c77ec417f47d": { + "balance": "0x3635c9adc5dea00000" + }, + "df660a91dab9f730f6190d50c8390561500756ca": { + "balance": "0x6c6b935b8bbd400000" + }, + "df6ed6006a6abe886ed33d95a4de28fc12183927": { + "balance": "0x3154c9729d05780000" + }, + "df8510793eee811c2dab1c93c6f4473f30fbef5b": { + "balance": "0x3635c9adc5dea00000" + }, + "df8d48b1eb07b3c217790e6c2df04dc319e7e848": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "dfa6b8b8ad3184e357da282951d79161cfb089bc": { + "balance": "0x15af1d78b58c400000" + }, + "dfaf31e622c03d9e18a0ddb8be60fbe3e661be0a": { + "balance": "0x21e171a3ec9f72c0000" + }, + "dfb1626ef48a1d7d7552a5e0298f1fc23a3b482d": { + "balance": "0x5ce895dd949efa0000" + }, + "dfb4d4ade52fcc818acc7a2c6bb2b00224658f78": { + "balance": "0x1a420db02bd7d580000" + }, + "dfbd4232c17c407a980db87ffbcda03630e5c459": { + "balance": "0x1dfc7f924923530000" + }, + "dfcbdf09454e1a5e4a40d3eef7c5cf1cd3de9486": { + "balance": "0xd8d726b7177a800000" + }, + "dfdbcec1014b96da2158ca513e9c8d3b9af1c3d0": { + "balance": "0x6c6b935b8bbd400000" + }, + "dfded2574b27d1613a7d98b715159b0d00baab28": { + "balance": "0x43c33c1937564800000" + }, + "dfdf43393c649caebe1bb18059decb39f09fb4e8": { + "balance": "0x15af1d78b58c400000" + }, + "dfe3c52a92c30396a4e33a50170dc900fcf8c9cf": { + "balance": "0x2b5e3af16b1880000" + }, + "dfe549fe8430e552c6d07cc3b92ccd43b12fb50f": { + "balance": "0x48875eaf6562a0000" + }, + "dfe929a61c1b38eddbe82c25c2d6753cb1e12d68": { + "balance": "0x15d1cf4176aeba0000" + }, + "dff1b220de3d8e9ca4c1b5be34a799bcded4f61c": { + "balance": "0x14e4e353ea39420000" + }, + "dff4007931786593b229efe5959f3a4e219e51af": { + "balance": "0x10afc1ade3b4ed40000" + }, + "dffcea5421ec15900c6ecfc777184e140e209e24": { + "balance": "0x115473824344e0000" + }, + "e001aba77c02e172086c1950fffbcaa30b83488f": { + "balance": "0x6acb3df27e1f880000" + }, + "e00484788db50fc6a48e379d123e508b0f6e5ab1": { + "balance": "0x3635c9adc5dea00000" + }, + "e0060462c47ff9679baef07159cae08c29f274a9": { + "balance": "0x6c6b935b8bbd400000" + }, + "e00d153b10369143f97f54b8d4ca229eb3e8f324": { + "balance": "0x83d6c7aab63600000" + }, + "e012db453827a58e16c1365608d36ed658720507": { + "balance": "0x6c6b935b8bbd400000" + }, + "e01547ba42fcafaf93938becf7699f74290af74f": { + "balance": "0x6c6b935b8bbd400000" + }, + "e016dc138e25815b90be3fe9eee8ffb2e105624f": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "e01859f242f1a0ec602fa8a3b0b57640ec89075e": { + "balance": "0x1e162c177be5cc0000" + }, + "e020e86362b487752836a6de0bc02cd8d89a8b6a": { + "balance": "0x14542ba12a337c00000" + }, + "e023f09b2887612c7c9cf1988e3a3a602b3394c9": { + "balance": "0x6c6b935b8bbd400000" + }, + "e0272213e8d2fd3e96bd6217b24b4ba01b617079": { + "balance": "0x1158e460913d00000" + }, + "e02b74a47628be315b1f76b315054ad44ae9716f": { + "balance": "0xd8d726b7177a800000" + }, + "e03220c697bcd28f26ef0b74404a8beb06b2ba7b": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "e0352fdf819ba265f14c06a6315c4ac1fe131b2e": { + "balance": "0x3635c9adc5dea00000" + }, + "e0388aeddd3fe2ad56f85748e80e710a34b7c92e": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "e03c00d00388ecbf4f263d0ac778bb41a57a40d9": { + "balance": "0x3636c9796436740000" + }, + "e04920dc6ecc1d6ecc084f88aa0af5db97bf893a": { + "balance": "0x9ddc1e3b901180000" + }, + "e04972a83ca4112bc871c72d4ae1616c2f0728db": { + "balance": "0xe81c77f29a32f0000" + }, + "e04ff5e5a7e2af995d8857ce0290b53a2b0eda5d": { + "balance": "0x3635c9adc5dea00000" + }, + "e05029aceb0778675bef1741ab2cd2931ef7c84b": { + "balance": "0x10f0dbae61009528000" + }, + "e056bf3ff41c26256fef51716612b9d39ade999c": { + "balance": "0x56be757a12e0a8000" + }, + "e061a4f2fc77b296d19ada238e49a5cb8ecbfa70": { + "balance": "0xd8d726b7177a800000" + }, + "e0663e8cd66792a641f56e5003660147880f018e": { + "balance": "0x6c6b935b8bbd400000" + }, + "e0668fa82c14d6e8d93a53113ef2862fa81581bc": { + "balance": "0x2f2f39fc6c54000000" + }, + "e069c0173352b10bf6834719db5bed01adf97bbc": { + "balance": "0x10634f8e5323b0000" + }, + "e06c29a81517e0d487b67fb0b6aabc4f57368388": { + "balance": "0x15be6174e1912e0000" + }, + "e06cb6294704eea7437c2fc3d30773b7bf38889a": { + "balance": "0x116dc3a8994b30000" + }, + "e07137ae0d116d033533c4eab496f8a9fb09569c": { + "balance": "0x4be4e7267b6ae00000" + }, + "e076db30ab486f79194ebbc45d8fab9a9242f654": { + "balance": "0x106607e3494baa00000" + }, + "e07ebbc7f4da416e42c8d4f842aba16233c12580": { + "balance": "0x6c6b935b8bbd400000" + }, + "e081ca1f4882db6043d5a9190703fde0ab3bf56d": { + "balance": "0x15af1d78b58c400000" + }, + "e083d34863e0e17f926b7928edff317e998e9c4b": { + "balance": "0x15af1d78b58c400000" + }, + "e08b9aba6bd9d28bc2056779d2fbf0f2855a3d9d": { + "balance": "0x6c6b935b8bbd400000" + }, + "e08bc29c2b48b169ff2bdc16714c586e6cb85ccf": { + "balance": "0x1158e460913d00000" + }, + "e08c60313106e3f9334fe6f7e7624d211130c077": { + "balance": "0x22b1c8c1227a00000" + }, + "e09c68e61998d9c81b14e4ee802ba7adf6d74cdb": { + "balance": "0xd8d726b7177a800000" + }, + "e09fea755aee1a44c0a89f03b5deb762ba33006f": { + "balance": "0x3ba289bc944ff70000" + }, + "e0a254ac09b9725bebc8e460431dd0732ebcabbf": { + "balance": "0x14542ba12a337c00000" + }, + "e0aa69365555b73f282333d1e30c1bbd072854e8": { + "balance": "0x17b7883c06916600000" + }, + "e0bad98eee9698dbf6d76085b7923de5754e906d": { + "balance": "0x90d972f32323c0000" + }, + "e0c4ab9072b4e6e3654a49f8a8db026a4b3386a9": { + "balance": "0x6c6b935b8bbd400000" + }, + "e0ce80a461b648a501fd0b824690c8868b0e4de8": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "e0cf698a053327ebd16b7d7700092fe2e8542446": { + "balance": "0x52a34cbb61f578000" + }, + "e0d231e144ec9107386c7c9b02f1702ceaa4f700": { + "balance": "0x10f0dbae61009528000" + }, + "e0d76b7166b1f3a12b4091ee2b29de8caa7d07db": { + "balance": "0x6c6b935b8bbd400000" + }, + "e0e0b2e29dde73af75987ee4446c829a189c95bc": { + "balance": "0x813ca56906d340000" + }, + "e0e978753d982f7f9d1d238a18bd4889aefe451b": { + "balance": "0x20dd68aaf3289100000" + }, + "e0f372347c96b55f7d4306034beb83266fd90966": { + "balance": "0x15af1d78b58c400000" + }, + "e0f903c1e48ac421ab48528f3d4a2648080fe043": { + "balance": "0x3708baed3d68900000" + }, + "e0ff0bd9154439c4a5b7233e291d7d868af53f33": { + "balance": "0x1579216a51bbfb0000" + }, + "e10ac19c546fc2547c61c139f5d1f45a6666d5b0": { + "balance": "0x102da6fd0f73a3c0000" + }, + "e10c540088113fa6ec00b4b2c8824f8796e96ec4": { + "balance": "0x320f4509ab1ec7c00000" + }, + "e1173a247d29d8238df0922f4df25a05f2af77c3": { + "balance": "0x878c95d560f30478000" + }, + "e1203eb3a723e99c2220117ca6afeb66fa424f61": { + "balance": "0x200ef929e3256fe0000" + }, + "e131f87efc5ef07e43f0f2f4a747b551d750d9e6": { + "balance": "0x43c25e0dcc1bd1c0000" + }, + "e1334e998379dfe983177062791b90f80ee22d8d": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "e13540ecee11b212e8b775dc8e71f374aae9b3f8": { + "balance": "0x6c6b935b8bbd400000" + }, + "e13b3d2bbfdcbc8772a23315724c1425167c5688": { + "balance": "0x37f379141ed04b8000" + }, + "e1443dbd95cc41237f613a48456988a04f683282": { + "balance": "0xd8d8583fa2d52f0000" + }, + "e14617f6022501e97e7b3e2d8836aa61f0ff2dba": { + "balance": "0xad78ebc5ac6200000" + }, + "e149b5726caf6d5eb5bf2acc41d4e2dc328de182": { + "balance": "0x692ae8897081d00000" + }, + "e154daeadb545838cbc6aa0c55751902f528682a": { + "balance": "0x10afc1ade3b4ed40000" + }, + "e16ce35961cd74bd590d04c4ad4a1989e05691c6": { + "balance": "0x7ea28327577080000" + }, + "e172dfc8f80cd1f8cd8539dc26082014f5a8e3e8": { + "balance": "0xa2a15d09519be00000" + }, + "e177e0c201d335ba3956929c571588b51c5223ae": { + "balance": "0x6c6b935b8bbd400000" + }, + "e17812f66c5e65941e186c46922b6e7b2f0eeb46": { + "balance": "0x62a992e53a0af00000" + }, + "e180de9e86f57bafacd7904f9826b6b4b26337a3": { + "balance": "0x2d041d705a2c600000" + }, + "e192489b85a982c1883246d915b229cb13207f38": { + "balance": "0x10f0cf064dd59200000" + }, + "e1953c6e975814c571311c34c0f6a99cdf48ab82": { + "balance": "0x2b5e3af16b1880000" + }, + "e1ae029b17e373cde3de5a9152201a14cac4e119": { + "balance": "0x56b55ae58ca400000" + }, + "e1b2aca154b8e0766c4eba30bc10c7f35036f368": { + "balance": "0x115473824344e0000" + }, + "e1b39b88d9900dbc4a6cdc481e1060080a8aec3c": { + "balance": "0x6c6b935b8bbd400000" + }, + "e1b63201fae1f129f95c7a116bd9dde5159c6cda": { + "balance": "0x4d60573a2f0c9ef0000" + }, + "e1bfaa5a45c504428923c4a61192a55b1400b45d": { + "balance": "0x90f534608a72880000" + }, + "e1c607c0a8a060da8f02a8eb38a013ea8cda5b8c": { + "balance": "0x2ba39e82ed5d740000" + }, + "e1cb83ec5eb6f1eeb85e99b2fc63812fde957184": { + "balance": "0x43c33c1937564800000" + }, + "e1d91b0954cede221d6f24c7985fc59965fb98b8": { + "balance": "0x6c6b935b8bbd400000" + }, + "e1dfb5cc890ee8b2877e885d267c256187d019e6": { + "balance": "0x56bc75e2d63100000" + }, + "e1e8c50b80a352b240ce7342bbfdf5690cc8cb14": { + "balance": "0x155bd9307f9fe80000" + }, + "e1f63ebbc62c7b7444040eb99623964f7667b376": { + "balance": "0x1158e460913d00000" + }, + "e206fb7324e9deb79e19903496d6961b9be56603": { + "balance": "0x56bc75e2d63100000" + }, + "e207578e1f4ddb8ff6d5867b39582d71b9812ac5": { + "balance": "0xd255d112e103a00000" + }, + "e208812a684098f3da4efe6aba256256adfe3fe6": { + "balance": "0x6c6b935b8bbd400000" + }, + "e20954d0f4108c82d4dcb2148d26bbd924f6dd24": { + "balance": "0x21e19e0c9bab2400000" + }, + "e20bb9f3966419e14bbbaaaa6789e92496cfa479": { + "balance": "0xbbd825030752760000" + }, + "e20d1bcb71286dc7128a9fc7c6ed7f733892eef5": { + "balance": "0x3664f8e7c24af40000" + }, + "e2191215983f33fd33e22cd4a2490054da53fddc": { + "balance": "0xdb44e049bb2c0000" + }, + "e2198c8ca1b399f7521561fd5384a7132fba486b": { + "balance": "0x3708baed3d68900000" + }, + "e21c778ef2a0d7f751ea8c074d1f812243863e4e": { + "balance": "0x11fc70e2c8c8ae18000" + }, + "e229e746a83f2ce253b0b03eb1472411b57e5700": { + "balance": "0x1369fb96128ac480000" + }, + "e22b20c77894463baf774cc256d5bddbbf7ddd09": { + "balance": "0x3635c9adc5dea00000" + }, + "e230fe1bff03186d0219f15d4c481b7d59be286a": { + "balance": "0x1fd741e8088970000" + }, + "e237baa4dbc9926e32a3d85d1264402d54db012f": { + "balance": "0x6c6b935b8bbd400000" + }, + "e24109be2f513d87498e926a286499754f9ed49e": { + "balance": "0x300ea8ad1f27ca0000" + }, + "e246683cc99db7c4a52bcbacaab0b32f6bfc93d7": { + "balance": "0x6c6b935b8bbd400000" + }, + "e25a167b031e84616d0f013f31bda95dcc6350b9": { + "balance": "0x23c757072b8dd000000" + }, + "e25b9f76b8ad023f057eb11ad94257a0862e4e8c": { + "balance": "0x6c6b935b8bbd400000" + }, + "e26657f0ed201ea2392c9222b80a7003608ddf30": { + "balance": "0x22b1c8c1227a00000" + }, + "e26bf322774e18288769d67e3107deb7447707b8": { + "balance": "0x6c6b935b8bbd400000" + }, + "e2728a3e8c2aaac983d05dc6877374a8f446eee9": { + "balance": "0xab640391201300000" + }, + "e28b062259e96eeb3c8d4104943f9eb325893cf5": { + "balance": "0x487a9a304539440000" + }, + "e28dbc8efd5e416a762ec0e018864bb9aa83287b": { + "balance": "0x531f200ab3e030a8000" + }, + "e2904b1aefa056398b6234cb35811288d736db67": { + "balance": "0x22b1c8c1227a00000" + }, + "e29d8ae452dcf3b6ac645e630409385551faae0a": { + "balance": "0x45a0da4adf5420000" + }, + "e2bbf84641e3541f6c33e6ed683a635a70bde2ec": { + "balance": "0x1b413cfcbf59b78000" + }, + "e2cf360aa2329eb79d2bf7ca04a27a17c532e4d8": { + "balance": "0x58788cb94b1d80000" + }, + "e2df23f6ea04becf4ab701748dc0963184555cdb": { + "balance": "0x6c6b935b8bbd400000" + }, + "e2e15c60dd381e3a4be25071ab249a4c5c5264da": { + "balance": "0x7f6bc49b81b5370000" + }, + "e2e26e4e1dcf30d048cc6ecf9d51ec1205a4e926": { + "balance": "0xd8d726b7177a800000" + }, + "e2ee691f237ee6529b6557f2fcdd3dcf0c59ec63": { + "balance": "0x127729c14687c200000" + }, + "e2efa5fca79538ce6068bf31d2c516d4d53c08e5": { + "balance": "0x71cc408df63400000" + }, + "e2efd0a9bc407ece03d67e8ec8e9d283f48d2a49": { + "balance": "0x299b33bf9c584e00000" + }, + "e2f40d358f5e3fe7463ec70480bd2ed398a7063b": { + "balance": "0x1158e460913d00000" + }, + "e2f9383d5810ea7b43182b8704b62b27f5925d39": { + "balance": "0x15af1d78b58c400000" + }, + "e2ff9ee4b6ecc14141cc74ca52a9e7a2ee14d908": { + "balance": "0x4be4e7267b6ae00000" + }, + "e30212b2011bb56bdbf1bc35690f3a4e0fd905ea": { + "balance": "0x1b2df9d219f57980000" + }, + "e303167f3d4960fe881b32800a2b4aeff1b088d4": { + "balance": "0x6c6b935b8bbd400000" + }, + "e304a32f05a83762744a9542976ff9b723fa31ea": { + "balance": "0x5572f240a346200000" + }, + "e308435204793764f5fcbe65eb510f5a744a655a": { + "balance": "0xad78ebc5ac6200000" + }, + "e309974ce39d60aadf2e69673251bf0e04760a10": { + "balance": "0xdc55fdb17647b0000" + }, + "e31b4eef184c24ab098e36c802714bd4743dd0d4": { + "balance": "0xad78ebc5ac6200000" + }, + "e321bb4a946adafdade4571fb15c0043d39ee35f": { + "balance": "0x556475382b4c9e0000" + }, + "e3263ce8af6db3e467584502ed7109125eae22a5": { + "balance": "0x6c6b935b8bbd400000" + }, + "e32b1c4725a1875449e98f970eb3e54062d15800": { + "balance": "0xad78ebc5ac6200000" + }, + "e32f95766d57b5cd4b173289d6876f9e64558194": { + "balance": "0x56bc75e2d63100000" + }, + "e33840d8bca7da98a6f3d096d83de78b70b71ef8": { + "balance": "0x6c6b935b8bbd400000" + }, + "e338e859fe2e8c15554848b75caecda877a0e832": { + "balance": "0x61acff81a78ad40000" + }, + "e33d980220fab259af6a1f4b38cf0ef3c6e2ea1a": { + "balance": "0x6c6b935b8bbd400000" + }, + "e33df4ce80ccb62a76b12bcdfcecc46289973aa9": { + "balance": "0x14542ba12a337c00000" + }, + "e33ff987541dde5cdee0a8a96dcc3f33c3f24cc2": { + "balance": "0x2a5a058fc295ed000000" + }, + "e3410bb7557cf91d79fa69d0dfea0aa075402651": { + "balance": "0x6c6b935b8bbd400000" + }, + "e341642d40d2afce2e9107c67079ac7a2660086c": { + "balance": "0x15af1d78b58c400000" + }, + "e35453eef2cc3c7a044d0ac134ba615908fa82ee": { + "balance": "0x7ff1ccb7561df0000" + }, + "e36a8ea87f1e99e8a2dc1b2608d166667c9dfa01": { + "balance": "0x56bc75e2d63100000" + }, + "e3712701619ca7623c55db3a0ad30e867db0168b": { + "balance": "0x1158e460913d00000" + }, + "e37f5fdc6ec97d2f866a1cfd0d3a4da4387b22b5": { + "balance": "0x21e19e0c9bab2400000" + }, + "e3878f91ca86053fced5444686a330e09cc388fb": { + "balance": "0xa844a7424d9c80000" + }, + "e38b91b35190b6d9deed021c30af094b953fdcaa": { + "balance": "0x1ceaf795b6b860000" + }, + "e38ef28a5ed984a7db24a1ae782dfb87f397dfc6": { + "balance": "0x7c0860e5a80dc0000" + }, + "e3925509c8d0b2a6738c5f6a72f35314491248ce": { + "balance": "0x36e9a8669a44768000" + }, + "e3933d61b77dcdc716407f8250bc91e4ffaeb09d": { + "balance": "0x1256986c95891c200000" + }, + "e3951de5aefaf0458768d774c254f7157735e505": { + "balance": "0x56c95de8e8ca1d0000" + }, + "e399c81a1d701b44f0b66f3399e66b275aaaf8c1": { + "balance": "0x3635c9adc5dea00000" + }, + "e39b11a8ab1ff5e22e5ae6517214f73c5b9b55dc": { + "balance": "0x6c6b935b8bbd400000" + }, + "e39e46e15d22ce56e0c32f1877b7d1a264cf94f3": { + "balance": "0x43c33c1937564800000" + }, + "e3a4621b66004588e31206f718cb00a319889cf0": { + "balance": "0x6c6b935b8bbd400000" + }, + "e3a4f83c39f85af9c8b1b312bfe5fc3423afa634": { + "balance": "0x18d993f34aef10000" + }, + "e3a89a1927cc4e2d43fbcda1e414d324a7d9e057": { + "balance": "0xb23e2a936dec60000" + }, + "e3ab3ca9b870e3f548517306bba4de2591afafc2": { + "balance": "0x410e34aecc8cd30000" + }, + "e3b3d2c9bf570be6a2f72adca1862c310936a43c": { + "balance": "0x56d2aa3a5c09a0000" + }, + "e3c0c128327a9ad80148139e269773428e638cb0": { + "balance": "0x6c6b935b8bbd400000" + }, + "e3c812737ac606baf7522ad817428a36050e7a34": { + "balance": "0x692ae8897081d00000" + }, + "e3cffe239c64e7e20388e622117391301b298696": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "e3d3eaa299887865569e88be219be507189be1c9": { + "balance": "0x18ba6fa92e93160000" + }, + "e3d8bf4efe84b1616d1b89e427ddc6c8830685ae": { + "balance": "0x6c6b935b8bbd400000" + }, + "e3d915eda3b825d6ee4af9328d32ac18ada35497": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "e3da4f3240844c9b6323b4996921207122454399": { + "balance": "0x27190a952df4be58000" + }, + "e3eb2c0a132a524f72ccc0d60fee8b41685d39e2": { + "balance": "0x6acb3df27e1f880000" + }, + "e3ec18a74ed43855409a26ade7830de8e42685ef": { + "balance": "0x11164759ffb320000" + }, + "e3ece1f632711d13bfffa1f8f6840871ee58fb27": { + "balance": "0xd8d726b7177a800000" + }, + "e3f80b40fb83fb97bb0d5230af4f6ed59b1c7cc8": { + "balance": "0x487a9a304539440000" + }, + "e3ffb02cb7d9ea5243701689afd5d417d7ed2ece": { + "balance": "0x43a77aabd00780000" + }, + "e400d651bb3f2d23d5f849e6f92d9c5795c43a8a": { + "balance": "0x90f534608a72880000" + }, + "e406f5dd72cab66d8a6ecbd6bfb494a7b6b09afe": { + "balance": "0x56bc75e2d63100000" + }, + "e408aa99835307eea4a6c5eb801fe694117f707d": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "e408fceaa1b98f3c640f48fcba39f056066d6308": { + "balance": "0x21e19e0c9bab2400000" + }, + "e40a7c82e157540a0b00901dbb86c716e1a062da": { + "balance": "0x2b31d2425f6740000" + }, + "e41aea250b877d423a63ba2bce2f3a61c0248d56": { + "balance": "0xe18398e7601900000" + }, + "e430c0024fdbf73a82e21fccf8cbd09138421c21": { + "balance": "0xd8d726b7177a800000" + }, + "e4324912d64ea3aef76b3c2ff9df82c7e13ae991": { + "balance": "0x6c6b935b8bbd400000" + }, + "e4368bc1420b35efda95fafbc73090521916aa34": { + "balance": "0xd8d726b7177a800000" + }, + "e437acbe0f6227b0e36f36e4bcf7cf613335fb68": { + "balance": "0xad78ebc5ac6200000" + }, + "e44b7264dd836bee8e87970340ed2b9aed8ed0a5": { + "balance": "0x138e7faa01a803a0000" + }, + "e44ea51063405154aae736be2bf1ee3b9be639ae": { + "balance": "0xd8d726b7177a800000" + }, + "e4625501f52b7af52b19ed612e9d54fdd006b492": { + "balance": "0xb5a905a56ddd00000" + }, + "e4715956f52f15306ee9506bf82bccc406b3895e": { + "balance": "0xee79d4f48c5000000" + }, + "e47fbaed99fc209962604ebd20e240f74f4591f1": { + "balance": "0x6c6b935b8bbd400000" + }, + "e482d255ede56b04c3e8df151f56e9ca62aaa8c2": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "e48e65125421880d42bdf1018ab9778d96928f3f": { + "balance": "0xe3aeb5737240a00000" + }, + "e492818aa684e5a676561b725d42f3cc56ae5198": { + "balance": "0x2b5e3af16b18800000" + }, + "e49936a92a8ccf710eaac342bc454b9b14ebecb1": { + "balance": "0x6c6b935b8bbd400000" + }, + "e49af4f34adaa2330b0e49dc74ec18ab2f92f827": { + "balance": "0x6c6b935b8bbd400000" + }, + "e49ba0cd96816c4607773cf8a5970bb5bc16a1e6": { + "balance": "0x5a87e7d7f5f6580000" + }, + "e4a47e3933246c3fd62979a1ea19ffdf8c72ef37": { + "balance": "0x809b383ea7d7e8000" + }, + "e4b6ae22c7735f5b89f34dd77ad0975f0acc9181": { + "balance": "0x3635c9adc5dea00000" + }, + "e4ca0a5238564dfc91e8bf22bade2901619a1cd4": { + "balance": "0x3635c9adc5dea00000" + }, + "e4cafb727fb5c6b70bb27533b8a9ccc9ef6888e1": { + "balance": "0x10497bf4af4caf8000" + }, + "e4dc22ed595bf0a337c01e03cc6be744255fc9e8": { + "balance": "0xa5aa85009e39c0000" + }, + "e4fb26d1ca1eecba3d8298d9d148119ac2bbf580": { + "balance": "0x15af1d78b58c400000" + }, + "e4fc13cfcbac1b17ce7783acd423a845943f6b3a": { + "balance": "0x1158e460913d00000" + }, + "e50b464ac9de35a5618b7cbf254674182b81b97e": { + "balance": "0xde42ee1544dd900000" + }, + "e5102c3b711b810344197419b1cd8a7059f13e32": { + "balance": "0x1043528d0984698000" + }, + "e510d6797fba3d6693835a844ea2ad540691971b": { + "balance": "0x3ae39d47383e8740000" + }, + "e51421f8ee2210c71ed870fe618276c8954afbe9": { + "balance": "0x487a9a304539440000" + }, + "e51eb87e7fb7311f5228c479b48ec9878831ac4c": { + "balance": "0x6c6b935b8bbd400000" + }, + "e5215631b14248d45a255296bed1fbfa0330ff35": { + "balance": "0x4703e6eb5291b80000" + }, + "e528a0e5a267d667e9393a6584e19b34dc9be973": { + "balance": "0x12f939c99edab800000" + }, + "e53425d8df1f11c341ff58ae5f1438abf1ca53cf": { + "balance": "0x1174a5cdf88bc80000" + }, + "e53c68796212033e4e6f9cff56e19c461eb454f9": { + "balance": "0x3635c9adc5dea00000" + }, + "e54102534de8f23effb093b31242ad3b233facfd": { + "balance": "0xd8d726b7177a800000" + }, + "e545ee84ea48e564161e9482d59bcf406a602ca2": { + "balance": "0x6449e84e47a8a80000" + }, + "e5481a7fed42b901bbed20789bd4ade50d5f83b9": { + "balance": "0x6c6b935b8bbd400000" + }, + "e559b5fd337b9c5572a9bf9e0f2521f7d446dbe4": { + "balance": "0xad78ebc5ac6200000" + }, + "e55c80520a1b0f755b9a2cd3ce214f7625653e8a": { + "balance": "0x6c6b935b8bbd400000" + }, + "e56d431324c92911a1749df292709c14b77a65cd": { + "balance": "0x1bc85dc2a89bb200000" + }, + "e57d2995b0ebdf3f3ca6c015eb04260dbb98b7c6": { + "balance": "0x6c6b935b8bbd400000" + }, + "e587b16abc8a74081e3613e14342c03375bf0847": { + "balance": "0x6c6b935b8bbd400000" + }, + "e589fa76984db5ec4004b46ee8a59492c30744ce": { + "balance": "0x97c9ce4cf6d5c00000" + }, + "e58dd23238ee6ea7c2138d385df500c325f376be": { + "balance": "0x62a992e53a0af00000" + }, + "e5953fea497104ef9ad2d4e5841c271f073519c2": { + "balance": "0x2629f66e0c53000000" + }, + "e5968797468ef767101b761d431fce14abffdbb4": { + "balance": "0x1b3d969fa411ca00000" + }, + "e597f083a469c4591c3d2b1d2c772787befe27b2": { + "balance": "0xf2dc7d47f15600000" + }, + "e59b3bd300893f97233ef947c46f7217e392f7e9": { + "balance": "0x3635c9adc5dea00000" + }, + "e5a365343cc4eb1e770368e1f1144a77b832d7e0": { + "balance": "0x1158e460913d00000" + }, + "e5a3d7eb13b15c100177236d1beb30d17ee15420": { + "balance": "0x6c6b935b8bbd400000" + }, + "e5aa0b833bb916dc19a8dd683f0ede241d988eba": { + "balance": "0xa2a15d09519be00000" + }, + "e5b7af146986c0ff8f85d22e6cc334077d84e824": { + "balance": "0x6c6b935b8bbd400000" + }, + "e5b826196c0e1bc1119b021cf6d259a610c99670": { + "balance": "0xad78ebc5ac6200000" + }, + "e5b96fc9ac03d448c1613ac91d15978145dbdfd1": { + "balance": "0xad78ebc5ac6200000" + }, + "e5b980d28eece2c06fca6c9473068b37d4a6d6e9": { + "balance": "0x25afd68cac2b900000" + }, + "e5bab4f0afd8a9d1a381b45761aa18f3d3cce105": { + "balance": "0x51bfd7c13878d10000" + }, + "e5bcc88c3b256f6ed5fe550e4a18198b943356ad": { + "balance": "0x6c6b935b8bbd400000" + }, + "e5bdf34f4ccc483e4ca530cc7cf2bb18febe92b3": { + "balance": "0x6d835a10bbcd20000" + }, + "e5dc9349cb52e161196122cf87a38936e2c57f34": { + "balance": "0x6c6b935b8bbd400000" + }, + "e5e33800a1b2e96bde1031630a959aa007f26e51": { + "balance": "0x487a9a304539440000" + }, + "e5e37e19408f2cfbec83349dd48153a4a795a08f": { + "balance": "0xe3aeb5737240a00000" + }, + "e5edc73e626f5d3441a45539b5f7a398c593edf6": { + "balance": "0x2ee449550898e40000" + }, + "e5edf8123f2403ce1a0299becf7aac744d075f23": { + "balance": "0xada55474b81340000" + }, + "e5f8ef6d970636b0dcaa4f200ffdc9e75af1741c": { + "balance": "0x6c6b935b8bbd400000" + }, + "e5fb31a5caee6a96de393bdbf89fbe65fe125bb3": { + "balance": "0x3635c9adc5dea00000" + }, + "e5fbe34984b637196f331c679d0c0c47d83410e1": { + "balance": "0x6c6c44fe47ec050000" + }, + "e60955dc0bc156f6c41849f6bd776ba44b0ef0a1": { + "balance": "0x10431627a0933b0000" + }, + "e60a55f2df996dc3aedb696c08dde039b2641de8": { + "balance": "0x6c6b935b8bbd400000" + }, + "e6115b13f9795f7e956502d5074567dab945ce6b": { + "balance": "0x152d02c7e14af6800000" + }, + "e61f280915c774a31d223cf80c069266e5adf19b": { + "balance": "0x2fb474098f67c00000" + }, + "e62f98650712eb158753d82972b8e99ca3f61877": { + "balance": "0x6c6b935b8bbd400000" + }, + "e62f9d7c64e8e2635aeb883dd73ba684ee7c1079": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "e63e787414b9048478a50733359ecdd7e3647aa6": { + "balance": "0x55a6e79ccd1d300000" + }, + "e646665872e40b0d7aa2ff82729caaba5bc3e89e": { + "balance": "0x15af1d78b58c400000" + }, + "e64ef012658d54f8e8609c4e9023c09fe865c83b": { + "balance": "0x18493fba64ef00000" + }, + "e64f6e1d6401b56c076b64a1b0867d0b2f310d4e": { + "balance": "0x2cbad71c53ae50000" + }, + "e667f652f957c28c0e66d0b63417c80c8c9db878": { + "balance": "0x209d922f5259c50000" + }, + "e677c31fd9cb720075dca49f1abccd59ec33f734": { + "balance": "0x1a6d6beb1d42ee00000" + }, + "e67c2c1665c88338688187629f49e99b60b2d3ba": { + "balance": "0xad78ebc5ac6200000" + }, + "e69a6cdb3a8a7db8e1f30c8b84cd73bae02bc0f8": { + "balance": "0x394fdc2e452f6718000" + }, + "e69d1c378b771e0feff051db69d966ac6779f4ed": { + "balance": "0x1dfa6aaa1497040000" + }, + "e69fcc26ed225f7b2e379834c524d70c1735e5bc": { + "balance": "0x6c6b935b8bbd400000" + }, + "e6a3010f0201bc94ff67a2f699dfc206f9e76742": { + "balance": "0x2fa7cbf66464980000" + }, + "e6a6f6dd6f70a456f4ec15ef7ad5e5dbb68bd7dc": { + "balance": "0xad78ebc5ac6200000" + }, + "e6b20f980ad853ad04cbfc887ce6601c6be0b24c": { + "balance": "0xd8d726b7177a800000" + }, + "e6b3ac3f5d4da5a8857d0b3f30fc4b2b692b77d7": { + "balance": "0x4f2591f896a6500000" + }, + "e6b9545f7ed086e552924639f9a9edbbd5540b3e": { + "balance": "0xcbd47b6eaa8cc00000" + }, + "e6bcd30a8fa138c5d9e5f6c7d2da806992812dcd": { + "balance": "0x370ea0d47cf61a800000" + }, + "e6c81ffcecb47ecdc55c0b71e4855f3e5e97fc1e": { + "balance": "0x121ea68c114e510000" + }, + "e6cb260b716d4c0ab726eeeb07c8707204e276ae": { + "balance": "0x3635c9adc5dea00000" + }, + "e6cb3f3124c9c9cc3834b1274bc3336456a38bac": { + "balance": "0x172b1de0a213ff0000" + }, + "e6d22209ffd0b87509ade3a8e2ef429879cb89b5": { + "balance": "0x3a7aa9e1899ca300000" + }, + "e6d49f86c228f47367a35e886caacb271e539429": { + "balance": "0x165ec09da7a1980000" + }, + "e6e621eaab01f20ef0836b7cad47464cb5fd3c96": { + "balance": "0x11219342afa24b0000" + }, + "e6e886317b6a66a5b4f81bf164c538c264351765": { + "balance": "0x6c6b935b8bbd400000" + }, + "e6e9a39d750fe994394eb68286e5ea62a6997882": { + "balance": "0x2086ac351052600000" + }, + "e6ec5cf0c49b9c317e1e706315ef9eb7c0bf11a7": { + "balance": "0x3a469f3467e8ec00000" + }, + "e6f5eb649afb99599c414b27a9c9c855357fa878": { + "balance": "0x90f534608a72880000" + }, + "e6fe0afb9dcedd37b2e22c451ba6feab67348033": { + "balance": "0x21e19e0c9bab2400000" + }, + "e710dcd09b8101f9437bd97db90a73ef993d0bf4": { + "balance": "0x14ee36c05ac2520000" + }, + "e727e67ef911b81f6cf9c73fcbfebc2b02b5bfc6": { + "balance": "0x6c6b935b8bbd400000" + }, + "e72e1d335cc29a96b9b1c02f003a16d971e90b9d": { + "balance": "0x55a6e79ccd1d300000" + }, + "e7311c9533f0092c7248c9739b5b2c864a34b1ce": { + "balance": "0x97f97d6cc26dfe0000" + }, + "e73bfeada6f0fd016fbc843ebcf6e370a65be70c": { + "balance": "0x6acb3df27e1f880000" + }, + "e73ccf436725c151e255ccf5210cfce5a43f13e3": { + "balance": "0x1154e53217ddb0000" + }, + "e742b1e6069a8ffc3c4767235defb0d49cbed222": { + "balance": "0x2b5e3af16b18800000" + }, + "e74608f506866ada6bfbfdf20fea440be76989ef": { + "balance": "0x6c6acc67d7b1d40000" + }, + "e7533e270cc61fa164ac1553455c105d04887e14": { + "balance": "0x696d8590020bb0000" + }, + "e75c1fb177089f3e58b1067935a6596ef1737fb5": { + "balance": "0x56a879fa775470000" + }, + "e75c3b38a58a3f33d55690a5a59766be185e0284": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "e761d27fa3502cc76bb1a608740e1403cf9dfc69": { + "balance": "0xf2dc7d47f15600000" + }, + "e766f34ff16f3cfcc97321721f43ddf5a38b0cf4": { + "balance": "0x54069233bf7f780000" + }, + "e76d945aa89df1e457aa342b31028a5e9130b2ce": { + "balance": "0x3708baed3d68900000" + }, + "e7735ec76518fc6aa92da8715a9ee3f625788f13": { + "balance": "0x6c4d160bafa1b78000" + }, + "e77a89bd45dc04eeb4e41d7b596b707e6e51e74c": { + "balance": "0x28a857425466f800000" + }, + "e77d7deab296c8b4fa07ca3be184163d5a6d606c": { + "balance": "0x5043904b671190000" + }, + "e77febabdf080f0f5dca1d3f5766f2a79c0ffa7c": { + "balance": "0x4b229d28a843680000" + }, + "e780a56306ba1e6bb331952c22539b858af9f77d": { + "balance": "0xa968163f0a57b400000" + }, + "e781ec732d401202bb9bd13860910dd6c29ac0b6": { + "balance": "0x433874f632cc600000" + }, + "e784dcc873aa8c1513ec26ff36bc92eac6d4c968": { + "balance": "0xad78ebc5ac6200000" + }, + "e7912d4cf4562c573ddc5b71e37310e378ef86c9": { + "balance": "0x155bd9307f9fe80000" + }, + "e791d585b89936b25d298f9d35f9f9edc25a2932": { + "balance": "0x6c6b935b8bbd400000" + }, + "e792349ce9f6f14f81d0674096befa1f9221cdea": { + "balance": "0x5b5d234a0db4388000" + }, + "e796fd4e839b4c95d7510fb7c5c72b83c6c3e3c7": { + "balance": "0x1bc433f23f83140000" + }, + "e7a42f59fee074e4fb13ea9e57ecf1cc48282249": { + "balance": "0x43c33c1937564800000" + }, + "e7a4560c84b20e0fb54c49670c2903b0a96c42a4": { + "balance": "0x206aeac7a903980000" + }, + "e7a8e471eafb798f4554cc6e526730fd56e62c7d": { + "balance": "0x3635c9adc5dea00000" + }, + "e7be82c6593c1eeddd2ae0b15001ff201ab57b2f": { + "balance": "0x10910d4cdc9f60000" + }, + "e7c6b5fc05fc748e5b4381726449a1c0ad0fb0f1": { + "balance": "0x6c6b935b8bbd400000" + }, + "e7d17524d00bad82497c0f27156a647ff51d2792": { + "balance": "0x1158e460913d00000" + }, + "e7d213947fcb904ad738480b1eed2f5c329f27e8": { + "balance": "0x103c3b1d3e9c30000" + }, + "e7d6240620f42c5edbb2ede6aec43da4ed9b5757": { + "balance": "0x3635c9adc5dea00000" + }, + "e7da609d40cde80f00ce5b4ffb6aa9d0b03494fc": { + "balance": "0x3635c9adc5dea00000" + }, + "e7f06f699be31c440b43b4db0501ec0e25261644": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "e7f4d7fe6f561f7fa1da3005fd365451ad89df89": { + "balance": "0xad78ebc5ac6200000" + }, + "e7fd8fd959aed2767ea7fa960ce1db53af802573": { + "balance": "0x3635c9adc5dea00000" + }, + "e80e7fef18a5db15b01473f3ad6b78b2a2f8acd9": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "e8137fc1b2ec7cc7103af921899b4a39e1d959a1": { + "balance": "0x50c5e761a444080000" + }, + "e81c2d346c0adf4cc56708f6394ba6c8c8a64a1e": { + "balance": "0x6c6b935b8bbd400000" + }, + "e82c58c579431b673546b53a86459acaf1de9b93": { + "balance": "0x3635c9adc5dea00000" + }, + "e834c64318205ca7dd4a21abcb08266cb21ff02c": { + "balance": "0x3635c6204739d98000" + }, + "e83604e4ff6be7f96f6018d3ec3072ec525dff6b": { + "balance": "0x9ddc1e3b901180000" + }, + "e845e387c4cbdf982280f6aa01c40e4be958ddb2": { + "balance": "0x54b40b1f852bda00000" + }, + "e848ca7ebff5c24f9b9c316797a43bf7c356292d": { + "balance": "0x62e115c008a880000" + }, + "e84b55b525f1039e744b918cb3332492e45eca7a": { + "balance": "0xad78ebc5ac6200000" + }, + "e84f8076a0f2969ecd333eef8de41042986291f2": { + "balance": "0x176b344f2a78c00000" + }, + "e864fec07ed1214a65311e11e329de040d04f0fd": { + "balance": "0x59ca83f5c404968000" + }, + "e87dbac636a37721df54b08a32ef4959b5e4ff82": { + "balance": "0x6c6b935b8bbd400000" + }, + "e87e9bbfbbb71c1a740c74c723426df55d063dd9": { + "balance": "0x1b1928c00c7a6380000" + }, + "e87eac6d602b4109c9671bf57b950c2cfdb99d55": { + "balance": "0x2b4f21972ecce0000" + }, + "e881bbbe69722d81efecaa48d1952a10a2bfac8f": { + "balance": "0x3635c9adc5dea000000" + }, + "e89249738b7eced7cb666a663c49cbf6de8343ea": { + "balance": "0x6c6b935b8bbd400000" + }, + "e89c22f1a4e1d4746ecfaa59ed386fee12d51e37": { + "balance": "0x26f8e87f0a7da0000" + }, + "e89da96e06beaf6bd880b378f0680c43fd2e9d30": { + "balance": "0x209a1a01a56fec0000" + }, + "e8a91da6cf1b9d65c74a02ec1f96eecb6dd241f3": { + "balance": "0x692ae8897081d00000" + }, + "e8a9a41740f44f54c3688b53e1ddd42e43c9fe94": { + "balance": "0xd8d726b7177a800000" + }, + "e8b28acda971725769db8f563d28666d41ddab6c": { + "balance": "0x21e19e0c9bab2400000" + }, + "e8be24f289443ee473bc76822f55098d89b91cc5": { + "balance": "0x6c6b935b8bbd400000" + }, + "e8c3d3b0e17f97d1e756e684f94e1470f99c95a1": { + "balance": "0x15af1d78b58c400000" + }, + "e8c3f045bb7d38c9d2f395b0ba8492b253230901": { + "balance": "0x1e7e4171bf4d3a00000" + }, + "e8cc43bc4f8acf39bff04ebfbf42aac06a328470": { + "balance": "0x15af1d78b58c400000" + }, + "e8d942d82f175ecb1c16a405b10143b3f46b963a": { + "balance": "0x1ed2e8ff6d971c0000" + }, + "e8ddbed732ebfe754096fde9086b8ea4a4cdc616": { + "balance": "0x6c6b935b8bbd400000" + }, + "e8de725eca5def805ff7941d31ac1c2e342dfe95": { + "balance": "0x857e0d6f1da76a0000" + }, + "e8e9850586e94f5299ab494bb821a5f40c00bd04": { + "balance": "0xcf152640c5c8300000" + }, + "e8ead1bb90ccc3aea2b0dcc5b58056554655d1d5": { + "balance": "0x1a4aba225c207400000" + }, + "e8eaf12944092dc3599b3953fa7cb1c9761cc246": { + "balance": "0x6194049f30f7200000" + }, + "e8ed51bbb3ace69e06024b33f86844c47348db9e": { + "balance": "0x22f9ea89f4a7d6c40000" + }, + "e8ef100d7ce0895832f2678df72d4acf8c28b8e3": { + "balance": "0x1b1b6bd7af64c70000" + }, + "e8f29969e75c65e01ce3d86154207d0a9e7c76f2": { + "balance": "0xa22fa9a73a27198000" + }, + "e8fc36b0131ec120ac9e85afc10ce70b56d8b6ba": { + "balance": "0xad78ebc5ac6200000" + }, + "e90a354cec04d69e5d96ddc0c5138d3d33150aa0": { + "balance": "0x1b1a7dcf8a44d38000" + }, + "e9133e7d31845d5f2b66a2618792e869311acf66": { + "balance": "0x517c0cbf9a390880000" + }, + "e91dac0195b19e37b59b53f7c017c0b2395ba44c": { + "balance": "0x65ea3db75546600000" + }, + "e91fa0badaddb9a97e88d3f4db7c55d6bb7430fe": { + "balance": "0x14620c57dddae00000" + }, + "e923c06177b3427ea448c0a6ff019b54cc548d95": { + "balance": "0x1f780014667f28000" + }, + "e93d47a8ca885d540c4e526f25d5c6f2c108c4b8": { + "balance": "0x17da3a04c7b3e0000000" + }, + "e9458f68bb272cb5673a04f781b403556fd3a387": { + "balance": "0x34e8b88cee2d40000" + }, + "e94941b6036019b4016a30c1037d5a6903babaad": { + "balance": "0x2a48acab6204b00000" + }, + "e9495ba5842728c0ed97be37d0e422b98d69202c": { + "balance": "0x6c6b935b8bbd400000" + }, + "e94ded99dcb572b9bb1dcba32f6dee91e057984e": { + "balance": "0x155bd9307f9fe80000" + }, + "e95179527deca5916ca9a38f215c1e9ce737b4c9": { + "balance": "0x21e19e0c9bab2400000" + }, + "e9559185f166fc9513cc71116144ce2deb0f1d4b": { + "balance": "0x43c33c1937564800000" + }, + "e95e92bbc6de07bf3a660ebf5feb1c8a3527e1c5": { + "balance": "0xfc936392801c0000" + }, + "e965daa34039f7f0df62375a37e5ab8a72b301e7": { + "balance": "0x103fddecdb3f5700000" + }, + "e969ea1595edc5c4a707cfde380929633251a2b0": { + "balance": "0xad78ebc5ac6200000" + }, + "e96b184e1f0f54924ac874f60bbf44707446b72b": { + "balance": "0x9dcc0515b56e0c0000" + }, + "e96d7d4cdd15553a4e4d316d6d6480ca3cea1e38": { + "balance": "0x2955d02e1a135a00000" + }, + "e96e2d3813efd1165f12f602f97f4a62909d3c66": { + "balance": "0x7caee97613e6700000" + }, + "e97fde0b67716325cf0ecce8a191a3761b2c791d": { + "balance": "0x3677036edf0af60000" + }, + "e982e6f28c548f5f96f45e63f7ab708724f53fa1": { + "balance": "0x157ae829a41f3b0000" + }, + "e9864c1afc8eaad37f3ba56fcb7477cc622009b7": { + "balance": "0x448586170a7dc0000" + }, + "e987e6139e6146a717fef96bc24934a5447fe05d": { + "balance": "0x6c6b935b8bbd400000" + }, + "e989733ca1d58d9e7b5029ba5d444858bec03172": { + "balance": "0x1f87408313df4f8000" + }, + "e98c91cadd924c92579e11b41217b282956cdaa1": { + "balance": "0x75c9a8480320c0000" + }, + "e99aece90541cae224b87da673965e0aeb296afd": { + "balance": "0x31df9095a18f600000" + }, + "e99de258a4173ce9ac38ede26c0b3bea3c0973d5": { + "balance": "0x59d0b805e5bb300000" + }, + "e9a2b4914e8553bf0d7c00ca532369b879f931bf": { + "balance": "0x6c6b935b8bbd400000" + }, + "e9a39a8bac0f01c349c64cedb69897f633234ed2": { + "balance": "0xd7c198710e66b00000" + }, + "e9a5ae3c9e05977dd1069e9fd9d3aefbae04b8df": { + "balance": "0x6acb3df27e1f880000" + }, + "e9ac36376efa06109d40726307dd1a57e213eaa9": { + "balance": "0xa844a7424d9c80000" + }, + "e9b1f1fca3fa47269f21b061c353b7f5e96d905a": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "e9b36fe9b51412ddca1a521d6e94bc901213dda8": { + "balance": "0x21e19e0c9bab2400000" + }, + "e9b4a4853577a9dbcc2e795be0310d1bed28641a": { + "balance": "0x3635c9adc5dea00000" + }, + "e9b6a790009bc16642c8d820b7cde0e9fd16d8f5": { + "balance": "0xc55325ca7415e00000" + }, + "e9b9a2747510e310241d2ece98f56b3301d757e0": { + "balance": "0x6c6b935b8bbd400000" + }, + "e9c35c913ca1fceab461582fe1a5815164b4fd21": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "e9c6dfae97f7099fc5f4e94b784db802923a1419": { + "balance": "0x2a53c6d724f100000" + }, + "e9c758f8da41e3346e4350e5ac3976345c6c1082": { + "balance": "0x68a0d3092826ad0000" + }, + "e9caf827be9d607915b365c83f0d3b7ea8c79b50": { + "balance": "0xa2a15d09519be00000" + }, + "e9cafe41a5e8bbd90ba02d9e06585b4eb546c57f": { + "balance": "0x6c6b935b8bbd400000" + }, + "e9d599456b2543e6db80ea9b210e908026e2146e": { + "balance": "0xad78ebc5ac6200000" + }, + "e9e1f7cb00a110edd0ebf8b377ef8a7bb856117f": { + "balance": "0xad78ebc5ac6200000" + }, + "ea14bfda0a6e76668f8788321f07df37824ec5df": { + "balance": "0x2a5a058fc295ed000000" + }, + "ea1ea0c599afb9cd36caacbbb52b5bbb97597377": { + "balance": "0x39fbae8d042dd00000" + }, + "ea1efb3ce789bedec3d67c3e1b3bc0e9aa227f90": { + "balance": "0x27ca4bd719f0b80000" + }, + "ea2c197d26e98b0da83e1b72c787618c979d3db0": { + "balance": "0x11164759ffb320000" + }, + "ea3779d14a13f6c78566bcde403591413a6239db": { + "balance": "0x29b76432b94451200000" + }, + "ea4e809e266ae5f13cdbe38f9d0456e6386d1274": { + "balance": "0xf3f20b8dfa69d00000" + }, + "ea53c954f4ed97fd4810111bdab69ef981ef25b9": { + "balance": "0x3a9d5baa4abf1d00000" + }, + "ea53d26564859d9e90bb0e53b7abf560e0162c38": { + "balance": "0x15af1d78b58c400000" + }, + "ea60436912de6bf187d3a472ff8f5333a0f7ed06": { + "balance": "0x11164759ffb320000" + }, + "ea60549ec7553f511d2149f2d4666cbd9243d93c": { + "balance": "0x6c6b935b8bbd400000" + }, + "ea66e7b84dcdbf36eea3e75b85382a75f1a15d96": { + "balance": "0x5dbc9191266f118000" + }, + "ea686c5057093c171c66db99e01b0ececb308683": { + "balance": "0x14dda85d2ce1478000" + }, + "ea6afe2cc928ac8391eb1e165fc40040e37421e7": { + "balance": "0xa27fa063b2e2e68000" + }, + "ea79057dabef5e64e7b44f7f18648e7e533718d2": { + "balance": "0xad78ebc5ac6200000" + }, + "ea7c4d6dc729cd6b157c03ad237ca19a209346c3": { + "balance": "0x6c6b935b8bbd400000" + }, + "ea8168fbf225e786459ca6bb18d963d26b505309": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "ea81ca8638540cd9d4d73d060f2cebf2241ffc3e": { + "balance": "0x6acb3df27e1f880000" + }, + "ea8317197959424041d9d7c67a3ece1dbb78bb55": { + "balance": "0x155bd9307f9fe80000" + }, + "ea8527febfa1ade29e26419329d393b940bbb7dc": { + "balance": "0x6c6acc67d7b1d40000" + }, + "ea8f30b6e4c5e65290fb9864259bc5990fa8ee8a": { + "balance": "0x1158e460913d00000" + }, + "ea94f32808a2ef8a9bf0861d1d2404f7b7be258a": { + "balance": "0x1158e460913d00000" + }, + "eaa45cea02d87d2cc8fda9434e2d985bd4031584": { + "balance": "0x681fc2cc6e2b8b0000" + }, + "eab0bd148309186cf8cbd13b7232d8095acb833a": { + "balance": "0x2439a881c6a717c0000" + }, + "eabb90d37989aab31feae547e0e6f3999ce6a35d": { + "balance": "0x6c6b935b8bbd400000" + }, + "eac0827eff0c6e3ff28a7d4a54f65cb7689d7b99": { + "balance": "0x9ad9e69f9d47520000" + }, + "eac1482826acb6111e19d340a45fb851576bed60": { + "balance": "0x1be8bab04d9be8000" + }, + "eac17b81ed5191fb0802aa54337313834107aaa4": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "eac3af5784927fe9a598fc4eec38b8102f37bc58": { + "balance": "0x3635c9adc5dea00000" + }, + "eac6b98842542ea10bb74f26d7c7488f698b6452": { + "balance": "0x43c33c1937564800000" + }, + "eac768bf14b8f9432e69eaa82a99fbeb94cd0c9c": { + "balance": "0x14dbb2195ca228900000" + }, + "ead21c1deccfbf1c5cd96688a2476b69ba07ce4a": { + "balance": "0x3f24d8e4a00700000" + }, + "ead4d2eefb76abae5533961edd11400406b298fc": { + "balance": "0xd255d112e103a00000" + }, + "ead65262ed5d122df2b2751410f98c32d1238f51": { + "balance": "0x58317ed46b9b80000" + }, + "ead75016e3a0815072b6b108bcc1b799acf0383e": { + "balance": "0x6c6b935b8bbd400000" + }, + "eaea23aa057200e7c9c15e8ff190d0e66c0c0e83": { + "balance": "0x6c6b935b8bbd400000" + }, + "eaed16eaf5daab5bf0295e5e077f59fb8255900b": { + "balance": "0xd8d726b7177a800000" + }, + "eaedcc6b8b6962d5d9288c156c579d47c0a9fcff": { + "balance": "0x49b9ca9a694340000" + }, + "eaf52388546ec35aca6f6c6393d8d609de3a4bf3": { + "balance": "0x1158e460913d00000" + }, + "eb10458daca79e4a6b24b29a8a8ada711b7f2eb6": { + "balance": "0xd8bb6549b02bb80000" + }, + "eb1cea7b45d1bd4d0e2a007bd3bfb354759e2c16": { + "balance": "0xabbcd4ef377580000" + }, + "eb25481fcd9c221f1ac7e5fd1ecd9307a16215b8": { + "balance": "0xaadec983fcff40000" + }, + "eb2ef3d38fe652403cd4c9d85ed7f0682cd7c2de": { + "balance": "0x90f534608a728800000" + }, + "eb3bdd59dcdda5a9bb2ac1641fd02180f5f36560": { + "balance": "0x165c96647b38a200000" + }, + "eb3ce7fc381c51db7d5fbd692f8f9e058a4c703d": { + "balance": "0xad78ebc5ac6200000" + }, + "eb453f5a3adddd8ab56750fadb0fe7f94d9c89e7": { + "balance": "0x1158e460913d00000" + }, + "eb4f00e28336ea09942588eeac921811c522143c": { + "balance": "0x6c6b935b8bbd400000" + }, + "eb52ab10553492329c1c54833ae610f398a65b9d": { + "balance": "0x83d6c7aab63600000" + }, + "eb570dba975227b1c42d6e8dea2c56c9ad960670": { + "balance": "0x6c6b935b8bbd400000" + }, + "eb6394a7bfa4d28911d5a5b23e93f35e340c2294": { + "balance": "0x43a77aabd00780000" + }, + "eb6810691d1ae0d19e47bd22cebee0b3ba27f88a": { + "balance": "0x87856315d878150000" + }, + "eb76424c0fd597d3e341a9642ad1ee118b2b579d": { + "balance": "0xd8d726b7177a800000" + }, + "eb7c202b462b7cc5855d7484755f6e26ef43a115": { + "balance": "0x6c6b935b8bbd400000" + }, + "eb835c1a911817878a33d167569ea3cdd387f328": { + "balance": "0x3635c9adc5dea00000" + }, + "eb89a882670909cf377e9e78286ee97ba78d46c2": { + "balance": "0x2b7cc2e9c3225c0000" + }, + "eb90c793b3539761e1c814a29671148692193eb4": { + "balance": "0x28a857425466f800000" + }, + "eb9cc9fe0869d2dab52cc7aae8fd57adb35f9feb": { + "balance": "0x6a93bb17af81f80000" + }, + "eba388b0da27c87b1cc0eac6c57b2c5a0b459c1a": { + "balance": "0x170a0f5040e50400000" + }, + "ebaa216de9cc5a43031707d36fe6d5bedc05bdf0": { + "balance": "0x6ac5c62d9486070000" + }, + "ebac2b4408ef5431a13b8508e86250982114e145": { + "balance": "0xd8d726b7177a800000" + }, + "ebb62cf8e22c884b1b28c6fa88fbbc17938aa787": { + "balance": "0x2b42798403c9b80000" + }, + "ebb7d2e11bc6b58f0a8d45c2f6de3010570ac891": { + "balance": "0x1731790534df20000" + }, + "ebbb4f2c3da8be3eb62d1ffb1f950261cf98ecda": { + "balance": "0x6c6b935b8bbd400000" + }, + "ebbd4db9019952d68b1b0f6d8cf0683c00387bb5": { + "balance": "0x120401563d7d910000" + }, + "ebbeeb259184a6e01cccfc2207bbd883785ac90a": { + "balance": "0x219bc1b04783d30000" + }, + "ebd356156a383123343d48843bffed6103e866b3": { + "balance": "0x6acb3df27e1f880000" + }, + "ebd37b256563e30c6f9289a8e2702f0852880833": { + "balance": "0x6c6acc67d7b1d40000" + }, + "ebe46cc3c34c32f5add6c3195bb486c4713eb918": { + "balance": "0x3635c9adc5dea00000" + }, + "ebff84bbef423071e604c361bba677f5593def4e": { + "balance": "0x21e19e0c9bab2400000" + }, + "ec0927bac7dc36669c28354ab1be83d7eec30934": { + "balance": "0x6c6b935b8bbd400000" + }, + "ec0e18a01dc4dc5daae567c3fa4c7f8f9b590205": { + "balance": "0x111ffe404a41e60000" + }, + "ec11362cec810985d0ebbd7b73451444985b369f": { + "balance": "0x65a4e49577057318000" + }, + "ec2cb8b9378dff31aec3c22e0e6dadff314ab5dd": { + "balance": "0x6c6b935b8bbd400000" + }, + "ec30addd895b82ee319e54fb04cb2bb03971f36b": { + "balance": "0x6c6b935b8bbd400000" + }, + "ec3b8b58a12703e581ce5ffd7e21c57d1e5c663f": { + "balance": "0x5c283d410394100000" + }, + "ec4867d2175ab5b9469361595546554684cda460": { + "balance": "0xa2a15d09519be00000" + }, + "ec4d08aa2e47496dca87225de33f2b40a8a5b36f": { + "balance": "0x890b0c2e14fb80000" + }, + "ec58bc0d0c20d8f49465664153c5c196fe59e6be": { + "balance": "0x15af1d78b58c400000" + }, + "ec5b198a00cfb55a97b5d53644cffa8a04d2ab45": { + "balance": "0x6c6b935b8bbd400000" + }, + "ec5df227bfa85d7ad76b426e1cee963bc7f519dd": { + "balance": "0x3635c9adc5dea00000" + }, + "ec5feafe210c12bfc9a5d05925a123f1e73fbef8": { + "balance": "0x608fcf3d88748d000000" + }, + "ec6904bae1f69790591709b0609783733f2573e3": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "ec73114c5e406fdbbe09b4fa621bd70ed54ea1ef": { + "balance": "0x53025cd216fce500000" + }, + "ec73833de4b810bb027810fc8f69f544e83c12d1": { + "balance": "0x3635c9adc5dea00000" + }, + "ec75b4a47513120ba5f86039814f1998e3817ac3": { + "balance": "0x9b0bce2e8fdba0000" + }, + "ec76f12e57a65504033f2c0bce6fc03bd7fa0ac4": { + "balance": "0xc2127af858da700000" + }, + "ec8014efc7cbe5b0ce50f3562cf4e67f8593cd32": { + "balance": "0xf015f25736420000" + }, + "ec82f50d06475f684df1b392e00da341aa145444": { + "balance": "0x6c6b935b8bbd400000" + }, + "ec83e798c396b7a55e2a2224abcd834b27ea459c": { + "balance": "0x28a857425466f800000" + }, + "ec89f2b678a1a15b9134ec5eb70c6a62071fbaf9": { + "balance": "0xad78ebc5ac6200000" + }, + "ec8c1d7b6aaccd429db3a91ee4c9eb1ca4f6f73c": { + "balance": "0xe664992288f2280000" + }, + "ec9851bd917270610267d60518b54d3ca2b35b17": { + "balance": "0x878678326eac9000000" + }, + "ec99e95dece46ffffb175eb6400fbebb08ee9b95": { + "balance": "0x56bc75e2d63100000" + }, + "eca5f58792b8c62d2af556717ee3ee3028be4dce": { + "balance": "0x6c6b935b8bbd400000" + }, + "ecab5aba5b828de1705381f38bc744b32ba1b437": { + "balance": "0x32f51edbaaa3300000" + }, + "ecaf3350b7ce144d068b186010852c84dd0ce0f0": { + "balance": "0x6c6b935b8bbd400000" + }, + "ecb94c568bfe59ade650645f4f26306c736cace4": { + "balance": "0xe7eeba3410b740000" + }, + "ecbe425e670d39094e20fb5643a9d818eed236de": { + "balance": "0x10f0cf064dd59200000" + }, + "ecbe5e1c9ad2b1dccf0a305fc9522f4669dd3ae7": { + "balance": "0x10f0cf064dd59200000" + }, + "eccf7a0457b566b346ca673a180f444130216ac3": { + "balance": "0x56bc75e2d63100000" + }, + "ecd1a62802351a41568d23033004acc6c005a5d3": { + "balance": "0x2b5e3af16b1880000" + }, + "ecd276af64c79d1bd9a92b86b5e88d9a95eb88f8": { + "balance": "0x1158e460913d00000" + }, + "ecd486fc196791b92cf612d348614f9156488b7e": { + "balance": "0x28a857425466f800000" + }, + "ecdaf93229b45ee672f65db506fb5eca00f7fce6": { + "balance": "0x5701f96dcc40ee8000" + }, + "ece111670b563ccdbebca52384290ecd68fe5c92": { + "balance": "0x1158e460913d00000" + }, + "ece1152682b7598fe2d1e21ec15533885435ac85": { + "balance": "0xd8d726b7177a800000" + }, + "ece1290877b583e361a2d41b009346e6274e2538": { + "balance": "0x1043561a8829300000" + }, + "ecf05d07ea026e7ebf4941002335baf2fed0f002": { + "balance": "0xad78ebc5ac6200000" + }, + "ecf24cdd7c22928c441e694de4aa31b0fab59778": { + "balance": "0x2086ac351052600000" + }, + "ecfd004d02f36cd4d8b4a8c1a9533b6af85cd716": { + "balance": "0x10f41acb4bb3b9c0000" + }, + "ed0206cb23315128f8caff26f6a30b985467d022": { + "balance": "0x878678326eac9000000" + }, + "ed1065dbcf9d73c04ffc7908870d881468c1e132": { + "balance": "0x6c6b935b8bbd400000" + }, + "ed1276513b6fc68628a74185c2e20cbbca7817bf": { + "balance": "0xa5aa85009e39c0000" + }, + "ed12a1ba1fb8adfcb20dfa19582e525aa3b74524": { + "balance": "0x16a6502f15a1e540000" + }, + "ed16ce39feef3bd7f5d162045e0f67c0f00046bb": { + "balance": "0x1158e460913d00000" + }, + "ed1a5c43c574d4e934299b24f1472cdc9fd6f010": { + "balance": "0xad78ebc5ac6200000" + }, + "ed1b24b6912d51b334ac0de6e771c7c0454695ea": { + "balance": "0x22b1c8c1227a00000" + }, + "ed1f1e115a0d60ce02fb25df014d289e3a0cbe7d": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "ed31305c319f9273d3936d8f5b2f71e9b1b22963": { + "balance": "0x56bc75e2d63100000" + }, + "ed327a14d5cfadd98103fc0999718d7ed70528ea": { + "balance": "0x4e1003b28d92800000" + }, + "ed3cbc3782cebd67989b305c4133b2cde32211eb": { + "balance": "0x15af1d78b58c400000" + }, + "ed4014538cee664a2fbcb6dc669f7ab16d0ba57c": { + "balance": "0xad78ebc5ac6200000" + }, + "ed41e1a28f5caa843880ef4e8b08bd6c33141edf": { + "balance": "0x2ad5ddfa7a8d830000" + }, + "ed4be04a052d7accb3dcce90319dba4020ab2c68": { + "balance": "0x7f37a70eaf362178000" + }, + "ed52a2cc0869dc9e9f842bd0957c47a8e9b0c9ff": { + "balance": "0x205b4dfa1ee74780000" + }, + "ed5b4c41e762d942404373caf21ed4615d25e6c1": { + "balance": "0x6d2d4f3d9525b40000" + }, + "ed60c4ab6e540206317e35947a63a9ca6b03e2cb": { + "balance": "0x31ad9ad0b467f8000" + }, + "ed641e06368fb0efaa1703e01fe48f4a685309eb": { + "balance": "0xad78ebc5ac6200000" + }, + "ed6643c0e8884b2d3211853785a08bf8f33ed29f": { + "balance": "0x487a9a304539440000" + }, + "ed70a37cdd1cbda9746d939658ae2a6181288578": { + "balance": "0x2086ac3510526000000" + }, + "ed7346766e1a676d0d06ec821867a276a083bf31": { + "balance": "0xd98a0931cc2d490000" + }, + "ed862616fcbfb3becb7406f73c5cbff00c940755": { + "balance": "0x5c283d410394100000" + }, + "ed9e030ca75cb1d29ea01d0d4cdfdccd3844b6e4": { + "balance": "0x1acc116cfafb18000" + }, + "ed9ebccba42f9815e78233266dd6e835b6afc31b": { + "balance": "0x14542ba12a337c00000" + }, + "ed9fb1f5af2fbf7ffc5029cee42b70ff5c275bf5": { + "balance": "0xf2dc7d47f15600000" + }, + "eda4b2fa59d684b27a810df8978a73df308a63c2": { + "balance": "0xd8d726b7177a800000" + }, + "edb473353979a206879de144c10a3c51d7d7081a": { + "balance": "0x14542ba12a337c00000" + }, + "edb71ec41bda7dce86e766e6e8c3e9907723a69b": { + "balance": "0x1158e460913d00000" + }, + "edbac9527b54d6df7ae2e000cca3613ba015cae3": { + "balance": "0x6acb3df27e1f880000" + }, + "edc22fb92c638e1e21ff5cf039daa6e734dafb29": { + "balance": "0x102794ad20da680000" + }, + "eddacd94ec89a2ef968fcf977a08f1fae2757869": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "eddbaafbc21be8f25562f1ed6d05d6afb58f02c2": { + "balance": "0x6c6b935b8bbd400000" + }, + "ede0147ec032c3618310c1ff25690bf172193dac": { + "balance": "0x6c6b935b8bbd400000" + }, + "ede5de7c7fb7eee0f36e64530a41440edfbefacf": { + "balance": "0x21755ee1ef2b180000" + }, + "ede79ae1ff4f1606d59270216fa46ab2ddd4ecaa": { + "balance": "0x7ea28327577080000" + }, + "ede8c2cb876fbe8a4cca8290361a7ea01a69fdf8": { + "balance": "0x1a78c6b44f841838000" + }, + "edeb4894aadd0081bbddd3e8846804b583d19f27": { + "balance": "0x6c6b935b8bbd400000" + }, + "edf603890228d7d5de9309942b5cad4219ef9ad7": { + "balance": "0x10f0cf064dd59200000" + }, + "edf8a3e1d40f13b79ec8e3e1ecf262fd92116263": { + "balance": "0x890b0c2e14fb80000" + }, + "edfda2d5db98f9380714664d54b4ee971a1cae03": { + "balance": "0x22bb8ddd679be0000" + }, + "ee0007b0960d00908a94432a737557876aac7c31": { + "balance": "0x2e0421e69c4cc8000" + }, + "ee049af005974dd1c7b3a9ca8d9aa77175ba53aa": { + "balance": "0x1211ecb56d13488000" + }, + "ee25b9a7032679b113588ed52c137d1a053a1e94": { + "balance": "0xad50f3f4eea8e0000" + }, + "ee31167f9cc93b3c6465609d79db0cde90e8484c": { + "balance": "0x6c6b935b8bbd400000" + }, + "ee34c7e7995db9f187cff156918cfb6f13f6e003": { + "balance": "0x6a4076cf7995a00000" + }, + "ee3564f5f1ba0f94ec7bac164bddbf31c6888b55": { + "balance": "0x56bc75e2d63100000" + }, + "ee58fb3db29070d0130188ce472be0a172b89055": { + "balance": "0x21f42dcdc58e39c0000" + }, + "ee655bb4ee0e8d5478526fb9f15e4064e09ff3dd": { + "balance": "0xad78ebc5ac6200000" + }, + "ee6959de2b67967b71948c891ab00d8c8f38c7dc": { + "balance": "0x6685ac1bfe32c0000" + }, + "ee6c03429969ca1262cb3f0a4a54afa7d348d7f5": { + "balance": "0xde219f91fc18a0000" + }, + "ee71793e3acf12a7274f563961f537529d89c7de": { + "balance": "0x6c6b935b8bbd400000" + }, + "ee7288d91086d9e2eb910014d9ab90a02d78c2a0": { + "balance": "0x6c6b935b8bbd400000" + }, + "ee7c3ded7c28f459c92fe13b4d95bafbab02367d": { + "balance": "0x25f273933db5700000" + }, + "ee867d20916bd2e9c9ece08aa04385db667c912e": { + "balance": "0xa968163f0a57b400000" + }, + "ee899b02cbcb3939cd61de1342d50482abb68532": { + "balance": "0x5f68e8131ecf800000" + }, + "ee906d7d5f1748258174be4cbc38930302ab7b42": { + "balance": "0xad78ebc5ac6200000" + }, + "ee97aa8ac69edf7a987d6d70979f8ec1fbca7a94": { + "balance": "0x14620c57dddae00000" + }, + "eea1e97988de75d821cd28ad6822b22cce988b31": { + "balance": "0x1c30731cec03200000" + }, + "eed28c3f068e094a304b853c950a6809ebcb03e0": { + "balance": "0x3a9d5baa4abf1d00000" + }, + "eed384ef2d41d9d203974e57c12328ea760e08ea": { + "balance": "0x3635c9adc5dea00000" + }, + "eedf6c4280e6eb05b934ace428e11d4231b5905b": { + "balance": "0xad78ebc5ac6200000" + }, + "eee761847e33fd61d99387ee14628694d1bfd525": { + "balance": "0x6c6b935b8bbd400000" + }, + "eee9d0526eda01e43116a395322dda8970578f39": { + "balance": "0x21e1999bbd5d2be0000" + }, + "eef1bbb1e5a83fde8248f88ee3018afa2d1332eb": { + "balance": "0xad78ebc5ac6200000" + }, + "eefba12dfc996742db790464ca7d273be6e81b3e": { + "balance": "0x3635c9adc5dea00000" + }, + "eefd05b0e3c417d55b3343060486cdd5e92aa7a6": { + "balance": "0x4d853c8f8908980000" + }, + "ef0dc7dd7a53d612728bcbd2b27c19dd4d7d666f": { + "balance": "0x26411c5b35f05a0000" + }, + "ef115252b1b845cd857f002d630f1b6fa37a4e50": { + "balance": "0x6acb3df27e1f880000" + }, + "ef1c0477f1184d60accab374d374557a0a3e10f3": { + "balance": "0x83d6c7aab63600000" + }, + "ef2c34bb487d3762c3cca782ccdd7a8fbb0a9931": { + "balance": "0x9c2007651b2500000" + }, + "ef35f6d4b1075e6aa139151c974b2f4658f70538": { + "balance": "0x3c3bc33f94e50d8000" + }, + "ef39ca9173df15531d73e6b72a684b51ba0f2bb4": { + "balance": "0x56a0b4756ee2380000" + }, + "ef463c2679fb279164e20c3d2691358773a0ad95": { + "balance": "0x6c6b935b8bbd400000" + }, + "ef47cf073e36f271d522d7fa4e7120ad5007a0bc": { + "balance": "0x878678326eac900000" + }, + "ef61155ba009dcdebef10b28d9da3d1bc6c9ced4": { + "balance": "0x3342d60dff1960000" + }, + "ef69781f32ffce33346f2c9ae3f08493f3e82f89": { + "balance": "0xfc936392801c0000" + }, + "ef76a4cd8febcbc9b818f17828f8d93473f3f3cb": { + "balance": "0xd8d726b7177a800000" + }, + "ef93818f684db0c3675ec81332b3183ecc28a495": { + "balance": "0x54069233bf7f780000" + }, + "ef9f59aeda418c1494682d941aab4924b5f4929a": { + "balance": "0x152d02c7e14af6800000" + }, + "efa6b1f0db603537826891b8b4bc163984bb40cd": { + "balance": "0x35659ef93f0fc40000" + }, + "efbd52f97da5fd3a673a46cbf330447b7e8aad5c": { + "balance": "0x56c3c9b80a0a68000" + }, + "efc8cf1963c9a95267b228c086239889f4dfd467": { + "balance": "0x21e19e0c9bab2400000" + }, + "efcaae9ff64d2cd95b5249dcffe7faa0a0c0e44d": { + "balance": "0x15be6174e1912e0000" + }, + "efcce06bd6089d0e458ef561f5a689480afe7000": { + "balance": "0x2086ac351052600000" + }, + "efe0675da98a5dda70cd96196b87f4e726b43348": { + "balance": "0x3f19beb8dd1ab00000" + }, + "efe8ff87fc260e0767638dd5d02fc4672e0ec06d": { + "balance": "0x6c6b935b8bbd400000" + }, + "efeb1997aad277cc33430e6111ed0943594048b8": { + "balance": "0x6c6b935b8bbd400000" + }, + "efeea010756f81da4ba25b721787f058170befbd": { + "balance": "0x1c29c9cf770ef0000" + }, + "eff51d72adfae143edf3a42b1aec55a2ccdd0b90": { + "balance": "0x1043561a8829300000" + }, + "eff86b5123bcdc17ed4ce8e05b7e12e51393a1f7": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "effc15e487b1beda0a8d1325bdb4172240dc540a": { + "balance": "0x3853939eee1de0000" + }, + "f01195d657ef3c942e6cb83949e5a20b5cfa8b1e": { + "balance": "0x57473d05dabae800000" + }, + "f02796295101674288c1d93467053d042219b794": { + "balance": "0x281d901f4fdd100000" + }, + "f039683d7b3d225bc7d8dfadef63163441be41e2": { + "balance": "0x1dd1e4bd8d1ee0000" + }, + "f04a6a379708b9428d722aa2b06b77e88935cf89": { + "balance": "0x1043561a8829300000" + }, + "f04d2c91efb6e9c45ffbe74b434c8c5f2b028f1f": { + "balance": "0x3635c9adc5dea00000" + }, + "f057aa66ca767ede124a1c5b9cc5fc94ef0b0137": { + "balance": "0x70a24bcab6f45d0000" + }, + "f05ba8d7b68539d933300bc9289c3d9474d0419e": { + "balance": "0x6da27024dd9600000" + }, + "f05ceeab65410564709951773c8445ad9f4ec797": { + "balance": "0x10431627a0933b0000" + }, + "f05fcd4c0d73aa167e5553c8c0d6d4f2faa39757": { + "balance": "0x2d2d66c3170b2980000" + }, + "f067e1f1d683556a4cc4fd0c0313239f32c4cfd8": { + "balance": "0x3635c9adc5dea00000" + }, + "f067fb10dfb293e998abe564c055e3348f9fbf1e": { + "balance": "0x6c6b935b8bbd400000" + }, + "f068dfe95d15cd3a7f98ffa688b4346842be2690": { + "balance": "0x440ad819e0974c0000" + }, + "f06a854a3c5dc36d1c49f4c87d6db333b57e4add": { + "balance": "0x21e19e0c9bab2400000" + }, + "f079e1b1265f50e8c8a98ec0c7815eb3aeac9eb4": { + "balance": "0x116dc3a8994b30000" + }, + "f07bd0e5c2ce69c7c4a724bd26bbfa9d2a17ca03": { + "balance": "0x14061b9d77a5e980000" + }, + "f0832a6bb25503eeca435be31b0bf905ca1fcf57": { + "balance": "0x16a6502f15a1e540000" + }, + "f09b3e87f913ddfd57ae8049c731dba9b636dfc3": { + "balance": "0x20f5b1eaad8d800000" + }, + "f0b1340b996f6f0bf0d9561c849caf7f4430befa": { + "balance": "0x56bc75e2d63100000" + }, + "f0b1f9e27832c6de6914d70afc238c749995ace4": { + "balance": "0x6c6b935b8bbd400000" + }, + "f0b469eae89d400ce7d5d66a9695037036b88903": { + "balance": "0x43c33c1937564800000" + }, + "f0b9d683cea12ba600baace219b0b3c97e8c00e4": { + "balance": "0x56bc75e2d63100000" + }, + "f0be0faf4d7923fc444622d1980cf2d990aab307": { + "balance": "0x6c6b935b8bbd400000" + }, + "f0c081da52a9ae36642adf5e08205f05c54168a6": { + "balance": "0x6046f37e5945c0000" + }, + "f0c70d0d6dab7663aa9ed9ceea567ee2c6b02765": { + "balance": "0x71438ac5a791a08000" + }, + "f0cbef84e169630098d4e301b20208ef05846ac9": { + "balance": "0xe0b8345506b4e0000" + }, + "f0d21663d8b0176e05fde1b90ef31f8530fda95f": { + "balance": "0x6c6acc67d7b1d40000" + }, + "f0d5c31ccb6cbe30c7c9ea19f268d159851f8c9c": { + "balance": "0x3894f0e6f9b9f700000" + }, + "f0d64cf9df09741133d170485fd24b005011d520": { + "balance": "0x1b089341e14fcc0000" + }, + "f0d858105e1b648101ac3f85a0f8222bf4f81d6a": { + "balance": "0x2086ac351052600000" + }, + "f0dc43f205619127507b2b1c1cfdf32d28310920": { + "balance": "0x105eb79b9417088000" + }, + "f0e1dfa42adeac2f17f6fdf584c94862fd563393": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "f0e2649c7e6a3f2c5dfe33bbfbd927ca3c350a58": { + "balance": "0x6c6b935b8bbd400000" + }, + "f0e7fb9e420a5340d536f40408344feaefc06aef": { + "balance": "0x3635c9adc5dea00000" + }, + "f10462e58fcc07f39584a187639451167e859201": { + "balance": "0x934dd5d33bc970000" + }, + "f10661ff94140f203e7a482572437938bec9c3f7": { + "balance": "0x43c33c1937564800000" + }, + "f114ff0d0f24eff896edde5471dea484824a99b3": { + "balance": "0xbe202d6a0eda0000" + }, + "f116b0b4680f53ab72c968ba802e10aa1be11dc8": { + "balance": "0x1158e460913d00000" + }, + "f11cf5d363746fee6864d3ca336dd80679bb87ae": { + "balance": "0x878678326eac9000000" + }, + "f11e01c7a9d12499005f4dae7716095a34176277": { + "balance": "0x15af1d78b58c400000" + }, + "f13b083093ba564e2dc631568cf7540d9a0ec719": { + "balance": "0x6c6acc67d7b1d40000" + }, + "f14f0eb86db0eb68753f16918e5d4b807437bd3e": { + "balance": "0xad78ebc5ac6200000" + }, + "f15178ffc43aa8070ece327e930f809ab1a54f9d": { + "balance": "0xab640391201300000" + }, + "f156dc0b2a981e5b55d3f2f03b8134e331dbadb7": { + "balance": "0x56bc75e2d63100000" + }, + "f15d9d5a21b1929e790371a17f16d95f0c69655c": { + "balance": "0x6c6b935b8bbd400000" + }, + "f15e182c4fbbad79bd93342242d4dccf2be58925": { + "balance": "0x692ae8897081d00000" + }, + "f1624d980b65336feac5a6d54125005cfcf2aacb": { + "balance": "0x6c6b935b8bbd400000" + }, + "f167f5868dcf4233a7830609682caf2df4b1b807": { + "balance": "0x81e542e1a7383f0000" + }, + "f16de1891d8196461395f9b136265b3b9546f6ef": { + "balance": "0x1b28e1f98bbce8000" + }, + "f17a92e0361dbacecdc5de0d1894955af6a9b606": { + "balance": "0x6c6b935b8bbd400000" + }, + "f17adb740f45cbbde3094e7e13716f8103f563bd": { + "balance": "0x6c6b935b8bbd400000" + }, + "f18b14cbf6694336d0fe12ac1f25df2da0c05dbb": { + "balance": "0xd8d4602c26bf6c0000" + }, + "f19b39389d47b11b8a2c3f1da9124decffbefaf7": { + "balance": "0x6c6b935b8bbd400000" + }, + "f19f193508393e4d2a127b20b2031f39c82581c6": { + "balance": "0xbdbd7a83bd2f6c0000" + }, + "f1a1f320407964fd3c8f2e2cc8a4580da94f01ea": { + "balance": "0x6c6c2177557c440000" + }, + "f1b4ecc63525f7432c3d834ffe2b970fbeb87212": { + "balance": "0xa2a24068facd800000" + }, + "f1b58faffa8794f50af8e88309c7a6265455d51a": { + "balance": "0x36330322d5238c0000" + }, + "f1c8c4a941b4628c0d6c30fda56452d99c7e1b64": { + "balance": "0x4e8cea1ede75040000" + }, + "f1da40736f99d5df3b068a5d745fafc6463fc9b1": { + "balance": "0x696ca23058da10000" + }, + "f1dc8ac81042c67a9c3c6792b230c46ac016ca10": { + "balance": "0xad78ebc5ac6200000" + }, + "f1df55dcc34a051012b575cb968bc9c458ea09c9": { + "balance": "0xd8d726b7177a800000" + }, + "f1e980c559a1a8e5e50a47f8fffdc773b7e06a54": { + "balance": "0x65ffbcdea04b7480000" + }, + "f1f391ca92808817b755a8b8f4e2ca08d1fd1108": { + "balance": "0x14542ba12a337c00000" + }, + "f1f766b0e46d73fcd4d52e7a72e1b9190cc632b3": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "f2049532fd458a83ca1bff2eebacb6d5ca63f4a4": { + "balance": "0xc48c991dc1545c8000" + }, + "f206d328e471d0117b246d2a4619827709e96df3": { + "balance": "0xa2af3dc00543440000" + }, + "f20c9a99b74759d782f25c1ceca802a27e0b436c": { + "balance": "0x5a87e7d7f5f6580000" + }, + "f2127d54188fedef0f338a5f38c7ff73ad9f6f42": { + "balance": "0x43c33c1937564800000" + }, + "f2133431d1d9a37ba2f0762bc40c5acc8aa6978e": { + "balance": "0x6c6b935b8bbd400000" + }, + "f21549bdd1487912f900a7523db5f7626121bba3": { + "balance": "0x21e19e0c9bab2400000" + }, + "f218bd848ee7f9d38bfdd1c4eb2ed2496ae4305f": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "f224eb900b37b4490eee6a0b6420d85c947d8733": { + "balance": "0x34957444b840e80000" + }, + "f2294adbb6f0dcc76e632ebef48ab49f124dbba4": { + "balance": "0x4e43393600a7b10000" + }, + "f22f4078febbbaa8b0e78e642c8a42f35d433905": { + "balance": "0x6c6acc67d7b1d40000" + }, + "f237ef05261c34d79cc22b860de0f17f793c3860": { + "balance": "0xad78ebc5ac6200000" + }, + "f23c7b0cb8cd59b82bd890644a57daf40c85e278": { + "balance": "0x2b66aafe326ff0000" + }, + "f23d01589eb12d439f7448ff54307529f191858d": { + "balance": "0x6c6b935b8bbd400000" + }, + "f23e5c633221a8f7363e65870c9f287424d2a960": { + "balance": "0x4acf58e07257100000" + }, + "f242da845d42d4bf779a00f295b40750fe49ea13": { + "balance": "0x3635c9adc5dea00000" + }, + "f25259a5c939cd25966c9b6303d3731c53ddbc4c": { + "balance": "0xad78ebc5ac6200000" + }, + "f25e4c70bc465632c89e5625a832a7722f6bffab": { + "balance": "0xf34b82fd8e91200000" + }, + "f26bcedce3feadcea3bc3e96eb1040dfd8ffe1a0": { + "balance": "0x2a034919dfbfbc0000" + }, + "f270792576f05d514493ffd1f5e84bec4b2df810": { + "balance": "0x3635c9adc5dea00000" + }, + "f2732cf2c13b8bb8e7492a988f5f89e38273ddc8": { + "balance": "0x2086ac351052600000" + }, + "f2742e6859c569d5f2108351e0bf4dca352a48a8": { + "balance": "0x21e19e0c9bab2400000" + }, + "f2813a64c5265d020235cb9c319b6c96f906c41e": { + "balance": "0x12f939c99edab80000" + }, + "f287ff52f461117adb3e1daa71932d1493c65f2e": { + "balance": "0xc55325ca7415e00000" + }, + "f2ab1161750244d0ecd048ee0d3e51abb143a2fd": { + "balance": "0x42fe2b907373bc0000" + }, + "f2b4ab2c9427a9015ef6eefff5edb60139b719d1": { + "balance": "0x26db992a3b18000000" + }, + "f2c03e2a38998c21648760f1e5ae7ea3077d8522": { + "balance": "0x8f3f7193ab079c0000" + }, + "f2c2904e9fa664a11ee25656d8fd2cc0d9a522a0": { + "balance": "0xb98bc829a6f90000" + }, + "f2c362b0ef991bc82fb36e66ff75932ae8dd8225": { + "balance": "0x402f4cfee62e80000" + }, + "f2d0e986d814ea13c8f466a0538c53dc922651f0": { + "balance": "0x4acf58e07257100000" + }, + "f2d1b7357724ec4c03185b879b63f57e26589153": { + "balance": "0x14542ba12a337c00000" + }, + "f2d5763ce073127e2cedde6faba786c73ca94141": { + "balance": "0x1ac4286100191f00000" + }, + "f2d59c8923759073d6f415aaf8eb065ff2f3b685": { + "balance": "0x1ab2cf7c9f87e200000" + }, + "f2e99f5cbb836b7ad36247571a302cbe4b481c69": { + "balance": "0x6acb3df27e1f880000" + }, + "f2ed3e77254acb83231dc0860e1a11242ba627db": { + "balance": "0x6b56051582a9700000" + }, + "f2edde37f9a8c39ddea24d79f4015757d06bf786": { + "balance": "0x152d02c7e14af6800000" + }, + "f2efe96560c9d97b72bd36447843885c1d90c231": { + "balance": "0x6c6b935b8bbd400000" + }, + "f2fbb6d887f8b8cc3a869aba847f3d1f643c53d6": { + "balance": "0xd8c9460063d31c0000" + }, + "f3034367f87d24d3077fa9a2e38a8b0ccb1104ef": { + "balance": "0x3635c9adc5dea00000" + }, + "f303d5a816affd97e83d9e4dac2f79072bb0098f": { + "balance": "0x340aad21b3b7000000" + }, + "f3159866c2bc86bba40f9d73bb99f1eee57bb9d7": { + "balance": "0x3635c9adc5dea00000" + }, + "f316ef1df2ff4d6c1808dba663ec8093697968e0": { + "balance": "0x61464d6cdc80f00000" + }, + "f32d25eb0ea2b8b3028a4c7a155dc1aae865784d": { + "balance": "0x13593a9297fdad60000" + }, + "f332c0f3e05a27d9126fd0b641a8c2d4060608fd": { + "balance": "0x10f1b62c4d9644e8000" + }, + "f338459f32a159b23db30ac335769ab2351aa63c": { + "balance": "0x65a4da25d3016c00000" + }, + "f33efc6397aa65fb53a8f07a0f893aae30e8bcee": { + "balance": "0x7cf2381f619f150000" + }, + "f34083ecea385017aa40bdd35ef7effb4ce7762d": { + "balance": "0x15af1d78b58c400000" + }, + "f346d7de92741c08fc58a64db55b062dde012d14": { + "balance": "0xfff6b1f761e6d0000" + }, + "f355d3ec0cfb907d8dbb1bf3464e458128190bac": { + "balance": "0x10b046e7f0d80100000" + }, + "f36df02fbd89607347afce2969b9c4236a58a506": { + "balance": "0x6c6b935b8bbd400000" + }, + "f373e9daac0c8675f53b797a160f6fc034ae6b23": { + "balance": "0x56bc75e2d63100000" + }, + "f37b426547a1642d8033324814f0ede3114fc212": { + "balance": "0x15be6174e1912e0000" + }, + "f37bf78c5875154711cb640d37ea6d28cfcb1259": { + "balance": "0xad78ebc5ac6200000" + }, + "f382df583155d8548f3f93440cd5f68cb79d6026": { + "balance": "0x38757d027fc1fd5c0000" + }, + "f382e4c20410b951089e19ba96a2fee3d91cce7e": { + "balance": "0x111fa56eec2a8380000" + }, + "f38a6ca80168537e974d14e1c3d13990a44c2c1b": { + "balance": "0x14542ba12a337c00000" + }, + "f39a9d7aa3581df07ee4279ae6c312ef21033658": { + "balance": "0xd8d726b7177a800000" + }, + "f3b668b3f14d920ebc379092db98031b67b219b3": { + "balance": "0xad6eedd17cf3b8000" + }, + "f3be99b9103ce7550aa74ff1db18e09dfe32e005": { + "balance": "0x6c6b935b8bbd400000" + }, + "f3c1abd29dc57b41dc192d0e384d021df0b4f6d4": { + "balance": "0x97ae0cdf8f86f80000" + }, + "f3c4716d1ee5279a86d0163a14618181e16136c7": { + "balance": "0x3635c9adc5dea00000" + }, + "f3cc8bcb559465f81bfe583bd7ab0a2306453b9e": { + "balance": "0x43c33c1937564800000" + }, + "f3d688f06bbdbf50f9932c4145cbe48ecdf68904": { + "balance": "0x1158e460913d00000" + }, + "f3dbcf135acb9dee1a489c593c024f03c2bbaece": { + "balance": "0x6c6b935b8bbd400000" + }, + "f3de5f26ef6aded6f06d3b911346ee70401da4a0": { + "balance": "0x133ab37d9f9d030000" + }, + "f3df63a97199933330383b3ed7570b96c4812334": { + "balance": "0x6c6b935b8bbd400000" + }, + "f3e74f470c7d3a3f0033780f76a89f3ef691e6cb": { + "balance": "0xa3cfe631d143640000" + }, + "f3eb1948b951e22df1617829bf3b8d8680ec6b68": { + "balance": "0xd8d726b7177a800000" + }, + "f3f1fa3918ca34e2cf7e84670b1f4d8eca160db3": { + "balance": "0x24dce54d34a1a00000" + }, + "f3f24fc29e20403fc0e8f5ebbb553426f78270a2": { + "balance": "0x56bc75e2d63100000" + }, + "f3fa723552a5d0512e2b62f48dca7b2b8105305b": { + "balance": "0x76d41c62494840000" + }, + "f3fe51fde34413c73318b9c85437fe7e820f561a": { + "balance": "0x3662325cd18fe00000" + }, + "f400f93d5f5c7e3fc303129ac8fb0c2f786407fa": { + "balance": "0x6c6b935b8bbd400000" + }, + "f40b134fea22c6b29c8457f49f000f9cda789adb": { + "balance": "0x2086ac351052600000" + }, + "f41557dfdfb1a1bdcefefe2eba1e21fe0a4a9942": { + "balance": "0x6acb3df27e1f880000" + }, + "f4177a0d85d48b0e264211ce2aa2efd3f1b47f08": { + "balance": "0xc2ccca26b7e80e8000" + }, + "f42f905231c770f0a406f2b768877fb49eee0f21": { + "balance": "0xaadec983fcff40000" + }, + "f432b9dbaf11bdbd73b6519fc0a904198771aac6": { + "balance": "0x83d6c7aab63600000" + }, + "f43da3a4e3f5fab104ca9bc1a0f7f3bb4a56f351": { + "balance": "0x6c6acc67d7b1d40000" + }, + "f447108b98df64b57e871033885c1ad71db1a3f9": { + "balance": "0x176f49ead3483508000" + }, + "f44f8551ace933720712c5c491cdb6f2f951736c": { + "balance": "0xd8d726b7177a800000" + }, + "f456055a11ab91ff668e2ec922961f2a23e3db25": { + "balance": "0xfc936392801c0000" + }, + "f456a75bb99655a7412ce97da081816dfdb2b1f2": { + "balance": "0xad78ebc5ac6200000" + }, + "f45b1dcb2e41dc27ffa024daadf619c11175c087": { + "balance": "0x11164759ffb320000" + }, + "f463a90cb3f13e1f0643423636beab84c123b06d": { + "balance": "0x22b1c8c1227a00000" + }, + "f468906e7edf664ab0d8be3d83eb7ab3f7ffdc78": { + "balance": "0x5c283d410394100000" + }, + "f46980e3a4a9d29a6a6e90604537a3114bcb2897": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "f46b6b9c7cb552829c1d3dfd8ffb11aabae782f6": { + "balance": "0x1236efcbcbb340000" + }, + "f476e1267f86247cc908816f2e7ad5388c952db0": { + "balance": "0xd8d726b7177a800000" + }, + "f476f2cb7208a32e051fd94ea8662992638287a2": { + "balance": "0x56bc75e2d63100000" + }, + "f47bb134da30a812d003af8dccb888f44bbf5724": { + "balance": "0x11959b7fe3395580000" + }, + "f483f607a21fcc28100a018c568ffbe140380410": { + "balance": "0x3635c9adc5dea00000" + }, + "f48e1f13f6af4d84b371d7de4b273d03a263278e": { + "balance": "0x2086ac351052600000" + }, + "f49c47b3efd86b6e6a5bc9418d1f9fec814b69ef": { + "balance": "0x43c33c1937564800000" + }, + "f49f6f9baabc018c8f8e119e0115f491fc92a8a4": { + "balance": "0x21e19e0c9bab2400000" + }, + "f4a367b166d2991a2bfda9f56463a09f252c1b1d": { + "balance": "0x6acb3df27e1f880000" + }, + "f4a51fce4a1d5b94b0718389ba4e7814139ca738": { + "balance": "0x1043561a8829300000" + }, + "f4a9d00cefa97b7a58ef9417fc6267a5069039ee": { + "balance": "0x12e89287fa7840000" + }, + "f4aaa3a6163e3706577b49c0767e948a681e16ee": { + "balance": "0x6c6b935b8bbd400000" + }, + "f4b1626e24f30bcad9273c527fcc714b5d007b8f": { + "balance": "0xad78ebc5ac6200000" + }, + "f4b49100757772f33c177b9a76ba95226c8f3dd8": { + "balance": "0x16b352da5e0ed300000" + }, + "f4b6cdcfcb24230b337d770df6034dfbd4e1503f": { + "balance": "0x405fdf7e5af85e00000" + }, + "f4b759cc8a1c75f80849ebbcda878dc8f0d66de4": { + "balance": "0x15af1d78b58c400000" + }, + "f4ba6a46d55140c439cbcf076cc657136262f4f8": { + "balance": "0x6c6b935b8bbd400000" + }, + "f4d67a9044b435b66e8977ff39a28dc4bd53729a": { + "balance": "0xad78ebc5ac6200000" + }, + "f4d97664cc4eec9edbe7fa09f4750a663b507d79": { + "balance": "0xd8d726b7177a800000" + }, + "f4dc7ba85480bbb3f535c09568aaa3af6f3721c6": { + "balance": "0x1871fb6307e35e50000" + }, + "f4ebf50bc7e54f82e9b9bd24baef29438e259ce6": { + "balance": "0x21e19e0c9bab2400000" + }, + "f4ec8e97a20aa5f8dd206f55207e06b813df2cc0": { + "balance": "0xad78ebc5ac6200000" + }, + "f4ed848ec961739c2c7e352f435ba70a7cd5db38": { + "balance": "0x6acb3df27e1f880000" + }, + "f4fc4d39bc0c2c4068a36de50e4ab4d4db7e340a": { + "balance": "0x16037df87ef6a0000" + }, + "f504943aaf16796e0b341bbcdf21d11cc586cdd1": { + "balance": "0x1e7e4171bf4d3a00000" + }, + "f5061ee2e5ee26b815503677130e1de07a52db07": { + "balance": "0x56bc75e2d63100000" + }, + "f509557e90183fbf0f0651a786487bcc428ba175": { + "balance": "0xa844a7424d9c80000" + }, + "f50abbd4aa45d3eb88515465a8ba0b310fd9b521": { + "balance": "0x16a6502f15a1e540000" + }, + "f50ae7fab4cfb5a646ee04ceadf9bf9dd5a8e540": { + "balance": "0xd8d67c2f5895480000" + }, + "f50cbafd397edd556c0678988cb2af5c2617e0a2": { + "balance": "0x26d07efe782bb00000" + }, + "f51fded80acb502890e87369741f3722514cefff": { + "balance": "0x43c3456ca3c6d110000" + }, + "f52a5882e8927d944b359b26366ba2b9cacfbae8": { + "balance": "0x54b41ce2fe63ba80000" + }, + "f52c0a7877345fe0c233bb0f04fd6ab18b6f14ba": { + "balance": "0x54cbe55989f38de00000" + }, + "f5437e158090b2a2d68f82b54a5864b95dd6dbea": { + "balance": "0xd96c16703b2bfe0000" + }, + "f54c19d9ef3873bfd1f7a622d02d86249a328f06": { + "balance": "0x960ae127af32fb28000" + }, + "f5500178cb998f126417831a08c2d7abfff6ab5f": { + "balance": "0x46f4f4a5875a9f8000" + }, + "f5534815dc635efa5cc84b2ac734723e21b29372": { + "balance": "0x55a6e79ccd1d300000" + }, + "f555a27bb1e2fd4e2cc784caee92939fc06e2fc9": { + "balance": "0x6c6b935b8bbd400000" + }, + "f558a2b2dd26dd9593aae04531fd3c3cc3854b67": { + "balance": "0xabbcd4ef377580000" + }, + "f56048dd2181d4a36f64fcecc6215481e42abc15": { + "balance": "0xad78ebc5ac6200000" + }, + "f56442f60e21691395d0bffaa9194dcaff12e2b7": { + "balance": "0xe18398e7601900000" + }, + "f579714a45eb8f52c3d57bbdefd2c15b2e2f11df": { + "balance": "0x54915956c409600000" + }, + "f593c65285ee6bbd6637f3be8f89ad40d489f655": { + "balance": "0xa2a15d09519be00000" + }, + "f598db2e09a8a5ee7d720d2b5c43bb126d11ecc2": { + "balance": "0xad78ebc5ac6200000" + }, + "f59dab1bf8df11327e61f9b7a14b563a96ec3554": { + "balance": "0x14542ba12a337c00000" + }, + "f59f9f02bbc98efe097eabb78210979021898bfd": { + "balance": "0x21e171a3ec9f72c0000" + }, + "f5a5459fcdd5e5b273830df88eea4cb77ddadfb9": { + "balance": "0x409e52b48369a0000" + }, + "f5a7676ad148ae9c1ef8b6f5e5a0c2c473be850b": { + "balance": "0xad78ebc5ac6200000" + }, + "f5b068989df29c253577d0405ade6e0e7528f89e": { + "balance": "0x57473d05dabae80000" + }, + "f5b6e9061a4eb096160777e26762cf48bdd8b55d": { + "balance": "0xdc55fdb17647b0000" + }, + "f5cffbba624e7eb321bc83c60ca68199b4e36671": { + "balance": "0x6c6b935b8bbd400000" + }, + "f5d14552b1dce0d6dc1f320da6ffc8a331cd6f0c": { + "balance": "0x487a9a304539440000" + }, + "f5d61ac4ca95475e5b7bffd5f2f690b316759615": { + "balance": "0x692ae8897081d000000" + }, + "f5d9cf00d658dd45517a48a9d3f5f633541a533d": { + "balance": "0x64f5fdf494f780000" + }, + "f5eadcd2d1b8657a121f33c458a8b13e76b65526": { + "balance": "0xd8b0f5a5ac24a0000" + }, + "f607c2150d3e1b99f24fa1c7d540add35c4ebe1e": { + "balance": "0xa7f1aa07fc8faa0000" + }, + "f60bd735543e6bfd2ea6f11bff627340bc035a23": { + "balance": "0x6c6b935b8bbd400000" + }, + "f60c1b45f164b9580e20275a5c39e1d71e35f891": { + "balance": "0x6c6b935b8bbd400000" + }, + "f60f62d73937953fef35169e11d872d2ea317eec": { + "balance": "0x121ea68c114e5100000" + }, + "f61283b4bd8504058ca360e993999b62cbc8cd67": { + "balance": "0xdd2d5fcf3bc9c0000" + }, + "f617b967b9bd485f7695d2ef51fb7792d898f500": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "f618d9b104411480a863e623fc55232d1a4f48aa": { + "balance": "0xe689e6d44b1668000" + }, + "f622e584a6623eaaf99f2be49e5380c5cbcf5cd8": { + "balance": "0xad78ebc5ac6200000" + }, + "f632adff490da4b72d1236d04b510f74d2faa3cd": { + "balance": "0x4be4e7267b6ae00000" + }, + "f639ac31da9f67271bd10402b7654e5ce763bd47": { + "balance": "0x15af0f42baf9260000" + }, + "f63a579bc3eac2a9490410128dbcebe6d9de8243": { + "balance": "0x50c5e761a444080000" + }, + "f645dd7c890093e8e4c8aa92a6bb353522d3dc98": { + "balance": "0x7439fa2099e580000" + }, + "f648ea89c27525710172944e79edff847803b775": { + "balance": "0x152d02c7e14af6800000" + }, + "f64a4ac8d540a9289c68d960d5fb7cc45a77831c": { + "balance": "0x6c6b935b8bbd400000" + }, + "f64ecf2117931c6d535a311e4ffeaef9d49405b8": { + "balance": "0x90f534608a72880000" + }, + "f64fe0939a8d1eea2a0ecd9a9730fd7958e33109": { + "balance": "0x11de1e6db450c0000" + }, + "f65616be9c8b797e7415227c9138faa0891742d7": { + "balance": "0x2ad373ce668e980000" + }, + "f657fcbe682eb4e8db152ecf892456000b513d15": { + "balance": "0x692ae8897081d00000" + }, + "f65819ac4cc14c137f05dd7977c7dae08d1a4ab5": { + "balance": "0x58788cb94b1d80000" + }, + "f67bb8e2118bbcd59027666eedf6943ec9f880a5": { + "balance": "0xd8d726b7177a800000" + }, + "f68464bf64f2411356e4d3250efefe5c50a5f65b": { + "balance": "0x1158e460913d00000" + }, + "f686785b89720b61145fea80978d6acc8e0bc196": { + "balance": "0xd8d726b7177a800000" + }, + "f68c5e33fa97139df5b2e63886ce34ebf3e4979c": { + "balance": "0xb3fa4169e2d8e00000" + }, + "f6a8635757c5e8c134d20d028cf778cf8609e46a": { + "balance": "0x4f1d772faec17c0000" + }, + "f6b782f4dcd745a6c0e2e030600e04a24b25e542": { + "balance": "0x15af1d78b58c400000" + }, + "f6bc37b1d2a3788d589b6de212dc1713b2f6e78e": { + "balance": "0x10f0cf064dd59200000" + }, + "f6c3c48a1ac0a34799f04db86ec7a975fe7768f3": { + "balance": "0x6acb3df27e1f880000" + }, + "f6d25d3f3d846d239f525fa8cac97bc43578dbac": { + "balance": "0x30927f74c9de000000" + }, + "f6eaac7032d492ef17fd6095afc11d634f56b382": { + "balance": "0x1b1b6bd7af64c70000" + }, + "f6ead67dbf5b7eb13358e10f36189d53e643cfcf": { + "balance": "0x878678326eac9000000" + }, + "f6f1a44309051c6b25e47dff909b179bb9ab591c": { + "balance": "0x692ae8897081d00000" + }, + "f70328ef97625fe745faa49ee0f9d4aa3b0dfb69": { + "balance": "0x3635c9adc5dea00000" + }, + "f70a998a717b338d1dd99854409b1a338deea4b0": { + "balance": "0x6c6b935b8bbd400000" + }, + "f70d637a845c06db6cdc91e6371ce7c4388a628e": { + "balance": "0x1158e460913d00000" + }, + "f7155213449892744bc60f2e04400788bd041fdd": { + "balance": "0x39fbae8d042dd0000" + }, + "f71b4534f286e43093b1e15efea749e7597b8b57": { + "balance": "0x161c13d3341c87280000" + }, + "f734ec03724ddee5bb5279aa1afcf61b0cb448a1": { + "balance": "0xe5bf2cc9b097800000" + }, + "f736dc96760012388fe88b66c06efe57e0d7cf0a": { + "balance": "0x71d75ab9b920500000" + }, + "f73ac46c203be1538111b151ec8220c786d84144": { + "balance": "0xff7377817b82b8000" + }, + "f73dd9c142b71bce11d06e30e7e7d032f2ec9c9e": { + "balance": "0x6acb3df27e1f880000" + }, + "f7418aa0e713d248228776b2e7434222ae75e3a5": { + "balance": "0x6c6b935b8bbd400000" + }, + "f74e6e145382b4db821fe0f2d98388f45609c69f": { + "balance": "0x56bc75e2d63100000" + }, + "f7500c166f8bea2f82347606e5024be9e4f4ce99": { + "balance": "0x1158e460913d00000" + }, + "f757fc8720d3c4fa5277075e60bd5c411aebd977": { + "balance": "0x6c6b935b8bbd400000" + }, + "f75bb39c799779ebc04a336d260da63146ed98d0": { + "balance": "0x15af1d78b58c40000" + }, + "f768f321fd6433d96b4f354d3cc1652c1732f57f": { + "balance": "0x21e19e0c9bab2400000" + }, + "f76f69cee4faa0a63b30ae1e7881f4f715657010": { + "balance": "0xad78ebc5ac6200000" + }, + "f777361a3dd8ab62e5f1b9b047568cc0b555704c": { + "balance": "0x3635c9adc5dea00000" + }, + "f77c7b845149efba19e261bc7c75157908afa990": { + "balance": "0x6c6b935b8bbd400000" + }, + "f77f9587ff7a2d7295f1f571c886bd33926a527c": { + "balance": "0x6c68ccd09b022c0000" + }, + "f78258c12481bcdddbb72a8ca0c043097261c6c5": { + "balance": "0x1158e460913d00000" + }, + "f798d16da4e460c460cd485fae0fa0599708eb82": { + "balance": "0x3635c9adc5dea00000" + }, + "f7a1ade2d0f529123d1055f19b17919f56214e67": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "f7acff934b84da0969dc37a8fcf643b7d7fbed41": { + "balance": "0x6c6acc67d7b1d40000" + }, + "f7b151cc5e571c17c76539dbe9964cbb6fe5de79": { + "balance": "0x74717cfb6883100000" + }, + "f7b29b82195c882dab7897c2ae95e77710f57875": { + "balance": "0x7735416132dbfc0000" + }, + "f7bc4c44910d5aedd66ed2355538a6b193c361ec": { + "balance": "0x541de2c2d8d620000" + }, + "f7c00cdb1f020310d5acab7b496aaa44b779085e": { + "balance": "0x5a87e7d7f5f6580000" + }, + "f7c1b443968b117b5dd9b755572fcd39ca5ec04b": { + "balance": "0x18b968c292f1b50000" + }, + "f7c50f922ad16b61c6d1baa045ed816815bac48f": { + "balance": "0x2a9396a9784ad7d0000" + }, + "f7c708015071d4fb0a3a2a09a45d156396e3349e": { + "balance": "0xa2a15d09519be00000" + }, + "f7cbdba6be6cfe68dbc23c2b0ff530ee05226f84": { + "balance": "0x1158e460913d00000" + }, + "f7d0d310acea18406138baaabbfe0571e80de85f": { + "balance": "0x487a9a304539440000" + }, + "f7d7af204c56f31fd94398e40df1964bd8bf123c": { + "balance": "0x821d221b5291f8000" + }, + "f7dc251196fbcbb77c947d7c1946b0ff65021cea": { + "balance": "0x3635c9adc5dea00000" + }, + "f7e45a12aa711c709acefe95f33b78612d2ad22a": { + "balance": "0xe0655e2f26bc9180000" + }, + "f7f4898c4c526d955f21f055cb6e47b915e51964": { + "balance": "0x7c0860e5a80dc00000" + }, + "f7f91e7acb5b8129a306877ce3168e6f438b66a1": { + "balance": "0x98a7d9b8314c00000" + }, + "f7fc45abf76f5088e2e5b5a8d132f28a4d4ec1c0": { + "balance": "0x6c6b935b8bbd400000" + }, + "f8063af4cc1dd9619ab5d8bff3fcd1faa8488221": { + "balance": "0x6c6b935b8bbd400000" + }, + "f8086e42661ea929d2dda1ab6c748ce3055d111e": { + "balance": "0x3635c9adc5dea00000" + }, + "f8087786b42da04ed6d1e0fe26f6c0eefe1e9f5a": { + "balance": "0x21e19e0c9bab2400000" + }, + "f80d3619702fa5838c48391859a839fb9ce7160f": { + "balance": "0x6c07a7d1b16e700000" + }, + "f814799f6ddf4dcb29c7ee870e75f9cc2d35326d": { + "balance": "0x3635c9adc5dea00000" + }, + "f815c10a032d13c34b8976fa6e3bd2c9131a8ba9": { + "balance": "0x487a9a304539440000" + }, + "f81622e55757daea6675975dd93538da7d16991e": { + "balance": "0x6c6b935b8bbd400000" + }, + "f824ee331e4ac3cc587693395b57ecf625a6c0c2": { + "balance": "0x56c95de8e8ca1d0000" + }, + "f827d56ed2d32720d4abf103d6d0ef4d3bcd559b": { + "balance": "0x16c80065791a28000" + }, + "f8298591523e50b103f0b701d623cbf0f74556f6": { + "balance": "0xad78ebc5ac6200000" + }, + "f848fce9ab611c7d99206e23fac69ad488b94fe1": { + "balance": "0x2a1129d0936720000" + }, + "f84f090adf3f8db7e194b350fbb77500699f66fd": { + "balance": "0x6acb3df27e1f880000" + }, + "f851b010f633c40af1a8f06a73ebbaab65077ab5": { + "balance": "0xee86442fcd06c00000" + }, + "f858171a04d357a13b4941c16e7e55ddd4941329": { + "balance": "0x246a5218f2a000000" + }, + "f85bab1cb3710fc05fa19ffac22e67521a0ba21d": { + "balance": "0x6c95357fa6b36c0000" + }, + "f86a3ea8071f7095c7db8a05ae507a8929dbb876": { + "balance": "0x1236efcbcbb3400000" + }, + "f8704c16d2fd5ba3a2c01d0eb20484e6ecfa3109": { + "balance": "0xad78ebc5ac6200000" + }, + "f870995fe1e522321d754337a45c0c9d7b38951c": { + "balance": "0x1158e460913d00000" + }, + "f873e57a65c93b6e18cb75f0dc077d5b8933dc5c": { + "balance": "0xaadec983fcff40000" + }, + "f875619d8a23e45d8998d184d480c0748970822a": { + "balance": "0xd8d726b7177a800000" + }, + "f87bb07b289df7301e54c0efda6a2cf291e89200": { + "balance": "0x4be4e7267b6ae00000" + }, + "f88900db737955b1519b1a7d170a18864ce590eb": { + "balance": "0xfc936392801c0000" + }, + "f88b58db37420b464c0be88b45ee2b95290f8cfa": { + "balance": "0x22b1c8c1227a00000" + }, + "f8962b75db5d24c7e8b7cef1068c3e67cebb30a5": { + "balance": "0xf2dc7d47f15600000" + }, + "f8a065f287d91d77cd626af38ffa220d9b552a2b": { + "balance": "0x678a932062e4180000" + }, + "f8a49ca2390c1f6d5c0e62513b079571743f7cc6": { + "balance": "0xa2a15d09519be00000" + }, + "f8a50cee2e688ceee3aca4d4a29725d4072cc483": { + "balance": "0x6c6b935b8bbd400000" + }, + "f8ac4a39b53c11307820973b441365cffe596f66": { + "balance": "0x6c6b935b8bbd400000" + }, + "f8ae857b67a4a2893a3fbe7c7a87ff1c01c6a6e7": { + "balance": "0xd8d726b7177a800000" + }, + "f8bf9c04874e5a77f38f4c38527e80c676f7b887": { + "balance": "0x6c6b935b8bbd400000" + }, + "f8c7f34a38b31801da43063477b12b27d0f203ff": { + "balance": "0x1ad2baba6fef480000" + }, + "f8ca336c8e91bd20e314c20b2dd4608b9c8b9459": { + "balance": "0x2ddc9bc5b32c780000" + }, + "f8d17424c767bea31205739a2b57a7277214eebe": { + "balance": "0x246ddf97976680000" + }, + "f8d52dcc5f96cc28007b3ecbb409f7e22a646caa": { + "balance": "0x81690e18128480000" + }, + "f8dce867f0a39c5bef9eeba609229efa02678b6c": { + "balance": "0x6c6b935b8bbd400000" + }, + "f8f226142a428434ab17a1864a2597f64aab2f06": { + "balance": "0x9598b2fb2e9f28000" + }, + "f8f6645e0dee644b3dad81d571ef9baf840021ad": { + "balance": "0x6c6b935b8bbd400000" + }, + "f901c00fc1db88b69c4bc3252b5ca70ea6ee5cf6": { + "balance": "0x15af1d78b58c400000" + }, + "f93d5bcb0644b0cce5fcdda343f5168ffab2877d": { + "balance": "0xb6207b67d26f90000" + }, + "f9570e924c95debb7061369792cf2efec2a82d5e": { + "balance": "0x1158e460913d00000" + }, + "f9642086b1fbae61a6804dbe5fb15ec2d2b537f4": { + "balance": "0x6c6b935b8bbd400000" + }, + "f96488698590dc3b2c555642b871348dfa067ad5": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "f964d98d281730ba35b2e3a314796e7b42fedf67": { + "balance": "0x53b0876098d80c0000" + }, + "f9650d6989f199ab1cc479636ded30f241021f65": { + "balance": "0x2e141ea081ca080000" + }, + "f96883582459908c827627e86f28e646f9c7fc7a": { + "balance": "0x1c4a78737cdcfb80000" + }, + "f96b4c00766f53736a8574f822e6474c2f21da2d": { + "balance": "0x15af1d78b58c400000" + }, + "f9729d48282c9e87166d5eef2d01eda9dbf78821": { + "balance": "0x56b83ddc728548000" + }, + "f9767e4ecb4a5980527508d7bec3d45e4c649c13": { + "balance": "0x678a932062e4180000" + }, + "f978b025b64233555cc3c19ada7f4199c9348bf7": { + "balance": "0x54b40b1f852bda000000" + }, + "f97b56ebd5b77abc9fbacbabd494b9d2c221cd03": { + "balance": "0x6acb3df27e1f880000" + }, + "f9811fa19dadbf029f8bfe569adb18228c80481a": { + "balance": "0xad78ebc5ac6200000" + }, + "f98250730c4c61c57f129835f2680894794542f3": { + "balance": "0xd8d726b7177a800000" + }, + "f989346772995ec1906faffeba2a7fe7de9c6bab": { + "balance": "0x16a6502f15a1e540000" + }, + "f998ca3411730a6cd10e7455b0410fb0f6d3ff80": { + "balance": "0x6c6b935b8bbd400000" + }, + "f99aee444b5783c093cfffd1c4632cf93c6f050c": { + "balance": "0x15af1d78b58c400000" + }, + "f99eeece39fa7ef5076d855061384009792cf2e0": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "f9a59c3cc5ffacbcb67be0fc7256f64c9b127cb4": { + "balance": "0x6c6b935b8bbd400000" + }, + "f9a94bd56198da245ed01d1e6430b24b2708dcc0": { + "balance": "0x28a77afda87ee50000" + }, + "f9b37825f03073d31e249378c30c795c33f83af2": { + "balance": "0xad9aabf8c9bfc0000" + }, + "f9b617f752edecae3e909fbb911d2f8192f84209": { + "balance": "0x90f534608a72880000" + }, + "f9bfb59d538afc4874d4f5941b08c9730e38e24b": { + "balance": "0x22b1c8c1227a00000" + }, + "f9dd239008182fb519fb30eedd2093fed1639be8": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "f9debaecb5f339beea4894e5204bfa340d067f25": { + "balance": "0x5a42844673b1640000" + }, + "f9e37447406c412197b2e2aebc001d6e30c98c60": { + "balance": "0x1c479bb4349c0ee0000" + }, + "f9e7222faaf0f4da40c1c4a40630373a09bed7b6": { + "balance": "0x9b4fdcb09456240000" + }, + "f9ece022bccd2c92346911e79dd50303c01e0188": { + "balance": "0x3635c9adc5dea00000" + }, + "fa00c376e89c05e887817a9dd0748d96f341aa89": { + "balance": "0x104d0d00d2b7f60000" + }, + "fa0c1a988c8a17ad3528eb28b3409daa58225f26": { + "balance": "0xad78ebc5ac6200000" + }, + "fa105f1a11b6e4b1f56012a27922e2ac2da4812f": { + "balance": "0x205b4dfa1ee74780000" + }, + "fa142fe47eda97e6503b386b18a2bedd73ccb5b1": { + "balance": "0x2e153ad81548100000" + }, + "fa14b566234abee73042c31d21717182cba14aa1": { + "balance": "0x11c7ea162e78200000" + }, + "fa19d6f7a50f4f079893d167bf14e21d0073d196": { + "balance": "0x1cbb3a3ff08d080000" + }, + "fa1f1971a775c3504fef5079f640c2c4bce7ac05": { + "balance": "0x6c6b935b8bbd400000" + }, + "fa279bfd8767f956bf7fa0bd5660168da75686bd": { + "balance": "0x90f534608a72880000" + }, + "fa27cc49d00b6c987336a875ae39da58fb041b2e": { + "balance": "0x21e19e0c9bab2400000" + }, + "fa283299603d8758e8cab082125d2c8f7d445429": { + "balance": "0x15bcacb1e0501ae8000" + }, + "fa2bbca15d3fe39f8a328e91f90da14f7ac6253d": { + "balance": "0xad78ebc5ac6200000" + }, + "fa2fd29d03fee9a07893df3a269f56b72f2e1e64": { + "balance": "0x21e19e0c9bab2400000" + }, + "fa33553285a973719a0d5f956ff861b2d89ed304": { + "balance": "0x1158e460913d00000" + }, + "fa3a0c4b903f6ea52ea7ab7b8863b6a616ad6650": { + "balance": "0x1158e460913d00000" + }, + "fa3a1aa4488b351aa7560cf5ee630a2fd45c3222": { + "balance": "0x2fa47e6aa7340d0000" + }, + "fa410971ad229c3036f41acf852f2ac999281950": { + "balance": "0xd8b311a8ddfa7c0000" + }, + "fa44a855e404c86d0ca8ef3324251dfb349c539e": { + "balance": "0x542253a126ce400000" + }, + "fa5201fe1342af11307b9142a041243ca92e2f09": { + "balance": "0x2038116a3ac043980000" + }, + "fa60868aafd4ff4c5c57914b8ed58b425773dfa9": { + "balance": "0x1cfe5c808f39fbc0000" + }, + "fa67b67b4f37a0150915110ede073b05b853bda2": { + "balance": "0x2319ba947371ad0000" + }, + "fa68e0cb3edf51f0a6f211c9b2cb5e073c9bffe6": { + "balance": "0xfc936392801c00000" + }, + "fa6a37f018e97967937fc5e8617ba1d786dd5f77": { + "balance": "0x43c30fb0884a96c0000" + }, + "fa7606435b356cee257bd2fcd3d9eacb3cd1c4e1": { + "balance": "0x56bc75e2d63100000" + }, + "fa7adf660b8d99ce15933d7c5f072f3cbeb99d33": { + "balance": "0x14061b9d77a5e980000" + }, + "fa86ca27bf2854d98870837fb6f6dfe4bf6453fc": { + "balance": "0x11757e8525cf148000" + }, + "fa8cf4e627698c5d5788abb7880417e750231399": { + "balance": "0xe61a3696eef6100000" + }, + "fa8e3b1f13433900737daaf1f6299c4887f85b5f": { + "balance": "0x26c29e47c4844c0000" + }, + "fa9ec8efe08686fa58c181335872ba698560ecab": { + "balance": "0x6c6acc67d7b1d40000" + }, + "faad905d847c7b23418aeecbe3addb8dd3f8924a": { + "balance": "0x6acb3df27e1f880000" + }, + "faaeba8fc0bbda553ca72e30ef3d732e26e82041": { + "balance": "0x488d282aafc9f68000" + }, + "fab487500df20fb83ebed916791d561772adbebf": { + "balance": "0x6c6b4c4da6ddbe0000" + }, + "fac5ca94758078fbfccd19db3558da7ee8a0a768": { + "balance": "0x3728a62b0dcff60000" + }, + "fad96ab6ac768ad5099452ac4777bd1a47edc48f": { + "balance": "0x56bc75e2d63100000" + }, + "fae76719d97eac41870428e940279d97dd57b2f6": { + "balance": "0x14dbb2195ca228900000" + }, + "fae881937047895a660cf229760f27e66828d643": { + "balance": "0x9ddc1e3b901180000" + }, + "fae92c1370e9e1859a5df83b56d0f586aa3b404c": { + "balance": "0x5c5b4f3d843980000" + }, + "faf5f0b7b6d558f5090d9ea1fb2d42259c586078": { + "balance": "0x15affb8420c6b640000" + }, + "fb126f0ec769f49dcefca2f200286451583084b8": { + "balance": "0x10fcbc2350396bf0000" + }, + "fb135eb15a8bac72b69915342a60bbc06b7e077c": { + "balance": "0x43c33c1937564800000" + }, + "fb223c1e22eac1269b32ee156a5385922ed36fb8": { + "balance": "0x6c6b935b8bbd400000" + }, + "fb37cf6b4f81a9e222fba22e9bd24b5098b733cf": { + "balance": "0x21a754a6dc5280000" + }, + "fb3860f4121c432ebdc8ec6a0331b1b709792e90": { + "balance": "0x208c394af1c8880000" + }, + "fb39189af876e762c71d6c3e741893df226cedd6": { + "balance": "0xd8d726b7177a800000" + }, + "fb3a0b0d6b6a718f6fc0292a825dc9247a90a5d0": { + "balance": "0xad6dd199e975b0000" + }, + "fb3fa1ac08aba9cc3bf0fe9d483820688f65b410": { + "balance": "0x65a4da25d3016c00000" + }, + "fb3fe09bb836861529d7518da27635f538505615": { + "balance": "0x4be39216fda0700000" + }, + "fb5125bf0f5eb0b6f020e56bfc2fdf3d402c097e": { + "balance": "0x14061b9d77a5e980000" + }, + "fb5518714cefc36d04865de5915ef0ff47dfe743": { + "balance": "0x6c6b935b8bbd400000" + }, + "fb5ffaa0f7615726357891475818939d2037cf96": { + "balance": "0x1158e460913d00000" + }, + "fb685c15e439965ef626bf0d834cd1a89f2b5695": { + "balance": "0xd5967be4fc3f100000" + }, + "fb744b951d094b310262c8f986c860df9ab1de65": { + "balance": "0x2d1c515f1cb4a8000" + }, + "fb79abdb925c55b9f98efeef64cfc9eb61f51bb1": { + "balance": "0x6140c056fb0ac80000" + }, + "fb8113f94d9173eefd5a3073f516803a10b286ae": { + "balance": "0x4563918244f400000" + }, + "fb842ca2c5ef133917a236a0d4ac40690110b038": { + "balance": "0x10969a62be15880000" + }, + "fb91fb1a695553f0c68e21276decf0b83909b86d": { + "balance": "0x56c003617af780000" + }, + "fb9473cf7712350a1fa0395273fc80560752e4fb": { + "balance": "0x6af2198ba85aa0000" + }, + "fb949c647fdcfd2514c7d58e31f28a532d8c5833": { + "balance": "0x43c33c1937564800000" + }, + "fba5486d53c6e240494241abf87e43c7600d413a": { + "balance": "0x6bbf61494948340000" + }, + "fbb161fe875f09290a4b262bc60110848f0d2226": { + "balance": "0x6c6b935b8bbd400000" + }, + "fbbbebcfbe235e57dd2306ad1a9ec581c7f9f48f": { + "balance": "0x22b1c8c1227a00000" + }, + "fbc01db54e47cdc3c438694ab717a856c23fe6e9": { + "balance": "0x1ca7150ab174f470000" + }, + "fbcfcc4a7b0f26cf26e9f3332132e2fc6a230766": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "fbe71622bcbd31c1a36976e7e5f670c07ffe16de": { + "balance": "0x15af1d78b58c400000" + }, + "fbede32c349f3300ef4cd33b4de7dc18e443d326": { + "balance": "0xab4dcf399a3a600000" + }, + "fbf204c813f836d83962c7870c7808ca347fd33e": { + "balance": "0x1158e460913d00000" + }, + "fbf75933e01b75b154ef0669076be87f62dffae1": { + "balance": "0x10846372f249d4c00000" + }, + "fc0096b21e95acb8d619d176a4a1d8d529badbef": { + "balance": "0x14d9693bcbec028000" + }, + "fc00a420a36107dfd5f495128a5fe5abb2db0f34": { + "balance": "0x143179d869110200000" + }, + "fc018a690ad6746dbe3acf9712ddca52b6250039": { + "balance": "0x21e19e0c9bab2400000" + }, + "fc02734033e57f70517e0afc7ee62461f06fad8e": { + "balance": "0x155bd9307f9fe80000" + }, + "fc0ee6f7c2b3714ae9916c45566605b656f32441": { + "balance": "0x5f68e8131ecf800000" + }, + "fc10b7a67b3268d5331bfb6a14def5ea4a162ca3": { + "balance": "0xad78ebc5ac6200000" + }, + "fc15cb99a8d1030b12770add033a79ee0d0c908c": { + "balance": "0x12fa00bd52e6240000" + }, + "fc2952b4c49fedd0bc0528a308495e6d6a1c71d6": { + "balance": "0x6c6b935b8bbd400000" + }, + "fc2c1f88961d019c3e9ea33009152e0693fbf88a": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "fc361105dd90f9ede566499d69e9130395f12ac8": { + "balance": "0x53a4fe2f204e80e00000" + }, + "fc372ff6927cb396d9cf29803500110da632bc52": { + "balance": "0x6c6b935b8bbd400000" + }, + "fc39be41094b1997d2169e8264c2c3baa6c99bc4": { + "balance": "0x6c6b935b8bbd400000" + }, + "fc3d226bb36a58f526568857b0bb12d109ec9301": { + "balance": "0x6c6b935b8bbd400000" + }, + "fc43829ac787ff88aaf183ba352aadbf5a15b193": { + "balance": "0xd6ac0a2b0552e00000" + }, + "fc49c1439a41d6b3cf26bb67e0365224e5e38f5f": { + "balance": "0x3636d7af5ec98e0000" + }, + "fc5500825105cf712a318a5e9c3bfc69c89d0c12": { + "balance": "0xd8d726b7177a800000" + }, + "fc66faba277f4b5de64ad45eb19c31e00ced3ed5": { + "balance": "0x131beb925ffd3200000" + }, + "fc7e22a503ec5abe9b08c50bd14999f520fa4884": { + "balance": "0x15a477dfbe1ea148000" + }, + "fc8215a0a69913f62a43bf1c8590b9ddcd0d8ddb": { + "balance": "0x6c6b935b8bbd400000" + }, + "fc989cb487bf1a7d17e4c1b7c4b7aafdda6b0a8d": { + "balance": "0x1158e460913d00000" + }, + "fc9b347464b2f9929d807e039dae48d3d98de379": { + "balance": "0x2f6f10780d22cc00000" + }, + "fca43bbc23a0d321ba9e46b929735ce7d8ef0c18": { + "balance": "0x1158e460913d00000" + }, + "fca73eff8771c0103ba3cc1a9c259448c72abf0b": { + "balance": "0x3635c9adc5dea00000" + }, + "fcada300283f6bcc134a91456760b0d77de410e0": { + "balance": "0x6c6b935b8bbd400000" + }, + "fcbc5c71ace79741450b012cf6b8d3f17db68a70": { + "balance": "0x205b4dfa1ee74780000" + }, + "fcbd85feea6a754fcf3449449e37ff9784f7773c": { + "balance": "0xa74ada69abd7780000" + }, + "fcc9d4a4262e7a027ab7519110d802c495ceea39": { + "balance": "0x1595182224b26480000" + }, + "fccd0d1ecee27addea95f6857aeec8c7a04b28ee": { + "balance": "0x21e19e0c9bab2400000" + }, + "fcd0b4827cd208ffbf5e759dba8c3cc61d8c2c3c": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "fce089635ce97abac06b44819be5bb0a3e2e0b37": { + "balance": "0x503920a7630a78000" + }, + "fcf199f8b854222f182e4e1d099d4e323e2aae01": { + "balance": "0x3635c9adc5dea00000" + }, + "fcfc3a5004d678613f0b36a642269a7f371c3f6a": { + "balance": "0x3635c9adc5dea00000" + }, + "fd191a35157d781373fb411bf9f25290047c5eef": { + "balance": "0x3635c9adc5dea00000" + }, + "fd1faa347b0fcc804c2da86c36d5f1d18b7087bb": { + "balance": "0x2d6eb247a96f60000" + }, + "fd1fb5a89a89a721b8797068fbc47f3e9d52e149": { + "balance": "0xcd0b5837fc6580000" + }, + "fd204f4f4aba2525ba728afdf78792cbdeb735ae": { + "balance": "0x6c6b935b8bbd400000" + }, + "fd2757cc3551a095878d97875615fe0c6a32aa8a": { + "balance": "0x206db15299beac0000" + }, + "fd2872d19e57853cfa16effe93d0b1d47b4f93fb": { + "balance": "0xd8d726b7177a800000" + }, + "fd2929271e9d2095a264767e7b0df52ea0d1d400": { + "balance": "0xa2a1eb251b5ae40000" + }, + "fd377a385272900cb436a3bb7962cdffe93f5dad": { + "balance": "0x6c6b935b8bbd400000" + }, + "fd40242bb34a70855ef0fd90f3802dec2136b327": { + "balance": "0x68a875073e29240000" + }, + "fd452c3969ece3801c542020f1cdcaa1c71ed23d": { + "balance": "0x152d02c7e14af6800000" + }, + "fd4b551f6fdbcda6c511b5bb372250a6b783e534": { + "balance": "0x11de1e6db450c0000" + }, + "fd4b989558ae11be0c3b36e2d6f2a54a9343ca2e": { + "balance": "0x6c6b935b8bbd400000" + }, + "fd4de8e3748a289cf7d060517d9d38388db01fb8": { + "balance": "0xd8d726b7177a80000" + }, + "fd5a63157f914fd398eab19c137dd9550bb7715c": { + "balance": "0x56bc75e2d63100000" + }, + "fd60d2b5af3d35f7aaf0c393052e79c4d823d985": { + "balance": "0x30eb50d2e14080000" + }, + "fd686de53fa97f99639e2568549720bc588c9efc": { + "balance": "0x6ac5c62d9486070000" + }, + "fd7ede8f5240a06541eb699d782c2f9afb2170f6": { + "balance": "0x487a9a304539440000" + }, + "fd812bc69fb170ef57e2327e80affd14f8e4b6d2": { + "balance": "0x6c6b935b8bbd400000" + }, + "fd88d114220f081cb3d5e15be8152ab07366576a": { + "balance": "0x1043561a8829300000" + }, + "fd918536a8efa6f6cefe1fa1153995fef5e33d3b": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "fd920f722682afb5af451b0544d4f41b3b9d5742": { + "balance": "0x7e52056a123f3c0000" + }, + "fd9579f119bbc819a02b61e38d8803c942f24d32": { + "balance": "0x5b97e9081d9400000" + }, + "fda0ce15330707f10bce3201172d2018b9ddea74": { + "balance": "0x2d041d705a2c60000" + }, + "fda3042819af3e662900e1b92b4358eda6e92590": { + "balance": "0x1907a284d58f63e00000" + }, + "fda6810ea5ac985d6ffbf1c511f1c142edcfddf7": { + "balance": "0xd8d726b7177a800000" + }, + "fdb33944f2360615e5be239577c8a19ba52d9887": { + "balance": "0x209d922f5259c50000" + }, + "fdba5359f7ec3bc770ac49975d844ec9716256f1": { + "balance": "0x3635c9adc5dea00000" + }, + "fdc4d4765a942f5bf96931a9e8cc7ab8b757ff4c": { + "balance": "0x126c478a0e3ea8600000" + }, + "fdcd5d80b105897a57abc47865768b2900524295": { + "balance": "0x15af1d78b58c4000000" + }, + "fdd1195f797d4f35717d15e6f9810a9a3ff55460": { + "balance": "0xfc936392801c0000" + }, + "fdd502a74e813bcfa355ceda3c176f6a6871af7f": { + "balance": "0x15af1d78b58c400000" + }, + "fde395bc0b6d5cbb4c1d8fea3e0b4bff635e9db7": { + "balance": "0x6c6b935b8bbd400000" + }, + "fdeaac2acf1d138e19f2fc3f9fb74592e3ed818a": { + "balance": "0x243d4d18229ca20000" + }, + "fdecc82ddfc56192e26f563c3d68cb544a96bfed": { + "balance": "0x17da3a04c7b3e00000" + }, + "fdf42343019b0b0c6bf260b173afab7e45b9d621": { + "balance": "0x6c6acc67d7b1d40000" + }, + "fdf449f108c6fb4f5a2b081eed7e45e6919e4d25": { + "balance": "0x6c6b935b8bbd400000" + }, + "fdfd6134c04a8ab7eb16f00643f8fed7daaaecb2": { + "balance": "0x15af1d78b58c400000" + }, + "fe00bf439911a553982db638039245bcf032dbdc": { + "balance": "0x155bd9307f9fe80000" + }, + "fe016ec17ec5f10e3bb98ff4a1eda045157682ab": { + "balance": "0x145f5402e7b2e60000" + }, + "fe0e30e214290d743dd30eb082f1f0a5225ade61": { + "balance": "0xad78ebc5ac6200000" + }, + "fe210b8f04dc6d4f76216acfcbd59ba83be9b630": { + "balance": "0x1158e460913d00000" + }, + "fe22a0b388668d1ae2643e771dacf38a434223cc": { + "balance": "0xd8db5ebd7b26380000" + }, + "fe362688845fa244cc807e4b1130eb3741a8051e": { + "balance": "0x3635c9adc5dea00000" + }, + "fe3827d57630cf8761d512797b0b858e478bbd12": { + "balance": "0x1158e460913d00000" + }, + "fe418b421a9c6d373602790475d2303e11a75930": { + "balance": "0x3708baed3d68900000" + }, + "fe4249127950e2f896ec0e7e2e3d055aab10550f": { + "balance": "0x243d4d18229ca20000" + }, + "fe4d8403216fd571572bf1bdb01d00578978d688": { + "balance": "0x215f835bc769da80000" + }, + "fe53b94989d89964da2061539526bbe979dd2ea9": { + "balance": "0x68a875073e29240000" + }, + "fe549bbfe64740189892932538daaf46d2b61d4f": { + "balance": "0x22b1c8c1227a00000" + }, + "fe615d975c0887e0c9113ec7298420a793af8b96": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "fe65c4188d7922576909642044fdc52395560165": { + "balance": "0xd8d726b7177a800000" + }, + "fe697ff22ca547bfc95e33d960da605c6763f35b": { + "balance": "0x47d4119fd960940000" + }, + "fe6a895b795cb4bf85903d3ce09c5aa43953d3bf": { + "balance": "0xb8507a820728200000" + }, + "fe6f5f42b6193b1ad16206e4afb5239d4d7db45e": { + "balance": "0x5dc892aa1131c80000" + }, + "fe7011b698bf3371132d7445b19eb5b094356aee": { + "balance": "0x6c6b935b8bbd400000" + }, + "fe80e9232deaff19baf99869883a4bdf0004e53c": { + "balance": "0x2e62f20a69be400000" + }, + "fe8e6e3665570dff7a1bda697aa589c0b4e9024a": { + "balance": "0x6c6b935b8bbd400000" + }, + "fe8f1fdcab7fbec9a6a3fcc507619600505c36a3": { + "balance": "0x11164759ffb320000" + }, + "fe91eccf2bd566afa11696c5049fa84c69630a52": { + "balance": "0x692ae8897081d00000" + }, + "fe96c4cd381562401aa32a86e65b9d52fa8aee27": { + "balance": "0x8f1d5c1cae37400000" + }, + "fe98c664c3e447a95e69bd582171b7176ea2a685": { + "balance": "0xd8d726b7177a800000" + }, + "fe9ad12ef05d6d90261f96c8340a0381974df477": { + "balance": "0x6c6b935b8bbd400000" + }, + "fe9c0fffefb803081256c0cf4d6659e6d33eb4fb": { + "balance": "0x52d542804f1ce00000" + }, + "fe9cfc3bb293ddb285e625f3582f74a6b0a5a6cd": { + "balance": "0x6acb3df27e1f880000" + }, + "fe9e1197d7974a7648dcc7a03112a88edbc9045d": { + "balance": "0x10afc1ade3b4ed40000" + }, + "feaca2ac74624bf348dac9985143cfd652a4be55": { + "balance": "0x5897fcbb02914088000" + }, + "fead1803e5e737a68e18472d9ac715f0994cc2be": { + "balance": "0x1b1ae4d6e2ef500000" + }, + "feb8b8e2af716ae41fc7c04bcf29540156461e6b": { + "balance": "0x545174a528a77a0000" + }, + "feb92d30bf01ff9a1901666c5573532bfa07eeec": { + "balance": "0x3635c9adc5dea00000" + }, + "febc3173bc9072136354002b7b4fb3bfc53f22f1": { + "balance": "0x140ec80fa7ee880000" + }, + "febd48d0ffdbd5656cd5e686363a61145228f279": { + "balance": "0x97c9ce4cf6d5c00000" + }, + "febd9f81cf78bd5fb6c4b9a24bd414bb9bfa4c4e": { + "balance": "0x6be10fb8ed6e138000" + }, + "fec06fe27b44c784b2396ec92f7b923ad17e9077": { + "balance": "0x6c6b935b8bbd400000" + }, + "fec14e5485de2b3eef5e74c46146db8e454e0335": { + "balance": "0x9b41fbf9e0aec0000" + }, + "fed8476d10d584b38bfa6737600ef19d35c41ed8": { + "balance": "0x62a992e53a0af00000" + }, + "feef3b6eabc94affd3310c1c4d0e65375e131119": { + "balance": "0x1158e460913d00000" + }, + "fef09d70243f39ed8cd800bf9651479e8f4aca3c": { + "balance": "0xad78ebc5ac6200000" + }, + "fef3b3dead1a6926d49aa32b12c22af54d9ff985": { + "balance": "0x3635c9adc5dea00000" + }, + "ff0b7cb71da9d4c1ea6ecc28ebda504c63f82fd1": { + "balance": "0x388a885df2fc6c0000" + }, + "ff0c3c7798e8733dd2668152891bab80a8be955c": { + "balance": "0x45946b0f9e9d60000" + }, + "ff0cb06c42e3d88948e45bd7b0d4e291aefeea51": { + "balance": "0x678a932062e4180000" + }, + "ff0cc8dac824fa24fc3caa2169e6e057cf638ad6": { + "balance": "0xd8d726b7177a800000" + }, + "ff0e2fec304207467e1e3307f64cbf30af8fd9cd": { + "balance": "0x6c6b935b8bbd400000" + }, + "ff128f4b355be1dc4a6f94fa510d7f15d53c2aff": { + "balance": "0x93739534d286800000" + }, + "ff12e49d8e06aa20f886293c0b98ed7eff788805": { + "balance": "0xd8d726b7177a800000" + }, + "ff207308ced238a6c01ad0213ca9eb4465d42590": { + "balance": "0x6c6acc67d7b1d40000" + }, + "ff26138330274df4e0a3081e6df7dd983ec6e78f": { + "balance": "0x6c6b935b8bbd400000" + }, + "ff2726294148b86c78a9372497e459898ed3fee3": { + "balance": "0x6acb3df27e1f880000" + }, + "ff3ded7a40d3aff0d7a8c45fa6136aa0433db457": { + "balance": "0x6c68ccd09b022c0000" + }, + "ff3eee57c34d6dae970d8b311117c53586cd3502": { + "balance": "0x5c283d410394100000" + }, + "ff3ef6ba151c21b59986ae64f6e8228bc9a2c733": { + "balance": "0x6c6b935b8bbd400000" + }, + "ff41d9e1b4effe18d8b0d1f63fc4255fb4e06c3d": { + "balance": "0x487a9a304539440000" + }, + "ff45cb34c928364d9cc9d8bb00373474618f06f3": { + "balance": "0x56bc75e2d63100000" + }, + "ff49a775814ec00051a795a875de24592ea400d4": { + "balance": "0x2a5a058fc295ed000000" + }, + "ff4a408f50e9e72146a28ce4fc8d90271f116e84": { + "balance": "0x6acb3df27e1f880000" + }, + "ff4d9c8484c43c42ff2c5ab759996498d323994d": { + "balance": "0xd8d726b7177a800000" + }, + "ff4fc66069046c525658c337a917f2d4b832b409": { + "balance": "0x6c6b935b8bbd400000" + }, + "ff5162f2354dc492c75fd6e3a107268660eecb47": { + "balance": "0x5c283d410394100000" + }, + "ff545bbb66fbd00eb5e6373ff4e326f5feb5fe12": { + "balance": "0x1158e460913d00000" + }, + "ff5e7ee7d5114821e159dca5e81f18f1bfffbff9": { + "balance": "0x6c6b935b8bbd400000" + }, + "ff61c9c1b7a3d8b53bba20b34466544b7b216644": { + "balance": "0x6c6b935b8bbd400000" + }, + "ff65511cada259260c1ddc41974ecaecd32d6357": { + "balance": "0x5f68e8131ecf800000" + }, + "ff7843c7010aa7e61519b762dfe49124a76b0e4e": { + "balance": "0xc5b17924412b9bb00000" + }, + "ff78541756ab2b706e0d70b18adb700fc4f1643d": { + "balance": "0x92896529baddc880000" + }, + "ff83855051ee8ffb70b4817dba3211ed2355869d": { + "balance": "0x15af1d78b58c400000" + }, + "ff850e3be1eb6a4d726c08fa73aad358f39706da": { + "balance": "0x692ae8897081d00000" + }, + "ff86e5e8e15b53909600e41308dab75f0e24e46b": { + "balance": "0x30eb50d2e140800000" + }, + "ff88ebacc41b3687f39e4b59e159599b80cba33f": { + "balance": "0x15af1d78b58c400000" + }, + "ff8a2ca5a81333f19998255f203256e1a819c0aa": { + "balance": "0xc249fdd3277800000" + }, + "ff8eb07de3d49d9d52bbe8e5b26dbe1d160fa834": { + "balance": "0xd814dcb94453080000" + }, + "ffa4aff1a37f984b0a67272149273ae9bd41e3bc": { + "balance": "0x21e19e0c9bab2400000" + }, + "ffa696ecbd787e66abae4fe87b635f07ca57d848": { + "balance": "0x487a9a304539440000" + }, + "ffac3db879a6c7158e8dec603b407463ba0d31cf": { + "balance": "0x6acb3df27e1f880000" + }, + "ffad3dd74e2c1f796ac640de56dc99b4c792a402": { + "balance": "0x10f0cf064dd59200000" + }, + "ffb04726dfa41afdc819168418610472970d7bfc": { + "balance": "0xd8d726b7177a800000" + }, + "ffb3bcc3196a8c3cb834cec94c34fed35b3e1054": { + "balance": "0x48a43c54602f700000" + }, + "ffb974673367f5c07be5fd270dc4b7138b074d57": { + "balance": "0x85ebc8bdb9066d8000" + }, + "ffb9c7217e66743031eb377af65c77db7359dcda": { + "balance": "0x22b1c8c1227a00000" + }, + "ffbc3da0381ec339c1c049eb1ed9ee34fdcea6ca": { + "balance": "0xd8d726b7177a800000" + }, + "ffc5fc4b7e8a0293ff39a3a0f7d60d2646d37a74": { + "balance": "0x6c6b935b8bbd400000" + }, + "ffc9cc3094b041ad0e076f968a0de3b167255866": { + "balance": "0x1770c1650beee80000" + }, + "ffd5170fd1a8118d558e7511e364b24906c4f6b3": { + "balance": "0x341d8cd27f1588000" + }, + "ffd6da958eecbc016bab91058440d39b41c7be83": { + "balance": "0x43c33c1937564800000" + }, + "ffe0e997f1977a615f5a315af413fd4869343ba0": { + "balance": "0x56cd55fc64dfe0000" + }, + "ffe28db53c9044b4ecd4053fd1b4b10d7056c688": { + "balance": "0x56bc75e2d63100000" + }, + "ffe2e28c3fb74749d7e780dc8a5d422538e6e451": { + "balance": "0xdbb81e05bc12d8000" + }, + "ffe8cbc1681e5e9db74a0f93f8ed25897519120f": { + "balance": "0x51b1d3839261ac0000" + }, + "ffeac0305ede3a915295ec8e61c7f881006f4474": { + "balance": "0x556f64c1fe7fa0000" + }, + "ffec0913c635baca2f5e57a37aa9fb7b6c9b6e26": { + "balance": "0x2ba39e82ed5d740000" + }, + "fff33a3bd36abdbd412707b8e310d6011454a7ae": { + "balance": "0x1b1ae4d6e2ef5000000" + }, + "fff4bad596633479a2a29f9a8b3f78eefd07e6ee": { + "balance": "0x56bc75e2d63100000" + }, + "fff7ac99c8e4feb60c9750054bdc14ce1857f181": { + "balance": "0x3635c9adc5dea00000" + } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "baseFeePerGas": null +} diff --git a/cmd/load_test/README.md b/cmd/load_test/README.md index 212c2a7213..c1f5ac1237 100644 --- a/cmd/load_test/README.md +++ b/cmd/load_test/README.md @@ -10,8 +10,9 @@ Usage: load_test [OPTIONS] --pkeys Options: -n, --node URL of the node being tested. [default: http://localhost:8545] -k, --pkeys Path to the file containing private keys. - -t, --test-type Type of test to run. Can be eth_transfers or erc20. [default: erc20] [possible values: eth-transfers, erc20] + -t, --test-type Type of test to run. Can be eth_transfers or erc20. [default: erc20] [possible values: eth-transfers, erc20, fibonacci, io-heavy] -N, --tx-amount Number of transactions to send for each account. [default: 1000] + -w, --wait Timeout to wait for all transactions to be included. If 0 is specified, wait indefinitely. [default: 0] -h, --help Print help ``` diff --git a/cmd/load_test/src/main.rs b/cmd/load_test/src/main.rs index 05aff0effb..cf967c09ee 100644 --- a/cmd/load_test/src/main.rs +++ b/cmd/load_test/src/main.rs @@ -57,6 +57,15 @@ struct Cli { help = "Number of transactions to send for each account." )] tx_amount: u64, + + // Amount of minutes to wait before exiting. If the value is 0, the program will wait indefinitely. If not present, the program will not wait for transactions to be included in blocks. + #[arg( + long, + short = 'w', + default_value_t = 0, + help = "Timeout to wait for all transactions to be included. If 0 is specified, wait indefinitely." + )] + wait: u64, } #[derive(ValueEnum, Clone, Debug)] // Derive ValueEnum for TestType @@ -264,6 +273,49 @@ async fn load_test( Ok(()) } +// Waits until the nonce of each account has reached the tx_amount. +async fn wait_until_all_included( + client: EthClient, + wait: Option, + accounts: &[Account], + tx_amount: u64, +) -> Result<(), String> { + let start_time = tokio::time::Instant::now(); + + for (pk, _) in accounts { + let pk = *pk; + let client = client.clone(); + let src = address_from_pub_key(pk); + let encoded_src: String = src.encode_hex(); + loop { + let elapsed = start_time.elapsed(); + let nonce = client.get_nonce(src, BlockByNumber::Latest).await.unwrap(); + if nonce >= tx_amount { + println!( + "All transactions sent from {} have been included in blocks. Nonce: {}", + encoded_src, nonce + ); + break; + } else { + println!( + "Waiting for transactions to be included from {}. Nonce: {}. Needs: {}. Percentage: {:2}%. Elapsed time: {}s.", + encoded_src, nonce, tx_amount, (nonce as f64 / tx_amount as f64) * 100.0, elapsed.as_secs() + ); + } + + if let Some(wait) = wait { + if elapsed > wait { + return Err("Timeout reached for transactions to be included".to_string()); + } + } + + sleep(Duration::from_secs(5)).await; + } + } + + Ok(()) +} + fn parse_pk_file(path: &Path) -> eyre::Result> { let pkeys_content = fs::read_to_string(path).expect("Unable to read private keys file"); let accounts: Vec = pkeys_content @@ -335,6 +387,12 @@ async fn main() { } }; + println!( + "Starting load test with {} transactions per account", + cli.tx_amount + ); + let time_now = tokio::time::Instant::now(); + load_test( cli.tx_amount, &accounts, @@ -344,4 +402,22 @@ async fn main() { ) .await .expect("Failed to load test"); + + let wait_time = if cli.wait > 0 { + Some(Duration::from_secs(cli.wait * 60)) + } else { + None + }; + + println!("Waiting for all transactions to be included in blocks..."); + wait_until_all_included(client, wait_time, &accounts, cli.tx_amount) + .await + .unwrap(); + + let elapsed_time = time_now.elapsed(); + + println!( + "Load test finished. Elapsed time: {} seconds", + elapsed_time.as_secs() + ); } diff --git a/crates/blockchain/blockchain.rs b/crates/blockchain/blockchain.rs index 1f0d5ca36c..094c71df63 100644 --- a/crates/blockchain/blockchain.rs +++ b/crates/blockchain/blockchain.rs @@ -10,15 +10,15 @@ use error::MempoolError; use error::{ChainError, InvalidBlockError}; use ethrex_common::constants::{GAS_PER_BLOB, MIN_BASE_FEE_PER_BLOB_GAS}; use ethrex_common::types::requests::{compute_requests_hash, EncodedRequests, Requests}; -use ethrex_common::types::BlobsBundle; use ethrex_common::types::MempoolTransaction; use ethrex_common::types::{ compute_receipts_root, validate_block_header, validate_cancun_header_fields, validate_prague_header_fields, validate_pre_cancun_header_fields, Block, BlockHash, BlockHeader, BlockNumber, ChainConfig, EIP4844Transaction, Receipt, Transaction, }; +use ethrex_common::types::{BlobsBundle, Fork}; -use ethrex_common::{Address, H160, H256}; +use ethrex_common::{Address, H256}; use mempool::Mempool; use std::collections::HashMap; use std::{ops::Div, time::Instant}; @@ -26,8 +26,7 @@ use std::{ops::Div, time::Instant}; use ethrex_storage::error::StoreError; use ethrex_storage::{AccountUpdate, Store}; use ethrex_vm::{BlockExecutionResult, Evm, EvmEngine}; -use fork_choice::apply_fork_choice; -use tracing::{error, info, warn}; +use tracing::info; //TODO: Implement a struct Chain or BlockChain to encapsulate //functionality and canonical chain state and config @@ -63,7 +62,10 @@ impl Blockchain { } /// Executes a block withing a new vm instance and state - async fn execute_block(&self, block: &Block) -> Result { + async fn execute_block( + &self, + block: &Block, + ) -> Result<(BlockExecutionResult, Vec), ChainError> { // Validate if it can be the new head and find the parent let Ok(parent_header) = find_parent_header(&block.header, &self.storage) else { // If the parent is not present, we store it as pending. @@ -71,6 +73,7 @@ impl Blockchain { return Err(ChainError::ParentNotFound); }; let chain_config = self.storage.get_chain_config()?; + let fork = chain_config.fork(block.header.timestamp); // Validate the block pre-execution validate_block(block, &parent_header, &chain_config)?; @@ -81,13 +84,14 @@ impl Blockchain { block.header.parent_hash, ); let execution_result = vm.execute_block(block)?; + let account_updates = vm.get_state_transitions(fork)?; // Validate execution went alright validate_gas_used(&execution_result.receipts, &block.header)?; validate_receipts_root(&block.header, &execution_result.receipts)?; validate_requests_hash(&block.header, &chain_config, &execution_result.requests)?; - Ok(execution_result) + Ok((execution_result, account_updates)) } /// Executes a block from a given vm instance an does not clear its state @@ -115,11 +119,12 @@ impl Blockchain { &self, block: &Block, execution_result: BlockExecutionResult, + account_updates: &[AccountUpdate], ) -> Result<(), ChainError> { // Apply the account updates over the last block's state and compute the new state root let new_state_root = self .storage - .apply_account_updates(block.header.parent_hash, &execution_result.account_updates) + .apply_account_updates(block.header.parent_hash, account_updates) .await? .ok_or(ChainError::ParentStateNotFound)?; @@ -138,23 +143,43 @@ impl Blockchain { pub async fn add_block(&self, block: &Block) -> Result<(), ChainError> { let since = Instant::now(); - // Easiest way to operate on the result of `execute_block` without - // having to add too much control flow or return early - // Async doesn't play well with `.and_then` - let inner = || async { - let res = self.execute_block(block).await?; - self.store_block(block, res).await - }; - - let result = inner().await; + let (res, updates) = self.execute_block(block).await?; + let executed = Instant::now(); + let result = self.store_block(block, res, &updates).await; + let stored = Instant::now(); + Self::print_add_block_logs(block, since, executed, stored); + result + } - let interval = Instant::now().duration_since(since).as_millis(); - if interval != 0 { - let as_gigas = (block.header.gas_used as f64).div(10_f64.powf(9_f64)); - let throughput = (as_gigas) / (interval as f64) * 1000_f64; - info!("[METRIC] BLOCK EXECUTION THROUGHPUT: {throughput} Gigagas/s TIME SPENT: {interval} msecs"); + fn print_add_block_logs(block: &Block, since: Instant, executed: Instant, stored: Instant) { + let interval = stored.duration_since(since).as_millis() as f64; + if interval != 0f64 { + let as_gigas = block.header.gas_used as f64 / 10_f64.powf(9_f64); + let throughput = as_gigas / interval * 1000_f64; + let execution_time = executed.duration_since(since).as_millis() as f64; + let storage_time = stored.duration_since(executed).as_millis() as f64; + let execution_fraction = (execution_time * 100_f64 / interval).round() as u64; + let storage_fraction = (storage_time * 100_f64 / interval).round() as u64; + let execution_time_per_gigagas = (execution_time / as_gigas).round() as u64; + let storage_time_per_gigagas = (storage_time / as_gigas).round() as u64; + let base_log = + format!( + "[METRIC] BLOCK EXECUTION THROUGHPUT: {:.2} Ggas/s TIME SPENT: {:.0} ms. #Txs: {}.", + throughput, interval, block.body.transactions.len() + ); + let extra_log = if as_gigas > 0.0 { + format!( + " exec/Ggas: {} ms ({}%), st/Ggas: {} ms ({}%)", + execution_time_per_gigagas, + execution_fraction, + storage_time_per_gigagas, + storage_fraction + ) + } else { + "".to_string() + }; + info!("{}{}", base_log, extra_log); } - result } /// Adds multiple blocks in a batch. @@ -178,6 +203,8 @@ impl Blockchain { .storage .get_chain_config() .map_err(|e| (e.into(), None))?; + let fork = chain_config.fork(first_block_header.timestamp); + let mut vm = Evm::new( self.evm_engine, self.storage.clone(), @@ -186,12 +213,20 @@ impl Blockchain { let blocks_len = blocks.len(); let mut all_receipts: HashMap> = HashMap::new(); - let mut all_account_updates: HashMap = HashMap::new(); let mut total_gas_used = 0; let mut transactions_count = 0; let interval = Instant::now(); for (i, block) in blocks.iter().enumerate() { + if is_crossing_spuriousdragon(fork, chain_config.fork(block.header.timestamp)) { + return Err(( + ChainError::Custom("Crossing fork boundary in bulk mode".into()), + Some(BatchBlockProcessingFailure { + last_valid_hash, + failed_block_hash: block.hash(), + }), + )); + } // for the first block, we need to query the store let parent_header = if i == 0 { let Ok(parent_header) = find_parent_header(&block.header, &self.storage) else { @@ -209,11 +244,12 @@ impl Blockchain { blocks[i - 1].header.clone() }; - let BlockExecutionResult { - receipts, - account_updates, - .. - } = match self.execute_block_from_state(&parent_header, block, &chain_config, &mut vm) { + let BlockExecutionResult { receipts, .. } = match self.execute_block_from_state( + &parent_header, + block, + &chain_config, + &mut vm, + ) { Ok(result) => result, Err(err) => { return Err(( @@ -226,33 +262,16 @@ impl Blockchain { } }; - // Merge account updates - for account_update in account_updates { - let Some(cache) = all_account_updates.get_mut(&account_update.address) else { - all_account_updates.insert(account_update.address, account_update); - continue; - }; - - cache.removed = account_update.removed; - if let Some(code) = account_update.code { - cache.code = Some(code); - }; - - if let Some(info) = account_update.info { - cache.info = Some(info); - } - - for (k, v) in account_update.added_storage.into_iter() { - cache.added_storage.insert(k, v); - } - } - last_valid_hash = block.hash(); total_gas_used += block.header.gas_used; transactions_count += block.body.transactions.len(); all_receipts.insert(block.hash(), receipts); } + let account_updates = vm + .get_state_transitions(fork) + .map_err(|err| (ChainError::EvmError(err), None))?; + let Some(last_block) = blocks.last() else { return Err((ChainError::Custom("Last block not found".into()), None)); }; @@ -260,10 +279,7 @@ impl Blockchain { // Apply the account updates over all blocks and compute the new state root let new_state_root = self .storage - .apply_account_updates( - first_block_header.parent_hash, - &all_account_updates.into_values().collect::>(), - ) + .apply_account_updates(first_block_header.parent_hash, &account_updates) .await .map_err(|e| (e.into(), None))? .ok_or((ChainError::ParentStateNotFound, None))?; @@ -295,60 +311,6 @@ impl Blockchain { Ok(()) } - //TODO: Forkchoice Update shouldn't be part of this function - pub async fn import_blocks(&self, blocks: &[Block]) { - let size = blocks.len(); - for block in blocks { - let hash = block.hash(); - info!( - "Adding block {} with hash {:#x}.", - block.header.number, hash - ); - if let Err(error) = self.add_block(block).await { - warn!( - "Failed to add block {} with hash {:#x}: {}.", - block.header.number, hash, error - ); - } - if self - .storage - .update_latest_block_number(block.header.number) - .await - .is_err() - { - error!("Fatal: added block {} but could not update the block number -- aborting block import", block.header.number); - break; - }; - if self - .storage - .set_canonical_block(block.header.number, hash) - .await - .is_err() - { - error!( - "Fatal: added block {} but could not set it as canonical -- aborting block import", - block.header.number - ); - break; - }; - } - if let Some(last_block) = blocks.last() { - let hash = last_block.hash(); - match self.evm_engine { - EvmEngine::LEVM => { - // We are allowing this not to unwrap so that tests can run even if block execution results in the wrong root hash with LEVM. - let _ = apply_fork_choice(&self.storage, hash, hash, hash).await; - } - EvmEngine::REVM => { - apply_fork_choice(&self.storage, hash, hash, hash) - .await - .unwrap(); - } - } - } - info!("Added {size} blocks to blockchain"); - } - /// Add a blob transaction and its blobs bundle to the mempool checking that the transaction is valid #[cfg(feature = "c-kzg")] pub async fn add_blob_transaction_to_pool( @@ -688,5 +650,15 @@ fn get_total_blob_gas(tx: &EIP4844Transaction) -> u64 { GAS_PER_BLOB * tx.blob_versioned_hashes.len() as u64 } +fn is_crossing_spuriousdragon(from: Fork, to: Fork) -> bool { + if from >= Fork::SpuriousDragon { + return false; + } + if to < Fork::SpuriousDragon { + return false; + } + from != to +} + #[cfg(test)] mod tests {} diff --git a/crates/blockchain/dev/block_producer.rs b/crates/blockchain/dev/block_producer.rs index a468bf51cb..2af48ccb82 100644 --- a/crates/blockchain/dev/block_producer.rs +++ b/crates/blockchain/dev/block_producer.rs @@ -53,7 +53,7 @@ pub async fn start_block_producer( let payload_id = fork_choice_response .payload_id .expect("Failed to produce block: payload_id is None in ForkChoiceResponse"); - let execution_payload_response = match engine_client.engine_get_payload_v3(payload_id).await + let execution_payload_response = match engine_client.engine_get_payload_v4(payload_id).await { Ok(response) => { tracing::debug!("GetPayloadV3 response: {response:?}"); @@ -68,7 +68,7 @@ pub async fn start_block_producer( } }; let payload_status = match engine_client - .engine_new_payload_v3( + .engine_new_payload_v4( execution_payload_response.execution_payload, execution_payload_response .blobs_bundle diff --git a/crates/blockchain/metrics/README.md b/crates/blockchain/metrics/README.md index b58e5f6d59..c97e304683 100644 --- a/crates/blockchain/metrics/README.md +++ b/crates/blockchain/metrics/README.md @@ -5,8 +5,9 @@ If a new dashboard is designed just for the L1 or L2, it can be mounted only in To run the node with metrics, the next steps should be followed: 1. Build the `ethrex` binary with the `metrics` feature enabled. -2. Set the `--metrics.port` cli arg of the ethrex binary to match the port defined in `metrics/provisioning/prometheus/prometheus*.yaml` -3. Run the docker containers, example with the L2: +2. Enable metrics by using the `--metrics` flag when starting the node. +3. Set the `--metrics.port` cli arg of the ethrex binary to match the port defined in `metrics/provisioning/prometheus/prometheus*.yaml` +4. Run the docker containers, example with the L2: ```sh docker compose -f docker-compose-metrics.yaml -f docker-compose-metrics-l2.override.yaml up diff --git a/crates/blockchain/payload.rs b/crates/blockchain/payload.rs index 0734b9dc9d..033b54d230 100644 --- a/crates/blockchain/payload.rs +++ b/crates/blockchain/payload.rs @@ -159,8 +159,9 @@ pub fn calc_gas_limit(parent_gas_limit: u64) -> u64 { limit } -pub struct PayloadBuildContext<'a> { - pub payload: &'a mut Block, +#[derive(Clone)] +pub struct PayloadBuildContext { + pub payload: Block, pub remaining_gas: u64, pub receipts: Vec, pub requests: Vec, @@ -173,12 +174,8 @@ pub struct PayloadBuildContext<'a> { pub account_updates: Vec, } -impl<'a> PayloadBuildContext<'a> { - fn new( - payload: &'a mut Block, - evm_engine: EvmEngine, - storage: &Store, - ) -> Result { +impl PayloadBuildContext { + pub fn new(payload: Block, evm_engine: EvmEngine, storage: &Store) -> Result { let config = storage.get_chain_config()?; let base_fee_per_blob_gas = calculate_base_fee_per_blob_gas( payload.header.excess_blob_gas.unwrap_or_default(), @@ -205,12 +202,12 @@ impl<'a> PayloadBuildContext<'a> { } } -impl<'a> PayloadBuildContext<'a> { +impl PayloadBuildContext { fn parent_hash(&self) -> BlockHash { self.payload.header.parent_hash } - fn block_number(&self) -> BlockNumber { + pub fn block_number(&self) -> BlockNumber { self.payload.header.number } @@ -229,9 +226,10 @@ pub struct PayloadBuildResult { pub receipts: Vec, pub requests: Vec, pub account_updates: Vec, + pub payload: Block, } -impl<'a> From> for PayloadBuildResult { +impl From for PayloadBuildResult { fn from(value: PayloadBuildContext) -> Self { let PayloadBuildContext { blobs_bundle, @@ -239,6 +237,7 @@ impl<'a> From> for PayloadBuildResult { requests, receipts, account_updates, + payload, .. } = value; @@ -248,16 +247,14 @@ impl<'a> From> for PayloadBuildResult { requests, receipts, account_updates, + payload, } } } impl Blockchain { /// Completes the payload building process, return the block value - pub async fn build_payload( - &self, - payload: &mut Block, - ) -> Result { + pub async fn build_payload(&self, payload: Block) -> Result { let since = Instant::now(); let gas_limit = payload.header.gas_limit; @@ -287,7 +284,7 @@ impl Blockchain { Ok(context.into()) } - fn apply_withdrawals(&self, context: &mut PayloadBuildContext) -> Result<(), EvmError> { + pub fn apply_withdrawals(&self, context: &mut PayloadBuildContext) -> Result<(), EvmError> { let binding = Vec::new(); let withdrawals = context .payload @@ -313,7 +310,7 @@ impl Blockchain { /// Fetches suitable transactions from the mempool /// Returns two transaction queues, one for plain and one for blob txs - fn fetch_mempool_transactions( + pub fn fetch_mempool_transactions( &self, context: &mut PayloadBuildContext, ) -> Result<(TransactionQueue, TransactionQueue), ChainError> { @@ -448,7 +445,7 @@ impl Blockchain { /// Executes the transaction, updates gas-related context values & return the receipt /// The payload build context should have enough remaining gas to cover the transaction's gas_limit - fn apply_transaction( + pub fn apply_transaction( &self, head: &HeadTransaction, context: &mut PayloadBuildContext, @@ -526,9 +523,9 @@ impl Blockchain { Ok(()) } - async fn finalize_payload( + pub async fn finalize_payload( &self, - context: &mut PayloadBuildContext<'_>, + context: &mut PayloadBuildContext, ) -> Result<(), ChainError> { let chain_config = &context.store.get_chain_config()?; let fork = chain_config.fork(context.payload.header.timestamp); @@ -551,7 +548,7 @@ impl Blockchain { /// A struct representing suitable mempool transactions waiting to be included in a block // TODO: Consider using VecDequeue instead of Vec -struct TransactionQueue { +pub struct TransactionQueue { // The first transaction for each account along with its tip, sorted by highest tip heads: Vec, // The remaining txs grouped by account and sorted by nonce @@ -561,8 +558,8 @@ struct TransactionQueue { } #[derive(Clone, Debug, Eq, PartialEq)] -struct HeadTransaction { - tx: MempoolTransaction, +pub struct HeadTransaction { + pub tx: MempoolTransaction, tip: u64, } @@ -611,24 +608,24 @@ impl TransactionQueue { } /// Remove all transactions from the queue - fn clear(&mut self) { + pub fn clear(&mut self) { self.heads.clear(); self.txs.clear(); } /// Returns true if there are no more transactions in the queue - fn is_empty(&self) -> bool { + pub fn is_empty(&self) -> bool { self.heads.is_empty() } /// Returns the head transaction with the highest tip /// If there is more than one transaction with the highest tip, return the one with the lowest timestamp - fn peek(&self) -> Option { + pub fn peek(&self) -> Option { self.heads.first().cloned() } /// Removes current head transaction and all transactions from the given sender - fn pop(&mut self) { + pub fn pop(&mut self) { if !self.is_empty() { let sender = self.heads.remove(0).tx.sender(); self.txs.remove(&sender); @@ -637,7 +634,7 @@ impl TransactionQueue { /// Remove the top transaction /// Add a tx from the same sender to the head transactions - fn shift(&mut self) -> Result<(), ChainError> { + pub fn shift(&mut self) -> Result<(), ChainError> { let tx = self.heads.remove(0); if let Some(txs) = self.txs.get_mut(&tx.tx.sender()) { // Fetch next head diff --git a/crates/blockchain/smoke_test.rs b/crates/blockchain/smoke_test.rs index c6611d9f0d..3563d6bd29 100644 --- a/crates/blockchain/smoke_test.rs +++ b/crates/blockchain/smoke_test.rs @@ -306,9 +306,9 @@ mod blockchain_integration_test { // Create blockchain let blockchain = Blockchain::default_with_store(store.clone().clone()); - let mut block = create_payload(&args, store).unwrap(); - blockchain.build_payload(&mut block).await.unwrap(); - block + let block = create_payload(&args, store).unwrap(); + let result = blockchain.build_payload(block).await.unwrap(); + result.payload } async fn test_store() -> Store { diff --git a/crates/common/rlp/error.rs b/crates/common/rlp/error.rs index eebad61b90..a2bc3349cd 100644 --- a/crates/common/rlp/error.rs +++ b/crates/common/rlp/error.rs @@ -1,7 +1,7 @@ use thiserror::Error; // TODO: improve errors -#[derive(Debug, Error, PartialEq)] +#[derive(Debug, Error, PartialEq, Eq)] pub enum RLPDecodeError { #[error("InvalidLength")] InvalidLength, diff --git a/crates/common/rlp/structs.rs b/crates/common/rlp/structs.rs index 161e443fd7..2fe312681d 100644 --- a/crates/common/rlp/structs.rs +++ b/crates/common/rlp/structs.rs @@ -95,7 +95,7 @@ impl<'a> Decoder<'a> { /// Finishes encoding the struct and returns the remaining bytes after the item. /// If the item's payload is not empty, returns an error. - pub fn finish(self) -> Result<&'a [u8], RLPDecodeError> { + pub const fn finish(self) -> Result<&'a [u8], RLPDecodeError> { if self.payload.is_empty() { Ok(self.remaining) } else { @@ -104,13 +104,13 @@ impl<'a> Decoder<'a> { } /// Returns true if the decoder has finished decoding the given input - pub fn is_done(&self) -> bool { + pub const fn is_done(&self) -> bool { self.payload.is_empty() } /// Same as [`finish`](Self::finish), but discards the item's remaining payload /// instead of failing. - pub fn finish_unchecked(self) -> &'a [u8] { + pub const fn finish_unchecked(self) -> &'a [u8] { self.remaining } } diff --git a/crates/common/trie/db.rs b/crates/common/trie/db.rs index 9cc3dbcd40..8f58aa7566 100644 --- a/crates/common/trie/db.rs +++ b/crates/common/trie/db.rs @@ -17,7 +17,7 @@ pub struct InMemoryTrieDB { } impl InMemoryTrieDB { - pub fn new(map: Arc, Vec>>>) -> Self { + pub const fn new(map: Arc, Vec>>>) -> Self { Self { inner: map } } pub fn new_empty() -> Self { diff --git a/crates/common/trie/nibbles.rs b/crates/common/trie/nibbles.rs index 0eb2c58ab9..36e4e950b2 100644 --- a/crates/common/trie/nibbles.rs +++ b/crates/common/trie/nibbles.rs @@ -15,7 +15,7 @@ pub struct Nibbles { impl Nibbles { /// Create `Nibbles` from hex-encoded nibbles - pub fn from_hex(hex: Vec) -> Self { + pub const fn from_hex(hex: Vec) -> Self { Self { data: hex } } diff --git a/crates/common/trie/node.rs b/crates/common/trie/node.rs index d6bf0b4a5a..7a31e25f87 100644 --- a/crates/common/trie/node.rs +++ b/crates/common/trie/node.rs @@ -5,7 +5,6 @@ mod leaf; use std::array; pub use branch::BranchNode; -use ethereum_types::H256; use ethrex_rlp::{decode::decode_bytes, error::RLPDecodeError, structs::Decoder}; pub use extension::ExtensionNode; pub use leaf::LeafNode; @@ -178,8 +177,8 @@ impl Node { fn decode_child(rlp: &[u8]) -> NodeHash { match decode_bytes(rlp) { - Ok((hash, &[])) if hash.len() == 32 => NodeHash::Hashed(H256::from_slice(hash)), - Ok((&[], &[])) => NodeHash::Inline(vec![]), - _ => NodeHash::Inline(rlp.to_vec()), + Ok((hash, &[])) if hash.len() == 32 => NodeHash::from_slice(hash), + Ok((&[], &[])) => NodeHash::default(), + _ => NodeHash::from_slice(rlp), } } diff --git a/crates/common/trie/node/branch.rs b/crates/common/trie/node/branch.rs index 76d8cbd032..9760b0c9bf 100644 --- a/crates/common/trie/node/branch.rs +++ b/crates/common/trie/node/branch.rs @@ -43,7 +43,7 @@ impl BranchNode { } /// Creates a new branch node given its children and value - pub fn new_with_value(choices: Box<[NodeHash; 16]>, value: ValueRLP) -> Self { + pub const fn new_with_value(choices: Box<[NodeHash; 16]>, value: ValueRLP) -> Self { Self { choices, value } } @@ -61,7 +61,7 @@ impl BranchNode { let child_hash = &self.choices[choice]; if child_hash.is_valid() { let child_node = state - .get_node(child_hash.clone())? + .get_node(*child_hash)? .ok_or(TrieError::InconsistentTree)?; child_node.get(state, path) } else { @@ -93,7 +93,7 @@ impl BranchNode { // Insert into existing child and then update it choice_hash => { let child_node = state - .get_node(choice_hash.clone())? + .get_node(*choice_hash)? .ok_or(TrieError::InconsistentTree)?; let child_node = child_node.insert(state, path, value)?; @@ -138,7 +138,7 @@ impl BranchNode { let value = if let Some(choice_index) = path.next_choice() { if self.choices[choice_index].is_valid() { let child_node = state - .get_node(self.choices[choice_index].clone())? + .get_node(self.choices[choice_index])? .ok_or(TrieError::InconsistentTree)?; // Remove value from child node let (child_node, old_value) = child_node.remove(state, path.clone())?; @@ -179,15 +179,14 @@ impl BranchNode { (1, false) => { let (choice_index, child_hash) = children[0]; let child = state - .get_node(child_hash.clone())? + .get_node(*child_hash)? .ok_or(TrieError::InconsistentTree)?; match child { // Replace self with an extension node leading to the child - Node::Branch(_) => ExtensionNode::new( - Nibbles::from_hex(vec![choice_index as u8]), - child_hash.clone(), - ) - .into(), + Node::Branch(_) => { + ExtensionNode::new(Nibbles::from_hex(vec![choice_index as u8]), *child_hash) + .into() + } // Replace self with the child extension node, updating its path in the process Node::Extension(mut extension_node) => { extension_node.prefix.prepend(choice_index as u8); @@ -207,7 +206,7 @@ impl BranchNode { /// Computes the node's hash pub fn compute_hash(&self) -> NodeHash { - NodeHash::from_encoded_raw(self.encode_raw()) + NodeHash::from_encoded_raw(&self.encode_raw()) } /// Encodes the node @@ -217,7 +216,7 @@ impl BranchNode { for child in self.choices.iter() { match child { NodeHash::Hashed(hash) => encoder = encoder.encode_bytes(&hash.0), - NodeHash::Inline(raw) if !raw.is_empty() => encoder = encoder.encode_raw(raw), + NodeHash::Inline(raw) if raw.1 != 0 => encoder = encoder.encode_raw(child.as_ref()), _ => encoder = encoder.encode_bytes(&[]), } } @@ -229,7 +228,7 @@ impl BranchNode { /// Inserts the node into the state and returns its hash pub fn insert_self(self, state: &mut TrieState) -> Result { let hash = self.compute_hash(); - state.insert_node(self.into(), hash.clone()); + state.insert_node(self.into(), hash); Ok(hash) } @@ -253,7 +252,7 @@ impl BranchNode { let child_hash = &self.choices[choice]; if child_hash.is_valid() { let child_node = state - .get_node(child_hash.clone())? + .get_node(*child_hash)? .ok_or(TrieError::InconsistentTree)?; child_node.get_path(state, path, node_path)?; } diff --git a/crates/common/trie/node/extension.rs b/crates/common/trie/node/extension.rs index c124990fa6..24833fb32c 100644 --- a/crates/common/trie/node/extension.rs +++ b/crates/common/trie/node/extension.rs @@ -18,7 +18,7 @@ pub struct ExtensionNode { impl ExtensionNode { /// Creates a new extension node given its child hash and prefix - pub(crate) fn new(prefix: Nibbles, child: NodeHash) -> Self { + pub(crate) const fn new(prefix: Nibbles, child: NodeHash) -> Self { Self { prefix, child } } @@ -28,7 +28,7 @@ impl ExtensionNode { // Otherwise, no value is present. if path.skip_prefix(&self.prefix) { let child_node = state - .get_node(self.child.clone())? + .get_node(self.child)? .ok_or(TrieError::InconsistentTree)?; child_node.get(state, path) @@ -60,8 +60,7 @@ impl ExtensionNode { let child_node = state .get_node(self.child)? .ok_or(TrieError::InconsistentTree)?; - let new_child_node = - child_node.insert(state, path.offset(match_index), value.clone())?; + let new_child_node = child_node.insert(state, path.offset(match_index), value)?; self.child = new_child_node.insert_self(state)?; Ok(self.into()) } else if match_index == 0 { @@ -145,21 +144,14 @@ impl ExtensionNode { /// Computes the node's hash pub fn compute_hash(&self) -> NodeHash { - NodeHash::from_encoded_raw(self.encode_raw()) + NodeHash::from_encoded_raw(&self.encode_raw()) } /// Encodes the node pub fn encode_raw(&self) -> Vec { let mut buf = vec![]; let mut encoder = Encoder::new(&mut buf).encode_bytes(&self.prefix.encode_compact()); - match &self.child { - NodeHash::Inline(x) => { - encoder = encoder.encode_raw(x); - } - NodeHash::Hashed(x) => { - encoder = encoder.encode_bytes(&x.0); - } - } + encoder = self.child.encode(encoder); encoder.finish(); buf } @@ -167,7 +159,7 @@ impl ExtensionNode { /// Inserts the node into the state and returns its hash pub fn insert_self(self, state: &mut TrieState) -> Result { let hash = self.compute_hash(); - state.insert_node(self.into(), hash.clone()); + state.insert_node(self.into(), hash); Ok(hash) } @@ -188,7 +180,7 @@ impl ExtensionNode { // Continue to child if path.skip_prefix(&self.prefix) { let child_node = state - .get_node(self.child.clone())? + .get_node(self.child)? .ok_or(TrieError::InconsistentTree)?; child_node.get_path(state, path, node_path)?; } diff --git a/crates/common/trie/node/leaf.rs b/crates/common/trie/node/leaf.rs index f27cedfb58..bcac4c4222 100644 --- a/crates/common/trie/node/leaf.rs +++ b/crates/common/trie/node/leaf.rs @@ -16,7 +16,7 @@ pub struct LeafNode { impl LeafNode { /// Creates a new leaf node and stores the given (path, value) pair - pub fn new(partial: Nibbles, value: ValueRLP) -> Self { + pub const fn new(partial: Nibbles, value: ValueRLP) -> Self { Self { partial, value } } @@ -64,7 +64,7 @@ impl LeafNode { // Create a branch node with self as a child and store the value in the branch node // Branch { [Self,...], Value } let mut choices = BranchNode::EMPTY_CHOICES; - choices[self_choice_idx] = self.clone().insert_self(state)?; + choices[self_choice_idx] = self.insert_self(state)?; BranchNode::new_with_value(Box::new(choices), value) } else { // Create a new leaf node and store the path and value in it @@ -73,7 +73,7 @@ impl LeafNode { let new_leaf = LeafNode::new(path.offset(match_index + 1), value); let mut choices = BranchNode::EMPTY_CHOICES; choices[new_leaf_choice_idx] = new_leaf.insert_self(state)?; - choices[self_choice_idx] = self.clone().insert_self(state)?; + choices[self_choice_idx] = self.insert_self(state)?; BranchNode::new(Box::new(choices)) }; @@ -101,7 +101,7 @@ impl LeafNode { /// Computes the node's hash pub fn compute_hash(&self) -> NodeHash { - NodeHash::from_encoded_raw(self.encode_raw()) + NodeHash::from_encoded_raw(&self.encode_raw()) } /// Encodes the node @@ -118,7 +118,7 @@ impl LeafNode { /// Receives the offset that needs to be traversed to reach the leaf node from the canonical root, used to compute the node hash pub fn insert_self(self, state: &mut TrieState) -> Result { let hash = self.compute_hash(); - state.insert_node(self.into(), hash.clone()); + state.insert_node(self.into(), hash); Ok(hash) } diff --git a/crates/common/trie/node_hash.rs b/crates/common/trie/node_hash.rs index e4a6397edf..8b712bb689 100644 --- a/crates/common/trie/node_hash.rs +++ b/crates/common/trie/node_hash.rs @@ -1,5 +1,5 @@ use ethereum_types::H256; -use ethrex_rlp::{decode::RLPDecode, encode::RLPEncode}; +use ethrex_rlp::{decode::RLPDecode, encode::RLPEncode, structs::Encoder}; #[cfg(feature = "libmdbx")] use libmdbx::orm::{Decodable, Encodable}; use sha3::{Digest, Keccak256}; @@ -8,16 +8,17 @@ use sha3::{Digest, Keccak256}; /// If the encoded node is less than 32 bits, contains the encoded node itself // TODO: Check if we can omit the Inline variant, as nodes will always be bigger than 32 bits in our use case // TODO: Check if making this `Copy` can make the code less verbose at a reasonable performance cost -#[derive(Debug, Clone, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum NodeHash { Hashed(H256), - Inline(Vec), + // Inline is always len < 32. We need to store the length of the data, a u8 is enough. + Inline(([u8; 31], u8)), } impl AsRef<[u8]> for NodeHash { fn as_ref(&self) -> &[u8] { match self { - NodeHash::Inline(x) => x.as_ref(), + NodeHash::Inline((slice, len)) => &slice[0..(*len as usize)], NodeHash::Hashed(x) => x.as_bytes(), } } @@ -25,21 +26,39 @@ impl AsRef<[u8]> for NodeHash { impl NodeHash { /// Returns the `NodeHash` of an encoded node (encoded using the NodeEncoder) - pub fn from_encoded_raw(encoded: Vec) -> NodeHash { + pub fn from_encoded_raw(encoded: &[u8]) -> NodeHash { if encoded.len() >= 32 { - let hash = Keccak256::new_with_prefix(&encoded).finalize(); + let hash = Keccak256::new_with_prefix(encoded).finalize(); NodeHash::Hashed(H256::from_slice(hash.as_slice())) } else { - NodeHash::Inline(encoded) + NodeHash::from_slice(encoded) } } + + /// Converts a slice of an already hashed data (in case it's not inlineable) to a NodeHash. + /// + /// If you need to hash it in case its len >= 32 see `from_encoded_raw` + pub(crate) fn from_slice(slice: &[u8]) -> NodeHash { + match slice.len() { + 0..32 => { + let mut buffer = [0; 31]; + buffer[0..slice.len()].copy_from_slice(slice); + NodeHash::Inline((buffer, slice.len() as u8)) + } + _ => NodeHash::Hashed(H256::from_slice(slice)), + } + } + /// Returns the finalized hash /// NOTE: This will hash smaller nodes, only use to get the final root hash, not for intermediate node hashes pub fn finalize(self) -> H256 { match self { - NodeHash::Inline(x) => { - H256::from_slice(Keccak256::new().chain_update(&*x).finalize().as_slice()) - } + NodeHash::Inline(_) => H256::from_slice( + Keccak256::new() + .chain_update(self.as_ref()) + .finalize() + .as_slice(), + ), NodeHash::Hashed(x) => x, } } @@ -48,21 +67,31 @@ impl NodeHash { /// The hash will only be considered invalid if it is empty /// Aka if it has a default value instead of being a product of hash computation pub fn is_valid(&self) -> bool { - !matches!(self, NodeHash::Inline(v) if v.is_empty()) + !matches!(self, NodeHash::Inline(v) if v.1 == 0) } /// Const version of `Default` trait impl pub const fn const_default() -> Self { - Self::Inline(vec![]) + Self::Inline(([0; 31], 0)) + } + + /// Encodes this NodeHash with the given encoder. + pub fn encode<'a>(&self, mut encoder: Encoder<'a>) -> Encoder<'a> { + match self { + NodeHash::Inline(_) => { + encoder = encoder.encode_raw(self.as_ref()); + } + NodeHash::Hashed(_) => { + encoder = encoder.encode_bytes(self.as_ref()); + } + } + encoder } } impl From> for NodeHash { fn from(value: Vec) -> Self { - match value.len() { - 32 => NodeHash::Hashed(H256::from_slice(&value)), - _ => NodeHash::Inline(value), - } + NodeHash::from_slice(&value) } } @@ -74,19 +103,13 @@ impl From for NodeHash { impl From for Vec { fn from(val: NodeHash) -> Self { - match val { - NodeHash::Hashed(x) => x.0.to_vec(), - NodeHash::Inline(x) => x, - } + val.as_ref().to_vec() } } impl From<&NodeHash> for Vec { fn from(val: &NodeHash) -> Self { - match val { - NodeHash::Hashed(x) => x.0.to_vec(), - NodeHash::Inline(x) => x.clone(), - } + val.as_ref().to_vec() } } @@ -102,16 +125,13 @@ impl Encodable for NodeHash { #[cfg(feature = "libmdbx")] impl Decodable for NodeHash { fn decode(b: &[u8]) -> anyhow::Result { - Ok(match b.len() { - 32 => NodeHash::Hashed(H256::from_slice(b)), - _ => NodeHash::Inline(b.into()), - }) + Ok(NodeHash::from_slice(b)) } } impl Default for NodeHash { fn default() -> Self { - NodeHash::Inline(Vec::new()) + NodeHash::Inline(([0; 31], 0)) } } diff --git a/crates/common/trie/rlp.rs b/crates/common/trie/rlp.rs index 5e8a139c0a..c9c1be9fd2 100644 --- a/crates/common/trie/rlp.rs +++ b/crates/common/trie/rlp.rs @@ -16,7 +16,7 @@ enum NodeType { } impl NodeType { - fn from_u8(val: u8) -> Option { + const fn from_u8(val: u8) -> Option { match val { 0 => Some(Self::Branch), 1 => Some(Self::Extension), diff --git a/crates/common/trie/state.rs b/crates/common/trie/state.rs index 124b240071..893e882dc5 100644 --- a/crates/common/trie/state.rs +++ b/crates/common/trie/state.rs @@ -26,8 +26,8 @@ impl TrieState { /// Retrieves a node based on its hash pub fn get_node(&self, hash: NodeHash) -> Result, TrieError> { // Decode the node if it is inlined - if let NodeHash::Inline(encoded) = hash { - return Ok(Some(Node::decode_raw(&encoded)?)); + if let NodeHash::Inline(_) = hash { + return Ok(Some(Node::decode_raw(hash.as_ref())?)); } if let Some(node) = self.cache.get(&hash) { return Ok(Some(node.clone())); diff --git a/crates/common/trie/trie.rs b/crates/common/trie/trie.rs index b4558754f5..9e1ebd8f82 100644 --- a/crates/common/trie/trie.rs +++ b/crates/common/trie/trie.rs @@ -73,7 +73,7 @@ impl Trie { if let Some(root) = &self.root { let root_node = self .state - .get_node(root.clone())? + .get_node(*root)? .ok_or(TrieError::InconsistentTree)?; root_node.get(&self.state, Nibbles::from_bytes(path)) } else { @@ -90,8 +90,7 @@ impl Trie { .flatten() { // If the trie is not empty, call the root node's insertion logic - let root_node = - root_node.insert(&mut self.state, Nibbles::from_bytes(&path), value.clone())?; + let root_node = root_node.insert(&mut self.state, Nibbles::from_bytes(&path), value)?; self.root = Some(root_node.insert_self(&mut self.state)?) } else { // If the trie is empty, just add a leaf. @@ -129,7 +128,7 @@ impl Trie { Ok(self .root .as_ref() - .map(|root| root.clone().finalize()) + .map(|root| root.finalize()) .unwrap_or(*EMPTY_TRIE_HASH)) } @@ -138,7 +137,7 @@ impl Trie { pub fn hash_no_commit(&self) -> H256 { self.root .as_ref() - .map(|root| root.clone().finalize()) + .map(|root| root.finalize()) .unwrap_or(*EMPTY_TRIE_HASH) } @@ -159,10 +158,10 @@ impl Trie { return Ok(node_path); }; // If the root is inlined, add it to the node_path - if let NodeHash::Inline(node) = root { - node_path.push(node.to_vec()); + if let NodeHash::Inline(_) = root { + node_path.push(root.as_ref().to_vec()); } - if let Some(root_node) = self.state.get_node(root.clone())? { + if let Some(root_node) = self.state.get_node(*root)? { root_node.get_path(&self.state, Nibbles::from_bytes(path), &mut node_path)?; } Ok(node_path) @@ -178,7 +177,7 @@ impl Trie { let Some(root_node) = self .root .as_ref() - .map(|root| self.state.get_node(root.clone())) + .map(|root| self.state.get_node(*root)) .transpose()? .flatten() else { @@ -195,7 +194,7 @@ impl Trie { // dedup // TODO: really inefficient, by making the traversing smarter we can avoid having // duplicates - let node_path: HashSet<_> = node_path.drain(..).collect(); + let node_path: HashSet<_> = node_path.into_iter().collect(); let node_path = Vec::from_iter(node_path); Ok((Some(root_node.encode_raw()), node_path)) } @@ -231,7 +230,7 @@ impl Trie { } trie.root .as_ref() - .map(|root| root.clone().finalize()) + .map(|root| root.finalize()) .unwrap_or(*EMPTY_TRIE_HASH) } @@ -275,7 +274,7 @@ impl Trie { let Some(root_node) = self .root .as_ref() - .map(|root| self.state.get_node(root.clone())) + .map(|root| self.state.get_node(*root)) .transpose()? .flatten() else { @@ -296,7 +295,7 @@ impl Trie { if child_hash.is_valid() { let child_node = self .state - .get_node(child_hash.clone())? + .get_node(*child_hash)? .ok_or(TrieError::InconsistentTree)?; self.get_node_inner(child_node, partial_path) } else { @@ -311,7 +310,7 @@ impl Trie { { let child_node = self .state - .get_node(extension_node.child.clone())? + .get_node(extension_node.child)? .ok_or(TrieError::InconsistentTree)?; self.get_node_inner(child_node, partial_path) } else { diff --git a/crates/common/trie/trie_iter.rs b/crates/common/trie/trie_iter.rs index 5b90ddd13c..5526b62b2b 100644 --- a/crates/common/trie/trie_iter.rs +++ b/crates/common/trie/trie_iter.rs @@ -9,7 +9,7 @@ pub struct TrieIterator { impl TrieIterator { pub(crate) fn new(trie: Trie) -> Self { let stack = if let Some(root) = &trie.root { - vec![(Nibbles::default(), root.clone())] + vec![(Nibbles::default(), *root)] } else { vec![] }; @@ -34,7 +34,7 @@ impl Iterator for TrieIterator { if child.is_valid() { let mut child_path = path.clone(); child_path.append(choice as u8); - self.stack.push((child_path, child.clone())) + self.stack.push((child_path, *child)) } } } @@ -42,8 +42,7 @@ impl Iterator for TrieIterator { // Update path path.extend(&extension_node.prefix); // Add child to the stack - self.stack - .push((path.clone(), extension_node.child.clone())); + self.stack.push((path.clone(), extension_node.child)); } Node::Leaf(leaf) => { path.extend(&leaf.partial); diff --git a/crates/common/trie/verify_range.rs b/crates/common/trie/verify_range.rs index 8365354331..358bdf422e 100644 --- a/crates/common/trie/verify_range.rs +++ b/crates/common/trie/verify_range.rs @@ -153,7 +153,7 @@ fn fill_node( let node = proof_nodes.get_node(node_hash)?; let child_hash = get_child(path, &node); if let Some(ref child_hash) = child_hash { - trie_state.insert_node(node, node_hash.clone()); + trie_state.insert_node(node, *node_hash); fill_node(path, child_hash, trie_state, proof_nodes) } else { let value = match &node { @@ -163,7 +163,7 @@ fn fill_node( .then_some(n.value.clone()) .unwrap_or_default(), }; - trie_state.insert_node(node, node_hash.clone()); + trie_state.insert_node(node, *node_hash); Ok(value) } } @@ -174,12 +174,12 @@ fn get_child<'a>(path: &'a mut Nibbles, node: &'a Node) -> Option { Node::Branch(n) => { if let Some(choice) = path.next_choice() { if n.choices[choice].is_valid() { - return Some(n.choices[choice].clone()); + return Some(n.choices[choice]); } } None } - Node::Extension(n) => path.skip_prefix(&n.prefix).then_some(n.child.clone()), + Node::Extension(n) => path.skip_prefix(&n.prefix).then_some(n.child), Node::Leaf(_) => None, } } @@ -202,7 +202,7 @@ fn has_right_element_inner( mut path: Nibbles, trie_state: &TrieState, ) -> Result { - let Ok(Some(node)) = trie_state.get_node(node_hash.clone()) else { + let Ok(Some(node)) = trie_state.get_node(node_hash) else { return Ok(false); }; match node { @@ -212,7 +212,7 @@ fn has_right_element_inner( if n.choices[choice + 1..].iter().any(|child| child.is_valid()) { return Ok(true); } else if n.choices[choice].is_valid() { - return has_right_element_inner(n.choices[choice].clone(), path, trie_state); + return has_right_element_inner(n.choices[choice], path, trie_state); } } } @@ -261,7 +261,7 @@ fn remove_internal_references_inner( return Ok(true); } // We already looked up the nodes when filling the state so this shouldn't fail - let node = trie_state.get_node(node_hash.clone())?.unwrap(); + let node = trie_state.get_node(node_hash)?.unwrap(); match node { Node::Branch(mut n) => { // If none of the paths have a next choice nibble then it means that this is the end of the path @@ -276,7 +276,7 @@ fn remove_internal_references_inner( // Keep going // Check if the child extension node should be removed as a result of this process let should_remove = remove_internal_references_inner( - n.choices[left_choice].clone(), + n.choices[left_choice], left_path, right_path, trie_state, @@ -295,13 +295,9 @@ fn remove_internal_references_inner( } // Remove nodes on the left and right choice's subtries let should_remove_left = - remove_node(n.choices[left_choice].clone(), left_path, false, trie_state); - let should_remove_right = remove_node( - n.choices[right_choice].clone(), - right_path, - true, - trie_state, - ); + remove_node(n.choices[left_choice], left_path, false, trie_state); + let should_remove_right = + remove_node(n.choices[right_choice], right_path, true, trie_state); // Remove left and right child nodes if their subtries where wiped in the process if should_remove_left { n.choices[left_choice] = NodeHash::default(); @@ -373,7 +369,7 @@ fn remove_node( return false; } // We already looked up the nodes when filling the state so this shouldn't fail - let node = trie_state.get_node(node_hash.clone()).unwrap().unwrap(); + let node = trie_state.get_node(node_hash).unwrap().unwrap(); match node { Node::Branch(mut n) => { // Remove child nodes @@ -391,8 +387,7 @@ fn remove_node( } } // Remove nodes to the left/right of the choice's subtrie - let should_remove = - remove_node(n.choices[choice].clone(), path, remove_left, trie_state); + let should_remove = remove_node(n.choices[choice], path, remove_left, trie_state); if should_remove { n.choices[choice] = NodeHash::default(); } @@ -440,10 +435,10 @@ impl<'a> ProofNodeStorage<'a> { let Some(encoded) = self.nodes.get(hash.as_bytes()) else { return Err(TrieError::Verify(format!("proof node missing: {hash}"))); }; - *encoded + encoded.as_slice() } - NodeHash::Inline(ref encoded) => encoded, + NodeHash::Inline(_) => hash.as_ref(), }; Ok(Node::decode_raw(encoded)?) } diff --git a/crates/l2/Makefile b/crates/l2/Makefile index 56ee79f726..28f9dc4ad6 100644 --- a/crates/l2/Makefile +++ b/crates/l2/Makefile @@ -148,6 +148,7 @@ init-l2-no-metrics: ## 🚀 Initializes an L2 Lambda ethrex Client --network ${L2_GENESIS_FILE_PATH} \ --http.port ${L2_PORT} \ --http.addr 0.0.0.0 \ + --metrics \ --metrics.port ${L2_PROMETHEUS_METRICS_PORT} \ --evm levm \ --datadir ${ethrex_L2_DEV_LIBMDBX} diff --git a/crates/l2/contracts/deployer.rs b/crates/l2/contracts/deployer.rs index 0aaf3ecf30..31b789f63e 100644 --- a/crates/l2/contracts/deployer.rs +++ b/crates/l2/contracts/deployer.rs @@ -755,25 +755,14 @@ async fn make_deposits(bridge: Address, eth_client: &EthClient) -> Result<(), De DeployError::DecodingError("Error while parsing private key".to_string()) })?; let address = get_address_from_secret_key(&secret_key)?; - let values = vec![ + let values = vec![Value::Tuple(vec![ Value::Address(address), Value::Address(address), Value::Uint(U256::from(21000 * 5)), Value::Bytes(Bytes::from_static(b"")), - ]; + ])]; - // FIXME: This should be changed once https://github.com/lambdaclass/ethrex/issues/2384 is addressed let calldata = encode_calldata("deposit((address,address,uint256,bytes))", &values)?; - let mut data = vec![]; - data.extend_from_slice(calldata.get(..4).ok_or(DeployError::DecodingError( - "Invalid function selector".to_string(), - ))?); - data.extend_from_slice(&U256::from(32).to_big_endian()); - data.extend_from_slice( - calldata - .get(4..) - .ok_or(DeployError::DecodingError("Invalid calldata".to_string()))?, - ); let Some(_) = genesis.alloc.get(&address) else { println!( @@ -804,7 +793,7 @@ async fn make_deposits(bridge: Address, eth_client: &EthClient) -> Result<(), De }; let build = eth_client - .build_eip1559_transaction(bridge, address, Bytes::from(data), overrides) + .build_eip1559_transaction(bridge, address, Bytes::from(calldata), overrides) .await?; match eth_client diff --git a/crates/l2/contracts/src/l1/CommonBridge.sol b/crates/l2/contracts/src/l1/CommonBridge.sol index b46e65a4f5..7ede144ff9 100644 --- a/crates/l2/contracts/src/l1/CommonBridge.sol +++ b/crates/l2/contracts/src/l1/CommonBridge.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity =0.8.29; import "../../lib/openzeppelin-contracts/contracts/access/Ownable.sol"; import "../../lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol"; diff --git a/crates/l2/contracts/src/l1/OnChainProposer.sol b/crates/l2/contracts/src/l1/OnChainProposer.sol index e7653ca837..aa81db6859 100644 --- a/crates/l2/contracts/src/l1/OnChainProposer.sol +++ b/crates/l2/contracts/src/l1/OnChainProposer.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity =0.8.29; import "../../lib/openzeppelin-contracts/contracts/access/Ownable.sol"; import "../../lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol"; diff --git a/crates/l2/contracts/src/l1/interfaces/ICommonBridge.sol b/crates/l2/contracts/src/l1/interfaces/ICommonBridge.sol index fd9f955422..73837d22d8 100644 --- a/crates/l2/contracts/src/l1/interfaces/ICommonBridge.sol +++ b/crates/l2/contracts/src/l1/interfaces/ICommonBridge.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity =0.8.29; /// @title Interface for the CommonBridge contract. /// @author LambdaClass diff --git a/crates/l2/contracts/src/l1/interfaces/IOnChainProposer.sol b/crates/l2/contracts/src/l1/interfaces/IOnChainProposer.sol index 05606b3f8d..5b25b04358 100644 --- a/crates/l2/contracts/src/l1/interfaces/IOnChainProposer.sol +++ b/crates/l2/contracts/src/l1/interfaces/IOnChainProposer.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity =0.8.29; /// @title Interface for the OnChainProposer contract. /// @author LambdaClass diff --git a/crates/l2/contracts/src/l1/interfaces/IPicoVerifier.sol b/crates/l2/contracts/src/l1/interfaces/IPicoVerifier.sol index 625a92c15a..95592629c9 100644 --- a/crates/l2/contracts/src/l1/interfaces/IPicoVerifier.sol +++ b/crates/l2/contracts/src/l1/interfaces/IPicoVerifier.sol @@ -1,6 +1,6 @@ // Source: https://github.com/brevis-network/pico-zkapp-template/blob/evm/contracts/src/IPicoVerifier.sol // SPDX-License-Identifier: MIT -pragma solidity ^0.8.20; +pragma solidity =0.8.29; /// @title Pico Verifier Interface /// @author Brevis Network diff --git a/crates/l2/contracts/src/l1/interfaces/IRiscZeroVerifier.sol b/crates/l2/contracts/src/l1/interfaces/IRiscZeroVerifier.sol index 2d92013a6d..9f7f0760c3 100644 --- a/crates/l2/contracts/src/l1/interfaces/IRiscZeroVerifier.sol +++ b/crates/l2/contracts/src/l1/interfaces/IRiscZeroVerifier.sol @@ -18,7 +18,7 @@ // Modified from the original file. // Making use of the IRiscZeroVerifier interface and nothing else. -pragma solidity ^0.8.9; +pragma solidity =0.8.29; /// @notice A receipt attesting to the execution of a guest program. /// @dev A receipt contains two parts: a seal and a claim. The seal is a zero-knowledge proof diff --git a/crates/l2/contracts/src/l1/interfaces/ISP1Verifier.sol b/crates/l2/contracts/src/l1/interfaces/ISP1Verifier.sol index beb0143b49..baa2de8494 100644 --- a/crates/l2/contracts/src/l1/interfaces/ISP1Verifier.sol +++ b/crates/l2/contracts/src/l1/interfaces/ISP1Verifier.sol @@ -1,6 +1,6 @@ // From: https://github.com/succinctlabs/sp1-contracts/blob/65a1d96b720ffa2e6d167fb62527c9c8a534abbe/contracts/src/ISP1Verifier.sol // SPDX-License-Identifier: MIT -pragma solidity ^0.8.20; +pragma solidity =0.8.29; /// @title SP1 Verifier Interface /// @author Succinct Labs diff --git a/crates/l2/contracts/src/l2/CommonBridgeL2.sol b/crates/l2/contracts/src/l2/CommonBridgeL2.sol index 415909dfdb..f972e76ab0 100644 --- a/crates/l2/contracts/src/l2/CommonBridgeL2.sol +++ b/crates/l2/contracts/src/l2/CommonBridgeL2.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity =0.8.29; import "../../lib/openzeppelin-contracts/contracts/access/Ownable.sol"; import "../../lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol"; diff --git a/crates/l2/contracts/src/l2/interfaces/ICommonBridgeL2.sol b/crates/l2/contracts/src/l2/interfaces/ICommonBridgeL2.sol index ad5ede33a4..0ae1008e43 100644 --- a/crates/l2/contracts/src/l2/interfaces/ICommonBridgeL2.sol +++ b/crates/l2/contracts/src/l2/interfaces/ICommonBridgeL2.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.27; +pragma solidity =0.8.29; /// @title Interface for the L2 side of the CommonBridge contract. /// @author LambdaClass diff --git a/crates/l2/docs/README.md b/crates/l2/docs/README.md index d34297f588..8b1be55ac4 100644 --- a/crates/l2/docs/README.md +++ b/crates/l2/docs/README.md @@ -9,13 +9,20 @@ For more detailed documentation on each part of the system: - [Sequencer](./sequencer.md) - [Contracts](./contracts.md) - [Execution program](./program.md) -- [Proposer](./proposer.md) - [Prover](./prover.md) - [State Diffs](./state_diffs.md) - [Withdrawals](./withdrawals.md) + +## Prerequisites +- [Rust](https://www.rust-lang.org/tools/install) +- [Solc 0.29](https://docs.soliditylang.org/en/latest/installing-solidity.html) +- [Docker](https://docs.docker.com/engine/install/) + ## Quick HandsOn +Make sure docker is running! + 1. `cd crates/l2` 2. `make rm-db-l2 && make down` - It will remove any old database, if present, stored in your computer. The absolute path of libmdbx is defined by [data_dir](https://docs.rs/dirs/latest/dirs/fn.data_dir.html). diff --git a/crates/l2/prover/src/backends/exec.rs b/crates/l2/prover/src/backends/exec.rs index a2e166edf1..e818523fad 100644 --- a/crates/l2/prover/src/backends/exec.rs +++ b/crates/l2/prover/src/backends/exec.rs @@ -1,4 +1,4 @@ -use ethrex_blockchain::{validate_block, validate_gas_used}; +use ethrex_blockchain::validate_block; use ethrex_l2::utils::prover::proving_systems::{ProofCalldata, ProverType}; use ethrex_l2_sdk::calldata::Value; use ethrex_vm::Evm; @@ -54,11 +54,12 @@ fn execution_program(input: ProgramInput) -> Result Result<(String, Vec), CalldataEnc let (name, params) = sig .split_once('(') .ok_or(CalldataEncodeError::ParseError(signature.to_owned()))?; - let params: Vec = params - .rsplit_once(')') - .map_or(params, |(left, _)| left) - .split(',') - .map(|x| x.trim().split_once(' ').unzip().0.unwrap_or(x).to_string()) - .collect(); - Ok((name.to_string(), params)) + let params = params.rsplit_once(')').map_or(params, |(left, _)| left); + + // We use this to only keep track of top level tuples + // "address,(uint256,uint256)" -> "address" and "(uint256,uint256)" + // "address,(unit256,(uint256,uint256))" -> "address" and "(unit256,(uint256,uint256))" + let mut splitted_params = Vec::new(); + let mut current_param = String::new(); + let mut parenthesis_depth = 0; + + for ch in params.chars() { + match ch { + '(' => { + parenthesis_depth += 1; + current_param.push(ch); + } + ')' => { + parenthesis_depth -= 1; + current_param.push(ch); + } + ',' if parenthesis_depth == 0 => { + if !current_param.is_empty() { + splitted_params.push(current_param.trim().to_string()); + current_param = String::new(); + } + } + _ => current_param.push(ch), + } + } + + // push the last param if it exists + if !current_param.is_empty() { + splitted_params.push(current_param.trim().to_string()); + } + + Ok((name.to_string(), splitted_params)) } fn compute_function_selector(name: &str, params: &[String]) -> Result { @@ -57,11 +85,7 @@ pub fn encode_calldata(signature: &str, values: &[Value]) -> Result, Cal // Checks if params = [""] // that case happen when we have a function selector as follows: function name() let mut params = params; - if params - .first() - .ok_or(CalldataEncodeError::InternalError)? - .is_empty() - { + if params.is_empty() { params = vec![]; } @@ -247,10 +271,18 @@ fn encode_array(values: &[Value]) -> Result, CalldataEncodeError> { fn encode_bytes(values: &Bytes) -> Vec { let mut ret = vec![]; - let to_copy = U256::from(values.len()).to_big_endian(); + + // the bytes has to be padded to 32 bytes + let padding = 32 - (values.len() % 32); + let mut padded_bytes = values.to_vec(); + if padding != 32 { + padded_bytes.extend_from_slice(&vec![0; padding]); + } + + let to_copy = U256::from(values.len()).to_big_endian(); // we write the length without padding ret.extend_from_slice(&to_copy); - ret.extend_from_slice(values); + ret.extend_from_slice(&padded_bytes); ret } @@ -318,3 +350,68 @@ fn raw_function_selector() { assert_eq!(selector, H32::from(&[0x02, 0xe8, 0x6b, 0xbe])); } + +#[test] +fn encode_tuple_dynamic_offset() { + let raw_function_signature = "deposit((address,address,uint256,bytes))"; + let address = Address::from_low_u64_be(424242_u64); + + let tuple = Value::Tuple(vec![ + Value::Address(address), + Value::Address(address), + Value::Uint(U256::from(21000 * 5)), + Value::Bytes(Bytes::from_static(b"")), + ]); + let values = vec![tuple]; + + let calldata = encode_calldata(raw_function_signature, &values).unwrap(); + + assert_eq!(calldata, hex::decode("02e86bbe0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000006793200000000000000000000000000000000000000000000000000000000000679320000000000000000000000000000000000000000000000000000000000019a2800000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000").unwrap()); + + let mut encoding = vec![0x02, 0xe8, 0x6b, 0xbe]; // function selector + encoding.extend_from_slice(&encode_tuple(&values).unwrap()); + + assert_eq!(calldata, encoding); +} + +#[test] +fn correct_tuple_parsing() { + // the arguments are: + // - uint256 + // - (uint256, address) + // - ((address, address), (uint256, bytes)) + // - ((address, address), uint256) + // - (uint256, (address, address)) + // - address + let raw_function_signature = + "my_function(uint256,(uin256,address),((address,address),(uint256,bytes)),((address,address),uint256),(uint256,(address,address)),address)"; + + let exepected_arguments: Vec = vec![ + "uint256".to_string(), + "(uin256,address)".to_string(), + "((address,address),(uint256,bytes))".to_string(), + "((address,address),uint256)".to_string(), + "(uint256,(address,address))".to_string(), + "address".to_string(), + ]; + let (name, params) = parse_signature(raw_function_signature).unwrap(); + assert_eq!(name, "my_function"); + assert_eq!(params, exepected_arguments); +} + +#[test] +fn empty_calldata() { + let calldata = encode_calldata("number()", &[]).unwrap(); + assert_eq!(calldata, hex::decode("8381f58a").unwrap()); +} + +#[test] +fn bytes_has_padding() { + let raw_function_signature = "my_function(bytes)"; + let bytes = Bytes::from_static(b"hello world"); + let values = vec![Value::Bytes(bytes)]; + + let calldata = encode_calldata(raw_function_signature, &values).unwrap(); + + assert_eq!(calldata, hex::decode("f570899b0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000b68656c6c6f20776f726c64000000000000000000000000000000000000000000").unwrap()); +} diff --git a/crates/l2/sequencer/block_producer.rs b/crates/l2/sequencer/block_producer.rs index 69123d65fe..1091002dc8 100644 --- a/crates/l2/sequencer/block_producer.rs +++ b/crates/l2/sequencer/block_producer.rs @@ -1,3 +1,4 @@ +mod payload_builder; use std::{ sync::Arc, time::{Duration, SystemTime, UNIX_EPOCH}, @@ -12,6 +13,7 @@ use ethrex_common::Address; use ethrex_storage::Store; use ethrex_vm::BlockExecutionResult; use keccak_hash::H256; +use payload_builder::build_payload; use tokio::time::sleep; use tracing::{debug, error, info}; @@ -100,31 +102,35 @@ impl BlockProducer { beacon_root: Some(head_beacon_block_root), version, }; - let mut payload = create_payload(&args, &store)?; + let payload = create_payload(&args, &store)?; // Blockchain builds the payload from mempool txs and executes them - let payload_build_result = blockchain.build_payload(&mut payload).await?; - info!("Built payload for new block {}", payload.header.number); + let payload_build_result = build_payload(blockchain.clone(), payload, &store).await?; + info!( + "Built payload for new block {}", + payload_build_result.payload.header.number + ); // Blockchain stores block - let block = payload; + let block = payload_build_result.payload; let chain_config = store.get_chain_config()?; validate_block(&block, &head_header, &chain_config)?; + let account_updates = payload_build_result.account_updates; + let execution_result = BlockExecutionResult { - account_updates: payload_build_result.account_updates, receipts: payload_build_result.receipts, requests: Vec::new(), }; blockchain - .store_block(&block, execution_result.clone()) + .store_block(&block, execution_result.clone(), &account_updates) .await?; info!("Stored new block {:x}", block.hash()); // WARN: We're not storing the payload into the Store because there's no use to it by the L2 for now. // Cache execution result - execution_cache.push(block.hash(), execution_result.account_updates)?; + execution_cache.push(block.hash(), account_updates)?; // Make the new head be part of the canonical chain apply_fork_choice(&store, block.hash(), block.hash(), block.hash()).await?; diff --git a/crates/l2/sequencer/block_producer/payload_builder.rs b/crates/l2/sequencer/block_producer/payload_builder.rs new file mode 100644 index 0000000000..7533e10a7f --- /dev/null +++ b/crates/l2/sequencer/block_producer/payload_builder.rs @@ -0,0 +1,314 @@ +use std::collections::HashMap; +use std::sync::Arc; + +use ethrex_blockchain::{ + constants::TX_GAS_COST, + payload::{PayloadBuildContext, PayloadBuildResult}, + Blockchain, +}; +use ethrex_common::{ + types::{AccountInfo, Block, Receipt, Transaction, SAFE_BYTES_PER_BLOB}, + Address, +}; +use ethrex_metrics::metrics; + +#[cfg(feature = "metrics")] +use ethrex_metrics::metrics_transactions::{MetricsTxStatus, MetricsTxType, METRICS_TX}; +use ethrex_storage::Store; +use std::ops::Div; +use tokio::time::Instant; +use tracing::debug; + +use crate::{ + sequencer::{errors::BlockProducerError, state_diff::get_nonce_diff}, + utils::helpers::{is_deposit_l2, is_withdrawal_l2}, +}; + +// transactions_root(H256) + receipts_root(H256) + gas_limit(u64) + gas_used(u64) + timestamp(u64) + base_fee_per_gas(u64). +// 32bytes + 32bytes + 8bytes + 8bytes + 8bytes + 8bytes +const HEADER_FIELDS_SIZE: usize = 96; + +// address(H160) + amount(U256) + tx_hash(H256). +// 20bytes + 32bytes + 32bytes. +const L2_WITHDRAWAL_SIZE: usize = 84; + +// address(H160) + amount(U256). +// 20bytes + 32bytes +const L2_DEPOSIT_SIZE: usize = 52; + +// State diff size for a simple transfer. +// Two `AccountUpdates` with new_balance, one of which also has nonce_diff. +const TX_STATE_DIFF_SIZE: usize = 116; + +/// L2 payload builder +/// Completes the payload building process, return the block value +/// Same as `blockchain::build_payload` without applying system operations and using a different `fill_transactions` +pub async fn build_payload( + blockchain: Arc, + payload: Block, + store: &Store, +) -> Result { + let since = Instant::now(); + let gas_limit = payload.header.gas_limit; + + debug!("Building payload"); + let mut context = PayloadBuildContext::new(payload, blockchain.evm_engine, store)?; + + blockchain.apply_withdrawals(&mut context)?; + fill_transactions(blockchain.clone(), &mut context, store).await?; + blockchain.extract_requests(&mut context)?; + blockchain.finalize_payload(&mut context).await?; + + let interval = Instant::now().duration_since(since).as_millis(); + tracing::info!("[METRIC] BUILDING PAYLOAD TOOK: {interval} ms"); + #[allow(clippy::as_conversions)] + if let Some(gas_used) = gas_limit.checked_sub(context.remaining_gas) { + let as_gigas = (gas_used as f64).div(10_f64.powf(9_f64)); + + if interval != 0 { + let throughput = (as_gigas) / (interval as f64) * 1000_f64; + tracing::info!( + "[METRIC] BLOCK BUILDING THROUGHPUT: {throughput} Gigagas/s TIME SPENT: {interval} msecs" + ); + } + } + + Ok(context.into()) +} + +/// Same as `blockchain::fill_transactions` but enforces that the `StateDiff` size +/// stays within the blob size limit after processing each transaction. +pub async fn fill_transactions( + blockchain: Arc, + context: &mut PayloadBuildContext, + store: &Store, +) -> Result<(), BlockProducerError> { + // Two bytes for the len + let (mut acc_withdrawals_size, mut acc_deposits_size): (usize, usize) = (2, 2); + let mut acc_state_diff_size = 0; + let mut accounts_info_cache = HashMap::new(); + + let chain_config = store.get_chain_config()?; + let max_blob_number_per_block: usize = chain_config + .get_fork_blob_schedule(context.payload.header.timestamp) + .map(|schedule| schedule.max) + .unwrap_or_default() + .try_into() + .unwrap_or_default(); + + debug!("Fetching transactions from mempool"); + // Fetch mempool transactions + let (mut plain_txs, mut blob_txs) = blockchain.fetch_mempool_transactions(context)?; + // Execute and add transactions to payload (if suitable) + loop { + // Check if we have enough gas to run more transactions + if context.remaining_gas < TX_GAS_COST { + debug!("No more gas to run transactions"); + break; + }; + + // Check if we have enough space for the StateDiff to run more transactions + if acc_state_diff_size + TX_STATE_DIFF_SIZE > SAFE_BYTES_PER_BLOB { + debug!("No more StateDiff space to run transactions"); + break; + }; + if !blob_txs.is_empty() && context.blobs_bundle.blobs.len() >= max_blob_number_per_block { + debug!("No more blob gas to run blob transactions"); + blob_txs.clear(); + } + // Fetch the next transactions + let (head_tx, is_blob) = match (plain_txs.peek(), blob_txs.peek()) { + (None, None) => break, + (None, Some(tx)) => (tx, true), + (Some(tx), None) => (tx, false), + (Some(a), Some(b)) if b < a => (b, true), + (Some(tx), _) => (tx, false), + }; + + let txs = if is_blob { + &mut blob_txs + } else { + &mut plain_txs + }; + + // Check if we have enough gas to run the transaction + if context.remaining_gas < head_tx.tx.gas_limit() { + debug!( + "Skipping transaction: {}, no gas left", + head_tx.tx.compute_hash() + ); + // We don't have enough gas left for the transaction, so we skip all txs from this account + txs.pop(); + continue; + } + + // TODO: maybe fetch hash too when filtering mempool so we don't have to compute it here (we can do this in the same refactor as adding timestamp) + let tx_hash = head_tx.tx.compute_hash(); + + // Check wether the tx is replay-protected + if head_tx.tx.protected() && !chain_config.is_eip155_activated(context.block_number()) { + // Ignore replay protected tx & all txs from the sender + // Pull transaction from the mempool + debug!("Ignoring replay-protected transaction: {}", tx_hash); + txs.pop(); + blockchain.remove_transaction_from_pool(&head_tx.tx.compute_hash())?; + continue; + } + + // Increment the total transaction counter + // CHECK: do we want it here to count every processed transaction + // or we want it before the return? + metrics!(METRICS_TX.inc_tx()); + + let previous_context = context.clone(); + + // Execute tx + let receipt = match blockchain.apply_transaction(&head_tx, context) { + Ok(receipt) => { + // This call is the part that differs from the original `fill_transactions`. + if !update_state_diff_size( + &mut acc_withdrawals_size, + &mut acc_deposits_size, + &mut acc_state_diff_size, + head_tx.clone().into(), + &receipt, + context, + &mut accounts_info_cache, + ) + .await? + { + debug!( + "Skipping transaction: {}, doesn't fit in blob_size", + head_tx.tx.compute_hash() + ); + // We don't have enough space in the blob for the transaction, so we skip all txs from this account + txs.pop(); + *context = previous_context.clone(); + continue; + } + txs.shift()?; + // Pull transaction from the mempool + blockchain.remove_transaction_from_pool(&head_tx.tx.compute_hash())?; + + metrics!(METRICS_TX.inc_tx_with_status_and_type( + MetricsTxStatus::Succeeded, + MetricsTxType(head_tx.tx_type()) + )); + receipt + } + // Ignore following txs from sender + Err(e) => { + debug!("Failed to execute transaction: {}, {e}", tx_hash); + metrics!(METRICS_TX.inc_tx_with_status_and_type( + MetricsTxStatus::Failed, + MetricsTxType(head_tx.tx_type()) + )); + txs.pop(); + continue; + } + }; + // Add transaction to block + debug!("Adding transaction: {} to payload", tx_hash); + context.payload.body.transactions.push(head_tx.into()); + // Save receipt for hash calculation + context.receipts.push(receipt); + } + Ok(()) +} + +/// Calculates the size of the current `StateDiff` of the block. +/// If the current size exceeds the blob size limit, returns `Ok(false)`. +/// If there is still space in the blob, returns `Ok(true)`. +/// Updates the following mutable variables in the process: +/// - `acc_withdrawals_size`: Accumulated size of withdrawals (incremented by L2_WITHDRAWAL_SIZE if tx is withdrawal) +/// - `acc_deposits_size`: Accumulated size of deposits (incremented by L2_DEPOSIT_SIZE if tx is deposit) +/// - `acc_state_diff_size`: Set to current total state diff size if within limit +/// - `context`: Must be mutable because `get_state_transitions` requires mutable access +/// - `accounts_info_cache`: When calculating account updates, we store account info in the cache if it's not already present +/// +/// StateDiff: +/// +-------------------+ +/// | Version | +/// | HeaderFields | +/// | AccountsStateDiff | +/// | Withdrawals | +/// | Deposits | +/// +-------------------+ +async fn update_state_diff_size( + acc_withdrawals_size: &mut usize, + acc_deposits_size: &mut usize, + acc_state_diff_size: &mut usize, + tx: Transaction, + receipt: &Receipt, + context: &mut PayloadBuildContext, + accounts_info_cache: &mut HashMap>, +) -> Result { + if is_withdrawal_l2(&tx, receipt)? { + *acc_withdrawals_size += L2_WITHDRAWAL_SIZE; + } + if is_deposit_l2(&tx) { + *acc_deposits_size += L2_DEPOSIT_SIZE; + } + let modified_accounts_size = calc_modified_accounts_size(context, accounts_info_cache).await?; + + let current_state_diff_size = 1 /* version (u8) */ + HEADER_FIELDS_SIZE + *acc_withdrawals_size + *acc_deposits_size + modified_accounts_size; + + if current_state_diff_size > SAFE_BYTES_PER_BLOB { + // Restore the withdrawals and deposits counters. + if is_withdrawal_l2(&tx, receipt)? { + *acc_withdrawals_size -= L2_WITHDRAWAL_SIZE; + } + if is_deposit_l2(&tx) { + *acc_deposits_size -= L2_DEPOSIT_SIZE; + } + debug!( + "Blob size limit exceeded. current_state_diff_size: {}", + current_state_diff_size + ); + return Ok(false); + } + *acc_state_diff_size = current_state_diff_size; + Ok(true) +} + +async fn calc_modified_accounts_size( + context: &mut PayloadBuildContext, + accounts_info_cache: &mut HashMap>, +) -> Result { + let mut modified_accounts_size: usize = 2; // 2bytes | modified_accounts_len(u16) + + // We use a temporary_context because `get_state_transitions` mutates it. + let mut temporary_context = context.clone(); + + let chain_config = &context.store.get_chain_config()?; + let fork = chain_config.fork(context.payload.header.timestamp); + let account_updates = temporary_context.vm.get_state_transitions(fork)?; + for account_update in account_updates { + modified_accounts_size += 1 + 20; // 1byte + 20bytes | r#type(u8) + address(H160) + if account_update.info.is_some() { + modified_accounts_size += 32; // 32bytes | new_balance(U256) + } + + let nonce_diff = get_nonce_diff( + &account_update, + &context.store, + Some(accounts_info_cache), + context.block_number(), + ) + .await + .map_err(|e| { + BlockProducerError::Custom(format!("Block Producer failed to get nonce diff: {e}")) + })?; + if nonce_diff != 0 { + modified_accounts_size += 2; // 2bytes | nonce_diff(u16) + } + // for each added_storage: 32bytes + 32bytes | key(H256) + value(U256) + modified_accounts_size += account_update.added_storage.len() * 2 * 32; + + if let Some(bytecode) = &account_update.code { + modified_accounts_size += 2; // 2bytes | bytecode_len(u16) + modified_accounts_size += bytecode.len(); // (len)bytes | bytecode(Bytes) + } + } + Ok(modified_accounts_size) +} diff --git a/crates/l2/sequencer/errors.rs b/crates/l2/sequencer/errors.rs index 8af70aff6b..d6378a9152 100644 --- a/crates/l2/sequencer/errors.rs +++ b/crates/l2/sequencer/errors.rs @@ -1,4 +1,5 @@ use crate::utils::config::errors::ConfigError; +use crate::utils::error::UtilsError; use crate::utils::prover::errors::SaveStateError; use ethereum_types::FromStrRadixErr; use ethrex_blockchain::error::{ChainError, InvalidForkChoice}; @@ -83,6 +84,12 @@ pub enum BlockProducerError { FailedToDecodeJWT(#[from] hex::FromHexError), #[error("Block Producer failed because of an execution cache error")] ExecutionCache(#[from] ExecutionCacheError), + #[error("Interval does not fit in u64")] + TryIntoError(#[from] std::num::TryFromIntError), + #[error("{0}")] + Custom(String), + #[error("Failed to parse withdrawal: {0}")] + FailedToParseWithdrawal(#[from] UtilsError), } #[derive(Debug, thiserror::Error)] @@ -97,8 +104,6 @@ pub enum CommitterError { ExecutionCache(#[from] ExecutionCacheError), #[error("Committer failed retrieve data from storage")] FailedToRetrieveDataFromStorage, - #[error("Committer registered a negative nonce in AccountUpdate")] - FailedToCalculateNonce, #[error("Committer failed to generate blobs bundle: {0}")] FailedToGenerateBlobsBundle(#[from] BlobsBundleError), #[error("Committer failed to get information from storage")] @@ -125,6 +130,8 @@ pub enum CommitterError { CalldataEncodeError(#[from] CalldataEncodeError), #[error("Unexpected Error: {0}")] InternalError(String), + #[error("Failed to get withdrawals: {0}")] + FailedToGetWithdrawals(#[from] UtilsError), } #[derive(Debug, thiserror::Error)] @@ -159,6 +166,10 @@ pub enum StateDiffError { LengthTooBig(#[from] core::num::TryFromIntError), #[error("DB Error: {0}")] DbError(#[from] TrieError), + #[error("Store Error: {0}")] + StoreError(#[from] StoreError), + #[error("New nonce is lower than the previous one")] + FailedToCalculateNonce, } #[derive(Debug, thiserror::Error)] diff --git a/crates/l2/sequencer/l1_committer.rs b/crates/l2/sequencer/l1_committer.rs index ccf6754232..e94464bf0c 100644 --- a/crates/l2/sequencer/l1_committer.rs +++ b/crates/l2/sequencer/l1_committer.rs @@ -1,9 +1,12 @@ use crate::{ sequencer::{ errors::CommitterError, - state_diff::{AccountStateDiff, DepositLog, StateDiff, WithdrawalLog}, + state_diff::{get_nonce_diff, AccountStateDiff, DepositLog, StateDiff, WithdrawalLog}, + }, + utils::{ + config::{committer::CommitterConfig, errors::ConfigError, eth::EthConfig}, + helpers::is_withdrawal_l2, }, - utils::config::{committer::CommitterConfig, errors::ConfigError, eth::EthConfig}, }; use ethrex_common::{ @@ -15,15 +18,15 @@ use ethrex_common::{ Address, H256, U256, }; use ethrex_l2_sdk::calldata::{encode_calldata, Value}; -use ethrex_l2_sdk::{get_withdrawal_hash, merkle_tree::merkelize, COMMON_BRIDGE_L2_ADDRESS}; +use ethrex_l2_sdk::{get_withdrawal_hash, merkle_tree::merkelize}; use ethrex_rpc::clients::eth::{ eth_sender::Overrides, BlockByNumber, EthClient, WrappedTransaction, }; -use ethrex_storage::{error::StoreError, AccountUpdate, Store}; +use ethrex_storage::{AccountUpdate, Store}; use ethrex_vm::Evm; use keccak_hash::keccak; use secp256k1::SecretKey; -use std::{collections::HashMap, str::FromStr, sync::Arc}; +use std::{collections::HashMap, sync::Arc}; use tracing::{debug, error, info, warn}; use super::{errors::BlobEstimationError, execution_cache::ExecutionCache, utils::sleep_random}; @@ -147,9 +150,13 @@ impl Committer { warn!( "Could not find execution cache result for block {block_number}, falling back to re-execution" ); - Evm::default(self.store.clone(), block_to_commit.header.parent_hash) - .execute_block(&block_to_commit) - .map(|result| result.account_updates)? + let mut vm = Evm::default(self.store.clone(), block_to_commit.header.parent_hash); + vm.execute_block(&block_to_commit)?; + let fork = self + .store + .get_chain_config()? + .fork(block_to_commit.header.timestamp); + vm.get_state_transitions(fork)? } }; @@ -189,26 +196,13 @@ impl Committer { &self, txs_and_receipts: &[(Transaction, Receipt)], ) -> Result, CommitterError> { - // WithdrawalInitiated(address,address,uint256) - let withdrawal_event_selector: H256 = - H256::from_str("bb2689ff876f7ef453cf8865dde5ab10349d222e2e1383c5152fbdb083f02da2").map_err(|_| CommitterError::InternalError("Failed to convert WithdrawalInitiated event selector to H256. This should never happen.".to_owned()))?; let mut ret = vec![]; for (tx, receipt) in txs_and_receipts { - match tx.to() { - TxKind::Call(to) if to == COMMON_BRIDGE_L2_ADDRESS => { - if receipt.logs.iter().any(|log| { - log.topics - .iter() - .any(|topic| *topic == withdrawal_event_selector) - }) { - ret.push((tx.compute_hash(), tx.clone())) - } - } - _ => continue, + if is_withdrawal_l2(tx, receipt)? { + ret.push((tx.compute_hash(), tx.clone())) } } - Ok(ret) } @@ -278,33 +272,18 @@ impl Committer { let mut modified_accounts = HashMap::new(); for account_update in account_updates { - let prev_nonce = match store - // If we want the state_diff of a batch, we will have to change the -1 with the `batch_size` - // and we may have to keep track of the latestCommittedBlock (last block of the batch), - // the batch_size and the latestCommittedBatch in the contract. - .get_account_info(block.header.number - 1, account_update.address) + // If we want the state_diff of a batch, we will have to change the -1 with the `batch_size` + // and we may have to keep track of the latestCommittedBlock (last block of the batch), + // the batch_size and the latestCommittedBatch in the contract. + let nonce_diff = get_nonce_diff(account_update, &store, None, block.header.number) .await - .map_err(StoreError::from)? - { - Some(acc) => acc.nonce, - None => 0, - }; - - let new_nonce = if let Some(info) = &account_update.info { - info.nonce - } else { - prev_nonce - }; + .map_err(CommitterError::from)?; modified_accounts.insert( account_update.address, AccountStateDiff { new_balance: account_update.info.clone().map(|info| info.balance), - nonce_diff: new_nonce - .checked_sub(prev_nonce) - .ok_or(CommitterError::FailedToCalculateNonce)? - .try_into() - .map_err(CommitterError::from)?, + nonce_diff, storage: account_update.added_storage.clone().into_iter().collect(), bytecode: account_update.code.clone(), bytecode_hash: None, diff --git a/crates/l2/sequencer/state_diff.rs b/crates/l2/sequencer/state_diff.rs index c4b33aaf99..342fcf385a 100644 --- a/crates/l2/sequencer/state_diff.rs +++ b/crates/l2/sequencer/state_diff.rs @@ -2,9 +2,9 @@ use std::collections::HashMap; use bytes::Bytes; use ethereum_types::{Address, H256, U256}; -use ethrex_common::types::{code_hash, AccountInfo, AccountState, BlockHeader}; +use ethrex_common::types::{code_hash, AccountInfo, AccountState, BlockHeader, BlockNumber}; use ethrex_rlp::decode::RLPDecode; -use ethrex_storage::{hash_address, AccountUpdate}; +use ethrex_storage::{error::StoreError, hash_address, AccountUpdate, Store}; use ethrex_trie::Trie; use super::errors::StateDiffError; @@ -490,3 +490,73 @@ impl Decoder { Ok(Bytes::copy_from_slice(res)) } } + +/// Calculates nonce_diff between current and previous block. +/// Uses cache if provided to optimize account_info lookups. +pub async fn get_nonce_diff( + account_update: &AccountUpdate, + store: &Store, + accounts_info_cache: Option<&mut HashMap>>, + current_block_number: BlockNumber, +) -> Result { + // Get previous account_info either from store or cache + let account_info = match accounts_info_cache { + None => store + .get_account_info(current_block_number - 1, account_update.address) + .await + .map_err(StoreError::from)?, + Some(cache) => { + account_info_from_cache( + cache, + store, + account_update.address, + current_block_number - 1, + ) + .await? + } + }; + + // Get previous nonce + let prev_nonce = match account_info { + Some(info) => info.nonce, + None => 0, + }; + + // Get current nonce + let new_nonce = if let Some(info) = account_update.info.clone() { + info.nonce + } else { + prev_nonce + }; + + // Calculate nonce diff + let nonce_diff = new_nonce + .checked_sub(prev_nonce) + .ok_or(StateDiffError::FailedToCalculateNonce)? + .try_into() + .map_err(StateDiffError::from)?; + + Ok(nonce_diff) +} + +/// Retrieves account info from cache or falls back to store. +/// Updates cache with fresh data if cache miss occurs. +async fn account_info_from_cache( + cache: &mut HashMap>, + store: &Store, + address: Address, + block_number: BlockNumber, +) -> Result, StateDiffError> { + let account_info = match cache.get(&address) { + Some(account_info) => account_info.clone(), + None => { + let account_info = store + .get_account_info(block_number, address) + .await + .map_err(StoreError::from)?; + cache.insert(address, account_info.clone()); + account_info + } + }; + Ok(account_info) +} diff --git a/crates/l2/tests/tests.rs b/crates/l2/tests/tests.rs index 7496dd70b2..4133f83ef4 100644 --- a/crates/l2/tests/tests.rs +++ b/crates/l2/tests/tests.rs @@ -453,27 +453,20 @@ async fn l2_deposit_with_contract_call() -> Result<(), Box Result<(), Box Result<(), Box Result<(), Box Result { + // WithdrawalInitiated(address,address,uint256) + let withdrawal_event_selector: H256 = + H256::from_str("bb2689ff876f7ef453cf8865dde5ab10349d222e2e1383c5152fbdb083f02da2") + .map_err(|e| UtilsError::WithdrawalSelectorError(e.to_string()))?; + + let is_withdrawal = match tx.to() { + TxKind::Call(to) if to == COMMON_BRIDGE_L2_ADDRESS => receipt.logs.iter().any(|log| { + log.topics + .iter() + .any(|topic| *topic == withdrawal_event_selector) + }), + _ => false, + }; + Ok(is_withdrawal) +} + +pub fn is_deposit_l2(tx: &Transaction) -> bool { + matches!(tx, Transaction::PrivilegedL2Transaction(_tx)) +} diff --git a/crates/l2/utils/mod.rs b/crates/l2/utils/mod.rs index 04d38e0aae..5591808462 100644 --- a/crates/l2/utils/mod.rs +++ b/crates/l2/utils/mod.rs @@ -1,5 +1,6 @@ pub mod config; pub mod error; +pub mod helpers; pub mod parse; pub mod prover; pub mod test_data_io; diff --git a/crates/l2/utils/prover/save_state.rs b/crates/l2/utils/prover/save_state.rs index 1c81a88cd6..8a0566796b 100644 --- a/crates/l2/utils/prover/save_state.rs +++ b/crates/l2/utils/prover/save_state.rs @@ -454,9 +454,9 @@ mod tests { block_hash: block.hash(), }; let mut db = GeneralizedDatabase::new(Arc::new(store.clone()), CacheDB::new()); - let account_updates = LEVM::execute_block(blocks.last().unwrap(), &mut db) - .unwrap() - .account_updates; + LEVM::execute_block(blocks.last().unwrap(), &mut db)?; + let fork = db.store.get_chain_config().fork(block.header.timestamp); + let account_updates = LEVM::get_state_transitions(&mut db, fork)?; account_updates_vec.push(account_updates.clone()); diff --git a/crates/networking/p2p/rlpx/error.rs b/crates/networking/p2p/rlpx/error.rs index 53aaa0fcbf..363e3a02e9 100644 --- a/crates/networking/p2p/rlpx/error.rs +++ b/crates/networking/p2p/rlpx/error.rs @@ -49,6 +49,8 @@ pub(crate) enum RLPxError { MempoolError(#[from] MempoolError), #[error("Io Error: {0}")] IoError(#[from] std::io::Error), + #[error("Failed to decode message due to invalid frame: {0}")] + InvalidMessageFrame(String), } // tokio::sync::mpsc::error::SendError is too large to be part of the RLPxError enum directly diff --git a/crates/networking/p2p/rlpx/frame.rs b/crates/networking/p2p/rlpx/frame.rs index 30faf96a5a..9dd17fa451 100644 --- a/crates/networking/p2p/rlpx/frame.rs +++ b/crates/networking/p2p/rlpx/frame.rs @@ -113,9 +113,11 @@ impl Decoder for RLPxCodec { .map_err(|_| RLPxError::CryptographyError("Invalid header mac".to_owned()))?, ); - // TODO: replace these assert_eq! by actual errors - // https://github.com/lambdaclass/ethrex/issues/1748 - assert_eq!(header_mac, expected_header_mac.0); + if header_mac != expected_header_mac.0 { + return Err(RLPxError::InvalidMessageFrame( + "Mismatched header mac".to_string(), + )); + } let header_text = header_ciphertext; // Use temporary value as it can be discarded if the buffer does not contain yet the full message @@ -175,9 +177,11 @@ impl Decoder for RLPxCodec { .try_into() .map_err(|_| RLPxError::CryptographyError("Invalid frame mac".to_owned()))?; - // TODO: replace these assert_eq! by actual errors - // https://github.com/lambdaclass/ethrex/issues/1748 - assert_eq!(frame_mac, expected_frame_mac); + if frame_mac != expected_frame_mac { + return Err(RLPxError::InvalidMessageFrame( + "Mismatched frame mac".to_string(), + )); + } // decrypt frame self.ingress_aes.apply_keystream(frame_ciphertext); diff --git a/crates/networking/p2p/sync.rs b/crates/networking/p2p/sync.rs index 7273d7e5de..d3ae9a2798 100644 --- a/crates/networking/p2p/sync.rs +++ b/crates/networking/p2p/sync.rs @@ -600,11 +600,14 @@ impl Syncer { // Spawn storage healer earlier so we can start healing stale storages // Create a cancellation token so we can end the storage healer when finished, make it a child so that it also ends upon shutdown let storage_healer_cancell_token = self.cancel_token.child_token(); + // Create an AtomicBool to signal to the storage healer whether state healing has ended + let state_healing_ended = Arc::new(AtomicBool::new(false)); let storage_healer_handler = tokio::spawn(storage_healer( state_root, self.peers.clone(), store.clone(), storage_healer_cancell_token.clone(), + state_healing_ended.clone(), )); // Perform state sync if it was not already completed on a previous cycle // Retrieve storage data to check which snap sync phase we are in @@ -651,7 +654,11 @@ impl Syncer { let state_heal_complete = heal_state_trie(state_root, store.clone(), self.peers.clone()).await?; // Wait for storage healer to end - storage_healer_cancell_token.cancel(); + if state_heal_complete { + state_healing_ended.store(true, Ordering::Relaxed); + } else { + storage_healer_cancell_token.cancel(); + } let storage_heal_complete = storage_healer_handler.await??; if !(state_heal_complete && storage_heal_complete) { warn!("Stale pivot, aborting healing"); @@ -670,13 +677,13 @@ fn node_missing_children( match &node { Node::Branch(node) => { for (index, child) in node.choices.iter().enumerate() { - if child.is_valid() && trie_state.get_node(child.clone())?.is_none() { + if child.is_valid() && trie_state.get_node(*child)?.is_none() { paths.push(parent_path.append_new(index as u8)); } } } Node::Extension(node) => { - if node.child.is_valid() && trie_state.get_node(node.child.clone())?.is_none() { + if node.child.is_valid() && trie_state.get_node(node.child)?.is_none() { paths.push(parent_path.concat(node.prefix.clone())); } } diff --git a/crates/networking/p2p/sync/state_healing.rs b/crates/networking/p2p/sync/state_healing.rs index 1fa1192335..9ea8e081ec 100644 --- a/crates/networking/p2p/sync/state_healing.rs +++ b/crates/networking/p2p/sync/state_healing.rs @@ -8,7 +8,7 @@ //! This process will stop once it has fixed all trie inconsistencies or when the pivot becomes stale, in which case it can be resumed on the next cycle //! All healed accounts will also have their bytecodes and storages healed by the corresponding processes -use std::cmp::min; +use std::{cmp::min, time::Instant}; use ethrex_common::{ types::{AccountState, EMPTY_KECCACK_HASH}, @@ -18,13 +18,13 @@ use ethrex_rlp::decode::RLPDecode; use ethrex_storage::Store; use ethrex_trie::{Nibbles, Node, EMPTY_TRIE_HASH}; use tokio::sync::mpsc::{channel, Sender}; -use tracing::debug; +use tracing::{debug, info}; use crate::{ peer_handler::PeerHandler, sync::{ bytecode_fetcher, node_missing_children, MAX_CHANNEL_MESSAGES, MAX_PARALLEL_FETCHES, - NODE_BATCH_SIZE, + NODE_BATCH_SIZE, SHOW_PROGRESS_INTERVAL_DURATION, }, }; @@ -47,7 +47,12 @@ pub(crate) async fn heal_state_trie( )); // Add the current state trie root to the pending paths paths.push(Nibbles::default()); + let mut last_update = Instant::now(); while !paths.is_empty() { + if last_update.elapsed() >= SHOW_PROGRESS_INTERVAL_DURATION { + last_update = Instant::now(); + info!("State Healing in Progress, pending paths: {}", paths.len()); + } // Spawn multiple parallel requests let mut state_tasks = tokio::task::JoinSet::new(); for _ in 0..MAX_PARALLEL_FETCHES { diff --git a/crates/networking/p2p/sync/storage_healing.rs b/crates/networking/p2p/sync/storage_healing.rs index ac0729e924..d94994e040 100644 --- a/crates/networking/p2p/sync/storage_healing.rs +++ b/crates/networking/p2p/sync/storage_healing.rs @@ -5,13 +5,20 @@ //! For each storage received, the process will first queue their root nodes and then queue all the missing children from each node fetched in the same way as state healing //! Even if the pivot becomes stale, the healer will remain active and listening until a termination signal (an empty batch) is received -use std::collections::BTreeMap; +use std::{ + collections::BTreeMap, + sync::{ + atomic::{AtomicBool, Ordering}, + Arc, + }, +}; use ethrex_common::H256; use ethrex_storage::Store; use ethrex_trie::{Nibbles, EMPTY_TRIE_HASH}; +use tokio::time::Instant; use tokio_util::sync::CancellationToken; -use tracing::debug; +use tracing::{debug, info}; use crate::{peer_handler::PeerHandler, sync::node_missing_children}; @@ -19,7 +26,7 @@ use crate::{peer_handler::PeerHandler, sync::node_missing_children}; /// More paths will be read from the Store if the amount goes below this value const MINUMUM_STORAGES_IN_QUEUE: usize = 400; -use super::{SyncError, MAX_PARALLEL_FETCHES, NODE_BATCH_SIZE}; +use super::{SyncError, MAX_PARALLEL_FETCHES, NODE_BATCH_SIZE, SHOW_PROGRESS_INTERVAL_DURATION}; /// Waits for incoming hashed addresses from the receiver channel endpoint and queues the associated root nodes for state retrieval /// Also retrieves their children nodes until we have the full storage trie stored @@ -30,13 +37,20 @@ pub(crate) async fn storage_healer( peers: PeerHandler, store: Store, cancel_token: CancellationToken, + state_healing_ended: Arc, ) -> Result { // List of paths in need of healing, grouped by hashed address let mut pending_paths = BTreeMap::>::new(); - // The pivot may become stale while the fetcher is active, we will still keep the process - // alive until the end signal so we don't lose queued messages let mut stale = false; + let mut last_update = Instant::now(); while !(stale || cancel_token.is_cancelled()) { + if last_update.elapsed() >= SHOW_PROGRESS_INTERVAL_DURATION { + last_update = Instant::now(); + info!( + "Storage Healing in Progress, storages queued: {}", + pending_paths.len() + ); + } // If we have few storages in queue, fetch more from the store // We won't be retrieving all of them as the read can become quite long and we may not end up using all of the paths in this cycle if pending_paths.len() < MINUMUM_STORAGES_IN_QUEUE { @@ -47,6 +61,10 @@ pub(crate) async fn storage_healer( .into_iter(), ); } + // If we have no more pending paths even after reading from the store, and state healing has finished, cut the loop + if pending_paths.is_empty() && state_healing_ended.load(Ordering::Relaxed) { + break; + } // If we have enough pending storages to fill a batch // or if we have no more incoming batches, spawn a fetch process // If the pivot became stale don't process anything and just save incoming requests diff --git a/crates/networking/p2p/sync_manager.rs b/crates/networking/p2p/sync_manager.rs index b2c2409fed..77a7885775 100644 --- a/crates/networking/p2p/sync_manager.rs +++ b/crates/networking/p2p/sync_manager.rs @@ -18,6 +18,7 @@ use crate::{ sync::{SyncMode, Syncer}, }; +#[derive(Debug)] pub enum SyncStatus { Active(SyncMode), Inactive, @@ -62,7 +63,7 @@ impl SyncManager { .await .is_ok_and(|res| res.is_some()) { - sync_manager.start_sync().await; + sync_manager.start_sync(); } sync_manager } @@ -100,15 +101,17 @@ impl SyncManager { /// Attempts to sync to the last received fcu head /// Will do nothing if the syncer is already involved in a sync process /// If the sync process would require multiple sync cycles (such as snap sync), starts all required sync cycles until the sync is complete - pub async fn start_sync(&self) { + pub fn start_sync(&self) { let syncer = self.syncer.clone(); let store = self.store.clone(); - let Ok(Some(current_head)) = self.store.get_latest_canonical_block_hash().await else { - tracing::error!("Failed to fecth latest canonical block, unable to sync"); - return; - }; let sync_head = self.last_fcu_head.clone(); + tokio::spawn(async move { + let Ok(Some(current_head)) = store.get_latest_canonical_block_hash().await else { + tracing::error!("Failed to fecth latest canonical block, unable to sync"); + return; + }; + // If we can't get hold of the syncer, then it means that there is an active sync in process let Ok(mut syncer) = syncer.try_lock() else { return; @@ -147,7 +150,7 @@ impl SyncManager { } /// Returns the syncer's current syncmode (either snap or full) - fn sync_mode(&self) -> SyncMode { + pub fn sync_mode(&self) -> SyncMode { if self.snap_enabled.load(Ordering::Relaxed) { SyncMode::Snap } else { diff --git a/crates/networking/rpc/clients/auth/errors.rs b/crates/networking/rpc/clients/auth/errors.rs index d3ad4cdb38..260ee50944 100644 --- a/crates/networking/rpc/clients/auth/errors.rs +++ b/crates/networking/rpc/clients/auth/errors.rs @@ -13,7 +13,7 @@ pub enum EngineClientError { #[error("{0}")] FailedDuringExchangeCapabilities(#[from] ExchangeCapabilitiesError), #[error("{0}")] - FailedDuringForkChoiceUpdate(#[from] ForkChoiceUpdateError), + FailedDuringForkChoiceUpdate(#[from] ForkChoiceUpdatedError), #[error("{0}")] FailedDuringGetPayload(#[from] GetPayloadError), #[error("{0}")] @@ -45,7 +45,7 @@ pub enum ExchangeCapabilitiesError { } #[derive(Debug, thiserror::Error)] -pub enum ForkChoiceUpdateError { +pub enum ForkChoiceUpdatedError { #[error("{0}")] ReqwestError(#[from] reqwest::Error), #[error("{0}")] diff --git a/crates/networking/rpc/clients/auth/mod.rs b/crates/networking/rpc/clients/auth/mod.rs index f24ad53f6b..4d72ffc8b5 100644 --- a/crates/networking/rpc/clients/auth/mod.rs +++ b/crates/networking/rpc/clients/auth/mod.rs @@ -1,7 +1,7 @@ use crate::{ engine::{ fork_choice::ForkChoiceUpdatedV3, - payload::{GetPayloadV3Request, NewPayloadV3Request}, + payload::{GetPayloadV4Request, NewPayloadV4Request}, ExchangeCapabilitiesRequest, }, types::{ @@ -12,7 +12,7 @@ use crate::{ }; use bytes::Bytes; use errors::{ - EngineClientError, ExchangeCapabilitiesError, ForkChoiceUpdateError, GetPayloadError, + EngineClientError, ExchangeCapabilitiesError, ForkChoiceUpdatedError, GetPayloadError, NewPayloadError, }; use ethrex_common::H256; @@ -69,11 +69,12 @@ impl EngineClient { .map_err(ExchangeCapabilitiesError::SerdeJSONError) .map_err(EngineClientError::from), Ok(RpcResponse::Error(error_response)) => { - Err(ExchangeCapabilitiesError::RPCError(format!( - "{}: {:?}", - error_response.error.message, error_response.error.data - )) - .into()) + let error_message = if let Some(data) = error_response.error.data { + format!("{}: {:?}", error_response.error.message, data) + } else { + error_response.error.message.to_string() + }; + Err(ExchangeCapabilitiesError::RPCError(error_message).into()) } Err(error) => Err(error), } @@ -91,48 +92,53 @@ impl EngineClient { match self.send_request(request).await { Ok(RpcResponse::Success(result)) => serde_json::from_value(result.result) - .map_err(ForkChoiceUpdateError::SerdeJSONError) + .map_err(ForkChoiceUpdatedError::SerdeJSONError) .map_err(EngineClientError::from), Ok(RpcResponse::Error(error_response)) => { - Err(ForkChoiceUpdateError::RPCError(format!( - "{}: {:?}", - error_response.error.message, error_response.error.data - )) - .into()) + let error_message = if let Some(data) = error_response.error.data { + format!("{}: {:?}", error_response.error.message, data) + } else { + error_response.error.message.to_string() + }; + Err(ForkChoiceUpdatedError::RPCError(error_message).into()) } Err(error) => Err(error), } } - pub async fn engine_get_payload_v3( + pub async fn engine_get_payload_v4( &self, payload_id: u64, ) -> Result { - let request = GetPayloadV3Request { payload_id }.into(); + let request = GetPayloadV4Request { payload_id }.into(); match self.send_request(request).await { Ok(RpcResponse::Success(result)) => serde_json::from_value(result.result) .map_err(GetPayloadError::SerdeJSONError) .map_err(EngineClientError::from), - Ok(RpcResponse::Error(error_response)) => Err(GetPayloadError::RPCError(format!( - "{}: {:?}", - error_response.error.message, error_response.error.data - )) - .into()), + Ok(RpcResponse::Error(error_response)) => { + let error_message = if let Some(data) = error_response.error.data { + format!("{}: {:?}", error_response.error.message, data) + } else { + error_response.error.message.to_string() + }; + Err(GetPayloadError::RPCError(error_message).into()) + } Err(error) => Err(error), } } - pub async fn engine_new_payload_v3( + pub async fn engine_new_payload_v4( &self, execution_payload: ExecutionPayload, expected_blob_versioned_hashes: Vec, parent_beacon_block_root: H256, ) -> Result { - let request = NewPayloadV3Request { + let request = NewPayloadV4Request { payload: execution_payload, expected_blob_versioned_hashes, parent_beacon_block_root, + execution_requests: vec![], } .into(); @@ -140,11 +146,14 @@ impl EngineClient { Ok(RpcResponse::Success(result)) => serde_json::from_value(result.result) .map_err(NewPayloadError::SerdeJSONError) .map_err(EngineClientError::from), - Ok(RpcResponse::Error(error_response)) => Err(NewPayloadError::RPCError(format!( - "{}: {:?}", - error_response.error.message, error_response.error.data - )) - .into()), + Ok(RpcResponse::Error(error_response)) => { + let error_message = if let Some(data) = error_response.error.data { + format!("{}: {:?}", error_response.error.message, data) + } else { + error_response.error.message.to_string() + }; + Err(NewPayloadError::RPCError(error_message).into()) + } Err(error) => Err(error), } } @@ -165,7 +174,7 @@ impl EngineClient { "engine_exchangeCapabilities".to_owned(), "engine_forkchoiceUpdatedV3".to_owned(), "engine_getPayloadV4".to_owned(), - "engine_newPayloadV3".to_owned(), + "engine_newPayloadV4".to_owned(), ] } } diff --git a/crates/networking/rpc/engine/fork_choice.rs b/crates/networking/rpc/engine/fork_choice.rs index fed5bd907a..53fd5e3265 100644 --- a/crates/networking/rpc/engine/fork_choice.rs +++ b/crates/networking/rpc/engine/fork_choice.rs @@ -5,7 +5,7 @@ use ethrex_blockchain::{ payload::{create_payload, BuildPayloadArgs}, }; use ethrex_common::types::BlockHeader; -use ethrex_p2p::sync_manager::SyncStatus; +use ethrex_p2p::sync::SyncMode; use serde_json::Value; use tracing::{debug, info, warn}; @@ -211,63 +211,53 @@ async fn handle_forkchoice( fork_choice_state.finalized_block_hash ); - // Update fcu head in syncer - context.syncer.set_head(fork_choice_state.head_block_hash); - - let fork_choice_res = if let Some(latest_valid_hash) = context + if let Some(latest_valid_hash) = context .storage .get_latest_valid_ancestor(fork_choice_state.head_block_hash) .await? { - warn!( - "Invalid fork choice state. Reason: Invalid ancestor {:#x}", - latest_valid_hash - ); - Err(InvalidForkChoice::InvalidAncestor(latest_valid_hash)) - } else { - // Check parent block hash in invalid_ancestors (if head block exists) - let head_block = context - .storage - .get_block_header_by_hash(fork_choice_state.head_block_hash)?; - let check_parent = if let Some(head_block) = head_block { - debug!( - "Checking parent for invalid ancestor {}", - head_block.parent_hash - ); - context - .storage - .get_latest_valid_ancestor(head_block.parent_hash) - .await - .ok() - .flatten() - } else { - None - }; + return Ok(( + None, + ForkChoiceResponse::from(PayloadStatus::invalid_with( + latest_valid_hash, + InvalidForkChoice::InvalidAncestor(latest_valid_hash).to_string(), + )), + )); + } - // Check head block hash in invalid_ancestors - if let Some(latest_valid_hash) = check_parent { - Err(InvalidForkChoice::InvalidAncestor(latest_valid_hash)) - } else { - // Check if there is an ongoing sync before applying the forkchoice - match context.syncer.status()? { - // Apply current fork choice - SyncStatus::Inactive => { - // All checks passed, apply fork choice - apply_fork_choice( - &context.storage, - fork_choice_state.head_block_hash, - fork_choice_state.safe_block_hash, - fork_choice_state.finalized_block_hash, - ) - .await - } - // Restart sync if needed - _ => Err(InvalidForkChoice::Syncing), - } + // Check parent block hash in invalid_ancestors (if head block exists) + if let Some(head_block) = context + .storage + .get_block_header_by_hash(fork_choice_state.head_block_hash)? + { + if let Some(latest_valid_hash) = context + .storage + .get_latest_valid_ancestor(head_block.parent_hash) + .await? + { + return Ok(( + None, + ForkChoiceResponse::from(PayloadStatus::invalid_with( + latest_valid_hash, + InvalidForkChoice::InvalidAncestor(latest_valid_hash).to_string(), + )), + )); } - }; + } - match fork_choice_res { + if context.syncer.sync_mode() == SyncMode::Snap { + context.syncer.set_head(fork_choice_state.head_block_hash); + return Ok((None, PayloadStatus::syncing().into())); + } + + match apply_fork_choice( + &context.storage, + fork_choice_state.head_block_hash, + fork_choice_state.safe_block_hash, + fork_choice_state.finalized_block_hash, + ) + .await + { Ok(head) => { // Remove included transactions from the mempool after we accept the fork choice // TODO(#797): The remove of transactions from the mempool could be incomplete (i.e. REORGS) @@ -318,7 +308,8 @@ async fn handle_forkchoice( .update_sync_status(false) .await .map_err(|e| RpcErr::Internal(e.to_string()))?; - context.syncer.start_sync().await; + context.syncer.set_head(fork_choice_state.head_block_hash); + context.syncer.start_sync(); ForkChoiceResponse::from(PayloadStatus::syncing()) } InvalidForkChoice::Disconnected(_, _) | InvalidForkChoice::ElementNotFound(_) => { diff --git a/crates/networking/rpc/engine/payload.rs b/crates/networking/rpc/engine/payload.rs index b1545d70ee..6852e882e9 100644 --- a/crates/networking/rpc/engine/payload.rs +++ b/crates/networking/rpc/engine/payload.rs @@ -4,9 +4,9 @@ use ethrex_common::types::payload::PayloadBundle; use ethrex_common::types::requests::{compute_requests_hash, EncodedRequests}; use ethrex_common::types::{Block, BlockBody, BlockHash, BlockNumber, Fork}; use ethrex_common::{H256, U256}; -use ethrex_p2p::sync_manager::SyncStatus; +use ethrex_p2p::sync::SyncMode; use serde_json::Value; -use tracing::{debug, error, info, warn}; +use tracing::{error, info, warn}; use crate::rpc::{RpcApiContext, RpcHandler}; use crate::types::payload::{ @@ -34,7 +34,9 @@ impl RpcHandler for NewPayloadV1Request { async fn handle(&self, context: RpcApiContext) -> Result { validate_execution_payload_v1(&self.payload)?; - handle_new_payload_v1_v2(&self.payload, context).await + let block = get_block_from_payload(&self.payload, None, None)?; + let payload_status = handle_new_payload_v1_v2(&self.payload, block, context).await?; + serde_json::to_value(payload_status).map_err(|error| RpcErr::Internal(error.to_string())) } } @@ -58,7 +60,9 @@ impl RpcHandler for NewPayloadV2Request { validate_execution_payload_v1(&self.payload)?; } - handle_new_payload_v1_v2(&self.payload, context).await + let block = get_block_from_payload(&self.payload, None, None)?; + let payload_status = handle_new_payload_v1_v2(&self.payload, block, context).await?; + serde_json::to_value(payload_status).map_err(|error| RpcErr::Internal(error.to_string())) } } @@ -100,45 +104,6 @@ impl RpcHandler for NewPayloadV3Request { }) } - #[cfg(feature = "based")] - async fn relay_to_gateway_or_fallback( - req: &RpcRequest, - context: RpcApiContext, - ) -> Result { - info!("Relaying engine_getPayloadV3 to gateway"); - - let request = Self::parse(&req.params)?; - - let gateway_auth_client = context.gateway_auth_client.clone(); - - let gateway_request = gateway_auth_client.engine_new_payload_v3( - request.payload, - request.expected_blob_versioned_hashes, - request.parent_beacon_block_root, - ); - - let client_response = Self::call(req, context).await; - - let gateway_response = gateway_request - .await - .map_err(|err| { - RpcErr::Internal(format!( - "Could not relay engine_newPayloadV3 to gateway: {err}", - )) - }) - .and_then(|response| { - serde_json::to_value(response).map_err(|error| RpcErr::Internal(error.to_string())) - }); - - if gateway_response.is_err() { - warn!(error = ?gateway_response, "Gateway engine_newPayloadV3 failed, falling back to local node"); - } else { - info!("Successfully relayed engine_newPayloadV3 to gateway"); - } - - gateway_response.or(client_response) - } - async fn handle(&self, context: RpcApiContext) -> Result { let block = get_block_from_payload(&self.payload, Some(self.parent_beacon_block_root), None)?; @@ -161,6 +126,21 @@ pub struct NewPayloadV4Request { pub execution_requests: Vec, } +impl From for RpcRequest { + fn from(val: NewPayloadV4Request) -> Self { + RpcRequest { + method: "engine_newPayloadV4".to_string(), + params: Some(vec![ + serde_json::json!(val.payload), + serde_json::json!(val.expected_blob_versioned_hashes), + serde_json::json!(val.parent_beacon_block_root), + serde_json::json!(val.execution_requests), + ]), + ..Default::default() + } + } +} + impl RpcHandler for NewPayloadV4Request { fn parse(params: &Option>) -> Result { let params = params @@ -181,6 +161,45 @@ impl RpcHandler for NewPayloadV4Request { }) } + #[cfg(feature = "based")] + async fn relay_to_gateway_or_fallback( + req: &RpcRequest, + context: RpcApiContext, + ) -> Result { + info!("Relaying engine_getPayloadV3 to gateway"); + + let request = Self::parse(&req.params)?; + + let gateway_auth_client = context.gateway_auth_client.clone(); + + let gateway_request = gateway_auth_client.engine_new_payload_v4( + request.payload, + request.expected_blob_versioned_hashes, + request.parent_beacon_block_root, + ); + + let client_response = Self::call(req, context).await; + + let gateway_response = gateway_request + .await + .map_err(|err| { + RpcErr::Internal(format!( + "Could not relay engine_newPayloadV3 to gateway: {err}", + )) + }) + .and_then(|response| { + serde_json::to_value(response).map_err(|error| RpcErr::Internal(error.to_string())) + }); + + if gateway_response.is_err() { + warn!(error = ?gateway_response, "Gateway engine_newPayloadV3 failed, falling back to local node"); + } else { + info!("Successfully relayed engine_newPayloadV3 to gateway"); + } + + gateway_response.or(client_response) + } + async fn handle(&self, context: RpcApiContext) -> Result { // validate the received requests validate_execution_requests(&self.execution_requests)?; @@ -284,41 +303,6 @@ impl RpcHandler for GetPayloadV3Request { Ok(Self { payload_id }) } - #[cfg(feature = "based")] - async fn relay_to_gateway_or_fallback( - req: &RpcRequest, - context: RpcApiContext, - ) -> Result { - info!("Relaying engine_getPayloadV3 to gateway"); - - let request = Self::parse(&req.params)?; - - let gateway_auth_client = context.gateway_auth_client.clone(); - - let gateway_request = gateway_auth_client.engine_get_payload_v3(request.payload_id); - - let client_response = Self::call(req, context).await; - - let gateway_response = gateway_request - .await - .map_err(|err| { - RpcErr::Internal(format!( - "Could not relay engine_getPayloadV3 to gateway: {err}", - )) - }) - .and_then(|response| { - serde_json::to_value(response).map_err(|error| RpcErr::Internal(error.to_string())) - }); - - if gateway_response.is_err() { - warn!(error = ?gateway_response, "Gateway engine_getPayloadV3 failed, falling back to local node"); - } else { - info!("Successfully relayed engine_getPayloadV3 to gateway"); - } - - gateway_response.or(client_response) - } - async fn handle(&self, context: RpcApiContext) -> Result { let payload = get_payload(self.payload_id, &context).await?; validate_fork(&payload.block, Fork::Cancun, &context)?; @@ -356,6 +340,41 @@ impl RpcHandler for GetPayloadV4Request { Ok(Self { payload_id }) } + #[cfg(feature = "based")] + async fn relay_to_gateway_or_fallback( + req: &RpcRequest, + context: RpcApiContext, + ) -> Result { + info!("Relaying engine_getPayloadV3 to gateway"); + + let request = Self::parse(&req.params)?; + + let gateway_auth_client = context.gateway_auth_client.clone(); + + let gateway_request = gateway_auth_client.engine_get_payload_v4(request.payload_id); + + let client_response = Self::call(req, context).await; + + let gateway_response = gateway_request + .await + .map_err(|err| { + RpcErr::Internal(format!( + "Could not relay engine_getPayloadV4 to gateway: {err}", + )) + }) + .and_then(|response| { + serde_json::to_value(response).map_err(|error| RpcErr::Internal(error.to_string())) + }); + + if gateway_response.is_err() { + warn!(error = ?gateway_response, "Gateway engine_getPayloadV4 failed, falling back to local node"); + } else { + info!("Successfully relayed engine_getPayloadV4 to gateway"); + } + + gateway_response.or(client_response) + } + async fn handle(&self, context: RpcApiContext) -> Result { let payload = get_payload(self.payload_id, &context).await?; let chain_config = &context.storage.get_chain_config()?; @@ -557,36 +576,29 @@ async fn validate_ancestors( Ok(None) } -// TODO: We need to check why we return a Result here instead of a Result as in v3. async fn handle_new_payload_v1_v2( payload: &ExecutionPayload, + block: Block, context: RpcApiContext, -) -> Result { - let block = get_block_from_payload(payload, None, None)?; - - // Check sync status - match context.syncer.status()? { - SyncStatus::Active(_) => { - return serde_json::to_value(PayloadStatus::syncing()) - .map_err(|error| RpcErr::Internal(error.to_string())); - } - SyncStatus::Inactive => {} - } - +) -> Result { // Validate block hash if let Err(RpcErr::Internal(error_msg)) = validate_block_hash(payload, &block) { - return serde_json::to_value(PayloadStatus::invalid_with_err(&error_msg)) - .map_err(|error| RpcErr::Internal(error.to_string())); + return Ok(PayloadStatus::invalid_with_err(&error_msg)); } // Check for invalid ancestors if let Some(status) = validate_ancestors(&block, &context).await? { - return serde_json::to_value(status).map_err(|error| RpcErr::Internal(error.to_string())); + return Ok(status); + } + + if context.syncer.sync_mode() == SyncMode::Snap { + warn!("Snap sync in progress, skipping new payload validation"); + return Ok(PayloadStatus::syncing()); } // All checks passed, execute payload - let payload_status = execute_payload(&block, &context).await?; - serde_json::to_value(payload_status).map_err(|error| RpcErr::Internal(error.to_string())) + let payload_status = try_execute_payload(&block, &context).await?; + Ok(payload_status) } async fn handle_new_payload_v3( @@ -595,23 +607,6 @@ async fn handle_new_payload_v3( block: Block, expected_blob_versioned_hashes: Vec, ) -> Result { - // Ignore incoming - // Check sync status - match context.syncer.status()? { - SyncStatus::Active(_) => return Ok(PayloadStatus::syncing()), - SyncStatus::Inactive => {} - } - - // Validate block hash - if let Err(RpcErr::Internal(error_msg)) = validate_block_hash(payload, &block) { - return Ok(PayloadStatus::invalid_with_err(&error_msg)); - } - - // Check for invalid ancestors - if let Some(status) = validate_ancestors(&block, &context).await? { - return Ok(status); - } - // V3 specific: validate blob hashes let blob_versioned_hashes: Vec = block .body @@ -626,8 +621,7 @@ async fn handle_new_payload_v3( )); } - // All checks passed, execute payload - execute_payload(&block, &context).await + handle_new_payload_v1_v2(payload, block, context).await } // Elements of the list MUST be ordered by request_type in ascending order. @@ -669,11 +663,13 @@ fn validate_block_hash(payload: &ExecutionPayload, block: &Block) -> Result<(), "Invalid block hash. Expected {actual_block_hash:#x}, got {block_hash:#x}" ))); } - debug!("Block hash {block_hash} is valid"); Ok(()) } -async fn execute_payload(block: &Block, context: &RpcApiContext) -> Result { +async fn try_execute_payload( + block: &Block, + context: &RpcApiContext, +) -> Result { let block_hash = block.hash(); let storage = &context.storage; // Return the valid message directly if we have it. @@ -683,6 +679,9 @@ async fn execute_payload(block: &Block, context: &RpcApiContext) -> Result Result Ok(PayloadStatus::syncing()), + Err(ChainError::ParentNotFound) => { + // Start sync + context + .storage + .update_sync_status(false) + .await + .map_err(|e| RpcErr::Internal(e.to_string()))?; + context.syncer.set_head(block_hash); + context.syncer.start_sync(); + + Ok(PayloadStatus::syncing()) + } // Under the current implementation this is not possible: we always calculate the state // transition of any new payload as long as the parent is present. If we received the // parent payload but it was stashed, then new payload would stash this one too, with a @@ -786,28 +796,29 @@ fn validate_fork(block: &Block, fork: Fork, context: &RpcApiContext) -> Result<( async fn build_payload_if_necessary( payload_id: u64, - mut payload: PayloadBundle, + payload: PayloadBundle, context: RpcApiContext, ) -> Result { if payload.completed { Ok(payload) } else { - let (blobs_bundle, requests, block_value) = { + let (blobs_bundle, requests, block_value, block) = { let PayloadBuildResult { blobs_bundle, block_value, requests, + payload, .. } = context .blockchain - .build_payload(&mut payload.block) + .build_payload(payload.block) .await .map_err(|err| RpcErr::Internal(err.to_string()))?; - (blobs_bundle, requests, block_value) + (blobs_bundle, requests, block_value, payload) }; let new_payload = PayloadBundle { - block: payload.block, + block, block_value, blobs_bundle, requests, diff --git a/crates/networking/rpc/net/mod.rs b/crates/networking/rpc/net/mod.rs index 63805ea512..2820422327 100644 --- a/crates/networking/rpc/net/mod.rs +++ b/crates/networking/rpc/net/mod.rs @@ -11,3 +11,9 @@ pub fn version(_req: &RpcRequest, context: RpcApiContext) -> Result Result { + let value = serde_json::to_value("0")?; + Ok(value) +} diff --git a/crates/networking/rpc/rpc.rs b/crates/networking/rpc/rpc.rs index 2a4f7bb33f..658845657f 100644 --- a/crates/networking/rpc/rpc.rs +++ b/crates/networking/rpc/rpc.rs @@ -397,16 +397,16 @@ pub async fn map_engine_requests( } } } - "engine_newPayloadV4" => NewPayloadV4Request::call(req, context).await, - "engine_newPayloadV3" => { + "engine_newPayloadV4" => { cfg_if::cfg_if! { if #[cfg(feature = "based")] { - NewPayloadV3Request::relay_to_gateway_or_fallback(req, context).await + NewPayloadV4Request::relay_to_gateway_or_fallback(req, context).await } else { - NewPayloadV3Request::call(req, context).await + NewPayloadV4Request::call(req, context).await } } } + "engine_newPayloadV3" => NewPayloadV3Request::call(req, context).await, "engine_newPayloadV2" => NewPayloadV2Request::call(req, context).await, "engine_newPayloadV1" => NewPayloadV1Request::call(req, context).await, "engine_exchangeTransitionConfigurationV1" => { @@ -455,6 +455,7 @@ pub fn map_web3_requests(req: &RpcRequest, context: RpcApiContext) -> Result Result { match req.method.as_str() { "net_version" => net::version(req, contex), + "net_peerCount" => net::peer_count(req, contex), unknown_net_method => Err(RpcErr::MethodNotFound(unknown_net_method.to_owned())), } } diff --git a/crates/storage/api.rs b/crates/storage/api.rs index ff17dc17c0..46547b5d93 100644 --- a/crates/storage/api.rs +++ b/crates/storage/api.rs @@ -318,7 +318,7 @@ pub trait StoreEngine: Debug + Send + Sync + RefUnwindSafe { async fn is_synced(&self) -> Result; - async fn update_sync_status(&self, status: bool) -> Result<(), StoreError>; + async fn update_sync_status(&self, is_synced: bool) -> Result<(), StoreError>; /// Write an account batch into the current state snapshot async fn write_snapshot_account_batch( diff --git a/crates/storage/store.rs b/crates/storage/store.rs index e664fbe32f..b7700ffc9f 100644 --- a/crates/storage/store.rs +++ b/crates/storage/store.rs @@ -1006,8 +1006,8 @@ impl Store { pub async fn is_synced(&self) -> Result { self.engine.is_synced().await } - pub async fn update_sync_status(&self, status: bool) -> Result<(), StoreError> { - self.engine.update_sync_status(status).await + pub async fn update_sync_status(&self, is_synced: bool) -> Result<(), StoreError> { + self.engine.update_sync_status(is_synced).await } /// Write an account batch into the current state snapshot diff --git a/crates/storage/store_db/in_memory.rs b/crates/storage/store_db/in_memory.rs index cd0974c57f..49058e3e48 100644 --- a/crates/storage/store_db/in_memory.rs +++ b/crates/storage/store_db/in_memory.rs @@ -557,8 +557,8 @@ impl StoreEngine for Store { Ok(self.inner().chain_data.is_synced) } - async fn update_sync_status(&self, status: bool) -> Result<(), StoreError> { - self.inner().chain_data.is_synced = status; + async fn update_sync_status(&self, is_synced: bool) -> Result<(), StoreError> { + self.inner().chain_data.is_synced = is_synced; Ok(()) } diff --git a/crates/storage/store_db/libmdbx.rs b/crates/storage/store_db/libmdbx.rs index 4e5fb878b4..535cf98144 100644 --- a/crates/storage/store_db/libmdbx.rs +++ b/crates/storage/store_db/libmdbx.rs @@ -768,8 +768,8 @@ impl StoreEngine for Store { } } - async fn update_sync_status(&self, status: bool) -> Result<(), StoreError> { - self.write::(ChainDataIndex::IsSynced, status.encode_to_vec()) + async fn update_sync_status(&self, is_synced: bool) -> Result<(), StoreError> { + self.write::(ChainDataIndex::IsSynced, is_synced.encode_to_vec()) .await } diff --git a/crates/storage/store_db/redb.rs b/crates/storage/store_db/redb.rs index 416546097a..ff9eaeea4d 100644 --- a/crates/storage/store_db/redb.rs +++ b/crates/storage/store_db/redb.rs @@ -1028,11 +1028,11 @@ impl StoreEngine for RedBStore { } } - async fn update_sync_status(&self, status: bool) -> Result<(), StoreError> { + async fn update_sync_status(&self, is_synced: bool) -> Result<(), StoreError> { self.write( CHAIN_DATA_TABLE, ChainDataIndex::IsSynced, - status.encode_to_vec(), + is_synced.encode_to_vec(), ) .await } diff --git a/crates/vm/backends/levm/db.rs b/crates/vm/backends/levm/db.rs index 1e9974f5a4..0b804bb72c 100644 --- a/crates/vm/backends/levm/db.rs +++ b/crates/vm/backends/levm/db.rs @@ -13,8 +13,7 @@ use std::sync::{Arc, Mutex}; #[derive(Clone)] pub struct DatabaseLogger { pub block_hashes_accessed: Arc>>, - pub accounts_accessed: Arc>>, - pub storage_accessed: Arc>>, + pub state_accessed: Arc>>>, pub code_accessed: Arc>>, pub store: Arc, } @@ -23,8 +22,7 @@ impl DatabaseLogger { pub fn new(store: Arc) -> Self { Self { block_hashes_accessed: Arc::new(Mutex::new(HashMap::new())), - accounts_accessed: Arc::new(Mutex::new(Vec::new())), - storage_accessed: Arc::new(Mutex::new(HashMap::new())), + state_accessed: Arc::new(Mutex::new(HashMap::new())), code_accessed: Arc::new(Mutex::new(vec![])), store, } @@ -36,12 +34,12 @@ impl LevmDatabase for DatabaseLogger { &self, address: CoreAddress, ) -> Result { - let acc_info = self.store.get_account_info(address)?; - self.accounts_accessed + self.state_accessed .lock() .map_err(|_| DatabaseError::Custom("Could not lock mutex".to_string()))? - .push(address); - Ok(acc_info) + .entry(address) + .or_default(); + self.store.get_account_info(address) } fn account_exists(&self, address: CoreAddress) -> bool { @@ -53,12 +51,13 @@ impl LevmDatabase for DatabaseLogger { address: CoreAddress, key: CoreH256, ) -> Result { - let slot = self.store.get_storage_slot(address, key)?; - self.storage_accessed + self.state_accessed .lock() .map_err(|_| DatabaseError::Custom("Could not lock mutex".to_string()))? - .insert((address, key), slot); - Ok(slot) + .entry(address) + .and_modify(|keys| keys.push(key)) + .or_insert(vec![key]); + self.store.get_storage_slot(address, key) } fn get_block_hash(&self, block_number: u64) -> Result, DatabaseError> { diff --git a/crates/vm/backends/levm/mod.rs b/crates/vm/backends/levm/mod.rs index bd1ffb301c..f0b682ab64 100644 --- a/crates/vm/backends/levm/mod.rs +++ b/crates/vm/backends/levm/mod.rs @@ -45,11 +45,11 @@ impl LEVM { block: &Block, db: &mut GeneralizedDatabase, ) -> Result { - let chain_config = db.store.get_chain_config(); - let block_header = &block.header; - let fork = chain_config.fork(block_header.timestamp); cfg_if::cfg_if! { if #[cfg(not(feature = "l2"))] { + let chain_config = db.store.get_chain_config(); + let block_header = &block.header; + let fork = chain_config.fork(block_header.timestamp); if block_header.parent_beacon_block_root.is_some() && fork >= Fork::Cancun { Self::beacon_root_contract_call(block_header, db)?; } @@ -91,13 +91,7 @@ impl LEVM { } } - let account_updates = Self::get_state_transitions(db, fork)?; - - Ok(BlockExecutionResult { - receipts, - requests, - account_updates, - }) + Ok(BlockExecutionResult { receipts, requests }) } pub fn execute_tx( @@ -125,7 +119,7 @@ impl LEVM { coinbase: block_header.coinbase, timestamp: block_header.timestamp.into(), prev_randao: Some(block_header.prev_randao), - chain_id: tx.chain_id().unwrap_or_default().into(), + chain_id: chain_config.chain_id.into(), base_fee_per_gas: block_header.base_fee_per_gas.unwrap_or_default().into(), gas_price, block_excess_blob_gas: block_header.excess_blob_gas.map(U256::from), @@ -186,9 +180,12 @@ impl LEVM { } let new_state_code_hash = code_hash(&new_state_account.info.bytecode); - if initial_state_account.bytecode_hash() != new_state_code_hash { + let code = if initial_state_account.bytecode_hash() != new_state_code_hash { acc_info_updated = true; - } + Some(new_state_account.info.bytecode.clone()) + } else { + None + }; // 2. Storage has been updated if the current value is different from the one before execution. let mut added_storage = HashMap::new(); @@ -200,17 +197,14 @@ impl LEVM { } } - let (info, code) = if acc_info_updated { - ( - Some(AccountInfo { - code_hash: new_state_code_hash, - balance: new_state_account.info.balance, - nonce: new_state_account.info.nonce, - }), - Some(new_state_account.info.bytecode.clone()), - ) + let info = if acc_info_updated { + Some(AccountInfo { + code_hash: new_state_code_hash, + balance: new_state_account.info.balance, + nonce: new_state_account.info.nonce, + }) } else { - (None, None) + None }; let mut removed = !initial_state_account.is_empty() && new_state_account.is_empty(); @@ -392,6 +386,7 @@ impl LEVM { ) -> Result { let parent_hash = block.header.parent_hash; let chain_config = store.get_chain_config()?; + let fork = chain_config.fork(block.header.timestamp); let logger = Arc::new(DatabaseLogger::new(Arc::new(StoreWrapper { store: store.clone(), @@ -401,123 +396,77 @@ impl LEVM { let mut db = GeneralizedDatabase::new(logger, CacheDB::new()); // pre-execute and get all state changes - let execution_updates = Self::execute_block(block, &mut db) - .map_err(Box::new)? - .account_updates; + let _ = Self::execute_block(block, &mut db); + let execution_updates = Self::get_state_transitions(&mut db, fork).map_err(Box::new)?; - // index read and touched account addresses and storage keys - let account_accessed = logger_ref - .accounts_accessed + // index accessed account addresses and storage keys + let state_accessed = logger_ref + .state_accessed .lock() .map_err(|_| { ExecutionDBError::Store(StoreError::Custom("Could not lock mutex".to_string())) })? .clone(); - let mut index = Vec::with_capacity(account_accessed.len()); - for address in account_accessed.iter() { - let storage_keys = logger_ref - .storage_accessed - .lock() - .map_err(|_| { - ExecutionDBError::Store(StoreError::Custom("Could not lock mutex".to_string())) - })? - .iter() - .filter_map( - |((addr, key), _)| { - if *addr == *address { - Some(key) - } else { - None - } - }, - ) - .map(|key| H256::from_slice(&key.to_fixed_bytes())) - .collect::>(); - index.push((address, storage_keys)); - } + // fetch all read/written accounts from store + let accounts = state_accessed + .keys() + .chain(execution_updates.iter().map(|update| &update.address)) + .filter_map(|address| { + store + .get_account_info_by_hash(parent_hash, *address) + .transpose() + .map(|account| Ok((*address, account?))) + }) + .collect::, ExecutionDBError>>()?; - // fetch all read/written values from store - let cache_accounts = account_accessed.iter().filter_map(|address| { - // filter new accounts (accounts that didn't exist before) assuming our store is - // correct (based on the success of the pre-execution). - if let Ok(Some(info)) = db.store.get_account_info_by_hash(parent_hash, *address) { - Some((address, info)) + // fetch all read/written code from store + let code_accessed = logger_ref + .code_accessed + .lock() + .map_err(|_| { + ExecutionDBError::Store(StoreError::Custom("Could not lock mutex".to_string())) + })? + .clone(); + let code = accounts + .values() + .map(|account| account.code_hash) + .chain(code_accessed.into_iter()) + .filter_map(|hash| { + store + .get_account_code(hash) + .transpose() + .map(|account| Ok((hash, account?))) + }) + .collect::, ExecutionDBError>>()?; + + // fetch all read/written storage from store + let added_storage = execution_updates.iter().filter_map(|update| { + if !update.added_storage.is_empty() { + let keys = update.added_storage.keys().cloned().collect::>(); + Some((update.address, keys)) } else { None } }); - let accounts = cache_accounts + let storage = state_accessed .clone() - .map(|(address, _)| { - // return error if account is missing - let account = match db.store.get_account_info_by_hash(parent_hash, *address) { - Ok(Some(some)) => Ok(some), - Err(err) => Err(ExecutionDBError::Database(err)), - Ok(None) => unreachable!(), // we are filtering out accounts that are not present - // in the store - }; - Ok((*address, account?)) + .into_iter() + .chain(added_storage) + .map(|(address, keys)| { + let keys: Result, ExecutionDBError> = keys + .iter() + .filter_map(|key| { + store + .get_storage_at_hash(parent_hash, address, *key) + .transpose() + .map(|value| Ok((*key, value?))) + }) + .collect(); + Ok((address, keys?)) }) .collect::, ExecutionDBError>>()?; - let mut code: HashMap = execution_updates - .clone() - .iter() - .map(|update| { - // return error if code is missing - let hash = update.info.clone().unwrap_or_default().code_hash; - Ok(( - hash, - db.store - .get_account_code(hash)? - .ok_or(ExecutionDBError::NewMissingCode(hash))?, - )) - }) - .collect::>()?; - - let mut code_accessed = HashMap::new(); - - { - let all_code_accessed = logger_ref.code_accessed.lock().map_err(|_| { - ExecutionDBError::Store(StoreError::Custom("Could not lock mutex".to_string())) - })?; - for code_hash in all_code_accessed.iter() { - code_accessed.insert( - *code_hash, - store - .get_account_code(*code_hash)? - .ok_or(ExecutionDBError::CodeNotFound(code_hash.0.into()))? - .clone(), - ); - } - code.extend(code_accessed); - } - let storage = execution_updates - .iter() - .map(|update| { - // return error if storage is missing - Ok(( - update.address, - update - .added_storage - .keys() - .map(|key| { - let key = H256::from(key.to_fixed_bytes()); - let value = store - .get_storage_at_hash( - block.header.compute_block_hash(), - update.address, - key, - ) - .map_err(ExecutionDBError::Store)? - .ok_or(ExecutionDBError::NewMissingStorage(update.address, key))?; - Ok((key, value)) - }) - .collect::, ExecutionDBError>>()?, - )) - }) - .collect::, ExecutionDBError>>()?; let block_hashes = logger_ref .block_hashes_accessed .lock() @@ -529,23 +478,14 @@ impl LEVM { .map(|(num, hash)| (num, H256::from(hash.0))) .collect(); - let new_store = store.clone(); - new_store - .apply_account_updates(block.hash(), &execution_updates) - .await?; - // get account proofs - let state_trie = new_store + let state_trie = store .state_trie(block.hash())? .ok_or(ExecutionDBError::NewMissingStateTrie(parent_hash))?; let parent_state_trie = store .state_trie(parent_hash)? .ok_or(ExecutionDBError::NewMissingStateTrie(parent_hash))?; - let hashed_addresses: Vec<_> = index - .clone() - .into_iter() - .map(|(address, _)| hash_address(address)) - .collect(); + let hashed_addresses: Vec<_> = state_accessed.keys().map(hash_address).collect(); let initial_state_proofs = parent_state_trie.get_proofs(&hashed_addresses)?; let final_state_proofs: Vec<_> = hashed_addresses .iter() @@ -564,14 +504,14 @@ impl LEVM { // get storage proofs let mut storage_proofs = HashMap::new(); let mut final_storage_proofs = HashMap::new(); - for (address, storage_keys) in index { - let Some(parent_storage_trie) = store.storage_trie(parent_hash, *address)? else { + for (address, storage_keys) in state_accessed { + let Some(parent_storage_trie) = store.storage_trie(parent_hash, address)? else { // the storage of this account was empty or the account is newly created, either // way the storage trie was initially empty so there aren't any proofs to add. continue; }; - let storage_trie = new_store.storage_trie(block.hash(), *address)?.ok_or( - ExecutionDBError::NewMissingStorageTrie(block.hash(), *address), + let storage_trie = store.storage_trie(block.hash(), address)?.ok_or( + ExecutionDBError::NewMissingStorageTrie(block.hash(), address), )?; let paths = storage_keys.iter().map(hash_key).collect::>(); @@ -595,7 +535,7 @@ impl LEVM { [initial_proofs.1, potential_child_nodes].concat(), ); - storage_proofs.insert(*address, proofs); + storage_proofs.insert(address, proofs); final_storage_proofs.insert(address, final_proofs); } @@ -767,7 +707,7 @@ fn env_from_generic( coinbase: header.coinbase, timestamp: header.timestamp.into(), prev_randao: Some(header.prev_randao), - chain_id: tx.chain_id.unwrap_or(chain_config.chain_id).into(), + chain_id: chain_config.chain_id.into(), base_fee_per_gas: header.base_fee_per_gas.unwrap_or_default().into(), gas_price, block_excess_blob_gas: header.excess_blob_gas.map(U256::from), diff --git a/crates/vm/backends/mod.rs b/crates/vm/backends/mod.rs index 39b12dd54c..32080857c8 100644 --- a/crates/vm/backends/mod.rs +++ b/crates/vm/backends/mod.rs @@ -40,6 +40,7 @@ impl TryFrom for EvmEngine { } } +#[derive(Clone)] pub enum Evm { REVM { state: EvmState }, LEVM { db: GeneralizedDatabase }, @@ -285,5 +286,4 @@ impl Evm { pub struct BlockExecutionResult { pub receipts: Vec, pub requests: Vec, - pub account_updates: Vec, } diff --git a/crates/vm/backends/revm/db.rs b/crates/vm/backends/revm/db.rs index 3d5a3a5082..dd65074538 100644 --- a/crates/vm/backends/revm/db.rs +++ b/crates/vm/backends/revm/db.rs @@ -28,6 +28,28 @@ pub enum EvmState { Execution(Box>), } +// Needed because revm::db::State is not cloneable and we need to +// restore the previous EVM state after executing a transaction in L2 mode whose resulting state diff doesn't fit in a blob. +impl Clone for EvmState { + fn clone(&self) -> Self { + match self { + EvmState::Store(state) => EvmState::Store(revm::db::State:: { + cache: state.cache.clone(), + database: state.database.clone(), + transition_state: state.transition_state.clone(), + bundle_state: state.bundle_state.clone(), + use_preloaded_bundle: state.use_preloaded_bundle, + block_hashes: state.block_hashes.clone(), + }), + EvmState::Execution(execution) => { + EvmState::Execution(Box::new(Into::>::into( + *execution.clone(), + ))) + } + } + } +} + impl EvmState { /// Get a reference to inner `Store` database pub fn database(&self) -> Option<&Store> { diff --git a/crates/vm/backends/revm/mod.rs b/crates/vm/backends/revm/mod.rs index 66fa992888..e3a66b184c 100644 --- a/crates/vm/backends/revm/mod.rs +++ b/crates/vm/backends/revm/mod.rs @@ -97,13 +97,7 @@ impl REVM { } } - let account_updates = Self::get_state_transitions(state); - - Ok(BlockExecutionResult { - receipts, - requests, - account_updates, - }) + Ok(BlockExecutionResult { receipts, requests }) } pub fn execute_tx( diff --git a/crates/vm/levm/Makefile b/crates/vm/levm/Makefile index c96a2ac288..aa93593092 100644 --- a/crates/vm/levm/Makefile +++ b/crates/vm/levm/Makefile @@ -21,8 +21,8 @@ TMP_DIR := tmp TESTS_REPO := $(TMP_DIR)/ethereum-tests ETH_TEST_URL := https://github.com/ethereum/tests.git -ETH_TEST_TAG := v14.1 -COMMIT_LEGACY_TESTS_FOR_TAG := b2e6c9e +ETH_TEST_TAG := v17.0 +COMMIT_LEGACY_TESTS_FOR_TAG := b3f67fe STATETEST_VERSION := pectra-devnet-6%40v1.0.0 STATETEST_NET := pectra-devnet-6 @@ -32,6 +32,7 @@ STATETEST_URL := https://github.com/ethereum/execution-spec-tests/releases/downl setup-test-dirs: mkdir -p $(VECTORS_DIR) mkdir -p $(VECTORS_DIR)/LegacyTests/Constantinople/GeneralStateTests + mkdir -p $(VECTORS_DIR)/LegacyTests/Cancun/GeneralStateTests mkdir -p $(VECTORS_DIR)/GeneralStateTests mkdir -p $(VECTORS_DIR)/state_tests @@ -40,7 +41,8 @@ clone-ef-tests: ## 📥 Download Ethereum Tests repository with submodules git clone --recurse-submodules --depth 1 --branch $(ETH_TEST_TAG) $(ETH_TEST_URL) $(TESTS_REPO) cd $(TESTS_REPO)/LegacyTests && git checkout $(COMMIT_LEGACY_TESTS_FOR_TAG) cp -r $(TESTS_REPO)/GeneralStateTests/* $(VECTORS_DIR)/GeneralStateTests/ - cp -r $(TESTS_REPO)/LegacyTests/Constantinople/GeneralStateTests/* $(VECTORS_DIR)/LegacyTests/Constantinople/GeneralStateTests/; + cp -r $(TESTS_REPO)/LegacyTests/Constantinople/GeneralStateTests/* $(VECTORS_DIR)/LegacyTests/Constantinople/GeneralStateTests/ + cp -r $(TESTS_REPO)/LegacyTests/Cancun/GeneralStateTests/* $(VECTORS_DIR)/LegacyTests/Cancun/GeneralStateTests/; download-state-tests: ## 📥 Download and setup state tests fixtures curl -L -o $(STATETEST_ARTIFACT) $(STATETEST_URL) diff --git a/crates/vm/levm/src/call_frame.rs b/crates/vm/levm/src/call_frame.rs index 60a1de7074..c6e7c2324c 100644 --- a/crates/vm/levm/src/call_frame.rs +++ b/crates/vm/levm/src/call_frame.rs @@ -135,7 +135,7 @@ impl CallFrame { } } - pub fn next_opcode(&mut self) -> Opcode { + pub fn next_opcode(&self) -> Opcode { match self.bytecode.get(self.pc).copied().map(Opcode::from) { Some(opcode) => opcode, None => Opcode::STOP, diff --git a/crates/vm/levm/src/db/gen_db.rs b/crates/vm/levm/src/db/gen_db.rs index fff95c59ef..c0614c931a 100644 --- a/crates/vm/levm/src/db/gen_db.rs +++ b/crates/vm/levm/src/db/gen_db.rs @@ -4,10 +4,10 @@ use bytes::Bytes; use ethrex_common::Address; use ethrex_common::U256; -use crate::call_frame::CacheBackup; use crate::errors::InternalError; use crate::errors::VMError; use crate::vm::Substate; +use crate::vm::VM; use crate::Account; use crate::AccountInfo; use std::collections::HashMap; @@ -17,6 +17,7 @@ use super::error::DatabaseError; use super::CacheDB; use super::Database; +#[derive(Clone)] pub struct GeneralizedDatabase { pub store: Arc, pub cache: CacheDB, @@ -59,39 +60,60 @@ impl GeneralizedDatabase { } } - pub fn get_account_mut<'a>( - &'a mut self, + /// **Accesses to an account's information.** + /// + /// Accessed accounts are stored in the `touched_accounts` set. + /// Accessed accounts take place in some gas cost computation. + pub fn access_account( + &mut self, + accrued_substate: &mut Substate, address: Address, - cache_backup: Option<&mut CacheBackup>, - ) -> Result<&'a mut Account, VMError> { - if !cache::is_account_cached(&self.cache, &address) { - let account_info = self.store.get_account_info(address)?; + ) -> Result<(AccountInfo, bool), DatabaseError> { + let address_was_cold = accrued_substate.touched_accounts.insert(address); + let account = match cache::get_account(&self.cache, &address) { + Some(account) => account.info.clone(), + None => self.store.get_account_info(address)?, + }; + Ok((account, address_was_cold)) + } +} + +impl<'a> VM<'a> { + // ================== Account related functions ===================== + + pub fn get_account_mut(&mut self, address: Address) -> Result<&mut Account, VMError> { + if !cache::is_account_cached(&self.db.cache, &address) { + let account_info = self.db.store.get_account_info(address)?; let account = Account { info: account_info, storage: HashMap::new(), }; - cache::insert_account(&mut self.cache, address, account.clone()); + cache::insert_account(&mut self.db.cache, address, account.clone()); } - let original_account = cache::get_account_mut(&mut self.cache, &address) - .ok_or(VMError::Internal(InternalError::AccountNotFound))?; + let backup_account = cache::get_account(&self.db.cache, &address) + .ok_or(VMError::Internal(InternalError::AccountNotFound))? + .clone(); - if let Some(cache_backup) = cache_backup { - cache_backup + if let Ok(frame) = self.current_call_frame_mut() { + frame + .cache_backup .entry(address) - .or_insert_with(|| Some(original_account.clone())); - }; + .or_insert_with(|| Some(backup_account)); + } - Ok(original_account) + let account = cache::get_account_mut(&mut self.db.cache, &address) + .ok_or(VMError::Internal(InternalError::AccountNotFound))?; + + Ok(account) } pub fn increase_account_balance( &mut self, address: Address, increase: U256, - cache_backup: Option<&mut CacheBackup>, ) -> Result<(), VMError> { - let account = self.get_account_mut(address, cache_backup)?; + let account = self.get_account_mut(address)?; account.info.balance = account .info .balance @@ -104,9 +126,8 @@ impl GeneralizedDatabase { &mut self, address: Address, decrease: U256, - cache_backup: Option<&mut CacheBackup>, ) -> Result<(), VMError> { - let account = self.get_account_mut(address, cache_backup)?; + let account = self.get_account_mut(address)?; account.info.balance = account .info .balance @@ -115,42 +136,20 @@ impl GeneralizedDatabase { Ok(()) } - /// **Accesses to an account's information.** - /// - /// Accessed accounts are stored in the `touched_accounts` set. - /// Accessed accounts take place in some gas cost computation. - pub fn access_account( - &mut self, - accrued_substate: &mut Substate, - address: Address, - ) -> Result<(AccountInfo, bool), DatabaseError> { - let address_was_cold = accrued_substate.touched_accounts.insert(address); - let account = match cache::get_account(&self.cache, &address) { - Some(account) => account.info.clone(), - None => self.store.get_account_info(address)?, - }; - Ok((account, address_was_cold)) - } - /// Updates bytecode of given account. pub fn update_account_bytecode( &mut self, address: Address, new_bytecode: Bytes, - cache_backup: Option<&mut CacheBackup>, ) -> Result<(), VMError> { - let account = self.get_account_mut(address, cache_backup)?; + let account = self.get_account_mut(address)?; account.info.bytecode = new_bytecode; Ok(()) } // =================== Nonce related functions ====================== - pub fn increment_account_nonce( - &mut self, - address: Address, - cache_backup: Option<&mut CacheBackup>, - ) -> Result { - let account = self.get_account_mut(address, cache_backup)?; + pub fn increment_account_nonce(&mut self, address: Address) -> Result { + let account = self.get_account_mut(address)?; account.info.nonce = account .info .nonce @@ -159,12 +158,8 @@ impl GeneralizedDatabase { Ok(account.info.nonce) } - pub fn decrement_account_nonce( - &mut self, - address: Address, - cache_backup: Option<&mut CacheBackup>, - ) -> Result<(), VMError> { - let account = self.get_account_mut(address, cache_backup)?; + pub fn decrement_account_nonce(&mut self, address: Address) -> Result<(), VMError> { + let account = self.get_account_mut(address)?; account.info.nonce = account .info .nonce @@ -174,25 +169,30 @@ impl GeneralizedDatabase { } /// Inserts account to cache backing up the previus state of it in the CacheBackup (if it wasn't already backed up) - pub fn insert_account( - &mut self, - address: Address, - account: Account, - cache_backup: &mut CacheBackup, - ) { - let previous_account = cache::insert_account(&mut self.cache, address, account); - - cache_backup - .entry(address) - .or_insert_with(|| previous_account.as_ref().map(|account| (*account).clone())); + pub fn insert_account(&mut self, address: Address, account: Account) -> Result<(), VMError> { + let previous_account = cache::insert_account(&mut self.db.cache, address, account); + + if let Ok(frame) = self.current_call_frame_mut() { + frame + .cache_backup + .entry(address) + .or_insert_with(|| previous_account.as_ref().map(|account| (*account).clone())); + } + + Ok(()) } /// Removes account from cache backing up the previus state of it in the CacheBackup (if it wasn't already backed up) - pub fn remove_account(&mut self, address: Address, cache_backup: &mut CacheBackup) { - let previous_account = cache::remove_account(&mut self.cache, &address); + pub fn remove_account(&mut self, address: Address) -> Result<(), VMError> { + let previous_account = cache::remove_account(&mut self.db.cache, &address); - cache_backup - .entry(address) - .or_insert_with(|| previous_account.as_ref().map(|account| (*account).clone())); + if let Ok(frame) = self.current_call_frame_mut() { + frame + .cache_backup + .entry(address) + .or_insert_with(|| previous_account.as_ref().map(|account| (*account).clone())); + } + + Ok(()) } } diff --git a/crates/vm/levm/src/execution_handlers.rs b/crates/vm/levm/src/execution_handlers.rs index 4c0e5ab192..8200e4caae 100644 --- a/crates/vm/levm/src/execution_handlers.rs +++ b/crates/vm/levm/src/execution_handlers.rs @@ -16,145 +16,135 @@ impl<'a> VM<'a> { pub fn handle_precompile_result( &mut self, precompile_result: Result, - current_call_frame: &mut CallFrame, backup: StateBackup, + current_call_frame: &mut CallFrame, ) -> Result { match precompile_result { - Ok(output) => { - self.call_frames.push(current_call_frame.clone()); - - Ok(ExecutionReport { - result: TxResult::Success, - gas_used: current_call_frame.gas_used, - gas_refunded: self.env.refunded_gas, - output, - logs: std::mem::take(&mut current_call_frame.logs), - }) - } + Ok(output) => Ok(ExecutionReport { + result: TxResult::Success, + gas_used: current_call_frame.gas_used, + gas_refunded: self.env.refunded_gas, + output, + logs: std::mem::take(&mut current_call_frame.logs), + }), Err(error) => { if error.is_internal() { return Err(error); } - self.call_frames.push(current_call_frame.clone()); - - self.restore_state(backup, &mut current_call_frame.cache_backup); + self.restore_state(backup, current_call_frame.cache_backup.clone())?; Ok(ExecutionReport { result: TxResult::Revert(error), gas_used: current_call_frame.gas_limit, gas_refunded: self.env.refunded_gas, output: Bytes::new(), - logs: std::mem::take(&mut current_call_frame.logs), + logs: vec![], }) } } } - pub fn handle_current_opcode( - &mut self, - opcode: Opcode, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn handle_current_opcode(&mut self, opcode: Opcode) -> Result { match opcode { Opcode::STOP => Ok(OpcodeResult::Halt), - Opcode::ADD => self.op_add(current_call_frame), - Opcode::MUL => self.op_mul(current_call_frame), - Opcode::SUB => self.op_sub(current_call_frame), - Opcode::DIV => self.op_div(current_call_frame), - Opcode::SDIV => self.op_sdiv(current_call_frame), - Opcode::MOD => self.op_mod(current_call_frame), - Opcode::SMOD => self.op_smod(current_call_frame), - Opcode::ADDMOD => self.op_addmod(current_call_frame), - Opcode::MULMOD => self.op_mulmod(current_call_frame), - Opcode::EXP => self.op_exp(current_call_frame), - Opcode::SIGNEXTEND => self.op_signextend(current_call_frame), - Opcode::LT => self.op_lt(current_call_frame), - Opcode::GT => self.op_gt(current_call_frame), - Opcode::SLT => self.op_slt(current_call_frame), - Opcode::SGT => self.op_sgt(current_call_frame), - Opcode::EQ => self.op_eq(current_call_frame), - Opcode::ISZERO => self.op_iszero(current_call_frame), - Opcode::KECCAK256 => self.op_keccak256(current_call_frame), - Opcode::CALLDATALOAD => self.op_calldataload(current_call_frame), - Opcode::CALLDATASIZE => self.op_calldatasize(current_call_frame), - Opcode::CALLDATACOPY => self.op_calldatacopy(current_call_frame), - Opcode::RETURNDATASIZE => self.op_returndatasize(current_call_frame), - Opcode::RETURNDATACOPY => self.op_returndatacopy(current_call_frame), - Opcode::JUMP => self.op_jump(current_call_frame), - Opcode::JUMPI => self.op_jumpi(current_call_frame), - Opcode::JUMPDEST => self.op_jumpdest(current_call_frame), - Opcode::PC => self.op_pc(current_call_frame), - Opcode::BLOCKHASH => self.op_blockhash(current_call_frame), - Opcode::COINBASE => self.op_coinbase(current_call_frame), - Opcode::TIMESTAMP => self.op_timestamp(current_call_frame), - Opcode::NUMBER => self.op_number(current_call_frame), - Opcode::PREVRANDAO => self.op_prevrandao(current_call_frame), - Opcode::GASLIMIT => self.op_gaslimit(current_call_frame), - Opcode::CHAINID => self.op_chainid(current_call_frame), - Opcode::BASEFEE => self.op_basefee(current_call_frame), - Opcode::BLOBHASH => self.op_blobhash(current_call_frame), - Opcode::BLOBBASEFEE => self.op_blobbasefee(current_call_frame), - Opcode::PUSH0 => self.op_push0(current_call_frame), + Opcode::ADD => self.op_add(), + Opcode::MUL => self.op_mul(), + Opcode::SUB => self.op_sub(), + Opcode::DIV => self.op_div(), + Opcode::SDIV => self.op_sdiv(), + Opcode::MOD => self.op_mod(), + Opcode::SMOD => self.op_smod(), + Opcode::ADDMOD => self.op_addmod(), + Opcode::MULMOD => self.op_mulmod(), + Opcode::EXP => self.op_exp(), + Opcode::SIGNEXTEND => self.op_signextend(), + Opcode::LT => self.op_lt(), + Opcode::GT => self.op_gt(), + Opcode::SLT => self.op_slt(), + Opcode::SGT => self.op_sgt(), + Opcode::EQ => self.op_eq(), + Opcode::ISZERO => self.op_iszero(), + Opcode::KECCAK256 => self.op_keccak256(), + Opcode::CALLDATALOAD => self.op_calldataload(), + Opcode::CALLDATASIZE => self.op_calldatasize(), + Opcode::CALLDATACOPY => self.op_calldatacopy(), + Opcode::RETURNDATASIZE => self.op_returndatasize(), + Opcode::RETURNDATACOPY => self.op_returndatacopy(), + Opcode::JUMP => self.op_jump(), + Opcode::JUMPI => self.op_jumpi(), + Opcode::JUMPDEST => self.op_jumpdest(), + Opcode::PC => self.op_pc(), + Opcode::BLOCKHASH => self.op_blockhash(), + Opcode::COINBASE => self.op_coinbase(), + Opcode::TIMESTAMP => self.op_timestamp(), + Opcode::NUMBER => self.op_number(), + Opcode::PREVRANDAO => self.op_prevrandao(), + Opcode::GASLIMIT => self.op_gaslimit(), + Opcode::CHAINID => self.op_chainid(), + Opcode::BASEFEE => self.op_basefee(), + Opcode::BLOBHASH => self.op_blobhash(), + Opcode::BLOBBASEFEE => self.op_blobbasefee(), + Opcode::PUSH0 => self.op_push0(), // PUSHn op if (Opcode::PUSH1..=Opcode::PUSH32).contains(&op) => { let n_bytes = get_n_value(op, Opcode::PUSH1)?; - self.op_push(current_call_frame, n_bytes) + self.op_push(n_bytes) } - Opcode::AND => self.op_and(current_call_frame), - Opcode::OR => self.op_or(current_call_frame), - Opcode::XOR => self.op_xor(current_call_frame), - Opcode::NOT => self.op_not(current_call_frame), - Opcode::BYTE => self.op_byte(current_call_frame), - Opcode::SHL => self.op_shl(current_call_frame), - Opcode::SHR => self.op_shr(current_call_frame), - Opcode::SAR => self.op_sar(current_call_frame), + Opcode::AND => self.op_and(), + Opcode::OR => self.op_or(), + Opcode::XOR => self.op_xor(), + Opcode::NOT => self.op_not(), + Opcode::BYTE => self.op_byte(), + Opcode::SHL => self.op_shl(), + Opcode::SHR => self.op_shr(), + Opcode::SAR => self.op_sar(), // DUPn op if (Opcode::DUP1..=Opcode::DUP16).contains(&op) => { let depth = get_n_value(op, Opcode::DUP1)?; - self.op_dup(current_call_frame, depth) + self.op_dup(depth) } // SWAPn op if (Opcode::SWAP1..=Opcode::SWAP16).contains(&op) => { let depth = get_n_value(op, Opcode::SWAP1)?; - self.op_swap(current_call_frame, depth) + self.op_swap(depth) } - Opcode::POP => self.op_pop(current_call_frame), + Opcode::POP => self.op_pop(), op if (Opcode::LOG0..=Opcode::LOG4).contains(&op) => { let number_of_topics = get_number_of_topics(op)?; - self.op_log(current_call_frame, number_of_topics) + self.op_log(number_of_topics) } - Opcode::MLOAD => self.op_mload(current_call_frame), - Opcode::MSTORE => self.op_mstore(current_call_frame), - Opcode::MSTORE8 => self.op_mstore8(current_call_frame), - Opcode::SLOAD => self.op_sload(current_call_frame), - Opcode::SSTORE => self.op_sstore(current_call_frame), - Opcode::MSIZE => self.op_msize(current_call_frame), - Opcode::GAS => self.op_gas(current_call_frame), - Opcode::MCOPY => self.op_mcopy(current_call_frame), - Opcode::CALL => self.op_call(current_call_frame), - Opcode::CALLCODE => self.op_callcode(current_call_frame), - Opcode::RETURN => self.op_return(current_call_frame), - Opcode::DELEGATECALL => self.op_delegatecall(current_call_frame), - Opcode::STATICCALL => self.op_staticcall(current_call_frame), - Opcode::CREATE => self.op_create(current_call_frame), - Opcode::CREATE2 => self.op_create2(current_call_frame), - Opcode::TLOAD => self.op_tload(current_call_frame), - Opcode::TSTORE => self.op_tstore(current_call_frame), - Opcode::SELFBALANCE => self.op_selfbalance(current_call_frame), - Opcode::ADDRESS => self.op_address(current_call_frame), - Opcode::ORIGIN => self.op_origin(current_call_frame), - Opcode::BALANCE => self.op_balance(current_call_frame), - Opcode::CALLER => self.op_caller(current_call_frame), - Opcode::CALLVALUE => self.op_callvalue(current_call_frame), - Opcode::CODECOPY => self.op_codecopy(current_call_frame), - Opcode::CODESIZE => self.op_codesize(current_call_frame), - Opcode::GASPRICE => self.op_gasprice(current_call_frame), - Opcode::EXTCODESIZE => self.op_extcodesize(current_call_frame), - Opcode::EXTCODECOPY => self.op_extcodecopy(current_call_frame), - Opcode::EXTCODEHASH => self.op_extcodehash(current_call_frame), - Opcode::REVERT => self.op_revert(current_call_frame), + Opcode::MLOAD => self.op_mload(), + Opcode::MSTORE => self.op_mstore(), + Opcode::MSTORE8 => self.op_mstore8(), + Opcode::SLOAD => self.op_sload(), + Opcode::SSTORE => self.op_sstore(), + Opcode::MSIZE => self.op_msize(), + Opcode::GAS => self.op_gas(), + Opcode::MCOPY => self.op_mcopy(), + Opcode::CALL => self.op_call(), + Opcode::CALLCODE => self.op_callcode(), + Opcode::RETURN => self.op_return(), + Opcode::DELEGATECALL => self.op_delegatecall(), + Opcode::STATICCALL => self.op_staticcall(), + Opcode::CREATE => self.op_create(), + Opcode::CREATE2 => self.op_create2(), + Opcode::TLOAD => self.op_tload(), + Opcode::TSTORE => self.op_tstore(), + Opcode::SELFBALANCE => self.op_selfbalance(), + Opcode::ADDRESS => self.op_address(), + Opcode::ORIGIN => self.op_origin(), + Opcode::BALANCE => self.op_balance(), + Opcode::CALLER => self.op_caller(), + Opcode::CALLVALUE => self.op_callvalue(), + Opcode::CODECOPY => self.op_codecopy(), + Opcode::CODESIZE => self.op_codesize(), + Opcode::GASPRICE => self.op_gasprice(), + Opcode::EXTCODESIZE => self.op_extcodesize(), + Opcode::EXTCODECOPY => self.op_extcodecopy(), + Opcode::EXTCODEHASH => self.op_extcodehash(), + Opcode::REVERT => self.op_revert(), Opcode::INVALID => self.op_invalid(), - Opcode::SELFDESTRUCT => self.op_selfdestruct(current_call_frame), + Opcode::SELFDESTRUCT => self.op_selfdestruct(), _ => Err(VMError::OpcodeNotFound), } @@ -163,9 +153,11 @@ impl<'a> VM<'a> { pub fn handle_opcode_result( &mut self, current_call_frame: &mut CallFrame, - backup: StateBackup, ) -> Result { - self.call_frames.push(current_call_frame.clone()); + let backup = self + .backups + .pop() + .ok_or(VMError::Internal(InternalError::CouldNotPopCallframe))?; // On successful create check output validity if (self.is_create() && current_call_frame.depth == 0) || current_call_frame.create_op_called @@ -205,23 +197,19 @@ impl<'a> VM<'a> { match validate_create { Ok(new_address) => { // Set bytecode to new account if success - self.db.update_account_bytecode( - new_address, - contract_code, - Some(&mut current_call_frame.cache_backup), - )?; + self.update_account_bytecode(new_address, contract_code)?; } Err(error) => { // Revert if error current_call_frame.gas_used = current_call_frame.gas_limit; - self.restore_state(backup, &mut current_call_frame.cache_backup); + self.restore_state(backup, current_call_frame.cache_backup.clone())?; return Ok(ExecutionReport { result: TxResult::Revert(error), gas_used: current_call_frame.gas_used, gas_refunded: self.env.refunded_gas, output: std::mem::take(&mut current_call_frame.output), - logs: std::mem::take(&mut current_call_frame.logs), + logs: vec![], }); } } @@ -240,10 +228,11 @@ impl<'a> VM<'a> { &mut self, error: VMError, current_call_frame: &mut CallFrame, - backup: StateBackup, ) -> Result { - self.call_frames.push(current_call_frame.clone()); - + let backup = self + .backups + .pop() + .ok_or(VMError::Internal(InternalError::CouldNotPopCallframe))?; if error.is_internal() { return Err(error); } @@ -256,13 +245,17 @@ impl<'a> VM<'a> { current_call_frame.gas_used = current_call_frame.gas_used.saturating_add(left_gas); } - self.restore_state(backup, &mut current_call_frame.cache_backup); + let refunded = backup.refunded_gas; + let output = std::mem::take(&mut current_call_frame.output); // Bytes::new() if error is not RevertOpcode + let gas_used = current_call_frame.gas_used; + + self.restore_state(backup, current_call_frame.cache_backup.clone())?; Ok(ExecutionReport { result: TxResult::Revert(error), - gas_used: current_call_frame.gas_used, - gas_refunded: self.env.refunded_gas, - output: std::mem::take(&mut current_call_frame.output), // Bytes::new() if error is not RevertOpcode + gas_used, + gas_refunded: refunded, + output, logs: vec![], }) } diff --git a/crates/vm/levm/src/hooks/default_hook.rs b/crates/vm/levm/src/hooks/default_hook.rs index 58725fb1c2..718b961353 100644 --- a/crates/vm/levm/src/hooks/default_hook.rs +++ b/crates/vm/levm/src/hooks/default_hook.rs @@ -27,28 +27,18 @@ impl Hook for DefaultHook { /// - It adds value to receiver balance. /// - It calculates and adds intrinsic gas to the 'gas used' of callframe and environment. /// See 'docs' for more information about validations. - fn prepare_execution( - &self, - vm: &mut VM<'_>, - initial_call_frame: &mut CallFrame, - ) -> Result<(), VMError> { + fn prepare_execution(&self, vm: &mut VM<'_>) -> Result<(), VMError> { let sender_address = vm.env.origin; let sender_account = vm.db.get_account(sender_address)?; if vm.env.config.fork >= Fork::Prague { // check for gas limit is grater or equal than the minimum required - let intrinsic_gas: u64 = get_intrinsic_gas( - vm.is_create(), - vm.env.config.fork, - &vm.access_list, - &vm.authorization_list, - initial_call_frame, - )?; + let calldata = vm.current_call_frame()?.calldata.clone(); + let intrinsic_gas: u64 = vm.get_intrinsic_gas()?; // calldata_cost = tokens_in_calldata * 4 let calldata_cost: u64 = - gas_cost::tx_calldata(&initial_call_frame.calldata, vm.env.config.fork) - .map_err(VMError::OutOfGas)?; + gas_cost::tx_calldata(&calldata, vm.env.config.fork).map_err(VMError::OutOfGas)?; // same as calculated in gas_used() let tokens_in_calldata: u64 = calldata_cost @@ -63,7 +53,7 @@ impl Hook for DefaultHook { .ok_or(VMError::Internal(InternalError::GasOverflow))?; let min_gas_limit = max(intrinsic_gas, floor_cost_by_tokens); - if initial_call_frame.gas_limit < min_gas_limit { + if vm.current_call_frame()?.gas_limit < min_gas_limit { return Err(VMError::TxValidation(TxValidationError::IntrinsicGasTooLow)); } } @@ -78,14 +68,12 @@ impl Hook for DefaultHook { ))?; // Up front cost is the maximum amount of wei that a user is willing to pay for. Gaslimit * gasprice + value + blob_gas_cost - let value = initial_call_frame.msg_value; + let value = vm.current_call_frame()?.msg_value; // blob gas cost = max fee per blob gas * blob gas used // https://eips.ethereum.org/EIPS/eip-4844 - let max_blob_gas_cost = get_max_blob_gas_price( - vm.env.tx_blob_hashes.clone(), - vm.env.tx_max_fee_per_blob_gas, - )?; + let max_blob_gas_cost = + get_max_blob_gas_price(&vm.env.tx_blob_hashes, vm.env.tx_max_fee_per_blob_gas)?; // For the transaction to be valid the sender account has to have a balance >= gas_price * gas_limit + value if tx is type 0 and 1 // balance >= max_fee_per_gas * gas_limit + value + blob_gas_cost if tx is type 2 or 3 @@ -114,7 +102,7 @@ impl Hook for DefaultHook { } let blob_gas_cost = get_blob_gas_price( - vm.env.tx_blob_hashes.clone(), + &vm.env.tx_blob_hashes, vm.env.block_excess_blob_gas, &vm.env.config, )?; @@ -146,12 +134,7 @@ impl Hook for DefaultHook { // technically, the sender will not be able to pay it. // (3) INSUFFICIENT_ACCOUNT_FUNDS - vm.db - .decrease_account_balance( - sender_address, - up_front_cost, - Some(&mut initial_call_frame.cache_backup), - ) + vm.decrease_account_balance(sender_address, up_front_cost) .map_err(|_| TxValidationError::InsufficientAccountFunds)?; // (4) INSUFFICIENT_MAX_FEE_PER_GAS @@ -164,7 +147,7 @@ impl Hook for DefaultHook { // (5) INITCODE_SIZE_EXCEEDED if vm.is_create() { // [EIP-3860] - INITCODE_SIZE_EXCEEDED - if initial_call_frame.calldata.len() > INIT_CODE_MAX_SIZE + if vm.current_call_frame()?.calldata.len() > INIT_CODE_MAX_SIZE && vm.env.config.fork >= Fork::Shanghai { return Err(VMError::TxValidation( @@ -174,17 +157,10 @@ impl Hook for DefaultHook { } // (6) INTRINSIC_GAS_TOO_LOW - add_intrinsic_gas( - vm.is_create(), - vm.env.config.fork, - initial_call_frame, - &vm.access_list, - &vm.authorization_list, - )?; + vm.add_intrinsic_gas()?; // (7) NONCE_IS_MAX - vm.db - .increment_account_nonce(sender_address, Some(&mut initial_call_frame.cache_backup)) + vm.increment_account_nonce(sender_address) .map_err(|_| VMError::TxValidation(TxValidationError::NonceIsMax))?; // check for nonce mismatch @@ -300,28 +276,21 @@ impl Hook for DefaultHook { )); } - vm.env.refunded_gas = eip7702_set_access_code( - vm.db, - vm.env.chain_id, - &mut vm.accrued_substate, - // TODO: avoid clone() - vm.authorization_list.clone(), - initial_call_frame, - )?; + vm.eip7702_set_access_code()?; } if vm.is_create() { // Assign bytecode to context and empty calldata - initial_call_frame.bytecode = std::mem::take(&mut initial_call_frame.calldata); - initial_call_frame.valid_jump_destinations = - get_valid_jump_destinations(&initial_call_frame.bytecode).unwrap_or_default(); + vm.current_call_frame_mut()?.bytecode = + std::mem::take(&mut vm.current_call_frame_mut()?.calldata); + vm.current_call_frame_mut()?.valid_jump_destinations = + get_valid_jump_destinations(&vm.current_call_frame()?.bytecode).unwrap_or_default(); } else { // Transfer value to receiver // It's here to avoid storing the "to" address in the cache before eip7702_set_access_code() step 7). - vm.db.increase_account_balance( - initial_call_frame.to, - initial_call_frame.msg_value, - Some(&mut initial_call_frame.cache_backup), + vm.increase_account_balance( + vm.current_call_frame()?.to, + vm.current_call_frame()?.msg_value, )?; } Ok(()) @@ -344,15 +313,10 @@ impl Hook for DefaultHook { if !report.is_success() { // In a create if Tx was reverted the account won't even exist by this point. if !vm.is_create() { - vm.db.decrease_account_balance( - initial_call_frame.to, - initial_call_frame.msg_value, - None, - )?; + vm.decrease_account_balance(initial_call_frame.to, initial_call_frame.msg_value)?; } - vm.db - .increase_account_balance(sender_address, initial_call_frame.msg_value, None)?; + vm.increase_account_balance(sender_address, initial_call_frame.msg_value)?; } // 2. Return unused gas + gas refunds to the sender. @@ -402,8 +366,7 @@ impl Hook for DefaultHook { .checked_mul(U256::from(gas_to_return)) .ok_or(VMError::Internal(InternalError::UndefinedState(1)))?; - vm.db - .increase_account_balance(sender_address, wei_return_amount, None)?; + vm.increase_account_balance(sender_address, wei_return_amount)?; // 3. Pay coinbase fee let coinbase_address = vm.env.coinbase; @@ -417,14 +380,13 @@ impl Hook for DefaultHook { .checked_mul(priority_fee_per_gas) .ok_or(VMError::BalanceOverflow)?; - vm.db - .increase_account_balance(coinbase_address, coinbase_fee, None)?; + vm.increase_account_balance(coinbase_address, coinbase_fee)?; // 4. Destruct addresses in vm.selfdestruct set. // In Cancun the only addresses destroyed are contracts created in this transaction let selfdestruct_set = vm.accrued_substate.selfdestruct_set.clone(); for address in selfdestruct_set { - let account_to_remove = vm.db.get_account_mut(address, None)?; + let account_to_remove = vm.get_account_mut(address)?; *account_to_remove = Account::default(); } diff --git a/crates/vm/levm/src/hooks/hook.rs b/crates/vm/levm/src/hooks/hook.rs index c7e156792b..4517692ae1 100644 --- a/crates/vm/levm/src/hooks/hook.rs +++ b/crates/vm/levm/src/hooks/hook.rs @@ -5,11 +5,7 @@ use crate::{ }; pub trait Hook { - fn prepare_execution( - &self, - vm: &mut VM<'_>, - initial_call_frame: &mut CallFrame, - ) -> Result<(), VMError>; + fn prepare_execution(&self, vm: &mut VM<'_>) -> Result<(), VMError>; fn finalize_execution( &self, diff --git a/crates/vm/levm/src/hooks/l2_hook.rs b/crates/vm/levm/src/hooks/l2_hook.rs index b01dde4bb3..db3cc61340 100644 --- a/crates/vm/levm/src/hooks/l2_hook.rs +++ b/crates/vm/levm/src/hooks/l2_hook.rs @@ -4,13 +4,9 @@ use ethrex_common::{types::Fork, Address, U256}; use crate::{ constants::{INIT_CODE_MAX_SIZE, TX_BASE_COST, VALID_BLOB_PREFIXES}, - db::cache::remove_account, - errors::{InternalError, TxResult, TxValidationError, VMError}, + errors::{InternalError, TxValidationError, VMError}, gas_cost::{self, STANDARD_TOKEN_COST, TOTAL_COST_FLOOR_PER_TOKEN}, - utils::{ - add_intrinsic_gas, eip7702_set_access_code, get_base_fee_per_blob_gas, get_intrinsic_gas, - get_valid_jump_destinations, has_delegation, - }, + utils::{get_base_fee_per_blob_gas, get_valid_jump_destinations}, Account, }; @@ -24,29 +20,18 @@ pub struct L2Hook { } impl Hook for L2Hook { - fn prepare_execution( - &self, - vm: &mut crate::vm::VM<'_>, - initial_call_frame: &mut crate::call_frame::CallFrame, - ) -> Result<(), crate::errors::VMError> { - vm.db - .increase_account_balance(self.recipient, initial_call_frame.msg_value, None)?; + fn prepare_execution(&self, vm: &mut crate::vm::VM<'_>) -> Result<(), crate::errors::VMError> { + vm.increase_account_balance(self.recipient, vm.current_call_frame()?.msg_value)?; - initial_call_frame.msg_value = U256::from(0); + vm.current_call_frame_mut()?.msg_value = U256::from(0); if vm.env.config.fork >= Fork::Prague { // check for gas limit is grater or equal than the minimum required - let intrinsic_gas: u64 = get_intrinsic_gas( - vm.is_create(), - vm.env.config.fork, - &vm.access_list, - &vm.authorization_list, - initial_call_frame, - )?; + let intrinsic_gas: u64 = vm.get_intrinsic_gas()?; // calldata_cost = tokens_in_calldata * 4 let calldata_cost: u64 = - gas_cost::tx_calldata(&initial_call_frame.calldata, vm.env.config.fork) + gas_cost::tx_calldata(&vm.current_call_frame()?.calldata, vm.env.config.fork) .map_err(VMError::OutOfGas)?; // same as calculated in gas_used() @@ -63,7 +48,7 @@ impl Hook for L2Hook { let min_gas_limit = max(intrinsic_gas, floor_cost_by_tokens); - if initial_call_frame.gas_limit < min_gas_limit { + if vm.current_call_frame()?.gas_limit < min_gas_limit { return Err(VMError::TxValidation(TxValidationError::IntrinsicGasTooLow)); } } @@ -89,7 +74,7 @@ impl Hook for L2Hook { // (5) INITCODE_SIZE_EXCEEDED if vm.is_create() { // [EIP-3860] - INITCODE_SIZE_EXCEEDED - if initial_call_frame.calldata.len() > INIT_CODE_MAX_SIZE + if vm.current_call_frame()?.calldata.len() > INIT_CODE_MAX_SIZE && vm.env.config.fork >= Fork::Shanghai { return Err(VMError::TxValidation( @@ -99,13 +84,7 @@ impl Hook for L2Hook { } // (6) INTRINSIC_GAS_TOO_LOW - add_intrinsic_gas( - vm.is_create(), - vm.env.config.fork, - initial_call_frame, - &vm.access_list, - &vm.authorization_list, - )?; + vm.add_intrinsic_gas()?; // (8) PRIORITY_GREATER_THAN_MAX_FEE_PER_GAS if let (Some(tx_max_priority_fee), Some(tx_max_fee_per_gas)) = ( @@ -198,21 +177,15 @@ impl Hook for L2Hook { )); } - vm.env.refunded_gas = eip7702_set_access_code( - vm.db, - vm.env.chain_id, - &mut vm.accrued_substate, - // TODO: avoid clone() - vm.authorization_list.clone(), - initial_call_frame, - )?; + vm.eip7702_set_access_code()?; } if vm.is_create() { // Assign bytecode to context and empty calldata - initial_call_frame.bytecode = std::mem::take(&mut initial_call_frame.calldata); - initial_call_frame.valid_jump_destinations = - get_valid_jump_destinations(&initial_call_frame.bytecode).unwrap_or_default(); + vm.current_call_frame_mut()?.bytecode = + std::mem::take(&mut vm.current_call_frame_mut()?.calldata); + vm.current_call_frame_mut()?.valid_jump_destinations = + get_valid_jump_destinations(&vm.current_call_frame()?.bytecode).unwrap_or_default(); } Ok(()) } @@ -224,26 +197,16 @@ impl Hook for L2Hook { report: &mut crate::errors::ExecutionReport, ) -> Result<(), crate::errors::VMError> { // POST-EXECUTION Changes - let receiver_address = initial_call_frame.to; - - // 1. Undo value transfer if the transaction has reverted - if let TxResult::Revert(_) = report.result { - let existing_account = vm.db.get_account(receiver_address)?; //TO Account - - if has_delegation(&existing_account.info)? { - // This is the case where the "to" address and the - // "signer" address are the same. We are setting the code - // and sending some balance to the "to"/"signer" - // address. - // See https://eips.ethereum.org/EIPS/eip-7702#behavior (last sentence). - - // If transaction execution results in failure (any - // exceptional condition or code reverting), setting - // delegation designations is not rolled back. - } else { - // We remove the receiver account from the cache, like nothing changed in it's state. - remove_account(&mut vm.db.cache, &receiver_address); + let sender_address = initial_call_frame.msg_sender; + + // 1. Undo value transfer if Tx reverted + if !report.is_success() { + // In a create if Tx was reverted the account won't even exist by this point. + if !vm.is_create() { + vm.decrease_account_balance(initial_call_frame.to, initial_call_frame.msg_value)?; } + + vm.increase_account_balance(sender_address, initial_call_frame.msg_value)?; } // 2. Return unused gas + gas refunds to the sender. @@ -292,14 +255,13 @@ impl Hook for L2Hook { .checked_mul(priority_fee_per_gas) .ok_or(VMError::BalanceOverflow)?; - vm.db - .increase_account_balance(coinbase_address, coinbase_fee, None)?; + vm.increase_account_balance(coinbase_address, coinbase_fee)?; // 4. Destruct addresses in vm.estruct set. // In Cancun the only addresses destroyed are contracts created in this transaction let selfdestruct_set = vm.accrued_substate.selfdestruct_set.clone(); for address in selfdestruct_set { - let account_to_remove = vm.db.get_account_mut(address, None)?; + let account_to_remove = vm.get_account_mut(address)?; *account_to_remove = Account::default(); } diff --git a/crates/vm/levm/src/opcode_handlers/arithmetic.rs b/crates/vm/levm/src/opcode_handlers/arithmetic.rs index 59f61f7b78..df37318efc 100644 --- a/crates/vm/levm/src/opcode_handlers/arithmetic.rs +++ b/crates/vm/levm/src/opcode_handlers/arithmetic.rs @@ -1,5 +1,4 @@ use crate::{ - call_frame::CallFrame, errors::{InternalError, OpcodeResult, VMError}, gas_cost, opcode_handlers::bitwise_comparison::checked_shift_left, @@ -14,7 +13,8 @@ use super::bitwise_comparison::checked_shift_right; impl<'a> VM<'a> { // ADD operation - pub fn op_add(&mut self, current_call_frame: &mut CallFrame) -> Result { + pub fn op_add(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::ADD)?; let augend = current_call_frame.stack.pop()?; @@ -26,7 +26,8 @@ impl<'a> VM<'a> { } // SUB operation - pub fn op_sub(&mut self, current_call_frame: &mut CallFrame) -> Result { + pub fn op_sub(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::SUB)?; let minuend = current_call_frame.stack.pop()?; @@ -38,7 +39,8 @@ impl<'a> VM<'a> { } // MUL operation - pub fn op_mul(&mut self, current_call_frame: &mut CallFrame) -> Result { + pub fn op_mul(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::MUL)?; let multiplicand = current_call_frame.stack.pop()?; @@ -50,7 +52,8 @@ impl<'a> VM<'a> { } // DIV operation - pub fn op_div(&mut self, current_call_frame: &mut CallFrame) -> Result { + pub fn op_div(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::DIV)?; let dividend = current_call_frame.stack.pop()?; @@ -65,7 +68,8 @@ impl<'a> VM<'a> { } // SDIV operation - pub fn op_sdiv(&mut self, current_call_frame: &mut CallFrame) -> Result { + pub fn op_sdiv(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::SDIV)?; let dividend = current_call_frame.stack.pop()?; @@ -96,7 +100,8 @@ impl<'a> VM<'a> { } // MOD operation - pub fn op_mod(&mut self, current_call_frame: &mut CallFrame) -> Result { + pub fn op_mod(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::MOD)?; let dividend = current_call_frame.stack.pop()?; @@ -110,7 +115,8 @@ impl<'a> VM<'a> { } // SMOD operation - pub fn op_smod(&mut self, current_call_frame: &mut CallFrame) -> Result { + pub fn op_smod(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::SMOD)?; let unchecked_dividend = current_call_frame.stack.pop()?; @@ -144,10 +150,8 @@ impl<'a> VM<'a> { } // ADDMOD operation - pub fn op_addmod( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_addmod(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::ADDMOD)?; let augend = current_call_frame.stack.pop()?; @@ -180,10 +184,8 @@ impl<'a> VM<'a> { } // MULMOD operation - pub fn op_mulmod( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_mulmod(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::MULMOD)?; let multiplicand = current_call_frame.stack.pop()?; @@ -217,11 +219,13 @@ impl<'a> VM<'a> { } // EXP operation - pub fn op_exp(&mut self, current_call_frame: &mut CallFrame) -> Result { + pub fn op_exp(&mut self) -> Result { + let fork = self.env.config.fork; + let current_call_frame = self.current_call_frame_mut()?; let base = current_call_frame.stack.pop()?; let exponent = current_call_frame.stack.pop()?; - let gas_cost = gas_cost::exp(exponent, self.env.config.fork)?; + let gas_cost = gas_cost::exp(exponent, fork)?; current_call_frame.increase_consumed_gas(gas_cost)?; @@ -232,10 +236,8 @@ impl<'a> VM<'a> { } // SIGNEXTEND operation - pub fn op_signextend( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_signextend(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::SIGNEXTEND)?; let byte_size_minus_one = current_call_frame.stack.pop()?; diff --git a/crates/vm/levm/src/opcode_handlers/bitwise_comparison.rs b/crates/vm/levm/src/opcode_handlers/bitwise_comparison.rs index 845b92e051..f5fd23af20 100644 --- a/crates/vm/levm/src/opcode_handlers/bitwise_comparison.rs +++ b/crates/vm/levm/src/opcode_handlers/bitwise_comparison.rs @@ -1,5 +1,4 @@ use crate::{ - call_frame::CallFrame, constants::WORD_SIZE, errors::{InternalError, OpcodeResult, VMError}, gas_cost, @@ -35,7 +34,8 @@ static SHL_PRECALC: LazyLock> = LazyLock::new(|| { impl<'a> VM<'a> { // LT operation - pub fn op_lt(&mut self, current_call_frame: &mut CallFrame) -> Result { + pub fn op_lt(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::LT)?; let lho = current_call_frame.stack.pop()?; let rho = current_call_frame.stack.pop()?; @@ -46,7 +46,8 @@ impl<'a> VM<'a> { } // GT operation - pub fn op_gt(&mut self, current_call_frame: &mut CallFrame) -> Result { + pub fn op_gt(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::GT)?; let lho = current_call_frame.stack.pop()?; let rho = current_call_frame.stack.pop()?; @@ -57,7 +58,8 @@ impl<'a> VM<'a> { } // SLT operation (signed less than) - pub fn op_slt(&mut self, current_call_frame: &mut CallFrame) -> Result { + pub fn op_slt(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::SLT)?; let lho = current_call_frame.stack.pop()?; let rho = current_call_frame.stack.pop()?; @@ -76,7 +78,8 @@ impl<'a> VM<'a> { } // SGT operation (signed greater than) - pub fn op_sgt(&mut self, current_call_frame: &mut CallFrame) -> Result { + pub fn op_sgt(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::SGT)?; let lho = current_call_frame.stack.pop()?; let rho = current_call_frame.stack.pop()?; @@ -95,7 +98,8 @@ impl<'a> VM<'a> { } // EQ operation (equality check) - pub fn op_eq(&mut self, current_call_frame: &mut CallFrame) -> Result { + pub fn op_eq(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::EQ)?; let lho = current_call_frame.stack.pop()?; let rho = current_call_frame.stack.pop()?; @@ -107,10 +111,8 @@ impl<'a> VM<'a> { } // ISZERO operation (check if zero) - pub fn op_iszero( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_iszero(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::ISZERO)?; let operand = current_call_frame.stack.pop()?; @@ -122,7 +124,8 @@ impl<'a> VM<'a> { } // AND operation - pub fn op_and(&mut self, current_call_frame: &mut CallFrame) -> Result { + pub fn op_and(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::AND)?; let a = current_call_frame.stack.pop()?; let b = current_call_frame.stack.pop()?; @@ -132,7 +135,8 @@ impl<'a> VM<'a> { } // OR operation - pub fn op_or(&mut self, current_call_frame: &mut CallFrame) -> Result { + pub fn op_or(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::OR)?; let a = current_call_frame.stack.pop()?; let b = current_call_frame.stack.pop()?; @@ -142,7 +146,8 @@ impl<'a> VM<'a> { } // XOR operation - pub fn op_xor(&mut self, current_call_frame: &mut CallFrame) -> Result { + pub fn op_xor(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::XOR)?; let a = current_call_frame.stack.pop()?; let b = current_call_frame.stack.pop()?; @@ -152,7 +157,8 @@ impl<'a> VM<'a> { } // NOT operation - pub fn op_not(&mut self, current_call_frame: &mut CallFrame) -> Result { + pub fn op_not(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::NOT)?; let a = current_call_frame.stack.pop()?; current_call_frame.stack.push(!a)?; @@ -161,7 +167,8 @@ impl<'a> VM<'a> { } // BYTE operation - pub fn op_byte(&mut self, current_call_frame: &mut CallFrame) -> Result { + pub fn op_byte(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::BYTE)?; let op1 = current_call_frame.stack.pop()?; let op2 = current_call_frame.stack.pop()?; @@ -195,9 +202,11 @@ impl<'a> VM<'a> { } // SHL operation (shift left) - pub fn op_shl(&mut self, current_call_frame: &mut CallFrame) -> Result { + pub fn op_shl(&mut self) -> Result { + let fork = self.env.config.fork; + let current_call_frame = self.current_call_frame_mut()?; // Shift opcodes introduced in Constantinople https://eips.ethereum.org/EIPS/eip-145 - if self.env.config.fork < Fork::Constantinople { + if fork < Fork::Constantinople { return Err(VMError::InvalidOpcode); } current_call_frame.increase_consumed_gas(gas_cost::SHL)?; @@ -243,9 +252,11 @@ impl<'a> VM<'a> { } // SHR operation (shift right) - pub fn op_shr(&mut self, current_call_frame: &mut CallFrame) -> Result { + pub fn op_shr(&mut self) -> Result { + let fork = self.env.config.fork; + let current_call_frame = self.current_call_frame_mut()?; // Shift opcodes introduced in Constantinople https://eips.ethereum.org/EIPS/eip-145 - if self.env.config.fork < Fork::Constantinople { + if fork < Fork::Constantinople { return Err(VMError::InvalidOpcode); } current_call_frame.increase_consumed_gas(gas_cost::SHR)?; @@ -264,9 +275,11 @@ impl<'a> VM<'a> { } // SAR operation (arithmetic shift right) - pub fn op_sar(&mut self, current_call_frame: &mut CallFrame) -> Result { + pub fn op_sar(&mut self) -> Result { + let fork = self.env.config.fork; + let current_call_frame = self.current_call_frame_mut()?; // Shift opcodes introduced in Constantinople https://eips.ethereum.org/EIPS/eip-145 - if self.env.config.fork < Fork::Constantinople { + if fork < Fork::Constantinople { return Err(VMError::InvalidOpcode); } current_call_frame.increase_consumed_gas(gas_cost::SAR)?; diff --git a/crates/vm/levm/src/opcode_handlers/block.rs b/crates/vm/levm/src/opcode_handlers/block.rs index 5afaef4728..668fc40509 100644 --- a/crates/vm/levm/src/opcode_handlers/block.rs +++ b/crates/vm/levm/src/opcode_handlers/block.rs @@ -1,5 +1,4 @@ use crate::{ - call_frame::CallFrame, constants::LAST_AVAILABLE_BLOCK_LIMIT, errors::{InternalError, OpcodeResult, VMError}, gas_cost, @@ -13,21 +12,16 @@ use ethrex_common::{types::Fork, U256}; impl<'a> VM<'a> { // BLOCKHASH operation - pub fn op_blockhash( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_blockhash(&mut self) -> Result { + let current_block = self.env.block_number; + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::BLOCKHASH)?; let block_number = current_call_frame.stack.pop()?; // If the block number is not valid, return zero - if block_number - < self - .env - .block_number - .saturating_sub(LAST_AVAILABLE_BLOCK_LIMIT) - || block_number >= self.env.block_number + if block_number < current_block.saturating_sub(LAST_AVAILABLE_BLOCK_LIMIT) + || block_number >= current_block { current_call_frame.stack.push(U256::zero())?; return Ok(OpcodeResult::Continue { pc_increment: 1 }); @@ -38,61 +32,51 @@ impl<'a> VM<'a> { .map_err(|_err| VMError::VeryLargeNumber)?; if let Some(block_hash) = self.db.store.get_block_hash(block_number)? { - current_call_frame + self.current_call_frame_mut()? .stack .push(U256::from_big_endian(block_hash.as_bytes()))?; } else { - current_call_frame.stack.push(U256::zero())?; + self.current_call_frame_mut()?.stack.push(U256::zero())?; } Ok(OpcodeResult::Continue { pc_increment: 1 }) } // COINBASE operation - pub fn op_coinbase( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_coinbase(&mut self) -> Result { + let coinbase = self.env.coinbase; + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::COINBASE)?; - current_call_frame - .stack - .push(address_to_word(self.env.coinbase))?; + current_call_frame.stack.push(address_to_word(coinbase))?; Ok(OpcodeResult::Continue { pc_increment: 1 }) } // TIMESTAMP operation - pub fn op_timestamp( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_timestamp(&mut self) -> Result { + let timestamp = self.env.timestamp; + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::TIMESTAMP)?; - current_call_frame.stack.push(self.env.timestamp)?; + current_call_frame.stack.push(timestamp)?; Ok(OpcodeResult::Continue { pc_increment: 1 }) } // NUMBER operation - pub fn op_number( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_number(&mut self) -> Result { + let block_number = self.env.block_number; + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::NUMBER)?; - current_call_frame.stack.push(self.env.block_number)?; + current_call_frame.stack.push(block_number)?; Ok(OpcodeResult::Continue { pc_increment: 1 }) } // PREVRANDAO operation - pub fn op_prevrandao( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { - current_call_frame.increase_consumed_gas(gas_cost::PREVRANDAO)?; - + pub fn op_prevrandao(&mut self) -> Result { // https://eips.ethereum.org/EIPS/eip-4399 // After Paris the prev randao is the prev_randao (or current_random) field let randao = if self.env.config.fork >= Fork::Paris { @@ -101,92 +85,89 @@ impl<'a> VM<'a> { } else { self.env.difficulty }; + let current_call_frame = self.current_call_frame_mut()?; + current_call_frame.increase_consumed_gas(gas_cost::PREVRANDAO)?; current_call_frame.stack.push(randao)?; Ok(OpcodeResult::Continue { pc_increment: 1 }) } // GASLIMIT operation - pub fn op_gaslimit( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_gaslimit(&mut self) -> Result { + let block_gas_limit = self.env.block_gas_limit; + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::GASLIMIT)?; - current_call_frame - .stack - .push(self.env.block_gas_limit.into())?; + current_call_frame.stack.push(block_gas_limit.into())?; Ok(OpcodeResult::Continue { pc_increment: 1 }) } // CHAINID operation - pub fn op_chainid( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_chainid(&mut self) -> Result { // https://eips.ethereum.org/EIPS/eip-1344 if self.env.config.fork < Fork::Istanbul { return Err(VMError::InvalidOpcode); } + let chain_id = self.env.chain_id; + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::CHAINID)?; - current_call_frame.stack.push(self.env.chain_id)?; + current_call_frame.stack.push(chain_id)?; Ok(OpcodeResult::Continue { pc_increment: 1 }) } // SELFBALANCE operation - pub fn op_selfbalance( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_selfbalance(&mut self) -> Result { // https://eips.ethereum.org/EIPS/eip-1884 if self.env.config.fork < Fork::London { return Err(VMError::InvalidOpcode); } - current_call_frame.increase_consumed_gas(gas_cost::SELFBALANCE)?; - let balance = self.db.get_account(current_call_frame.to)?.info.balance; + self.current_call_frame_mut()? + .increase_consumed_gas(gas_cost::SELFBALANCE)?; - current_call_frame.stack.push(balance)?; + let balance = self + .db + .get_account(self.current_call_frame()?.to)? + .info + .balance; + + self.current_call_frame_mut()?.stack.push(balance)?; Ok(OpcodeResult::Continue { pc_increment: 1 }) } // BASEFEE operation - pub fn op_basefee( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_basefee(&mut self) -> Result { // https://eips.ethereum.org/EIPS/eip-3198 if self.env.config.fork < Fork::London { return Err(VMError::InvalidOpcode); } + let base_fee_per_gas = self.env.base_fee_per_gas; + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::BASEFEE)?; - current_call_frame.stack.push(self.env.base_fee_per_gas)?; + current_call_frame.stack.push(base_fee_per_gas)?; Ok(OpcodeResult::Continue { pc_increment: 1 }) } // BLOBHASH operation /// Currently not tested - pub fn op_blobhash( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_blobhash(&mut self) -> Result { // [EIP-4844] - BLOBHASH is only available from CANCUN if self.env.config.fork < Fork::Cancun { return Err(VMError::InvalidOpcode); } + self.current_call_frame_mut()? + .increase_consumed_gas(gas_cost::BLOBHASH)?; - current_call_frame.increase_consumed_gas(gas_cost::BLOBHASH)?; - - let index = current_call_frame.stack.pop()?; + let index = self.current_call_frame_mut()?.stack.pop()?; let blob_hashes = &self.env.tx_blob_hashes; if index >= blob_hashes.len().into() { - current_call_frame.stack.push(U256::zero())?; + self.current_call_frame_mut()?.stack.push(U256::zero())?; return Ok(OpcodeResult::Continue { pc_increment: 1 }); } @@ -198,29 +179,27 @@ impl<'a> VM<'a> { let blob_hash = blob_hashes .get(index) .ok_or(VMError::Internal(InternalError::BlobHashOutOfRange))?; + let hash = U256::from_big_endian(blob_hash.as_bytes()); - current_call_frame - .stack - .push(U256::from_big_endian(blob_hash.as_bytes()))?; + self.current_call_frame_mut()?.stack.push(hash)?; Ok(OpcodeResult::Continue { pc_increment: 1 }) } // BLOBBASEFEE operation - pub fn op_blobbasefee( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_blobbasefee(&mut self) -> Result { // [EIP-7516] - BLOBBASEFEE is only available from CANCUN if self.env.config.fork < Fork::Cancun { return Err(VMError::InvalidOpcode); } - current_call_frame.increase_consumed_gas(gas_cost::BLOBBASEFEE)?; + + self.current_call_frame_mut()? + .increase_consumed_gas(gas_cost::BLOBBASEFEE)?; let blob_base_fee = get_base_fee_per_blob_gas(self.env.block_excess_blob_gas, &self.env.config)?; - current_call_frame.stack.push(blob_base_fee)?; + self.current_call_frame_mut()?.stack.push(blob_base_fee)?; Ok(OpcodeResult::Continue { pc_increment: 1 }) } diff --git a/crates/vm/levm/src/opcode_handlers/dup.rs b/crates/vm/levm/src/opcode_handlers/dup.rs index f361e78a7c..d7f6a56260 100644 --- a/crates/vm/levm/src/opcode_handlers/dup.rs +++ b/crates/vm/levm/src/opcode_handlers/dup.rs @@ -1,5 +1,4 @@ use crate::{ - call_frame::CallFrame, errors::{OpcodeResult, VMError}, gas_cost, vm::VM, @@ -10,11 +9,8 @@ use crate::{ impl<'a> VM<'a> { // DUP operation - pub fn op_dup( - &mut self, - current_call_frame: &mut CallFrame, - depth: usize, - ) -> Result { + pub fn op_dup(&mut self, depth: usize) -> Result { + let current_call_frame = self.current_call_frame_mut()?; // Increase the consumed gas current_call_frame.increase_consumed_gas(gas_cost::DUPN)?; diff --git a/crates/vm/levm/src/opcode_handlers/environment.rs b/crates/vm/levm/src/opcode_handlers/environment.rs index 1e47d3da5d..fc471be863 100644 --- a/crates/vm/levm/src/opcode_handlers/environment.rs +++ b/crates/vm/levm/src/opcode_handlers/environment.rs @@ -1,5 +1,4 @@ use crate::{ - call_frame::CallFrame, errors::{InternalError, OpcodeResult, VMError}, gas_cost::{self}, memory::{self, calculate_memory_size}, @@ -14,10 +13,8 @@ use keccak_hash::keccak; impl<'a> VM<'a> { // ADDRESS operation - pub fn op_address( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_address(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::ADDRESS)?; let addr = current_call_frame.to; // The recipient of the current call. @@ -30,18 +27,17 @@ impl<'a> VM<'a> { } // BALANCE operation - pub fn op_balance( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { - let address = word_to_address(current_call_frame.stack.pop()?); + pub fn op_balance(&mut self) -> Result { + let fork = self.env.config.fork; + let address = word_to_address(self.current_call_frame_mut()?.stack.pop()?); let (account_info, address_was_cold) = self .db .access_account(&mut self.accrued_substate, address)?; - current_call_frame - .increase_consumed_gas(gas_cost::balance(address_was_cold, self.env.config.fork)?)?; + let current_call_frame = self.current_call_frame_mut()?; + + current_call_frame.increase_consumed_gas(gas_cost::balance(address_was_cold, fork)?)?; current_call_frame.stack.push(account_info.balance)?; @@ -49,13 +45,11 @@ impl<'a> VM<'a> { } // ORIGIN operation - pub fn op_origin( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_origin(&mut self) -> Result { + let origin = self.env.origin; + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::ORIGIN)?; - let origin = self.env.origin; current_call_frame .stack .push(U256::from_big_endian(origin.as_bytes()))?; @@ -64,10 +58,8 @@ impl<'a> VM<'a> { } // CALLER operation - pub fn op_caller( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_caller(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::CALLER)?; let caller = current_call_frame.msg_sender; @@ -79,10 +71,8 @@ impl<'a> VM<'a> { } // CALLVALUE operation - pub fn op_callvalue( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_callvalue(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::CALLVALUE)?; let callvalue = current_call_frame.msg_value; @@ -93,10 +83,8 @@ impl<'a> VM<'a> { } // CALLDATALOAD operation - pub fn op_calldataload( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_calldataload(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::CALLDATALOAD)?; let calldata_size: U256 = current_call_frame.calldata.len().into(); @@ -134,10 +122,8 @@ impl<'a> VM<'a> { } // CALLDATASIZE operation - pub fn op_calldatasize( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_calldatasize(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::CALLDATASIZE)?; current_call_frame @@ -148,10 +134,8 @@ impl<'a> VM<'a> { } // CALLDATACOPY operation - pub fn op_calldatacopy( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_calldatacopy(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; let dest_offset = current_call_frame.stack.pop()?; let calldata_offset = current_call_frame.stack.pop()?; let size: usize = current_call_frame @@ -193,17 +177,14 @@ impl<'a> VM<'a> { *data_byte = *byte; } } - memory::try_store_data(&mut current_call_frame.memory, dest_offset, &data)?; Ok(OpcodeResult::Continue { pc_increment: 1 }) } // CODESIZE operation - pub fn op_codesize( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_codesize(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::CODESIZE)?; current_call_frame @@ -214,10 +195,8 @@ impl<'a> VM<'a> { } // CODECOPY operation - pub fn op_codecopy( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_codecopy(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; let destination_offset = current_call_frame.stack.pop()?; let code_offset = current_call_frame.stack.pop()?; @@ -265,32 +244,28 @@ impl<'a> VM<'a> { } // GASPRICE operation - pub fn op_gasprice( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_gasprice(&mut self) -> Result { + let gas_price = self.env.gas_price; + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::GASPRICE)?; - current_call_frame.stack.push(self.env.gas_price)?; + current_call_frame.stack.push(gas_price)?; Ok(OpcodeResult::Continue { pc_increment: 1 }) } // EXTCODESIZE operation - pub fn op_extcodesize( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { - let address = word_to_address(current_call_frame.stack.pop()?); + pub fn op_extcodesize(&mut self) -> Result { + let fork = self.env.config.fork; + let address = word_to_address(self.current_call_frame_mut()?.stack.pop()?); let (account_info, address_was_cold) = self .db .access_account(&mut self.accrued_substate, address)?; - current_call_frame.increase_consumed_gas(gas_cost::extcodesize( - address_was_cold, - self.env.config.fork, - )?)?; + let current_call_frame = self.current_call_frame_mut()?; + + current_call_frame.increase_consumed_gas(gas_cost::extcodesize(address_was_cold, fork)?)?; current_call_frame .stack @@ -300,18 +275,18 @@ impl<'a> VM<'a> { } // EXTCODECOPY operation - pub fn op_extcodecopy( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { - let address = word_to_address(current_call_frame.stack.pop()?); - let dest_offset = current_call_frame.stack.pop()?; - let offset = current_call_frame.stack.pop()?; - let size: usize = current_call_frame + pub fn op_extcodecopy(&mut self) -> Result { + let fork = self.env.config.fork; + let address = word_to_address(self.current_call_frame_mut()?.stack.pop()?); + let dest_offset = self.current_call_frame_mut()?.stack.pop()?; + let offset = self.current_call_frame_mut()?.stack.pop()?; + let size: usize = self + .current_call_frame_mut()? .stack .pop()? .try_into() .map_err(|_| VMError::VeryLargeNumber)?; + let current_memory_size = self.current_call_frame()?.memory.len(); let (account_info, address_was_cold) = self .db @@ -319,13 +294,14 @@ impl<'a> VM<'a> { let new_memory_size = calculate_memory_size(dest_offset, size)?; - current_call_frame.increase_consumed_gas(gas_cost::extcodecopy( - size, - new_memory_size, - current_call_frame.memory.len(), - address_was_cold, - self.env.config.fork, - )?)?; + self.current_call_frame_mut()? + .increase_consumed_gas(gas_cost::extcodecopy( + size, + new_memory_size, + current_memory_size, + address_was_cold, + fork, + )?)?; if size == 0 { return Ok(OpcodeResult::Continue { pc_increment: 1 }); @@ -347,20 +323,22 @@ impl<'a> VM<'a> { } } - memory::try_store_data(&mut current_call_frame.memory, dest_offset, &data)?; + memory::try_store_data( + &mut self.current_call_frame_mut()?.memory, + dest_offset, + &data, + )?; Ok(OpcodeResult::Continue { pc_increment: 1 }) } // RETURNDATASIZE operation - pub fn op_returndatasize( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_returndatasize(&mut self) -> Result { // https://eips.ethereum.org/EIPS/eip-211 if self.env.config.fork < Fork::Byzantium { return Err(VMError::InvalidOpcode); }; + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::RETURNDATASIZE)?; current_call_frame @@ -371,14 +349,12 @@ impl<'a> VM<'a> { } // RETURNDATACOPY operation - pub fn op_returndatacopy( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_returndatacopy(&mut self) -> Result { // https://eips.ethereum.org/EIPS/eip-211 if self.env.config.fork < Fork::Byzantium { return Err(VMError::InvalidOpcode); }; + let current_call_frame = self.current_call_frame_mut()?; let dest_offset = current_call_frame.stack.pop()?; let returndata_offset: usize = current_call_frame .stack @@ -434,20 +410,17 @@ impl<'a> VM<'a> { } // EXTCODEHASH operation - pub fn op_extcodehash( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { - let address = word_to_address(current_call_frame.stack.pop()?); + pub fn op_extcodehash(&mut self) -> Result { + let fork = self.env.config.fork; + let address = word_to_address(self.current_call_frame_mut()?.stack.pop()?); let (account_info, address_was_cold) = self .db .access_account(&mut self.accrued_substate, address)?; - current_call_frame.increase_consumed_gas(gas_cost::extcodehash( - address_was_cold, - self.env.config.fork, - )?)?; + let current_call_frame = self.current_call_frame_mut()?; + + current_call_frame.increase_consumed_gas(gas_cost::extcodehash(address_was_cold, fork)?)?; // An account is considered empty when it has no code and zero nonce and zero balance. [EIP-161] if account_info.is_empty() { diff --git a/crates/vm/levm/src/opcode_handlers/exchange.rs b/crates/vm/levm/src/opcode_handlers/exchange.rs index 955c09acf6..9cf6956a07 100644 --- a/crates/vm/levm/src/opcode_handlers/exchange.rs +++ b/crates/vm/levm/src/opcode_handlers/exchange.rs @@ -1,5 +1,4 @@ use crate::{ - call_frame::CallFrame, errors::{OpcodeResult, VMError}, gas_cost, vm::VM, @@ -10,11 +9,8 @@ use crate::{ impl<'a> VM<'a> { // SWAP operation - pub fn op_swap( - &mut self, - current_call_frame: &mut CallFrame, - depth: usize, - ) -> Result { + pub fn op_swap(&mut self, depth: usize) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::SWAPN)?; let stack_top_index = current_call_frame diff --git a/crates/vm/levm/src/opcode_handlers/keccak.rs b/crates/vm/levm/src/opcode_handlers/keccak.rs index dd0d408a21..584b674fc0 100644 --- a/crates/vm/levm/src/opcode_handlers/keccak.rs +++ b/crates/vm/levm/src/opcode_handlers/keccak.rs @@ -1,5 +1,4 @@ use crate::{ - call_frame::CallFrame, errors::{OpcodeResult, VMError}, gas_cost, memory::{self, calculate_memory_size}, @@ -12,10 +11,8 @@ use sha3::{Digest, Keccak256}; // Opcodes: KECCAK256 impl<'a> VM<'a> { - pub fn op_keccak256( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_keccak256(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; let offset = current_call_frame.stack.pop()?; let size: usize = current_call_frame .stack diff --git a/crates/vm/levm/src/opcode_handlers/logging.rs b/crates/vm/levm/src/opcode_handlers/logging.rs index 8491b8e31b..22a5100301 100644 --- a/crates/vm/levm/src/opcode_handlers/logging.rs +++ b/crates/vm/levm/src/opcode_handlers/logging.rs @@ -1,5 +1,4 @@ use crate::{ - call_frame::CallFrame, errors::{OpcodeResult, VMError}, gas_cost, memory::{self, calculate_memory_size}, @@ -13,11 +12,8 @@ use ethrex_common::{types::Log, H256}; impl<'a> VM<'a> { // LOG operation - pub fn op_log( - &mut self, - current_call_frame: &mut CallFrame, - number_of_topics: u8, - ) -> Result { + pub fn op_log(&mut self, number_of_topics: u8) -> Result { + let current_call_frame = self.current_call_frame_mut()?; if current_call_frame.is_static { return Err(VMError::OpcodeNotAllowedInStaticContext); } diff --git a/crates/vm/levm/src/opcode_handlers/push.rs b/crates/vm/levm/src/opcode_handlers/push.rs index 361ee82903..1a7d319c85 100644 --- a/crates/vm/levm/src/opcode_handlers/push.rs +++ b/crates/vm/levm/src/opcode_handlers/push.rs @@ -12,11 +12,8 @@ use ethrex_common::{types::Fork, U256}; impl<'a> VM<'a> { // PUSH operation - pub fn op_push( - &mut self, - current_call_frame: &mut CallFrame, - n_bytes: usize, - ) -> Result { + pub fn op_push(&mut self, n_bytes: usize) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::PUSHN)?; let read_n_bytes = read_bytcode_slice(current_call_frame, n_bytes)?; @@ -35,14 +32,12 @@ impl<'a> VM<'a> { } // PUSH0 - pub fn op_push0( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_push0(&mut self) -> Result { // [EIP-3855] - PUSH0 is only available from SHANGHAI if self.env.config.fork < Fork::Shanghai { return Err(VMError::InvalidOpcode); } + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::PUSH0)?; diff --git a/crates/vm/levm/src/opcode_handlers/stack_memory_storage_flow.rs b/crates/vm/levm/src/opcode_handlers/stack_memory_storage_flow.rs index 9f2dff98d1..12ef1974b0 100644 --- a/crates/vm/levm/src/opcode_handlers/stack_memory_storage_flow.rs +++ b/crates/vm/levm/src/opcode_handlers/stack_memory_storage_flow.rs @@ -13,66 +13,64 @@ use ethrex_common::{types::Fork, H256, U256}; impl<'a> VM<'a> { // POP operation - pub fn op_pop(&mut self, current_call_frame: &mut CallFrame) -> Result { + pub fn op_pop(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::POP)?; current_call_frame.stack.pop()?; Ok(OpcodeResult::Continue { pc_increment: 1 }) } // TLOAD operation - pub fn op_tload( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_tload(&mut self) -> Result { // [EIP-1153] - TLOAD is only available from CANCUN if self.env.config.fork < Fork::Cancun { return Err(VMError::InvalidOpcode); } - current_call_frame.increase_consumed_gas(gas_cost::TLOAD)?; - - let key = current_call_frame.stack.pop()?; + let key = self.current_call_frame_mut()?.stack.pop()?; + let to = self.current_call_frame()?.to; let value = self .env .transient_storage - .get(&(current_call_frame.to, key)) + .get(&(to, key)) .cloned() .unwrap_or(U256::zero()); + let current_call_frame = self.current_call_frame_mut()?; + + current_call_frame.increase_consumed_gas(gas_cost::TLOAD)?; + current_call_frame.stack.push(value)?; Ok(OpcodeResult::Continue { pc_increment: 1 }) } // TSTORE operation - pub fn op_tstore( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_tstore(&mut self) -> Result { // [EIP-1153] - TLOAD is only available from CANCUN if self.env.config.fork < Fork::Cancun { return Err(VMError::InvalidOpcode); } + let (key, value, to) = { + let current_call_frame = self.current_call_frame_mut()?; - current_call_frame.increase_consumed_gas(gas_cost::TSTORE)?; + current_call_frame.increase_consumed_gas(gas_cost::TSTORE)?; - if current_call_frame.is_static { - return Err(VMError::OpcodeNotAllowedInStaticContext); - } + if current_call_frame.is_static { + return Err(VMError::OpcodeNotAllowedInStaticContext); + } - let key = current_call_frame.stack.pop()?; - let value = current_call_frame.stack.pop()?; - self.env - .transient_storage - .insert((current_call_frame.to, key), value); + let key = current_call_frame.stack.pop()?; + let value = current_call_frame.stack.pop()?; + (key, value, current_call_frame.to) + }; + self.env.transient_storage.insert((to, key), value); Ok(OpcodeResult::Continue { pc_increment: 1 }) } // MLOAD operation - pub fn op_mload( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_mload(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; let offset = current_call_frame.stack.pop()?; let new_memory_size = calculate_memory_size(offset, WORD_SIZE_IN_BYTES_USIZE)?; @@ -90,10 +88,8 @@ impl<'a> VM<'a> { } // MSTORE operation - pub fn op_mstore( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_mstore(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; let offset = current_call_frame.stack.pop()?; let new_memory_size = calculate_memory_size(offset, WORD_SIZE_IN_BYTES_USIZE)?; @@ -115,10 +111,8 @@ impl<'a> VM<'a> { } // MSTORE8 operation - pub fn op_mstore8( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_mstore8(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; // TODO: modify expansion cost to accept U256 let offset = current_call_frame.stack.pop()?; @@ -141,25 +135,23 @@ impl<'a> VM<'a> { } // SLOAD operation - pub fn op_sload( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { - let storage_slot_key = current_call_frame.stack.pop()?; - let address = current_call_frame.to; + pub fn op_sload(&mut self) -> Result { + let fork = self.env.config.fork; + let (storage_slot_key, address) = { + let current_call_frame = self.current_call_frame_mut()?; + let storage_slot_key = current_call_frame.stack.pop()?; + let address = current_call_frame.to; + (storage_slot_key, address) + }; let storage_slot_key = H256::from(storage_slot_key.to_big_endian()); - let (storage_slot, storage_slot_was_cold) = self.access_storage_slot( - address, - storage_slot_key, - &mut current_call_frame.cache_backup, - )?; + let (storage_slot, storage_slot_was_cold) = + self.access_storage_slot(address, storage_slot_key)?; - current_call_frame.increase_consumed_gas(gas_cost::sload( - storage_slot_was_cold, - self.env.config.fork, - )?)?; + let current_call_frame = self.current_call_frame_mut()?; + + current_call_frame.increase_consumed_gas(gas_cost::sload(storage_slot_was_cold, fork)?)?; current_call_frame.stack.push(storage_slot.current_value)?; Ok(OpcodeResult::Continue { pc_increment: 1 }) @@ -167,21 +159,24 @@ impl<'a> VM<'a> { // SSTORE operation // TODO: https://github.com/lambdaclass/ethrex/issues/1087 - pub fn op_sstore( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { - if current_call_frame.is_static { + pub fn op_sstore(&mut self) -> Result { + if self.current_call_frame()?.is_static { return Err(VMError::OpcodeNotAllowedInStaticContext); } - let storage_slot_key = current_call_frame.stack.pop()?; - let new_storage_slot_value = current_call_frame.stack.pop()?; + let (storage_slot_key, new_storage_slot_value, to) = { + let current_call_frame = self.current_call_frame_mut()?; + let storage_slot_key = current_call_frame.stack.pop()?; + let new_storage_slot_value = current_call_frame.stack.pop()?; + let to = current_call_frame.to; + (storage_slot_key, new_storage_slot_value, to) + }; // EIP-2200 - let gas_left = current_call_frame + let gas_left = self + .current_call_frame()? .gas_limit - .checked_sub(current_call_frame.gas_used) + .checked_sub(self.current_call_frame()?.gas_used) .ok_or(OutOfGasError::ConsumedGasOverflow)?; if gas_left <= SSTORE_STIPEND { return Err(VMError::OutOfGas(OutOfGasError::MaxGasLimitExceeded)); @@ -190,11 +185,7 @@ impl<'a> VM<'a> { // Convert key from U256 to H256 let key = H256::from(storage_slot_key.to_big_endian()); - let (storage_slot, storage_slot_was_cold) = self.access_storage_slot( - current_call_frame.to, - key, - &mut current_call_frame.cache_backup, - )?; + let (storage_slot, storage_slot_was_cold) = self.access_storage_slot(to, key)?; // Gas Refunds // Sync gas refund with global env, ensuring consistency accross contexts. @@ -254,28 +245,23 @@ impl<'a> VM<'a> { } self.env.refunded_gas = gas_refunds; + let fork = self.env.config.fork; - current_call_frame.increase_consumed_gas(gas_cost::sstore( - &storage_slot, - new_storage_slot_value, - storage_slot_was_cold, - self.env.config.fork, - )?)?; + self.current_call_frame_mut()? + .increase_consumed_gas(gas_cost::sstore( + &storage_slot, + new_storage_slot_value, + storage_slot_was_cold, + fork, + )?)?; - self.update_account_storage( - current_call_frame.to, - key, - new_storage_slot_value, - &mut current_call_frame.cache_backup, - )?; + self.update_account_storage(to, key, new_storage_slot_value)?; Ok(OpcodeResult::Continue { pc_increment: 1 }) } // MSIZE operation - pub fn op_msize( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_msize(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::MSIZE)?; current_call_frame .stack @@ -284,7 +270,8 @@ impl<'a> VM<'a> { } // GAS operation - pub fn op_gas(&mut self, current_call_frame: &mut CallFrame) -> Result { + pub fn op_gas(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::GAS)?; let remaining_gas = current_call_frame @@ -298,15 +285,12 @@ impl<'a> VM<'a> { } // MCOPY operation - pub fn op_mcopy( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_mcopy(&mut self) -> Result { // [EIP-5656] - MCOPY is only available from CANCUN if self.env.config.fork < Fork::Cancun { return Err(VMError::InvalidOpcode); } - + let current_call_frame = self.current_call_frame_mut()?; let dest_offset = current_call_frame.stack.pop()?; let src_offset = current_call_frame.stack.pop()?; let size: usize = current_call_frame @@ -336,7 +320,8 @@ impl<'a> VM<'a> { } // JUMP operation - pub fn op_jump(&mut self, current_call_frame: &mut CallFrame) -> Result { + pub fn op_jump(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::JUMP)?; let jump_address = current_call_frame.stack.pop()?; @@ -373,10 +358,8 @@ impl<'a> VM<'a> { } // JUMPI operation - pub fn op_jumpi( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_jumpi(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; let jump_address = current_call_frame.stack.pop()?; let condition = current_call_frame.stack.pop()?; @@ -393,16 +376,15 @@ impl<'a> VM<'a> { } // JUMPDEST operation - pub fn op_jumpdest( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_jumpdest(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::JUMPDEST)?; Ok(OpcodeResult::Continue { pc_increment: 1 }) } // PC operation - pub fn op_pc(&mut self, current_call_frame: &mut CallFrame) -> Result { + pub fn op_pc(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; current_call_frame.increase_consumed_gas(gas_cost::PC)?; current_call_frame diff --git a/crates/vm/levm/src/opcode_handlers/system.rs b/crates/vm/levm/src/opcode_handlers/system.rs index e0ce79b8f0..d16034f914 100644 --- a/crates/vm/levm/src/opcode_handlers/system.rs +++ b/crates/vm/levm/src/opcode_handlers/system.rs @@ -1,11 +1,13 @@ use crate::{ call_frame::CallFrame, constants::{CREATE_DEPLOYMENT_FAIL, INIT_CODE_MAX_SIZE, REVERT_FOR_CALL, SUCCESS_FOR_CALL}, - errors::{InternalError, OpcodeResult, OutOfGasError, TxResult, VMError}, + db::cache, + errors::{ExecutionReport, InternalError, OpcodeResult, OutOfGasError, TxResult, VMError}, gas_cost::{self, max_message_call_gas, SELFDESTRUCT_REFUND}, memory::{self, calculate_memory_size}, + precompiles::is_precompile, utils::{address_to_word, word_to_address, *}, - vm::VM, + vm::{RetData, StateBackup, VM}, Account, }; use bytes::Bytes; @@ -16,30 +18,52 @@ use ethrex_common::{types::Fork, Address, U256}; impl<'a> VM<'a> { // CALL operation - pub fn op_call(&mut self, current_call_frame: &mut CallFrame) -> Result { - let gas = current_call_frame.stack.pop()?; - let callee: Address = word_to_address(current_call_frame.stack.pop()?); - let value_to_transfer: U256 = current_call_frame.stack.pop()?; - let args_start_offset = current_call_frame.stack.pop()?; - let args_size = current_call_frame - .stack - .pop()? - .try_into() - .map_err(|_| VMError::VeryLargeNumber)?; - let return_data_start_offset = current_call_frame.stack.pop()?; - let return_data_size: usize = current_call_frame - .stack - .pop()? - .try_into() - .map_err(|_| VMError::VeryLargeNumber)?; + pub fn op_call(&mut self) -> Result { + let ( + gas, + callee, + value_to_transfer, + current_memory_size, + args_start_offset, + args_size, + return_data_start_offset, + return_data_size, + ) = { + let current_call_frame = self.current_call_frame_mut()?; + let gas = current_call_frame.stack.pop()?; + let callee: Address = word_to_address(current_call_frame.stack.pop()?); + let value_to_transfer: U256 = current_call_frame.stack.pop()?; + let args_start_offset = current_call_frame.stack.pop()?; + let args_size = current_call_frame + .stack + .pop()? + .try_into() + .map_err(|_| VMError::VeryLargeNumber)?; + let return_data_start_offset = current_call_frame.stack.pop()?; + let return_data_size: usize = current_call_frame + .stack + .pop()? + .try_into() + .map_err(|_| VMError::VeryLargeNumber)?; + let current_memory_size = current_call_frame.memory.len(); + ( + gas, + callee, + value_to_transfer, + current_memory_size, + args_start_offset, + args_size, + return_data_start_offset, + return_data_size, + ) + }; // VALIDATIONS - if current_call_frame.is_static && !value_to_transfer.is_zero() { + if self.current_call_frame()?.is_static && !value_to_transfer.is_zero() { return Err(VMError::OpcodeNotAllowedInStaticContext); } // GAS - let current_memory_size = current_call_frame.memory.len(); let new_memory_size_for_args = calculate_memory_size(args_start_offset, args_size)?; let new_memory_size_for_return_data = calculate_memory_size(return_data_start_offset, return_data_size)?; @@ -51,9 +75,10 @@ impl<'a> VM<'a> { let (is_delegation, eip7702_gas_consumed, code_address, bytecode) = eip7702_get_code(self.db, &mut self.accrued_substate, callee)?; - let gas_left = current_call_frame + let gas_left = self + .current_call_frame()? .gas_limit - .checked_sub(current_call_frame.gas_used) + .checked_sub(self.current_call_frame()?.gas_used) .ok_or(InternalError::GasOverflow)? .checked_sub(eip7702_gas_consumed) .ok_or(InternalError::GasOverflow)?; @@ -63,15 +88,18 @@ impl<'a> VM<'a> { current_memory_size, address_was_cold, account_info.is_empty(), - self.db.store.account_exists(callee), + account_exists(self.db, callee), value_to_transfer, gas, gas_left, self.env.config.fork, )?; - current_call_frame.increase_consumed_gas(cost)?; - current_call_frame.increase_consumed_gas(eip7702_gas_consumed)?; + self.current_call_frame_mut()?.increase_consumed_gas(cost)?; + self.current_call_frame_mut()? + .increase_consumed_gas(eip7702_gas_consumed)?; + + let current_call_frame = self.current_call_frame()?; // OPERATION let msg_sender = current_call_frame.to; // The new sender will be the current contract. @@ -79,7 +107,6 @@ impl<'a> VM<'a> { let is_static = current_call_frame.is_static; self.generic_call( - current_call_frame, gas_limit, value_to_transfer, msg_sender, @@ -97,29 +124,48 @@ impl<'a> VM<'a> { } // CALLCODE operation - pub fn op_callcode( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_callcode(&mut self) -> Result { // STACK - let gas = current_call_frame.stack.pop()?; - let code_address = word_to_address(current_call_frame.stack.pop()?); - let value_to_transfer = current_call_frame.stack.pop()?; - let args_start_offset = current_call_frame.stack.pop()?; - let args_size = current_call_frame - .stack - .pop()? - .try_into() - .map_err(|_err| VMError::VeryLargeNumber)?; - let return_data_start_offset = current_call_frame.stack.pop()?; - let return_data_size = current_call_frame - .stack - .pop()? - .try_into() - .map_err(|_err| VMError::VeryLargeNumber)?; + let ( + gas, + code_address, + value_to_transfer, + current_memory_size, + args_start_offset, + args_size, + return_data_start_offset, + return_data_size, + ) = { + let current_call_frame = self.current_call_frame_mut()?; + let gas = current_call_frame.stack.pop()?; + let code_address = word_to_address(current_call_frame.stack.pop()?); + let value_to_transfer = current_call_frame.stack.pop()?; + let args_start_offset = current_call_frame.stack.pop()?; + let args_size = current_call_frame + .stack + .pop()? + .try_into() + .map_err(|_err| VMError::VeryLargeNumber)?; + let return_data_start_offset = current_call_frame.stack.pop()?; + let return_data_size = current_call_frame + .stack + .pop()? + .try_into() + .map_err(|_err| VMError::VeryLargeNumber)?; + let current_memory_size = current_call_frame.memory.len(); + ( + gas, + code_address, + value_to_transfer, + current_memory_size, + args_start_offset, + args_size, + return_data_start_offset, + return_data_size, + ) + }; // GAS - let current_memory_size = current_call_frame.memory.len(); let new_memory_size_for_args = calculate_memory_size(args_start_offset, args_size)?; let new_memory_size_for_return_data = @@ -133,9 +179,10 @@ impl<'a> VM<'a> { let (is_delegation, eip7702_gas_consumed, code_address, bytecode) = eip7702_get_code(self.db, &mut self.accrued_substate, code_address)?; - let gas_left = current_call_frame + let gas_left = self + .current_call_frame()? .gas_limit - .checked_sub(current_call_frame.gas_used) + .checked_sub(self.current_call_frame()?.gas_used) .ok_or(InternalError::GasOverflow)? .checked_sub(eip7702_gas_consumed) .ok_or(InternalError::GasOverflow)?; @@ -150,8 +197,11 @@ impl<'a> VM<'a> { self.env.config.fork, )?; - current_call_frame.increase_consumed_gas(cost)?; - current_call_frame.increase_consumed_gas(eip7702_gas_consumed)?; + self.current_call_frame_mut()?.increase_consumed_gas(cost)?; + self.current_call_frame_mut()? + .increase_consumed_gas(eip7702_gas_consumed)?; + + let current_call_frame = self.current_call_frame()?; // Sender and recipient are the same in this case. But the code executed is from another account. let msg_sender = current_call_frame.to; @@ -159,7 +209,6 @@ impl<'a> VM<'a> { let is_static = current_call_frame.is_static; self.generic_call( - current_call_frame, gas_limit, value_to_transfer, msg_sender, @@ -177,10 +226,8 @@ impl<'a> VM<'a> { } // RETURN operation - pub fn op_return( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_return(&mut self) -> Result { + let current_call_frame = self.current_call_frame_mut()?; let offset = current_call_frame.stack.pop()?; let size = current_call_frame .stack @@ -207,36 +254,53 @@ impl<'a> VM<'a> { } // DELEGATECALL operation - pub fn op_delegatecall( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_delegatecall(&mut self) -> Result { // https://eips.ethereum.org/EIPS/eip-7 if self.env.config.fork < Fork::Homestead { return Err(VMError::InvalidOpcode); } // STACK - let gas = current_call_frame.stack.pop()?; - let code_address = word_to_address(current_call_frame.stack.pop()?); - let args_start_offset = current_call_frame.stack.pop()?; - let args_size = current_call_frame - .stack - .pop()? - .try_into() - .map_err(|_err| VMError::VeryLargeNumber)?; - let return_data_start_offset = current_call_frame.stack.pop()?; - let return_data_size = current_call_frame - .stack - .pop()? - .try_into() - .map_err(|_err| VMError::VeryLargeNumber)?; + let ( + gas, + code_address, + current_memory_size, + args_start_offset, + args_size, + return_data_start_offset, + return_data_size, + ) = { + let current_call_frame = self.current_call_frame_mut()?; + let gas = current_call_frame.stack.pop()?; + let code_address = word_to_address(current_call_frame.stack.pop()?); + let args_start_offset = current_call_frame.stack.pop()?; + let args_size = current_call_frame + .stack + .pop()? + .try_into() + .map_err(|_err| VMError::VeryLargeNumber)?; + let return_data_start_offset = current_call_frame.stack.pop()?; + let return_data_size = current_call_frame + .stack + .pop()? + .try_into() + .map_err(|_err| VMError::VeryLargeNumber)?; + let current_memory_size = current_call_frame.memory.len(); + ( + gas, + code_address, + current_memory_size, + args_start_offset, + args_size, + return_data_start_offset, + return_data_size, + ) + }; // GAS let (_account_info, address_was_cold) = self .db .access_account(&mut self.accrued_substate, code_address)?; - let current_memory_size = current_call_frame.memory.len(); let new_memory_size_for_args = calculate_memory_size(args_start_offset, args_size)?; let new_memory_size_for_return_data = calculate_memory_size(return_data_start_offset, return_data_size)?; @@ -245,9 +309,10 @@ impl<'a> VM<'a> { let (is_delegation, eip7702_gas_consumed, code_address, bytecode) = eip7702_get_code(self.db, &mut self.accrued_substate, code_address)?; - let gas_left = current_call_frame + let gas_left = self + .current_call_frame()? .gas_limit - .checked_sub(current_call_frame.gas_used) + .checked_sub(self.current_call_frame()?.gas_used) .ok_or(InternalError::GasOverflow)? .checked_sub(eip7702_gas_consumed) .ok_or(InternalError::GasOverflow)?; @@ -261,8 +326,11 @@ impl<'a> VM<'a> { self.env.config.fork, )?; - current_call_frame.increase_consumed_gas(cost)?; - current_call_frame.increase_consumed_gas(eip7702_gas_consumed)?; + self.current_call_frame_mut()?.increase_consumed_gas(cost)?; + self.current_call_frame_mut()? + .increase_consumed_gas(eip7702_gas_consumed)?; + + let current_call_frame = self.current_call_frame()?; // OPERATION let msg_sender = current_call_frame.msg_sender; @@ -271,7 +339,6 @@ impl<'a> VM<'a> { let is_static = current_call_frame.is_static; self.generic_call( - current_call_frame, gas_limit, value, msg_sender, @@ -289,36 +356,53 @@ impl<'a> VM<'a> { } // STATICCALL operation - pub fn op_staticcall( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_staticcall(&mut self) -> Result { // https://eips.ethereum.org/EIPS/eip-214 if self.env.config.fork < Fork::Byzantium { return Err(VMError::InvalidOpcode); }; // STACK - let gas = current_call_frame.stack.pop()?; - let code_address = word_to_address(current_call_frame.stack.pop()?); - let args_start_offset = current_call_frame.stack.pop()?; - let args_size = current_call_frame - .stack - .pop()? - .try_into() - .map_err(|_err| VMError::VeryLargeNumber)?; - let return_data_start_offset = current_call_frame.stack.pop()?; - let return_data_size = current_call_frame - .stack - .pop()? - .try_into() - .map_err(|_err| VMError::VeryLargeNumber)?; + let ( + gas, + code_address, + current_memory_size, + args_start_offset, + args_size, + return_data_start_offset, + return_data_size, + ) = { + let current_call_frame = self.current_call_frame_mut()?; + let gas = current_call_frame.stack.pop()?; + let code_address = word_to_address(current_call_frame.stack.pop()?); + let args_start_offset = current_call_frame.stack.pop()?; + let args_size = current_call_frame + .stack + .pop()? + .try_into() + .map_err(|_err| VMError::VeryLargeNumber)?; + let return_data_start_offset = current_call_frame.stack.pop()?; + let return_data_size = current_call_frame + .stack + .pop()? + .try_into() + .map_err(|_err| VMError::VeryLargeNumber)?; + let current_memory_size = current_call_frame.memory.len(); + ( + gas, + code_address, + current_memory_size, + args_start_offset, + args_size, + return_data_start_offset, + return_data_size, + ) + }; // GAS let (_account_info, address_was_cold) = self .db .access_account(&mut self.accrued_substate, code_address)?; - let current_memory_size = current_call_frame.memory.len(); let new_memory_size_for_args = calculate_memory_size(args_start_offset, args_size)?; let new_memory_size_for_return_data = calculate_memory_size(return_data_start_offset, return_data_size)?; @@ -327,9 +411,10 @@ impl<'a> VM<'a> { let (is_delegation, eip7702_gas_consumed, _, bytecode) = eip7702_get_code(self.db, &mut self.accrued_substate, code_address)?; - let gas_left = current_call_frame + let gas_left = self + .current_call_frame()? .gas_limit - .checked_sub(current_call_frame.gas_used) + .checked_sub(self.current_call_frame()?.gas_used) .ok_or(InternalError::GasOverflow)? .checked_sub(eip7702_gas_consumed) .ok_or(InternalError::GasOverflow)?; @@ -343,16 +428,16 @@ impl<'a> VM<'a> { self.env.config.fork, )?; - current_call_frame.increase_consumed_gas(cost)?; - current_call_frame.increase_consumed_gas(eip7702_gas_consumed)?; + self.current_call_frame_mut()?.increase_consumed_gas(cost)?; + self.current_call_frame_mut()? + .increase_consumed_gas(eip7702_gas_consumed)?; // OPERATION let value = U256::zero(); - let msg_sender = current_call_frame.to; // The new sender will be the current contract. + let msg_sender = self.current_call_frame()?.to; // The new sender will be the current contract. let to = code_address; // In this case code_address and the sub-context account are the same. Unlike CALLCODE or DELEGATECODE. self.generic_call( - current_call_frame, gas_limit, value, msg_sender, @@ -370,10 +455,9 @@ impl<'a> VM<'a> { } // CREATE operation - pub fn op_create( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_create(&mut self) -> Result { + let fork = self.env.config.fork; + let current_call_frame = self.current_call_frame_mut()?; let value_in_wei_to_send = current_call_frame.stack.pop()?; let code_offset_in_memory = current_call_frame.stack.pop()?; let code_size_in_memory: usize = current_call_frame @@ -388,7 +472,7 @@ impl<'a> VM<'a> { new_size, current_call_frame.memory.len(), code_size_in_memory, - self.env.config.fork, + fork, )?)?; self.generic_create( @@ -396,19 +480,17 @@ impl<'a> VM<'a> { code_offset_in_memory, code_size_in_memory, None, - current_call_frame, ) } // CREATE2 operation - pub fn op_create2( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_create2(&mut self) -> Result { // https://eips.ethereum.org/EIPS/eip-1014 if self.env.config.fork < Fork::Constantinople { return Err(VMError::InvalidOpcode); } + let fork = self.env.config.fork; + let current_call_frame = self.current_call_frame_mut()?; let value_in_wei_to_send = current_call_frame.stack.pop()?; let code_offset_in_memory = current_call_frame.stack.pop()?; let code_size_in_memory: usize = current_call_frame @@ -424,7 +506,7 @@ impl<'a> VM<'a> { new_size, current_call_frame.memory.len(), code_size_in_memory, - self.env.config.fork, + fork, )?)?; self.generic_create( @@ -432,15 +514,11 @@ impl<'a> VM<'a> { code_offset_in_memory, code_size_in_memory, Some(salt), - current_call_frame, ) } // REVERT operation - pub fn op_revert( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_revert(&mut self) -> Result { // Description: Gets values from stack, calculates gas cost and sets return data. // Returns: VMError RevertOpcode if executed correctly. // Notes: @@ -448,6 +526,7 @@ impl<'a> VM<'a> { if self.env.config.fork < Fork::Byzantium { return Err(VMError::InvalidOpcode); } + let current_call_frame = self.current_call_frame_mut()?; let offset = current_call_frame.stack.pop()?; @@ -478,10 +557,7 @@ impl<'a> VM<'a> { } // SELFDESTRUCT operation - pub fn op_selfdestruct( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { + pub fn op_selfdestruct(&mut self) -> Result { // Sends all ether in the account to the target address // Steps: // 1. Pop the target address from the stack @@ -492,86 +568,58 @@ impl<'a> VM<'a> { // Notes: // If context is Static, return error. // If executed in the same transaction a contract was created, the current account is registered to be destroyed - if current_call_frame.is_static { - return Err(VMError::OpcodeNotAllowedInStaticContext); - } - - let target_address = word_to_address(current_call_frame.stack.pop()?); + let (target_address, to) = { + let current_call_frame = self.current_call_frame_mut()?; + if current_call_frame.is_static { + return Err(VMError::OpcodeNotAllowedInStaticContext); + } + let target_address = word_to_address(current_call_frame.stack.pop()?); + let to = current_call_frame.to; + (target_address, to) + }; + let fork = self.env.config.fork; let (target_account_info, target_account_is_cold) = self .db .access_account(&mut self.accrued_substate, target_address)?; - let (current_account_info, _current_account_is_cold) = self - .db - .access_account(&mut self.accrued_substate, current_call_frame.to)?; + let (current_account_info, _current_account_is_cold) = + self.db.access_account(&mut self.accrued_substate, to)?; let balance_to_transfer = current_account_info.balance; let account_is_empty = if self.env.config.fork >= Fork::SpuriousDragon { target_account_info.is_empty() } else { - !self.db.store.account_exists(target_address) + !account_exists(self.db, target_address) }; - current_call_frame.increase_consumed_gas(gas_cost::selfdestruct( - target_account_is_cold, - account_is_empty, - balance_to_transfer, - self.env.config.fork, - )?)?; + self.current_call_frame_mut()? + .increase_consumed_gas(gas_cost::selfdestruct( + target_account_is_cold, + account_is_empty, + balance_to_transfer, + fork, + )?)?; // [EIP-6780] - SELFDESTRUCT only in same transaction from CANCUN if self.env.config.fork >= Fork::Cancun { - self.db.increase_account_balance( - target_address, - balance_to_transfer, - Some(&mut current_call_frame.cache_backup), - )?; - self.db.decrease_account_balance( - current_call_frame.to, - balance_to_transfer, - Some(&mut current_call_frame.cache_backup), - )?; + self.increase_account_balance(target_address, balance_to_transfer)?; + self.decrease_account_balance(to, balance_to_transfer)?; // Selfdestruct is executed in the same transaction as the contract was created - if self - .accrued_substate - .created_accounts - .contains(¤t_call_frame.to) - { + if self.accrued_substate.created_accounts.contains(&to) { // If target is the same as the contract calling, Ether will be burnt. - self.db - .get_account_mut( - current_call_frame.to, - Some(&mut current_call_frame.cache_backup), - )? - .info - .balance = U256::zero(); - - self.accrued_substate - .selfdestruct_set - .insert(current_call_frame.to); + self.get_account_mut(to)?.info.balance = U256::zero(); + + self.accrued_substate.selfdestruct_set.insert(to); } } else { - self.db.increase_account_balance( - target_address, - balance_to_transfer, - Some(&mut current_call_frame.cache_backup), - )?; - self.db - .get_account_mut( - current_call_frame.to, - Some(&mut current_call_frame.cache_backup), - )? - .info - .balance = U256::zero(); + self.increase_account_balance(target_address, balance_to_transfer)?; + self.get_account_mut(to)?.info.balance = U256::zero(); // [EIP-3529](https://eips.ethereum.org/EIPS/eip-3529) // https://github.com/ethereum/execution-specs/blob/master/src/ethereum/constantinople/vm/instructions/system.py#L471 if self.env.config.fork < Fork::London - && !self - .accrued_substate - .selfdestruct_set - .contains(¤t_call_frame.to) + && !self.accrued_substate.selfdestruct_set.contains(&to) { self.env.refunded_gas = self .env @@ -580,9 +628,12 @@ impl<'a> VM<'a> { .ok_or(VMError::GasRefundsOverflow)?; } + self.accrued_substate.selfdestruct_set.insert(to); + } + if account_exists(self.db, target_address) && target_account_info.is_empty() { self.accrued_substate - .selfdestruct_set - .insert(current_call_frame.to); + .touched_accounts + .insert(target_address); } Ok(OpcodeResult::Halt) @@ -595,26 +646,30 @@ impl<'a> VM<'a> { code_offset_in_memory: U256, code_size_in_memory: usize, salt: Option, - current_call_frame: &mut CallFrame, ) -> Result { - // First: Validations that can cause out of gas. - // 1. Cant be called in a static context - if current_call_frame.is_static { - return Err(VMError::OpcodeNotAllowedInStaticContext); - } - // 2. [EIP-3860] - Cant exceed init code max size - if code_size_in_memory > INIT_CODE_MAX_SIZE && self.env.config.fork >= Fork::Shanghai { - return Err(VMError::OutOfGas(OutOfGasError::ConsumedGasOverflow)); - } + let fork = self.env.config.fork; + let (deployer_address, max_message_call_gas) = { + let current_call_frame = self.current_call_frame_mut()?; + // First: Validations that can cause out of gas. + // 1. Cant be called in a static context + if current_call_frame.is_static { + return Err(VMError::OpcodeNotAllowedInStaticContext); + } + // 2. [EIP-3860] - Cant exceed init code max size + if code_size_in_memory > INIT_CODE_MAX_SIZE && fork >= Fork::Shanghai { + return Err(VMError::OutOfGas(OutOfGasError::ConsumedGasOverflow)); + } - // Reserve gas for subcall - let max_message_call_gas = max_message_call_gas(current_call_frame)?; - current_call_frame.increase_consumed_gas(max_message_call_gas)?; + // Reserve gas for subcall + let max_message_call_gas = max_message_call_gas(current_call_frame)?; + current_call_frame.increase_consumed_gas(max_message_call_gas)?; - // Clear callframe subreturn data - current_call_frame.sub_return_data = Bytes::new(); + // Clear callframe subreturn data + current_call_frame.sub_return_data = Bytes::new(); - let deployer_address = current_call_frame.to; + let deployer_address = current_call_frame.to; + (deployer_address, max_message_call_gas) + }; let deployer_account_info = self .db @@ -623,7 +678,7 @@ impl<'a> VM<'a> { let code = Bytes::from( memory::load_range( - &mut current_call_frame.memory, + &mut self.current_call_frame_mut()?.memory, code_offset_in_memory, code_size_in_memory, )? @@ -638,36 +693,39 @@ impl<'a> VM<'a> { // touch account self.accrued_substate.touched_accounts.insert(new_address); - let new_depth = current_call_frame - .depth - .checked_add(1) - .ok_or(InternalError::ArithmeticOperationOverflow)?; - // SECOND: Validations that push 0 to the stack and return reserved_gas - // 1. Sender doesn't have enough balance to send value. - // 2. Depth limit has been reached - // 3. Sender nonce is max. - if deployer_account_info.balance < value_in_wei_to_send - || new_depth > 1024 - || deployer_account_info.nonce == u64::MAX - { - // Return reserved gas - current_call_frame.gas_used = current_call_frame - .gas_used - .checked_sub(max_message_call_gas) - .ok_or(VMError::Internal(InternalError::GasOverflow))?; - // Push 0 - current_call_frame.stack.push(CREATE_DEPLOYMENT_FAIL)?; - return Ok(OpcodeResult::Continue { pc_increment: 1 }); - } + let new_depth = { + let current_call_frame = self.current_call_frame_mut()?; + let new_depth = current_call_frame + .depth + .checked_add(1) + .ok_or(InternalError::ArithmeticOperationOverflow)?; + // SECOND: Validations that push 0 to the stack and return reserved_gas + // 1. Sender doesn't have enough balance to send value. + // 2. Depth limit has been reached + // 3. Sender nonce is max. + if deployer_account_info.balance < value_in_wei_to_send + || new_depth > 1024 + || deployer_account_info.nonce == u64::MAX + { + // Return reserved gas + current_call_frame.gas_used = current_call_frame + .gas_used + .checked_sub(max_message_call_gas) + .ok_or(VMError::Internal(InternalError::GasOverflow))?; + // Push 0 + current_call_frame.stack.push(CREATE_DEPLOYMENT_FAIL)?; + return Ok(OpcodeResult::Continue { pc_increment: 1 }); + } + new_depth + }; // THIRD: Validations that push 0 to the stack without returning reserved gas but incrementing deployer's nonce let new_account = self.db.get_account(new_address)?; if new_account.has_code_or_nonce() { - self.db.increment_account_nonce( - deployer_address, - Some(&mut current_call_frame.cache_backup), - )?; - current_call_frame.stack.push(CREATE_DEPLOYMENT_FAIL)?; + self.increment_account_nonce(deployer_address)?; + self.current_call_frame_mut()? + .stack + .push(CREATE_DEPLOYMENT_FAIL)?; return Ok(OpcodeResult::Continue { pc_increment: 1 }); } @@ -685,26 +743,15 @@ impl<'a> VM<'a> { } else { Account::new(new_balance, Bytes::new(), 1, Default::default()) }; - self.db.insert_account( - new_address, - new_account, - &mut current_call_frame.cache_backup, - ); + self.insert_account(new_address, new_account)?; // 2. Increment sender's nonce. - self.db.increment_account_nonce( - deployer_address, - Some(&mut current_call_frame.cache_backup), - )?; + self.increment_account_nonce(deployer_address)?; // 3. Decrease sender's balance. - self.db.decrease_account_balance( - deployer_address, - value_in_wei_to_send, - Some(&mut current_call_frame.cache_backup), - )?; + self.decrease_account_balance(deployer_address, value_in_wei_to_send)?; - let mut new_call_frame = CallFrame::new( + let new_call_frame = CallFrame::new( deployer_address, new_address, new_address, @@ -717,57 +764,28 @@ impl<'a> VM<'a> { new_depth, true, ); + self.call_frames.push(new_call_frame); self.accrued_substate.created_accounts.insert(new_address); // Mostly for SELFDESTRUCT during initcode. - let tx_report = self.run_execution(&mut new_call_frame)?; - let unused_gas = max_message_call_gas - .checked_sub(tx_report.gas_used) - .ok_or(InternalError::GasOverflow)?; - - // Return reserved gas - current_call_frame.gas_used = current_call_frame - .gas_used - .checked_sub(unused_gas) - .ok_or(InternalError::GasOverflow)?; - - current_call_frame.logs.extend(tx_report.logs); - - match tx_report.result { - TxResult::Success => { - current_call_frame - .stack - .push(address_to_word(new_address))?; - - for (address, account_opt) in new_call_frame.cache_backup { - current_call_frame - .cache_backup - .entry(address) - .or_insert(account_opt); - } - } - TxResult::Revert(err) => { - // Return value to sender - self.db.increase_account_balance( - deployer_address, - value_in_wei_to_send, - Some(&mut current_call_frame.cache_backup), - )?; - - // Deployment failed so account shouldn't exist - self.db - .remove_account(new_address, &mut current_call_frame.cache_backup); - self.accrued_substate.created_accounts.remove(&new_address); - - // If revert we have to copy the return_data - if err == VMError::RevertOpcode { - current_call_frame.sub_return_data = tx_report.output; - } - current_call_frame.stack.push(CREATE_DEPLOYMENT_FAIL)?; - } - } - - Ok(OpcodeResult::Continue { pc_increment: 1 }) + self.return_data.push(RetData { + is_create: true, + ret_offset: U256::zero(), + ret_size: 0, + should_transfer_value: true, + to: new_address, + msg_sender: deployer_address, + value: value_in_wei_to_send, + max_message_call_gas, + }); + // Backup of Database, Substate, Gas Refunds and Transient Storage if sub-context is reverted + let backup = StateBackup::new( + self.accrued_substate.clone(), + self.env.refunded_gas, + self.env.transient_storage.clone(), + ); + self.backups.push(backup); + Ok(OpcodeResult::Continue { pc_increment: 0 }) } #[allow(clippy::too_many_arguments)] @@ -776,7 +794,6 @@ impl<'a> VM<'a> { /// pushed to the stack. pub fn generic_call( &mut self, - current_call_frame: &mut CallFrame, gas_limit: u64, value: U256, msg_sender: Address, @@ -791,51 +808,77 @@ impl<'a> VM<'a> { bytecode: Bytes, is_delegation: bool, ) -> Result { - // Clear callframe subreturn data - current_call_frame.sub_return_data = Bytes::new(); - - let calldata = - memory::load_range(&mut current_call_frame.memory, args_offset, args_size)?.to_vec(); - - // 1. Validate sender has enough value let sender_account_info = self .db .access_account(&mut self.accrued_substate, msg_sender)? .0; - if should_transfer_value && sender_account_info.balance < value { - current_call_frame.gas_used = current_call_frame - .gas_used - .checked_sub(gas_limit) - .ok_or(InternalError::GasOverflow)?; - current_call_frame.stack.push(REVERT_FOR_CALL)?; - return Ok(OpcodeResult::Continue { pc_increment: 1 }); - } - // 2. Validate max depth has not been reached yet. - let new_depth = current_call_frame - .depth - .checked_add(1) - .ok_or(InternalError::ArithmeticOperationOverflow)?; + let calldata = { + let current_call_frame = self.current_call_frame_mut()?; + // Clear callframe subreturn data + current_call_frame.sub_return_data = Bytes::new(); + + let calldata = + memory::load_range(&mut current_call_frame.memory, args_offset, args_size)? + .to_vec(); + + // 1. Validate sender has enough value + if should_transfer_value && sender_account_info.balance < value { + current_call_frame.gas_used = current_call_frame + .gas_used + .checked_sub(gas_limit) + .ok_or(InternalError::GasOverflow)?; + current_call_frame.stack.push(REVERT_FOR_CALL)?; + return Ok(OpcodeResult::Continue { pc_increment: 1 }); + } + calldata + }; - if new_depth > 1024 { - current_call_frame.gas_used = current_call_frame - .gas_used - .checked_sub(gas_limit) - .ok_or(InternalError::GasOverflow)?; - current_call_frame.stack.push(REVERT_FOR_CALL)?; - return Ok(OpcodeResult::Continue { pc_increment: 1 }); - } + let new_depth = { + let current_call_frame = self.current_call_frame_mut()?; - if bytecode.is_empty() && is_delegation { - current_call_frame.gas_used = current_call_frame - .gas_used - .checked_sub(gas_limit) - .ok_or(InternalError::GasOverflow)?; - current_call_frame.stack.push(SUCCESS_FOR_CALL)?; - return Ok(OpcodeResult::Continue { pc_increment: 1 }); + // 2. Validate max depth has not been reached yet. + let new_depth = current_call_frame + .depth + .checked_add(1) + .ok_or(InternalError::ArithmeticOperationOverflow)?; + + if new_depth > 1024 { + current_call_frame.gas_used = current_call_frame + .gas_used + .checked_sub(gas_limit) + .ok_or(InternalError::GasOverflow)?; + current_call_frame.stack.push(REVERT_FOR_CALL)?; + return Ok(OpcodeResult::Continue { pc_increment: 1 }); + } + + if bytecode.is_empty() && is_delegation { + current_call_frame.gas_used = current_call_frame + .gas_used + .checked_sub(gas_limit) + .ok_or(InternalError::GasOverflow)?; + current_call_frame.stack.push(SUCCESS_FOR_CALL)?; + return Ok(OpcodeResult::Continue { pc_increment: 1 }); + } + new_depth + }; + // Transfer value from caller to callee. + if should_transfer_value { + self.decrease_account_balance(msg_sender, value)?; + self.increase_account_balance(to, value)?; } - let mut new_call_frame = CallFrame::new( + self.return_data.push(RetData { + is_create: false, + ret_offset, + ret_size, + should_transfer_value, + to, + msg_sender, + value, + max_message_call_gas: gas_limit, + }); + let new_call_frame = CallFrame::new( msg_sender, to, code_address, @@ -848,49 +891,77 @@ impl<'a> VM<'a> { new_depth, false, ); + self.call_frames.push(new_call_frame); + // Backup of Database, Substate, Gas Refunds and Transient Storage if sub-context is reverted + let backup = StateBackup::new( + self.accrued_substate.clone(), + self.env.refunded_gas, + self.env.transient_storage.clone(), + ); + self.backups.push(backup); - // Transfer value from caller to callee. - if should_transfer_value { - self.db.decrease_account_balance( - msg_sender, - value, - Some(&mut current_call_frame.cache_backup), - )?; - self.db.increase_account_balance( - to, - value, - Some(&mut current_call_frame.cache_backup), - )?; + if is_precompile(&code_address, self.env.config.fork) { + let _report = self.run_execution()?; } + Ok(OpcodeResult::Continue { pc_increment: 0 }) + } - let tx_report = self.run_execution(&mut new_call_frame)?; - + pub fn handle_return( + &mut self, + call_frame: &CallFrame, + tx_report: &ExecutionReport, + ) -> Result { + if call_frame.depth == 0 { + self.call_frames.push(call_frame.clone()); + return Ok(false); + } + let retdata = self + .return_data + .pop() + .ok_or(VMError::Internal(InternalError::CouldNotPopCallframe))?; + if retdata.is_create { + self.handle_return_create(call_frame, tx_report, retdata)?; + } else { + self.handle_return_call(call_frame, tx_report, retdata)?; + } + Ok(true) + } + pub fn handle_return_call( + &mut self, + call_frame: &CallFrame, + tx_report: &ExecutionReport, + retdata: RetData, + ) -> Result<(), VMError> { // Return gas left from subcontext - let gas_left_from_new_call_frame = new_call_frame + let gas_left_from_new_call_frame = call_frame .gas_limit .checked_sub(tx_report.gas_used) .ok_or(InternalError::GasOverflow)?; + { + let current_call_frame = self.current_call_frame_mut()?; + current_call_frame.gas_used = current_call_frame + .gas_used + .checked_sub(gas_left_from_new_call_frame) + .ok_or(InternalError::GasOverflow)?; - current_call_frame.gas_used = current_call_frame - .gas_used - .checked_sub(gas_left_from_new_call_frame) - .ok_or(InternalError::GasOverflow)?; - - current_call_frame.logs.extend(tx_report.logs); - memory::try_store_range( - &mut current_call_frame.memory, - ret_offset, - ret_size, - &tx_report.output, - )?; - current_call_frame.sub_return_data = tx_report.output; + current_call_frame.logs.extend(tx_report.logs.clone()); + memory::try_store_range( + &mut current_call_frame.memory, + retdata.ret_offset, + retdata.ret_size, + &tx_report.output, + )?; + current_call_frame.sub_return_data = tx_report.output.clone(); + } // What to do, depending on TxResult match tx_report.result { TxResult::Success => { - current_call_frame.stack.push(SUCCESS_FOR_CALL)?; - for (address, account_opt) in new_call_frame.cache_backup { - current_call_frame + self.current_call_frame_mut()? + .stack + .push(SUCCESS_FOR_CALL)?; + for (address, account_opt) in call_frame.cache_backup.clone() { + self.current_call_frame_mut()? .cache_backup .entry(address) .or_insert(account_opt); @@ -898,23 +969,67 @@ impl<'a> VM<'a> { } TxResult::Revert(_) => { // Revert value transfer - if should_transfer_value { - self.db.decrease_account_balance( - to, - value, - Some(&mut current_call_frame.cache_backup), - )?; - self.db.increase_account_balance( - msg_sender, - value, - Some(&mut current_call_frame.cache_backup), - )?; + if retdata.should_transfer_value { + self.decrease_account_balance(retdata.to, retdata.value)?; + + self.increase_account_balance(retdata.msg_sender, retdata.value)?; } // Push 0 to stack - current_call_frame.stack.push(REVERT_FOR_CALL)?; + self.current_call_frame_mut()?.stack.push(REVERT_FOR_CALL)?; } } + Ok(()) + } + pub fn handle_return_create( + &mut self, + call_frame: &CallFrame, + tx_report: &ExecutionReport, + retdata: RetData, + ) -> Result<(), VMError> { + let unused_gas = retdata + .max_message_call_gas + .checked_sub(tx_report.gas_used) + .ok_or(InternalError::GasOverflow)?; + + { + let current_call_frame = self.current_call_frame_mut()?; + // Return reserved gas + current_call_frame.gas_used = current_call_frame + .gas_used + .checked_sub(unused_gas) + .ok_or(InternalError::GasOverflow)?; + + current_call_frame.logs.extend(tx_report.logs.clone()); + } - Ok(OpcodeResult::Continue { pc_increment: 1 }) + match tx_report.result.clone() { + TxResult::Success => { + self.current_call_frame_mut()? + .stack + .push(address_to_word(retdata.to))?; + for (address, account_opt) in call_frame.cache_backup.clone() { + self.current_call_frame_mut()? + .cache_backup + .entry(address) + .or_insert(account_opt); + } + } + TxResult::Revert(err) => { + // Return value to sender + self.increase_account_balance(retdata.msg_sender, retdata.value)?; + + // Deployment failed so account shouldn't exist + cache::remove_account(&mut self.db.cache, &retdata.to); + self.accrued_substate.created_accounts.remove(&retdata.to); + + let current_call_frame = self.current_call_frame_mut()?; + // If revert we have to copy the return_data + if err == VMError::RevertOpcode { + current_call_frame.sub_return_data = tx_report.output.clone(); + } + current_call_frame.stack.push(CREATE_DEPLOYMENT_FAIL)?; + } + } + Ok(()) } } diff --git a/crates/vm/levm/src/utils.rs b/crates/vm/levm/src/utils.rs index 33bac9ae3e..7429f2a683 100644 --- a/crates/vm/levm/src/utils.rs +++ b/crates/vm/levm/src/utils.rs @@ -1,24 +1,19 @@ use crate::{ - call_frame::CallFrame, constants::*, db::{ cache::{self}, gen_db::GeneralizedDatabase, }, - errors::{InternalError, OutOfGasError, TxValidationError, VMError}, + errors::{InternalError, VMError}, gas_cost::{ - self, fake_exponential, ACCESS_LIST_ADDRESS_COST, ACCESS_LIST_STORAGE_KEY_COST, - BLOB_GAS_PER_BLOB, COLD_ADDRESS_ACCESS_COST, CREATE_BASE_COST, WARM_ADDRESS_ACCESS_COST, + fake_exponential, BLOB_GAS_PER_BLOB, COLD_ADDRESS_ACCESS_COST, WARM_ADDRESS_ACCESS_COST, }, opcodes::Opcode, vm::{EVMConfig, Substate}, AccountInfo, }; use bytes::Bytes; -use ethrex_common::{ - types::{tx_fields::*, Fork}, - Address, H256, U256, -}; +use ethrex_common::{types::tx_fields::*, Address, H256, U256}; use ethrex_rlp; use ethrex_rlp::encode::RLPEncode; use keccak_hash::keccak; @@ -122,116 +117,6 @@ pub fn get_valid_jump_destinations(code: &Bytes) -> Result, VMErr Ok(valid_jump_destinations) } -// ==================== Gas related functions ======================= -pub fn get_intrinsic_gas( - is_create: bool, - fork: Fork, - access_list: &AccessList, - authorization_list: &Option, - initial_call_frame: &CallFrame, -) -> Result { - // Intrinsic Gas = Calldata cost + Create cost + Base cost + Access list cost - let mut intrinsic_gas: u64 = 0; - - // Calldata Cost - // 4 gas for each zero byte in the transaction data 16 gas for each non-zero byte in the transaction. - let calldata_cost = - gas_cost::tx_calldata(&initial_call_frame.calldata, fork).map_err(VMError::OutOfGas)?; - - intrinsic_gas = intrinsic_gas - .checked_add(calldata_cost) - .ok_or(OutOfGasError::ConsumedGasOverflow)?; - - // Base Cost - intrinsic_gas = intrinsic_gas - .checked_add(TX_BASE_COST) - .ok_or(OutOfGasError::ConsumedGasOverflow)?; - - // Create Cost - if is_create { - // https://eips.ethereum.org/EIPS/eip-2#specification - if fork >= Fork::Homestead { - intrinsic_gas = intrinsic_gas - .checked_add(CREATE_BASE_COST) - .ok_or(OutOfGasError::ConsumedGasOverflow)?; - } - - // https://eips.ethereum.org/EIPS/eip-3860 - if fork >= Fork::Shanghai { - let number_of_words = initial_call_frame.calldata.len().div_ceil(WORD_SIZE); - let double_number_of_words: u64 = number_of_words - .checked_mul(2) - .ok_or(OutOfGasError::ConsumedGasOverflow)? - .try_into() - .map_err(|_| VMError::Internal(InternalError::ConversionError))?; - - intrinsic_gas = intrinsic_gas - .checked_add(double_number_of_words) - .ok_or(OutOfGasError::ConsumedGasOverflow)?; - } - } - - // Access List Cost - let mut access_lists_cost: u64 = 0; - for (_, keys) in access_list { - access_lists_cost = access_lists_cost - .checked_add(ACCESS_LIST_ADDRESS_COST) - .ok_or(OutOfGasError::ConsumedGasOverflow)?; - for _ in keys { - access_lists_cost = access_lists_cost - .checked_add(ACCESS_LIST_STORAGE_KEY_COST) - .ok_or(OutOfGasError::ConsumedGasOverflow)?; - } - } - - intrinsic_gas = intrinsic_gas - .checked_add(access_lists_cost) - .ok_or(OutOfGasError::ConsumedGasOverflow)?; - - // Authorization List Cost - // `unwrap_or_default` will return an empty vec when the `authorization_list` field is None. - // If the vec is empty, the len will be 0, thus the authorization_list_cost is 0. - let amount_of_auth_tuples: u64 = authorization_list - .clone() - .unwrap_or_default() - .len() - .try_into() - .map_err(|_| VMError::Internal(InternalError::ConversionError))?; - let authorization_list_cost = PER_EMPTY_ACCOUNT_COST - .checked_mul(amount_of_auth_tuples) - .ok_or(VMError::Internal(InternalError::GasOverflow))?; - - intrinsic_gas = intrinsic_gas - .checked_add(authorization_list_cost) - .ok_or(OutOfGasError::ConsumedGasOverflow)?; - - Ok(intrinsic_gas) -} - -pub fn add_intrinsic_gas( - is_create: bool, - fork: Fork, - initial_call_frame: &mut CallFrame, - access_list: &AccessList, - authorization_list: &Option, -) -> Result<(), VMError> { - // Intrinsic gas is the gas consumed by the transaction before the execution of the opcodes. Section 6.2 in the Yellow Paper. - - let intrinsic_gas = get_intrinsic_gas( - is_create, - fork, - access_list, - authorization_list, - initial_call_frame, - )?; - - initial_call_frame - .increase_consumed_gas(intrinsic_gas) - .map_err(|_| TxValidationError::IntrinsicGasTooLow)?; - - Ok(()) -} - // ================= Blob hash related functions ===================== pub fn get_base_fee_per_blob_gas( block_excess_blob_gas: Option, @@ -248,7 +133,7 @@ pub fn get_base_fee_per_blob_gas( /// Gets the max blob gas cost for a transaction that a user is /// willing to pay. pub fn get_max_blob_gas_price( - tx_blob_hashes: Vec, + tx_blob_hashes: &[H256], tx_max_fee_per_blob_gas: Option, ) -> Result { let blobhash_amount: u64 = tx_blob_hashes @@ -269,7 +154,7 @@ pub fn get_max_blob_gas_price( } /// Gets the actual blob gas cost. pub fn get_blob_gas_price( - tx_blob_hashes: Vec, + tx_blob_hashes: &[H256], block_excess_blob_gas: Option, evm_config: &EVMConfig, ) -> Result { @@ -354,107 +239,6 @@ pub fn get_authorized_address(account_info: &AccountInfo) -> Result, - initial_call_frame: &mut CallFrame, -) -> Result { - let mut refunded_gas: u64 = 0; - // IMPORTANT: - // If any of the below steps fail, immediately stop processing that tuple and continue to the next tuple in the list. It will in the case of multiple tuples for the same authority, set the code using the address in the last valid occurrence. - // If transaction execution results in failure (any exceptional condition or code reverting), setting delegation designations is not rolled back. - for auth_tuple in authorization_list.unwrap_or_default() { - let chain_id_not_equals_this_chain_id = auth_tuple.chain_id != chain_id; - let chain_id_not_zero = !auth_tuple.chain_id.is_zero(); - - // 1. Verify the chain id is either 0 or the chain’s current ID. - if chain_id_not_zero && chain_id_not_equals_this_chain_id { - continue; - } - - // 2. Verify the nonce is less than 2**64 - 1. - // NOTE: nonce is a u64, it's always less than or equal to u64::MAX - if auth_tuple.nonce == u64::MAX { - continue; - } - - // 3. authority = ecrecover(keccak(MAGIC || rlp([chain_id, address, nonce])), y_parity, r, s) - // s value must be less than or equal to secp256k1n/2, as specified in EIP-2. - let Some(authority_address) = eip7702_recover_address(&auth_tuple)? else { - continue; - }; - - // 4. Add authority to accessed_addresses (as defined in EIP-2929). - accrued_substate.touched_accounts.insert(authority_address); - let authority_account_info = db.get_account_no_push_cache(authority_address)?.info; - - // 5. Verify the code of authority is either empty or already delegated. - let empty_or_delegated = - authority_account_info.bytecode.is_empty() || has_delegation(&authority_account_info)?; - if !empty_or_delegated { - continue; - } - - // 6. Verify the nonce of authority is equal to nonce. In case authority does not exist in the trie, verify that nonce is equal to 0. - // If it doesn't exist, it means the nonce is zero. The access_account() function will return AccountInfo::default() - // If it has nonce, the account.info.nonce should equal auth_tuple.nonce - if authority_account_info.nonce != auth_tuple.nonce { - continue; - } - - // 7. Add PER_EMPTY_ACCOUNT_COST - PER_AUTH_BASE_COST gas to the global refund counter if authority exists in the trie. - if cache::is_account_cached(&db.cache, &authority_address) - || db.store.account_exists(authority_address) - { - let refunded_gas_if_exists = PER_EMPTY_ACCOUNT_COST - PER_AUTH_BASE_COST; - refunded_gas = refunded_gas - .checked_add(refunded_gas_if_exists) - .ok_or(VMError::Internal(InternalError::GasOverflow))?; - } - - // 8. Set the code of authority to be 0xef0100 || address. This is a delegation designation. - let delegation_bytes = [ - &SET_CODE_DELEGATION_BYTES[..], - auth_tuple.address.as_bytes(), - ] - .concat(); - - // As a special case, if address is 0x0000000000000000000000000000000000000000 do not write the designation. - // Clear the account’s code and reset the account’s code hash to the empty hash. - let auth_account = db.get_account_mut(authority_address, None)?; - - auth_account.info.bytecode = if auth_tuple.address != Address::zero() { - delegation_bytes.into() - } else { - Bytes::new() - }; - - // 9. Increase the nonce of authority by one. - db.increment_account_nonce(authority_address, None) - .map_err(|_| VMError::TxValidation(TxValidationError::NonceIsMax))?; - } - - let (code_address_info, _) = - db.access_account(accrued_substate, initial_call_frame.code_address)?; - - if has_delegation(&code_address_info)? { - initial_call_frame.code_address = get_authorized_address(&code_address_info)?; - let (auth_address_info, _) = - db.access_account(accrued_substate, initial_call_frame.code_address)?; - - initial_call_frame.bytecode = auth_address_info.bytecode.clone(); - } else { - initial_call_frame.bytecode = code_address_info.bytecode.clone(); - } - - initial_call_frame.valid_jump_destinations = - get_valid_jump_destinations(&initial_call_frame.bytecode).unwrap_or_default(); - Ok(refunded_gas) -} - pub fn eip7702_recover_address( auth_tuple: &AuthorizationTuple, ) -> Result, VMError> { @@ -573,3 +357,11 @@ pub fn eip7702_get_code( Ok((true, access_cost, auth_address, authorized_bytecode)) } + +/// Checks if a given account exists in the database or cache +pub fn account_exists(db: &mut GeneralizedDatabase, address: Address) -> bool { + match cache::get_account(&db.cache, &address) { + Some(_) => true, + None => db.store.account_exists(address), + } +} diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index 77f9ea9ac4..49280c3f9e 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -4,8 +4,14 @@ use crate::{ constants::*, db::{cache, gen_db::GeneralizedDatabase}, environment::Environment, - errors::{ExecutionReport, InternalError, OpcodeResult, TxResult, VMError}, - gas_cost::{self, STANDARD_TOKEN_COST, TOTAL_COST_FLOOR_PER_TOKEN}, + errors::{ + ExecutionReport, InternalError, OpcodeResult, OutOfGasError, TxResult, TxValidationError, + VMError, + }, + gas_cost::{ + self, ACCESS_LIST_ADDRESS_COST, ACCESS_LIST_STORAGE_KEY_COST, CREATE_BASE_COST, + STANDARD_TOKEN_COST, TOTAL_COST_FLOOR_PER_TOKEN, + }, hooks::{default_hook::DefaultHook, hook::Hook, l2_hook::L2Hook}, precompiles::{ execute_precompile, is_precompile, SIZE_PRECOMPILES_CANCUN, SIZE_PRECOMPILES_PRAGUE, @@ -43,9 +49,9 @@ pub struct Substate { /// - Gas Refunds /// - Transient Storage pub struct StateBackup { - substate: Substate, - refunded_gas: u64, - transient_storage: TransientStorage, + pub substate: Substate, + pub refunded_gas: u64, + pub transient_storage: TransientStorage, } impl StateBackup { @@ -168,6 +174,19 @@ pub struct VM<'a> { pub access_list: AccessList, pub authorization_list: Option, pub hooks: Vec>, + pub return_data: Vec, + pub backups: Vec, +} + +pub struct RetData { + pub is_create: bool, + pub ret_offset: U256, + pub ret_size: usize, + pub should_transfer_value: bool, + pub to: Address, + pub msg_sender: Address, + pub value: U256, + pub max_message_call_gas: u64, } impl<'a> VM<'a> { @@ -258,6 +277,8 @@ impl<'a> VM<'a> { access_list: tx.access_list(), authorization_list: tx.authorization_list(), hooks, + return_data: vec![], + backups: vec![], }) } TxKind::Create => { @@ -297,49 +318,80 @@ impl<'a> VM<'a> { access_list: tx.access_list(), authorization_list: tx.authorization_list(), hooks, + return_data: vec![], + backups: vec![], }) } } } - pub fn run_execution( - &mut self, - current_call_frame: &mut CallFrame, - ) -> Result { - // Backup of Database, Substate, Gas Refunds and Transient Storage if sub-context is reverted - let backup = StateBackup::new( - self.accrued_substate.clone(), - self.env.refunded_gas, - self.env.transient_storage.clone(), - ); - - if is_precompile(¤t_call_frame.code_address, self.env.config.fork) { - let precompile_result = execute_precompile(current_call_frame, self.env.config.fork); - return self.handle_precompile_result(precompile_result, current_call_frame, backup); + pub fn run_execution(&mut self) -> Result { + let fork = self.env.config.fork; + + if is_precompile(&self.current_call_frame()?.code_address, fork) { + let mut current_call_frame = self + .call_frames + .pop() + .ok_or(VMError::Internal(InternalError::CouldNotPopCallframe))?; + let precompile_result = execute_precompile(&mut current_call_frame, fork); + let backup = self + .backups + .pop() + .ok_or(VMError::Internal(InternalError::CouldNotPopCallframe))?; + let report = + self.handle_precompile_result(precompile_result, backup, &mut current_call_frame)?; + self.handle_return(¤t_call_frame, &report)?; + self.current_call_frame_mut()?.increment_pc_by(1)?; + return Ok(report); } loop { - let opcode = current_call_frame.next_opcode(); + let opcode = self.current_call_frame()?.next_opcode(); - let op_result = self.handle_current_opcode(opcode, current_call_frame); + let op_result = self.handle_current_opcode(opcode); match op_result { - Ok(OpcodeResult::Continue { pc_increment }) => { - current_call_frame.increment_pc_by(pc_increment)? - } + Ok(OpcodeResult::Continue { pc_increment }) => self + .current_call_frame_mut()? + .increment_pc_by(pc_increment)?, Ok(OpcodeResult::Halt) => { - return self.handle_opcode_result(current_call_frame, backup) + let mut current_call_frame = self + .call_frames + .pop() + .ok_or(VMError::Internal(InternalError::CouldNotPopCallframe))?; + let report = self.handle_opcode_result(&mut current_call_frame)?; + if self.handle_return(¤t_call_frame, &report)? { + self.current_call_frame_mut()?.increment_pc_by(1)?; + } else { + return Ok(report); + } + } + Err(error) => { + let mut current_call_frame = self + .call_frames + .pop() + .ok_or(VMError::Internal(InternalError::CouldNotPopCallframe))?; + let report = self.handle_opcode_error(error, &mut current_call_frame)?; + if self.handle_return(¤t_call_frame, &report)? { + self.current_call_frame_mut()?.increment_pc_by(1)?; + } else { + return Ok(report); + } } - Err(error) => return self.handle_opcode_error(error, current_call_frame, backup), } } } - pub fn restore_state(&mut self, backup: StateBackup, cache_backup: &mut CacheBackup) { - self.restore_cache_state(cache_backup); + pub fn restore_state( + &mut self, + backup: StateBackup, + call_frame_backup: CacheBackup, + ) -> Result<(), VMError> { + self.restore_cache_state(call_frame_backup)?; self.accrued_substate = backup.substate; self.env.refunded_gas = backup.refunded_gas; self.env.transient_storage = backup.transient_storage; + Ok(()) } pub fn is_create(&self) -> bool { @@ -387,14 +439,9 @@ impl<'a> VM<'a> { /// Main function for executing an external transaction pub fn execute(&mut self) -> Result { - let mut initial_call_frame = self - .call_frames - .pop() - .ok_or(VMError::Internal(InternalError::CouldNotPopCallframe))?; - - if let Err(e) = self.prepare_execution(&mut initial_call_frame) { + if let Err(e) = self.prepare_execution() { // We need to do a cleanup of the cache so that it doesn't interfere with next transaction's execution - self.restore_cache_state(&initial_call_frame.cache_backup); + self.restore_cache_state(self.current_call_frame()?.cache_backup.clone())?; return Err(e); } @@ -402,39 +449,40 @@ impl<'a> VM<'a> { // revert the changes it made. // Even if the transaction reverts we want to apply these kind of changes! // These are: Incrementing sender nonce, transferring value to a delegate account, decreasing sender account balance - initial_call_frame.cache_backup = HashMap::new(); + self.current_call_frame_mut()?.cache_backup = HashMap::new(); // In CREATE type transactions: // Add created contract to cache, reverting transaction if the address is already occupied if self.is_create() { - let new_contract_address = initial_call_frame.to; - let new_account = self.db.get_account_mut( - new_contract_address, - Some(&mut initial_call_frame.cache_backup), - )?; + let new_contract_address = self.current_call_frame()?.to; + let new_account = self.get_account_mut(new_contract_address)?; if new_account.has_code_or_nonce() { - return self.handle_create_non_empty_account(&mut initial_call_frame); + return self.handle_create_non_empty_account(); } - self.db.increase_account_balance( + self.increase_account_balance( new_contract_address, - initial_call_frame.msg_value, - Some(&mut initial_call_frame.cache_backup), + self.current_call_frame()?.msg_value, )?; // https://eips.ethereum.org/EIPS/eip-161 if self.env.config.fork >= Fork::SpuriousDragon { - self.db.increment_account_nonce( - new_contract_address, - Some(&mut initial_call_frame.cache_backup), - )?; + self.increment_account_nonce(new_contract_address)?; }; } - let mut report = self.run_execution(&mut initial_call_frame)?; + // Backup of Database, Substate, Gas Refunds and Transient Storage if sub-context is reverted + let backup = StateBackup::new( + self.accrued_substate.clone(), + self.env.refunded_gas, + self.env.transient_storage.clone(), + ); + self.backups.push(backup); + + let mut report = self.run_execution()?; - self.finalize_execution(&initial_call_frame, &mut report)?; + self.finalize_execution(&mut report)?; Ok(report) } @@ -445,6 +493,12 @@ impl<'a> VM<'a> { )) } + pub fn current_call_frame(&self) -> Result<&CallFrame, VMError> { + self.call_frames.last().ok_or(VMError::Internal( + InternalError::CouldNotAccessLastCallframe, + )) + } + /// Accesses to an account's storage slot. /// /// Accessed storage slots are stored in the `touched_storage_slots` set. @@ -453,7 +507,6 @@ impl<'a> VM<'a> { &mut self, address: Address, key: H256, - cache_backup: &mut CacheBackup, ) -> Result<(StorageSlot, bool), VMError> { // [EIP-2929] - Introduced conditional tracking of accessed storage slots for Berlin and later specs. let mut storage_slot_was_cold = false; @@ -487,7 +540,7 @@ impl<'a> VM<'a> { // When updating account storage of an account that's not yet cached we need to store the StorageSlot in the account // Note: We end up caching the account because it is the most straightforward way of doing it. - let account = self.db.get_account_mut(address, Some(cache_backup))?; + let account = self.get_account_mut(address)?; account.storage.insert(key, storage_slot.clone()); Ok((storage_slot, storage_slot_was_cold)) @@ -498,9 +551,8 @@ impl<'a> VM<'a> { address: Address, key: H256, new_value: U256, - cache_backup: &mut CacheBackup, ) -> Result<(), VMError> { - let account = self.db.get_account_mut(address, Some(cache_backup))?; + let account = self.get_account_mut(address)?; let account_original_storage_slot_value = account .storage .get(&key) @@ -513,10 +565,7 @@ impl<'a> VM<'a> { Ok(()) } - fn handle_create_non_empty_account( - &mut self, - initial_call_frame: &mut CallFrame, - ) -> Result { + fn handle_create_non_empty_account(&mut self) -> Result { let mut report = ExecutionReport { result: TxResult::Revert(VMError::AddressAlreadyOccupied), gas_used: self.env.gas_limit, @@ -525,47 +574,252 @@ impl<'a> VM<'a> { output: Bytes::new(), }; - self.finalize_execution(initial_call_frame, &mut report)?; + self.finalize_execution(&mut report)?; Ok(report) } - fn prepare_execution(&mut self, initial_call_frame: &mut CallFrame) -> Result<(), VMError> { + fn prepare_execution(&mut self) -> Result<(), VMError> { // NOTE: ATTOW the default hook is created in VM::new(), so // (in theory) _at least_ the default prepare execution should // run for hook in self.hooks.clone() { - hook.prepare_execution(self, initial_call_frame)?; + hook.prepare_execution(self)?; } Ok(()) } - fn finalize_execution( - &mut self, - initial_call_frame: &CallFrame, - report: &mut ExecutionReport, - ) -> Result<(), VMError> { + fn finalize_execution(&mut self, report: &mut ExecutionReport) -> Result<(), VMError> { // NOTE: ATTOW the default hook is created in VM::new(), so // (in theory) _at least_ the default finalize execution should // run + let call_frame = self + .call_frames + .pop() + .ok_or(VMError::Internal(InternalError::CouldNotPopCallframe))?; for hook in self.hooks.clone() { - hook.finalize_execution(self, initial_call_frame, report)?; + hook.finalize_execution(self, &call_frame, report)?; } + self.call_frames.push(call_frame); Ok(()) } /// Restores the cache state to the state before changes made during a callframe. - fn restore_cache_state(&mut self, backup: &CacheBackup) { - for (address, account_opt) in backup { + fn restore_cache_state(&mut self, call_frame_backup: CacheBackup) -> Result<(), VMError> { + for (address, account_opt) in call_frame_backup { if let Some(account) = account_opt { // restore the account to the state before the call - cache::insert_account(&mut self.db.cache, *address, account.clone()); + cache::insert_account(&mut self.db.cache, address, account.clone()); } else { // remove from cache if it wasn't there before - cache::remove_account(&mut self.db.cache, address); + cache::remove_account(&mut self.db.cache, &address); + } + } + Ok(()) + } + + /// Sets the account code as the EIP7702 determines. + pub fn eip7702_set_access_code(&mut self) -> Result<(), VMError> { + let mut refunded_gas: u64 = 0; + // IMPORTANT: + // If any of the below steps fail, immediately stop processing that tuple and continue to the next tuple in the list. It will in the case of multiple tuples for the same authority, set the code using the address in the last valid occurrence. + // If transaction execution results in failure (any exceptional condition or code reverting), setting delegation designations is not rolled back. + for auth_tuple in self.authorization_list.clone().unwrap_or_default() { + let chain_id_not_equals_this_chain_id = auth_tuple.chain_id != self.env.chain_id; + let chain_id_not_zero = !auth_tuple.chain_id.is_zero(); + + // 1. Verify the chain id is either 0 or the chain’s current ID. + if chain_id_not_zero && chain_id_not_equals_this_chain_id { + continue; + } + + // 2. Verify the nonce is less than 2**64 - 1. + // NOTE: nonce is a u64, it's always less than or equal to u64::MAX + if auth_tuple.nonce == u64::MAX { + continue; + } + + // 3. authority = ecrecover(keccak(MAGIC || rlp([chain_id, address, nonce])), y_parity, r, s) + // s value must be less than or equal to secp256k1n/2, as specified in EIP-2. + let Some(authority_address) = eip7702_recover_address(&auth_tuple)? else { + continue; + }; + + // 4. Add authority to accessed_addresses (as defined in EIP-2929). + self.accrued_substate + .touched_accounts + .insert(authority_address); + let authority_account_info = self.db.get_account_no_push_cache(authority_address)?.info; + + // 5. Verify the code of authority is either empty or already delegated. + let empty_or_delegated = authority_account_info.bytecode.is_empty() + || has_delegation(&authority_account_info)?; + if !empty_or_delegated { + continue; + } + + // 6. Verify the nonce of authority is equal to nonce. In case authority does not exist in the trie, verify that nonce is equal to 0. + // If it doesn't exist, it means the nonce is zero. The access_account() function will return AccountInfo::default() + // If it has nonce, the account.info.nonce should equal auth_tuple.nonce + if authority_account_info.nonce != auth_tuple.nonce { + continue; } + + // 7. Add PER_EMPTY_ACCOUNT_COST - PER_AUTH_BASE_COST gas to the global refund counter if authority exists in the trie. + if cache::is_account_cached(&self.db.cache, &authority_address) + || account_exists(self.db, authority_address) + { + let refunded_gas_if_exists = PER_EMPTY_ACCOUNT_COST - PER_AUTH_BASE_COST; + refunded_gas = refunded_gas + .checked_add(refunded_gas_if_exists) + .ok_or(VMError::Internal(InternalError::GasOverflow))?; + } + + // 8. Set the code of authority to be 0xef0100 || address. This is a delegation designation. + let delegation_bytes = [ + &SET_CODE_DELEGATION_BYTES[..], + auth_tuple.address.as_bytes(), + ] + .concat(); + + // As a special case, if address is 0x0000000000000000000000000000000000000000 do not write the designation. + // Clear the account’s code and reset the account’s code hash to the empty hash. + let auth_account = self.get_account_mut(authority_address)?; + + auth_account.info.bytecode = if auth_tuple.address != Address::zero() { + delegation_bytes.into() + } else { + Bytes::new() + }; + + // 9. Increase the nonce of authority by one. + self.increment_account_nonce(authority_address) + .map_err(|_| VMError::TxValidation(TxValidationError::NonceIsMax))?; + } + + let code_address = self.current_call_frame()?.code_address; + let (code_address_info, _) = self + .db + .access_account(&mut self.accrued_substate, code_address)?; + + if has_delegation(&code_address_info)? { + self.current_call_frame_mut()?.code_address = + get_authorized_address(&code_address_info)?; + let code_address = self.current_call_frame()?.code_address; + let (auth_address_info, _) = self + .db + .access_account(&mut self.accrued_substate, code_address)?; + + self.current_call_frame_mut()?.bytecode = auth_address_info.bytecode.clone(); + } else { + self.current_call_frame_mut()?.bytecode = code_address_info.bytecode.clone(); } + + self.current_call_frame_mut()?.valid_jump_destinations = + get_valid_jump_destinations(&self.current_call_frame()?.bytecode).unwrap_or_default(); + + self.env.refunded_gas = refunded_gas; + + Ok(()) + } + + pub fn add_intrinsic_gas(&mut self) -> Result<(), VMError> { + // Intrinsic gas is the gas consumed by the transaction before the execution of the opcodes. Section 6.2 in the Yellow Paper. + + let intrinsic_gas = self.get_intrinsic_gas()?; + + self.current_call_frame_mut()? + .increase_consumed_gas(intrinsic_gas) + .map_err(|_| TxValidationError::IntrinsicGasTooLow)?; + + Ok(()) + } + + // ==================== Gas related functions ======================= + pub fn get_intrinsic_gas(&self) -> Result { + // Intrinsic Gas = Calldata cost + Create cost + Base cost + Access list cost + let mut intrinsic_gas: u64 = 0; + + // Calldata Cost + // 4 gas for each zero byte in the transaction data 16 gas for each non-zero byte in the transaction. + let calldata_cost = + gas_cost::tx_calldata(&self.current_call_frame()?.calldata, self.env.config.fork) + .map_err(VMError::OutOfGas)?; + + intrinsic_gas = intrinsic_gas + .checked_add(calldata_cost) + .ok_or(OutOfGasError::ConsumedGasOverflow)?; + + // Base Cost + intrinsic_gas = intrinsic_gas + .checked_add(TX_BASE_COST) + .ok_or(OutOfGasError::ConsumedGasOverflow)?; + + // Create Cost + if self.is_create() { + // https://eips.ethereum.org/EIPS/eip-2#specification + if self.env.config.fork >= Fork::Homestead { + intrinsic_gas = intrinsic_gas + .checked_add(CREATE_BASE_COST) + .ok_or(OutOfGasError::ConsumedGasOverflow)?; + } + + // https://eips.ethereum.org/EIPS/eip-3860 + if self.env.config.fork >= Fork::Shanghai { + let number_of_words = &self + .current_call_frame()? + .calldata + .len() + .div_ceil(WORD_SIZE); + let double_number_of_words: u64 = number_of_words + .checked_mul(2) + .ok_or(OutOfGasError::ConsumedGasOverflow)? + .try_into() + .map_err(|_| VMError::Internal(InternalError::ConversionError))?; + + intrinsic_gas = intrinsic_gas + .checked_add(double_number_of_words) + .ok_or(OutOfGasError::ConsumedGasOverflow)?; + } + } + + // Access List Cost + let mut access_lists_cost: u64 = 0; + for (_, keys) in &self.access_list { + access_lists_cost = access_lists_cost + .checked_add(ACCESS_LIST_ADDRESS_COST) + .ok_or(OutOfGasError::ConsumedGasOverflow)?; + for _ in keys { + access_lists_cost = access_lists_cost + .checked_add(ACCESS_LIST_STORAGE_KEY_COST) + .ok_or(OutOfGasError::ConsumedGasOverflow)?; + } + } + + intrinsic_gas = intrinsic_gas + .checked_add(access_lists_cost) + .ok_or(OutOfGasError::ConsumedGasOverflow)?; + + // Authorization List Cost + // `unwrap_or_default` will return an empty vec when the `authorization_list` field is None. + // If the vec is empty, the len will be 0, thus the authorization_list_cost is 0. + let amount_of_auth_tuples: u64 = self + .authorization_list + .clone() + .unwrap_or_default() + .len() + .try_into() + .map_err(|_| VMError::Internal(InternalError::ConversionError))?; + let authorization_list_cost = PER_EMPTY_ACCOUNT_COST + .checked_mul(amount_of_auth_tuples) + .ok_or(VMError::Internal(InternalError::GasOverflow))?; + + intrinsic_gas = intrinsic_gas + .checked_add(authorization_list_cost) + .ok_or(OutOfGasError::ConsumedGasOverflow)?; + + Ok(intrinsic_gas) } } diff --git a/test_data/genesis-l1-dev.json b/test_data/genesis-l1-dev.json index 3f78a016d4..9dcceede30 100644 --- a/test_data/genesis-l1-dev.json +++ b/test_data/genesis-l1-dev.json @@ -16,6 +16,7 @@ "terminalTotalDifficultyPassed": true, "shanghaiTime": 0, "cancunTime": 0, + "pragueTime": 0, "depositContractAddress": "0x00000000219ab540356cBB839Cbe05303d7705Fa" }, "alloc": { diff --git a/test_data/genesis-l1.json b/test_data/genesis-l1.json index 12646296b5..7ab96f2137 100644 --- a/test_data/genesis-l1.json +++ b/test_data/genesis-l1.json @@ -16,7 +16,7 @@ "terminalTotalDifficultyPassed": true, "shanghaiTime": 0, "cancunTime": 0, - "pragueTime": 1718232101, + "pragueTime": 0, "depositContractAddress": "0x00000000219ab540356cBB839Cbe05303d7705Fa" }, "alloc": { diff --git a/test_data/genesis-l2.json b/test_data/genesis-l2.json index f797b68b1a..0183d90327 100644 --- a/test_data/genesis-l2.json +++ b/test_data/genesis-l2.json @@ -1 +1 @@ -{"config":{"chainId":1729,"homesteadBlock":0,"daoForkBlock":null,"daoForkSupport":false,"eip150Block":0,"eip155Block":0,"eip158Block":0,"byzantiumBlock":0,"constantinopleBlock":0,"petersburgBlock":0,"istanbulBlock":0,"muirGlacierBlock":null,"berlinBlock":0,"londonBlock":0,"arrowGlacierBlock":null,"grayGlacierBlock":null,"mergeNetsplitBlock":0,"shanghaiTime":0,"cancunTime":0,"pragueTime":0,"verkleTime":null,"terminalTotalDifficulty":0,"terminalTotalDifficultyPassed":true,"blobSchedule":{"cancun":{"target":3,"max":6,"baseFeeUpdateFraction":3338477},"prague":{"target":6,"max":9,"baseFeeUpdateFraction":5007716}},"depositContractAddress":"0x00000000219ab540356cbb839cbe05303d7705fa"},"alloc":{"0x0000000000000000000000000000000000000000":{"code":"0x","storage":{},"balance":"0xc097ce7bc90715b34b9f1000000000","nonce":"0x0"},"0x000000000000000000000000000000000000ffff":{"code":"0x60806040526004361015610013575b61014b565b61001d5f3561003c565b806351cff8d9146100375763fccc28130361000e57610116565b6100a9565b60e01c90565b60405190565b5f80fd5b60018060a01b031690565b6100609061004c565b90565b61006c81610057565b0361007357565b5f80fd5b9050359061008482610063565b565b9060208282031261009f5761009c915f01610077565b90565b610048565b5f0190565b6100bc6100b7366004610086565b6103db565b6100c4610042565b806100ce816100a4565b0390f35b5f80fd5b5f9103126100e057565b610048565b5f90565b6100f16100e5565b90565b6100fd90610057565b9052565b9190610114905f602085019401906100f4565b565b34610146576101263660046100d6565b6101426101316100e9565b610139610042565b91829182610101565b0390f35b6100d2565b5f80fd5b90565b90565b90565b61016c61016761017192610152565b610155565b61014f565b90565b60209181520190565b60207f7665000000000000000000000000000000000000000000000000000000000000917f5769746864726177616c20616d6f756e74206d75737420626520706f736974695f8201520152565b6101d76022604092610174565b6101e08161017d565b0190565b6101f99060208101905f8183039101526101ca565b90565b1561020357565b61020b610042565b62461bcd60e51b815280610221600482016101e4565b0390fd5b905090565b6102355f8092610225565b0190565b6102429061022a565b90565b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b9061026d90610245565b810190811067ffffffffffffffff82111761028757604052565b61024f565b9061029f610298610042565b9283610263565b565b67ffffffffffffffff81116102bf576102bb602091610245565b0190565b61024f565b906102d66102d1836102a1565b61028c565b918252565b606090565b3d5f146102fb576102f03d6102c4565b903d5f602084013e5b565b6103036102db565b906102f9565b5f7f4661696c656420746f206275726e204574686572000000000000000000000000910152565b61033d6014602092610174565b61034681610309565b0190565b61035f9060208101905f818303910152610330565b90565b1561036957565b610371610042565b62461bcd60e51b8152806103876004820161034a565b0390fd5b61039f61039a6103a49261004c565b610155565b61004c565b90565b6103b09061038b565b90565b6103bc906103a7565b90565b6103d36103ce6103d89261014f565b610155565b61014f565b90565b6103f7346103f16103eb5f610158565b9161014f565b116101fc565b61042a5f806104046100e5565b3461040d610042565b908161041881610239565b03925af16104246102e0565b50610362565b3390349061046a61046461045e7fbb2689ff876f7ef453cf8865dde5ab10349d222e2e1383c5152fbdb083f02da2956103b3565b926103b3565b926103bf565b92610473610042565b8061047d816100a4565b0390a456fea2646970667358221220963311c7b70148b20b2c2612d53c7f03b97179ea3c7c096315babfbd8dfdf71f64736f6c634300081b0033","storage":{},"balance":"0x0","nonce":"0x1"},"0x3d1e15a1a55578f7c920884a9943b3b35d0d885b":{"code":"0x","storage":{},"balance":"0xc097ce7bc90715b34b9f1000000000","nonce":"0x0"}},"coinbase":"0x0000000000000000000000000000000000000000","difficulty":"0x1","extraData":"0x","gasLimit":"0x8f0d180","nonce":"0x1234","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","timestamp":"1718040081","baseFeePerGas":null,"blobGasUsed":null,"excessBlobGas":null,"requestsHash":null} \ No newline at end of file +{"config":{"chainId":1729,"homesteadBlock":0,"daoForkBlock":null,"daoForkSupport":false,"eip150Block":0,"eip155Block":0,"eip158Block":0,"byzantiumBlock":0,"constantinopleBlock":0,"petersburgBlock":0,"istanbulBlock":0,"muirGlacierBlock":null,"berlinBlock":0,"londonBlock":0,"arrowGlacierBlock":null,"grayGlacierBlock":null,"mergeNetsplitBlock":0,"shanghaiTime":0,"cancunTime":0,"pragueTime":0,"verkleTime":null,"terminalTotalDifficulty":0,"terminalTotalDifficultyPassed":true,"blobSchedule":{"cancun":{"target":3,"max":6,"baseFeeUpdateFraction":3338477},"prague":{"target":6,"max":9,"baseFeeUpdateFraction":5007716}},"depositContractAddress":"0x00000000219ab540356cbb839cbe05303d7705fa"},"alloc":{"0x0000000000000000000000000000000000000000":{"code":"0x","storage":{},"balance":"0xc097ce7bc90715b34b9f1000000000","nonce":"0x0"},"0x000000000000000000000000000000000000ffff":{"code":"0x60806040526004361015610013575b61014b565b61001d5f3561003c565b806351cff8d9146100375763fccc28130361000e57610116565b6100a9565b60e01c90565b60405190565b5f80fd5b60018060a01b031690565b6100609061004c565b90565b61006c81610057565b0361007357565b5f80fd5b9050359061008482610063565b565b9060208282031261009f5761009c915f01610077565b90565b610048565b5f0190565b6100bc6100b7366004610086565b6103db565b6100c4610042565b806100ce816100a4565b0390f35b5f80fd5b5f9103126100e057565b610048565b5f90565b6100f16100e5565b90565b6100fd90610057565b9052565b9190610114905f602085019401906100f4565b565b34610146576101263660046100d6565b6101426101316100e9565b610139610042565b91829182610101565b0390f35b6100d2565b5f80fd5b90565b90565b90565b61016c61016761017192610152565b610155565b61014f565b90565b60209181520190565b60207f7665000000000000000000000000000000000000000000000000000000000000917f5769746864726177616c20616d6f756e74206d75737420626520706f736974695f8201520152565b6101d76022604092610174565b6101e08161017d565b0190565b6101f99060208101905f8183039101526101ca565b90565b1561020357565b61020b610042565b62461bcd60e51b815280610221600482016101e4565b0390fd5b905090565b6102355f8092610225565b0190565b6102429061022a565b90565b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b9061026d90610245565b810190811067ffffffffffffffff82111761028757604052565b61024f565b9061029f610298610042565b9283610263565b565b67ffffffffffffffff81116102bf576102bb602091610245565b0190565b61024f565b906102d66102d1836102a1565b61028c565b918252565b606090565b3d5f146102fb576102f03d6102c4565b903d5f602084013e5b565b6103036102db565b906102f9565b5f7f4661696c656420746f206275726e204574686572000000000000000000000000910152565b61033d6014602092610174565b61034681610309565b0190565b61035f9060208101905f818303910152610330565b90565b1561036957565b610371610042565b62461bcd60e51b8152806103876004820161034a565b0390fd5b61039f61039a6103a49261004c565b610155565b61004c565b90565b6103b09061038b565b90565b6103bc906103a7565b90565b6103d36103ce6103d89261014f565b610155565b61014f565b90565b6103f7346103f16103eb5f610158565b9161014f565b116101fc565b61042a5f806104046100e5565b3461040d610042565b908161041881610239565b03925af16104246102e0565b50610362565b3390349061046a61046461045e7fbb2689ff876f7ef453cf8865dde5ab10349d222e2e1383c5152fbdb083f02da2956103b3565b926103b3565b926103bf565b92610473610042565b8061047d816100a4565b0390a456fea26469706673582212208f9a0d09110a4b229a595ac9a9ab7d35664a0747f8f6491de7cd67897a1166c364736f6c634300081d0033","storage":{},"balance":"0x0","nonce":"0x1"},"0x3d1e15a1a55578f7c920884a9943b3b35d0d885b":{"code":"0x","storage":{},"balance":"0xc097ce7bc90715b34b9f1000000000","nonce":"0x0"}},"coinbase":"0x0000000000000000000000000000000000000000","difficulty":"0x1","extraData":"0x","gasLimit":"0x8f0d180","nonce":"0x1234","mixHash":"0x0000000000000000000000000000000000000000000000000000000000000000","timestamp":"1718040081","baseFeePerGas":null,"blobGasUsed":null,"excessBlobGas":null,"requestsHash":null} \ No newline at end of file diff --git a/test_data/network_params.yaml b/test_data/network_params.yaml index 01a981ae7f..0725144f04 100644 --- a/test_data/network_params.yaml +++ b/test_data/network_params.yaml @@ -32,10 +32,13 @@ network_params: # The address of the staking contract address on the Eth1 chain deposit_contract_address: "0x4242424242424242424242424242424242424242" +ethereum_metrics_exporter_enabled: true + additional_services: - dora - forkmon - tx_fuzz + - prometheus_grafana tx_fuzz_params: # A list of optional extra params that will be passed to the TX Fuzz container for modifying its behaviour @@ -46,3 +49,7 @@ blockscout_params: image: "blockscout/blockscout:latest" verif_image: "ghcr.io/blockscout/smart-contract-verifier:latest" frontend_image: "ghcr.io/blockscout/frontend:latest" + +prometheus_params: + # TODO: switch to latest when it points to v3.x + image: "prom/prometheus:v3.2.1" From 1f84ba950c98d542d1411edf7085314a915df13c Mon Sep 17 00:00:00 2001 From: JereSalo Date: Thu, 24 Apr 2025 10:08:33 -0300 Subject: [PATCH 41/47] clippy --- crates/l2/prover/src/backends/exec.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/l2/prover/src/backends/exec.rs b/crates/l2/prover/src/backends/exec.rs index cf466a4de0..756f26ccfc 100644 --- a/crates/l2/prover/src/backends/exec.rs +++ b/crates/l2/prover/src/backends/exec.rs @@ -1,4 +1,4 @@ -use ethrex_blockchain::validate_block; +use ethrex_blockchain::{validate_block, validate_gas_used}; use ethrex_l2::utils::prover::proving_systems::{ProofCalldata, ProverType}; use ethrex_l2_sdk::calldata::Value; use ethrex_vm::Evm; From 555669afb87ef16a01df17bbb12f45e04a7da087 Mon Sep 17 00:00:00 2001 From: JereSalo Date: Thu, 24 Apr 2025 10:19:27 -0300 Subject: [PATCH 42/47] move some methods to utils.rs to declutter vm.rs --- crates/vm/levm/src/utils.rs | 213 +++++++++++++++++++++++++++++++++++- crates/vm/levm/src/vm.rs | 213 +----------------------------------- 2 files changed, 211 insertions(+), 215 deletions(-) diff --git a/crates/vm/levm/src/utils.rs b/crates/vm/levm/src/utils.rs index 7429f2a683..a608a925a9 100644 --- a/crates/vm/levm/src/utils.rs +++ b/crates/vm/levm/src/utils.rs @@ -4,16 +4,16 @@ use crate::{ cache::{self}, gen_db::GeneralizedDatabase, }, - errors::{InternalError, VMError}, + errors::{InternalError, OutOfGasError, TxValidationError, VMError}, gas_cost::{ - fake_exponential, BLOB_GAS_PER_BLOB, COLD_ADDRESS_ACCESS_COST, WARM_ADDRESS_ACCESS_COST, + self, fake_exponential, ACCESS_LIST_ADDRESS_COST, ACCESS_LIST_STORAGE_KEY_COST, BLOB_GAS_PER_BLOB, COLD_ADDRESS_ACCESS_COST, CREATE_BASE_COST, WARM_ADDRESS_ACCESS_COST }, opcodes::Opcode, - vm::{EVMConfig, Substate}, + vm::{EVMConfig, Substate, VM}, AccountInfo, }; use bytes::Bytes; -use ethrex_common::{types::tx_fields::*, Address, H256, U256}; +use ethrex_common::{types::{tx_fields::*, Fork}, Address, H256, U256}; use ethrex_rlp; use ethrex_rlp::encode::RLPEncode; use keccak_hash::keccak; @@ -365,3 +365,208 @@ pub fn account_exists(db: &mut GeneralizedDatabase, address: Address) -> bool { None => db.store.account_exists(address), } } + +impl<'a> VM<'a> { + /// Sets the account code as the EIP7702 determines. + pub fn eip7702_set_access_code(&mut self) -> Result<(), VMError> { + let mut refunded_gas: u64 = 0; + // IMPORTANT: + // If any of the below steps fail, immediately stop processing that tuple and continue to the next tuple in the list. It will in the case of multiple tuples for the same authority, set the code using the address in the last valid occurrence. + // If transaction execution results in failure (any exceptional condition or code reverting), setting delegation designations is not rolled back. + for auth_tuple in self.authorization_list.clone().unwrap_or_default() { + let chain_id_not_equals_this_chain_id = auth_tuple.chain_id != self.env.chain_id; + let chain_id_not_zero = !auth_tuple.chain_id.is_zero(); + + // 1. Verify the chain id is either 0 or the chain’s current ID. + if chain_id_not_zero && chain_id_not_equals_this_chain_id { + continue; + } + + // 2. Verify the nonce is less than 2**64 - 1. + // NOTE: nonce is a u64, it's always less than or equal to u64::MAX + if auth_tuple.nonce == u64::MAX { + continue; + } + + // 3. authority = ecrecover(keccak(MAGIC || rlp([chain_id, address, nonce])), y_parity, r, s) + // s value must be less than or equal to secp256k1n/2, as specified in EIP-2. + let Some(authority_address) = eip7702_recover_address(&auth_tuple)? else { + continue; + }; + + // 4. Add authority to accessed_addresses (as defined in EIP-2929). + self.accrued_substate + .touched_accounts + .insert(authority_address); + let authority_account_info = self.db.get_account_no_push_cache(authority_address)?.info; + + // 5. Verify the code of authority is either empty or already delegated. + let empty_or_delegated = authority_account_info.bytecode.is_empty() + || has_delegation(&authority_account_info)?; + if !empty_or_delegated { + continue; + } + + // 6. Verify the nonce of authority is equal to nonce. In case authority does not exist in the trie, verify that nonce is equal to 0. + // If it doesn't exist, it means the nonce is zero. The access_account() function will return AccountInfo::default() + // If it has nonce, the account.info.nonce should equal auth_tuple.nonce + if authority_account_info.nonce != auth_tuple.nonce { + continue; + } + + // 7. Add PER_EMPTY_ACCOUNT_COST - PER_AUTH_BASE_COST gas to the global refund counter if authority exists in the trie. + if cache::is_account_cached(&self.db.cache, &authority_address) + || account_exists(self.db, authority_address) + { + let refunded_gas_if_exists = PER_EMPTY_ACCOUNT_COST - PER_AUTH_BASE_COST; + refunded_gas = refunded_gas + .checked_add(refunded_gas_if_exists) + .ok_or(VMError::Internal(InternalError::GasOverflow))?; + } + + // 8. Set the code of authority to be 0xef0100 || address. This is a delegation designation. + let delegation_bytes = [ + &SET_CODE_DELEGATION_BYTES[..], + auth_tuple.address.as_bytes(), + ] + .concat(); + + // As a special case, if address is 0x0000000000000000000000000000000000000000 do not write the designation. + // Clear the account’s code and reset the account’s code hash to the empty hash. + let auth_account = self.get_account_mut(authority_address)?; + + auth_account.info.bytecode = if auth_tuple.address != Address::zero() { + delegation_bytes.into() + } else { + Bytes::new() + }; + + // 9. Increase the nonce of authority by one. + self.increment_account_nonce(authority_address) + .map_err(|_| VMError::TxValidation(TxValidationError::NonceIsMax))?; + } + + let code_address = self.current_call_frame()?.code_address; + let (code_address_info, _) = self + .db + .access_account(&mut self.accrued_substate, code_address)?; + + if has_delegation(&code_address_info)? { + self.current_call_frame_mut()?.code_address = + get_authorized_address(&code_address_info)?; + let code_address = self.current_call_frame()?.code_address; + let (auth_address_info, _) = self + .db + .access_account(&mut self.accrued_substate, code_address)?; + + self.current_call_frame_mut()?.bytecode = auth_address_info.bytecode.clone(); + } else { + self.current_call_frame_mut()?.bytecode = code_address_info.bytecode.clone(); + } + + self.current_call_frame_mut()?.valid_jump_destinations = + get_valid_jump_destinations(&self.current_call_frame()?.bytecode).unwrap_or_default(); + + self.env.refunded_gas = refunded_gas; + + Ok(()) + } + + pub fn add_intrinsic_gas(&mut self) -> Result<(), VMError> { + // Intrinsic gas is the gas consumed by the transaction before the execution of the opcodes. Section 6.2 in the Yellow Paper. + + let intrinsic_gas = self.get_intrinsic_gas()?; + + self.current_call_frame_mut()? + .increase_consumed_gas(intrinsic_gas) + .map_err(|_| TxValidationError::IntrinsicGasTooLow)?; + + Ok(()) + } + + // ==================== Gas related functions ======================= + pub fn get_intrinsic_gas(&self) -> Result { + // Intrinsic Gas = Calldata cost + Create cost + Base cost + Access list cost + let mut intrinsic_gas: u64 = 0; + + // Calldata Cost + // 4 gas for each zero byte in the transaction data 16 gas for each non-zero byte in the transaction. + let calldata_cost = + gas_cost::tx_calldata(&self.current_call_frame()?.calldata, self.env.config.fork) + .map_err(VMError::OutOfGas)?; + + intrinsic_gas = intrinsic_gas + .checked_add(calldata_cost) + .ok_or(OutOfGasError::ConsumedGasOverflow)?; + + // Base Cost + intrinsic_gas = intrinsic_gas + .checked_add(TX_BASE_COST) + .ok_or(OutOfGasError::ConsumedGasOverflow)?; + + // Create Cost + if self.is_create() { + // https://eips.ethereum.org/EIPS/eip-2#specification + if self.env.config.fork >= Fork::Homestead { + intrinsic_gas = intrinsic_gas + .checked_add(CREATE_BASE_COST) + .ok_or(OutOfGasError::ConsumedGasOverflow)?; + } + + // https://eips.ethereum.org/EIPS/eip-3860 + if self.env.config.fork >= Fork::Shanghai { + let number_of_words = &self + .current_call_frame()? + .calldata + .len() + .div_ceil(WORD_SIZE); + let double_number_of_words: u64 = number_of_words + .checked_mul(2) + .ok_or(OutOfGasError::ConsumedGasOverflow)? + .try_into() + .map_err(|_| VMError::Internal(InternalError::ConversionError))?; + + intrinsic_gas = intrinsic_gas + .checked_add(double_number_of_words) + .ok_or(OutOfGasError::ConsumedGasOverflow)?; + } + } + + // Access List Cost + let mut access_lists_cost: u64 = 0; + for (_, keys) in &self.access_list { + access_lists_cost = access_lists_cost + .checked_add(ACCESS_LIST_ADDRESS_COST) + .ok_or(OutOfGasError::ConsumedGasOverflow)?; + for _ in keys { + access_lists_cost = access_lists_cost + .checked_add(ACCESS_LIST_STORAGE_KEY_COST) + .ok_or(OutOfGasError::ConsumedGasOverflow)?; + } + } + + intrinsic_gas = intrinsic_gas + .checked_add(access_lists_cost) + .ok_or(OutOfGasError::ConsumedGasOverflow)?; + + // Authorization List Cost + // `unwrap_or_default` will return an empty vec when the `authorization_list` field is None. + // If the vec is empty, the len will be 0, thus the authorization_list_cost is 0. + let amount_of_auth_tuples: u64 = self + .authorization_list + .clone() + .unwrap_or_default() + .len() + .try_into() + .map_err(|_| VMError::Internal(InternalError::ConversionError))?; + let authorization_list_cost = PER_EMPTY_ACCOUNT_COST + .checked_mul(amount_of_auth_tuples) + .ok_or(VMError::Internal(InternalError::GasOverflow))?; + + intrinsic_gas = intrinsic_gas + .checked_add(authorization_list_cost) + .ok_or(OutOfGasError::ConsumedGasOverflow)?; + + Ok(intrinsic_gas) + } +} diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index ad22d7ac9f..7d3f041065 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -4,14 +4,8 @@ use crate::{ constants::*, db::{cache, gen_db::GeneralizedDatabase}, environment::Environment, - errors::{ - ExecutionReport, InternalError, OpcodeResult, OutOfGasError, TxResult, TxValidationError, - VMError, - }, - gas_cost::{ - self, ACCESS_LIST_ADDRESS_COST, ACCESS_LIST_STORAGE_KEY_COST, CREATE_BASE_COST, - STANDARD_TOKEN_COST, TOTAL_COST_FLOOR_PER_TOKEN, - }, + errors::{ExecutionReport, InternalError, OpcodeResult, TxResult, VMError}, + gas_cost::{self, STANDARD_TOKEN_COST, TOTAL_COST_FLOOR_PER_TOKEN}, hooks::{default_hook::DefaultHook, hook::Hook, l2_hook::L2Hook}, precompiles::{ execute_precompile, is_precompile, SIZE_PRECOMPILES_CANCUN, SIZE_PRECOMPILES_PRAGUE, @@ -618,207 +612,4 @@ impl<'a> VM<'a> { } Ok(()) } - - /// Sets the account code as the EIP7702 determines. - pub fn eip7702_set_access_code(&mut self) -> Result<(), VMError> { - let mut refunded_gas: u64 = 0; - // IMPORTANT: - // If any of the below steps fail, immediately stop processing that tuple and continue to the next tuple in the list. It will in the case of multiple tuples for the same authority, set the code using the address in the last valid occurrence. - // If transaction execution results in failure (any exceptional condition or code reverting), setting delegation designations is not rolled back. - for auth_tuple in self.authorization_list.clone().unwrap_or_default() { - let chain_id_not_equals_this_chain_id = auth_tuple.chain_id != self.env.chain_id; - let chain_id_not_zero = !auth_tuple.chain_id.is_zero(); - - // 1. Verify the chain id is either 0 or the chain’s current ID. - if chain_id_not_zero && chain_id_not_equals_this_chain_id { - continue; - } - - // 2. Verify the nonce is less than 2**64 - 1. - // NOTE: nonce is a u64, it's always less than or equal to u64::MAX - if auth_tuple.nonce == u64::MAX { - continue; - } - - // 3. authority = ecrecover(keccak(MAGIC || rlp([chain_id, address, nonce])), y_parity, r, s) - // s value must be less than or equal to secp256k1n/2, as specified in EIP-2. - let Some(authority_address) = eip7702_recover_address(&auth_tuple)? else { - continue; - }; - - // 4. Add authority to accessed_addresses (as defined in EIP-2929). - self.accrued_substate - .touched_accounts - .insert(authority_address); - let authority_account_info = self.db.get_account_no_push_cache(authority_address)?.info; - - // 5. Verify the code of authority is either empty or already delegated. - let empty_or_delegated = authority_account_info.bytecode.is_empty() - || has_delegation(&authority_account_info)?; - if !empty_or_delegated { - continue; - } - - // 6. Verify the nonce of authority is equal to nonce. In case authority does not exist in the trie, verify that nonce is equal to 0. - // If it doesn't exist, it means the nonce is zero. The access_account() function will return AccountInfo::default() - // If it has nonce, the account.info.nonce should equal auth_tuple.nonce - if authority_account_info.nonce != auth_tuple.nonce { - continue; - } - - // 7. Add PER_EMPTY_ACCOUNT_COST - PER_AUTH_BASE_COST gas to the global refund counter if authority exists in the trie. - if cache::is_account_cached(&self.db.cache, &authority_address) - || account_exists(self.db, authority_address) - { - let refunded_gas_if_exists = PER_EMPTY_ACCOUNT_COST - PER_AUTH_BASE_COST; - refunded_gas = refunded_gas - .checked_add(refunded_gas_if_exists) - .ok_or(VMError::Internal(InternalError::GasOverflow))?; - } - - // 8. Set the code of authority to be 0xef0100 || address. This is a delegation designation. - let delegation_bytes = [ - &SET_CODE_DELEGATION_BYTES[..], - auth_tuple.address.as_bytes(), - ] - .concat(); - - // As a special case, if address is 0x0000000000000000000000000000000000000000 do not write the designation. - // Clear the account’s code and reset the account’s code hash to the empty hash. - let auth_account = self.get_account_mut(authority_address)?; - - auth_account.info.bytecode = if auth_tuple.address != Address::zero() { - delegation_bytes.into() - } else { - Bytes::new() - }; - - // 9. Increase the nonce of authority by one. - self.increment_account_nonce(authority_address) - .map_err(|_| VMError::TxValidation(TxValidationError::NonceIsMax))?; - } - - let code_address = self.current_call_frame()?.code_address; - let (code_address_info, _) = self - .db - .access_account(&mut self.accrued_substate, code_address)?; - - if has_delegation(&code_address_info)? { - self.current_call_frame_mut()?.code_address = - get_authorized_address(&code_address_info)?; - let code_address = self.current_call_frame()?.code_address; - let (auth_address_info, _) = self - .db - .access_account(&mut self.accrued_substate, code_address)?; - - self.current_call_frame_mut()?.bytecode = auth_address_info.bytecode.clone(); - } else { - self.current_call_frame_mut()?.bytecode = code_address_info.bytecode.clone(); - } - - self.current_call_frame_mut()?.valid_jump_destinations = - get_valid_jump_destinations(&self.current_call_frame()?.bytecode).unwrap_or_default(); - - self.env.refunded_gas = refunded_gas; - - Ok(()) - } - - pub fn add_intrinsic_gas(&mut self) -> Result<(), VMError> { - // Intrinsic gas is the gas consumed by the transaction before the execution of the opcodes. Section 6.2 in the Yellow Paper. - - let intrinsic_gas = self.get_intrinsic_gas()?; - - self.current_call_frame_mut()? - .increase_consumed_gas(intrinsic_gas) - .map_err(|_| TxValidationError::IntrinsicGasTooLow)?; - - Ok(()) - } - - // ==================== Gas related functions ======================= - pub fn get_intrinsic_gas(&self) -> Result { - // Intrinsic Gas = Calldata cost + Create cost + Base cost + Access list cost - let mut intrinsic_gas: u64 = 0; - - // Calldata Cost - // 4 gas for each zero byte in the transaction data 16 gas for each non-zero byte in the transaction. - let calldata_cost = - gas_cost::tx_calldata(&self.current_call_frame()?.calldata, self.env.config.fork) - .map_err(VMError::OutOfGas)?; - - intrinsic_gas = intrinsic_gas - .checked_add(calldata_cost) - .ok_or(OutOfGasError::ConsumedGasOverflow)?; - - // Base Cost - intrinsic_gas = intrinsic_gas - .checked_add(TX_BASE_COST) - .ok_or(OutOfGasError::ConsumedGasOverflow)?; - - // Create Cost - if self.is_create() { - // https://eips.ethereum.org/EIPS/eip-2#specification - if self.env.config.fork >= Fork::Homestead { - intrinsic_gas = intrinsic_gas - .checked_add(CREATE_BASE_COST) - .ok_or(OutOfGasError::ConsumedGasOverflow)?; - } - - // https://eips.ethereum.org/EIPS/eip-3860 - if self.env.config.fork >= Fork::Shanghai { - let number_of_words = &self - .current_call_frame()? - .calldata - .len() - .div_ceil(WORD_SIZE); - let double_number_of_words: u64 = number_of_words - .checked_mul(2) - .ok_or(OutOfGasError::ConsumedGasOverflow)? - .try_into() - .map_err(|_| VMError::Internal(InternalError::ConversionError))?; - - intrinsic_gas = intrinsic_gas - .checked_add(double_number_of_words) - .ok_or(OutOfGasError::ConsumedGasOverflow)?; - } - } - - // Access List Cost - let mut access_lists_cost: u64 = 0; - for (_, keys) in &self.access_list { - access_lists_cost = access_lists_cost - .checked_add(ACCESS_LIST_ADDRESS_COST) - .ok_or(OutOfGasError::ConsumedGasOverflow)?; - for _ in keys { - access_lists_cost = access_lists_cost - .checked_add(ACCESS_LIST_STORAGE_KEY_COST) - .ok_or(OutOfGasError::ConsumedGasOverflow)?; - } - } - - intrinsic_gas = intrinsic_gas - .checked_add(access_lists_cost) - .ok_or(OutOfGasError::ConsumedGasOverflow)?; - - // Authorization List Cost - // `unwrap_or_default` will return an empty vec when the `authorization_list` field is None. - // If the vec is empty, the len will be 0, thus the authorization_list_cost is 0. - let amount_of_auth_tuples: u64 = self - .authorization_list - .clone() - .unwrap_or_default() - .len() - .try_into() - .map_err(|_| VMError::Internal(InternalError::ConversionError))?; - let authorization_list_cost = PER_EMPTY_ACCOUNT_COST - .checked_mul(amount_of_auth_tuples) - .ok_or(VMError::Internal(InternalError::GasOverflow))?; - - intrinsic_gas = intrinsic_gas - .checked_add(authorization_list_cost) - .ok_or(OutOfGasError::ConsumedGasOverflow)?; - - Ok(intrinsic_gas) - } } From acf7d82aa5f5ba83b6f49460f0589183aa3b56ce Mon Sep 17 00:00:00 2001 From: JereSalo Date: Thu, 24 Apr 2025 10:23:55 -0300 Subject: [PATCH 43/47] cargo fmt --- crates/vm/levm/src/utils.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/crates/vm/levm/src/utils.rs b/crates/vm/levm/src/utils.rs index a608a925a9..a8b2edd34b 100644 --- a/crates/vm/levm/src/utils.rs +++ b/crates/vm/levm/src/utils.rs @@ -6,14 +6,18 @@ use crate::{ }, errors::{InternalError, OutOfGasError, TxValidationError, VMError}, gas_cost::{ - self, fake_exponential, ACCESS_LIST_ADDRESS_COST, ACCESS_LIST_STORAGE_KEY_COST, BLOB_GAS_PER_BLOB, COLD_ADDRESS_ACCESS_COST, CREATE_BASE_COST, WARM_ADDRESS_ACCESS_COST + self, fake_exponential, ACCESS_LIST_ADDRESS_COST, ACCESS_LIST_STORAGE_KEY_COST, + BLOB_GAS_PER_BLOB, COLD_ADDRESS_ACCESS_COST, CREATE_BASE_COST, WARM_ADDRESS_ACCESS_COST, }, opcodes::Opcode, vm::{EVMConfig, Substate, VM}, AccountInfo, }; use bytes::Bytes; -use ethrex_common::{types::{tx_fields::*, Fork}, Address, H256, U256}; +use ethrex_common::{ + types::{tx_fields::*, Fork}, + Address, H256, U256, +}; use ethrex_rlp; use ethrex_rlp::encode::RLPEncode; use keccak_hash::keccak; From 2524914e352da051298856683ef06adee5f01870 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jerem=C3=ADas=20Salom=C3=B3n?= <48994069+JereSalo@users.noreply.github.com> Date: Thu, 24 Apr 2025 16:36:12 -0300 Subject: [PATCH 44/47] stop popping callframe unnecessarily (#2584) **Motivation** - stop popping callframe in finalize execution **Description** Closes #issue_number --- crates/vm/levm/src/hooks/default_hook.rs | 13 +++++++------ crates/vm/levm/src/hooks/hook.rs | 2 -- crates/vm/levm/src/hooks/l2_hook.rs | 9 ++++----- crates/vm/levm/src/vm.rs | 7 +------ 4 files changed, 12 insertions(+), 19 deletions(-) diff --git a/crates/vm/levm/src/hooks/default_hook.rs b/crates/vm/levm/src/hooks/default_hook.rs index 718b961353..afcab9fc53 100644 --- a/crates/vm/levm/src/hooks/default_hook.rs +++ b/crates/vm/levm/src/hooks/default_hook.rs @@ -1,6 +1,5 @@ use crate::{ account::Account, - call_frame::CallFrame, constants::*, errors::{ExecutionReport, InternalError, TxValidationError, VMError}, gas_cost::{self, STANDARD_TOKEN_COST, TOTAL_COST_FLOOR_PER_TOKEN}, @@ -304,19 +303,21 @@ impl Hook for DefaultHook { fn finalize_execution( &self, vm: &mut VM<'_>, - initial_call_frame: &CallFrame, report: &mut ExecutionReport, ) -> Result<(), VMError> { - let sender_address = initial_call_frame.msg_sender; + let sender_address = vm.current_call_frame()?.msg_sender; // 1. Undo value transfer if Tx reverted if !report.is_success() { // In a create if Tx was reverted the account won't even exist by this point. if !vm.is_create() { - vm.decrease_account_balance(initial_call_frame.to, initial_call_frame.msg_value)?; + vm.decrease_account_balance( + vm.current_call_frame()?.to, + vm.current_call_frame()?.msg_value, + )?; } - vm.increase_account_balance(sender_address, initial_call_frame.msg_value)?; + vm.increase_account_balance(sender_address, vm.current_call_frame()?.msg_value)?; } // 2. Return unused gas + gas refunds to the sender. @@ -343,7 +344,7 @@ impl Hook for DefaultHook { .ok_or(VMError::Internal(InternalError::UndefinedState(-2)))?; let actual_gas_used = if vm.env.config.fork >= Fork::Prague { - let minimum_gas_consumed = vm.get_min_gas_used(initial_call_frame)?; + let minimum_gas_consumed = vm.get_min_gas_used(vm.current_call_frame()?)?; exec_gas_consumed.max(minimum_gas_consumed) } else { exec_gas_consumed diff --git a/crates/vm/levm/src/hooks/hook.rs b/crates/vm/levm/src/hooks/hook.rs index 4517692ae1..0caa320c45 100644 --- a/crates/vm/levm/src/hooks/hook.rs +++ b/crates/vm/levm/src/hooks/hook.rs @@ -1,5 +1,4 @@ use crate::{ - call_frame::CallFrame, errors::{ExecutionReport, VMError}, vm::VM, }; @@ -10,7 +9,6 @@ pub trait Hook { fn finalize_execution( &self, vm: &mut VM<'_>, - initial_call_frame: &CallFrame, report: &mut ExecutionReport, ) -> Result<(), VMError>; } diff --git a/crates/vm/levm/src/hooks/l2_hook.rs b/crates/vm/levm/src/hooks/l2_hook.rs index db3cc61340..2dc5023dff 100644 --- a/crates/vm/levm/src/hooks/l2_hook.rs +++ b/crates/vm/levm/src/hooks/l2_hook.rs @@ -193,20 +193,19 @@ impl Hook for L2Hook { fn finalize_execution( &self, vm: &mut crate::vm::VM<'_>, - initial_call_frame: &crate::call_frame::CallFrame, report: &mut crate::errors::ExecutionReport, ) -> Result<(), crate::errors::VMError> { // POST-EXECUTION Changes - let sender_address = initial_call_frame.msg_sender; + let sender_address = vm.current_call_frame()?.msg_sender; // 1. Undo value transfer if Tx reverted if !report.is_success() { // In a create if Tx was reverted the account won't even exist by this point. if !vm.is_create() { - vm.decrease_account_balance(initial_call_frame.to, initial_call_frame.msg_value)?; + vm.decrease_account_balance(vm.current_call_frame()?.to, vm.current_call_frame()?.msg_value)?; } - vm.increase_account_balance(sender_address, initial_call_frame.msg_value)?; + vm.increase_account_balance(sender_address, vm.current_call_frame()?.msg_value)?; } // 2. Return unused gas + gas refunds to the sender. @@ -233,7 +232,7 @@ impl Hook for L2Hook { .ok_or(VMError::Internal(InternalError::UndefinedState(-2)))?; let actual_gas_used = if vm.env.config.fork >= Fork::Prague { - let minimum_gas_consumed = vm.get_min_gas_used(initial_call_frame)?; + let minimum_gas_consumed = vm.get_min_gas_used(vm.current_call_frame()?)?; exec_gas_consumed.max(minimum_gas_consumed) } else { exec_gas_consumed diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index 7d3f041065..41420ec2b3 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -587,14 +587,9 @@ impl<'a> VM<'a> { // NOTE: ATTOW the default hook is created in VM::new(), so // (in theory) _at least_ the default finalize execution should // run - let call_frame = self - .call_frames - .pop() - .ok_or(VMError::Internal(InternalError::CouldNotPopCallframe))?; for hook in self.hooks.clone() { - hook.finalize_execution(self, &call_frame, report)?; + hook.finalize_execution(self, report)?; } - self.call_frames.push(call_frame); Ok(()) } From 074526bfd9602898a1efd3ce6ad55542b6ebd24a Mon Sep 17 00:00:00 2001 From: JereSalo Date: Thu, 24 Apr 2025 16:50:10 -0300 Subject: [PATCH 45/47] move function to utils --- crates/vm/levm/src/hooks/default_hook.rs | 2 +- crates/vm/levm/src/hooks/l2_hook.rs | 2 +- crates/vm/levm/src/utils.rs | 33 ++++++++++++++++++++++-- crates/vm/levm/src/vm.rs | 32 ----------------------- 4 files changed, 33 insertions(+), 36 deletions(-) diff --git a/crates/vm/levm/src/hooks/default_hook.rs b/crates/vm/levm/src/hooks/default_hook.rs index afcab9fc53..6480d57ee0 100644 --- a/crates/vm/levm/src/hooks/default_hook.rs +++ b/crates/vm/levm/src/hooks/default_hook.rs @@ -344,7 +344,7 @@ impl Hook for DefaultHook { .ok_or(VMError::Internal(InternalError::UndefinedState(-2)))?; let actual_gas_used = if vm.env.config.fork >= Fork::Prague { - let minimum_gas_consumed = vm.get_min_gas_used(vm.current_call_frame()?)?; + let minimum_gas_consumed = vm.get_min_gas_used()?; exec_gas_consumed.max(minimum_gas_consumed) } else { exec_gas_consumed diff --git a/crates/vm/levm/src/hooks/l2_hook.rs b/crates/vm/levm/src/hooks/l2_hook.rs index 2dc5023dff..2662cdb369 100644 --- a/crates/vm/levm/src/hooks/l2_hook.rs +++ b/crates/vm/levm/src/hooks/l2_hook.rs @@ -232,7 +232,7 @@ impl Hook for L2Hook { .ok_or(VMError::Internal(InternalError::UndefinedState(-2)))?; let actual_gas_used = if vm.env.config.fork >= Fork::Prague { - let minimum_gas_consumed = vm.get_min_gas_used(vm.current_call_frame()?)?; + let minimum_gas_consumed = vm.get_min_gas_used()?; exec_gas_consumed.max(minimum_gas_consumed) } else { exec_gas_consumed diff --git a/crates/vm/levm/src/utils.rs b/crates/vm/levm/src/utils.rs index a8b2edd34b..01848f4ede 100644 --- a/crates/vm/levm/src/utils.rs +++ b/crates/vm/levm/src/utils.rs @@ -6,8 +6,7 @@ use crate::{ }, errors::{InternalError, OutOfGasError, TxValidationError, VMError}, gas_cost::{ - self, fake_exponential, ACCESS_LIST_ADDRESS_COST, ACCESS_LIST_STORAGE_KEY_COST, - BLOB_GAS_PER_BLOB, COLD_ADDRESS_ACCESS_COST, CREATE_BASE_COST, WARM_ADDRESS_ACCESS_COST, + self, fake_exponential, ACCESS_LIST_ADDRESS_COST, ACCESS_LIST_STORAGE_KEY_COST, BLOB_GAS_PER_BLOB, COLD_ADDRESS_ACCESS_COST, CREATE_BASE_COST, STANDARD_TOKEN_COST, TOTAL_COST_FLOOR_PER_TOKEN, WARM_ADDRESS_ACCESS_COST }, opcodes::Opcode, vm::{EVMConfig, Substate, VM}, @@ -573,4 +572,34 @@ impl<'a> VM<'a> { Ok(intrinsic_gas) } + + /// Calculates the minimum gas to be consumed in the transaction. + pub fn get_min_gas_used(&self) -> Result { + // If the transaction is a CREATE transaction, the calldata is emptied and the bytecode is assigned. + let calldata = if self.is_create() { + &self.current_call_frame()?.bytecode + } else { + &self.current_call_frame()?.calldata + }; + + // tokens_in_calldata = nonzero_bytes_in_calldata * 4 + zero_bytes_in_calldata + // tx_calldata = nonzero_bytes_in_calldata * 16 + zero_bytes_in_calldata * 4 + // this is actually tokens_in_calldata * STANDARD_TOKEN_COST + // see it in https://eips.ethereum.org/EIPS/eip-7623 + let tokens_in_calldata: u64 = gas_cost::tx_calldata(calldata, self.env.config.fork) + .map_err(VMError::OutOfGas)? + .checked_div(STANDARD_TOKEN_COST) + .ok_or(VMError::Internal(InternalError::DivisionError))?; + + // min_gas_used = TX_BASE_COST + TOTAL_COST_FLOOR_PER_TOKEN * tokens_in_calldata + let mut min_gas_used: u64 = tokens_in_calldata + .checked_mul(TOTAL_COST_FLOOR_PER_TOKEN) + .ok_or(VMError::Internal(InternalError::GasOverflow))?; + + min_gas_used = min_gas_used + .checked_add(TX_BASE_COST) + .ok_or(VMError::Internal(InternalError::GasOverflow))?; + + Ok(min_gas_used) + } } diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index 41420ec2b3..3d42b97d74 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -5,7 +5,6 @@ use crate::{ db::{cache, gen_db::GeneralizedDatabase}, environment::Environment, errors::{ExecutionReport, InternalError, OpcodeResult, TxResult, VMError}, - gas_cost::{self, STANDARD_TOKEN_COST, TOTAL_COST_FLOOR_PER_TOKEN}, hooks::{default_hook::DefaultHook, hook::Hook, l2_hook::L2Hook}, precompiles::{ execute_precompile, is_precompile, SIZE_PRECOMPILES_CANCUN, SIZE_PRECOMPILES_PRAGUE, @@ -38,7 +37,6 @@ pub struct Substate { } /// Backup if sub-context is reverted. It consists of a copy of: -/// - Database /// - Substate /// - Gas Refunds /// - Transient Storage @@ -392,36 +390,6 @@ impl<'a> VM<'a> { matches!(self.tx_kind, TxKind::Create) } - /// Calculates the minimum gas to be consumed in the transaction. - pub fn get_min_gas_used(&self, initial_call_frame: &CallFrame) -> Result { - // If the transaction is a CREATE transaction, the calldata is emptied and the bytecode is assigned. - let calldata = if self.is_create() { - &initial_call_frame.bytecode - } else { - &initial_call_frame.calldata - }; - - // tokens_in_calldata = nonzero_bytes_in_calldata * 4 + zero_bytes_in_calldata - // tx_calldata = nonzero_bytes_in_calldata * 16 + zero_bytes_in_calldata * 4 - // this is actually tokens_in_calldata * STANDARD_TOKEN_COST - // see it in https://eips.ethereum.org/EIPS/eip-7623 - let tokens_in_calldata: u64 = gas_cost::tx_calldata(calldata, self.env.config.fork) - .map_err(VMError::OutOfGas)? - .checked_div(STANDARD_TOKEN_COST) - .ok_or(VMError::Internal(InternalError::DivisionError))?; - - // min_gas_used = TX_BASE_COST + TOTAL_COST_FLOOR_PER_TOKEN * tokens_in_calldata - let mut min_gas_used: u64 = tokens_in_calldata - .checked_mul(TOTAL_COST_FLOOR_PER_TOKEN) - .ok_or(VMError::Internal(InternalError::GasOverflow))?; - - min_gas_used = min_gas_used - .checked_add(TX_BASE_COST) - .ok_or(VMError::Internal(InternalError::GasOverflow))?; - - Ok(min_gas_used) - } - /// Executes without making changes to the cache. pub fn stateless_execute(&mut self) -> Result { let cache_backup = self.db.cache.clone(); From af22109922c25613868994e4546a9298dd2b11ef Mon Sep 17 00:00:00 2001 From: JereSalo Date: Thu, 24 Apr 2025 16:50:22 -0300 Subject: [PATCH 46/47] cargo fmt --- crates/vm/levm/src/hooks/l2_hook.rs | 5 ++++- crates/vm/levm/src/utils.rs | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/crates/vm/levm/src/hooks/l2_hook.rs b/crates/vm/levm/src/hooks/l2_hook.rs index 2662cdb369..4bf417bc9e 100644 --- a/crates/vm/levm/src/hooks/l2_hook.rs +++ b/crates/vm/levm/src/hooks/l2_hook.rs @@ -202,7 +202,10 @@ impl Hook for L2Hook { if !report.is_success() { // In a create if Tx was reverted the account won't even exist by this point. if !vm.is_create() { - vm.decrease_account_balance(vm.current_call_frame()?.to, vm.current_call_frame()?.msg_value)?; + vm.decrease_account_balance( + vm.current_call_frame()?.to, + vm.current_call_frame()?.msg_value, + )?; } vm.increase_account_balance(sender_address, vm.current_call_frame()?.msg_value)?; diff --git a/crates/vm/levm/src/utils.rs b/crates/vm/levm/src/utils.rs index 01848f4ede..5b302f36b2 100644 --- a/crates/vm/levm/src/utils.rs +++ b/crates/vm/levm/src/utils.rs @@ -6,7 +6,9 @@ use crate::{ }, errors::{InternalError, OutOfGasError, TxValidationError, VMError}, gas_cost::{ - self, fake_exponential, ACCESS_LIST_ADDRESS_COST, ACCESS_LIST_STORAGE_KEY_COST, BLOB_GAS_PER_BLOB, COLD_ADDRESS_ACCESS_COST, CREATE_BASE_COST, STANDARD_TOKEN_COST, TOTAL_COST_FLOOR_PER_TOKEN, WARM_ADDRESS_ACCESS_COST + self, fake_exponential, ACCESS_LIST_ADDRESS_COST, ACCESS_LIST_STORAGE_KEY_COST, + BLOB_GAS_PER_BLOB, COLD_ADDRESS_ACCESS_COST, CREATE_BASE_COST, STANDARD_TOKEN_COST, + TOTAL_COST_FLOOR_PER_TOKEN, WARM_ADDRESS_ACCESS_COST, }, opcodes::Opcode, vm::{EVMConfig, Substate, VM}, From 339ce649ba04e9a24141a75ec16a7958efed7a0e Mon Sep 17 00:00:00 2001 From: JereSalo Date: Thu, 24 Apr 2025 16:54:08 -0300 Subject: [PATCH 47/47] move things to utils and change a comment --- crates/vm/levm/src/db/gen_db.rs | 69 +++++++++++++++++++++++++++++++++ crates/vm/levm/src/vm.rs | 69 +-------------------------------- 2 files changed, 70 insertions(+), 68 deletions(-) diff --git a/crates/vm/levm/src/db/gen_db.rs b/crates/vm/levm/src/db/gen_db.rs index c0614c931a..39d178572a 100644 --- a/crates/vm/levm/src/db/gen_db.rs +++ b/crates/vm/levm/src/db/gen_db.rs @@ -1,8 +1,10 @@ use std::sync::Arc; use bytes::Bytes; +use ethrex_common::types::Fork; use ethrex_common::Address; use ethrex_common::U256; +use keccak_hash::H256; use crate::errors::InternalError; use crate::errors::VMError; @@ -10,6 +12,7 @@ use crate::vm::Substate; use crate::vm::VM; use crate::Account; use crate::AccountInfo; +use crate::StorageSlot; use std::collections::HashMap; use super::cache; @@ -195,4 +198,70 @@ impl<'a> VM<'a> { Ok(()) } + + /// Accesses to an account's storage slot. + /// + /// Accessed storage slots are stored in the `touched_storage_slots` set. + /// Accessed storage slots take place in some gas cost computation. + pub fn access_storage_slot( + &mut self, + address: Address, + key: H256, + ) -> Result<(StorageSlot, bool), VMError> { + // [EIP-2929] - Introduced conditional tracking of accessed storage slots for Berlin and later specs. + let mut storage_slot_was_cold = false; + if self.env.config.fork >= Fork::Berlin { + storage_slot_was_cold = self + .accrued_substate + .touched_storage_slots + .entry(address) + .or_default() + .insert(key); + } + let storage_slot = match cache::get_account(&self.db.cache, &address) { + Some(account) => match account.storage.get(&key) { + Some(storage_slot) => storage_slot.clone(), + None => { + let value = self.db.store.get_storage_slot(address, key)?; + StorageSlot { + original_value: value, + current_value: value, + } + } + }, + None => { + let value = self.db.store.get_storage_slot(address, key)?; + StorageSlot { + original_value: value, + current_value: value, + } + } + }; + + // When updating account storage of an account that's not yet cached we need to store the StorageSlot in the account + // Note: We end up caching the account because it is the most straightforward way of doing it. + let account = self.get_account_mut(address)?; + account.storage.insert(key, storage_slot.clone()); + + Ok((storage_slot, storage_slot_was_cold)) + } + + pub fn update_account_storage( + &mut self, + address: Address, + key: H256, + new_value: U256, + ) -> Result<(), VMError> { + let account = self.get_account_mut(address)?; + let account_original_storage_slot_value = account + .storage + .get(&key) + .map_or(U256::zero(), |slot| slot.original_value); + let slot = account.storage.entry(key).or_insert(StorageSlot { + original_value: account_original_storage_slot_value, + current_value: new_value, + }); + slot.current_value = new_value; + Ok(()) + } } diff --git a/crates/vm/levm/src/vm.rs b/crates/vm/levm/src/vm.rs index 3d42b97d74..757fbd02f8 100644 --- a/crates/vm/levm/src/vm.rs +++ b/crates/vm/levm/src/vm.rs @@ -1,5 +1,4 @@ use crate::{ - account::StorageSlot, call_frame::{CacheBackup, CallFrame}, constants::*, db::{cache, gen_db::GeneralizedDatabase}, @@ -434,7 +433,7 @@ impl<'a> VM<'a> { }; } - // Backup of Database, Substate, Gas Refunds and Transient Storage if sub-context is reverted + // Backup of Substate, Gas Refunds and Transient Storage if sub-context is reverted let backup = StateBackup::new( self.accrued_substate.clone(), self.env.refunded_gas, @@ -460,72 +459,6 @@ impl<'a> VM<'a> { )) } - /// Accesses to an account's storage slot. - /// - /// Accessed storage slots are stored in the `touched_storage_slots` set. - /// Accessed storage slots take place in some gas cost computation. - pub fn access_storage_slot( - &mut self, - address: Address, - key: H256, - ) -> Result<(StorageSlot, bool), VMError> { - // [EIP-2929] - Introduced conditional tracking of accessed storage slots for Berlin and later specs. - let mut storage_slot_was_cold = false; - if self.env.config.fork >= Fork::Berlin { - storage_slot_was_cold = self - .accrued_substate - .touched_storage_slots - .entry(address) - .or_default() - .insert(key); - } - let storage_slot = match cache::get_account(&self.db.cache, &address) { - Some(account) => match account.storage.get(&key) { - Some(storage_slot) => storage_slot.clone(), - None => { - let value = self.db.store.get_storage_slot(address, key)?; - StorageSlot { - original_value: value, - current_value: value, - } - } - }, - None => { - let value = self.db.store.get_storage_slot(address, key)?; - StorageSlot { - original_value: value, - current_value: value, - } - } - }; - - // When updating account storage of an account that's not yet cached we need to store the StorageSlot in the account - // Note: We end up caching the account because it is the most straightforward way of doing it. - let account = self.get_account_mut(address)?; - account.storage.insert(key, storage_slot.clone()); - - Ok((storage_slot, storage_slot_was_cold)) - } - - pub fn update_account_storage( - &mut self, - address: Address, - key: H256, - new_value: U256, - ) -> Result<(), VMError> { - let account = self.get_account_mut(address)?; - let account_original_storage_slot_value = account - .storage - .get(&key) - .map_or(U256::zero(), |slot| slot.original_value); - let slot = account.storage.entry(key).or_insert(StorageSlot { - original_value: account_original_storage_slot_value, - current_value: new_value, - }); - slot.current_value = new_value; - Ok(()) - } - fn handle_create_non_empty_account(&mut self) -> Result { let mut report = ExecutionReport { result: TxResult::Revert(VMError::AddressAlreadyOccupied),