diff --git a/crates/chainspec/src/api.rs b/crates/chainspec/src/api.rs index 80327d38b6..1521c72db8 100644 --- a/crates/chainspec/src/api.rs +++ b/crates/chainspec/src/api.rs @@ -1,4 +1,4 @@ -use crate::{ChainSpec, DepositContract}; +use crate::{ChainSpec, DepositContract, GravityHardfork}; use alloc::{boxed::Box, vec::Vec}; use alloy_chains::Chain; use alloy_consensus::Header; @@ -64,6 +64,41 @@ pub trait EthChainSpec: Send + Sync + Unpin + Debug { /// Returns the final total difficulty if the Paris hardfork is known. fn final_paris_total_difficulty(&self) -> Option; + /// Returns `true` if Alpha hardfork is active at the given block number. + fn is_alpha_active_at_block_number(&self, _block_number: u64) -> bool { + false + } + + /// Returns `true` if Alpha hardfork transitions exactly at the given block number. + fn alpha_transitions_at_block(&self, _block_number: u64) -> bool { + false + } + + /// Returns `true` if Beta hardfork is active at the given block number. + fn is_beta_active_at_block_number(&self, _block_number: u64) -> bool { + false + } + + /// Returns `true` if Beta hardfork transitions exactly at the given block number. + fn beta_transitions_at_block(&self, _block_number: u64) -> bool { + false + } + + /// Returns `true` if Gamma hardfork transitions exactly at the given block number. + fn gamma_transitions_at_block(&self, _block_number: u64) -> bool { + false + } + + /// Returns `true` if Delta hardfork is active at the given block number. + fn is_delta_active_at_block_number(&self, _block_number: u64) -> bool { + false + } + + /// Returns `true` if Delta hardfork transitions exactly at the given block number. + fn delta_transitions_at_block(&self, _block_number: u64) -> bool { + false + } + /// See [`calc_next_block_base_fee`]. fn next_block_base_fee(&self, parent: &Self::Header, target_timestamp: u64) -> Option { Some(calc_next_block_base_fee( @@ -135,4 +170,32 @@ impl EthChainSpec for ChainSpec { fn final_paris_total_difficulty(&self) -> Option { self.paris_block_and_final_difficulty.map(|(_, final_difficulty)| final_difficulty) } + + fn is_alpha_active_at_block_number(&self, block_number: u64) -> bool { + self.gravity_hardforks.is_fork_active_at_block(GravityHardfork::Alpha, block_number) + } + + fn alpha_transitions_at_block(&self, block_number: u64) -> bool { + self.gravity_hardforks.fork(GravityHardfork::Alpha).transitions_at_block(block_number) + } + + fn is_beta_active_at_block_number(&self, block_number: u64) -> bool { + self.gravity_hardforks.is_fork_active_at_block(GravityHardfork::Beta, block_number) + } + + fn beta_transitions_at_block(&self, block_number: u64) -> bool { + self.gravity_hardforks.fork(GravityHardfork::Beta).transitions_at_block(block_number) + } + + fn gamma_transitions_at_block(&self, block_number: u64) -> bool { + self.gravity_hardforks.fork(GravityHardfork::Gamma).transitions_at_block(block_number) + } + + fn is_delta_active_at_block_number(&self, block_number: u64) -> bool { + self.gravity_hardforks.is_fork_active_at_block(GravityHardfork::Delta, block_number) + } + + fn delta_transitions_at_block(&self, block_number: u64) -> bool { + self.gravity_hardforks.fork(GravityHardfork::Delta).transitions_at_block(block_number) + } } diff --git a/crates/chainspec/src/gravity.rs b/crates/chainspec/src/gravity.rs new file mode 100644 index 0000000000..0c4c4389e5 --- /dev/null +++ b/crates/chainspec/src/gravity.rs @@ -0,0 +1,17 @@ +//! Gravity-specific hardforks + +use reth_ethereum_forks::hardfork; + +hardfork!( + /// Gravity hardforks. + GravityHardfork { + /// Alpha hardfork: upgrade Staking/StakePool contracts and disable PoW rewards + Alpha, + /// Beta hardfork: upgrade StakePool contracts with correct FACTORY immutable + Beta, + /// Gamma hardfork: audit fixes, precompile changes, 12 contract bytecode upgrades + Gamma, + /// Delta hardfork: activate Governance contract by setting Ownable._owner + Delta, + } +); diff --git a/crates/chainspec/src/lib.rs b/crates/chainspec/src/lib.rs index 5ba4252939..f3caabac6f 100644 --- a/crates/chainspec/src/lib.rs +++ b/crates/chainspec/src/lib.rs @@ -16,6 +16,8 @@ mod constants; pub use constants::*; mod api; +/// Gravity-specific hardforks module. +mod gravity; /// The chain info module. mod info; /// The chain spec module. @@ -26,6 +28,7 @@ pub use alloy_chains::{Chain, ChainKind, NamedChain}; pub use reth_ethereum_forks::*; pub use api::EthChainSpec; +pub use gravity::GravityHardfork; pub use info::ChainInfo; #[cfg(any(test, feature = "test-utils"))] pub use spec::test_fork_ids; diff --git a/crates/chainspec/src/spec.rs b/crates/chainspec/src/spec.rs index 02b199220b..ca3de68a61 100644 --- a/crates/chainspec/src/spec.rs +++ b/crates/chainspec/src/spec.rs @@ -3,6 +3,7 @@ use alloy_evm::eth::spec::EthExecutorSpec; use crate::{ constants::{MAINNET_DEPOSIT_CONTRACT, MAINNET_PRUNE_DELETE_LIMIT}, + gravity::GravityHardfork, holesky, hoodi, mainnet, sepolia, EthChainSpec, }; use alloc::{boxed::Box, sync::Arc, vec::Vec}; @@ -112,6 +113,7 @@ pub static MAINNET: LazyLock> = LazyLock::new(|| { (mainnet::MAINNET_BPO1_TIMESTAMP, BlobParams::bpo1()), (mainnet::MAINNET_BPO2_TIMESTAMP, BlobParams::bpo2()), ]), + gravity_hardforks: ChainHardforks::default(), }; spec.genesis.config.dao_fork_support = true; spec.into() @@ -144,6 +146,7 @@ pub static SEPOLIA: LazyLock> = LazyLock::new(|| { (sepolia::SEPOLIA_BPO1_TIMESTAMP, BlobParams::bpo1()), (sepolia::SEPOLIA_BPO2_TIMESTAMP, BlobParams::bpo2()), ]), + gravity_hardforks: ChainHardforks::default(), }; spec.genesis.config.dao_fork_support = true; spec.into() @@ -174,6 +177,7 @@ pub static HOLESKY: LazyLock> = LazyLock::new(|| { (holesky::HOLESKY_BPO1_TIMESTAMP, BlobParams::bpo1()), (holesky::HOLESKY_BPO2_TIMESTAMP, BlobParams::bpo2()), ]), + gravity_hardforks: ChainHardforks::default(), }; spec.genesis.config.dao_fork_support = true; spec.into() @@ -206,6 +210,7 @@ pub static HOODI: LazyLock> = LazyLock::new(|| { (hoodi::HOODI_BPO1_TIMESTAMP, BlobParams::bpo1()), (hoodi::HOODI_BPO2_TIMESTAMP, BlobParams::bpo2()), ]), + gravity_hardforks: ChainHardforks::default(), }; spec.genesis.config.dao_fork_support = true; spec.into() @@ -310,6 +315,9 @@ pub struct ChainSpec { /// The settings passed for blob configurations for specific hardforks. pub blob_params: BlobScheduleBlobParams, + + /// Gravity-specific hardforks + pub gravity_hardforks: ChainHardforks, } impl Default for ChainSpec { @@ -324,6 +332,7 @@ impl Default for ChainSpec { base_fee_params: BaseFeeParamsKind::Constant(BaseFeeParams::ethereum()), prune_delete_limit: MAINNET_PRUNE_DELETE_LIMIT, blob_params: Default::default(), + gravity_hardforks: Default::default(), } } } @@ -723,6 +732,29 @@ impl From for ChainSpec { let hardforks = ChainHardforks::new(ordered_hardforks); + // Gravity-specific hardforks from extra_fields + let mut gravity_hardforks = ChainHardforks::default(); + if let Some(block_num) = + genesis.config.extra_fields.get("alphaBlock").and_then(|v| v.as_u64()) + { + gravity_hardforks.insert(GravityHardfork::Alpha, ForkCondition::Block(block_num)); + } + if let Some(block_num) = + genesis.config.extra_fields.get("betaBlock").and_then(|v| v.as_u64()) + { + gravity_hardforks.insert(GravityHardfork::Beta, ForkCondition::Block(block_num)); + } + if let Some(block_num) = + genesis.config.extra_fields.get("gammaBlock").and_then(|v| v.as_u64()) + { + gravity_hardforks.insert(GravityHardfork::Gamma, ForkCondition::Block(block_num)); + } + if let Some(block_num) = + genesis.config.extra_fields.get("deltaBlock").and_then(|v| v.as_u64()) + { + gravity_hardforks.insert(GravityHardfork::Delta, ForkCondition::Block(block_num)); + } + Self { chain: genesis.config.chain_id.into(), genesis_header: SealedHeader::new_unhashed(make_genesis_header(&genesis, &hardforks)), @@ -731,6 +763,7 @@ impl From for ChainSpec { paris_block_and_final_difficulty, deposit_contract, blob_params, + gravity_hardforks, ..Default::default() } } @@ -2647,4 +2680,70 @@ Post-merge hard forks (timestamp based): }; assert_eq!(hardfork_params, expected); } + + #[test] + fn test_gravity_alpha_hardfork() { + // Test 1: Default ChainSpec should not have Alpha hardfork active + let spec = ChainSpec::default(); + assert!(!spec.is_alpha_active_at_block_number(0)); + assert!(!spec.is_alpha_active_at_block_number(u64::MAX)); + + // Test 2: Parse genesis with alphaBlock from extra_fields + let genesis_json = r#"{ + "config": { + "chainId": 1625, + "homesteadBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "terminalTotalDifficulty": 0, + "shanghaiTime": 0, + "cancunTime": 0, + "alphaBlock": 1000 + }, + "alloc": {} + }"#; + let genesis: Genesis = serde_json::from_str(genesis_json).unwrap(); + let spec = ChainSpec::from(genesis); + + // Before activation block: should return false + assert!(!spec.is_alpha_active_at_block_number(999)); + + // At activation block: should return true + assert!(spec.is_alpha_active_at_block_number(1000)); + + // After activation block: should return true + assert!(spec.is_alpha_active_at_block_number(1001)); + assert!(spec.is_alpha_active_at_block_number(u64::MAX)); + + // transitions_at_block: only true at the exact block + assert!(!spec.alpha_transitions_at_block(999)); + assert!(spec.alpha_transitions_at_block(1000)); + assert!(!spec.alpha_transitions_at_block(1001)); + } + + #[test] + fn test_gravity_alpha_not_configured() { + // Genesis without alphaBlock should not activate the hardfork + let genesis_json = r#"{ + "config": { + "chainId": 1625, + "homesteadBlock": 0, + "terminalTotalDifficulty": 0, + "shanghaiTime": 0 + }, + "alloc": {} + }"#; + let genesis: Genesis = serde_json::from_str(genesis_json).unwrap(); + let spec = ChainSpec::from(genesis); + + assert!(!spec.is_alpha_active_at_block_number(0)); + assert!(!spec.is_alpha_active_at_block_number(u64::MAX)); + } } diff --git a/crates/ethereum/evm/src/hardfork/alpha.rs b/crates/ethereum/evm/src/hardfork/alpha.rs new file mode 100644 index 0000000000..32d91ab73e --- /dev/null +++ b/crates/ethereum/evm/src/hardfork/alpha.rs @@ -0,0 +1,1136 @@ +//! Gravity-specific hardfork state changes. +//! +//! Contains constants and logic for irregular state changes during Gravity hardforks, +//! similar to how Ethereum handles the DAO fork. + +use alloy_primitives::{address, Address}; + +/// Staking contract address (SystemAddresses.STAKING) +pub const STAKING_ADDRESS: Address = address!("00000000000000000000000000000001625F2000"); + +/// `StakePool` addresses that need bytecode upgrades during Alpha hardfork. +pub const STAKEPOOL_ADDRESSES: [Address; 4] = [ + address!("ce128222bd84d67672f863424a03d114cd1253c5"), + address!("78f595fb25d03a742338fb32acfd544bdc63d814"), + address!("891299fe364088ead65aba911ea17dd5d968cd81"), + address!("b99aa922eb5cae399b79adc87621e72f66d5a976"), +]; + +/// New Staking contract runtime bytecode for Alpha hardfork. +/// Extracted from forge deployedBytecode. +/// Bytecode size: 10867 bytes. +pub const STAKING_ALPHA_RUNTIME_BYTECODE: &[u8] = &[ + 0x60, 0x80, 0x60, 0x40, 0x52, 0x60, 0x04, 0x36, 0x10, 0x15, 0x61, 0x00, 0x11, 0x57, 0x5f, 0x80, + 0xfd, 0x5b, 0x5f, 0x5f, 0x35, 0x60, 0xe0, 0x1c, 0x80, 0x63, 0x06, 0x8b, 0xcd, 0x8d, 0x14, 0x61, + 0x0b, 0x4d, 0x57, 0x80, 0x63, 0x16, 0xae, 0x20, 0xc7, 0x14, 0x61, 0x0a, 0x98, 0x57, 0x80, 0x63, + 0x3b, 0x7a, 0x74, 0x04, 0x14, 0x61, 0x0a, 0x27, 0x57, 0x80, 0x63, 0x4f, 0xf0, 0x29, 0x3b, 0x14, + 0x61, 0x09, 0xc1, 0x57, 0x80, 0x63, 0x51, 0x67, 0xb6, 0xfc, 0x14, 0x61, 0x09, 0x1c, 0x57, 0x80, + 0x63, 0x5b, 0x16, 0xeb, 0xb7, 0x14, 0x61, 0x08, 0xdf, 0x57, 0x80, 0x63, 0x5d, 0xd7, 0x22, 0x3b, + 0x14, 0x61, 0x08, 0x79, 0x57, 0x80, 0x63, 0x6b, 0x48, 0x23, 0x5b, 0x14, 0x61, 0x06, 0x3e, 0x57, + 0x80, 0x63, 0x74, 0xa9, 0x43, 0x0b, 0x14, 0x61, 0x05, 0xcd, 0x57, 0x80, 0x63, 0x7c, 0xf2, 0x55, + 0x17, 0x14, 0x61, 0x05, 0x5c, 0x57, 0x80, 0x63, 0x8e, 0xec, 0x5d, 0x70, 0x14, 0x61, 0x05, 0x40, + 0x57, 0x80, 0x63, 0x92, 0x08, 0x79, 0xe6, 0x14, 0x61, 0x04, 0xc1, 0x57, 0x80, 0x63, 0x9f, 0xdb, + 0xd4, 0xd7, 0x14, 0x61, 0x04, 0xa4, 0x57, 0x80, 0x63, 0xb8, 0xc2, 0xde, 0xc4, 0x14, 0x61, 0x04, + 0x12, 0x57, 0x80, 0x63, 0xd8, 0x8f, 0xf1, 0xf4, 0x14, 0x61, 0x03, 0x4c, 0x57, 0x80, 0x63, 0xd9, + 0xbb, 0xd2, 0x78, 0x14, 0x61, 0x03, 0x0a, 0x57, 0x80, 0x63, 0xdb, 0xcd, 0x70, 0x4b, 0x14, 0x61, + 0x02, 0x6b, 0x57, 0x80, 0x63, 0xec, 0x91, 0x4b, 0xb4, 0x14, 0x61, 0x01, 0xd2, 0x57, 0x80, 0x63, + 0xf0, 0x24, 0x65, 0xca, 0x14, 0x61, 0x01, 0x16, 0x57, 0x63, 0xfd, 0x2d, 0xbe, 0xa1, 0x14, 0x61, + 0x00, 0xf6, 0x57, 0x5f, 0x80, 0xfd, 0x5b, 0x34, 0x61, 0x01, 0x13, 0x57, 0x80, 0x60, 0x03, 0x19, + 0x36, 0x01, 0x12, 0x61, 0x01, 0x13, 0x57, 0x60, 0x20, 0x60, 0x02, 0x54, 0x60, 0x40, 0x51, 0x90, + 0x81, 0x52, 0xf3, 0x5b, 0x80, 0xfd, 0x5b, 0x50, 0x34, 0x61, 0x01, 0xa0, 0x57, 0x60, 0x20, 0x36, + 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x01, 0xa0, 0x57, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, + 0x03, 0x61, 0x01, 0x38, 0x61, 0x0b, 0xa5, 0x56, 0x5b, 0x16, 0x80, 0x5f, 0x52, 0x60, 0x01, 0x60, + 0x20, 0x52, 0x60, 0xff, 0x60, 0x40, 0x5f, 0x20, 0x54, 0x16, 0x15, 0x61, 0x01, 0xc0, 0x57, 0x64, + 0x01, 0x62, 0x5f, 0x20, 0x01, 0x33, 0x03, 0x61, 0x01, 0xa4, 0x57, 0x80, 0x3b, 0x15, 0x61, 0x01, + 0xa0, 0x57, 0x5f, 0x80, 0x91, 0x60, 0x04, 0x60, 0x40, 0x51, 0x80, 0x94, 0x81, 0x93, 0x63, 0x43, + 0x12, 0x91, 0x05, 0x60, 0xe1, 0x1b, 0x83, 0x52, 0x5a, 0xf1, 0x80, 0x15, 0x61, 0x01, 0x95, 0x57, + 0x61, 0x01, 0x87, 0x57, 0x50, 0x80, 0xf3, 0x5b, 0x61, 0x01, 0x93, 0x91, 0x50, 0x5f, 0x90, 0x61, + 0x0b, 0xfc, 0x56, 0x5b, 0x00, 0x5b, 0x60, 0x40, 0x51, 0x3d, 0x5f, 0x82, 0x3e, 0x3d, 0x90, 0xfd, + 0x5b, 0x5f, 0x80, 0xfd, 0x5b, 0x63, 0x02, 0x72, 0xd0, 0x29, 0x60, 0xe6, 0x1b, 0x5f, 0x52, 0x33, + 0x60, 0x04, 0x52, 0x64, 0x01, 0x62, 0x5f, 0x20, 0x01, 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, 0xfd, + 0x5b, 0x63, 0x0f, 0x4c, 0x97, 0x1b, 0x60, 0xe2, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x52, 0x60, 0x24, + 0x5f, 0xfd, 0x5b, 0x34, 0x61, 0x01, 0xa0, 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, + 0x61, 0x01, 0xa0, 0x57, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x61, 0x01, 0xf3, 0x61, + 0x0b, 0xa5, 0x56, 0x5b, 0x16, 0x80, 0x5f, 0x52, 0x60, 0x01, 0x60, 0x20, 0x52, 0x60, 0xff, 0x60, + 0x40, 0x5f, 0x20, 0x54, 0x16, 0x15, 0x61, 0x01, 0xc0, 0x57, 0x60, 0x20, 0x60, 0x04, 0x91, 0x60, + 0x40, 0x51, 0x92, 0x83, 0x80, 0x92, 0x62, 0x0e, 0xf4, 0x15, 0x60, 0xea, 0x1b, 0x82, 0x52, 0x5a, + 0xfa, 0x80, 0x15, 0x61, 0x01, 0x95, 0x57, 0x5f, 0x90, 0x61, 0x02, 0x38, 0x57, 0x5b, 0x60, 0x20, + 0x90, 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, 0xf3, 0x5b, 0x50, 0x60, 0x20, 0x81, 0x3d, 0x60, 0x20, + 0x11, 0x61, 0x02, 0x63, 0x57, 0x5b, 0x81, 0x61, 0x02, 0x52, 0x60, 0x20, 0x93, 0x83, 0x61, 0x0b, + 0xfc, 0x56, 0x5b, 0x81, 0x01, 0x03, 0x12, 0x61, 0x01, 0xa0, 0x57, 0x60, 0x20, 0x90, 0x51, 0x61, + 0x02, 0x2d, 0x56, 0x5b, 0x3d, 0x91, 0x50, 0x61, 0x02, 0x45, 0x56, 0x5b, 0x34, 0x61, 0x01, 0xa0, + 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x01, 0xa0, 0x57, 0x60, 0x01, 0x60, + 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x61, 0x02, 0x8c, 0x61, 0x0b, 0xa5, 0x56, 0x5b, 0x16, 0x80, 0x5f, + 0x52, 0x60, 0x01, 0x60, 0x20, 0x52, 0x60, 0xff, 0x60, 0x40, 0x5f, 0x20, 0x54, 0x16, 0x15, 0x61, + 0x01, 0xc0, 0x57, 0x60, 0x20, 0x60, 0x04, 0x91, 0x60, 0x40, 0x51, 0x92, 0x83, 0x80, 0x92, 0x63, + 0x1c, 0xfe, 0x87, 0x8d, 0x60, 0xe3, 0x1b, 0x82, 0x52, 0x5a, 0xfa, 0x80, 0x15, 0x61, 0x01, 0x95, + 0x57, 0x60, 0x20, 0x91, 0x5f, 0x91, 0x61, 0x02, 0xdd, 0x57, 0x5b, 0x50, 0x60, 0x40, 0x51, 0x60, + 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x90, 0x91, 0x16, 0x81, 0x52, 0xf3, 0x5b, 0x61, 0x02, + 0xfd, 0x91, 0x50, 0x82, 0x3d, 0x84, 0x11, 0x61, 0x03, 0x03, 0x57, 0x5b, 0x61, 0x02, 0xf5, 0x81, + 0x83, 0x61, 0x0b, 0xfc, 0x56, 0x5b, 0x81, 0x01, 0x90, 0x61, 0x0c, 0x1e, 0x56, 0x5b, 0x82, 0x61, + 0x02, 0xca, 0x56, 0x5b, 0x50, 0x3d, 0x61, 0x02, 0xeb, 0x56, 0x5b, 0x34, 0x61, 0x01, 0xa0, 0x57, + 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x01, 0xa0, 0x57, 0x60, 0x40, 0x51, 0x63, 0x76, + 0x2f, 0xfd, 0x61, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, + 0x62, 0x5f, 0x10, 0x01, 0x5a, 0xfa, 0x80, 0x15, 0x61, 0x01, 0x95, 0x57, 0x5f, 0x90, 0x61, 0x02, + 0x38, 0x57, 0x60, 0x20, 0x90, 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x01, + 0xa0, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x01, 0xa0, 0x57, 0x60, 0x40, 0x51, + 0x80, 0x60, 0x20, 0x5f, 0x54, 0x92, 0x83, 0x81, 0x52, 0x01, 0x80, 0x92, 0x5f, 0x80, 0x52, 0x7f, + 0x29, 0x0d, 0xec, 0xd9, 0x54, 0x8b, 0x62, 0xa8, 0xd6, 0x03, 0x45, 0xa9, 0x88, 0x38, 0x6f, 0xc8, + 0x4b, 0xa6, 0xbc, 0x95, 0x48, 0x40, 0x08, 0xf6, 0x36, 0x2f, 0x93, 0x16, 0x0e, 0xf3, 0xe5, 0x63, + 0x90, 0x5f, 0x5b, 0x81, 0x81, 0x10, 0x61, 0x03, 0xf3, 0x57, 0x50, 0x50, 0x50, 0x81, 0x61, 0x03, + 0xa8, 0x91, 0x03, 0x82, 0x61, 0x0b, 0xfc, 0x56, 0x5b, 0x60, 0x40, 0x51, 0x91, 0x82, 0x91, 0x60, + 0x20, 0x83, 0x01, 0x90, 0x60, 0x20, 0x84, 0x52, 0x51, 0x80, 0x91, 0x52, 0x60, 0x40, 0x83, 0x01, + 0x91, 0x90, 0x5f, 0x5b, 0x81, 0x81, 0x10, 0x61, 0x03, 0xd1, 0x57, 0x50, 0x50, 0x50, 0x03, 0x90, + 0xf3, 0x5b, 0x82, 0x51, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x84, 0x52, 0x85, + 0x94, 0x50, 0x60, 0x20, 0x93, 0x84, 0x01, 0x93, 0x90, 0x92, 0x01, 0x91, 0x60, 0x01, 0x01, 0x61, + 0x03, 0xc3, 0x56, 0x5b, 0x82, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x84, + 0x52, 0x60, 0x20, 0x90, 0x93, 0x01, 0x92, 0x60, 0x01, 0x92, 0x83, 0x01, 0x92, 0x01, 0x61, 0x03, + 0x92, 0x56, 0x5b, 0x34, 0x61, 0x01, 0xa0, 0x57, 0x60, 0x40, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, + 0x61, 0x01, 0xa0, 0x57, 0x61, 0x04, 0x2b, 0x61, 0x0b, 0xa5, 0x56, 0x5b, 0x61, 0x04, 0x33, 0x61, + 0x0b, 0xbb, 0x56, 0x5b, 0x90, 0x60, 0x01, 0x80, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x90, 0x81, 0x5f, + 0x52, 0x60, 0x01, 0x60, 0x20, 0x52, 0x60, 0xff, 0x60, 0x40, 0x5f, 0x20, 0x54, 0x16, 0x15, 0x61, + 0x04, 0x91, 0x57, 0x67, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0x24, 0x60, 0x20, + 0x92, 0x60, 0x40, 0x51, 0x94, 0x85, 0x93, 0x84, 0x92, 0x63, 0x51, 0xcb, 0x86, 0xcd, 0x60, 0xe0, + 0x1b, 0x84, 0x52, 0x16, 0x60, 0x04, 0x83, 0x01, 0x52, 0x5a, 0xfa, 0x80, 0x15, 0x61, 0x01, 0x95, + 0x57, 0x5f, 0x90, 0x61, 0x02, 0x38, 0x57, 0x60, 0x20, 0x90, 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, + 0xf3, 0x5b, 0x50, 0x63, 0x0f, 0x4c, 0x97, 0x1b, 0x60, 0xe2, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x52, + 0x60, 0x24, 0x5f, 0xfd, 0x5b, 0x34, 0x61, 0x01, 0xa0, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, + 0x12, 0x61, 0x01, 0xa0, 0x57, 0x60, 0x20, 0x60, 0x02, 0x54, 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, + 0xf3, 0x5b, 0x34, 0x61, 0x01, 0xa0, 0x57, 0x60, 0x40, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, + 0x01, 0xa0, 0x57, 0x61, 0x04, 0xda, 0x61, 0x0b, 0xa5, 0x56, 0x5b, 0x61, 0x04, 0xe2, 0x61, 0x0b, + 0xbb, 0x56, 0x5b, 0x90, 0x60, 0x01, 0x80, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x90, 0x81, 0x5f, 0x52, + 0x60, 0x01, 0x60, 0x20, 0x52, 0x60, 0xff, 0x60, 0x40, 0x5f, 0x20, 0x54, 0x16, 0x15, 0x61, 0x04, + 0x91, 0x57, 0x67, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0x24, 0x60, 0x20, 0x92, + 0x60, 0x40, 0x51, 0x94, 0x85, 0x93, 0x84, 0x92, 0x63, 0xb3, 0x92, 0xfb, 0xfb, 0x60, 0xe0, 0x1b, + 0x84, 0x52, 0x16, 0x60, 0x04, 0x83, 0x01, 0x52, 0x5a, 0xfa, 0x80, 0x15, 0x61, 0x01, 0x95, 0x57, + 0x5f, 0x90, 0x61, 0x02, 0x38, 0x57, 0x60, 0x20, 0x90, 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, 0xf3, + 0x5b, 0x34, 0x61, 0x01, 0xa0, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x01, 0xa0, + 0x57, 0x60, 0x20, 0x5f, 0x54, 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x01, + 0xa0, 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x01, 0xa0, 0x57, 0x60, 0x01, + 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x61, 0x05, 0x7d, 0x61, 0x0b, 0xa5, 0x56, 0x5b, 0x16, 0x80, + 0x5f, 0x52, 0x60, 0x01, 0x60, 0x20, 0x52, 0x60, 0xff, 0x60, 0x40, 0x5f, 0x20, 0x54, 0x16, 0x15, + 0x61, 0x01, 0xc0, 0x57, 0x60, 0x20, 0x60, 0x04, 0x91, 0x60, 0x40, 0x51, 0x92, 0x83, 0x80, 0x92, + 0x63, 0x8d, 0xa5, 0xcb, 0x5b, 0x60, 0xe0, 0x1b, 0x82, 0x52, 0x5a, 0xfa, 0x80, 0x15, 0x61, 0x01, + 0x95, 0x57, 0x60, 0x20, 0x91, 0x5f, 0x91, 0x61, 0x02, 0xdd, 0x57, 0x50, 0x60, 0x40, 0x51, 0x60, + 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x90, 0x91, 0x16, 0x81, 0x52, 0xf3, 0x5b, 0x34, 0x61, + 0x01, 0xa0, 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x01, 0xa0, 0x57, 0x60, + 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x61, 0x05, 0xee, 0x61, 0x0b, 0xa5, 0x56, 0x5b, 0x16, + 0x80, 0x5f, 0x52, 0x60, 0x01, 0x60, 0x20, 0x52, 0x60, 0xff, 0x60, 0x40, 0x5f, 0x20, 0x54, 0x16, + 0x15, 0x61, 0x01, 0xc0, 0x57, 0x60, 0x20, 0x60, 0x04, 0x91, 0x60, 0x40, 0x51, 0x92, 0x83, 0x80, + 0x92, 0x63, 0x72, 0xb4, 0x5a, 0x55, 0x60, 0xe0, 0x1b, 0x82, 0x52, 0x5a, 0xfa, 0x80, 0x15, 0x61, + 0x01, 0x95, 0x57, 0x60, 0x20, 0x91, 0x5f, 0x91, 0x61, 0x02, 0xdd, 0x57, 0x50, 0x60, 0x40, 0x51, + 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x90, 0x91, 0x16, 0x81, 0x52, 0xf3, 0x5b, 0x60, + 0xa0, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x01, 0xa0, 0x57, 0x61, 0x06, 0x52, 0x61, 0x0b, + 0xa5, 0x56, 0x5b, 0x60, 0x24, 0x35, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x81, 0x16, + 0x91, 0x90, 0x82, 0x90, 0x03, 0x61, 0x01, 0xa0, 0x57, 0x60, 0x44, 0x35, 0x60, 0x01, 0x60, 0x01, + 0x60, 0xa0, 0x1b, 0x03, 0x81, 0x16, 0x91, 0x90, 0x82, 0x90, 0x03, 0x61, 0x01, 0xa0, 0x57, 0x60, + 0x64, 0x35, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x81, 0x16, 0x90, 0x81, 0x90, 0x03, + 0x61, 0x01, 0xa0, 0x57, 0x60, 0x84, 0x35, 0x91, 0x67, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x83, 0x16, 0x80, 0x93, 0x03, 0x61, 0x01, 0xa0, 0x57, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, + 0x1b, 0x03, 0x16, 0x92, 0x83, 0x15, 0x61, 0x08, 0x6a, 0x57, 0x84, 0x15, 0x61, 0x08, 0x6a, 0x57, + 0x60, 0x40, 0x51, 0x63, 0x76, 0x2f, 0xfd, 0x61, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, + 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, 0x01, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x01, + 0x95, 0x57, 0x5f, 0x91, 0x61, 0x08, 0x38, 0x57, 0x5b, 0x50, 0x80, 0x34, 0x10, 0x61, 0x08, 0x22, + 0x57, 0x50, 0x60, 0x02, 0x54, 0x92, 0x5f, 0x19, 0x84, 0x14, 0x61, 0x07, 0xfa, 0x57, 0x60, 0x01, + 0x84, 0x01, 0x60, 0x02, 0x55, 0x60, 0x40, 0x51, 0x92, 0x61, 0x1e, 0x00, 0x91, 0x82, 0x85, 0x01, + 0x91, 0x85, 0x83, 0x10, 0x67, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x84, 0x11, 0x17, + 0x61, 0x08, 0x0e, 0x57, 0x60, 0xa0, 0x94, 0x86, 0x94, 0x61, 0x0c, 0x3e, 0x86, 0x39, 0x88, 0x84, + 0x52, 0x89, 0x60, 0x20, 0x85, 0x01, 0x52, 0x60, 0x40, 0x84, 0x01, 0x52, 0x60, 0x60, 0x83, 0x01, + 0x52, 0x60, 0x80, 0x82, 0x01, 0x52, 0x03, 0x01, 0x90, 0x34, 0xf5, 0x80, 0x15, 0x61, 0x01, 0x95, + 0x57, 0x60, 0x01, 0x80, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x90, 0x5f, 0x54, 0x68, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x10, 0x15, 0x61, 0x08, 0x0e, 0x57, 0x80, 0x60, 0x01, + 0x61, 0x07, 0x7b, 0x92, 0x01, 0x5f, 0x55, 0x61, 0x0b, 0xd2, 0x56, 0x5b, 0x81, 0x54, 0x60, 0x01, + 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x60, 0x03, 0x92, 0x90, 0x92, 0x1b, 0x91, 0x82, 0x1b, 0x19, + 0x16, 0x90, 0x84, 0x90, 0x1b, 0x17, 0x90, 0x55, 0x5f, 0x82, 0x81, 0x52, 0x60, 0x01, 0x60, 0x20, + 0x81, 0x90, 0x52, 0x60, 0x40, 0x82, 0x20, 0x80, 0x54, 0x60, 0xff, 0x19, 0x16, 0x90, 0x91, 0x17, + 0x90, 0x55, 0x54, 0x5f, 0x19, 0x81, 0x01, 0x90, 0x81, 0x11, 0x61, 0x07, 0xfa, 0x57, 0x60, 0x20, + 0x93, 0x83, 0x91, 0x60, 0x40, 0x51, 0x91, 0x82, 0x52, 0x85, 0x82, 0x01, 0x52, 0x7f, 0x45, 0xd4, + 0x3f, 0x0d, 0x67, 0x67, 0xb3, 0x7a, 0x70, 0xa4, 0x42, 0x98, 0x58, 0x66, 0xe6, 0xb5, 0x96, 0x77, + 0x2c, 0x5a, 0x7f, 0x52, 0x9f, 0x2b, 0x9f, 0x67, 0x98, 0x42, 0x3b, 0x26, 0xa3, 0xe8, 0x60, 0x40, + 0x33, 0x92, 0xa4, 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, 0xf3, 0x5b, 0x63, 0x4e, 0x48, 0x7b, 0x71, + 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x11, 0x60, 0x04, 0x52, 0x60, 0x24, 0x5f, 0xfd, 0x5b, 0x63, + 0x4e, 0x48, 0x7b, 0x71, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x41, 0x60, 0x04, 0x52, 0x60, 0x24, + 0x5f, 0xfd, 0x5b, 0x63, 0x53, 0xb5, 0xc2, 0xb9, 0x60, 0xe1, 0x1b, 0x5f, 0x52, 0x34, 0x60, 0x04, + 0x52, 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, 0xfd, 0x5b, 0x90, 0x50, 0x60, 0x20, 0x81, 0x3d, 0x60, + 0x20, 0x11, 0x61, 0x08, 0x62, 0x57, 0x5b, 0x81, 0x61, 0x08, 0x53, 0x60, 0x20, 0x93, 0x83, 0x61, + 0x0b, 0xfc, 0x56, 0x5b, 0x81, 0x01, 0x03, 0x12, 0x61, 0x01, 0xa0, 0x57, 0x51, 0x86, 0x61, 0x06, + 0xe8, 0x56, 0x5b, 0x3d, 0x91, 0x50, 0x61, 0x08, 0x46, 0x56, 0x5b, 0x63, 0xd9, 0x2e, 0x23, 0x3d, + 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x5f, 0xfd, 0x5b, 0x34, 0x61, 0x01, 0xa0, 0x57, 0x60, + 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x01, 0xa0, 0x57, 0x60, 0x01, 0x60, 0x01, 0x60, + 0xa0, 0x1b, 0x03, 0x61, 0x08, 0x9a, 0x61, 0x0b, 0xa5, 0x56, 0x5b, 0x16, 0x80, 0x5f, 0x52, 0x60, + 0x01, 0x60, 0x20, 0x52, 0x60, 0xff, 0x60, 0x40, 0x5f, 0x20, 0x54, 0x16, 0x15, 0x61, 0x01, 0xc0, + 0x57, 0x60, 0x20, 0x60, 0x04, 0x91, 0x60, 0x40, 0x51, 0x92, 0x83, 0x80, 0x92, 0x63, 0x02, 0xe7, + 0x0f, 0x6b, 0x60, 0xe3, 0x1b, 0x82, 0x52, 0x5a, 0xfa, 0x80, 0x15, 0x61, 0x01, 0x95, 0x57, 0x5f, + 0x90, 0x61, 0x02, 0x38, 0x57, 0x60, 0x20, 0x90, 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, 0xf3, 0x5b, + 0x34, 0x61, 0x01, 0xa0, 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x01, 0xa0, + 0x57, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x61, 0x09, 0x00, 0x61, 0x0b, 0xa5, 0x56, + 0x5b, 0x16, 0x5f, 0x52, 0x60, 0x01, 0x60, 0x20, 0x52, 0x60, 0x20, 0x60, 0xff, 0x60, 0x40, 0x5f, + 0x20, 0x54, 0x16, 0x60, 0x40, 0x51, 0x90, 0x15, 0x15, 0x81, 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x01, + 0xa0, 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x01, 0xa0, 0x57, 0x60, 0x01, + 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x61, 0x09, 0x3d, 0x61, 0x0b, 0xa5, 0x56, 0x5b, 0x16, 0x80, + 0x5f, 0x52, 0x60, 0x01, 0x60, 0x20, 0x52, 0x60, 0xff, 0x60, 0x40, 0x5f, 0x20, 0x54, 0x16, 0x15, + 0x61, 0x01, 0xc0, 0x57, 0x60, 0x20, 0x60, 0x04, 0x91, 0x60, 0x40, 0x51, 0x92, 0x83, 0x80, 0x92, + 0x63, 0x29, 0x38, 0xb5, 0x8d, 0x60, 0xe2, 0x1b, 0x82, 0x52, 0x5a, 0xfa, 0x80, 0x15, 0x61, 0x01, + 0x95, 0x57, 0x5f, 0x90, 0x61, 0x09, 0x85, 0x57, 0x5b, 0x60, 0x20, 0x90, 0x60, 0x40, 0x51, 0x90, + 0x15, 0x15, 0x81, 0x52, 0xf3, 0x5b, 0x50, 0x60, 0x20, 0x81, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x09, + 0xb9, 0x57, 0x5b, 0x81, 0x61, 0x09, 0x9f, 0x60, 0x20, 0x93, 0x83, 0x61, 0x0b, 0xfc, 0x56, 0x5b, + 0x81, 0x01, 0x03, 0x12, 0x61, 0x01, 0xa0, 0x57, 0x51, 0x80, 0x15, 0x15, 0x81, 0x03, 0x61, 0x01, + 0xa0, 0x57, 0x60, 0x20, 0x90, 0x61, 0x09, 0x78, 0x56, 0x5b, 0x3d, 0x91, 0x50, 0x61, 0x09, 0x92, + 0x56, 0x5b, 0x34, 0x61, 0x01, 0xa0, 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, + 0x01, 0xa0, 0x57, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x61, 0x09, 0xe2, 0x61, 0x0b, + 0xa5, 0x56, 0x5b, 0x16, 0x80, 0x5f, 0x52, 0x60, 0x01, 0x60, 0x20, 0x52, 0x60, 0xff, 0x60, 0x40, + 0x5f, 0x20, 0x54, 0x16, 0x15, 0x61, 0x01, 0xc0, 0x57, 0x60, 0x20, 0x60, 0x04, 0x91, 0x60, 0x40, + 0x51, 0x92, 0x83, 0x80, 0x92, 0x63, 0x09, 0x28, 0xe2, 0x31, 0x60, 0xe3, 0x1b, 0x82, 0x52, 0x5a, + 0xfa, 0x80, 0x15, 0x61, 0x01, 0x95, 0x57, 0x5f, 0x90, 0x61, 0x02, 0x38, 0x57, 0x60, 0x20, 0x90, + 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x01, 0xa0, 0x57, 0x60, 0x20, 0x36, + 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x01, 0xa0, 0x57, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, + 0x03, 0x61, 0x0a, 0x48, 0x61, 0x0b, 0xa5, 0x56, 0x5b, 0x16, 0x80, 0x5f, 0x52, 0x60, 0x01, 0x60, + 0x20, 0x52, 0x60, 0xff, 0x60, 0x40, 0x5f, 0x20, 0x54, 0x16, 0x15, 0x61, 0x01, 0xc0, 0x57, 0x60, + 0x20, 0x60, 0x04, 0x91, 0x60, 0x40, 0x51, 0x92, 0x83, 0x80, 0x92, 0x63, 0x0a, 0xcd, 0xfd, 0x4f, + 0x60, 0xe2, 0x1b, 0x82, 0x52, 0x5a, 0xfa, 0x80, 0x15, 0x61, 0x01, 0x95, 0x57, 0x60, 0x20, 0x91, + 0x5f, 0x91, 0x61, 0x02, 0xdd, 0x57, 0x50, 0x60, 0x40, 0x51, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, + 0x1b, 0x03, 0x90, 0x91, 0x16, 0x81, 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x01, 0xa0, 0x57, 0x60, 0x20, + 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x01, 0xa0, 0x57, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, + 0x1b, 0x03, 0x61, 0x0a, 0xb9, 0x61, 0x0b, 0xa5, 0x56, 0x5b, 0x16, 0x80, 0x5f, 0x52, 0x60, 0x01, + 0x60, 0x20, 0x52, 0x60, 0xff, 0x60, 0x40, 0x5f, 0x20, 0x54, 0x16, 0x15, 0x61, 0x01, 0xc0, 0x57, + 0x60, 0x20, 0x60, 0x04, 0x91, 0x60, 0x40, 0x51, 0x92, 0x83, 0x80, 0x92, 0x63, 0x14, 0xff, 0x59, + 0x85, 0x60, 0xe2, 0x1b, 0x82, 0x52, 0x5a, 0xfa, 0x80, 0x15, 0x61, 0x01, 0x95, 0x57, 0x5f, 0x90, + 0x61, 0x0b, 0x09, 0x57, 0x5b, 0x60, 0x20, 0x90, 0x67, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x60, 0x40, 0x51, 0x91, 0x16, 0x81, 0x52, 0xf3, 0x5b, 0x50, 0x60, 0x20, 0x81, 0x3d, 0x60, + 0x20, 0x11, 0x61, 0x0b, 0x45, 0x57, 0x5b, 0x81, 0x61, 0x0b, 0x23, 0x60, 0x20, 0x93, 0x83, 0x61, + 0x0b, 0xfc, 0x56, 0x5b, 0x81, 0x01, 0x03, 0x12, 0x61, 0x01, 0xa0, 0x57, 0x51, 0x67, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0x16, 0x81, 0x03, 0x61, 0x01, 0xa0, 0x57, 0x60, 0x20, + 0x90, 0x61, 0x0a, 0xf4, 0x56, 0x5b, 0x3d, 0x91, 0x50, 0x61, 0x0b, 0x16, 0x56, 0x5b, 0x34, 0x61, + 0x01, 0xa0, 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x01, 0xa0, 0x57, 0x60, + 0x04, 0x35, 0x5f, 0x54, 0x80, 0x82, 0x10, 0x15, 0x61, 0x0b, 0x8f, 0x57, 0x60, 0x20, 0x61, 0x0b, + 0x76, 0x83, 0x61, 0x0b, 0xd2, 0x56, 0x5b, 0x90, 0x54, 0x60, 0x40, 0x51, 0x60, 0x03, 0x92, 0x90, + 0x92, 0x1b, 0x1c, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x81, 0x52, 0xf3, 0x5b, + 0x90, 0x63, 0x06, 0xa7, 0x47, 0x5b, 0x60, 0xe1, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x52, 0x60, 0x24, + 0x52, 0x60, 0x44, 0x5f, 0xfd, 0x5b, 0x60, 0x04, 0x35, 0x90, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, + 0x1b, 0x03, 0x82, 0x16, 0x82, 0x03, 0x61, 0x01, 0xa0, 0x57, 0x56, 0x5b, 0x60, 0x24, 0x35, 0x90, + 0x67, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x82, 0x16, 0x82, 0x03, 0x61, 0x01, 0xa0, + 0x57, 0x56, 0x5b, 0x5f, 0x54, 0x81, 0x10, 0x15, 0x61, 0x0b, 0xe8, 0x57, 0x5f, 0x80, 0x52, 0x60, + 0x20, 0x5f, 0x20, 0x01, 0x90, 0x5f, 0x90, 0x56, 0x5b, 0x63, 0x4e, 0x48, 0x7b, 0x71, 0x60, 0xe0, + 0x1b, 0x5f, 0x52, 0x60, 0x32, 0x60, 0x04, 0x52, 0x60, 0x24, 0x5f, 0xfd, 0x5b, 0x90, 0x60, 0x1f, + 0x80, 0x19, 0x91, 0x01, 0x16, 0x81, 0x01, 0x90, 0x81, 0x10, 0x67, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x82, 0x11, 0x17, 0x61, 0x08, 0x0e, 0x57, 0x60, 0x40, 0x52, 0x56, 0x5b, 0x90, + 0x81, 0x60, 0x20, 0x91, 0x03, 0x12, 0x61, 0x01, 0xa0, 0x57, 0x51, 0x60, 0x01, 0x60, 0x01, 0x60, + 0xa0, 0x1b, 0x03, 0x81, 0x16, 0x81, 0x03, 0x61, 0x01, 0xa0, 0x57, 0x90, 0x56, 0xfe, 0x60, 0xa0, + 0x80, 0x60, 0x40, 0x52, 0x60, 0xa0, 0x81, 0x61, 0x1e, 0x00, 0x80, 0x38, 0x03, 0x80, 0x91, 0x61, + 0x00, 0x1a, 0x82, 0x85, 0x61, 0x02, 0xcb, 0x56, 0x5b, 0x83, 0x39, 0x81, 0x01, 0x03, 0x12, 0x61, + 0x02, 0x67, 0x57, 0x61, 0x00, 0x2d, 0x81, 0x61, 0x03, 0x02, 0x56, 0x5b, 0x90, 0x61, 0x00, 0x3a, + 0x60, 0x20, 0x82, 0x01, 0x61, 0x03, 0x02, 0x56, 0x5b, 0x61, 0x00, 0x46, 0x60, 0x40, 0x83, 0x01, + 0x61, 0x03, 0x02, 0x56, 0x5b, 0x90, 0x61, 0x00, 0x5f, 0x60, 0x80, 0x61, 0x00, 0x58, 0x60, 0x60, + 0x86, 0x01, 0x61, 0x03, 0x02, 0x56, 0x5b, 0x94, 0x01, 0x61, 0x03, 0x16, 0x56, 0x5b, 0x93, 0x60, + 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x80, 0x15, 0x61, 0x02, 0xb8, 0x57, 0x60, 0x01, + 0x80, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x19, 0x90, 0x81, 0x16, 0x90, 0x91, + 0x55, 0x5f, 0x80, 0x54, 0x91, 0x82, 0x16, 0x83, 0x17, 0x81, 0x55, 0x60, 0x40, 0x51, 0x92, 0x91, + 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x90, 0x7f, 0x8b, 0xe0, 0x07, 0x9c, 0x53, + 0x16, 0x59, 0x14, 0x13, 0x44, 0xcd, 0x1f, 0xd0, 0xa4, 0xf2, 0x84, 0x19, 0x49, 0x7f, 0x97, 0x22, + 0xa3, 0xda, 0xaf, 0xe3, 0xb4, 0x18, 0x6f, 0x6b, 0x64, 0x57, 0xe0, 0x90, 0x80, 0xa3, 0x60, 0x01, + 0x7f, 0x9b, 0x77, 0x9b, 0x17, 0x42, 0x2d, 0x0d, 0xf9, 0x22, 0x23, 0x01, 0x8b, 0x32, 0xb4, 0xd1, + 0xfa, 0x46, 0xe0, 0x71, 0x72, 0x3d, 0x68, 0x17, 0xe2, 0x48, 0x6d, 0x00, 0x3b, 0xec, 0xc5, 0x5f, + 0x00, 0x55, 0x33, 0x60, 0x80, 0x52, 0x63, 0x7e, 0x34, 0x5d, 0xef, 0x60, 0xe1, 0x1b, 0x81, 0x52, + 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, 0x00, 0x5a, 0xfa, 0x90, 0x81, + 0x15, 0x61, 0x02, 0x73, 0x57, 0x5f, 0x91, 0x61, 0x02, 0x7e, 0x57, 0x5b, 0x50, 0x60, 0x40, 0x51, + 0x63, 0x4f, 0x0f, 0x2a, 0x39, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x90, 0x60, 0x20, 0x82, 0x60, 0x04, + 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, 0x01, 0x5a, 0xfa, 0x91, 0x82, 0x15, 0x61, 0x02, 0x73, 0x57, + 0x5f, 0x92, 0x61, 0x02, 0x33, 0x57, 0x5b, 0x50, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, + 0x61, 0x01, 0x4b, 0x83, 0x83, 0x61, 0x03, 0x2a, 0x56, 0x5b, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, + 0x1b, 0x03, 0x90, 0x97, 0x16, 0x96, 0x16, 0x86, 0x10, 0x61, 0x02, 0x05, 0x57, 0x50, 0x50, 0x60, + 0x02, 0x80, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x19, 0x90, 0x81, 0x16, 0x60, + 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x93, 0x84, 0x16, 0x17, 0x90, 0x91, 0x55, 0x60, 0x03, + 0x80, 0x54, 0x82, 0x16, 0x93, 0x83, 0x16, 0x93, 0x90, 0x93, 0x17, 0x90, 0x92, 0x55, 0x60, 0x04, + 0x80, 0x54, 0x90, 0x92, 0x16, 0x92, 0x16, 0x91, 0x90, 0x91, 0x17, 0x90, 0x55, 0x60, 0x06, 0x80, + 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x19, 0x16, 0x91, 0x90, 0x91, 0x17, 0x90, + 0x55, 0x34, 0x60, 0x05, 0x81, 0x90, 0x55, 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, 0x30, 0x90, 0x7f, + 0x7c, 0x71, 0x79, 0x85, 0xac, 0x27, 0x3e, 0x66, 0x3b, 0x7f, 0x30, 0x50, 0xf5, 0xb1, 0x5a, 0x43, + 0x88, 0xff, 0x6e, 0xd9, 0x52, 0x33, 0x89, 0x54, 0xf6, 0x50, 0xe2, 0x09, 0x3e, 0x13, 0x93, 0x7f, + 0x90, 0x60, 0x20, 0x90, 0xa2, 0x60, 0x40, 0x51, 0x61, 0x1a, 0xa8, 0x90, 0x81, 0x61, 0x03, 0x58, + 0x82, 0x39, 0x60, 0x80, 0x51, 0x81, 0x81, 0x81, 0x61, 0x09, 0x79, 0x01, 0x52, 0x61, 0x10, 0x92, + 0x01, 0x52, 0xf3, 0x5b, 0x85, 0x91, 0x61, 0x02, 0x10, 0x91, 0x61, 0x03, 0x2a, 0x56, 0x5b, 0x63, + 0x20, 0x41, 0x57, 0x89, 0x60, 0xe1, 0x1b, 0x5f, 0x90, 0x81, 0x52, 0x60, 0x04, 0x92, 0x90, 0x92, + 0x52, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x16, 0x60, 0x24, 0x52, 0x60, 0x44, 0x90, + 0xfd, 0x5b, 0x90, 0x91, 0x50, 0x60, 0x20, 0x81, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x02, 0x6b, 0x57, + 0x5b, 0x81, 0x61, 0x02, 0x4f, 0x60, 0x20, 0x93, 0x83, 0x61, 0x02, 0xcb, 0x56, 0x5b, 0x81, 0x01, + 0x03, 0x12, 0x61, 0x02, 0x67, 0x57, 0x61, 0x02, 0x60, 0x90, 0x61, 0x03, 0x16, 0x56, 0x5b, 0x90, + 0x5f, 0x61, 0x01, 0x38, 0x56, 0x5b, 0x5f, 0x80, 0xfd, 0x5b, 0x3d, 0x91, 0x50, 0x61, 0x02, 0x42, + 0x56, 0x5b, 0x60, 0x40, 0x51, 0x3d, 0x5f, 0x82, 0x3e, 0x3d, 0x90, 0xfd, 0x5b, 0x90, 0x50, 0x60, + 0x20, 0x81, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x02, 0xb0, 0x57, 0x5b, 0x81, 0x61, 0x02, 0x99, 0x60, + 0x20, 0x93, 0x83, 0x61, 0x02, 0xcb, 0x56, 0x5b, 0x81, 0x01, 0x03, 0x12, 0x61, 0x02, 0x67, 0x57, + 0x61, 0x02, 0xaa, 0x90, 0x61, 0x03, 0x16, 0x56, 0x5b, 0x5f, 0x61, 0x01, 0x0d, 0x56, 0x5b, 0x3d, + 0x91, 0x50, 0x61, 0x02, 0x8c, 0x56, 0x5b, 0x63, 0x1e, 0x4f, 0xbd, 0xf7, 0x60, 0xe0, 0x1b, 0x5f, + 0x52, 0x5f, 0x60, 0x04, 0x52, 0x60, 0x24, 0x5f, 0xfd, 0x5b, 0x60, 0x1f, 0x90, 0x91, 0x01, 0x60, + 0x1f, 0x19, 0x16, 0x81, 0x01, 0x90, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x82, 0x11, + 0x90, 0x82, 0x10, 0x17, 0x61, 0x02, 0xee, 0x57, 0x60, 0x40, 0x52, 0x56, 0x5b, 0x63, 0x4e, 0x48, + 0x7b, 0x71, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x41, 0x60, 0x04, 0x52, 0x60, 0x24, 0x5f, 0xfd, + 0x5b, 0x51, 0x90, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x82, 0x16, 0x82, 0x03, 0x61, + 0x02, 0x67, 0x57, 0x56, 0x5b, 0x51, 0x90, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x82, + 0x16, 0x82, 0x03, 0x61, 0x02, 0x67, 0x57, 0x56, 0x5b, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, + 0x03, 0x91, 0x82, 0x16, 0x90, 0x82, 0x16, 0x01, 0x91, 0x90, 0x82, 0x11, 0x61, 0x03, 0x43, 0x57, + 0x56, 0x5b, 0x63, 0x4e, 0x48, 0x7b, 0x71, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x11, 0x60, 0x04, + 0x52, 0x60, 0x24, 0x5f, 0xfd, 0xfe, 0x60, 0x80, 0x80, 0x60, 0x40, 0x52, 0x60, 0x04, 0x36, 0x10, + 0x15, 0x61, 0x00, 0x12, 0x57, 0x5f, 0x80, 0xfd, 0x5b, 0x5f, 0x35, 0x60, 0xe0, 0x1c, 0x90, 0x81, + 0x63, 0x17, 0x38, 0x7b, 0x58, 0x14, 0x61, 0x10, 0xc1, 0x57, 0x50, 0x80, 0x63, 0x2b, 0x37, 0xf5, + 0x3c, 0x14, 0x61, 0x0f, 0x51, 0x57, 0x80, 0x63, 0x2d, 0xd3, 0x10, 0x00, 0x14, 0x61, 0x10, 0x7d, + 0x57, 0x80, 0x63, 0x2e, 0x17, 0xde, 0x78, 0x14, 0x61, 0x0f, 0xfe, 0x57, 0x80, 0x63, 0x3b, 0xd0, + 0x54, 0x00, 0x14, 0x61, 0x0f, 0xe4, 0x57, 0x80, 0x63, 0x41, 0x60, 0x53, 0x2f, 0x14, 0x61, 0x0f, + 0xb9, 0x57, 0x80, 0x63, 0x42, 0xd8, 0x66, 0x93, 0x14, 0x61, 0x0f, 0x79, 0x57, 0x80, 0x63, 0x46, + 0xc9, 0x6a, 0xac, 0x14, 0x61, 0x0f, 0x51, 0x57, 0x80, 0x63, 0x49, 0x47, 0x11, 0x88, 0x14, 0x61, + 0x0e, 0x88, 0x57, 0x80, 0x63, 0x4b, 0xc2, 0xa6, 0x57, 0x14, 0x61, 0x0d, 0xfb, 0x57, 0x80, 0x63, + 0x51, 0xcb, 0x86, 0xcd, 0x14, 0x61, 0x06, 0xad, 0x57, 0x80, 0x63, 0x53, 0xfd, 0x66, 0x14, 0x14, + 0x61, 0x02, 0xbb, 0x57, 0x80, 0x63, 0x57, 0x0c, 0xa7, 0x35, 0x14, 0x61, 0x02, 0x6b, 0x57, 0x80, + 0x63, 0x5a, 0x62, 0x7d, 0xbc, 0x14, 0x61, 0x0b, 0xff, 0x57, 0x80, 0x63, 0x5e, 0x42, 0xb4, 0x55, + 0x14, 0x61, 0x0b, 0xe5, 0x57, 0x80, 0x63, 0x5e, 0xba, 0xf1, 0xdb, 0x14, 0x61, 0x0b, 0x5a, 0x57, + 0x80, 0x63, 0x71, 0x50, 0x18, 0xa6, 0x14, 0x61, 0x0b, 0x82, 0x57, 0x80, 0x63, 0x72, 0xb4, 0x5a, + 0x55, 0x14, 0x61, 0x0b, 0x5a, 0x57, 0x80, 0x63, 0x79, 0xba, 0x50, 0x97, 0x14, 0x61, 0x0a, 0xd5, + 0x57, 0x80, 0x63, 0x86, 0x21, 0x01, 0x30, 0x14, 0x61, 0x09, 0x23, 0x57, 0x80, 0x63, 0x86, 0x25, + 0x22, 0x0a, 0x14, 0x61, 0x09, 0x67, 0x57, 0x80, 0x63, 0x8d, 0xa5, 0xcb, 0x5b, 0x14, 0x61, 0x09, + 0x40, 0x57, 0x80, 0x63, 0x96, 0x68, 0xce, 0xb8, 0x14, 0x61, 0x09, 0x23, 0x57, 0x80, 0x63, 0x9f, + 0x0d, 0xee, 0xd7, 0x14, 0x61, 0x09, 0x07, 0x57, 0x80, 0x63, 0xa2, 0x9a, 0x43, 0xbb, 0x14, 0x61, + 0x08, 0x7a, 0x57, 0x80, 0x63, 0xa4, 0xe2, 0xd6, 0x34, 0x14, 0x61, 0x08, 0x03, 0x57, 0x80, 0x63, + 0xac, 0xc2, 0x21, 0x6a, 0x14, 0x61, 0x07, 0x6c, 0x57, 0x80, 0x63, 0xb2, 0xa2, 0x5b, 0x52, 0x14, + 0x61, 0x06, 0xb2, 0x57, 0x80, 0x63, 0xb3, 0x92, 0xfb, 0xfb, 0x14, 0x61, 0x06, 0xad, 0x57, 0x80, + 0x63, 0xb3, 0xab, 0x15, 0xfb, 0x14, 0x61, 0x06, 0x11, 0x57, 0x80, 0x63, 0xb9, 0x61, 0x30, 0xa9, + 0x14, 0x61, 0x03, 0xa2, 0x57, 0x80, 0x63, 0xbd, 0x49, 0xc3, 0x5f, 0x14, 0x61, 0x03, 0x85, 0x57, + 0x80, 0x63, 0xc0, 0x31, 0x02, 0xec, 0x14, 0x61, 0x03, 0x68, 0x57, 0x80, 0x63, 0xc3, 0x54, 0xbd, + 0x6e, 0x14, 0x61, 0x03, 0x46, 0x57, 0x80, 0x63, 0xc4, 0x85, 0xa4, 0xd8, 0x14, 0x61, 0x02, 0xe1, + 0x57, 0x80, 0x63, 0xce, 0x06, 0x17, 0xec, 0x14, 0x61, 0x02, 0xbb, 0x57, 0x80, 0x63, 0xe3, 0x0c, + 0x39, 0x78, 0x14, 0x61, 0x02, 0x93, 0x57, 0x80, 0x63, 0xe7, 0xf4, 0x3c, 0x68, 0x14, 0x61, 0x02, + 0x6b, 0x57, 0x80, 0x63, 0xef, 0x43, 0xbd, 0x63, 0x14, 0x61, 0x02, 0x4a, 0x57, 0x63, 0xf2, 0xfd, + 0xe3, 0x8b, 0x14, 0x61, 0x01, 0xd4, 0x57, 0x5f, 0x80, 0xfd, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, + 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x61, 0x01, 0xed, 0x61, + 0x10, 0xdb, 0x56, 0x5b, 0x61, 0x01, 0xf5, 0x61, 0x17, 0x28, 0x56, 0x5b, 0x60, 0x01, 0x80, 0x60, + 0xa0, 0x1b, 0x03, 0x16, 0x80, 0x6b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x60, 0xa0, 0x1b, 0x60, 0x01, 0x54, 0x16, 0x17, 0x60, 0x01, 0x55, 0x60, 0x01, 0x80, + 0x60, 0xa0, 0x1b, 0x03, 0x5f, 0x54, 0x16, 0x7f, 0x38, 0xd1, 0x6b, 0x8c, 0xac, 0x22, 0xd9, 0x9f, + 0xc7, 0xc1, 0x24, 0xb9, 0xcd, 0x0d, 0xe2, 0xd3, 0xfa, 0x1f, 0xae, 0xf4, 0x20, 0xbf, 0xe7, 0x91, + 0xd8, 0xc3, 0x62, 0xd7, 0x65, 0xe2, 0x27, 0x00, 0x5f, 0x80, 0xa3, 0x00, 0x5b, 0x5f, 0x80, 0xfd, + 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, + 0x57, 0x60, 0x20, 0x65, 0x72, 0xba, 0x30, 0x4f, 0x80, 0x00, 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, + 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, + 0x46, 0x57, 0x60, 0x03, 0x54, 0x60, 0x40, 0x51, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, + 0x90, 0x91, 0x16, 0x81, 0x52, 0x60, 0x20, 0x90, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, + 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x01, 0x54, 0x60, 0x40, 0x51, + 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x90, 0x91, 0x16, 0x81, 0x52, 0x60, 0x20, 0x90, + 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, + 0x46, 0x57, 0x60, 0x20, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x60, 0x06, 0x54, 0x16, + 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x36, + 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x60, 0x20, 0x60, 0x40, 0x51, 0x61, + 0x03, 0x01, 0x81, 0x61, 0x11, 0x20, 0x56, 0x5b, 0x82, 0x81, 0x52, 0x01, 0x52, 0x60, 0x40, 0x61, + 0x03, 0x13, 0x60, 0x04, 0x35, 0x61, 0x11, 0x95, 0x56, 0x5b, 0x50, 0x81, 0x51, 0x61, 0x03, 0x1f, + 0x81, 0x61, 0x11, 0x20, 0x56, 0x5b, 0x60, 0x20, 0x60, 0x01, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, + 0x1b, 0x03, 0x84, 0x54, 0x16, 0x93, 0x84, 0x84, 0x52, 0x01, 0x54, 0x91, 0x01, 0x90, 0x81, 0x52, + 0x82, 0x51, 0x91, 0x82, 0x52, 0x51, 0x60, 0x20, 0x82, 0x01, 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x02, + 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x61, + 0x03, 0x60, 0x61, 0x18, 0x43, 0x56, 0x5b, 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, 0xf3, 0x5b, 0x34, + 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, + 0x20, 0x60, 0x07, 0x54, 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, + 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x60, 0x05, + 0x54, 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, + 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x04, 0x35, 0x60, 0x01, 0x60, + 0x01, 0x60, 0x40, 0x1b, 0x03, 0x81, 0x16, 0x80, 0x82, 0x03, 0x61, 0x02, 0x46, 0x57, 0x60, 0x02, + 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x33, 0x81, 0x90, 0x03, 0x61, 0x05, + 0xfb, 0x57, 0x50, 0x60, 0x40, 0x51, 0x63, 0x0b, 0xcf, 0xee, 0x3f, 0x60, 0xe1, 0x1b, 0x81, 0x52, + 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x20, 0x03, 0x5a, 0xfa, 0x90, 0x81, + 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, 0x05, 0xcc, 0x57, 0x5b, 0x50, 0x61, 0x05, 0xbd, + 0x57, 0x65, 0x72, 0xba, 0x30, 0x4f, 0x80, 0x00, 0x80, 0x82, 0x11, 0x61, 0x05, 0xa7, 0x57, 0x50, + 0x60, 0x06, 0x54, 0x90, 0x61, 0x04, 0x31, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x83, + 0x16, 0x93, 0x84, 0x61, 0x13, 0x6c, 0x56, 0x5b, 0x91, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, + 0x03, 0x83, 0x16, 0x91, 0x84, 0x83, 0x11, 0x15, 0x61, 0x05, 0x91, 0x57, 0x50, 0x60, 0x40, 0x51, + 0x63, 0x7e, 0x34, 0x5d, 0xef, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, + 0x64, 0x01, 0x62, 0x5f, 0x10, 0x00, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, + 0x91, 0x61, 0x05, 0x72, 0x57, 0x5b, 0x50, 0x60, 0x40, 0x51, 0x63, 0x4f, 0x0f, 0x2a, 0x39, 0x60, + 0xe1, 0x1b, 0x81, 0x52, 0x90, 0x60, 0x20, 0x82, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, + 0x01, 0x5a, 0xfa, 0x91, 0x82, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x92, 0x61, 0x05, 0x36, 0x57, + 0x5b, 0x50, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x61, 0x04, 0xad, 0x83, 0x83, 0x61, + 0x13, 0x6c, 0x56, 0x5b, 0x16, 0x84, 0x10, 0x61, 0x05, 0x0c, 0x57, 0x67, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x19, 0x83, 0x16, 0x84, 0x17, 0x60, 0x06, 0x55, 0x60, 0x40, 0x80, 0x51, + 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x80, 0x89, 0x16, 0x82, 0x52, 0x87, 0x16, 0x60, + 0x20, 0x82, 0x01, 0x52, 0x30, 0x91, 0x7f, 0x7e, 0x4f, 0x3c, 0xcb, 0x2c, 0x7c, 0xa7, 0x6e, 0xee, + 0x66, 0x82, 0xc0, 0xe8, 0x6f, 0xef, 0xbb, 0xd6, 0xfe, 0x24, 0xe4, 0xaf, 0x19, 0x38, 0x1a, 0x85, + 0x4a, 0x14, 0xea, 0x09, 0x1b, 0xd9, 0xaf, 0x91, 0x90, 0x81, 0x90, 0x81, 0x01, 0x5b, 0x03, 0x90, + 0xa2, 0x00, 0x5b, 0x61, 0x05, 0x1f, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x92, 0x85, + 0x92, 0x61, 0x13, 0x6c, 0x56, 0x5b, 0x90, 0x63, 0x20, 0x41, 0x57, 0x89, 0x60, 0xe1, 0x1b, 0x5f, + 0x52, 0x60, 0x04, 0x52, 0x16, 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, 0xfd, 0x5b, 0x61, 0x05, 0x59, + 0x91, 0x92, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, 0x60, 0x57, 0x5b, 0x61, 0x05, + 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x81, 0x01, 0x90, 0x61, 0x11, 0xfb, 0x56, 0x5b, + 0x90, 0x86, 0x61, 0x04, 0x9a, 0x56, 0x5b, 0x50, 0x3d, 0x61, 0x05, 0x47, 0x56, 0x5b, 0x60, 0x40, + 0x51, 0x3d, 0x5f, 0x82, 0x3e, 0x3d, 0x90, 0xfd, 0x5b, 0x61, 0x05, 0x8b, 0x91, 0x50, 0x60, 0x20, + 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, 0x60, 0x57, 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, + 0x56, 0x5b, 0x85, 0x61, 0x04, 0x6f, 0x56, 0x5b, 0x84, 0x63, 0x8a, 0x36, 0xf6, 0x43, 0x60, 0xe0, + 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x52, 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, 0xfd, 0x5b, 0x90, 0x63, + 0x7e, 0xda, 0x69, 0x9b, 0x60, 0xe1, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x52, 0x60, 0x24, 0x52, 0x60, + 0x44, 0x5f, 0xfd, 0x5b, 0x63, 0xb7, 0xa1, 0x74, 0xcb, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x04, + 0x5f, 0xfd, 0x5b, 0x61, 0x05, 0xee, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, + 0xf4, 0x57, 0x5b, 0x61, 0x05, 0xe6, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x81, 0x01, 0x90, + 0x61, 0x11, 0x70, 0x56, 0x5b, 0x83, 0x61, 0x04, 0x05, 0x56, 0x5b, 0x50, 0x3d, 0x61, 0x05, 0xdc, + 0x56, 0x5b, 0x63, 0xe8, 0x37, 0xad, 0xd9, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x33, 0x60, 0x04, 0x52, + 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, 0xfd, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x36, + 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x61, 0x06, 0x2a, 0x61, 0x10, 0xdb, 0x56, + 0x5b, 0x61, 0x06, 0x32, 0x61, 0x17, 0x28, 0x56, 0x5b, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, + 0x03, 0x81, 0x16, 0x90, 0x81, 0x15, 0x61, 0x06, 0x9e, 0x57, 0x60, 0x03, 0x80, 0x54, 0x60, 0x01, + 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x19, 0x81, 0x16, 0x90, 0x93, 0x17, 0x90, 0x55, 0x60, 0x40, + 0x80, 0x51, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x93, 0x84, 0x16, 0x81, 0x52, 0x92, + 0x90, 0x91, 0x16, 0x60, 0x20, 0x83, 0x01, 0x52, 0x30, 0x91, 0x7f, 0x01, 0xc8, 0x73, 0x01, 0x22, + 0xff, 0x73, 0x36, 0x96, 0x29, 0x94, 0x0a, 0x52, 0x96, 0xf4, 0xe7, 0x10, 0x0e, 0xf1, 0x63, 0x17, + 0xd9, 0x43, 0xfb, 0xbb, 0xfa, 0x1b, 0x01, 0x93, 0xac, 0x35, 0xcb, 0x91, 0x81, 0x90, 0x81, 0x01, + 0x61, 0x05, 0x07, 0x56, 0x5b, 0x63, 0xd9, 0x2e, 0x23, 0x3d, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, + 0x04, 0x5f, 0xfd, 0x5b, 0x61, 0x10, 0xf1, 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, + 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x61, 0x06, 0xcb, 0x61, 0x10, 0xdb, + 0x56, 0x5b, 0x60, 0x02, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x33, 0x81, + 0x90, 0x03, 0x61, 0x05, 0xfb, 0x57, 0x50, 0x60, 0x40, 0x51, 0x63, 0x0b, 0xcf, 0xee, 0x3f, 0x60, + 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x20, 0x03, + 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, 0x07, 0x4d, 0x57, 0x5b, + 0x50, 0x61, 0x05, 0xbd, 0x57, 0x61, 0x07, 0x21, 0x60, 0x20, 0x91, 0x61, 0x07, 0x1c, 0x61, 0x16, + 0x78, 0x56, 0x5b, 0x61, 0x17, 0xdf, 0x56, 0x5b, 0x60, 0x01, 0x7f, 0x9b, 0x77, 0x9b, 0x17, 0x42, + 0x2d, 0x0d, 0xf9, 0x22, 0x23, 0x01, 0x8b, 0x32, 0xb4, 0xd1, 0xfa, 0x46, 0xe0, 0x71, 0x72, 0x3d, + 0x68, 0x17, 0xe2, 0x48, 0x6d, 0x00, 0x3b, 0xec, 0xc5, 0x5f, 0x00, 0x55, 0x60, 0x40, 0x51, 0x90, + 0x81, 0x52, 0xf3, 0x5b, 0x61, 0x07, 0x66, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, + 0x05, 0xf4, 0x57, 0x61, 0x05, 0xe6, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x82, 0x61, 0x07, + 0x09, 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x60, 0x40, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, + 0x61, 0x02, 0x46, 0x57, 0x60, 0x24, 0x35, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x81, + 0x16, 0x81, 0x03, 0x61, 0x02, 0x46, 0x57, 0x60, 0x02, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, + 0x1b, 0x03, 0x16, 0x33, 0x81, 0x90, 0x03, 0x61, 0x05, 0xfb, 0x57, 0x50, 0x60, 0x40, 0x51, 0x63, + 0x0b, 0xcf, 0xee, 0x3f, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, + 0x01, 0x62, 0x5f, 0x20, 0x03, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, + 0x61, 0x07, 0xe4, 0x57, 0x5b, 0x50, 0x61, 0x05, 0xbd, 0x57, 0x61, 0x03, 0x60, 0x60, 0x20, 0x91, + 0x61, 0x07, 0x1c, 0x60, 0x04, 0x35, 0x61, 0x13, 0x8c, 0x56, 0x5b, 0x61, 0x07, 0xfd, 0x91, 0x50, + 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, 0xf4, 0x57, 0x61, 0x05, 0xe6, 0x81, 0x83, 0x61, + 0x11, 0x4f, 0x56, 0x5b, 0x82, 0x61, 0x07, 0xce, 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, + 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x40, 0x51, 0x63, 0x7e, 0x34, + 0x5d, 0xef, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, + 0x5f, 0x10, 0x00, 0x5a, 0xfa, 0x80, 0x15, 0x61, 0x05, 0x67, 0x57, 0x60, 0x20, 0x91, 0x5f, 0x91, + 0x61, 0x08, 0x5d, 0x57, 0x5b, 0x50, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x60, 0x06, + 0x54, 0x16, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x60, 0x40, 0x51, 0x92, 0x16, 0x10, + 0x81, 0x52, 0xf3, 0x5b, 0x61, 0x08, 0x74, 0x91, 0x50, 0x82, 0x3d, 0x84, 0x11, 0x61, 0x05, 0x60, + 0x57, 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x82, 0x61, 0x08, 0x3e, 0x56, + 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, + 0x46, 0x57, 0x61, 0x08, 0x93, 0x61, 0x10, 0xdb, 0x56, 0x5b, 0x61, 0x08, 0x9b, 0x61, 0x17, 0x28, + 0x56, 0x5b, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x81, 0x16, 0x90, 0x81, 0x15, 0x61, + 0x06, 0x9e, 0x57, 0x60, 0x02, 0x80, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x19, + 0x81, 0x16, 0x90, 0x93, 0x17, 0x90, 0x55, 0x60, 0x40, 0x80, 0x51, 0x60, 0x01, 0x60, 0x01, 0x60, + 0xa0, 0x1b, 0x03, 0x93, 0x84, 0x16, 0x81, 0x52, 0x92, 0x90, 0x91, 0x16, 0x60, 0x20, 0x83, 0x01, + 0x52, 0x30, 0x91, 0x7f, 0x98, 0x39, 0x26, 0x75, 0x67, 0x55, 0x1f, 0x9b, 0x01, 0x77, 0xb3, 0x29, + 0x39, 0x43, 0x08, 0xfa, 0x17, 0xd5, 0xb8, 0x54, 0x67, 0x60, 0x19, 0xa9, 0x62, 0x01, 0x02, 0x83, + 0xcb, 0xa2, 0xc3, 0xd4, 0x91, 0x81, 0x90, 0x81, 0x01, 0x61, 0x05, 0x07, 0x56, 0x5b, 0x34, 0x61, + 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, + 0x60, 0x40, 0x51, 0x61, 0x03, 0xe8, 0x81, 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, + 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x60, 0x08, 0x54, 0x60, + 0x40, 0x51, 0x90, 0x81, 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, + 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x54, 0x60, 0x40, 0x51, 0x60, 0x01, 0x60, 0x01, + 0x60, 0xa0, 0x1b, 0x03, 0x90, 0x91, 0x16, 0x81, 0x52, 0x60, 0x20, 0x90, 0xf3, 0x5b, 0x34, 0x61, + 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x7f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, + 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x33, 0x03, 0x61, 0x0a, 0xc2, 0x57, 0x60, 0x40, + 0x51, 0x63, 0x7e, 0x34, 0x5d, 0xef, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, + 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, 0x00, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, + 0x5f, 0x91, 0x61, 0x0a, 0xa3, 0x57, 0x5b, 0x50, 0x60, 0x40, 0x51, 0x63, 0x4f, 0x0f, 0x2a, 0x39, + 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x90, 0x60, 0x20, 0x82, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, + 0x10, 0x01, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x61, 0x0a, 0x05, 0x92, 0x5f, + 0x92, 0x61, 0x0a, 0x82, 0x57, 0x5b, 0x50, 0x61, 0x13, 0x6c, 0x56, 0x5b, 0x60, 0x06, 0x54, 0x90, + 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x82, 0x16, 0x91, 0x60, 0x01, 0x60, 0x01, 0x60, + 0x40, 0x1b, 0x03, 0x82, 0x16, 0x91, 0x83, 0x83, 0x11, 0x61, 0x0a, 0x28, 0x57, 0x00, 0x5b, 0x7f, + 0x7e, 0x4f, 0x3c, 0xcb, 0x2c, 0x7c, 0xa7, 0x6e, 0xee, 0x66, 0x82, 0xc0, 0xe8, 0x6f, 0xef, 0xbb, + 0xd6, 0xfe, 0x24, 0xe4, 0xaf, 0x19, 0x38, 0x1a, 0x85, 0x4a, 0x14, 0xea, 0x09, 0x1b, 0xd9, 0xaf, + 0x92, 0x61, 0x05, 0x07, 0x92, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x19, 0x16, 0x17, + 0x60, 0x06, 0x55, 0x60, 0x40, 0x51, 0x91, 0x82, 0x91, 0x30, 0x95, 0x83, 0x90, 0x92, 0x91, 0x60, + 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x60, 0x20, 0x91, 0x81, 0x60, 0x40, 0x85, 0x01, 0x96, + 0x16, 0x84, 0x52, 0x16, 0x91, 0x01, 0x52, 0x56, 0x5b, 0x61, 0x0a, 0x9c, 0x91, 0x92, 0x50, 0x60, + 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, 0x60, 0x57, 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, + 0x4f, 0x56, 0x5b, 0x90, 0x83, 0x61, 0x09, 0xff, 0x56, 0x5b, 0x61, 0x0a, 0xbc, 0x91, 0x50, 0x60, + 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, 0x60, 0x57, 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, + 0x4f, 0x56, 0x5b, 0x81, 0x61, 0x09, 0xd0, 0x56, 0x5b, 0x63, 0xd3, 0x7c, 0xee, 0xfd, 0x60, 0xe0, + 0x1b, 0x5f, 0x52, 0x33, 0x60, 0x04, 0x52, 0x60, 0x24, 0x5f, 0xfd, 0x5b, 0x34, 0x61, 0x02, 0x46, + 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x01, 0x54, 0x33, + 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x90, 0x91, 0x16, 0x03, 0x61, 0x0b, 0x47, 0x57, + 0x60, 0x01, 0x80, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x19, 0x90, 0x81, 0x16, + 0x90, 0x91, 0x55, 0x5f, 0x80, 0x54, 0x33, 0x92, 0x81, 0x16, 0x83, 0x17, 0x82, 0x55, 0x60, 0x01, + 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x90, 0x7f, 0x8b, 0xe0, 0x07, 0x9c, 0x53, 0x16, 0x59, + 0x14, 0x13, 0x44, 0xcd, 0x1f, 0xd0, 0xa4, 0xf2, 0x84, 0x19, 0x49, 0x7f, 0x97, 0x22, 0xa3, 0xda, + 0xaf, 0xe3, 0xb4, 0x18, 0x6f, 0x6b, 0x64, 0x57, 0xe0, 0x90, 0x80, 0xa3, 0x00, 0x5b, 0x63, 0x11, + 0x8c, 0xda, 0xa7, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x33, 0x60, 0x04, 0x52, 0x60, 0x24, 0x5f, 0xfd, + 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, + 0x57, 0x60, 0x02, 0x54, 0x60, 0x40, 0x51, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x90, + 0x91, 0x16, 0x81, 0x52, 0x60, 0x20, 0x90, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, + 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x61, 0x0b, 0x9a, 0x61, 0x17, 0x28, 0x56, + 0x5b, 0x60, 0x01, 0x80, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x19, 0x90, 0x81, + 0x16, 0x90, 0x91, 0x55, 0x5f, 0x80, 0x54, 0x91, 0x82, 0x16, 0x81, 0x55, 0x90, 0x60, 0x01, 0x60, + 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x7f, 0x8b, 0xe0, 0x07, 0x9c, 0x53, 0x16, 0x59, 0x14, 0x13, + 0x44, 0xcd, 0x1f, 0xd0, 0xa4, 0xf2, 0x84, 0x19, 0x49, 0x7f, 0x97, 0x22, 0xa3, 0xda, 0xaf, 0xe3, + 0xb4, 0x18, 0x6f, 0x6b, 0x64, 0x57, 0xe0, 0x82, 0x80, 0xa3, 0x00, 0x5b, 0x34, 0x61, 0x02, 0x46, + 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x61, 0x03, + 0x60, 0x61, 0x16, 0xd6, 0x56, 0x5b, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, + 0x57, 0x60, 0x02, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x33, 0x81, 0x90, + 0x03, 0x61, 0x05, 0xfb, 0x57, 0x60, 0x40, 0x51, 0x63, 0x0b, 0xcf, 0xee, 0x3f, 0x60, 0xe1, 0x1b, + 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x20, 0x03, 0x5a, 0xfa, + 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, 0x0d, 0xdc, 0x57, 0x5b, 0x50, 0x61, + 0x05, 0xbd, 0x57, 0x34, 0x15, 0x61, 0x0d, 0xcd, 0x57, 0x61, 0x0c, 0x5e, 0x34, 0x60, 0x05, 0x54, + 0x61, 0x13, 0x5f, 0x56, 0x5b, 0x60, 0x05, 0x55, 0x60, 0x40, 0x51, 0x63, 0x7e, 0x34, 0x5d, 0xef, + 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, + 0x00, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, 0x0d, 0xae, 0x57, + 0x5b, 0x50, 0x60, 0x40, 0x51, 0x63, 0x4f, 0x0f, 0x2a, 0x39, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, + 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, 0x01, 0x5a, 0xfa, 0x90, 0x81, 0x15, + 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, 0x0d, 0x8f, 0x57, 0x5b, 0x50, 0x60, 0x01, 0x60, 0x01, + 0x60, 0x40, 0x1b, 0x03, 0x81, 0x16, 0x91, 0x82, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, + 0x03, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x81, 0x11, 0x61, 0x0d, 0x7b, 0x57, 0x60, + 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x16, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, + 0x82, 0x16, 0x11, 0x61, 0x0d, 0x5d, 0x57, 0x61, 0x0c, 0xfa, 0x92, 0x50, 0x61, 0x13, 0x6c, 0x56, + 0x5b, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x60, 0x06, 0x54, 0x91, 0x16, 0x90, 0x60, + 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x81, 0x16, 0x82, 0x11, 0x61, 0x0d, 0x47, 0x57, 0x5b, + 0x60, 0x40, 0x51, 0x34, 0x81, 0x52, 0x7f, 0x7c, 0x71, 0x79, 0x85, 0xac, 0x27, 0x3e, 0x66, 0x3b, + 0x7f, 0x30, 0x50, 0xf5, 0xb1, 0x5a, 0x43, 0x88, 0xff, 0x6e, 0xd9, 0x52, 0x33, 0x89, 0x54, 0xf6, + 0x50, 0xe2, 0x09, 0x3e, 0x13, 0x93, 0x7f, 0x60, 0x20, 0x30, 0x92, 0xa2, 0x00, 0x5b, 0x67, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x19, 0x16, 0x17, 0x60, 0x06, 0x55, 0x80, 0x80, 0x61, + 0x0d, 0x19, 0x56, 0x5b, 0x82, 0x65, 0x72, 0xba, 0x30, 0x4f, 0x80, 0x00, 0x90, 0x63, 0x7e, 0xda, + 0x69, 0x9b, 0x60, 0xe1, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x52, 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, + 0xfd, 0x5b, 0x63, 0x4e, 0x48, 0x7b, 0x71, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x11, 0x60, 0x04, + 0x52, 0x60, 0x24, 0x5f, 0xfd, 0x5b, 0x61, 0x0d, 0xa8, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, + 0x11, 0x61, 0x05, 0x60, 0x57, 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x82, + 0x61, 0x0c, 0xb4, 0x56, 0x5b, 0x61, 0x0d, 0xc7, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, + 0x61, 0x05, 0x60, 0x57, 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x81, 0x61, + 0x0c, 0x8a, 0x56, 0x5b, 0x63, 0x1f, 0x2a, 0x20, 0x05, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x04, + 0x5f, 0xfd, 0x5b, 0x61, 0x0d, 0xf5, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, + 0xf4, 0x57, 0x61, 0x05, 0xe6, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x81, 0x61, 0x0c, 0x47, + 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, + 0x02, 0x46, 0x57, 0x61, 0x0e, 0x14, 0x61, 0x10, 0xdb, 0x56, 0x5b, 0x61, 0x0e, 0x1c, 0x61, 0x17, + 0x28, 0x56, 0x5b, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x81, 0x16, 0x90, 0x81, 0x15, + 0x61, 0x06, 0x9e, 0x57, 0x60, 0x04, 0x80, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, + 0x19, 0x81, 0x16, 0x90, 0x93, 0x17, 0x90, 0x55, 0x60, 0x40, 0x80, 0x51, 0x60, 0x01, 0x60, 0x01, + 0x60, 0xa0, 0x1b, 0x03, 0x93, 0x84, 0x16, 0x81, 0x52, 0x92, 0x90, 0x91, 0x16, 0x60, 0x20, 0x83, + 0x01, 0x52, 0x30, 0x91, 0x7f, 0x92, 0x68, 0xb9, 0x72, 0x6f, 0x38, 0x82, 0x49, 0x65, 0x64, 0x9b, + 0xfc, 0xf3, 0xb0, 0xd3, 0x2f, 0xf5, 0x08, 0x16, 0x21, 0x6b, 0xf7, 0xcd, 0xbd, 0x57, 0xab, 0xc3, + 0xcc, 0x8c, 0x5d, 0xab, 0x12, 0x91, 0x81, 0x90, 0x81, 0x01, 0x61, 0x05, 0x07, 0x56, 0x5b, 0x34, + 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, + 0x40, 0x51, 0x63, 0x7e, 0x34, 0x5d, 0xef, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, + 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, 0x00, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, + 0x57, 0x5f, 0x91, 0x61, 0x0f, 0x32, 0x57, 0x5b, 0x50, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, + 0x03, 0x60, 0x40, 0x51, 0x91, 0x63, 0x51, 0xcb, 0x86, 0xcd, 0x60, 0xe0, 0x1b, 0x83, 0x52, 0x16, + 0x60, 0x04, 0x82, 0x01, 0x52, 0x60, 0x20, 0x81, 0x60, 0x24, 0x81, 0x30, 0x5a, 0xfa, 0x80, 0x15, + 0x61, 0x05, 0x67, 0x57, 0x5f, 0x90, 0x61, 0x0e, 0xff, 0x57, 0x5b, 0x60, 0x20, 0x90, 0x60, 0x40, + 0x51, 0x90, 0x81, 0x52, 0xf3, 0x5b, 0x50, 0x60, 0x20, 0x81, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x0f, + 0x2a, 0x57, 0x5b, 0x81, 0x61, 0x0f, 0x19, 0x60, 0x20, 0x93, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, + 0x81, 0x01, 0x03, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x90, 0x51, 0x61, 0x0e, 0xf4, 0x56, + 0x5b, 0x3d, 0x91, 0x50, 0x61, 0x0f, 0x0c, 0x56, 0x5b, 0x61, 0x0f, 0x4b, 0x91, 0x50, 0x60, 0x20, + 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, 0x60, 0x57, 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, + 0x56, 0x5b, 0x81, 0x61, 0x0e, 0xc1, 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, + 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x04, 0x54, 0x60, 0x40, 0x51, 0x60, 0x01, + 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x90, 0x91, 0x16, 0x81, 0x52, 0x60, 0x20, 0x90, 0xf3, 0x5b, + 0x34, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, + 0x57, 0x61, 0x0f, 0x92, 0x61, 0x10, 0xdb, 0x56, 0x5b, 0x60, 0x02, 0x54, 0x60, 0x01, 0x60, 0x01, + 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x33, 0x81, 0x90, 0x03, 0x61, 0x05, 0xfb, 0x57, 0x60, 0x20, 0x61, + 0x07, 0x21, 0x83, 0x61, 0x0f, 0xb4, 0x61, 0x16, 0x78, 0x56, 0x5b, 0x61, 0x12, 0xed, 0x56, 0x5b, + 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, + 0x60, 0x20, 0x61, 0x0f, 0xd3, 0x61, 0x12, 0x3a, 0x56, 0x5b, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, + 0x1b, 0x03, 0x60, 0x40, 0x51, 0x91, 0x16, 0x81, 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, + 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x61, 0x03, 0x60, + 0x61, 0x11, 0xc5, 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, + 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x02, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, + 0x03, 0x16, 0x33, 0x81, 0x90, 0x03, 0x61, 0x05, 0xfb, 0x57, 0x60, 0x40, 0x51, 0x63, 0x0b, 0xcf, + 0xee, 0x3f, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, + 0x5f, 0x20, 0x03, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, 0x10, + 0x5e, 0x57, 0x5b, 0x50, 0x61, 0x05, 0xbd, 0x57, 0x61, 0x10, 0x5c, 0x60, 0x04, 0x35, 0x61, 0x13, + 0x8c, 0x56, 0x5b, 0x00, 0x5b, 0x61, 0x10, 0x77, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, + 0x61, 0x05, 0xf4, 0x57, 0x61, 0x05, 0xe6, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x81, 0x61, + 0x10, 0x4c, 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, + 0x61, 0x02, 0x46, 0x57, 0x60, 0x40, 0x51, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, + 0x16, 0x81, 0x52, 0x60, 0x20, 0x90, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, + 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x90, 0x60, 0x05, 0x54, 0x81, 0x52, + 0xf3, 0x5b, 0x60, 0x04, 0x35, 0x90, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x82, 0x16, + 0x82, 0x03, 0x61, 0x02, 0x46, 0x57, 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x36, + 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x04, 0x35, 0x60, 0x01, 0x60, 0x01, + 0x60, 0x40, 0x1b, 0x03, 0x81, 0x16, 0x81, 0x03, 0x61, 0x02, 0x46, 0x57, 0x61, 0x03, 0x60, 0x60, + 0x20, 0x91, 0x61, 0x17, 0x3b, 0x56, 0x5b, 0x60, 0x40, 0x81, 0x01, 0x90, 0x81, 0x10, 0x60, 0x01, + 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x82, 0x11, 0x17, 0x61, 0x11, 0x3b, 0x57, 0x60, 0x40, 0x52, + 0x56, 0x5b, 0x63, 0x4e, 0x48, 0x7b, 0x71, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x41, 0x60, 0x04, + 0x52, 0x60, 0x24, 0x5f, 0xfd, 0x5b, 0x90, 0x60, 0x1f, 0x80, 0x19, 0x91, 0x01, 0x16, 0x81, 0x01, + 0x90, 0x81, 0x10, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x82, 0x11, 0x17, 0x61, 0x11, + 0x3b, 0x57, 0x60, 0x40, 0x52, 0x56, 0x5b, 0x90, 0x81, 0x60, 0x20, 0x91, 0x03, 0x12, 0x61, 0x02, + 0x46, 0x57, 0x51, 0x80, 0x15, 0x15, 0x81, 0x03, 0x61, 0x02, 0x46, 0x57, 0x90, 0x56, 0x5b, 0x91, + 0x90, 0x82, 0x03, 0x91, 0x82, 0x11, 0x61, 0x0d, 0x7b, 0x57, 0x56, 0x5b, 0x60, 0x07, 0x54, 0x81, + 0x10, 0x15, 0x61, 0x11, 0xb1, 0x57, 0x60, 0x07, 0x5f, 0x52, 0x60, 0x20, 0x5f, 0x20, 0x90, 0x60, + 0x01, 0x1b, 0x01, 0x90, 0x5f, 0x90, 0x56, 0x5b, 0x63, 0x4e, 0x48, 0x7b, 0x71, 0x60, 0xe0, 0x1b, + 0x5f, 0x52, 0x60, 0x32, 0x60, 0x04, 0x52, 0x60, 0x24, 0x5f, 0xfd, 0x5b, 0x60, 0x07, 0x54, 0x80, + 0x15, 0x61, 0x11, 0xf6, 0x57, 0x5f, 0x19, 0x81, 0x01, 0x90, 0x81, 0x11, 0x61, 0x0d, 0x7b, 0x57, + 0x60, 0x01, 0x61, 0x11, 0xe7, 0x61, 0x11, 0xf3, 0x92, 0x61, 0x11, 0x95, 0x56, 0x5b, 0x50, 0x01, + 0x54, 0x60, 0x08, 0x54, 0x90, 0x61, 0x11, 0x88, 0x56, 0x5b, 0x90, 0x56, 0x5b, 0x50, 0x5f, 0x90, + 0x56, 0x5b, 0x90, 0x81, 0x60, 0x20, 0x91, 0x03, 0x12, 0x61, 0x02, 0x46, 0x57, 0x51, 0x60, 0x01, + 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x81, 0x16, 0x81, 0x03, 0x61, 0x02, 0x46, 0x57, 0x90, 0x56, + 0x5b, 0x90, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x80, 0x91, 0x16, 0x91, 0x16, 0x03, + 0x90, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x82, 0x11, 0x61, 0x0d, 0x7b, 0x57, 0x56, + 0x5b, 0x60, 0x40, 0x51, 0x63, 0x7e, 0x34, 0x5d, 0xef, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, + 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, 0x00, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, + 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, 0x12, 0x90, 0x57, 0x5b, 0x50, 0x60, 0x01, 0x60, 0x01, 0x60, + 0x40, 0x1b, 0x03, 0x60, 0x06, 0x54, 0x16, 0x90, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, + 0x81, 0x16, 0x82, 0x11, 0x61, 0x12, 0x87, 0x57, 0x50, 0x50, 0x5f, 0x90, 0x56, 0x5b, 0x61, 0x11, + 0xf3, 0x91, 0x61, 0x12, 0x1a, 0x56, 0x5b, 0x61, 0x12, 0xa9, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, + 0x20, 0x11, 0x61, 0x05, 0x60, 0x57, 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, + 0x5f, 0x61, 0x12, 0x63, 0x56, 0x5b, 0x3d, 0x15, 0x61, 0x12, 0xe8, 0x57, 0x3d, 0x90, 0x60, 0x01, + 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x82, 0x11, 0x61, 0x11, 0x3b, 0x57, 0x60, 0x40, 0x51, 0x91, + 0x61, 0x12, 0xdd, 0x60, 0x1f, 0x82, 0x01, 0x60, 0x1f, 0x19, 0x16, 0x60, 0x20, 0x01, 0x84, 0x61, + 0x11, 0x4f, 0x56, 0x5b, 0x82, 0x52, 0x3d, 0x5f, 0x60, 0x20, 0x84, 0x01, 0x3e, 0x56, 0x5b, 0x60, + 0x60, 0x90, 0x56, 0x5b, 0x90, 0x61, 0x12, 0xf6, 0x61, 0x16, 0xd6, 0x56, 0x5b, 0x91, 0x82, 0x15, + 0x61, 0x13, 0x59, 0x57, 0x5f, 0x80, 0x80, 0x85, 0x81, 0x94, 0x60, 0x01, 0x80, 0x60, 0xa0, 0x1b, + 0x03, 0x16, 0x80, 0x60, 0x40, 0x51, 0x83, 0x81, 0x52, 0x7f, 0x52, 0x02, 0xb7, 0x90, 0xbb, 0xfc, + 0x60, 0xcd, 0xee, 0xc9, 0x26, 0x3f, 0xb3, 0x5a, 0x33, 0x8a, 0xc1, 0xcd, 0xf6, 0x79, 0x8a, 0xb4, + 0x16, 0x3b, 0xfc, 0xed, 0x25, 0x51, 0x75, 0x9a, 0x74, 0xa9, 0x60, 0x20, 0x30, 0x92, 0xa3, 0x5a, + 0xf1, 0x61, 0x13, 0x42, 0x61, 0x12, 0xaf, 0x56, 0x5b, 0x50, 0x15, 0x61, 0x13, 0x4a, 0x57, 0x56, + 0x5b, 0x63, 0x12, 0x17, 0x1d, 0x83, 0x60, 0xe3, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x5f, 0xfd, 0x5b, + 0x50, 0x5f, 0x91, 0x50, 0x56, 0x5b, 0x91, 0x90, 0x82, 0x01, 0x80, 0x92, 0x11, 0x61, 0x0d, 0x7b, + 0x57, 0x56, 0x5b, 0x90, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x80, 0x91, 0x16, 0x91, + 0x16, 0x01, 0x90, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x82, 0x11, 0x61, 0x0d, 0x7b, + 0x57, 0x56, 0x5b, 0x80, 0x15, 0x61, 0x0d, 0xcd, 0x57, 0x60, 0x05, 0x54, 0x80, 0x82, 0x11, 0x61, + 0x16, 0x62, 0x57, 0x60, 0x40, 0x51, 0x63, 0xfa, 0xcd, 0x74, 0x3b, 0x60, 0xe0, 0x1b, 0x81, 0x52, + 0x30, 0x60, 0x04, 0x82, 0x01, 0x52, 0x60, 0x20, 0x81, 0x60, 0x24, 0x81, 0x64, 0x01, 0x62, 0x5f, + 0x20, 0x01, 0x5a, 0xfa, 0x80, 0x15, 0x61, 0x05, 0x67, 0x57, 0x83, 0x91, 0x5f, 0x91, 0x61, 0x16, + 0x43, 0x57, 0x5b, 0x50, 0x61, 0x15, 0x08, 0x57, 0x5b, 0x61, 0x13, 0xdb, 0x91, 0x61, 0x11, 0x88, + 0x56, 0x5b, 0x60, 0x05, 0x55, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x60, 0x06, 0x54, + 0x16, 0x60, 0x07, 0x54, 0x80, 0x15, 0x5f, 0x14, 0x61, 0x14, 0x52, 0x57, 0x50, 0x60, 0x40, 0x51, + 0x61, 0x14, 0x13, 0x91, 0x61, 0x14, 0x06, 0x82, 0x61, 0x11, 0x20, 0x56, 0x5b, 0x81, 0x52, 0x82, + 0x60, 0x20, 0x82, 0x01, 0x52, 0x61, 0x19, 0x24, 0x56, 0x5b, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, + 0x1b, 0x03, 0x60, 0x06, 0x54, 0x16, 0x60, 0x40, 0x51, 0x91, 0x82, 0x52, 0x60, 0x20, 0x82, 0x01, + 0x52, 0x7f, 0x53, 0x6c, 0x53, 0xe1, 0x1d, 0xb8, 0x10, 0x5c, 0x78, 0x7d, 0x8d, 0x5f, 0xce, 0x8b, + 0x01, 0xf6, 0x89, 0xae, 0xfd, 0x57, 0x77, 0x1d, 0xad, 0x0d, 0x0c, 0x62, 0xc3, 0x3a, 0xf2, 0xec, + 0xc1, 0xf9, 0x60, 0x40, 0x30, 0x92, 0xa2, 0x56, 0x5b, 0x5f, 0x19, 0x81, 0x01, 0x81, 0x81, 0x11, + 0x61, 0x0d, 0x7b, 0x57, 0x61, 0x14, 0x66, 0x90, 0x61, 0x11, 0x95, 0x56, 0x5b, 0x50, 0x90, 0x60, + 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x82, 0x54, 0x16, 0x83, 0x81, 0x14, 0x5f, 0x14, 0x61, + 0x14, 0x95, 0x57, 0x50, 0x50, 0x60, 0x01, 0x91, 0x50, 0x01, 0x61, 0x14, 0x8e, 0x82, 0x82, 0x54, + 0x61, 0x13, 0x5f, 0x56, 0x5b, 0x90, 0x55, 0x61, 0x14, 0x13, 0x56, 0x5b, 0x83, 0x81, 0x10, 0x15, + 0x61, 0x14, 0xf1, 0x57, 0x50, 0x61, 0x03, 0xe8, 0x81, 0x10, 0x15, 0x61, 0x14, 0xd9, 0x57, 0x50, + 0x90, 0x61, 0x14, 0xbb, 0x83, 0x60, 0x01, 0x61, 0x14, 0xd4, 0x94, 0x01, 0x54, 0x61, 0x13, 0x5f, + 0x56, 0x5b, 0x60, 0x40, 0x51, 0x91, 0x61, 0x14, 0xc8, 0x83, 0x61, 0x11, 0x20, 0x56, 0x5b, 0x82, + 0x52, 0x60, 0x20, 0x82, 0x01, 0x52, 0x61, 0x19, 0x24, 0x56, 0x5b, 0x61, 0x14, 0x13, 0x56, 0x5b, + 0x63, 0x49, 0x38, 0x45, 0xf7, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x52, 0x61, 0x03, 0xe8, + 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, 0xfd, 0x5b, 0x83, 0x90, 0x63, 0x50, 0x57, 0x9b, 0x29, 0x60, + 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x52, 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, 0xfd, 0x5b, 0x50, + 0x60, 0x40, 0x51, 0x63, 0xa3, 0x10, 0x62, 0x4f, 0x60, 0xe0, 0x1b, 0x81, 0x52, 0x30, 0x60, 0x04, + 0x82, 0x01, 0x52, 0x60, 0x20, 0x81, 0x60, 0x24, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x20, 0x01, 0x5a, + 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, 0x16, 0x08, 0x57, 0x5b, 0x50, + 0x60, 0x04, 0x81, 0x10, 0x15, 0x61, 0x15, 0xf4, 0x57, 0x80, 0x60, 0x02, 0x84, 0x92, 0x14, 0x90, + 0x81, 0x15, 0x61, 0x15, 0xe9, 0x57, 0x5b, 0x50, 0x15, 0x61, 0x13, 0xd2, 0x57, 0x50, 0x60, 0x40, + 0x51, 0x63, 0xaa, 0x75, 0x17, 0xe1, 0x60, 0xe0, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, + 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, 0x02, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, + 0x5f, 0x91, 0x61, 0x15, 0xb7, 0x57, 0x5b, 0x50, 0x80, 0x61, 0x15, 0x8c, 0x84, 0x84, 0x61, 0x11, + 0x88, 0x56, 0x5b, 0x10, 0x61, 0x15, 0x98, 0x57, 0x50, 0x81, 0x61, 0x13, 0xd2, 0x56, 0x5b, 0x91, + 0x61, 0x15, 0xa2, 0x91, 0x61, 0x11, 0x88, 0x56, 0x5b, 0x63, 0x03, 0x98, 0xe3, 0xfb, 0x60, 0xe1, + 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x52, 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, 0xfd, 0x5b, 0x90, 0x50, + 0x60, 0x20, 0x81, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x15, 0xe1, 0x57, 0x5b, 0x81, 0x61, 0x15, 0xd2, + 0x60, 0x20, 0x93, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x81, 0x01, 0x03, 0x12, 0x61, 0x02, 0x46, + 0x57, 0x51, 0x5f, 0x61, 0x15, 0x80, 0x56, 0x5b, 0x3d, 0x91, 0x50, 0x61, 0x15, 0xc5, 0x56, 0x5b, + 0x60, 0x03, 0x91, 0x50, 0x14, 0x5f, 0x61, 0x15, 0x50, 0x56, 0x5b, 0x63, 0x4e, 0x48, 0x7b, 0x71, + 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x21, 0x60, 0x04, 0x52, 0x60, 0x24, 0x5f, 0xfd, 0x5b, 0x90, + 0x50, 0x60, 0x20, 0x81, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x16, 0x3b, 0x57, 0x5b, 0x81, 0x61, 0x16, + 0x23, 0x60, 0x20, 0x93, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x81, 0x01, 0x03, 0x12, 0x61, 0x02, + 0x46, 0x57, 0x51, 0x60, 0x04, 0x81, 0x10, 0x15, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x61, 0x15, 0x38, + 0x56, 0x5b, 0x3d, 0x91, 0x50, 0x61, 0x16, 0x16, 0x56, 0x5b, 0x61, 0x16, 0x5c, 0x91, 0x50, 0x60, + 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, 0xf4, 0x57, 0x61, 0x05, 0xe6, 0x81, 0x83, 0x61, 0x11, + 0x4f, 0x56, 0x5b, 0x5f, 0x61, 0x13, 0xcc, 0x56, 0x5b, 0x90, 0x63, 0x50, 0x3a, 0x9f, 0xa3, 0x60, + 0xe1, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x52, 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, 0xfd, 0x5b, 0x60, + 0x02, 0x7f, 0x9b, 0x77, 0x9b, 0x17, 0x42, 0x2d, 0x0d, 0xf9, 0x22, 0x23, 0x01, 0x8b, 0x32, 0xb4, + 0xd1, 0xfa, 0x46, 0xe0, 0x71, 0x72, 0x3d, 0x68, 0x17, 0xe2, 0x48, 0x6d, 0x00, 0x3b, 0xec, 0xc5, + 0x5f, 0x00, 0x54, 0x14, 0x61, 0x16, 0xc7, 0x57, 0x60, 0x02, 0x7f, 0x9b, 0x77, 0x9b, 0x17, 0x42, + 0x2d, 0x0d, 0xf9, 0x22, 0x23, 0x01, 0x8b, 0x32, 0xb4, 0xd1, 0xfa, 0x46, 0xe0, 0x71, 0x72, 0x3d, + 0x68, 0x17, 0xe2, 0x48, 0x6d, 0x00, 0x3b, 0xec, 0xc5, 0x5f, 0x00, 0x55, 0x56, 0x5b, 0x63, 0x3e, + 0xe5, 0xae, 0xb5, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x5f, 0xfd, 0x5b, 0x60, 0x07, 0x54, + 0x5f, 0x81, 0x61, 0x17, 0x06, 0x57, 0x5b, 0x61, 0x16, 0xed, 0x91, 0x50, 0x60, 0x05, 0x54, 0x61, + 0x13, 0x5f, 0x56, 0x5b, 0x47, 0x90, 0x80, 0x82, 0x11, 0x15, 0x61, 0x17, 0x00, 0x57, 0x61, 0x11, + 0xf3, 0x91, 0x61, 0x11, 0x88, 0x56, 0x5b, 0x50, 0x50, 0x5f, 0x90, 0x56, 0x5b, 0x50, 0x5f, 0x19, + 0x81, 0x01, 0x90, 0x81, 0x11, 0x61, 0x0d, 0x7b, 0x57, 0x61, 0x17, 0x23, 0x60, 0x01, 0x61, 0x11, + 0xe7, 0x61, 0x16, 0xed, 0x93, 0x61, 0x11, 0x95, 0x56, 0x5b, 0x61, 0x16, 0xe0, 0x56, 0x5b, 0x5f, + 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x33, 0x03, 0x61, 0x0b, 0x47, 0x57, + 0x56, 0x5b, 0x60, 0x06, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x90, 0x81, 0x16, + 0x90, 0x82, 0x16, 0x11, 0x61, 0x17, 0xd5, 0x57, 0x61, 0x17, 0x5d, 0x60, 0x05, 0x54, 0x91, 0x61, + 0x19, 0x9b, 0x56, 0x5b, 0x60, 0x08, 0x54, 0x90, 0x81, 0x80, 0x82, 0x11, 0x61, 0x17, 0xc6, 0x57, + 0x50, 0x50, 0x5f, 0x90, 0x5b, 0x60, 0x07, 0x54, 0x5f, 0x91, 0x81, 0x61, 0x17, 0x9c, 0x57, 0x5b, + 0x50, 0x50, 0x80, 0x82, 0x10, 0x15, 0x61, 0x17, 0x97, 0x57, 0x61, 0x11, 0xf3, 0x92, 0x91, 0x61, + 0x17, 0x91, 0x91, 0x61, 0x11, 0x88, 0x56, 0x5b, 0x90, 0x61, 0x13, 0x5f, 0x56, 0x5b, 0x50, 0x50, + 0x90, 0x56, 0x5b, 0x5f, 0x19, 0x82, 0x01, 0x92, 0x50, 0x90, 0x82, 0x11, 0x61, 0x0d, 0x7b, 0x57, + 0x60, 0x01, 0x61, 0x17, 0xb7, 0x61, 0x17, 0xbf, 0x93, 0x61, 0x11, 0x95, 0x56, 0x5b, 0x50, 0x01, + 0x54, 0x61, 0x11, 0x88, 0x56, 0x5b, 0x5f, 0x80, 0x61, 0x17, 0x79, 0x56, 0x5b, 0x61, 0x17, 0xcf, + 0x91, 0x61, 0x11, 0x88, 0x56, 0x5b, 0x90, 0x61, 0x17, 0x6e, 0x56, 0x5b, 0x61, 0x17, 0x5d, 0x5f, + 0x91, 0x61, 0x19, 0x9b, 0x56, 0x5b, 0x90, 0x61, 0x17, 0xe8, 0x61, 0x18, 0x43, 0x56, 0x5b, 0x91, + 0x82, 0x15, 0x61, 0x13, 0x59, 0x57, 0x5f, 0x80, 0x80, 0x85, 0x81, 0x94, 0x61, 0x18, 0x01, 0x82, + 0x60, 0x08, 0x54, 0x61, 0x13, 0x5f, 0x56, 0x5b, 0x60, 0x08, 0x55, 0x60, 0x01, 0x80, 0x60, 0xa0, + 0x1b, 0x03, 0x16, 0x80, 0x60, 0x40, 0x51, 0x83, 0x81, 0x52, 0x7f, 0xd0, 0xd8, 0x95, 0x37, 0xda, + 0xf7, 0xd9, 0xf2, 0xb5, 0xb2, 0x31, 0x5d, 0x3a, 0xf4, 0x7f, 0x1f, 0xe0, 0x44, 0x19, 0x96, 0x62, + 0x47, 0xff, 0xb9, 0x63, 0xb1, 0xfa, 0x5b, 0x07, 0x7c, 0x06, 0x36, 0x60, 0x20, 0x30, 0x92, 0xa3, + 0x5a, 0xf1, 0x61, 0x13, 0x42, 0x61, 0x12, 0xaf, 0x56, 0x5b, 0x60, 0x07, 0x54, 0x15, 0x61, 0x19, + 0x20, 0x57, 0x60, 0x40, 0x51, 0x63, 0x7e, 0x34, 0x5d, 0xef, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, + 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, 0x00, 0x5a, 0xfa, 0x90, 0x81, 0x15, + 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, 0x19, 0x01, 0x57, 0x5b, 0x50, 0x60, 0x40, 0x51, 0x63, + 0xd8, 0xf0, 0x8a, 0xb5, 0x60, 0xe0, 0x1b, 0x81, 0x52, 0x90, 0x60, 0x20, 0x82, 0x60, 0x04, 0x81, + 0x64, 0x01, 0x62, 0x5f, 0x10, 0x01, 0x5a, 0xfa, 0x91, 0x82, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, + 0x92, 0x61, 0x18, 0xe0, 0x57, 0x5b, 0x50, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x82, + 0x16, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x82, 0x16, 0x11, 0x15, 0x61, 0x17, 0x00, + 0x57, 0x61, 0x18, 0xcc, 0x91, 0x61, 0x18, 0xc7, 0x91, 0x61, 0x12, 0x1a, 0x56, 0x5b, 0x61, 0x19, + 0x9b, 0x56, 0x5b, 0x60, 0x08, 0x54, 0x80, 0x82, 0x11, 0x15, 0x61, 0x17, 0x00, 0x57, 0x61, 0x11, + 0xf3, 0x91, 0x61, 0x11, 0x88, 0x56, 0x5b, 0x61, 0x18, 0xfa, 0x91, 0x92, 0x50, 0x60, 0x20, 0x3d, + 0x60, 0x20, 0x11, 0x61, 0x05, 0x60, 0x57, 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, + 0x5b, 0x90, 0x5f, 0x61, 0x18, 0x9f, 0x56, 0x5b, 0x61, 0x19, 0x1a, 0x91, 0x50, 0x60, 0x20, 0x3d, + 0x60, 0x20, 0x11, 0x61, 0x05, 0x60, 0x57, 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, + 0x5b, 0x5f, 0x61, 0x18, 0x74, 0x56, 0x5b, 0x5f, 0x90, 0x56, 0x5b, 0x60, 0x07, 0x54, 0x68, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x10, 0x15, 0x61, 0x11, 0x3b, 0x57, 0x60, + 0x01, 0x81, 0x01, 0x60, 0x07, 0x55, 0x60, 0x07, 0x54, 0x81, 0x10, 0x15, 0x61, 0x11, 0xb1, 0x57, + 0x60, 0x07, 0x5f, 0x52, 0x60, 0x01, 0x1b, 0x7f, 0xa6, 0x6c, 0xc9, 0x28, 0xb5, 0xed, 0xb8, 0x2a, + 0xf9, 0xbd, 0x49, 0x92, 0x29, 0x54, 0x15, 0x5a, 0xb7, 0xb0, 0x94, 0x26, 0x94, 0xbe, 0xa4, 0xce, + 0x44, 0x66, 0x1d, 0x9a, 0x87, 0x36, 0xc6, 0x88, 0x01, 0x90, 0x60, 0x20, 0x81, 0x60, 0x01, 0x60, + 0x01, 0x60, 0x40, 0x1b, 0x03, 0x80, 0x60, 0x01, 0x94, 0x51, 0x16, 0x16, 0x60, 0x01, 0x60, 0x01, + 0x60, 0x40, 0x1b, 0x03, 0x19, 0x85, 0x54, 0x16, 0x17, 0x84, 0x55, 0x01, 0x51, 0x91, 0x01, 0x55, + 0x56, 0x5b, 0x60, 0x07, 0x54, 0x80, 0x15, 0x61, 0x17, 0x00, 0x57, 0x60, 0x07, 0x54, 0x15, 0x61, + 0x11, 0xb1, 0x57, 0x60, 0x07, 0x5f, 0x52, 0x7f, 0xa6, 0x6c, 0xc9, 0x28, 0xb5, 0xed, 0xb8, 0x2a, + 0xf9, 0xbd, 0x49, 0x92, 0x29, 0x54, 0x15, 0x5a, 0xb7, 0xb0, 0x94, 0x26, 0x94, 0xbe, 0xa4, 0xce, + 0x44, 0x66, 0x1d, 0x9a, 0x87, 0x36, 0xc6, 0x88, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, + 0x03, 0x92, 0x83, 0x16, 0x92, 0x16, 0x82, 0x11, 0x15, 0x61, 0x17, 0x00, 0x57, 0x5f, 0x19, 0x81, + 0x01, 0x90, 0x81, 0x11, 0x90, 0x81, 0x61, 0x0d, 0x7b, 0x57, 0x82, 0x60, 0x01, 0x60, 0x01, 0x60, + 0x40, 0x1b, 0x03, 0x61, 0x1a, 0x05, 0x83, 0x61, 0x11, 0x95, 0x56, 0x5b, 0x50, 0x54, 0x16, 0x10, + 0x61, 0x1a, 0x5e, 0x57, 0x5f, 0x91, 0x61, 0x0d, 0x7b, 0x57, 0x90, 0x5b, 0x60, 0x01, 0x81, 0x01, + 0x80, 0x82, 0x11, 0x61, 0x0d, 0x7b, 0x57, 0x82, 0x11, 0x15, 0x61, 0x1a, 0x5e, 0x57, 0x61, 0x1a, + 0x31, 0x82, 0x82, 0x61, 0x13, 0x5f, 0x56, 0x5b, 0x60, 0x01, 0x1c, 0x90, 0x83, 0x60, 0x01, 0x60, + 0x01, 0x60, 0x40, 0x1b, 0x03, 0x61, 0x1a, 0x47, 0x84, 0x61, 0x11, 0x95, 0x56, 0x5b, 0x50, 0x54, + 0x16, 0x10, 0x15, 0x61, 0x1a, 0x56, 0x57, 0x50, 0x61, 0x1a, 0x15, 0x56, 0x5b, 0x91, 0x50, 0x90, + 0x61, 0x1a, 0x15, 0x56, 0x5b, 0x60, 0x01, 0x92, 0x50, 0x61, 0x1a, 0x6c, 0x91, 0x50, 0x61, 0x11, + 0x95, 0x56, 0x5b, 0x50, 0x01, 0x54, 0x90, 0x56, 0xfe, 0xa2, 0x64, 0x69, 0x70, 0x66, 0x73, 0x58, + 0x22, 0x12, 0x20, 0x65, 0x23, 0x47, 0x92, 0x08, 0x72, 0xa9, 0xe7, 0x3c, 0x6c, 0x9a, 0x6e, 0xa3, + 0xb4, 0x36, 0x1a, 0xb4, 0x2f, 0xf2, 0x2d, 0x38, 0x67, 0x2f, 0x6f, 0xf9, 0x87, 0x39, 0x30, 0x42, + 0x1d, 0xf2, 0xac, 0x64, 0x73, 0x6f, 0x6c, 0x63, 0x43, 0x00, 0x08, 0x1e, 0x00, 0x33, 0xa2, 0x64, + 0x69, 0x70, 0x66, 0x73, 0x58, 0x22, 0x12, 0x20, 0x49, 0x8e, 0xf1, 0x6f, 0x0b, 0xf7, 0xe7, 0xc3, + 0x7a, 0x11, 0xc2, 0x3d, 0xe2, 0x15, 0x17, 0x83, 0x6a, 0x21, 0x27, 0xc9, 0x0e, 0x6c, 0x0d, 0x9c, + 0x35, 0x2a, 0x5e, 0x18, 0x98, 0xbb, 0xdc, 0x25, 0x64, 0x73, 0x6f, 0x6c, 0x63, 0x43, 0x00, 0x08, + 0x1e, 0x00, 0x33, +]; + +/// New `StakePool` contract runtime bytecode for Alpha hardfork. +/// Extracted from forge deployedBytecode. +/// Bytecode size: 6824 bytes. +pub const STAKEPOOL_ALPHA_RUNTIME_BYTECODE: &[u8] = &[ + 0x60, 0x80, 0x80, 0x60, 0x40, 0x52, 0x60, 0x04, 0x36, 0x10, 0x15, 0x61, 0x00, 0x12, 0x57, 0x5f, + 0x80, 0xfd, 0x5b, 0x5f, 0x35, 0x60, 0xe0, 0x1c, 0x90, 0x81, 0x63, 0x17, 0x38, 0x7b, 0x58, 0x14, + 0x61, 0x10, 0xc1, 0x57, 0x50, 0x80, 0x63, 0x2b, 0x37, 0xf5, 0x3c, 0x14, 0x61, 0x0f, 0x51, 0x57, + 0x80, 0x63, 0x2d, 0xd3, 0x10, 0x00, 0x14, 0x61, 0x10, 0x7d, 0x57, 0x80, 0x63, 0x2e, 0x17, 0xde, + 0x78, 0x14, 0x61, 0x0f, 0xfe, 0x57, 0x80, 0x63, 0x3b, 0xd0, 0x54, 0x00, 0x14, 0x61, 0x0f, 0xe4, + 0x57, 0x80, 0x63, 0x41, 0x60, 0x53, 0x2f, 0x14, 0x61, 0x0f, 0xb9, 0x57, 0x80, 0x63, 0x42, 0xd8, + 0x66, 0x93, 0x14, 0x61, 0x0f, 0x79, 0x57, 0x80, 0x63, 0x46, 0xc9, 0x6a, 0xac, 0x14, 0x61, 0x0f, + 0x51, 0x57, 0x80, 0x63, 0x49, 0x47, 0x11, 0x88, 0x14, 0x61, 0x0e, 0x88, 0x57, 0x80, 0x63, 0x4b, + 0xc2, 0xa6, 0x57, 0x14, 0x61, 0x0d, 0xfb, 0x57, 0x80, 0x63, 0x51, 0xcb, 0x86, 0xcd, 0x14, 0x61, + 0x06, 0xad, 0x57, 0x80, 0x63, 0x53, 0xfd, 0x66, 0x14, 0x14, 0x61, 0x02, 0xbb, 0x57, 0x80, 0x63, + 0x57, 0x0c, 0xa7, 0x35, 0x14, 0x61, 0x02, 0x6b, 0x57, 0x80, 0x63, 0x5a, 0x62, 0x7d, 0xbc, 0x14, + 0x61, 0x0b, 0xff, 0x57, 0x80, 0x63, 0x5e, 0x42, 0xb4, 0x55, 0x14, 0x61, 0x0b, 0xe5, 0x57, 0x80, + 0x63, 0x5e, 0xba, 0xf1, 0xdb, 0x14, 0x61, 0x0b, 0x5a, 0x57, 0x80, 0x63, 0x71, 0x50, 0x18, 0xa6, + 0x14, 0x61, 0x0b, 0x82, 0x57, 0x80, 0x63, 0x72, 0xb4, 0x5a, 0x55, 0x14, 0x61, 0x0b, 0x5a, 0x57, + 0x80, 0x63, 0x79, 0xba, 0x50, 0x97, 0x14, 0x61, 0x0a, 0xd5, 0x57, 0x80, 0x63, 0x86, 0x21, 0x01, + 0x30, 0x14, 0x61, 0x09, 0x23, 0x57, 0x80, 0x63, 0x86, 0x25, 0x22, 0x0a, 0x14, 0x61, 0x09, 0x67, + 0x57, 0x80, 0x63, 0x8d, 0xa5, 0xcb, 0x5b, 0x14, 0x61, 0x09, 0x40, 0x57, 0x80, 0x63, 0x96, 0x68, + 0xce, 0xb8, 0x14, 0x61, 0x09, 0x23, 0x57, 0x80, 0x63, 0x9f, 0x0d, 0xee, 0xd7, 0x14, 0x61, 0x09, + 0x07, 0x57, 0x80, 0x63, 0xa2, 0x9a, 0x43, 0xbb, 0x14, 0x61, 0x08, 0x7a, 0x57, 0x80, 0x63, 0xa4, + 0xe2, 0xd6, 0x34, 0x14, 0x61, 0x08, 0x03, 0x57, 0x80, 0x63, 0xac, 0xc2, 0x21, 0x6a, 0x14, 0x61, + 0x07, 0x6c, 0x57, 0x80, 0x63, 0xb2, 0xa2, 0x5b, 0x52, 0x14, 0x61, 0x06, 0xb2, 0x57, 0x80, 0x63, + 0xb3, 0x92, 0xfb, 0xfb, 0x14, 0x61, 0x06, 0xad, 0x57, 0x80, 0x63, 0xb3, 0xab, 0x15, 0xfb, 0x14, + 0x61, 0x06, 0x11, 0x57, 0x80, 0x63, 0xb9, 0x61, 0x30, 0xa9, 0x14, 0x61, 0x03, 0xa2, 0x57, 0x80, + 0x63, 0xbd, 0x49, 0xc3, 0x5f, 0x14, 0x61, 0x03, 0x85, 0x57, 0x80, 0x63, 0xc0, 0x31, 0x02, 0xec, + 0x14, 0x61, 0x03, 0x68, 0x57, 0x80, 0x63, 0xc3, 0x54, 0xbd, 0x6e, 0x14, 0x61, 0x03, 0x46, 0x57, + 0x80, 0x63, 0xc4, 0x85, 0xa4, 0xd8, 0x14, 0x61, 0x02, 0xe1, 0x57, 0x80, 0x63, 0xce, 0x06, 0x17, + 0xec, 0x14, 0x61, 0x02, 0xbb, 0x57, 0x80, 0x63, 0xe3, 0x0c, 0x39, 0x78, 0x14, 0x61, 0x02, 0x93, + 0x57, 0x80, 0x63, 0xe7, 0xf4, 0x3c, 0x68, 0x14, 0x61, 0x02, 0x6b, 0x57, 0x80, 0x63, 0xef, 0x43, + 0xbd, 0x63, 0x14, 0x61, 0x02, 0x4a, 0x57, 0x63, 0xf2, 0xfd, 0xe3, 0x8b, 0x14, 0x61, 0x01, 0xd4, + 0x57, 0x5f, 0x80, 0xfd, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, + 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x61, 0x01, 0xed, 0x61, 0x10, 0xdb, 0x56, 0x5b, 0x61, 0x01, + 0xf5, 0x61, 0x17, 0x28, 0x56, 0x5b, 0x60, 0x01, 0x80, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x80, 0x6b, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0xa0, 0x1b, 0x60, + 0x01, 0x54, 0x16, 0x17, 0x60, 0x01, 0x55, 0x60, 0x01, 0x80, 0x60, 0xa0, 0x1b, 0x03, 0x5f, 0x54, + 0x16, 0x7f, 0x38, 0xd1, 0x6b, 0x8c, 0xac, 0x22, 0xd9, 0x9f, 0xc7, 0xc1, 0x24, 0xb9, 0xcd, 0x0d, + 0xe2, 0xd3, 0xfa, 0x1f, 0xae, 0xf4, 0x20, 0xbf, 0xe7, 0x91, 0xd8, 0xc3, 0x62, 0xd7, 0x65, 0xe2, + 0x27, 0x00, 0x5f, 0x80, 0xa3, 0x00, 0x5b, 0x5f, 0x80, 0xfd, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, + 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x65, 0x72, 0xba, + 0x30, 0x4f, 0x80, 0x00, 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, + 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x03, 0x54, 0x60, + 0x40, 0x51, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x90, 0x91, 0x16, 0x81, 0x52, 0x60, + 0x20, 0x90, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, + 0x61, 0x02, 0x46, 0x57, 0x60, 0x01, 0x54, 0x60, 0x40, 0x51, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, + 0x1b, 0x03, 0x90, 0x91, 0x16, 0x81, 0x52, 0x60, 0x20, 0x90, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, + 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x60, 0x01, + 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x60, 0x06, 0x54, 0x16, 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, + 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, + 0x02, 0x46, 0x57, 0x5f, 0x60, 0x20, 0x60, 0x40, 0x51, 0x61, 0x03, 0x01, 0x81, 0x61, 0x11, 0x20, + 0x56, 0x5b, 0x82, 0x81, 0x52, 0x01, 0x52, 0x60, 0x40, 0x61, 0x03, 0x13, 0x60, 0x04, 0x35, 0x61, + 0x11, 0x95, 0x56, 0x5b, 0x50, 0x81, 0x51, 0x61, 0x03, 0x1f, 0x81, 0x61, 0x11, 0x20, 0x56, 0x5b, + 0x60, 0x20, 0x60, 0x01, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x84, 0x54, 0x16, 0x93, + 0x84, 0x84, 0x52, 0x01, 0x54, 0x91, 0x01, 0x90, 0x81, 0x52, 0x82, 0x51, 0x91, 0x82, 0x52, 0x51, + 0x60, 0x20, 0x82, 0x01, 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, + 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x61, 0x03, 0x60, 0x61, 0x18, 0x43, 0x56, + 0x5b, 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, + 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x60, 0x07, 0x54, 0x60, 0x40, + 0x51, 0x90, 0x81, 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, + 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x60, 0x05, 0x54, 0x60, 0x40, 0x51, 0x90, 0x81, + 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, + 0x61, 0x02, 0x46, 0x57, 0x60, 0x04, 0x35, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x81, + 0x16, 0x80, 0x82, 0x03, 0x61, 0x02, 0x46, 0x57, 0x60, 0x02, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, + 0xa0, 0x1b, 0x03, 0x16, 0x33, 0x81, 0x90, 0x03, 0x61, 0x05, 0xfb, 0x57, 0x50, 0x60, 0x40, 0x51, + 0x63, 0x0b, 0xcf, 0xee, 0x3f, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, + 0x64, 0x01, 0x62, 0x5f, 0x20, 0x03, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, + 0x91, 0x61, 0x05, 0xcc, 0x57, 0x5b, 0x50, 0x61, 0x05, 0xbd, 0x57, 0x65, 0x72, 0xba, 0x30, 0x4f, + 0x80, 0x00, 0x80, 0x82, 0x11, 0x61, 0x05, 0xa7, 0x57, 0x50, 0x60, 0x06, 0x54, 0x90, 0x61, 0x04, + 0x31, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x83, 0x16, 0x93, 0x84, 0x61, 0x13, 0x6c, + 0x56, 0x5b, 0x91, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x83, 0x16, 0x91, 0x84, 0x83, + 0x11, 0x15, 0x61, 0x05, 0x91, 0x57, 0x50, 0x60, 0x40, 0x51, 0x63, 0x7e, 0x34, 0x5d, 0xef, 0x60, + 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, 0x00, + 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, 0x05, 0x72, 0x57, 0x5b, + 0x50, 0x60, 0x40, 0x51, 0x63, 0x4f, 0x0f, 0x2a, 0x39, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x90, 0x60, + 0x20, 0x82, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, 0x01, 0x5a, 0xfa, 0x91, 0x82, 0x15, + 0x61, 0x05, 0x67, 0x57, 0x5f, 0x92, 0x61, 0x05, 0x36, 0x57, 0x5b, 0x50, 0x60, 0x01, 0x60, 0x01, + 0x60, 0x40, 0x1b, 0x03, 0x61, 0x04, 0xad, 0x83, 0x83, 0x61, 0x13, 0x6c, 0x56, 0x5b, 0x16, 0x84, + 0x10, 0x61, 0x05, 0x0c, 0x57, 0x67, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x19, 0x83, + 0x16, 0x84, 0x17, 0x60, 0x06, 0x55, 0x60, 0x40, 0x80, 0x51, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, + 0x1b, 0x03, 0x80, 0x89, 0x16, 0x82, 0x52, 0x87, 0x16, 0x60, 0x20, 0x82, 0x01, 0x52, 0x30, 0x91, + 0x7f, 0x7e, 0x4f, 0x3c, 0xcb, 0x2c, 0x7c, 0xa7, 0x6e, 0xee, 0x66, 0x82, 0xc0, 0xe8, 0x6f, 0xef, + 0xbb, 0xd6, 0xfe, 0x24, 0xe4, 0xaf, 0x19, 0x38, 0x1a, 0x85, 0x4a, 0x14, 0xea, 0x09, 0x1b, 0xd9, + 0xaf, 0x91, 0x90, 0x81, 0x90, 0x81, 0x01, 0x5b, 0x03, 0x90, 0xa2, 0x00, 0x5b, 0x61, 0x05, 0x1f, + 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x92, 0x85, 0x92, 0x61, 0x13, 0x6c, 0x56, 0x5b, + 0x90, 0x63, 0x20, 0x41, 0x57, 0x89, 0x60, 0xe1, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x52, 0x16, 0x60, + 0x24, 0x52, 0x60, 0x44, 0x5f, 0xfd, 0x5b, 0x61, 0x05, 0x59, 0x91, 0x92, 0x50, 0x60, 0x20, 0x3d, + 0x60, 0x20, 0x11, 0x61, 0x05, 0x60, 0x57, 0x5b, 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, + 0x56, 0x5b, 0x81, 0x01, 0x90, 0x61, 0x11, 0xfb, 0x56, 0x5b, 0x90, 0x86, 0x61, 0x04, 0x9a, 0x56, + 0x5b, 0x50, 0x3d, 0x61, 0x05, 0x47, 0x56, 0x5b, 0x60, 0x40, 0x51, 0x3d, 0x5f, 0x82, 0x3e, 0x3d, + 0x90, 0xfd, 0x5b, 0x61, 0x05, 0x8b, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, + 0x60, 0x57, 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x85, 0x61, 0x04, 0x6f, + 0x56, 0x5b, 0x84, 0x63, 0x8a, 0x36, 0xf6, 0x43, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x52, + 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, 0xfd, 0x5b, 0x90, 0x63, 0x7e, 0xda, 0x69, 0x9b, 0x60, 0xe1, + 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x52, 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, 0xfd, 0x5b, 0x63, 0xb7, + 0xa1, 0x74, 0xcb, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x5f, 0xfd, 0x5b, 0x61, 0x05, 0xee, + 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, 0xf4, 0x57, 0x5b, 0x61, 0x05, 0xe6, + 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x81, 0x01, 0x90, 0x61, 0x11, 0x70, 0x56, 0x5b, 0x83, + 0x61, 0x04, 0x05, 0x56, 0x5b, 0x50, 0x3d, 0x61, 0x05, 0xdc, 0x56, 0x5b, 0x63, 0xe8, 0x37, 0xad, + 0xd9, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x33, 0x60, 0x04, 0x52, 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, + 0xfd, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, + 0x02, 0x46, 0x57, 0x61, 0x06, 0x2a, 0x61, 0x10, 0xdb, 0x56, 0x5b, 0x61, 0x06, 0x32, 0x61, 0x17, + 0x28, 0x56, 0x5b, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x81, 0x16, 0x90, 0x81, 0x15, + 0x61, 0x06, 0x9e, 0x57, 0x60, 0x03, 0x80, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, + 0x19, 0x81, 0x16, 0x90, 0x93, 0x17, 0x90, 0x55, 0x60, 0x40, 0x80, 0x51, 0x60, 0x01, 0x60, 0x01, + 0x60, 0xa0, 0x1b, 0x03, 0x93, 0x84, 0x16, 0x81, 0x52, 0x92, 0x90, 0x91, 0x16, 0x60, 0x20, 0x83, + 0x01, 0x52, 0x30, 0x91, 0x7f, 0x01, 0xc8, 0x73, 0x01, 0x22, 0xff, 0x73, 0x36, 0x96, 0x29, 0x94, + 0x0a, 0x52, 0x96, 0xf4, 0xe7, 0x10, 0x0e, 0xf1, 0x63, 0x17, 0xd9, 0x43, 0xfb, 0xbb, 0xfa, 0x1b, + 0x01, 0x93, 0xac, 0x35, 0xcb, 0x91, 0x81, 0x90, 0x81, 0x01, 0x61, 0x05, 0x07, 0x56, 0x5b, 0x63, + 0xd9, 0x2e, 0x23, 0x3d, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x5f, 0xfd, 0x5b, 0x61, 0x10, + 0xf1, 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, + 0x61, 0x02, 0x46, 0x57, 0x61, 0x06, 0xcb, 0x61, 0x10, 0xdb, 0x56, 0x5b, 0x60, 0x02, 0x54, 0x60, + 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x33, 0x81, 0x90, 0x03, 0x61, 0x05, 0xfb, 0x57, + 0x50, 0x60, 0x40, 0x51, 0x63, 0x0b, 0xcf, 0xee, 0x3f, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, + 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x20, 0x03, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, + 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, 0x07, 0x4d, 0x57, 0x5b, 0x50, 0x61, 0x05, 0xbd, 0x57, 0x61, + 0x07, 0x21, 0x60, 0x20, 0x91, 0x61, 0x07, 0x1c, 0x61, 0x16, 0x78, 0x56, 0x5b, 0x61, 0x17, 0xdf, + 0x56, 0x5b, 0x60, 0x01, 0x7f, 0x9b, 0x77, 0x9b, 0x17, 0x42, 0x2d, 0x0d, 0xf9, 0x22, 0x23, 0x01, + 0x8b, 0x32, 0xb4, 0xd1, 0xfa, 0x46, 0xe0, 0x71, 0x72, 0x3d, 0x68, 0x17, 0xe2, 0x48, 0x6d, 0x00, + 0x3b, 0xec, 0xc5, 0x5f, 0x00, 0x55, 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, 0xf3, 0x5b, 0x61, 0x07, + 0x66, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, 0xf4, 0x57, 0x61, 0x05, 0xe6, + 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x82, 0x61, 0x07, 0x09, 0x56, 0x5b, 0x34, 0x61, 0x02, + 0x46, 0x57, 0x60, 0x40, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x24, + 0x35, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x81, 0x16, 0x81, 0x03, 0x61, 0x02, 0x46, + 0x57, 0x60, 0x02, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x33, 0x81, 0x90, + 0x03, 0x61, 0x05, 0xfb, 0x57, 0x50, 0x60, 0x40, 0x51, 0x63, 0x0b, 0xcf, 0xee, 0x3f, 0x60, 0xe1, + 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x20, 0x03, 0x5a, + 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, 0x07, 0xe4, 0x57, 0x5b, 0x50, + 0x61, 0x05, 0xbd, 0x57, 0x61, 0x03, 0x60, 0x60, 0x20, 0x91, 0x61, 0x07, 0x1c, 0x60, 0x04, 0x35, + 0x61, 0x13, 0x8c, 0x56, 0x5b, 0x61, 0x07, 0xfd, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, + 0x61, 0x05, 0xf4, 0x57, 0x61, 0x05, 0xe6, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x82, 0x61, + 0x07, 0xce, 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, + 0x61, 0x02, 0x46, 0x57, 0x60, 0x40, 0x51, 0x63, 0x7e, 0x34, 0x5d, 0xef, 0x60, 0xe1, 0x1b, 0x81, + 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, 0x00, 0x5a, 0xfa, 0x80, + 0x15, 0x61, 0x05, 0x67, 0x57, 0x60, 0x20, 0x91, 0x5f, 0x91, 0x61, 0x08, 0x5d, 0x57, 0x5b, 0x50, + 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x60, 0x06, 0x54, 0x16, 0x60, 0x01, 0x60, 0x01, + 0x60, 0x40, 0x1b, 0x03, 0x60, 0x40, 0x51, 0x92, 0x16, 0x10, 0x81, 0x52, 0xf3, 0x5b, 0x61, 0x08, + 0x74, 0x91, 0x50, 0x82, 0x3d, 0x84, 0x11, 0x61, 0x05, 0x60, 0x57, 0x61, 0x05, 0x51, 0x81, 0x83, + 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x82, 0x61, 0x08, 0x3e, 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, + 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x61, 0x08, 0x93, 0x61, + 0x10, 0xdb, 0x56, 0x5b, 0x61, 0x08, 0x9b, 0x61, 0x17, 0x28, 0x56, 0x5b, 0x60, 0x01, 0x60, 0x01, + 0x60, 0xa0, 0x1b, 0x03, 0x81, 0x16, 0x90, 0x81, 0x15, 0x61, 0x06, 0x9e, 0x57, 0x60, 0x02, 0x80, + 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x19, 0x81, 0x16, 0x90, 0x93, 0x17, 0x90, + 0x55, 0x60, 0x40, 0x80, 0x51, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x93, 0x84, 0x16, + 0x81, 0x52, 0x92, 0x90, 0x91, 0x16, 0x60, 0x20, 0x83, 0x01, 0x52, 0x30, 0x91, 0x7f, 0x98, 0x39, + 0x26, 0x75, 0x67, 0x55, 0x1f, 0x9b, 0x01, 0x77, 0xb3, 0x29, 0x39, 0x43, 0x08, 0xfa, 0x17, 0xd5, + 0xb8, 0x54, 0x67, 0x60, 0x19, 0xa9, 0x62, 0x01, 0x02, 0x83, 0xcb, 0xa2, 0xc3, 0xd4, 0x91, 0x81, + 0x90, 0x81, 0x01, 0x61, 0x05, 0x07, 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, + 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x60, 0x40, 0x51, 0x61, 0x03, 0xe8, + 0x81, 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, + 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x60, 0x08, 0x54, 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, 0xf3, + 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, + 0x57, 0x5f, 0x54, 0x60, 0x40, 0x51, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x90, 0x91, + 0x16, 0x81, 0x52, 0x60, 0x20, 0x90, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, + 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, + 0x03, 0x16, 0x33, 0x03, 0x61, 0x0a, 0xc2, 0x57, 0x60, 0x40, 0x51, 0x63, 0x7e, 0x34, 0x5d, 0xef, + 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, + 0x00, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, 0x0a, 0xa3, 0x57, + 0x5b, 0x50, 0x60, 0x40, 0x51, 0x63, 0x4f, 0x0f, 0x2a, 0x39, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x90, + 0x60, 0x20, 0x82, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, 0x01, 0x5a, 0xfa, 0x90, 0x81, + 0x15, 0x61, 0x05, 0x67, 0x57, 0x61, 0x0a, 0x05, 0x92, 0x5f, 0x92, 0x61, 0x0a, 0x82, 0x57, 0x5b, + 0x50, 0x61, 0x13, 0x6c, 0x56, 0x5b, 0x60, 0x06, 0x54, 0x90, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, + 0x1b, 0x03, 0x82, 0x16, 0x91, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x82, 0x16, 0x91, + 0x83, 0x83, 0x11, 0x61, 0x0a, 0x28, 0x57, 0x00, 0x5b, 0x7f, 0x7e, 0x4f, 0x3c, 0xcb, 0x2c, 0x7c, + 0xa7, 0x6e, 0xee, 0x66, 0x82, 0xc0, 0xe8, 0x6f, 0xef, 0xbb, 0xd6, 0xfe, 0x24, 0xe4, 0xaf, 0x19, + 0x38, 0x1a, 0x85, 0x4a, 0x14, 0xea, 0x09, 0x1b, 0xd9, 0xaf, 0x92, 0x61, 0x05, 0x07, 0x92, 0x60, + 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x19, 0x16, 0x17, 0x60, 0x06, 0x55, 0x60, 0x40, 0x51, + 0x91, 0x82, 0x91, 0x30, 0x95, 0x83, 0x90, 0x92, 0x91, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, + 0x03, 0x60, 0x20, 0x91, 0x81, 0x60, 0x40, 0x85, 0x01, 0x96, 0x16, 0x84, 0x52, 0x16, 0x91, 0x01, + 0x52, 0x56, 0x5b, 0x61, 0x0a, 0x9c, 0x91, 0x92, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, + 0x05, 0x60, 0x57, 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x90, 0x83, 0x61, + 0x09, 0xff, 0x56, 0x5b, 0x61, 0x0a, 0xbc, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, + 0x05, 0x60, 0x57, 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x81, 0x61, 0x09, + 0xd0, 0x56, 0x5b, 0x63, 0xd3, 0x7c, 0xee, 0xfd, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x33, 0x60, 0x04, + 0x52, 0x60, 0x24, 0x5f, 0xfd, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, + 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x01, 0x54, 0x33, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, + 0x1b, 0x03, 0x90, 0x91, 0x16, 0x03, 0x61, 0x0b, 0x47, 0x57, 0x60, 0x01, 0x80, 0x54, 0x60, 0x01, + 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x19, 0x90, 0x81, 0x16, 0x90, 0x91, 0x55, 0x5f, 0x80, 0x54, + 0x33, 0x92, 0x81, 0x16, 0x83, 0x17, 0x82, 0x55, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, + 0x16, 0x90, 0x7f, 0x8b, 0xe0, 0x07, 0x9c, 0x53, 0x16, 0x59, 0x14, 0x13, 0x44, 0xcd, 0x1f, 0xd0, + 0xa4, 0xf2, 0x84, 0x19, 0x49, 0x7f, 0x97, 0x22, 0xa3, 0xda, 0xaf, 0xe3, 0xb4, 0x18, 0x6f, 0x6b, + 0x64, 0x57, 0xe0, 0x90, 0x80, 0xa3, 0x00, 0x5b, 0x63, 0x11, 0x8c, 0xda, 0xa7, 0x60, 0xe0, 0x1b, + 0x5f, 0x52, 0x33, 0x60, 0x04, 0x52, 0x60, 0x24, 0x5f, 0xfd, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, + 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x02, 0x54, 0x60, 0x40, + 0x51, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x90, 0x91, 0x16, 0x81, 0x52, 0x60, 0x20, + 0x90, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, + 0x02, 0x46, 0x57, 0x61, 0x0b, 0x9a, 0x61, 0x17, 0x28, 0x56, 0x5b, 0x60, 0x01, 0x80, 0x54, 0x60, + 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x19, 0x90, 0x81, 0x16, 0x90, 0x91, 0x55, 0x5f, 0x80, + 0x54, 0x91, 0x82, 0x16, 0x81, 0x55, 0x90, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, + 0x7f, 0x8b, 0xe0, 0x07, 0x9c, 0x53, 0x16, 0x59, 0x14, 0x13, 0x44, 0xcd, 0x1f, 0xd0, 0xa4, 0xf2, + 0x84, 0x19, 0x49, 0x7f, 0x97, 0x22, 0xa3, 0xda, 0xaf, 0xe3, 0xb4, 0x18, 0x6f, 0x6b, 0x64, 0x57, + 0xe0, 0x82, 0x80, 0xa3, 0x00, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, + 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x61, 0x03, 0x60, 0x61, 0x16, 0xd6, 0x56, 0x5b, + 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x02, 0x54, 0x60, 0x01, + 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x33, 0x81, 0x90, 0x03, 0x61, 0x05, 0xfb, 0x57, 0x60, + 0x40, 0x51, 0x63, 0x0b, 0xcf, 0xee, 0x3f, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, + 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x20, 0x03, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, + 0x57, 0x5f, 0x91, 0x61, 0x0d, 0xdc, 0x57, 0x5b, 0x50, 0x61, 0x05, 0xbd, 0x57, 0x34, 0x15, 0x61, + 0x0d, 0xcd, 0x57, 0x61, 0x0c, 0x5e, 0x34, 0x60, 0x05, 0x54, 0x61, 0x13, 0x5f, 0x56, 0x5b, 0x60, + 0x05, 0x55, 0x60, 0x40, 0x51, 0x63, 0x7e, 0x34, 0x5d, 0xef, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, + 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, 0x00, 0x5a, 0xfa, 0x90, 0x81, 0x15, + 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, 0x0d, 0xae, 0x57, 0x5b, 0x50, 0x60, 0x40, 0x51, 0x63, + 0x4f, 0x0f, 0x2a, 0x39, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, + 0x01, 0x62, 0x5f, 0x10, 0x01, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, + 0x61, 0x0d, 0x8f, 0x57, 0x5b, 0x50, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x81, 0x16, + 0x91, 0x82, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x03, 0x60, 0x01, 0x60, 0x01, 0x60, + 0x40, 0x1b, 0x03, 0x81, 0x11, 0x61, 0x0d, 0x7b, 0x57, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, + 0x03, 0x16, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x82, 0x16, 0x11, 0x61, 0x0d, 0x5d, + 0x57, 0x61, 0x0c, 0xfa, 0x92, 0x50, 0x61, 0x13, 0x6c, 0x56, 0x5b, 0x60, 0x01, 0x60, 0x01, 0x60, + 0x40, 0x1b, 0x03, 0x60, 0x06, 0x54, 0x91, 0x16, 0x90, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, + 0x03, 0x81, 0x16, 0x82, 0x11, 0x61, 0x0d, 0x47, 0x57, 0x5b, 0x60, 0x40, 0x51, 0x34, 0x81, 0x52, + 0x7f, 0x7c, 0x71, 0x79, 0x85, 0xac, 0x27, 0x3e, 0x66, 0x3b, 0x7f, 0x30, 0x50, 0xf5, 0xb1, 0x5a, + 0x43, 0x88, 0xff, 0x6e, 0xd9, 0x52, 0x33, 0x89, 0x54, 0xf6, 0x50, 0xe2, 0x09, 0x3e, 0x13, 0x93, + 0x7f, 0x60, 0x20, 0x30, 0x92, 0xa2, 0x00, 0x5b, 0x67, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x19, 0x16, 0x17, 0x60, 0x06, 0x55, 0x80, 0x80, 0x61, 0x0d, 0x19, 0x56, 0x5b, 0x82, 0x65, + 0x72, 0xba, 0x30, 0x4f, 0x80, 0x00, 0x90, 0x63, 0x7e, 0xda, 0x69, 0x9b, 0x60, 0xe1, 0x1b, 0x5f, + 0x52, 0x60, 0x04, 0x52, 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, 0xfd, 0x5b, 0x63, 0x4e, 0x48, 0x7b, + 0x71, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x11, 0x60, 0x04, 0x52, 0x60, 0x24, 0x5f, 0xfd, 0x5b, + 0x61, 0x0d, 0xa8, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, 0x60, 0x57, 0x61, + 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x82, 0x61, 0x0c, 0xb4, 0x56, 0x5b, 0x61, + 0x0d, 0xc7, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, 0x60, 0x57, 0x61, 0x05, + 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x81, 0x61, 0x0c, 0x8a, 0x56, 0x5b, 0x63, 0x1f, + 0x2a, 0x20, 0x05, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x5f, 0xfd, 0x5b, 0x61, 0x0d, 0xf5, + 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, 0xf4, 0x57, 0x61, 0x05, 0xe6, 0x81, + 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x81, 0x61, 0x0c, 0x47, 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, + 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x61, 0x0e, 0x14, + 0x61, 0x10, 0xdb, 0x56, 0x5b, 0x61, 0x0e, 0x1c, 0x61, 0x17, 0x28, 0x56, 0x5b, 0x60, 0x01, 0x60, + 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x81, 0x16, 0x90, 0x81, 0x15, 0x61, 0x06, 0x9e, 0x57, 0x60, 0x04, + 0x80, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x19, 0x81, 0x16, 0x90, 0x93, 0x17, + 0x90, 0x55, 0x60, 0x40, 0x80, 0x51, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x93, 0x84, + 0x16, 0x81, 0x52, 0x92, 0x90, 0x91, 0x16, 0x60, 0x20, 0x83, 0x01, 0x52, 0x30, 0x91, 0x7f, 0x92, + 0x68, 0xb9, 0x72, 0x6f, 0x38, 0x82, 0x49, 0x65, 0x64, 0x9b, 0xfc, 0xf3, 0xb0, 0xd3, 0x2f, 0xf5, + 0x08, 0x16, 0x21, 0x6b, 0xf7, 0xcd, 0xbd, 0x57, 0xab, 0xc3, 0xcc, 0x8c, 0x5d, 0xab, 0x12, 0x91, + 0x81, 0x90, 0x81, 0x01, 0x61, 0x05, 0x07, 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, + 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x40, 0x51, 0x63, 0x7e, 0x34, 0x5d, + 0xef, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, + 0x10, 0x00, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, 0x0f, 0x32, + 0x57, 0x5b, 0x50, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x60, 0x40, 0x51, 0x91, 0x63, + 0x51, 0xcb, 0x86, 0xcd, 0x60, 0xe0, 0x1b, 0x83, 0x52, 0x16, 0x60, 0x04, 0x82, 0x01, 0x52, 0x60, + 0x20, 0x81, 0x60, 0x24, 0x81, 0x30, 0x5a, 0xfa, 0x80, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x90, + 0x61, 0x0e, 0xff, 0x57, 0x5b, 0x60, 0x20, 0x90, 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, 0xf3, 0x5b, + 0x50, 0x60, 0x20, 0x81, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x0f, 0x2a, 0x57, 0x5b, 0x81, 0x61, 0x0f, + 0x19, 0x60, 0x20, 0x93, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x81, 0x01, 0x03, 0x12, 0x61, 0x02, + 0x46, 0x57, 0x60, 0x20, 0x90, 0x51, 0x61, 0x0e, 0xf4, 0x56, 0x5b, 0x3d, 0x91, 0x50, 0x61, 0x0f, + 0x0c, 0x56, 0x5b, 0x61, 0x0f, 0x4b, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, + 0x60, 0x57, 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x81, 0x61, 0x0e, 0xc1, + 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, + 0x46, 0x57, 0x60, 0x04, 0x54, 0x60, 0x40, 0x51, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, + 0x90, 0x91, 0x16, 0x81, 0x52, 0x60, 0x20, 0x90, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x60, + 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x61, 0x0f, 0x92, 0x61, 0x10, + 0xdb, 0x56, 0x5b, 0x60, 0x02, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x33, + 0x81, 0x90, 0x03, 0x61, 0x05, 0xfb, 0x57, 0x60, 0x20, 0x61, 0x07, 0x21, 0x83, 0x61, 0x0f, 0xb4, + 0x61, 0x16, 0x78, 0x56, 0x5b, 0x61, 0x12, 0xed, 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, + 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x61, 0x0f, 0xd3, 0x61, + 0x12, 0x3a, 0x56, 0x5b, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x60, 0x40, 0x51, 0x91, + 0x16, 0x81, 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, + 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x61, 0x03, 0x60, 0x61, 0x11, 0xc5, 0x56, 0x5b, 0x34, + 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, + 0x60, 0x02, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x33, 0x81, 0x90, 0x03, + 0x61, 0x05, 0xfb, 0x57, 0x60, 0x40, 0x51, 0x63, 0x0b, 0xcf, 0xee, 0x3f, 0x60, 0xe1, 0x1b, 0x81, + 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x20, 0x03, 0x5a, 0xfa, 0x90, + 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, 0x10, 0x5e, 0x57, 0x5b, 0x50, 0x61, 0x05, + 0xbd, 0x57, 0x61, 0x10, 0x5c, 0x60, 0x04, 0x35, 0x61, 0x13, 0x8c, 0x56, 0x5b, 0x00, 0x5b, 0x61, + 0x10, 0x77, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, 0xf4, 0x57, 0x61, 0x05, + 0xe6, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x81, 0x61, 0x10, 0x4c, 0x56, 0x5b, 0x34, 0x61, + 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x40, + 0x51, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x81, 0x52, 0x60, 0x20, 0x90, + 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, + 0x46, 0x57, 0x60, 0x20, 0x90, 0x60, 0x05, 0x54, 0x81, 0x52, 0xf3, 0x5b, 0x60, 0x04, 0x35, 0x90, + 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x82, 0x16, 0x82, 0x03, 0x61, 0x02, 0x46, 0x57, + 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, + 0x02, 0x46, 0x57, 0x60, 0x04, 0x35, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x81, 0x16, + 0x81, 0x03, 0x61, 0x02, 0x46, 0x57, 0x61, 0x03, 0x60, 0x60, 0x20, 0x91, 0x61, 0x17, 0x3b, 0x56, + 0x5b, 0x60, 0x40, 0x81, 0x01, 0x90, 0x81, 0x10, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, + 0x82, 0x11, 0x17, 0x61, 0x11, 0x3b, 0x57, 0x60, 0x40, 0x52, 0x56, 0x5b, 0x63, 0x4e, 0x48, 0x7b, + 0x71, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x41, 0x60, 0x04, 0x52, 0x60, 0x24, 0x5f, 0xfd, 0x5b, + 0x90, 0x60, 0x1f, 0x80, 0x19, 0x91, 0x01, 0x16, 0x81, 0x01, 0x90, 0x81, 0x10, 0x60, 0x01, 0x60, + 0x01, 0x60, 0x40, 0x1b, 0x03, 0x82, 0x11, 0x17, 0x61, 0x11, 0x3b, 0x57, 0x60, 0x40, 0x52, 0x56, + 0x5b, 0x90, 0x81, 0x60, 0x20, 0x91, 0x03, 0x12, 0x61, 0x02, 0x46, 0x57, 0x51, 0x80, 0x15, 0x15, + 0x81, 0x03, 0x61, 0x02, 0x46, 0x57, 0x90, 0x56, 0x5b, 0x91, 0x90, 0x82, 0x03, 0x91, 0x82, 0x11, + 0x61, 0x0d, 0x7b, 0x57, 0x56, 0x5b, 0x60, 0x07, 0x54, 0x81, 0x10, 0x15, 0x61, 0x11, 0xb1, 0x57, + 0x60, 0x07, 0x5f, 0x52, 0x60, 0x20, 0x5f, 0x20, 0x90, 0x60, 0x01, 0x1b, 0x01, 0x90, 0x5f, 0x90, + 0x56, 0x5b, 0x63, 0x4e, 0x48, 0x7b, 0x71, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x32, 0x60, 0x04, + 0x52, 0x60, 0x24, 0x5f, 0xfd, 0x5b, 0x60, 0x07, 0x54, 0x80, 0x15, 0x61, 0x11, 0xf6, 0x57, 0x5f, + 0x19, 0x81, 0x01, 0x90, 0x81, 0x11, 0x61, 0x0d, 0x7b, 0x57, 0x60, 0x01, 0x61, 0x11, 0xe7, 0x61, + 0x11, 0xf3, 0x92, 0x61, 0x11, 0x95, 0x56, 0x5b, 0x50, 0x01, 0x54, 0x60, 0x08, 0x54, 0x90, 0x61, + 0x11, 0x88, 0x56, 0x5b, 0x90, 0x56, 0x5b, 0x50, 0x5f, 0x90, 0x56, 0x5b, 0x90, 0x81, 0x60, 0x20, + 0x91, 0x03, 0x12, 0x61, 0x02, 0x46, 0x57, 0x51, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, + 0x81, 0x16, 0x81, 0x03, 0x61, 0x02, 0x46, 0x57, 0x90, 0x56, 0x5b, 0x90, 0x60, 0x01, 0x60, 0x01, + 0x60, 0x40, 0x1b, 0x03, 0x80, 0x91, 0x16, 0x91, 0x16, 0x03, 0x90, 0x60, 0x01, 0x60, 0x01, 0x60, + 0x40, 0x1b, 0x03, 0x82, 0x11, 0x61, 0x0d, 0x7b, 0x57, 0x56, 0x5b, 0x60, 0x40, 0x51, 0x63, 0x7e, + 0x34, 0x5d, 0xef, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, + 0x62, 0x5f, 0x10, 0x00, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, + 0x12, 0x90, 0x57, 0x5b, 0x50, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x60, 0x06, 0x54, + 0x16, 0x90, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x81, 0x16, 0x82, 0x11, 0x61, 0x12, + 0x87, 0x57, 0x50, 0x50, 0x5f, 0x90, 0x56, 0x5b, 0x61, 0x11, 0xf3, 0x91, 0x61, 0x12, 0x1a, 0x56, + 0x5b, 0x61, 0x12, 0xa9, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, 0x60, 0x57, + 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x5f, 0x61, 0x12, 0x63, 0x56, 0x5b, + 0x3d, 0x15, 0x61, 0x12, 0xe8, 0x57, 0x3d, 0x90, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, + 0x82, 0x11, 0x61, 0x11, 0x3b, 0x57, 0x60, 0x40, 0x51, 0x91, 0x61, 0x12, 0xdd, 0x60, 0x1f, 0x82, + 0x01, 0x60, 0x1f, 0x19, 0x16, 0x60, 0x20, 0x01, 0x84, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x82, 0x52, + 0x3d, 0x5f, 0x60, 0x20, 0x84, 0x01, 0x3e, 0x56, 0x5b, 0x60, 0x60, 0x90, 0x56, 0x5b, 0x90, 0x61, + 0x12, 0xf6, 0x61, 0x16, 0xd6, 0x56, 0x5b, 0x91, 0x82, 0x15, 0x61, 0x13, 0x59, 0x57, 0x5f, 0x80, + 0x80, 0x85, 0x81, 0x94, 0x60, 0x01, 0x80, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x80, 0x60, 0x40, 0x51, + 0x83, 0x81, 0x52, 0x7f, 0x52, 0x02, 0xb7, 0x90, 0xbb, 0xfc, 0x60, 0xcd, 0xee, 0xc9, 0x26, 0x3f, + 0xb3, 0x5a, 0x33, 0x8a, 0xc1, 0xcd, 0xf6, 0x79, 0x8a, 0xb4, 0x16, 0x3b, 0xfc, 0xed, 0x25, 0x51, + 0x75, 0x9a, 0x74, 0xa9, 0x60, 0x20, 0x30, 0x92, 0xa3, 0x5a, 0xf1, 0x61, 0x13, 0x42, 0x61, 0x12, + 0xaf, 0x56, 0x5b, 0x50, 0x15, 0x61, 0x13, 0x4a, 0x57, 0x56, 0x5b, 0x63, 0x12, 0x17, 0x1d, 0x83, + 0x60, 0xe3, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x5f, 0xfd, 0x5b, 0x50, 0x5f, 0x91, 0x50, 0x56, 0x5b, + 0x91, 0x90, 0x82, 0x01, 0x80, 0x92, 0x11, 0x61, 0x0d, 0x7b, 0x57, 0x56, 0x5b, 0x90, 0x60, 0x01, + 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x80, 0x91, 0x16, 0x91, 0x16, 0x01, 0x90, 0x60, 0x01, 0x60, + 0x01, 0x60, 0x40, 0x1b, 0x03, 0x82, 0x11, 0x61, 0x0d, 0x7b, 0x57, 0x56, 0x5b, 0x80, 0x15, 0x61, + 0x0d, 0xcd, 0x57, 0x60, 0x05, 0x54, 0x80, 0x82, 0x11, 0x61, 0x16, 0x62, 0x57, 0x60, 0x40, 0x51, + 0x63, 0xfa, 0xcd, 0x74, 0x3b, 0x60, 0xe0, 0x1b, 0x81, 0x52, 0x30, 0x60, 0x04, 0x82, 0x01, 0x52, + 0x60, 0x20, 0x81, 0x60, 0x24, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x20, 0x01, 0x5a, 0xfa, 0x80, 0x15, + 0x61, 0x05, 0x67, 0x57, 0x83, 0x91, 0x5f, 0x91, 0x61, 0x16, 0x43, 0x57, 0x5b, 0x50, 0x61, 0x15, + 0x08, 0x57, 0x5b, 0x61, 0x13, 0xdb, 0x91, 0x61, 0x11, 0x88, 0x56, 0x5b, 0x60, 0x05, 0x55, 0x60, + 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x60, 0x06, 0x54, 0x16, 0x60, 0x07, 0x54, 0x80, 0x15, + 0x5f, 0x14, 0x61, 0x14, 0x52, 0x57, 0x50, 0x60, 0x40, 0x51, 0x61, 0x14, 0x13, 0x91, 0x61, 0x14, + 0x06, 0x82, 0x61, 0x11, 0x20, 0x56, 0x5b, 0x81, 0x52, 0x82, 0x60, 0x20, 0x82, 0x01, 0x52, 0x61, + 0x19, 0x24, 0x56, 0x5b, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x60, 0x06, 0x54, 0x16, + 0x60, 0x40, 0x51, 0x91, 0x82, 0x52, 0x60, 0x20, 0x82, 0x01, 0x52, 0x7f, 0x53, 0x6c, 0x53, 0xe1, + 0x1d, 0xb8, 0x10, 0x5c, 0x78, 0x7d, 0x8d, 0x5f, 0xce, 0x8b, 0x01, 0xf6, 0x89, 0xae, 0xfd, 0x57, + 0x77, 0x1d, 0xad, 0x0d, 0x0c, 0x62, 0xc3, 0x3a, 0xf2, 0xec, 0xc1, 0xf9, 0x60, 0x40, 0x30, 0x92, + 0xa2, 0x56, 0x5b, 0x5f, 0x19, 0x81, 0x01, 0x81, 0x81, 0x11, 0x61, 0x0d, 0x7b, 0x57, 0x61, 0x14, + 0x66, 0x90, 0x61, 0x11, 0x95, 0x56, 0x5b, 0x50, 0x90, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, + 0x03, 0x82, 0x54, 0x16, 0x83, 0x81, 0x14, 0x5f, 0x14, 0x61, 0x14, 0x95, 0x57, 0x50, 0x50, 0x60, + 0x01, 0x91, 0x50, 0x01, 0x61, 0x14, 0x8e, 0x82, 0x82, 0x54, 0x61, 0x13, 0x5f, 0x56, 0x5b, 0x90, + 0x55, 0x61, 0x14, 0x13, 0x56, 0x5b, 0x83, 0x81, 0x10, 0x15, 0x61, 0x14, 0xf1, 0x57, 0x50, 0x61, + 0x03, 0xe8, 0x81, 0x10, 0x15, 0x61, 0x14, 0xd9, 0x57, 0x50, 0x90, 0x61, 0x14, 0xbb, 0x83, 0x60, + 0x01, 0x61, 0x14, 0xd4, 0x94, 0x01, 0x54, 0x61, 0x13, 0x5f, 0x56, 0x5b, 0x60, 0x40, 0x51, 0x91, + 0x61, 0x14, 0xc8, 0x83, 0x61, 0x11, 0x20, 0x56, 0x5b, 0x82, 0x52, 0x60, 0x20, 0x82, 0x01, 0x52, + 0x61, 0x19, 0x24, 0x56, 0x5b, 0x61, 0x14, 0x13, 0x56, 0x5b, 0x63, 0x49, 0x38, 0x45, 0xf7, 0x60, + 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x52, 0x61, 0x03, 0xe8, 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, + 0xfd, 0x5b, 0x83, 0x90, 0x63, 0x50, 0x57, 0x9b, 0x29, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x04, + 0x52, 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, 0xfd, 0x5b, 0x50, 0x60, 0x40, 0x51, 0x63, 0xa3, 0x10, + 0x62, 0x4f, 0x60, 0xe0, 0x1b, 0x81, 0x52, 0x30, 0x60, 0x04, 0x82, 0x01, 0x52, 0x60, 0x20, 0x81, + 0x60, 0x24, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x20, 0x01, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, + 0x67, 0x57, 0x5f, 0x91, 0x61, 0x16, 0x08, 0x57, 0x5b, 0x50, 0x60, 0x04, 0x81, 0x10, 0x15, 0x61, + 0x15, 0xf4, 0x57, 0x80, 0x60, 0x02, 0x84, 0x92, 0x14, 0x90, 0x81, 0x15, 0x61, 0x15, 0xe9, 0x57, + 0x5b, 0x50, 0x15, 0x61, 0x13, 0xd2, 0x57, 0x50, 0x60, 0x40, 0x51, 0x63, 0xaa, 0x75, 0x17, 0xe1, + 0x60, 0xe0, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, + 0x02, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, 0x15, 0xb7, 0x57, + 0x5b, 0x50, 0x80, 0x61, 0x15, 0x8c, 0x84, 0x84, 0x61, 0x11, 0x88, 0x56, 0x5b, 0x10, 0x61, 0x15, + 0x98, 0x57, 0x50, 0x81, 0x61, 0x13, 0xd2, 0x56, 0x5b, 0x91, 0x61, 0x15, 0xa2, 0x91, 0x61, 0x11, + 0x88, 0x56, 0x5b, 0x63, 0x03, 0x98, 0xe3, 0xfb, 0x60, 0xe1, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x52, + 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, 0xfd, 0x5b, 0x90, 0x50, 0x60, 0x20, 0x81, 0x3d, 0x60, 0x20, + 0x11, 0x61, 0x15, 0xe1, 0x57, 0x5b, 0x81, 0x61, 0x15, 0xd2, 0x60, 0x20, 0x93, 0x83, 0x61, 0x11, + 0x4f, 0x56, 0x5b, 0x81, 0x01, 0x03, 0x12, 0x61, 0x02, 0x46, 0x57, 0x51, 0x5f, 0x61, 0x15, 0x80, + 0x56, 0x5b, 0x3d, 0x91, 0x50, 0x61, 0x15, 0xc5, 0x56, 0x5b, 0x60, 0x03, 0x91, 0x50, 0x14, 0x5f, + 0x61, 0x15, 0x50, 0x56, 0x5b, 0x63, 0x4e, 0x48, 0x7b, 0x71, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, + 0x21, 0x60, 0x04, 0x52, 0x60, 0x24, 0x5f, 0xfd, 0x5b, 0x90, 0x50, 0x60, 0x20, 0x81, 0x3d, 0x60, + 0x20, 0x11, 0x61, 0x16, 0x3b, 0x57, 0x5b, 0x81, 0x61, 0x16, 0x23, 0x60, 0x20, 0x93, 0x83, 0x61, + 0x11, 0x4f, 0x56, 0x5b, 0x81, 0x01, 0x03, 0x12, 0x61, 0x02, 0x46, 0x57, 0x51, 0x60, 0x04, 0x81, + 0x10, 0x15, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x61, 0x15, 0x38, 0x56, 0x5b, 0x3d, 0x91, 0x50, 0x61, + 0x16, 0x16, 0x56, 0x5b, 0x61, 0x16, 0x5c, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, + 0x05, 0xf4, 0x57, 0x61, 0x05, 0xe6, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x5f, 0x61, 0x13, + 0xcc, 0x56, 0x5b, 0x90, 0x63, 0x50, 0x3a, 0x9f, 0xa3, 0x60, 0xe1, 0x1b, 0x5f, 0x52, 0x60, 0x04, + 0x52, 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, 0xfd, 0x5b, 0x60, 0x02, 0x7f, 0x9b, 0x77, 0x9b, 0x17, + 0x42, 0x2d, 0x0d, 0xf9, 0x22, 0x23, 0x01, 0x8b, 0x32, 0xb4, 0xd1, 0xfa, 0x46, 0xe0, 0x71, 0x72, + 0x3d, 0x68, 0x17, 0xe2, 0x48, 0x6d, 0x00, 0x3b, 0xec, 0xc5, 0x5f, 0x00, 0x54, 0x14, 0x61, 0x16, + 0xc7, 0x57, 0x60, 0x02, 0x7f, 0x9b, 0x77, 0x9b, 0x17, 0x42, 0x2d, 0x0d, 0xf9, 0x22, 0x23, 0x01, + 0x8b, 0x32, 0xb4, 0xd1, 0xfa, 0x46, 0xe0, 0x71, 0x72, 0x3d, 0x68, 0x17, 0xe2, 0x48, 0x6d, 0x00, + 0x3b, 0xec, 0xc5, 0x5f, 0x00, 0x55, 0x56, 0x5b, 0x63, 0x3e, 0xe5, 0xae, 0xb5, 0x60, 0xe0, 0x1b, + 0x5f, 0x52, 0x60, 0x04, 0x5f, 0xfd, 0x5b, 0x60, 0x07, 0x54, 0x5f, 0x81, 0x61, 0x17, 0x06, 0x57, + 0x5b, 0x61, 0x16, 0xed, 0x91, 0x50, 0x60, 0x05, 0x54, 0x61, 0x13, 0x5f, 0x56, 0x5b, 0x47, 0x90, + 0x80, 0x82, 0x11, 0x15, 0x61, 0x17, 0x00, 0x57, 0x61, 0x11, 0xf3, 0x91, 0x61, 0x11, 0x88, 0x56, + 0x5b, 0x50, 0x50, 0x5f, 0x90, 0x56, 0x5b, 0x50, 0x5f, 0x19, 0x81, 0x01, 0x90, 0x81, 0x11, 0x61, + 0x0d, 0x7b, 0x57, 0x61, 0x17, 0x23, 0x60, 0x01, 0x61, 0x11, 0xe7, 0x61, 0x16, 0xed, 0x93, 0x61, + 0x11, 0x95, 0x56, 0x5b, 0x61, 0x16, 0xe0, 0x56, 0x5b, 0x5f, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, + 0xa0, 0x1b, 0x03, 0x16, 0x33, 0x03, 0x61, 0x0b, 0x47, 0x57, 0x56, 0x5b, 0x60, 0x06, 0x54, 0x60, + 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x90, 0x81, 0x16, 0x90, 0x82, 0x16, 0x11, 0x61, 0x17, + 0xd5, 0x57, 0x61, 0x17, 0x5d, 0x60, 0x05, 0x54, 0x91, 0x61, 0x19, 0x9b, 0x56, 0x5b, 0x60, 0x08, + 0x54, 0x90, 0x81, 0x80, 0x82, 0x11, 0x61, 0x17, 0xc6, 0x57, 0x50, 0x50, 0x5f, 0x90, 0x5b, 0x60, + 0x07, 0x54, 0x5f, 0x91, 0x81, 0x61, 0x17, 0x9c, 0x57, 0x5b, 0x50, 0x50, 0x80, 0x82, 0x10, 0x15, + 0x61, 0x17, 0x97, 0x57, 0x61, 0x11, 0xf3, 0x92, 0x91, 0x61, 0x17, 0x91, 0x91, 0x61, 0x11, 0x88, + 0x56, 0x5b, 0x90, 0x61, 0x13, 0x5f, 0x56, 0x5b, 0x50, 0x50, 0x90, 0x56, 0x5b, 0x5f, 0x19, 0x82, + 0x01, 0x92, 0x50, 0x90, 0x82, 0x11, 0x61, 0x0d, 0x7b, 0x57, 0x60, 0x01, 0x61, 0x17, 0xb7, 0x61, + 0x17, 0xbf, 0x93, 0x61, 0x11, 0x95, 0x56, 0x5b, 0x50, 0x01, 0x54, 0x61, 0x11, 0x88, 0x56, 0x5b, + 0x5f, 0x80, 0x61, 0x17, 0x79, 0x56, 0x5b, 0x61, 0x17, 0xcf, 0x91, 0x61, 0x11, 0x88, 0x56, 0x5b, + 0x90, 0x61, 0x17, 0x6e, 0x56, 0x5b, 0x61, 0x17, 0x5d, 0x5f, 0x91, 0x61, 0x19, 0x9b, 0x56, 0x5b, + 0x90, 0x61, 0x17, 0xe8, 0x61, 0x18, 0x43, 0x56, 0x5b, 0x91, 0x82, 0x15, 0x61, 0x13, 0x59, 0x57, + 0x5f, 0x80, 0x80, 0x85, 0x81, 0x94, 0x61, 0x18, 0x01, 0x82, 0x60, 0x08, 0x54, 0x61, 0x13, 0x5f, + 0x56, 0x5b, 0x60, 0x08, 0x55, 0x60, 0x01, 0x80, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x80, 0x60, 0x40, + 0x51, 0x83, 0x81, 0x52, 0x7f, 0xd0, 0xd8, 0x95, 0x37, 0xda, 0xf7, 0xd9, 0xf2, 0xb5, 0xb2, 0x31, + 0x5d, 0x3a, 0xf4, 0x7f, 0x1f, 0xe0, 0x44, 0x19, 0x96, 0x62, 0x47, 0xff, 0xb9, 0x63, 0xb1, 0xfa, + 0x5b, 0x07, 0x7c, 0x06, 0x36, 0x60, 0x20, 0x30, 0x92, 0xa3, 0x5a, 0xf1, 0x61, 0x13, 0x42, 0x61, + 0x12, 0xaf, 0x56, 0x5b, 0x60, 0x07, 0x54, 0x15, 0x61, 0x19, 0x20, 0x57, 0x60, 0x40, 0x51, 0x63, + 0x7e, 0x34, 0x5d, 0xef, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, + 0x01, 0x62, 0x5f, 0x10, 0x00, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, + 0x61, 0x19, 0x01, 0x57, 0x5b, 0x50, 0x60, 0x40, 0x51, 0x63, 0xd8, 0xf0, 0x8a, 0xb5, 0x60, 0xe0, + 0x1b, 0x81, 0x52, 0x90, 0x60, 0x20, 0x82, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, 0x01, + 0x5a, 0xfa, 0x91, 0x82, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x92, 0x61, 0x18, 0xe0, 0x57, 0x5b, + 0x50, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x82, 0x16, 0x60, 0x01, 0x60, 0x01, 0x60, + 0x40, 0x1b, 0x03, 0x82, 0x16, 0x11, 0x15, 0x61, 0x17, 0x00, 0x57, 0x61, 0x18, 0xcc, 0x91, 0x61, + 0x18, 0xc7, 0x91, 0x61, 0x12, 0x1a, 0x56, 0x5b, 0x61, 0x19, 0x9b, 0x56, 0x5b, 0x60, 0x08, 0x54, + 0x80, 0x82, 0x11, 0x15, 0x61, 0x17, 0x00, 0x57, 0x61, 0x11, 0xf3, 0x91, 0x61, 0x11, 0x88, 0x56, + 0x5b, 0x61, 0x18, 0xfa, 0x91, 0x92, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, 0x60, + 0x57, 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x90, 0x5f, 0x61, 0x18, 0x9f, + 0x56, 0x5b, 0x61, 0x19, 0x1a, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, 0x60, + 0x57, 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x5f, 0x61, 0x18, 0x74, 0x56, + 0x5b, 0x5f, 0x90, 0x56, 0x5b, 0x60, 0x07, 0x54, 0x68, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x81, 0x10, 0x15, 0x61, 0x11, 0x3b, 0x57, 0x60, 0x01, 0x81, 0x01, 0x60, 0x07, 0x55, + 0x60, 0x07, 0x54, 0x81, 0x10, 0x15, 0x61, 0x11, 0xb1, 0x57, 0x60, 0x07, 0x5f, 0x52, 0x60, 0x01, + 0x1b, 0x7f, 0xa6, 0x6c, 0xc9, 0x28, 0xb5, 0xed, 0xb8, 0x2a, 0xf9, 0xbd, 0x49, 0x92, 0x29, 0x54, + 0x15, 0x5a, 0xb7, 0xb0, 0x94, 0x26, 0x94, 0xbe, 0xa4, 0xce, 0x44, 0x66, 0x1d, 0x9a, 0x87, 0x36, + 0xc6, 0x88, 0x01, 0x90, 0x60, 0x20, 0x81, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x80, + 0x60, 0x01, 0x94, 0x51, 0x16, 0x16, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x19, 0x85, + 0x54, 0x16, 0x17, 0x84, 0x55, 0x01, 0x51, 0x91, 0x01, 0x55, 0x56, 0x5b, 0x60, 0x07, 0x54, 0x80, + 0x15, 0x61, 0x17, 0x00, 0x57, 0x60, 0x07, 0x54, 0x15, 0x61, 0x11, 0xb1, 0x57, 0x60, 0x07, 0x5f, + 0x52, 0x7f, 0xa6, 0x6c, 0xc9, 0x28, 0xb5, 0xed, 0xb8, 0x2a, 0xf9, 0xbd, 0x49, 0x92, 0x29, 0x54, + 0x15, 0x5a, 0xb7, 0xb0, 0x94, 0x26, 0x94, 0xbe, 0xa4, 0xce, 0x44, 0x66, 0x1d, 0x9a, 0x87, 0x36, + 0xc6, 0x88, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x92, 0x83, 0x16, 0x92, 0x16, + 0x82, 0x11, 0x15, 0x61, 0x17, 0x00, 0x57, 0x5f, 0x19, 0x81, 0x01, 0x90, 0x81, 0x11, 0x90, 0x81, + 0x61, 0x0d, 0x7b, 0x57, 0x82, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x61, 0x1a, 0x05, + 0x83, 0x61, 0x11, 0x95, 0x56, 0x5b, 0x50, 0x54, 0x16, 0x10, 0x61, 0x1a, 0x5e, 0x57, 0x5f, 0x91, + 0x61, 0x0d, 0x7b, 0x57, 0x90, 0x5b, 0x60, 0x01, 0x81, 0x01, 0x80, 0x82, 0x11, 0x61, 0x0d, 0x7b, + 0x57, 0x82, 0x11, 0x15, 0x61, 0x1a, 0x5e, 0x57, 0x61, 0x1a, 0x31, 0x82, 0x82, 0x61, 0x13, 0x5f, + 0x56, 0x5b, 0x60, 0x01, 0x1c, 0x90, 0x83, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x61, + 0x1a, 0x47, 0x84, 0x61, 0x11, 0x95, 0x56, 0x5b, 0x50, 0x54, 0x16, 0x10, 0x15, 0x61, 0x1a, 0x56, + 0x57, 0x50, 0x61, 0x1a, 0x15, 0x56, 0x5b, 0x91, 0x50, 0x90, 0x61, 0x1a, 0x15, 0x56, 0x5b, 0x60, + 0x01, 0x92, 0x50, 0x61, 0x1a, 0x6c, 0x91, 0x50, 0x61, 0x11, 0x95, 0x56, 0x5b, 0x50, 0x01, 0x54, + 0x90, 0x56, 0xfe, 0xa2, 0x64, 0x69, 0x70, 0x66, 0x73, 0x58, 0x22, 0x12, 0x20, 0x65, 0x23, 0x47, + 0x92, 0x08, 0x72, 0xa9, 0xe7, 0x3c, 0x6c, 0x9a, 0x6e, 0xa3, 0xb4, 0x36, 0x1a, 0xb4, 0x2f, 0xf2, + 0x2d, 0x38, 0x67, 0x2f, 0x6f, 0xf9, 0x87, 0x39, 0x30, 0x42, 0x1d, 0xf2, 0xac, 0x64, 0x73, 0x6f, + 0x6c, 0x63, 0x43, 0x00, 0x08, 0x1e, 0x00, 0x33, +]; diff --git a/crates/ethereum/evm/src/hardfork/beta.rs b/crates/ethereum/evm/src/hardfork/beta.rs new file mode 100644 index 0000000000..0cf09a7695 --- /dev/null +++ b/crates/ethereum/evm/src/hardfork/beta.rs @@ -0,0 +1,447 @@ +//! Gravity Beta hardfork state changes. +//! +//! Contains constants and bytecode for `StakePool` contract upgrade during Beta hardfork. +//! The `StakePool` bytecode includes the correct FACTORY immutable (SystemAddresses.STAKING). + +use alloy_primitives::{address, Address}; + +/// `StakePool` addresses that need bytecode upgrades during Beta hardfork. +pub const STAKEPOOL_ADDRESSES: [Address; 4] = [ + address!("ce128222bd84d67672f863424a03d114cd1253c5"), + address!("78f595fb25d03a742338fb32acfd544bdc63d814"), + address!("891299fe364088ead65aba911ea17dd5d968cd81"), + address!("b99aa922eb5cae399b79adc87621e72f66d5a976"), +]; + +/// New `StakePool` contract runtime bytecode for Beta hardfork. +/// Extracted from deployed contract via cast code (includes correct FACTORY immutable). +/// Bytecode size: 6824 bytes. +pub const STAKEPOOL_BETA_RUNTIME_BYTECODE: &[u8] = &[ + 0x60, 0x80, 0x80, 0x60, 0x40, 0x52, 0x60, 0x04, 0x36, 0x10, 0x15, 0x61, 0x00, 0x12, 0x57, 0x5f, + 0x80, 0xfd, 0x5b, 0x5f, 0x35, 0x60, 0xe0, 0x1c, 0x90, 0x81, 0x63, 0x17, 0x38, 0x7b, 0x58, 0x14, + 0x61, 0x10, 0xc1, 0x57, 0x50, 0x80, 0x63, 0x2b, 0x37, 0xf5, 0x3c, 0x14, 0x61, 0x0f, 0x51, 0x57, + 0x80, 0x63, 0x2d, 0xd3, 0x10, 0x00, 0x14, 0x61, 0x10, 0x7d, 0x57, 0x80, 0x63, 0x2e, 0x17, 0xde, + 0x78, 0x14, 0x61, 0x0f, 0xfe, 0x57, 0x80, 0x63, 0x3b, 0xd0, 0x54, 0x00, 0x14, 0x61, 0x0f, 0xe4, + 0x57, 0x80, 0x63, 0x41, 0x60, 0x53, 0x2f, 0x14, 0x61, 0x0f, 0xb9, 0x57, 0x80, 0x63, 0x42, 0xd8, + 0x66, 0x93, 0x14, 0x61, 0x0f, 0x79, 0x57, 0x80, 0x63, 0x46, 0xc9, 0x6a, 0xac, 0x14, 0x61, 0x0f, + 0x51, 0x57, 0x80, 0x63, 0x49, 0x47, 0x11, 0x88, 0x14, 0x61, 0x0e, 0x88, 0x57, 0x80, 0x63, 0x4b, + 0xc2, 0xa6, 0x57, 0x14, 0x61, 0x0d, 0xfb, 0x57, 0x80, 0x63, 0x51, 0xcb, 0x86, 0xcd, 0x14, 0x61, + 0x06, 0xad, 0x57, 0x80, 0x63, 0x53, 0xfd, 0x66, 0x14, 0x14, 0x61, 0x02, 0xbb, 0x57, 0x80, 0x63, + 0x57, 0x0c, 0xa7, 0x35, 0x14, 0x61, 0x02, 0x6b, 0x57, 0x80, 0x63, 0x5a, 0x62, 0x7d, 0xbc, 0x14, + 0x61, 0x0b, 0xff, 0x57, 0x80, 0x63, 0x5e, 0x42, 0xb4, 0x55, 0x14, 0x61, 0x0b, 0xe5, 0x57, 0x80, + 0x63, 0x5e, 0xba, 0xf1, 0xdb, 0x14, 0x61, 0x0b, 0x5a, 0x57, 0x80, 0x63, 0x71, 0x50, 0x18, 0xa6, + 0x14, 0x61, 0x0b, 0x82, 0x57, 0x80, 0x63, 0x72, 0xb4, 0x5a, 0x55, 0x14, 0x61, 0x0b, 0x5a, 0x57, + 0x80, 0x63, 0x79, 0xba, 0x50, 0x97, 0x14, 0x61, 0x0a, 0xd5, 0x57, 0x80, 0x63, 0x86, 0x21, 0x01, + 0x30, 0x14, 0x61, 0x09, 0x23, 0x57, 0x80, 0x63, 0x86, 0x25, 0x22, 0x0a, 0x14, 0x61, 0x09, 0x67, + 0x57, 0x80, 0x63, 0x8d, 0xa5, 0xcb, 0x5b, 0x14, 0x61, 0x09, 0x40, 0x57, 0x80, 0x63, 0x96, 0x68, + 0xce, 0xb8, 0x14, 0x61, 0x09, 0x23, 0x57, 0x80, 0x63, 0x9f, 0x0d, 0xee, 0xd7, 0x14, 0x61, 0x09, + 0x07, 0x57, 0x80, 0x63, 0xa2, 0x9a, 0x43, 0xbb, 0x14, 0x61, 0x08, 0x7a, 0x57, 0x80, 0x63, 0xa4, + 0xe2, 0xd6, 0x34, 0x14, 0x61, 0x08, 0x03, 0x57, 0x80, 0x63, 0xac, 0xc2, 0x21, 0x6a, 0x14, 0x61, + 0x07, 0x6c, 0x57, 0x80, 0x63, 0xb2, 0xa2, 0x5b, 0x52, 0x14, 0x61, 0x06, 0xb2, 0x57, 0x80, 0x63, + 0xb3, 0x92, 0xfb, 0xfb, 0x14, 0x61, 0x06, 0xad, 0x57, 0x80, 0x63, 0xb3, 0xab, 0x15, 0xfb, 0x14, + 0x61, 0x06, 0x11, 0x57, 0x80, 0x63, 0xb9, 0x61, 0x30, 0xa9, 0x14, 0x61, 0x03, 0xa2, 0x57, 0x80, + 0x63, 0xbd, 0x49, 0xc3, 0x5f, 0x14, 0x61, 0x03, 0x85, 0x57, 0x80, 0x63, 0xc0, 0x31, 0x02, 0xec, + 0x14, 0x61, 0x03, 0x68, 0x57, 0x80, 0x63, 0xc3, 0x54, 0xbd, 0x6e, 0x14, 0x61, 0x03, 0x46, 0x57, + 0x80, 0x63, 0xc4, 0x85, 0xa4, 0xd8, 0x14, 0x61, 0x02, 0xe1, 0x57, 0x80, 0x63, 0xce, 0x06, 0x17, + 0xec, 0x14, 0x61, 0x02, 0xbb, 0x57, 0x80, 0x63, 0xe3, 0x0c, 0x39, 0x78, 0x14, 0x61, 0x02, 0x93, + 0x57, 0x80, 0x63, 0xe7, 0xf4, 0x3c, 0x68, 0x14, 0x61, 0x02, 0x6b, 0x57, 0x80, 0x63, 0xef, 0x43, + 0xbd, 0x63, 0x14, 0x61, 0x02, 0x4a, 0x57, 0x63, 0xf2, 0xfd, 0xe3, 0x8b, 0x14, 0x61, 0x01, 0xd4, + 0x57, 0x5f, 0x80, 0xfd, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, + 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x61, 0x01, 0xed, 0x61, 0x10, 0xdb, 0x56, 0x5b, 0x61, 0x01, + 0xf5, 0x61, 0x17, 0x28, 0x56, 0x5b, 0x60, 0x01, 0x80, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x80, 0x6b, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x60, 0xa0, 0x1b, 0x60, + 0x01, 0x54, 0x16, 0x17, 0x60, 0x01, 0x55, 0x60, 0x01, 0x80, 0x60, 0xa0, 0x1b, 0x03, 0x5f, 0x54, + 0x16, 0x7f, 0x38, 0xd1, 0x6b, 0x8c, 0xac, 0x22, 0xd9, 0x9f, 0xc7, 0xc1, 0x24, 0xb9, 0xcd, 0x0d, + 0xe2, 0xd3, 0xfa, 0x1f, 0xae, 0xf4, 0x20, 0xbf, 0xe7, 0x91, 0xd8, 0xc3, 0x62, 0xd7, 0x65, 0xe2, + 0x27, 0x00, 0x5f, 0x80, 0xa3, 0x00, 0x5b, 0x5f, 0x80, 0xfd, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, + 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x65, 0x72, 0xba, + 0x30, 0x4f, 0x80, 0x00, 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, + 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x03, 0x54, 0x60, + 0x40, 0x51, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x90, 0x91, 0x16, 0x81, 0x52, 0x60, + 0x20, 0x90, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, + 0x61, 0x02, 0x46, 0x57, 0x60, 0x01, 0x54, 0x60, 0x40, 0x51, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, + 0x1b, 0x03, 0x90, 0x91, 0x16, 0x81, 0x52, 0x60, 0x20, 0x90, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, + 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x60, 0x01, + 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x60, 0x06, 0x54, 0x16, 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, + 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, + 0x02, 0x46, 0x57, 0x5f, 0x60, 0x20, 0x60, 0x40, 0x51, 0x61, 0x03, 0x01, 0x81, 0x61, 0x11, 0x20, + 0x56, 0x5b, 0x82, 0x81, 0x52, 0x01, 0x52, 0x60, 0x40, 0x61, 0x03, 0x13, 0x60, 0x04, 0x35, 0x61, + 0x11, 0x95, 0x56, 0x5b, 0x50, 0x81, 0x51, 0x61, 0x03, 0x1f, 0x81, 0x61, 0x11, 0x20, 0x56, 0x5b, + 0x60, 0x20, 0x60, 0x01, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x84, 0x54, 0x16, 0x93, + 0x84, 0x84, 0x52, 0x01, 0x54, 0x91, 0x01, 0x90, 0x81, 0x52, 0x82, 0x51, 0x91, 0x82, 0x52, 0x51, + 0x60, 0x20, 0x82, 0x01, 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, + 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x61, 0x03, 0x60, 0x61, 0x18, 0x43, 0x56, + 0x5b, 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, + 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x60, 0x07, 0x54, 0x60, 0x40, + 0x51, 0x90, 0x81, 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, + 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x60, 0x05, 0x54, 0x60, 0x40, 0x51, 0x90, 0x81, + 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, + 0x61, 0x02, 0x46, 0x57, 0x60, 0x04, 0x35, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x81, + 0x16, 0x80, 0x82, 0x03, 0x61, 0x02, 0x46, 0x57, 0x60, 0x02, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, + 0xa0, 0x1b, 0x03, 0x16, 0x33, 0x81, 0x90, 0x03, 0x61, 0x05, 0xfb, 0x57, 0x50, 0x60, 0x40, 0x51, + 0x63, 0x0b, 0xcf, 0xee, 0x3f, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, + 0x64, 0x01, 0x62, 0x5f, 0x20, 0x03, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, + 0x91, 0x61, 0x05, 0xcc, 0x57, 0x5b, 0x50, 0x61, 0x05, 0xbd, 0x57, 0x65, 0x72, 0xba, 0x30, 0x4f, + 0x80, 0x00, 0x80, 0x82, 0x11, 0x61, 0x05, 0xa7, 0x57, 0x50, 0x60, 0x06, 0x54, 0x90, 0x61, 0x04, + 0x31, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x83, 0x16, 0x93, 0x84, 0x61, 0x13, 0x6c, + 0x56, 0x5b, 0x91, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x83, 0x16, 0x91, 0x84, 0x83, + 0x11, 0x15, 0x61, 0x05, 0x91, 0x57, 0x50, 0x60, 0x40, 0x51, 0x63, 0x7e, 0x34, 0x5d, 0xef, 0x60, + 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, 0x00, + 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, 0x05, 0x72, 0x57, 0x5b, + 0x50, 0x60, 0x40, 0x51, 0x63, 0x4f, 0x0f, 0x2a, 0x39, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x90, 0x60, + 0x20, 0x82, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, 0x01, 0x5a, 0xfa, 0x91, 0x82, 0x15, + 0x61, 0x05, 0x67, 0x57, 0x5f, 0x92, 0x61, 0x05, 0x36, 0x57, 0x5b, 0x50, 0x60, 0x01, 0x60, 0x01, + 0x60, 0x40, 0x1b, 0x03, 0x61, 0x04, 0xad, 0x83, 0x83, 0x61, 0x13, 0x6c, 0x56, 0x5b, 0x16, 0x84, + 0x10, 0x61, 0x05, 0x0c, 0x57, 0x67, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x19, 0x83, + 0x16, 0x84, 0x17, 0x60, 0x06, 0x55, 0x60, 0x40, 0x80, 0x51, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, + 0x1b, 0x03, 0x80, 0x89, 0x16, 0x82, 0x52, 0x87, 0x16, 0x60, 0x20, 0x82, 0x01, 0x52, 0x30, 0x91, + 0x7f, 0x7e, 0x4f, 0x3c, 0xcb, 0x2c, 0x7c, 0xa7, 0x6e, 0xee, 0x66, 0x82, 0xc0, 0xe8, 0x6f, 0xef, + 0xbb, 0xd6, 0xfe, 0x24, 0xe4, 0xaf, 0x19, 0x38, 0x1a, 0x85, 0x4a, 0x14, 0xea, 0x09, 0x1b, 0xd9, + 0xaf, 0x91, 0x90, 0x81, 0x90, 0x81, 0x01, 0x5b, 0x03, 0x90, 0xa2, 0x00, 0x5b, 0x61, 0x05, 0x1f, + 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x92, 0x85, 0x92, 0x61, 0x13, 0x6c, 0x56, 0x5b, + 0x90, 0x63, 0x20, 0x41, 0x57, 0x89, 0x60, 0xe1, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x52, 0x16, 0x60, + 0x24, 0x52, 0x60, 0x44, 0x5f, 0xfd, 0x5b, 0x61, 0x05, 0x59, 0x91, 0x92, 0x50, 0x60, 0x20, 0x3d, + 0x60, 0x20, 0x11, 0x61, 0x05, 0x60, 0x57, 0x5b, 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, + 0x56, 0x5b, 0x81, 0x01, 0x90, 0x61, 0x11, 0xfb, 0x56, 0x5b, 0x90, 0x86, 0x61, 0x04, 0x9a, 0x56, + 0x5b, 0x50, 0x3d, 0x61, 0x05, 0x47, 0x56, 0x5b, 0x60, 0x40, 0x51, 0x3d, 0x5f, 0x82, 0x3e, 0x3d, + 0x90, 0xfd, 0x5b, 0x61, 0x05, 0x8b, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, + 0x60, 0x57, 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x85, 0x61, 0x04, 0x6f, + 0x56, 0x5b, 0x84, 0x63, 0x8a, 0x36, 0xf6, 0x43, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x52, + 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, 0xfd, 0x5b, 0x90, 0x63, 0x7e, 0xda, 0x69, 0x9b, 0x60, 0xe1, + 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x52, 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, 0xfd, 0x5b, 0x63, 0xb7, + 0xa1, 0x74, 0xcb, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x5f, 0xfd, 0x5b, 0x61, 0x05, 0xee, + 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, 0xf4, 0x57, 0x5b, 0x61, 0x05, 0xe6, + 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x81, 0x01, 0x90, 0x61, 0x11, 0x70, 0x56, 0x5b, 0x83, + 0x61, 0x04, 0x05, 0x56, 0x5b, 0x50, 0x3d, 0x61, 0x05, 0xdc, 0x56, 0x5b, 0x63, 0xe8, 0x37, 0xad, + 0xd9, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x33, 0x60, 0x04, 0x52, 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, + 0xfd, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, + 0x02, 0x46, 0x57, 0x61, 0x06, 0x2a, 0x61, 0x10, 0xdb, 0x56, 0x5b, 0x61, 0x06, 0x32, 0x61, 0x17, + 0x28, 0x56, 0x5b, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x81, 0x16, 0x90, 0x81, 0x15, + 0x61, 0x06, 0x9e, 0x57, 0x60, 0x03, 0x80, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, + 0x19, 0x81, 0x16, 0x90, 0x93, 0x17, 0x90, 0x55, 0x60, 0x40, 0x80, 0x51, 0x60, 0x01, 0x60, 0x01, + 0x60, 0xa0, 0x1b, 0x03, 0x93, 0x84, 0x16, 0x81, 0x52, 0x92, 0x90, 0x91, 0x16, 0x60, 0x20, 0x83, + 0x01, 0x52, 0x30, 0x91, 0x7f, 0x01, 0xc8, 0x73, 0x01, 0x22, 0xff, 0x73, 0x36, 0x96, 0x29, 0x94, + 0x0a, 0x52, 0x96, 0xf4, 0xe7, 0x10, 0x0e, 0xf1, 0x63, 0x17, 0xd9, 0x43, 0xfb, 0xbb, 0xfa, 0x1b, + 0x01, 0x93, 0xac, 0x35, 0xcb, 0x91, 0x81, 0x90, 0x81, 0x01, 0x61, 0x05, 0x07, 0x56, 0x5b, 0x63, + 0xd9, 0x2e, 0x23, 0x3d, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x5f, 0xfd, 0x5b, 0x61, 0x10, + 0xf1, 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, + 0x61, 0x02, 0x46, 0x57, 0x61, 0x06, 0xcb, 0x61, 0x10, 0xdb, 0x56, 0x5b, 0x60, 0x02, 0x54, 0x60, + 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x33, 0x81, 0x90, 0x03, 0x61, 0x05, 0xfb, 0x57, + 0x50, 0x60, 0x40, 0x51, 0x63, 0x0b, 0xcf, 0xee, 0x3f, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, + 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x20, 0x03, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, + 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, 0x07, 0x4d, 0x57, 0x5b, 0x50, 0x61, 0x05, 0xbd, 0x57, 0x61, + 0x07, 0x21, 0x60, 0x20, 0x91, 0x61, 0x07, 0x1c, 0x61, 0x16, 0x78, 0x56, 0x5b, 0x61, 0x17, 0xdf, + 0x56, 0x5b, 0x60, 0x01, 0x7f, 0x9b, 0x77, 0x9b, 0x17, 0x42, 0x2d, 0x0d, 0xf9, 0x22, 0x23, 0x01, + 0x8b, 0x32, 0xb4, 0xd1, 0xfa, 0x46, 0xe0, 0x71, 0x72, 0x3d, 0x68, 0x17, 0xe2, 0x48, 0x6d, 0x00, + 0x3b, 0xec, 0xc5, 0x5f, 0x00, 0x55, 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, 0xf3, 0x5b, 0x61, 0x07, + 0x66, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, 0xf4, 0x57, 0x61, 0x05, 0xe6, + 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x82, 0x61, 0x07, 0x09, 0x56, 0x5b, 0x34, 0x61, 0x02, + 0x46, 0x57, 0x60, 0x40, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x24, + 0x35, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x81, 0x16, 0x81, 0x03, 0x61, 0x02, 0x46, + 0x57, 0x60, 0x02, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x33, 0x81, 0x90, + 0x03, 0x61, 0x05, 0xfb, 0x57, 0x50, 0x60, 0x40, 0x51, 0x63, 0x0b, 0xcf, 0xee, 0x3f, 0x60, 0xe1, + 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x20, 0x03, 0x5a, + 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, 0x07, 0xe4, 0x57, 0x5b, 0x50, + 0x61, 0x05, 0xbd, 0x57, 0x61, 0x03, 0x60, 0x60, 0x20, 0x91, 0x61, 0x07, 0x1c, 0x60, 0x04, 0x35, + 0x61, 0x13, 0x8c, 0x56, 0x5b, 0x61, 0x07, 0xfd, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, + 0x61, 0x05, 0xf4, 0x57, 0x61, 0x05, 0xe6, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x82, 0x61, + 0x07, 0xce, 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, + 0x61, 0x02, 0x46, 0x57, 0x60, 0x40, 0x51, 0x63, 0x7e, 0x34, 0x5d, 0xef, 0x60, 0xe1, 0x1b, 0x81, + 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, 0x00, 0x5a, 0xfa, 0x80, + 0x15, 0x61, 0x05, 0x67, 0x57, 0x60, 0x20, 0x91, 0x5f, 0x91, 0x61, 0x08, 0x5d, 0x57, 0x5b, 0x50, + 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x60, 0x06, 0x54, 0x16, 0x60, 0x01, 0x60, 0x01, + 0x60, 0x40, 0x1b, 0x03, 0x60, 0x40, 0x51, 0x92, 0x16, 0x10, 0x81, 0x52, 0xf3, 0x5b, 0x61, 0x08, + 0x74, 0x91, 0x50, 0x82, 0x3d, 0x84, 0x11, 0x61, 0x05, 0x60, 0x57, 0x61, 0x05, 0x51, 0x81, 0x83, + 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x82, 0x61, 0x08, 0x3e, 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, + 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x61, 0x08, 0x93, 0x61, + 0x10, 0xdb, 0x56, 0x5b, 0x61, 0x08, 0x9b, 0x61, 0x17, 0x28, 0x56, 0x5b, 0x60, 0x01, 0x60, 0x01, + 0x60, 0xa0, 0x1b, 0x03, 0x81, 0x16, 0x90, 0x81, 0x15, 0x61, 0x06, 0x9e, 0x57, 0x60, 0x02, 0x80, + 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x19, 0x81, 0x16, 0x90, 0x93, 0x17, 0x90, + 0x55, 0x60, 0x40, 0x80, 0x51, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x93, 0x84, 0x16, + 0x81, 0x52, 0x92, 0x90, 0x91, 0x16, 0x60, 0x20, 0x83, 0x01, 0x52, 0x30, 0x91, 0x7f, 0x98, 0x39, + 0x26, 0x75, 0x67, 0x55, 0x1f, 0x9b, 0x01, 0x77, 0xb3, 0x29, 0x39, 0x43, 0x08, 0xfa, 0x17, 0xd5, + 0xb8, 0x54, 0x67, 0x60, 0x19, 0xa9, 0x62, 0x01, 0x02, 0x83, 0xcb, 0xa2, 0xc3, 0xd4, 0x91, 0x81, + 0x90, 0x81, 0x01, 0x61, 0x05, 0x07, 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, + 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x60, 0x40, 0x51, 0x61, 0x03, 0xe8, + 0x81, 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, + 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x60, 0x08, 0x54, 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, 0xf3, + 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, + 0x57, 0x5f, 0x54, 0x60, 0x40, 0x51, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x90, 0x91, + 0x16, 0x81, 0x52, 0x60, 0x20, 0x90, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, + 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x62, 0x5f, 0x20, 0x00, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, + 0x03, 0x16, 0x33, 0x03, 0x61, 0x0a, 0xc2, 0x57, 0x60, 0x40, 0x51, 0x63, 0x7e, 0x34, 0x5d, 0xef, + 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, + 0x00, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, 0x0a, 0xa3, 0x57, + 0x5b, 0x50, 0x60, 0x40, 0x51, 0x63, 0x4f, 0x0f, 0x2a, 0x39, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x90, + 0x60, 0x20, 0x82, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, 0x01, 0x5a, 0xfa, 0x90, 0x81, + 0x15, 0x61, 0x05, 0x67, 0x57, 0x61, 0x0a, 0x05, 0x92, 0x5f, 0x92, 0x61, 0x0a, 0x82, 0x57, 0x5b, + 0x50, 0x61, 0x13, 0x6c, 0x56, 0x5b, 0x60, 0x06, 0x54, 0x90, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, + 0x1b, 0x03, 0x82, 0x16, 0x91, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x82, 0x16, 0x91, + 0x83, 0x83, 0x11, 0x61, 0x0a, 0x28, 0x57, 0x00, 0x5b, 0x7f, 0x7e, 0x4f, 0x3c, 0xcb, 0x2c, 0x7c, + 0xa7, 0x6e, 0xee, 0x66, 0x82, 0xc0, 0xe8, 0x6f, 0xef, 0xbb, 0xd6, 0xfe, 0x24, 0xe4, 0xaf, 0x19, + 0x38, 0x1a, 0x85, 0x4a, 0x14, 0xea, 0x09, 0x1b, 0xd9, 0xaf, 0x92, 0x61, 0x05, 0x07, 0x92, 0x60, + 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x19, 0x16, 0x17, 0x60, 0x06, 0x55, 0x60, 0x40, 0x51, + 0x91, 0x82, 0x91, 0x30, 0x95, 0x83, 0x90, 0x92, 0x91, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, + 0x03, 0x60, 0x20, 0x91, 0x81, 0x60, 0x40, 0x85, 0x01, 0x96, 0x16, 0x84, 0x52, 0x16, 0x91, 0x01, + 0x52, 0x56, 0x5b, 0x61, 0x0a, 0x9c, 0x91, 0x92, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, + 0x05, 0x60, 0x57, 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x90, 0x83, 0x61, + 0x09, 0xff, 0x56, 0x5b, 0x61, 0x0a, 0xbc, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, + 0x05, 0x60, 0x57, 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x81, 0x61, 0x09, + 0xd0, 0x56, 0x5b, 0x63, 0xd3, 0x7c, 0xee, 0xfd, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x33, 0x60, 0x04, + 0x52, 0x60, 0x24, 0x5f, 0xfd, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, + 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x01, 0x54, 0x33, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, + 0x1b, 0x03, 0x90, 0x91, 0x16, 0x03, 0x61, 0x0b, 0x47, 0x57, 0x60, 0x01, 0x80, 0x54, 0x60, 0x01, + 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x19, 0x90, 0x81, 0x16, 0x90, 0x91, 0x55, 0x5f, 0x80, 0x54, + 0x33, 0x92, 0x81, 0x16, 0x83, 0x17, 0x82, 0x55, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, + 0x16, 0x90, 0x7f, 0x8b, 0xe0, 0x07, 0x9c, 0x53, 0x16, 0x59, 0x14, 0x13, 0x44, 0xcd, 0x1f, 0xd0, + 0xa4, 0xf2, 0x84, 0x19, 0x49, 0x7f, 0x97, 0x22, 0xa3, 0xda, 0xaf, 0xe3, 0xb4, 0x18, 0x6f, 0x6b, + 0x64, 0x57, 0xe0, 0x90, 0x80, 0xa3, 0x00, 0x5b, 0x63, 0x11, 0x8c, 0xda, 0xa7, 0x60, 0xe0, 0x1b, + 0x5f, 0x52, 0x33, 0x60, 0x04, 0x52, 0x60, 0x24, 0x5f, 0xfd, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, + 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x02, 0x54, 0x60, 0x40, + 0x51, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x90, 0x91, 0x16, 0x81, 0x52, 0x60, 0x20, + 0x90, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, + 0x02, 0x46, 0x57, 0x61, 0x0b, 0x9a, 0x61, 0x17, 0x28, 0x56, 0x5b, 0x60, 0x01, 0x80, 0x54, 0x60, + 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x19, 0x90, 0x81, 0x16, 0x90, 0x91, 0x55, 0x5f, 0x80, + 0x54, 0x91, 0x82, 0x16, 0x81, 0x55, 0x90, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, + 0x7f, 0x8b, 0xe0, 0x07, 0x9c, 0x53, 0x16, 0x59, 0x14, 0x13, 0x44, 0xcd, 0x1f, 0xd0, 0xa4, 0xf2, + 0x84, 0x19, 0x49, 0x7f, 0x97, 0x22, 0xa3, 0xda, 0xaf, 0xe3, 0xb4, 0x18, 0x6f, 0x6b, 0x64, 0x57, + 0xe0, 0x82, 0x80, 0xa3, 0x00, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, + 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x61, 0x03, 0x60, 0x61, 0x16, 0xd6, 0x56, 0x5b, + 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x02, 0x54, 0x60, 0x01, + 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x33, 0x81, 0x90, 0x03, 0x61, 0x05, 0xfb, 0x57, 0x60, + 0x40, 0x51, 0x63, 0x0b, 0xcf, 0xee, 0x3f, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, + 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x20, 0x03, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, + 0x57, 0x5f, 0x91, 0x61, 0x0d, 0xdc, 0x57, 0x5b, 0x50, 0x61, 0x05, 0xbd, 0x57, 0x34, 0x15, 0x61, + 0x0d, 0xcd, 0x57, 0x61, 0x0c, 0x5e, 0x34, 0x60, 0x05, 0x54, 0x61, 0x13, 0x5f, 0x56, 0x5b, 0x60, + 0x05, 0x55, 0x60, 0x40, 0x51, 0x63, 0x7e, 0x34, 0x5d, 0xef, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, + 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, 0x00, 0x5a, 0xfa, 0x90, 0x81, 0x15, + 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, 0x0d, 0xae, 0x57, 0x5b, 0x50, 0x60, 0x40, 0x51, 0x63, + 0x4f, 0x0f, 0x2a, 0x39, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, + 0x01, 0x62, 0x5f, 0x10, 0x01, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, + 0x61, 0x0d, 0x8f, 0x57, 0x5b, 0x50, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x81, 0x16, + 0x91, 0x82, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x03, 0x60, 0x01, 0x60, 0x01, 0x60, + 0x40, 0x1b, 0x03, 0x81, 0x11, 0x61, 0x0d, 0x7b, 0x57, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, + 0x03, 0x16, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x82, 0x16, 0x11, 0x61, 0x0d, 0x5d, + 0x57, 0x61, 0x0c, 0xfa, 0x92, 0x50, 0x61, 0x13, 0x6c, 0x56, 0x5b, 0x60, 0x01, 0x60, 0x01, 0x60, + 0x40, 0x1b, 0x03, 0x60, 0x06, 0x54, 0x91, 0x16, 0x90, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, + 0x03, 0x81, 0x16, 0x82, 0x11, 0x61, 0x0d, 0x47, 0x57, 0x5b, 0x60, 0x40, 0x51, 0x34, 0x81, 0x52, + 0x7f, 0x7c, 0x71, 0x79, 0x85, 0xac, 0x27, 0x3e, 0x66, 0x3b, 0x7f, 0x30, 0x50, 0xf5, 0xb1, 0x5a, + 0x43, 0x88, 0xff, 0x6e, 0xd9, 0x52, 0x33, 0x89, 0x54, 0xf6, 0x50, 0xe2, 0x09, 0x3e, 0x13, 0x93, + 0x7f, 0x60, 0x20, 0x30, 0x92, 0xa2, 0x00, 0x5b, 0x67, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x19, 0x16, 0x17, 0x60, 0x06, 0x55, 0x80, 0x80, 0x61, 0x0d, 0x19, 0x56, 0x5b, 0x82, 0x65, + 0x72, 0xba, 0x30, 0x4f, 0x80, 0x00, 0x90, 0x63, 0x7e, 0xda, 0x69, 0x9b, 0x60, 0xe1, 0x1b, 0x5f, + 0x52, 0x60, 0x04, 0x52, 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, 0xfd, 0x5b, 0x63, 0x4e, 0x48, 0x7b, + 0x71, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x11, 0x60, 0x04, 0x52, 0x60, 0x24, 0x5f, 0xfd, 0x5b, + 0x61, 0x0d, 0xa8, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, 0x60, 0x57, 0x61, + 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x82, 0x61, 0x0c, 0xb4, 0x56, 0x5b, 0x61, + 0x0d, 0xc7, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, 0x60, 0x57, 0x61, 0x05, + 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x81, 0x61, 0x0c, 0x8a, 0x56, 0x5b, 0x63, 0x1f, + 0x2a, 0x20, 0x05, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x5f, 0xfd, 0x5b, 0x61, 0x0d, 0xf5, + 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, 0xf4, 0x57, 0x61, 0x05, 0xe6, 0x81, + 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x81, 0x61, 0x0c, 0x47, 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, + 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x61, 0x0e, 0x14, + 0x61, 0x10, 0xdb, 0x56, 0x5b, 0x61, 0x0e, 0x1c, 0x61, 0x17, 0x28, 0x56, 0x5b, 0x60, 0x01, 0x60, + 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x81, 0x16, 0x90, 0x81, 0x15, 0x61, 0x06, 0x9e, 0x57, 0x60, 0x04, + 0x80, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x19, 0x81, 0x16, 0x90, 0x93, 0x17, + 0x90, 0x55, 0x60, 0x40, 0x80, 0x51, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x93, 0x84, + 0x16, 0x81, 0x52, 0x92, 0x90, 0x91, 0x16, 0x60, 0x20, 0x83, 0x01, 0x52, 0x30, 0x91, 0x7f, 0x92, + 0x68, 0xb9, 0x72, 0x6f, 0x38, 0x82, 0x49, 0x65, 0x64, 0x9b, 0xfc, 0xf3, 0xb0, 0xd3, 0x2f, 0xf5, + 0x08, 0x16, 0x21, 0x6b, 0xf7, 0xcd, 0xbd, 0x57, 0xab, 0xc3, 0xcc, 0x8c, 0x5d, 0xab, 0x12, 0x91, + 0x81, 0x90, 0x81, 0x01, 0x61, 0x05, 0x07, 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, + 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x40, 0x51, 0x63, 0x7e, 0x34, 0x5d, + 0xef, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, + 0x10, 0x00, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, 0x0f, 0x32, + 0x57, 0x5b, 0x50, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x60, 0x40, 0x51, 0x91, 0x63, + 0x51, 0xcb, 0x86, 0xcd, 0x60, 0xe0, 0x1b, 0x83, 0x52, 0x16, 0x60, 0x04, 0x82, 0x01, 0x52, 0x60, + 0x20, 0x81, 0x60, 0x24, 0x81, 0x30, 0x5a, 0xfa, 0x80, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x90, + 0x61, 0x0e, 0xff, 0x57, 0x5b, 0x60, 0x20, 0x90, 0x60, 0x40, 0x51, 0x90, 0x81, 0x52, 0xf3, 0x5b, + 0x50, 0x60, 0x20, 0x81, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x0f, 0x2a, 0x57, 0x5b, 0x81, 0x61, 0x0f, + 0x19, 0x60, 0x20, 0x93, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x81, 0x01, 0x03, 0x12, 0x61, 0x02, + 0x46, 0x57, 0x60, 0x20, 0x90, 0x51, 0x61, 0x0e, 0xf4, 0x56, 0x5b, 0x3d, 0x91, 0x50, 0x61, 0x0f, + 0x0c, 0x56, 0x5b, 0x61, 0x0f, 0x4b, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, + 0x60, 0x57, 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x81, 0x61, 0x0e, 0xc1, + 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, + 0x46, 0x57, 0x60, 0x04, 0x54, 0x60, 0x40, 0x51, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, + 0x90, 0x91, 0x16, 0x81, 0x52, 0x60, 0x20, 0x90, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x60, + 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x61, 0x0f, 0x92, 0x61, 0x10, + 0xdb, 0x56, 0x5b, 0x60, 0x02, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x33, + 0x81, 0x90, 0x03, 0x61, 0x05, 0xfb, 0x57, 0x60, 0x20, 0x61, 0x07, 0x21, 0x83, 0x61, 0x0f, 0xb4, + 0x61, 0x16, 0x78, 0x56, 0x5b, 0x61, 0x12, 0xed, 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, + 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x61, 0x0f, 0xd3, 0x61, + 0x12, 0x3a, 0x56, 0x5b, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x60, 0x40, 0x51, 0x91, + 0x16, 0x81, 0x52, 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, + 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x61, 0x03, 0x60, 0x61, 0x11, 0xc5, 0x56, 0x5b, 0x34, + 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, + 0x60, 0x02, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x33, 0x81, 0x90, 0x03, + 0x61, 0x05, 0xfb, 0x57, 0x60, 0x40, 0x51, 0x63, 0x0b, 0xcf, 0xee, 0x3f, 0x60, 0xe1, 0x1b, 0x81, + 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x20, 0x03, 0x5a, 0xfa, 0x90, + 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, 0x10, 0x5e, 0x57, 0x5b, 0x50, 0x61, 0x05, + 0xbd, 0x57, 0x61, 0x10, 0x5c, 0x60, 0x04, 0x35, 0x61, 0x13, 0x8c, 0x56, 0x5b, 0x00, 0x5b, 0x61, + 0x10, 0x77, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, 0xf4, 0x57, 0x61, 0x05, + 0xe6, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x81, 0x61, 0x10, 0x4c, 0x56, 0x5b, 0x34, 0x61, + 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, 0x46, 0x57, 0x60, 0x40, + 0x51, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x62, 0x5f, + 0x20, 0x00, 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x81, 0x52, 0x60, 0x20, 0x90, + 0xf3, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, 0x02, + 0x46, 0x57, 0x60, 0x20, 0x90, 0x60, 0x05, 0x54, 0x81, 0x52, 0xf3, 0x5b, 0x60, 0x04, 0x35, 0x90, + 0x60, 0x01, 0x60, 0x01, 0x60, 0xa0, 0x1b, 0x03, 0x82, 0x16, 0x82, 0x03, 0x61, 0x02, 0x46, 0x57, + 0x56, 0x5b, 0x34, 0x61, 0x02, 0x46, 0x57, 0x60, 0x20, 0x36, 0x60, 0x03, 0x19, 0x01, 0x12, 0x61, + 0x02, 0x46, 0x57, 0x60, 0x04, 0x35, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x81, 0x16, + 0x81, 0x03, 0x61, 0x02, 0x46, 0x57, 0x61, 0x03, 0x60, 0x60, 0x20, 0x91, 0x61, 0x17, 0x3b, 0x56, + 0x5b, 0x60, 0x40, 0x81, 0x01, 0x90, 0x81, 0x10, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, + 0x82, 0x11, 0x17, 0x61, 0x11, 0x3b, 0x57, 0x60, 0x40, 0x52, 0x56, 0x5b, 0x63, 0x4e, 0x48, 0x7b, + 0x71, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x41, 0x60, 0x04, 0x52, 0x60, 0x24, 0x5f, 0xfd, 0x5b, + 0x90, 0x60, 0x1f, 0x80, 0x19, 0x91, 0x01, 0x16, 0x81, 0x01, 0x90, 0x81, 0x10, 0x60, 0x01, 0x60, + 0x01, 0x60, 0x40, 0x1b, 0x03, 0x82, 0x11, 0x17, 0x61, 0x11, 0x3b, 0x57, 0x60, 0x40, 0x52, 0x56, + 0x5b, 0x90, 0x81, 0x60, 0x20, 0x91, 0x03, 0x12, 0x61, 0x02, 0x46, 0x57, 0x51, 0x80, 0x15, 0x15, + 0x81, 0x03, 0x61, 0x02, 0x46, 0x57, 0x90, 0x56, 0x5b, 0x91, 0x90, 0x82, 0x03, 0x91, 0x82, 0x11, + 0x61, 0x0d, 0x7b, 0x57, 0x56, 0x5b, 0x60, 0x07, 0x54, 0x81, 0x10, 0x15, 0x61, 0x11, 0xb1, 0x57, + 0x60, 0x07, 0x5f, 0x52, 0x60, 0x20, 0x5f, 0x20, 0x90, 0x60, 0x01, 0x1b, 0x01, 0x90, 0x5f, 0x90, + 0x56, 0x5b, 0x63, 0x4e, 0x48, 0x7b, 0x71, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x32, 0x60, 0x04, + 0x52, 0x60, 0x24, 0x5f, 0xfd, 0x5b, 0x60, 0x07, 0x54, 0x80, 0x15, 0x61, 0x11, 0xf6, 0x57, 0x5f, + 0x19, 0x81, 0x01, 0x90, 0x81, 0x11, 0x61, 0x0d, 0x7b, 0x57, 0x60, 0x01, 0x61, 0x11, 0xe7, 0x61, + 0x11, 0xf3, 0x92, 0x61, 0x11, 0x95, 0x56, 0x5b, 0x50, 0x01, 0x54, 0x60, 0x08, 0x54, 0x90, 0x61, + 0x11, 0x88, 0x56, 0x5b, 0x90, 0x56, 0x5b, 0x50, 0x5f, 0x90, 0x56, 0x5b, 0x90, 0x81, 0x60, 0x20, + 0x91, 0x03, 0x12, 0x61, 0x02, 0x46, 0x57, 0x51, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, + 0x81, 0x16, 0x81, 0x03, 0x61, 0x02, 0x46, 0x57, 0x90, 0x56, 0x5b, 0x90, 0x60, 0x01, 0x60, 0x01, + 0x60, 0x40, 0x1b, 0x03, 0x80, 0x91, 0x16, 0x91, 0x16, 0x03, 0x90, 0x60, 0x01, 0x60, 0x01, 0x60, + 0x40, 0x1b, 0x03, 0x82, 0x11, 0x61, 0x0d, 0x7b, 0x57, 0x56, 0x5b, 0x60, 0x40, 0x51, 0x63, 0x7e, + 0x34, 0x5d, 0xef, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, + 0x62, 0x5f, 0x10, 0x00, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, + 0x12, 0x90, 0x57, 0x5b, 0x50, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x60, 0x06, 0x54, + 0x16, 0x90, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x81, 0x16, 0x82, 0x11, 0x61, 0x12, + 0x87, 0x57, 0x50, 0x50, 0x5f, 0x90, 0x56, 0x5b, 0x61, 0x11, 0xf3, 0x91, 0x61, 0x12, 0x1a, 0x56, + 0x5b, 0x61, 0x12, 0xa9, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, 0x60, 0x57, + 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x5f, 0x61, 0x12, 0x63, 0x56, 0x5b, + 0x3d, 0x15, 0x61, 0x12, 0xe8, 0x57, 0x3d, 0x90, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, + 0x82, 0x11, 0x61, 0x11, 0x3b, 0x57, 0x60, 0x40, 0x51, 0x91, 0x61, 0x12, 0xdd, 0x60, 0x1f, 0x82, + 0x01, 0x60, 0x1f, 0x19, 0x16, 0x60, 0x20, 0x01, 0x84, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x82, 0x52, + 0x3d, 0x5f, 0x60, 0x20, 0x84, 0x01, 0x3e, 0x56, 0x5b, 0x60, 0x60, 0x90, 0x56, 0x5b, 0x90, 0x61, + 0x12, 0xf6, 0x61, 0x16, 0xd6, 0x56, 0x5b, 0x91, 0x82, 0x15, 0x61, 0x13, 0x59, 0x57, 0x5f, 0x80, + 0x80, 0x85, 0x81, 0x94, 0x60, 0x01, 0x80, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x80, 0x60, 0x40, 0x51, + 0x83, 0x81, 0x52, 0x7f, 0x52, 0x02, 0xb7, 0x90, 0xbb, 0xfc, 0x60, 0xcd, 0xee, 0xc9, 0x26, 0x3f, + 0xb3, 0x5a, 0x33, 0x8a, 0xc1, 0xcd, 0xf6, 0x79, 0x8a, 0xb4, 0x16, 0x3b, 0xfc, 0xed, 0x25, 0x51, + 0x75, 0x9a, 0x74, 0xa9, 0x60, 0x20, 0x30, 0x92, 0xa3, 0x5a, 0xf1, 0x61, 0x13, 0x42, 0x61, 0x12, + 0xaf, 0x56, 0x5b, 0x50, 0x15, 0x61, 0x13, 0x4a, 0x57, 0x56, 0x5b, 0x63, 0x12, 0x17, 0x1d, 0x83, + 0x60, 0xe3, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x5f, 0xfd, 0x5b, 0x50, 0x5f, 0x91, 0x50, 0x56, 0x5b, + 0x91, 0x90, 0x82, 0x01, 0x80, 0x92, 0x11, 0x61, 0x0d, 0x7b, 0x57, 0x56, 0x5b, 0x90, 0x60, 0x01, + 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x80, 0x91, 0x16, 0x91, 0x16, 0x01, 0x90, 0x60, 0x01, 0x60, + 0x01, 0x60, 0x40, 0x1b, 0x03, 0x82, 0x11, 0x61, 0x0d, 0x7b, 0x57, 0x56, 0x5b, 0x80, 0x15, 0x61, + 0x0d, 0xcd, 0x57, 0x60, 0x05, 0x54, 0x80, 0x82, 0x11, 0x61, 0x16, 0x62, 0x57, 0x60, 0x40, 0x51, + 0x63, 0xfa, 0xcd, 0x74, 0x3b, 0x60, 0xe0, 0x1b, 0x81, 0x52, 0x30, 0x60, 0x04, 0x82, 0x01, 0x52, + 0x60, 0x20, 0x81, 0x60, 0x24, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x20, 0x01, 0x5a, 0xfa, 0x80, 0x15, + 0x61, 0x05, 0x67, 0x57, 0x83, 0x91, 0x5f, 0x91, 0x61, 0x16, 0x43, 0x57, 0x5b, 0x50, 0x61, 0x15, + 0x08, 0x57, 0x5b, 0x61, 0x13, 0xdb, 0x91, 0x61, 0x11, 0x88, 0x56, 0x5b, 0x60, 0x05, 0x55, 0x60, + 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x60, 0x06, 0x54, 0x16, 0x60, 0x07, 0x54, 0x80, 0x15, + 0x5f, 0x14, 0x61, 0x14, 0x52, 0x57, 0x50, 0x60, 0x40, 0x51, 0x61, 0x14, 0x13, 0x91, 0x61, 0x14, + 0x06, 0x82, 0x61, 0x11, 0x20, 0x56, 0x5b, 0x81, 0x52, 0x82, 0x60, 0x20, 0x82, 0x01, 0x52, 0x61, + 0x19, 0x24, 0x56, 0x5b, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x60, 0x06, 0x54, 0x16, + 0x60, 0x40, 0x51, 0x91, 0x82, 0x52, 0x60, 0x20, 0x82, 0x01, 0x52, 0x7f, 0x53, 0x6c, 0x53, 0xe1, + 0x1d, 0xb8, 0x10, 0x5c, 0x78, 0x7d, 0x8d, 0x5f, 0xce, 0x8b, 0x01, 0xf6, 0x89, 0xae, 0xfd, 0x57, + 0x77, 0x1d, 0xad, 0x0d, 0x0c, 0x62, 0xc3, 0x3a, 0xf2, 0xec, 0xc1, 0xf9, 0x60, 0x40, 0x30, 0x92, + 0xa2, 0x56, 0x5b, 0x5f, 0x19, 0x81, 0x01, 0x81, 0x81, 0x11, 0x61, 0x0d, 0x7b, 0x57, 0x61, 0x14, + 0x66, 0x90, 0x61, 0x11, 0x95, 0x56, 0x5b, 0x50, 0x90, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, + 0x03, 0x82, 0x54, 0x16, 0x83, 0x81, 0x14, 0x5f, 0x14, 0x61, 0x14, 0x95, 0x57, 0x50, 0x50, 0x60, + 0x01, 0x91, 0x50, 0x01, 0x61, 0x14, 0x8e, 0x82, 0x82, 0x54, 0x61, 0x13, 0x5f, 0x56, 0x5b, 0x90, + 0x55, 0x61, 0x14, 0x13, 0x56, 0x5b, 0x83, 0x81, 0x10, 0x15, 0x61, 0x14, 0xf1, 0x57, 0x50, 0x61, + 0x03, 0xe8, 0x81, 0x10, 0x15, 0x61, 0x14, 0xd9, 0x57, 0x50, 0x90, 0x61, 0x14, 0xbb, 0x83, 0x60, + 0x01, 0x61, 0x14, 0xd4, 0x94, 0x01, 0x54, 0x61, 0x13, 0x5f, 0x56, 0x5b, 0x60, 0x40, 0x51, 0x91, + 0x61, 0x14, 0xc8, 0x83, 0x61, 0x11, 0x20, 0x56, 0x5b, 0x82, 0x52, 0x60, 0x20, 0x82, 0x01, 0x52, + 0x61, 0x19, 0x24, 0x56, 0x5b, 0x61, 0x14, 0x13, 0x56, 0x5b, 0x63, 0x49, 0x38, 0x45, 0xf7, 0x60, + 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x52, 0x61, 0x03, 0xe8, 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, + 0xfd, 0x5b, 0x83, 0x90, 0x63, 0x50, 0x57, 0x9b, 0x29, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, 0x04, + 0x52, 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, 0xfd, 0x5b, 0x50, 0x60, 0x40, 0x51, 0x63, 0xa3, 0x10, + 0x62, 0x4f, 0x60, 0xe0, 0x1b, 0x81, 0x52, 0x30, 0x60, 0x04, 0x82, 0x01, 0x52, 0x60, 0x20, 0x81, + 0x60, 0x24, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x20, 0x01, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, + 0x67, 0x57, 0x5f, 0x91, 0x61, 0x16, 0x08, 0x57, 0x5b, 0x50, 0x60, 0x04, 0x81, 0x10, 0x15, 0x61, + 0x15, 0xf4, 0x57, 0x80, 0x60, 0x02, 0x84, 0x92, 0x14, 0x90, 0x81, 0x15, 0x61, 0x15, 0xe9, 0x57, + 0x5b, 0x50, 0x15, 0x61, 0x13, 0xd2, 0x57, 0x50, 0x60, 0x40, 0x51, 0x63, 0xaa, 0x75, 0x17, 0xe1, + 0x60, 0xe0, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, + 0x02, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, 0x61, 0x15, 0xb7, 0x57, + 0x5b, 0x50, 0x80, 0x61, 0x15, 0x8c, 0x84, 0x84, 0x61, 0x11, 0x88, 0x56, 0x5b, 0x10, 0x61, 0x15, + 0x98, 0x57, 0x50, 0x81, 0x61, 0x13, 0xd2, 0x56, 0x5b, 0x91, 0x61, 0x15, 0xa2, 0x91, 0x61, 0x11, + 0x88, 0x56, 0x5b, 0x63, 0x03, 0x98, 0xe3, 0xfb, 0x60, 0xe1, 0x1b, 0x5f, 0x52, 0x60, 0x04, 0x52, + 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, 0xfd, 0x5b, 0x90, 0x50, 0x60, 0x20, 0x81, 0x3d, 0x60, 0x20, + 0x11, 0x61, 0x15, 0xe1, 0x57, 0x5b, 0x81, 0x61, 0x15, 0xd2, 0x60, 0x20, 0x93, 0x83, 0x61, 0x11, + 0x4f, 0x56, 0x5b, 0x81, 0x01, 0x03, 0x12, 0x61, 0x02, 0x46, 0x57, 0x51, 0x5f, 0x61, 0x15, 0x80, + 0x56, 0x5b, 0x3d, 0x91, 0x50, 0x61, 0x15, 0xc5, 0x56, 0x5b, 0x60, 0x03, 0x91, 0x50, 0x14, 0x5f, + 0x61, 0x15, 0x50, 0x56, 0x5b, 0x63, 0x4e, 0x48, 0x7b, 0x71, 0x60, 0xe0, 0x1b, 0x5f, 0x52, 0x60, + 0x21, 0x60, 0x04, 0x52, 0x60, 0x24, 0x5f, 0xfd, 0x5b, 0x90, 0x50, 0x60, 0x20, 0x81, 0x3d, 0x60, + 0x20, 0x11, 0x61, 0x16, 0x3b, 0x57, 0x5b, 0x81, 0x61, 0x16, 0x23, 0x60, 0x20, 0x93, 0x83, 0x61, + 0x11, 0x4f, 0x56, 0x5b, 0x81, 0x01, 0x03, 0x12, 0x61, 0x02, 0x46, 0x57, 0x51, 0x60, 0x04, 0x81, + 0x10, 0x15, 0x61, 0x02, 0x46, 0x57, 0x5f, 0x61, 0x15, 0x38, 0x56, 0x5b, 0x3d, 0x91, 0x50, 0x61, + 0x16, 0x16, 0x56, 0x5b, 0x61, 0x16, 0x5c, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, + 0x05, 0xf4, 0x57, 0x61, 0x05, 0xe6, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x5f, 0x61, 0x13, + 0xcc, 0x56, 0x5b, 0x90, 0x63, 0x50, 0x3a, 0x9f, 0xa3, 0x60, 0xe1, 0x1b, 0x5f, 0x52, 0x60, 0x04, + 0x52, 0x60, 0x24, 0x52, 0x60, 0x44, 0x5f, 0xfd, 0x5b, 0x60, 0x02, 0x7f, 0x9b, 0x77, 0x9b, 0x17, + 0x42, 0x2d, 0x0d, 0xf9, 0x22, 0x23, 0x01, 0x8b, 0x32, 0xb4, 0xd1, 0xfa, 0x46, 0xe0, 0x71, 0x72, + 0x3d, 0x68, 0x17, 0xe2, 0x48, 0x6d, 0x00, 0x3b, 0xec, 0xc5, 0x5f, 0x00, 0x54, 0x14, 0x61, 0x16, + 0xc7, 0x57, 0x60, 0x02, 0x7f, 0x9b, 0x77, 0x9b, 0x17, 0x42, 0x2d, 0x0d, 0xf9, 0x22, 0x23, 0x01, + 0x8b, 0x32, 0xb4, 0xd1, 0xfa, 0x46, 0xe0, 0x71, 0x72, 0x3d, 0x68, 0x17, 0xe2, 0x48, 0x6d, 0x00, + 0x3b, 0xec, 0xc5, 0x5f, 0x00, 0x55, 0x56, 0x5b, 0x63, 0x3e, 0xe5, 0xae, 0xb5, 0x60, 0xe0, 0x1b, + 0x5f, 0x52, 0x60, 0x04, 0x5f, 0xfd, 0x5b, 0x60, 0x07, 0x54, 0x5f, 0x81, 0x61, 0x17, 0x06, 0x57, + 0x5b, 0x61, 0x16, 0xed, 0x91, 0x50, 0x60, 0x05, 0x54, 0x61, 0x13, 0x5f, 0x56, 0x5b, 0x47, 0x90, + 0x80, 0x82, 0x11, 0x15, 0x61, 0x17, 0x00, 0x57, 0x61, 0x11, 0xf3, 0x91, 0x61, 0x11, 0x88, 0x56, + 0x5b, 0x50, 0x50, 0x5f, 0x90, 0x56, 0x5b, 0x50, 0x5f, 0x19, 0x81, 0x01, 0x90, 0x81, 0x11, 0x61, + 0x0d, 0x7b, 0x57, 0x61, 0x17, 0x23, 0x60, 0x01, 0x61, 0x11, 0xe7, 0x61, 0x16, 0xed, 0x93, 0x61, + 0x11, 0x95, 0x56, 0x5b, 0x61, 0x16, 0xe0, 0x56, 0x5b, 0x5f, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, + 0xa0, 0x1b, 0x03, 0x16, 0x33, 0x03, 0x61, 0x0b, 0x47, 0x57, 0x56, 0x5b, 0x60, 0x06, 0x54, 0x60, + 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x90, 0x81, 0x16, 0x90, 0x82, 0x16, 0x11, 0x61, 0x17, + 0xd5, 0x57, 0x61, 0x17, 0x5d, 0x60, 0x05, 0x54, 0x91, 0x61, 0x19, 0x9b, 0x56, 0x5b, 0x60, 0x08, + 0x54, 0x90, 0x81, 0x80, 0x82, 0x11, 0x61, 0x17, 0xc6, 0x57, 0x50, 0x50, 0x5f, 0x90, 0x5b, 0x60, + 0x07, 0x54, 0x5f, 0x91, 0x81, 0x61, 0x17, 0x9c, 0x57, 0x5b, 0x50, 0x50, 0x80, 0x82, 0x10, 0x15, + 0x61, 0x17, 0x97, 0x57, 0x61, 0x11, 0xf3, 0x92, 0x91, 0x61, 0x17, 0x91, 0x91, 0x61, 0x11, 0x88, + 0x56, 0x5b, 0x90, 0x61, 0x13, 0x5f, 0x56, 0x5b, 0x50, 0x50, 0x90, 0x56, 0x5b, 0x5f, 0x19, 0x82, + 0x01, 0x92, 0x50, 0x90, 0x82, 0x11, 0x61, 0x0d, 0x7b, 0x57, 0x60, 0x01, 0x61, 0x17, 0xb7, 0x61, + 0x17, 0xbf, 0x93, 0x61, 0x11, 0x95, 0x56, 0x5b, 0x50, 0x01, 0x54, 0x61, 0x11, 0x88, 0x56, 0x5b, + 0x5f, 0x80, 0x61, 0x17, 0x79, 0x56, 0x5b, 0x61, 0x17, 0xcf, 0x91, 0x61, 0x11, 0x88, 0x56, 0x5b, + 0x90, 0x61, 0x17, 0x6e, 0x56, 0x5b, 0x61, 0x17, 0x5d, 0x5f, 0x91, 0x61, 0x19, 0x9b, 0x56, 0x5b, + 0x90, 0x61, 0x17, 0xe8, 0x61, 0x18, 0x43, 0x56, 0x5b, 0x91, 0x82, 0x15, 0x61, 0x13, 0x59, 0x57, + 0x5f, 0x80, 0x80, 0x85, 0x81, 0x94, 0x61, 0x18, 0x01, 0x82, 0x60, 0x08, 0x54, 0x61, 0x13, 0x5f, + 0x56, 0x5b, 0x60, 0x08, 0x55, 0x60, 0x01, 0x80, 0x60, 0xa0, 0x1b, 0x03, 0x16, 0x80, 0x60, 0x40, + 0x51, 0x83, 0x81, 0x52, 0x7f, 0xd0, 0xd8, 0x95, 0x37, 0xda, 0xf7, 0xd9, 0xf2, 0xb5, 0xb2, 0x31, + 0x5d, 0x3a, 0xf4, 0x7f, 0x1f, 0xe0, 0x44, 0x19, 0x96, 0x62, 0x47, 0xff, 0xb9, 0x63, 0xb1, 0xfa, + 0x5b, 0x07, 0x7c, 0x06, 0x36, 0x60, 0x20, 0x30, 0x92, 0xa3, 0x5a, 0xf1, 0x61, 0x13, 0x42, 0x61, + 0x12, 0xaf, 0x56, 0x5b, 0x60, 0x07, 0x54, 0x15, 0x61, 0x19, 0x20, 0x57, 0x60, 0x40, 0x51, 0x63, + 0x7e, 0x34, 0x5d, 0xef, 0x60, 0xe1, 0x1b, 0x81, 0x52, 0x60, 0x20, 0x81, 0x60, 0x04, 0x81, 0x64, + 0x01, 0x62, 0x5f, 0x10, 0x00, 0x5a, 0xfa, 0x90, 0x81, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x91, + 0x61, 0x19, 0x01, 0x57, 0x5b, 0x50, 0x60, 0x40, 0x51, 0x63, 0xd8, 0xf0, 0x8a, 0xb5, 0x60, 0xe0, + 0x1b, 0x81, 0x52, 0x90, 0x60, 0x20, 0x82, 0x60, 0x04, 0x81, 0x64, 0x01, 0x62, 0x5f, 0x10, 0x01, + 0x5a, 0xfa, 0x91, 0x82, 0x15, 0x61, 0x05, 0x67, 0x57, 0x5f, 0x92, 0x61, 0x18, 0xe0, 0x57, 0x5b, + 0x50, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x82, 0x16, 0x60, 0x01, 0x60, 0x01, 0x60, + 0x40, 0x1b, 0x03, 0x82, 0x16, 0x11, 0x15, 0x61, 0x17, 0x00, 0x57, 0x61, 0x18, 0xcc, 0x91, 0x61, + 0x18, 0xc7, 0x91, 0x61, 0x12, 0x1a, 0x56, 0x5b, 0x61, 0x19, 0x9b, 0x56, 0x5b, 0x60, 0x08, 0x54, + 0x80, 0x82, 0x11, 0x15, 0x61, 0x17, 0x00, 0x57, 0x61, 0x11, 0xf3, 0x91, 0x61, 0x11, 0x88, 0x56, + 0x5b, 0x61, 0x18, 0xfa, 0x91, 0x92, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, 0x60, + 0x57, 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x90, 0x5f, 0x61, 0x18, 0x9f, + 0x56, 0x5b, 0x61, 0x19, 0x1a, 0x91, 0x50, 0x60, 0x20, 0x3d, 0x60, 0x20, 0x11, 0x61, 0x05, 0x60, + 0x57, 0x61, 0x05, 0x51, 0x81, 0x83, 0x61, 0x11, 0x4f, 0x56, 0x5b, 0x5f, 0x61, 0x18, 0x74, 0x56, + 0x5b, 0x5f, 0x90, 0x56, 0x5b, 0x60, 0x07, 0x54, 0x68, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x81, 0x10, 0x15, 0x61, 0x11, 0x3b, 0x57, 0x60, 0x01, 0x81, 0x01, 0x60, 0x07, 0x55, + 0x60, 0x07, 0x54, 0x81, 0x10, 0x15, 0x61, 0x11, 0xb1, 0x57, 0x60, 0x07, 0x5f, 0x52, 0x60, 0x01, + 0x1b, 0x7f, 0xa6, 0x6c, 0xc9, 0x28, 0xb5, 0xed, 0xb8, 0x2a, 0xf9, 0xbd, 0x49, 0x92, 0x29, 0x54, + 0x15, 0x5a, 0xb7, 0xb0, 0x94, 0x26, 0x94, 0xbe, 0xa4, 0xce, 0x44, 0x66, 0x1d, 0x9a, 0x87, 0x36, + 0xc6, 0x88, 0x01, 0x90, 0x60, 0x20, 0x81, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x80, + 0x60, 0x01, 0x94, 0x51, 0x16, 0x16, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x19, 0x85, + 0x54, 0x16, 0x17, 0x84, 0x55, 0x01, 0x51, 0x91, 0x01, 0x55, 0x56, 0x5b, 0x60, 0x07, 0x54, 0x80, + 0x15, 0x61, 0x17, 0x00, 0x57, 0x60, 0x07, 0x54, 0x15, 0x61, 0x11, 0xb1, 0x57, 0x60, 0x07, 0x5f, + 0x52, 0x7f, 0xa6, 0x6c, 0xc9, 0x28, 0xb5, 0xed, 0xb8, 0x2a, 0xf9, 0xbd, 0x49, 0x92, 0x29, 0x54, + 0x15, 0x5a, 0xb7, 0xb0, 0x94, 0x26, 0x94, 0xbe, 0xa4, 0xce, 0x44, 0x66, 0x1d, 0x9a, 0x87, 0x36, + 0xc6, 0x88, 0x54, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x92, 0x83, 0x16, 0x92, 0x16, + 0x82, 0x11, 0x15, 0x61, 0x17, 0x00, 0x57, 0x5f, 0x19, 0x81, 0x01, 0x90, 0x81, 0x11, 0x90, 0x81, + 0x61, 0x0d, 0x7b, 0x57, 0x82, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x61, 0x1a, 0x05, + 0x83, 0x61, 0x11, 0x95, 0x56, 0x5b, 0x50, 0x54, 0x16, 0x10, 0x61, 0x1a, 0x5e, 0x57, 0x5f, 0x91, + 0x61, 0x0d, 0x7b, 0x57, 0x90, 0x5b, 0x60, 0x01, 0x81, 0x01, 0x80, 0x82, 0x11, 0x61, 0x0d, 0x7b, + 0x57, 0x82, 0x11, 0x15, 0x61, 0x1a, 0x5e, 0x57, 0x61, 0x1a, 0x31, 0x82, 0x82, 0x61, 0x13, 0x5f, + 0x56, 0x5b, 0x60, 0x01, 0x1c, 0x90, 0x83, 0x60, 0x01, 0x60, 0x01, 0x60, 0x40, 0x1b, 0x03, 0x61, + 0x1a, 0x47, 0x84, 0x61, 0x11, 0x95, 0x56, 0x5b, 0x50, 0x54, 0x16, 0x10, 0x15, 0x61, 0x1a, 0x56, + 0x57, 0x50, 0x61, 0x1a, 0x15, 0x56, 0x5b, 0x91, 0x50, 0x90, 0x61, 0x1a, 0x15, 0x56, 0x5b, 0x60, + 0x01, 0x92, 0x50, 0x61, 0x1a, 0x6c, 0x91, 0x50, 0x61, 0x11, 0x95, 0x56, 0x5b, 0x50, 0x01, 0x54, + 0x90, 0x56, 0xfe, 0xa2, 0x64, 0x69, 0x70, 0x66, 0x73, 0x58, 0x22, 0x12, 0x20, 0x65, 0x23, 0x47, + 0x92, 0x08, 0x72, 0xa9, 0xe7, 0x3c, 0x6c, 0x9a, 0x6e, 0xa3, 0xb4, 0x36, 0x1a, 0xb4, 0x2f, 0xf2, + 0x2d, 0x38, 0x67, 0x2f, 0x6f, 0xf9, 0x87, 0x39, 0x30, 0x42, 0x1d, 0xf2, 0xac, 0x64, 0x73, 0x6f, + 0x6c, 0x63, 0x43, 0x00, 0x08, 0x1e, 0x00, 0x33, +]; diff --git a/crates/ethereum/evm/src/hardfork/bytecodes/gamma/blocker.bin b/crates/ethereum/evm/src/hardfork/bytecodes/gamma/blocker.bin new file mode 100644 index 0000000000..be596ec050 Binary files /dev/null and b/crates/ethereum/evm/src/hardfork/bytecodes/gamma/blocker.bin differ diff --git a/crates/ethereum/evm/src/hardfork/bytecodes/gamma/governance.bin b/crates/ethereum/evm/src/hardfork/bytecodes/gamma/governance.bin new file mode 100644 index 0000000000..2c54774adc Binary files /dev/null and b/crates/ethereum/evm/src/hardfork/bytecodes/gamma/governance.bin differ diff --git a/crates/ethereum/evm/src/hardfork/bytecodes/gamma/governance_config.bin b/crates/ethereum/evm/src/hardfork/bytecodes/gamma/governance_config.bin new file mode 100644 index 0000000000..27eff6352e Binary files /dev/null and b/crates/ethereum/evm/src/hardfork/bytecodes/gamma/governance_config.bin differ diff --git a/crates/ethereum/evm/src/hardfork/bytecodes/gamma/native_oracle.bin b/crates/ethereum/evm/src/hardfork/bytecodes/gamma/native_oracle.bin new file mode 100644 index 0000000000..caf4bf12d6 Binary files /dev/null and b/crates/ethereum/evm/src/hardfork/bytecodes/gamma/native_oracle.bin differ diff --git a/crates/ethereum/evm/src/hardfork/bytecodes/gamma/oracle_request_queue.bin b/crates/ethereum/evm/src/hardfork/bytecodes/gamma/oracle_request_queue.bin new file mode 100644 index 0000000000..c8766e6a17 Binary files /dev/null and b/crates/ethereum/evm/src/hardfork/bytecodes/gamma/oracle_request_queue.bin differ diff --git a/crates/ethereum/evm/src/hardfork/bytecodes/gamma/performance_tracker.bin b/crates/ethereum/evm/src/hardfork/bytecodes/gamma/performance_tracker.bin new file mode 100644 index 0000000000..43c9d18400 Binary files /dev/null and b/crates/ethereum/evm/src/hardfork/bytecodes/gamma/performance_tracker.bin differ diff --git a/crates/ethereum/evm/src/hardfork/bytecodes/gamma/reconfiguration.bin b/crates/ethereum/evm/src/hardfork/bytecodes/gamma/reconfiguration.bin new file mode 100644 index 0000000000..73c2ad0555 Binary files /dev/null and b/crates/ethereum/evm/src/hardfork/bytecodes/gamma/reconfiguration.bin differ diff --git a/crates/ethereum/evm/src/hardfork/bytecodes/gamma/stakepool.bin b/crates/ethereum/evm/src/hardfork/bytecodes/gamma/stakepool.bin new file mode 100644 index 0000000000..e11bc6b555 Binary files /dev/null and b/crates/ethereum/evm/src/hardfork/bytecodes/gamma/stakepool.bin differ diff --git a/crates/ethereum/evm/src/hardfork/bytecodes/gamma/staking.bin b/crates/ethereum/evm/src/hardfork/bytecodes/gamma/staking.bin new file mode 100644 index 0000000000..78f68a6c92 Binary files /dev/null and b/crates/ethereum/evm/src/hardfork/bytecodes/gamma/staking.bin differ diff --git a/crates/ethereum/evm/src/hardfork/bytecodes/gamma/staking_config.bin b/crates/ethereum/evm/src/hardfork/bytecodes/gamma/staking_config.bin new file mode 100644 index 0000000000..4da31c700e Binary files /dev/null and b/crates/ethereum/evm/src/hardfork/bytecodes/gamma/staking_config.bin differ diff --git a/crates/ethereum/evm/src/hardfork/bytecodes/gamma/validator_config.bin b/crates/ethereum/evm/src/hardfork/bytecodes/gamma/validator_config.bin new file mode 100644 index 0000000000..a365856118 Binary files /dev/null and b/crates/ethereum/evm/src/hardfork/bytecodes/gamma/validator_config.bin differ diff --git a/crates/ethereum/evm/src/hardfork/bytecodes/gamma/validator_management.bin b/crates/ethereum/evm/src/hardfork/bytecodes/gamma/validator_management.bin new file mode 100644 index 0000000000..a938d2d7db Binary files /dev/null and b/crates/ethereum/evm/src/hardfork/bytecodes/gamma/validator_management.bin differ diff --git a/crates/ethereum/evm/src/hardfork/common.rs b/crates/ethereum/evm/src/hardfork/common.rs new file mode 100644 index 0000000000..0b5b8877f6 --- /dev/null +++ b/crates/ethereum/evm/src/hardfork/common.rs @@ -0,0 +1,40 @@ +//! Common types and traits for Gravity hardfork state changes. +//! +//! Each hardfork module (alpha, beta, gamma, ...) defines a set of +//! system contract bytecode upgrades. This module provides a trait +//! that standardizes how upgrade tables are exposed, enabling generic +//! verification logic in tests. + +use alloy_primitives::{Address, B256, U256}; + +/// A single bytecode replacement: target address → new runtime bytecode. +pub type BytecodeUpgrade = (Address, &'static [u8]); + +/// A single storage patch: target address, slot, value. +pub type StoragePatch = (Address, B256, U256); + +/// Trait implemented by each hardfork module to describe its upgrades. +/// +/// This enables generic test helpers that work across any hardfork: +/// ```ignore +/// fn verify_hardfork_applied(provider: &P, block: u64) { ... } +/// ``` +pub trait HardforkUpgrades { + /// The human-readable name of this hardfork (e.g. "Gamma"). + fn name(&self) -> &'static str; + + /// System contract bytecode upgrades: `(address, new_bytecode)` pairs. + fn system_upgrades(&self) -> &'static [BytecodeUpgrade]; + + /// Additional non-system contract bytecode upgrades (e.g. StakePool instances). + /// Returns `(address, new_bytecode)` pairs. + fn extra_upgrades(&self) -> &'static [BytecodeUpgrade] { + &[] + } + + /// Storage patches to apply alongside bytecode replacements + /// (e.g. ReentrancyGuard initialization). + fn storage_patches(&self) -> &'static [StoragePatch] { + &[] + } +} diff --git a/crates/ethereum/evm/src/hardfork/delta.rs b/crates/ethereum/evm/src/hardfork/delta.rs new file mode 100644 index 0000000000..958b06f3b6 --- /dev/null +++ b/crates/ethereum/evm/src/hardfork/delta.rs @@ -0,0 +1,80 @@ +//! Delta hardfork: activate Governance contract +//! +//! The Governance contract was deployed via BSC-style bytecode placement during genesis, +//! which skips the Solidity constructor. As a result, the `Ownable(initialOwner)` constructor +//! never ran, leaving `_owner` as `address(0)`. This prevents the owner from calling +//! `addExecutor()` / `removeExecutor()`, which in turn makes `execute()` permanently +//! unreachable. +//! +//! This hardfork writes the correct owner address to storage slot 0 of the Governance +//! contract, restoring the full proposal execution lifecycle. +//! +//! Additionally, for E2E testing, it overrides GovernanceConfig storage to enable +//! fast governance proposals (10-second voting, minimal thresholds). + +use alloy_primitives::{address, Address}; + +/// Governance contract system address +pub const GOVERNANCE_ADDRESS: Address = address!("00000000000000000000000000000001625F3000"); + +/// Storage slot for `Ownable._owner` (slot 0 in standard Solidity layout) +/// +/// Storage layout (from `forge inspect Governance storage-layout`): +/// - slot 0: `_owner` (address, 20 bytes, offset 0) +/// - slot 1: `_pendingOwner` (address, 20 bytes, offset 0) + `nextProposalId` (uint64, 8 bytes, offset 20) +/// - slot 2: `_proposals` mapping base +pub const GOVERNANCE_OWNER_SLOT: [u8; 32] = [0u8; 32]; + +/// Storage slot for `nextProposalId` — packed in slot 1 at byte offset 20. +/// `_pendingOwner` occupies bytes 0-19 of slot 1 (initially address(0)). +/// `nextProposalId` occupies bytes 20-27 of slot 1 (uint64). +/// To set nextProposalId=1 with _pendingOwner=0, the slot value = 1 << 160. +pub const GOVERNANCE_NEXT_PROPOSAL_ID_SLOT: [u8; 32] = { + let mut s = [0u8; 32]; + s[31] = 1; // slot 1 + s +}; +/// nextProposalId=1, shifted left by 160 bits (20 bytes offset in packed storage). +/// As [u8; 32]: 0x0000000000000001_000000000000000000000000_00000000 +/// ^^^^^^^^^^^^^^^^^^ nextProposalId=1 at bytes 20-27 +pub const GOVERNANCE_NEXT_PROPOSAL_ID_VALUE: [u8; 32] = { + let mut v = [0u8; 32]; + // nextProposalId = 1 at offset 20 bytes from LSB + // In big-endian 32-byte representation: byte index = 32 - 20 - 8 = 4 + // So v[4..12] should be 0x0000000000000001 + v[11] = 1; + v +}; + +/// The address to set as Governance owner (faucet / hardhat #0 for E2E testing). +/// +/// TODO: Replace with the actual multisig / admin address before mainnet deployment. +pub const GOVERNANCE_OWNER: Address = address!("f39Fd6e51aad88F6F4ce6aB8827279cffFb92266"); + +// ── GovernanceConfig overrides for E2E testing ────────────────────────── + +/// GovernanceConfig contract system address +pub const GOVERNANCE_CONFIG_ADDRESS: Address = + address!("00000000000000000000000000000001625F1004"); + +/// GovernanceConfig storage layout (Solidity sequential packing): +/// slot 0: minVotingThreshold (uint128) +/// slot 1: requiredProposerStake (uint256) +/// slot 2: votingDurationMicros (uint64) +pub const GOV_CONFIG_SLOT_MIN_THRESHOLD: [u8; 32] = [0u8; 32]; +pub const GOV_CONFIG_SLOT_PROPOSER_STAKE: [u8; 32] = { + let mut s = [0u8; 32]; + s[31] = 1; + s +}; +pub const GOV_CONFIG_SLOT_VOTING_DURATION: [u8; 32] = { + let mut s = [0u8; 32]; + s[31] = 2; + s +}; + +/// Test values: 1 vote quorum, 1 wei proposer stake, 10-second voting period. +pub const GOV_CONFIG_MIN_THRESHOLD: u128 = 1; +pub const GOV_CONFIG_PROPOSER_STAKE: u128 = 1; +/// 10 seconds in microseconds +pub const GOV_CONFIG_VOTING_DURATION: u64 = 10_000_000; diff --git a/crates/ethereum/evm/src/hardfork/gamma.rs b/crates/ethereum/evm/src/hardfork/gamma.rs new file mode 100644 index 0000000000..7d33de521e --- /dev/null +++ b/crates/ethereum/evm/src/hardfork/gamma.rs @@ -0,0 +1,113 @@ +//! Gamma hardfork: contract bytecode upgrades +//! +//! Upgrades 11 system contracts at fixed addresses + all `StakePool` instances. +//! Also initializes `ReentrancyGuard` storage for `StakePool` contracts. +//! +//! Bytecodes are stored as external `.bin` files under `bytecodes/gamma/` +//! and loaded at compile time via `include_bytes!()`. + +use alloy_primitives::{address, Address}; + +// ─── System contract bytecodes (loaded from external .bin files) ───────────── + +/// `StakingConfig` runtime bytecode (1608 bytes) +pub const STAKING_CONFIG_BYTECODE: &[u8] = include_bytes!("bytecodes/gamma/staking_config.bin"); +/// `StakingConfig` system address +pub const STAKING_CONFIG_ADDRESS: Address = address!("00000000000000000000000000000001625F1001"); + +/// `ValidatorConfig` runtime bytecode (2266 bytes) +pub const VALIDATOR_CONFIG_BYTECODE: &[u8] = include_bytes!("bytecodes/gamma/validator_config.bin"); +/// `ValidatorConfig` system address +pub const VALIDATOR_CONFIG_ADDRESS: Address = address!("00000000000000000000000000000001625F1002"); + +/// `GovernanceConfig` runtime bytecode (1575 bytes) +pub const GOVERNANCE_CONFIG_BYTECODE: &[u8] = + include_bytes!("bytecodes/gamma/governance_config.bin"); +/// `GovernanceConfig` system address +pub const GOVERNANCE_CONFIG_ADDRESS: Address = address!("00000000000000000000000000000001625f1004"); + +/// `Staking` runtime bytecode (11054 bytes) +pub const STAKING_BYTECODE: &[u8] = include_bytes!("bytecodes/gamma/staking.bin"); +/// `Staking` system address +pub const STAKING_ADDRESS: Address = address!("00000000000000000000000000000001625F2000"); + +/// `ValidatorManagement` runtime bytecode (16427 bytes) +pub const VALIDATOR_MANAGEMENT_BYTECODE: &[u8] = + include_bytes!("bytecodes/gamma/validator_management.bin"); +/// `ValidatorManagement` system address +pub const VALIDATOR_MANAGEMENT_ADDRESS: Address = + address!("00000000000000000000000000000001625F2001"); + +/// `Reconfiguration` runtime bytecode (5721 bytes) +pub const RECONFIGURATION_BYTECODE: &[u8] = include_bytes!("bytecodes/gamma/reconfiguration.bin"); +/// `Reconfiguration` system address +pub const RECONFIGURATION_ADDRESS: Address = address!("00000000000000000000000000000001625F2003"); + +/// `Blocker` runtime bytecode (1858 bytes) +pub const BLOCKER_BYTECODE: &[u8] = include_bytes!("bytecodes/gamma/blocker.bin"); +/// `Blocker` system address +pub const BLOCKER_ADDRESS: Address = address!("00000000000000000000000000000001625F2004"); + +/// `PerformanceTracker` runtime bytecode (1742 bytes) +pub const PERFORMANCE_TRACKER_BYTECODE: &[u8] = + include_bytes!("bytecodes/gamma/performance_tracker.bin"); +/// `PerformanceTracker` system address +pub const PERFORMANCE_TRACKER_ADDRESS: Address = + address!("00000000000000000000000000000001625F2005"); + +/// `Governance` runtime bytecode (8552 bytes) +pub const GOVERNANCE_BYTECODE: &[u8] = include_bytes!("bytecodes/gamma/governance.bin"); +/// `Governance` system address +pub const GOVERNANCE_ADDRESS: Address = address!("00000000000000000000000000000001625F3000"); + +/// `NativeOracle` runtime bytecode (4578 bytes) +pub const NATIVE_ORACLE_BYTECODE: &[u8] = include_bytes!("bytecodes/gamma/native_oracle.bin"); +/// `NativeOracle` system address +pub const NATIVE_ORACLE_ADDRESS: Address = address!("00000000000000000000000000000001625f4000"); + +/// `OracleRequestQueue` runtime bytecode (3522 bytes) +pub const ORACLE_REQUEST_QUEUE_BYTECODE: &[u8] = + include_bytes!("bytecodes/gamma/oracle_request_queue.bin"); +/// `OracleRequestQueue` system address +pub const ORACLE_REQUEST_QUEUE_ADDRESS: Address = + address!("00000000000000000000000000000001625F4002"); + +// ─── StakePool ─────────────────────────────────────────────────────────────── + +/// `StakePool` runtime bytecode (6909 bytes) +pub const STAKEPOOL_BYTECODE: &[u8] = include_bytes!("bytecodes/gamma/stakepool.bin"); + +/// `StakePool` contract addresses to upgrade during Gamma hardfork. +/// These must be updated with all pool addresses from the live chain before deployment. +pub const STAKEPOOL_ADDRESSES: &[Address] = &[ + // StakePool created by Genesis.initialize for the initial validator + address!("33f4ee289578b2ff35ac3ffa46ea2e97557da32c"), +]; + +// ─── Upgrade table & ReentrancyGuard ───────────────────────────────────────── + +/// All system contract upgrades for Gamma hardfork: (address, `new_bytecode`). +pub const GAMMA_SYSTEM_UPGRADES: &[(Address, &[u8])] = &[ + (STAKING_CONFIG_ADDRESS, STAKING_CONFIG_BYTECODE), + (VALIDATOR_CONFIG_ADDRESS, VALIDATOR_CONFIG_BYTECODE), + (GOVERNANCE_CONFIG_ADDRESS, GOVERNANCE_CONFIG_BYTECODE), + (STAKING_ADDRESS, STAKING_BYTECODE), + (VALIDATOR_MANAGEMENT_ADDRESS, VALIDATOR_MANAGEMENT_BYTECODE), + (RECONFIGURATION_ADDRESS, RECONFIGURATION_BYTECODE), + (BLOCKER_ADDRESS, BLOCKER_BYTECODE), + (PERFORMANCE_TRACKER_ADDRESS, PERFORMANCE_TRACKER_BYTECODE), + (GOVERNANCE_ADDRESS, GOVERNANCE_BYTECODE), + (NATIVE_ORACLE_ADDRESS, NATIVE_ORACLE_BYTECODE), + (ORACLE_REQUEST_QUEUE_ADDRESS, ORACLE_REQUEST_QUEUE_BYTECODE), +]; + +/// ERC-7201 namespaced storage slot for `ReentrancyGuard` (from `OpenZeppelin` v5) +/// keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.ReentrancyGuard")) - 1)) & +/// ~bytes32(uint256(0xff)) +pub const REENTRANCY_GUARD_SLOT: [u8; 32] = [ + 0x9b, 0x77, 0x9b, 0x17, 0x42, 0x2d, 0x0d, 0xf9, 0x22, 0x23, 0x01, 0x8b, 0x32, 0xb4, 0xd1, 0xfa, + 0x46, 0xe0, 0x71, 0x72, 0x3d, 0x68, 0x17, 0xe2, 0x48, 0x6d, 0x00, 0x3b, 0xec, 0xc5, 0x5f, 0x00, +]; + +/// `NOT_ENTERED` value for `ReentrancyGuard` (must be written after bytecode replacement) +pub const REENTRANCY_GUARD_NOT_ENTERED: u8 = 1; diff --git a/crates/ethereum/evm/src/hardfork/mod.rs b/crates/ethereum/evm/src/hardfork/mod.rs new file mode 100644 index 0000000000..235d7fcfc1 --- /dev/null +++ b/crates/ethereum/evm/src/hardfork/mod.rs @@ -0,0 +1,11 @@ +//! Gravity-specific hardfork state changes. +//! +//! Each hardfork (alpha, beta, gamma, ...) should be added as a submodule +//! on the corresponding release branch. The `common` module provides shared +//! traits and types that all hardfork modules implement. + +pub mod alpha; +pub mod beta; +pub mod common; +pub mod delta; +pub mod gamma; diff --git a/crates/ethereum/evm/src/lib.rs b/crates/ethereum/evm/src/lib.rs index cce2586627..6cc7dc0ba2 100644 --- a/crates/ethereum/evm/src/lib.rs +++ b/crates/ethereum/evm/src/lib.rs @@ -70,6 +70,7 @@ pub mod execute { pub type EthExecutorProvider = EthEvmConfig; } +pub mod hardfork; pub mod parallel_execute; mod build; diff --git a/crates/ethereum/evm/src/parallel_execute.rs b/crates/ethereum/evm/src/parallel_execute.rs index ecafa3ceed..aeb1dceb2c 100644 --- a/crates/ethereum/evm/src/parallel_execute.rs +++ b/crates/ethereum/evm/src/parallel_execute.rs @@ -10,7 +10,7 @@ use alloy_evm::{ precompiles::DynPrecompile, EvmEnv, }; -use alloy_primitives::{map::HashMap, Address}; +use alloy_primitives::{keccak256, map::HashMap, Address, Bytes}; use gravity_primitives::get_gravity_config; use grevm::{ParallelBundleState, ParallelState, Scheduler}; use reth_chainspec::{EthChainSpec, EthereumHardfork, EthereumHardforks, Hardforks}; @@ -25,6 +25,7 @@ use reth_evm::{ use reth_execution_types::BlockExecutionResult; use reth_primitives_traits::{BlockBody, NodePrimitives, RecoveredBlock, SignedTransaction}; use revm::{ + bytecode::Bytecode, context::{ result::{ExecutionResult, HaltReason}, TxEnv, @@ -191,10 +192,30 @@ where *balance_increments.entry(dao_fork::DAO_HARDFORK_BENEFICIARY).or_default() += drained_balance; } + // Gravity Alpha hardfork: upgrade Staking and StakePool contract code + if self.chain_spec.alpha_transitions_at_block(block.number()) { + Self::apply_alpha(state)?; + } + // Gravity Beta hardfork: upgrade StakePool contract code only + if self.chain_spec.beta_transitions_at_block(block.number()) { + Self::apply_beta(state)?; + } + // increment balances state .increment_balances(balance_increments.clone()) .map_err(|_| BlockValidationError::IncrementBalanceFailed)?; + + // Gravity Gamma hardfork: upgrade system contract bytecodes + if self.chain_spec.gamma_transitions_at_block(block.number()) { + Self::apply_gamma(state)?; + } + + // Gravity Delta hardfork: activate Governance contract (set owner) + if self.chain_spec.delta_transitions_at_block(block.number()) { + Self::apply_delta(state)?; + } + // call state hook with changes due to balance increments. self.system_caller.try_on_state_with(|| { balance_increment_state(&balance_increments, state).map(|state| { @@ -207,6 +228,315 @@ where Ok(requests) } + + /// Apply Alpha hardfork: upgrade Staking and `StakePool` contract bytecodes. + fn apply_alpha(state: &mut ParallelState) -> Result<(), BlockExecutionError> { + use crate::hardfork::alpha::{ + STAKEPOOL_ADDRESSES, STAKEPOOL_ALPHA_RUNTIME_BYTECODE, STAKING_ADDRESS, + STAKING_ALPHA_RUNTIME_BYTECODE, + }; + + let mut hardfork_changes: EvmState = EvmState::default(); + + // Upgrade Staking contract + let new_bytecode = Bytecode::new_raw(Bytes::from_static(STAKING_ALPHA_RUNTIME_BYTECODE)); + let code_hash = keccak256(STAKING_ALPHA_RUNTIME_BYTECODE); + { + let staking_account = state + .load_mut_cache_account(STAKING_ADDRESS) + .map_err(|_| BlockValidationError::IncrementBalanceFailed)?; + if let Some(ref info) = staking_account.account { + let mut new_info = info.clone(); + new_info.code_hash = code_hash; + new_info.code = Some(new_bytecode.clone()); + hardfork_changes.insert( + STAKING_ADDRESS, + Account { + info: new_info, + storage: Default::default(), + status: AccountStatus::Touched, + transaction_id: 0, + }, + ); + } + } + state.cache.contracts.insert(code_hash, new_bytecode); + + // Upgrade all StakePool contracts + let pool_bytecode = Bytecode::new_raw(Bytes::from_static(STAKEPOOL_ALPHA_RUNTIME_BYTECODE)); + let pool_code_hash = keccak256(STAKEPOOL_ALPHA_RUNTIME_BYTECODE); + for pool_address in STAKEPOOL_ADDRESSES { + let pool_account = state + .load_mut_cache_account(pool_address) + .map_err(|_| BlockValidationError::IncrementBalanceFailed)?; + if let Some(ref info) = pool_account.account { + let mut new_info = info.clone(); + new_info.code_hash = pool_code_hash; + new_info.code = Some(pool_bytecode.clone()); + hardfork_changes.insert( + pool_address, + Account { + info: new_info, + storage: Default::default(), + status: AccountStatus::Touched, + transaction_id: 0, + }, + ); + } + } + state.cache.contracts.insert(pool_code_hash, pool_bytecode); + + state.commit(hardfork_changes); + Ok(()) + } + + /// Apply Beta hardfork: upgrade `StakePool` contract bytecodes only. + fn apply_beta(state: &mut ParallelState) -> Result<(), BlockExecutionError> { + use crate::hardfork::beta::{STAKEPOOL_ADDRESSES, STAKEPOOL_BETA_RUNTIME_BYTECODE}; + + let mut hardfork_changes: EvmState = EvmState::default(); + + let pool_bytecode = Bytecode::new_raw(Bytes::from_static(STAKEPOOL_BETA_RUNTIME_BYTECODE)); + let pool_code_hash = keccak256(STAKEPOOL_BETA_RUNTIME_BYTECODE); + for pool_address in STAKEPOOL_ADDRESSES { + let pool_account = state + .load_mut_cache_account(pool_address) + .map_err(|_| BlockValidationError::IncrementBalanceFailed)?; + if let Some(ref info) = pool_account.account { + let mut new_info = info.clone(); + new_info.code_hash = pool_code_hash; + new_info.code = Some(pool_bytecode.clone()); + hardfork_changes.insert( + pool_address, + Account { + info: new_info, + storage: Default::default(), + status: AccountStatus::Touched, + transaction_id: 0, + }, + ); + } + } + state.cache.contracts.insert(pool_code_hash, pool_bytecode); + + state.commit(hardfork_changes); + Ok(()) + } + + /// Apply Gamma hardfork: upgrade 11 system contracts + all `StakePool` instances. + /// + /// This function replaces the runtime bytecode of each system contract at its fixed address, + /// then replaces all `StakePool` instances with new bytecode and initializes their + /// `ReentrancyGuard` storage slot. + fn apply_gamma(state: &mut ParallelState) -> Result<(), BlockExecutionError> { + use crate::hardfork::gamma::{ + GAMMA_SYSTEM_UPGRADES, REENTRANCY_GUARD_NOT_ENTERED, REENTRANCY_GUARD_SLOT, + STAKEPOOL_ADDRESSES, STAKEPOOL_BYTECODE, + }; + use alloy_primitives::{keccak256, Bytes}; + use revm::bytecode::Bytecode; + + let mut hardfork_changes: EvmState = EvmState::default(); + + // 1. Upgrade all system contracts + for (addr, bytecode_bytes) in GAMMA_SYSTEM_UPGRADES { + let new_bytecode = Bytecode::new_raw(Bytes::from_static(bytecode_bytes)); + let code_hash = keccak256(bytecode_bytes); + { + let account = state + .load_mut_cache_account(*addr) + .map_err(|_| BlockValidationError::IncrementBalanceFailed)?; + if let Some(ref info) = account.account { + let mut new_info = info.clone(); + new_info.code_hash = code_hash; + new_info.code = Some(new_bytecode.clone()); + hardfork_changes.insert( + *addr, + Account { + info: new_info, + storage: Default::default(), + status: AccountStatus::Touched, + transaction_id: 0, + }, + ); + } + } + state.cache.contracts.insert(code_hash, new_bytecode); + } + + // 2. Upgrade all StakePool instances + if !STAKEPOOL_ADDRESSES.is_empty() { + let pool_bytecode = Bytecode::new_raw(Bytes::from_static(STAKEPOOL_BYTECODE)); + let pool_code_hash = keccak256(STAKEPOOL_BYTECODE); + for pool_address in STAKEPOOL_ADDRESSES { + let pool_account = state + .load_mut_cache_account(*pool_address) + .map_err(|_| BlockValidationError::IncrementBalanceFailed)?; + if let Some(ref info) = pool_account.account { + let mut new_info = info.clone(); + new_info.code_hash = pool_code_hash; + new_info.code = Some(pool_bytecode.clone()); + hardfork_changes.insert( + *pool_address, + Account { + info: new_info, + storage: Default::default(), + status: AccountStatus::Touched, + transaction_id: 0, + }, + ); + } + } + state.cache.contracts.insert(pool_code_hash, pool_bytecode); + } + + // 3. Initialize ReentrancyGuard storage for all StakePool instances + // The bytecode replacement doesn't run constructors, so the ERC-7201 + // namespaced slot is uninitialized (0). We must set it to NOT_ENTERED (1). + let guard_slot = alloy_primitives::U256::from_be_bytes(REENTRANCY_GUARD_SLOT); + let guard_value = alloy_primitives::U256::from(REENTRANCY_GUARD_NOT_ENTERED); + for pool_address in STAKEPOOL_ADDRESSES { + state + .load_mut_cache_account(*pool_address) + .map_err(|_| BlockValidationError::IncrementBalanceFailed)?; + // Set the storage slot directly in the account's storage changes + if let Some(entry) = hardfork_changes.get_mut(pool_address) { + entry.storage.insert( + guard_slot, + revm::state::EvmStorageSlot::new_changed( + alloy_primitives::U256::ZERO, + guard_value, + 0, + ), + ); + } + } + + // Commit all changes to create transitions for database persistence + state.commit(hardfork_changes); + Ok(()) + } + + /// Apply Delta hardfork: set Governance contract owner and override GovernanceConfig. + /// + /// The Governance contract was deployed via BSC-style bytecode placement which skips + /// the constructor. This writes the `Ownable._owner` storage slot (slot 0) to restore + /// the full governance lifecycle (addExecutor → execute proposals). + /// + /// Additionally, overrides GovernanceConfig storage for E2E testing: + /// minimal thresholds and 10-second voting duration. + fn apply_delta(state: &mut ParallelState) -> Result<(), BlockExecutionError> { + use crate::hardfork::delta::{ + GOVERNANCE_ADDRESS, GOVERNANCE_OWNER, GOVERNANCE_OWNER_SLOT, + GOVERNANCE_NEXT_PROPOSAL_ID_SLOT, GOVERNANCE_NEXT_PROPOSAL_ID_VALUE, + GOVERNANCE_CONFIG_ADDRESS, + GOV_CONFIG_SLOT_MIN_THRESHOLD, GOV_CONFIG_MIN_THRESHOLD, + GOV_CONFIG_SLOT_PROPOSER_STAKE, GOV_CONFIG_PROPOSER_STAKE, + GOV_CONFIG_SLOT_VOTING_DURATION, GOV_CONFIG_VOTING_DURATION, + }; + use revm::state::EvmStorageSlot; + + let mut hardfork_changes: EvmState = EvmState::default(); + + // 1. Set Governance owner (slot 0) and nextProposalId (packed in slot 1 at offset 20) + { + let account = state + .load_mut_cache_account(GOVERNANCE_ADDRESS) + .map_err(|_| BlockValidationError::IncrementBalanceFailed)?; + + if let Some(ref info) = account.account { + let new_info = info.clone(); + let owner_slot = alloy_primitives::U256::from_be_bytes(GOVERNANCE_OWNER_SLOT); + let owner_value = + alloy_primitives::U256::from_be_bytes(GOVERNANCE_OWNER.into_word().0); + + let next_id_slot = alloy_primitives::U256::from_be_bytes(GOVERNANCE_NEXT_PROPOSAL_ID_SLOT); + let next_id_value = alloy_primitives::U256::from_be_bytes(GOVERNANCE_NEXT_PROPOSAL_ID_VALUE); + + let mut storage = revm::state::EvmStorage::default(); + storage.insert( + owner_slot, + EvmStorageSlot::new_changed( + alloy_primitives::U256::ZERO, + owner_value, + 0, + ), + ); + storage.insert( + next_id_slot, + EvmStorageSlot::new_changed( + alloy_primitives::U256::ZERO, + next_id_value, + 0, + ), + ); + + hardfork_changes.insert( + GOVERNANCE_ADDRESS, + Account { + info: new_info, + storage, + status: AccountStatus::Touched, + transaction_id: 0, + }, + ); + } + } + + // 2. Override GovernanceConfig for E2E testing: + // - minVotingThreshold = 1 (slot 0) + // - requiredProposerStake = 1 (slot 1) + // - votingDurationMicros = 10_000_000 / 10s (slot 2) + // This bypasses the contract's MIN_VOTING_DURATION = 1h validation. + { + let config_account = state + .load_mut_cache_account(GOVERNANCE_CONFIG_ADDRESS) + .map_err(|_| BlockValidationError::IncrementBalanceFailed)?; + + if let Some(ref info) = config_account.account { + let new_info = info.clone(); + let mut storage = revm::state::EvmStorage::default(); + + storage.insert( + alloy_primitives::U256::from_be_bytes(GOV_CONFIG_SLOT_MIN_THRESHOLD), + EvmStorageSlot::new_changed( + alloy_primitives::U256::ZERO, + alloy_primitives::U256::from(GOV_CONFIG_MIN_THRESHOLD), + 0, + ), + ); + storage.insert( + alloy_primitives::U256::from_be_bytes(GOV_CONFIG_SLOT_PROPOSER_STAKE), + EvmStorageSlot::new_changed( + alloy_primitives::U256::ZERO, + alloy_primitives::U256::from(GOV_CONFIG_PROPOSER_STAKE), + 0, + ), + ); + storage.insert( + alloy_primitives::U256::from_be_bytes(GOV_CONFIG_SLOT_VOTING_DURATION), + EvmStorageSlot::new_changed( + alloy_primitives::U256::ZERO, + alloy_primitives::U256::from(GOV_CONFIG_VOTING_DURATION), + 0, + ), + ); + + hardfork_changes.insert( + GOVERNANCE_CONFIG_ADDRESS, + Account { + info: new_info, + storage, + status: AccountStatus::Touched, + transaction_id: 0, + }, + ); + } + } + + state.commit(hardfork_changes); + Ok(()) + } } impl ParallelExecutor for GrevmExecutor @@ -289,9 +619,15 @@ fn post_block_balance_increments( block: &RecoveredBlock, ) -> HashMap where - ChainSpec: EthereumHardforks, + ChainSpec: EthereumHardforks + EthChainSpec, Block: reth_primitives_traits::Block, { + // After Alpha hardfork, skip all post-block balance increments + // (disables PoW block rewards and DAO fork irregularities) + if chain_spec.is_alpha_active_at_block_number(block.header().number()) { + return HashMap::default(); + } + let mut balance_increments = HashMap::default(); // Add block rewards if they are enabled. diff --git a/crates/pipe-exec-layer-ext-v2/execute/gravity_hardfork.json b/crates/pipe-exec-layer-ext-v2/execute/gravity_hardfork.json new file mode 100644 index 0000000000..486eee0174 --- /dev/null +++ b/crates/pipe-exec-layer-ext-v2/execute/gravity_hardfork.json @@ -0,0 +1,347 @@ +{ + "nonce": "0x0", + "timestamp": "0x6490fdd2", + "extraData": "0x", + "gasLimit": "0x1c9c380", + "difficulty": "0x0", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "config": { + "chainId": 7771625, + "homesteadBlock": 0, + "daoForkSupport": true, + "daoForkBlock": 0, + "eip150Block": 0, + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "muirGlacierBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "arrowGlacierBlock": 0, + "grayGlacierBlock": 0, + "mergeNetsplitBlock": 0, + "shanghaiTime": 0, + "cancunTime": 0, + "terminalTotalDifficultyPassed": false, + "extraFields": {}, + "depositContractAddress": null, + "gammaBlock": 20, + "alphaBlock": 5, + "betaBlock": 10, + "deltaBlock": 25 + }, + "alloc": { + "0x00000000000000000000000000000001625f3000": { + "balance": "0x00", + "nonce": 0, + "code": "0x60806040526004361015610011575f80fd5b5f3560e01c8062939cc914610f675780630f30608a14610b6b578063107ed85114610f445780631f5a0bbe14610ee55780632478842914610e8657806326d0f64114610e2a5780632ab09d1414610d2b5780633c93d10a14610e0d57806366f22204146105e05780636bd146c514610db7578063715018a614610d54578063787e0fe014610d2b57806379ba509714610ca65780638905b98714610c695780638da5cb5b14610c42578063930d1e5414610c1f57806396c6c37c14610ba8578063aaa8c76814610b6b578063ab3fb04c14610afa578063c8e583a614610998578063ca660a661461095b578063d3e36bdc1461068b578063debfda3014610649578063e30c397814610621578063ebc5f20c146105e0578063ef09e78f14610521578063f1610a2814610253578063f2fde38b146101e15763f86ad69014610157575f80fd5b346101dd5760403660031901126101dd576004356001600160401b0381116101dd57610187903690600401611653565b90602435916001600160401b0383116101dd576101d26101c4916101b16020953690600401611653565b6040949194519485938885019788611763565b03601f198101835282611703565b519020604051908152f35b5f80fd5b346101dd5760203660031901126101dd576101fa61163d565b610202611d15565b60018060a01b0316806bffffffffffffffffffffffff60a01b600154161760015560018060a01b035f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b346101dd5760203660031901126101dd576001600160401b03610274611683565b5f610140604051610284816116e7565b8281528260208201528260408201526060808201528260808201528260a08201528260c08201528260e08201528261010082015282610120820152015216805f5260026020526001600160401b0360405f2054161561050f575f52600260205260405f206040516102f4816116e7565b8154916001600160401b0383168252602082019260018060a01b039060401c168352600181015460408301908152600282019060405180925f9080549061033a8261185d565b80855291600181169081156104f157506001146104b4575b50500361035f9083611703565b60608401918252600383015460808501936001600160401b038216855260a08601918060401c6001600160401b0316835260c087019060801c815260048201549260e08801926001600160801b038516845261010089019460801c8552600501549561012089019560ff8816151587526101408a019760081c6001600160401b031688526040519a8b9a60208c52516001600160401b031660208c0152600160a01b6001900390511660408b01525160608a0152519660808901610160905287518098816101808c01526020016101a08b015e8789016101a0015f9052516001600160401b031660a0890152516001600160401b031660c0880152516001600160801b031660e0870152516001600160801b0316610100860152516001600160801b0316610120850152511515610140840152516001600160401b0316610160830152601f1990601f01168101036101a00190f35b5f908152602081209092505b8183106104d557505081016020018780610352565b60209193508060019154838589010152019101909184926104c0565b9150506020925060ff191682840152151560051b8201018780610352565b6359825a0160e01b5f5260045260245ffd5b346101dd575f3660031901126101dd576040518060206006549283815201809260065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f905f5b8181106105ca575050508161057f910382611703565b604051918291602083019060208452518091526040830191905f5b8181106105a8575050500390f35b82516001600160a01b031684528594506020938401939092019160010161059a565b8254845260209093019260019283019201610569565b346101dd5760203660031901126101dd576001600160401b03610601611683565b165f52600560205260206001600160401b0360405f205416604051908152f35b346101dd575f3660031901126101dd576001546040516001600160a01b039091168152602090f35b346101dd5760203660031901126101dd5760206106816001600160a01b0361066f61163d565b165f52600760205260405f2054151590565b6040519015158152f35b346101dd5760603660031901126101dd576106a4611683565b6024356001600160401b0381116101dd576106c3903690600401611653565b6044929192356001600160401b0381116101dd576106e5903690600401611653565b6106fd929192335f52600760205260405f2054151590565b1561094857808203610932578115610923576001600160401b03841693845f5260026020526001600160401b0360405f2054161561091057845f52600460205260ff60405f2054166108fd5761075290611a5d565b60058110156108e9576001036108d657835f526002602052600160405f200154604051602081019061078b816101c48689898d88611763565b519020908082036108c15750505f848152600460205260408120805460ff1916600117905536849003601e1901905b8381106107fd575050906107f87f0f4173804d83476a94b457b10233c4816cbc6c142969002e8210ed1a208cce9d9392604051938493339885611763565b0390a3005b61081061080b82868a611b71565b611b81565b838210156108ad578160051b860135838112156101dd578601908135916001600160401b0383116101dd576020019082360382136101dd57825f80949381946040519384928337810182815203925af13d156108a8573d61087081611842565b9061087e6040519283611703565b81525f60203d92013e5b15610895576001016107ba565b8563bab384af60e01b5f5260045260245ffd5b610888565b634e487b7160e01b5f52603260045260245ffd5b630c22021360e21b5f5260045260245260445ffd5b8363c0c768db60e01b5f5260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b84630560e1c160e31b5f5260045260245ffd5b846359825a0160e01b5f5260045260245ffd5b633cbb5e1360e11b5f5260045ffd5b90636aa4749d60e11b5f5260045260245260445ffd5b635cf20d6360e01b5f523360045260245ffd5b346101dd5760803660031901126101dd5761099661097761163d565b61097f611699565b6109876116c2565b906109906116d8565b92611f09565b005b346101dd5760203660031901126101dd576109b1611683565b6001600160401b03811690815f52600260205260405f206001600160401b0381541615610ae75760058101805460ff8116610ad4576001600160401b0360036109f8611ccd565b94015460401c166001600160401b03841690808210610ac35750855f5260056020526001600160401b0360405f20541690818015159182610ab8575b5050610aa6575068ffffffffffffffffff191660089290921b68ffffffffffffffff00169190911760011790557fac60aa27e2e80bc2257159464dc069bc55571147705886eaa0042252dd501a0f90610aa190610a9590611a5d565b611a5d565b604051918291826116af565b0390a2005b63fcf74e9d60e01b5f5260045260245ffd5b111590508188610a34565b626f3e7b60e11b5f5260045260245ffd5b846315a7349760e11b5f5260045260245ffd5b826359825a0160e01b5f5260045260245ffd5b346101dd5760603660031901126101dd576004356001600160401b0381116101dd57610b2a903690600401611653565b610b32611699565b9060443580151581036101dd575f5b828110610b4a57005b80610b658386610b6061080b600196898c611b71565b611d28565b01610b41565b346101dd5760203660031901126101dd576001600160401b03610b8c611683565b165f526004602052602060ff60405f2054166040519015158152f35b346101dd5760803660031901126101dd576004356001600160401b0381116101dd57610bd8903690600401611653565b610be0611699565b90610be96116c2565b610bf16116d8565b905f5b838110610bfd57005b80610c19848488610c1461080b6001978b8e611b71565b611f09565b01610bf4565b346101dd5760203660031901126101dd57610c3e610a95610a90611683565b0390f35b346101dd575f3660031901126101dd575f546040516001600160a01b039091168152602090f35b346101dd5760403660031901126101dd576020610c95610c8761163d565b610c8f611699565b90611932565b6001600160801b0360405191168152f35b346101dd575f3660031901126101dd57600154336001600160a01b0390911603610d1857600180546001600160a01b03199081169091555f805433928116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b63118cdaa760e01b5f523360045260245ffd5b346101dd575f3660031901126101dd5760206001600160401b0360015460a01c16604051908152f35b346101dd575f3660031901126101dd57610d6c611d15565b600180546001600160a01b03199081169091555f80549182168155906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101dd5760203660031901126101dd576001600160401b03610dd8611683565b16805f5260026020526001600160401b0360405f2054161561050f575f5260026020526020600160405f200154604051908152f35b346101dd575f3660031901126101dd576020600654604051908152f35b346101dd5760403660031901126101dd57610e4361163d565b610e4b611699565b9060018060a01b03165f5260036020526001600160401b0360405f2091165f5260205260206001600160801b0360405f205416604051908152f35b346101dd5760203660031901126101dd57610e9f61163d565b610ea7611d15565b6001600160a01b0316610eb981612057565b610ebf57005b7f4a2cf608bfb427f53279ec7f0eadf48913b9346ccefc3af138dbdec14ea0907d5f80a2005b346101dd5760203660031901126101dd57610efe61163d565b610f06611d15565b6001600160a01b0316610f1881611fec565b610f1e57005b7fae5b7c3b000f575c241001dc9bcb3d8778376889353b07121115574eceff78c55f80a2005b346101dd5760203660031901126101dd576020610681610f62611683565b611895565b346101dd5760803660031901126101dd57610f8061163d565b6024356001600160401b0381116101dd57610f9f903690600401611653565b91906044356001600160401b0381116101dd57610fc0903690600401611653565b929091606435926001600160401b0384116101dd57366023850112156101dd576001600160401b038460040135116101dd573660248560040135860101116101dd578486036116265785156109235761101883611b95565b61102183611c27565b611029611ccd565b60405163664b96bf60e01b815296906020886004816401625f10045afa978815611552575f986115ea575b506001600160401b0380911697168701956001600160401b03871161155d57604051632e30b7b160e21b81526001600160a01b03861660048201526001600160401b03881660248201526020816044816401625f20005afa908115611552575f916115b8575b5060405163d28bd80f60e01b81526020816004816401625f10045afa908115611552575f91611586575b50808210611571575050906101c461110792604051948593602085019788611763565b51902090600154936001600160401b03808660a01c161461155d576001600160401b0360a01b60016001600160401b038760a01c160160a01b166001600160401b0360a01b19861617600155604051956331ead84360e01b87526020876004816401625f10045afa968715611552575f9761150e575b506040519161118b836116e7565b6001600160401b038760a01c1683526001600160801b036020840198338a526001600160401b0360408601938885526111c78a60040135611842565b956111d56040519788611703565b60048b013580885260248c0160208901375f60208c60040135890101526060880196875260808801521660a08601521660c08401525f60e08401525f6101008401525f6101208401525f6101408401526001600160401b038760a01c165f52600260205260405f20976001600160401b0380855116166001600160401b03198a541617895551885490600160401b600160e01b039060401b16906001600160401b0363ffffffff60e01b0116178855516001880155519586516001600160401b0381116114fa576112a9600283015461185d565b97601f89116114b2575b602098508890601f8311600114611436576113b79493836001600160401b0394610140946005945f9261142b575b50508160011b915f199060031b1c19161760028201555b60808581015160038301805460a089015160c08a01516001600160401b038a1993909316948a16949094179190911660409190911b6fffffffffffffffff000000000000000016179190921b6001600160801b03191617905560e085015161010086015160801b6001600160801b0319166001600160801b039190911617600482015561012085015191018054929094015168ffffffffffffffffff1990921660ff9115159190911617911660081b68ffffffffffffffff0016179055565b60405191825260408583015260018060a01b0316917f0f495ec05572838979a24687ed838125ab31b2f5b1896cf21d212945618610743392806114146001600160401b038860a01c16946040830190602481600401359101611743565b0390a46001600160401b036040519160a01c168152f35b015190508d806112e1565b90600284015f52805f20915f5b601f198516811061149b575093600184610140946005946113b799986001600160401b0398601f19811610611483575b505050811b0160028201556112f8565b01515f1960f88460031b161c191690558d8080611473565b91928b600181928685015181550194019201611443565b600283015f5260205f20601f830160051c810199602084106114f0575b601f0160051c01985b8981106114e557506112b3565b5f81556001016114d8565b90995089906114cf565b634e487b7160e01b5f52604160045260245ffd5b9096506020813d60201161154a575b8161152a60209383611703565b810103126101dd57516001600160801b03811681036101dd57958761117d565b3d915061151d565b6040513d5f823e3d90fd5b634e487b7160e01b5f52601160045260245ffd5b632ed8c74760e11b5f5260045260245260445ffd5b90506020813d6020116115b0575b816115a160209383611703565b810103126101dd57518a6110e4565b3d9150611594565b90506020813d6020116115e2575b816115d360209383611703565b810103126101dd5751896110ba565b3d91506115c6565b6001600160401b03919850611617829160203d60201161161f575b61160f8183611703565b810190611724565b989150611054565b503d611605565b8486636aa4749d60e11b5f5260045260245260445ffd5b600435906001600160a01b03821682036101dd57565b9181601f840112156101dd578235916001600160401b0383116101dd576020808501948460051b0101116101dd57565b600435906001600160401b03821682036101dd57565b602435906001600160401b03821682036101dd57565b9190602083019260058210156108e95752565b604435906001600160801b03821682036101dd57565b6064359081151582036101dd57565b61016081019081106001600160401b038211176114fa57604052565b90601f801991011681019081106001600160401b038211176114fa57604052565b908160209103126101dd57516001600160401b03811681036101dd5790565b908060209392818452848401375f828201840152601f01601f1916010190565b909391806040830160408452526060820194905f905b808210611814575050506020818503910152808352602083019060208160051b85010193835f91601e1982360301905b8484106117ba575050505050505090565b90919293949596601f198282030187528735838112156101dd57840190602082359201916001600160401b0381116101dd5780360383136101dd576118056020928392600195611743565b990197019594019291906117a9565b909193949584359060018060a01b0382168092036101dd579081526020908101969594019160010190611779565b6001600160401b0381116114fa57601f01601f191660200190565b90600182811c9216801561188b575b602083101461187757565b634e487b7160e01b5f52602260045260245ffd5b91607f169161186c565b6001600160401b0316805f52600260205260405f20906001600160401b03825416158015611924575b61191e576001600160401b038060036118d5611ccd565b94015460401c16921691821061191e575f5260056020526001600160401b0360405f2054168015159182611913575b505061190f57600190565b5f90565b111590505f80611904565b50505f90565b5060ff6005830154166118be565b91906001600160401b0316805f52600260205260405f20926001600160401b0384541615611a2a576003939093015460408051632e30b7b160e21b81526001600160a01b038616600482015291901c6001600160401b031660248201529192602083806044810103816401625f20005afa928315611552575f936119f6575b5060018060a01b03165f52600360205260405f20905f526020526001600160801b0360405f2054168082111561191e57810390811161155d576001600160801b031690565b9092506020813d602011611a22575b81611a1260209383611703565b810103126101dd5751915f6119b1565b3d9150611a05565b506359825a0160e01b5f5260045260245ffd5b906001600160801b03809116911601906001600160801b03821161155d57565b6001600160401b0316805f52600260205260405f20906001600160401b038254161561050f575f52600460205260ff60405f205416611b6b5760ff600582015416611b1957611aaa611ccd565b906003810154916001600160401b03808460401c1691161061191e5760040154906001600160801b0382169160801c8083119283611af4575b505050611aef57600290565b600190565b6001600160801b0392935090611b0991611a3d565b9160801c911610155f8080611ae3565b6004810154906001600160801b0382169160801c8083119283611b4257505050611aef57600290565b6001600160801b03929350600391611b5991611a3d565b92015460801c911610155f8080611ae3565b50600390565b91908110156108ad5760051b0190565b356001600160a01b03811681036101dd5790565b604051635b16ebb760e01b81526001600160a01b0390911660048201819052906020816024816401625f20005afa908115611552575f91611bec575b5015611bda5750565b630f4c971b60e21b5f5260045260245ffd5b90506020813d602011611c1f575b81611c0760209383611703565b810103126101dd575180151581036101dd575f611bd1565b3d9150611bfa565b604051630ede9d0160e21b81526001600160a01b0390911660048201526020816024816401625f20005afa908115611552575f91611c8b575b506001600160a01b031633819003611c755750565b6330d6582960e11b5f526004523360245260445ffd5b90506020813d602011611cc5575b81611ca660209383611703565b810103126101dd57516001600160a01b03811681036101dd575f611c60565b3d9150611c99565b604051637e345def60e11b81526020816004816401625f10005afa908115611552575f91611cf9575090565b611d12915060203d60201161161f5761160f8183611703565b90565b5f546001600160a01b03163303610d1857565b906001600160801b03926001600160401b03821691825f52600260205260405f20946001600160401b0386541615611ef657611d62611ccd565b916001600160401b03600388015460401c16806001600160401b0385161015611ee4575060ff600588015416610ad457611dae90611d9f87611b95565b611da887611c27565b86611932565b8181168211611edc575b506001600160801b038116948515611ed35760018060a01b031695865f52600360205260405f20855f5260205260405f206001600160801b03611dfe8482845416611a3d565b82546001600160801b03191691161790558315611e9957611e2e60046001600160801b0392019282845416611a3d565b166001600160801b03198254161790555b825f5260056020526001600160401b0360405f2091166001600160401b0319825416179055604051928352151560208301527f30c35726fdb32398d851d05372fbc80cc4b496c577d6b2108b2bbd8b752d9aa260403393a4565b6004018054611ece92611eae9160801c611a3d565b81546001600160801b031660809190911b6001600160801b031916179055565b611e3f565b50505050505050565b90505f611db8565b63074e1db960e01b5f5260045260245ffd5b836359825a0160e01b5f5260045260245ffd5b91926001600160401b03821691825f52600260205260405f20946001600160401b0386541615611ef657611f3b611ccd565b916001600160401b03600388015460401c16806001600160401b0385161015611ee4575060ff600588015416610ad457611f7890611d9f87611b95565b6001600160801b0381166001600160801b03831611611edc57506001600160801b038116948515611ed35760018060a01b031695865f52600360205260405f20855f5260205260405f206001600160801b03611dfe8482845416611a3d565b80548210156108ad575f5260205f2001905f90565b805f52600760205260405f2054155f1461205257600654600160401b8110156114fa5761203b6120258260018594016006556006611fd7565b819391549060031b91821b915f19901b19161790565b9055600654905f52600760205260405f2055600190565b505f90565b5f81815260076020526040902054801561191e575f19810181811161155d576006545f1981019190821161155d578181036120de575b50505060065480156120ca575f19016120a7816006611fd7565b8154905f199060031b1b191690556006555f5260076020525f6040812055600190565b634e487b7160e01b5f52603160045260245ffd5b6121006120ef612025936006611fd7565b90549060031b1c9283926006611fd7565b90555f52600760205260405f20555f808061208d56fea26469706673582212209971572541878694c48cee92d86e3f36168fe43888bb51030e8fbce705509efe64736f6c634300081e0033", + "storage": {} + }, + "0x00000000000000000000000000000001625f2003": { + "balance": "0x00", + "nonce": 0, + "code": "0x60806040526004361015610011575f80fd5b5f5f3560e01c8063179fdc7e14610657578063392e53cd146106335780633e8384c814610616578063406e6992146105ee57806349a3ccbc146103bd578063514cce81146103a25780636041eae61461037d57806376671808146103575780637f7bb4891461025e5780638129fc1c146100f7578063a7202fb3146100cc5763bed0d8731461009e575f80fd5b346100c957806003193601126100c95760206100b86108b6565b6001600160401b0360405191168152f35b80fd5b50346100c957806003193601126100c9575460405160209160801c60ff166100f381610685565b8152f35b50346100c957806003193601126100c9576401625f0001330361024257805460ff8160c81c166102345767ffffffffffffffff1981166001178255604051637e345def60e11b81528291906020816004816401625f10005afa9081156102295783916101c5575b506001600160d01b03199190911667ffffffffffffffff60401b604092831b16176001600160c81b011780835581516001600160401b039190921c1681527f262de70634816ad0999db46c2e54e0fa53fcd384d3b8f71537349a01e152ee3a90602090a280f35b90506020813d602011610221575b816101e0602093836106a3565b8101031261021d577f262de70634816ad0999db46c2e54e0fa53fcd384d3b8f71537349a01e152ee3a9161021560209261086e565b91509161015e565b5050fd5b3d91506101d3565b6040513d85823e3d90fd5b62dc149f60e41b8252600482fd5b630272d02960e61b8152336004526401625f0001602452604490fd5b50346100c957806003193601126100c9576401625f3000330361033b576102836109f3565b600160ff825460801c1661029681610685565b1461032c57604051634308aec160e01b81526080816004816401625f10035afa9081156103215782916102f2575b5080516102d081610685565b6102d981610685565b6102e957506102e661158a565b80f35b6102e690611386565b610314915060803d60801161031a575b61030c81836106a3565b810190610708565b5f6102c4565b503d610302565b6040513d84823e3d90fd5b63b7a174cb60e01b8152600490fd5b630272d02960e61b8152336004526401625f3000602452604490fd5b50346100c957806003193601126100c9576001600160401b036020915416604051908152f35b50346100c957806003193601126100c95760206103986107a1565b6040519015158152f35b50346100c957806003193601126100c95760206103986106d8565b503461051a57602036600319011261051a576004356001600160401b03811161051a573660238201121561051a578060040135906001600160401b03821161051a57366024838301011161051a576401625f0000331415806105df575b61052d576104266109f3565b600160ff5f5460801c1661043981610685565b0361051e5781610498575b50506401625f20023b156100c957604051633dbefe1960e01b815281908181600481836401625f20025af1801561032157610483575b506102e6610cec565b8161048d916106a3565b6100c957805f61047a565b6401625f20023b1561051a57602460445f928460405195869485936311bb274160e11b855260206004860152828286015201848401378181018301859052601f01601f19168101030181836401625f20025af1801561050f576104fc575b80610444565b61050891505f906106a3565b5f5f6104f6565b6040513d5f823e3d90fd5b5f80fd5b631d5efead60e01b5f5260045ffd5b60405161053b6060826106a3565b600281526020810160403682378151156105cb576401625f000081528151600110156105cb57906401625f3000604082015260405191829163020be67b60e11b8352604483019033600485015260406024850152518091526064830191905f5b8181106105a9575050500390fd5b82516001600160a01b031684528594506020938401939092019160010161059b565b634e487b7160e01b5f52603260045260245ffd5b506401625f300033141561041a565b3461051a575f36600319011261051a5760206001600160401b035f5460401c16604051908152f35b3461051a575f36600319011261051a576020604051620f42408152f35b3461051a575f36600319011261051a57602060ff5f5460c81c166040519015158152f35b3461051a575f36600319011261051a57602060ff5f5460801c1661067a81610685565b600160405191148152f35b6002111561068f57565b634e487b7160e01b5f52602160045260245ffd5b90601f801991011681019081106001600160401b038211176106c457604052565b634e487b7160e01b5f52604160045260245ffd5b60ff5f5460c81c16156106f0576106ed61128f565b90565b5f90565b51906001600160801b038216820361051a57565b809103906080821261051a5760405191604083018381106001600160401b038211176106c457604052815190600282101561051a576060918452601f19011261051a5760405190606082018281106001600160401b038211176106c4576107949160609160405261077b602082016106f4565b8452610789604082016106f4565b6020850152016106f4565b6040820152602082015290565b6401625f20043303610852576107b56109f3565b600160ff5f5460801c166107c881610685565b146106f0576107d561128f565b156106f057604051634308aec160e01b81526080816004816401625f10035afa90811561050f575f91610833575b50805161080f81610685565b61081881610685565b61082a575061082561158a565b600190565b61082590611386565b61084c915060803d60801161031a5761030c81836106a3565b5f610803565b630272d02960e61b5f52336004526401625f200460245260445ffd5b51906001600160401b038216820361051a57565b906001600160401b03809116911601906001600160401b0382116108a257565b634e487b7160e01b5f52601160045260245ffd5b5f5460ff8160c81c16156109ee57604051637e345def60e11b8152906020826004816401625f10005afa91821561050f575f926109b2575b5060405163507f38ed60e11b8152906020826004816401625f10055afa91821561050f575f92610965575b506109326001600160401b039283809360401c16610882565b169116908082101561095f57036001600160401b0381116108a2576001600160401b03620f424091160490565b50505f90565b91506020823d6020116109aa575b81610980602093836106a3565b8101031261051a576109326001600160401b039291836109a0819461086e565b9450509150610919565b3d9150610973565b9091506020813d6020116109e6575b816109ce602093836106a3565b8101031261051a576109df9061086e565b905f6108ee565b3d91506109c1565b505f90565b60ff5f5460c81c1615610a0257565b63cafefe6960e01b5f5260045ffd5b81601f8201121561051a578051906001600160401b0382116106c45760405192610a45601f8401601f1916602001856106a3565b8284526020838301011161051a57815f9260208093018386015e8301015290565b60208183031261051a578051906001600160401b03821161051a57019080601f8301121561051a578151916001600160401b0383116106c4578260051b6020810193610ab560405195866106a3565b84526020808501918301019183831161051a5760208101915b838310610add57505050505090565b82516001600160401b03811161051a5782019060e0828703601f19011261051a576040519060e082018281106001600160401b038211176106c45760405260208301516001600160a01b038116810361051a57825260408301516001600160401b03811161051a57876020610b5492860101610a11565b602083015260608301516001600160401b03811161051a57876020610b7b92860101610a11565b604083015260808301516060830152610b9660a0840161086e565b608083015260c08301516001600160401b03811161051a57876020610bbd92860101610a11565b60a083015260e0830151916001600160401b03831161051a57610be888602080969581960101610a11565b60c0820152815201920191610ace565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9080602083519182815201916020808360051b8301019401925f915b838310610c4757505050505090565b9091929394602080610cdd600193601f19868203018752895190858060a01b03825116815260c0610ccc610c9d610c8b8786015160e08987015260e0860190610bf8565b60408601518582036040870152610bf8565b606085015160608501526001600160401b03608086015116608085015260a085015184820360a0860152610bf8565b9201519060c0818403910152610bf8565b97019301930191939290610c38565b6401625f10033b1561051a57604051632941248760e11b81525f908181600481836401625f10035af1801561050f5761127c575b506401625f10073b156100c957604051632941248760e11b81528181600481836401625f10075af1801561032157908291611267575b50506401625f10083b156100c957604051632941248760e11b81528181600481836401625f10085af1801561032157908291611252575b50506401625f10023b156100c957604051632941248760e11b81528181600481836401625f10025af180156103215790829161123d575b50506401625f10063b156100c957604051632941248760e11b81528181600481836401625f10065af1801561032157908291611228575b50506401625f10043b156100c957604051632941248760e11b81528181600481836401625f10045af1801561032157908291611213575b50506401625f10053b156100c957604051632941248760e11b81528181600481836401625f10055af18015610321579082916111fe575b50506401625f20013b156100c95760405163b4c0cf4160e01b81528181600481836401625f20015af18015610321579082916111e9575b50506401625f20013b156100c9576040516379fa798360e01b81528181600481836401625f20015af18015610321579082916111d4575b505060405163037deea760e41b81526020816004816401625f20015afa9081156103215782916111a2575b506401625f20053b1561119e57604051906303f8934760e01b825260048201528181602481836401625f20055af1801561032157908291611189575b50549060016001600160401b038316016001600160401b038111611175576001600160401b031691826001600160401b03198216178255604051637e345def60e11b81526020816004816401625f10005afa9081156102295784908492611129575b5067ffffffffffffffff60401b919270ffffffffffffffffffffffffffffffffff1916179160401b161790818155604051916313bce04b60e31b835281836004816401625f20015afa928315610321578293611105575b506040516311acc1a760e01b81526020816004816401625f20015afa9283156110f957926110a3575b5091611093916001600160401b037fd851cc5b8d27513d800057c3caf48f64ae299c312220daa6a6640390f98bb10d9460401c16857f262de70634816ad0999db46c2e54e0fa53fcd384d3b8f71537349a01e152ee3a6020604051848152a2604051938493606085526060850190610c1c565b91602084015260408301520390a2565b9150916020823d6020116110f1575b816110bf602093836106a3565b8101031261051a57905190917fd851cc5b8d27513d800057c3caf48f64ae299c312220daa6a6640390f98bb10d611020565b3d91506110b2565b604051903d90823e3d90fd5b6111229193503d8084833e61111a81836106a3565b810190610a66565b915f610ff7565b9150506020813d60201161116d575b81611145602093836106a3565b81010312611169578361116367ffffffffffffffff60401b9261086e565b91610fa0565b8280fd5b3d9150611138565b634e487b7160e01b82526011600452602482fd5b81611193916106a3565b6100c957805f610f3e565b5080fd5b90506020813d6020116111cc575b816111bd602093836106a3565b8101031261051a57515f610f02565b3d91506111b0565b816111de916106a3565b6100c957805f610ed7565b816111f3916106a3565b6100c957805f610ea0565b81611208916106a3565b6100c957805f610e69565b8161121d916106a3565b6100c957805f610e32565b81611232916106a3565b6100c957805f610dfb565b81611247916106a3565b6100c957805f610dc4565b8161125c916106a3565b6100c957805f610d8d565b81611271916106a3565b6100c957805f610d56565b61128891505f906106a3565b5f5f610d20565b604051637e345def60e11b81526020816004816401625f10005afa90811561050f575f9161134c575b5060405163507f38ed60e11b81526020816004816401625f10055afa90811561050f575f91611304575b506001600160401b036112fc8192825f5460401c16610882565b169116101590565b90506020813d602011611344575b8161131f602093836106a3565b8101031261051a576001600160401b036112fc61133c829361086e565b9250506112e2565b3d9150611312565b90506020813d60201161137e575b81611367602093836106a3565b8101031261051a576113789061086e565b5f6112b8565b3d915061135a565b60405163683359e960e01b81525f919082816004816401625f20015afa90811561050f575f91611570575b506040516395d8abd760e01b81525f816004816401625f20015afa90811561050f575f91611556575b506401625f20023b1561051a57604051633dbefe1960e01b81525f81600481836401625f20025af1801561050f57611541575b506001600160401b03845416916401625f20023b1561153d57916114a56020949261149387956001600160801b0360408051998a9889986366bc75bd60e01b8a5260048a0152805161145e81610685565b60248a01520151828151166044890152826020820151166064890152015116608486015260e060a486015260e4850190610c1c565b8381036003190160c485015290610c1c565b0381836401625f20025af1801561032157908291611528575b5050805467ffffffffffffffff60881b600160801b60ff60801b198316811760881b9190911668ffffffffffffffffff60801b198316171782556001600160401b0316907f9ec17f9e5f7548ccc30dc882cf264194bc72261f294974adf2b1b70d8998b00b9080a2565b81611532916106a3565b6100c957805f6114be565b8480fd5b61154e9194505f906106a3565b5f925f61140d565b61156a91503d805f833e61111a81836106a3565b5f6113da565b61158491503d805f833e61111a81836106a3565b5f6113b1565b6401625f20023b1561051a57604051633dbefe1960e01b81525f81600481836401625f20025af1801561050f576115c7575b506115c5610cec565b565b5f6115d1916106a3565b5f6115bc56fea26469706673582212202e51e5815eefce4d81b481c3207c079a09a3fb7836c3aeacba8e945a40736bf264736f6c634300081e0033", + "storage": { + "0x00": "0x0100000000000000000000000000000000000000000000000001" + } + }, + "0x00000000000000000000000000000001625f4001": { + "balance": "0x00", + "nonce": 0, + "code": "0x6080806040526004361015610012575f80fd5b5f3560e01c90816346ce4175146110ea57508063579b5efc1461109a5780635afdddfb14610ff15780635bbb5a4c14610f1a57806362a2b59414610cfb57806364892f9014610cb15780639b4fc72214610c42578063b2245c1f14610b07578063c32b5c2a1461039f578063cce7943114610379578063d180542014610344578063fab32b26146100ca5763fdaed34f146100ab575f80fd5b346100c6575f3660031901126100c657602060405160018152f35b5f80fd5b346100c65760803660031901126100c65760043563ffffffff8116036100c6576044356fffffffffffffffffffffffffffffffff8116036100c6576064356001600160401b0381116100c657610124903690600401611104565b6401625f40003303610335578101906060818303126100c65780356001600160401b0381116100c657810182601f820112156100c6578281602061016a933591016113c4565b916020820135916001600160401b0383168093036100c6576040810135906001600160401b0382116100c657019080601f830112156100c6578160206101b29335910161176c565b82516020840120805f5260056020526001600160401b0360405f205416808411156103015750805f52600560205260405f20836001600160401b03198254161790555f52600160205260405f20600381019060ff825416156102b3575b6002915061021d8582611b8f565b60018101805467ffffffffffffffff191685179055019261023d84611c5b565b5f5b8251811015610265578061025f610258600193866116c7565b5187612034565b0161023f565b507f7975257cf5e9e8be1e03cf04b950dc8c5d4e450bd543bae28a89f1c9e0e298b8604084610295855194611893565b9382519182526020820152a26102a961205d565b60206040515f8152f35b5f5491600160401b8310156102ed576102dd866102d7856001600297015f55611670565b90611c4c565b805460ff1916600117905561020f565b634e487b7160e01b5f52604160045260245ffd5b6040516355d1a05f60e01b815260606004820152908190856103266064840189611131565b91602484015260448301520390fd5b63b3203fa160e01b5f5260045ffd5b346100c657610375610361610358366112e3565b92919091611ace565b604051918291602083526020830190611155565b0390f35b346100c657602061039561038c366112e3565b92919091611a3b565b6040519015158152f35b346100c65760203660031901126100c6576004356001600160401b0381116100c6576103cf9036906004016112b3565b6401625f30003303610aeb576002545f60025580610a3f575b505f91607e1981360301905b82841015610a0a578360051b810135828112156100c657810193600254600160401b8110156102ed5780600161042d92016002556119c3565b6109f757853560048110156100c65760ff801983541691161781556001810161045960208801886116db565b906001600160401b0382116102ed5761047c826104768554611409565b856119df565b5f90601f8311600114610993576104aa92915f91836107f8575b50508160011b915f199060031b1c19161790565b90555b600281016104be60408801886116db565b906001600160401b0382116102ed576104db826104768554611409565b5f90601f831160011461092f5761050892915f91836107f85750508160011b915f199060031b1c19161790565b90555b6003810195606081013590609e19813603018212156100c657019561053087806116db565b906001600160401b0382116102ed5761054d826104768554611409565b5f90601f83116001146108cb5761057a92915f91836107f85750508160011b915f199060031b1c19161790565b90555b6004810161058e60208801886116db565b906001600160401b0382116102ed576105ab826104768554611409565b5f90601f8311600114610867576105d892915f91836107f85750508160011b915f199060031b1c19161790565b90555b600581016105ec60408801886116db565b906001600160401b0382116102ed57610609826104768554611409565b5f90601f83116001146108035761063692915f91836107f85750508160011b915f199060031b1c19161790565b90555b6006810161064a60608801886116db565b906001600160401b0382116102ed57610667826104768554611409565b5f90601f831160011461078d57826106ab95936007959361069c935f926107825750508160011b915f199060031b1c19161790565b90555b019560808101906116db565b6001600160401b0381979297116102ed576106d0816106ca8454611409565b846119df565b5f96601f821160011461071a579080600195969798610703935f9261070f5750508160011b915f199060031b1c19161790565b90555b019291906103f4565b013590508980610496565b601f19821690835f5260205f20915f5b81811061076a575090600196979899848895949310610751575b505050811b019055610706565b01355f19600384901b60f8161c19169055888080610744565b99926020600181928686013581550194019a0161072a565b013590508c80610496565b601f19831691845f5260205f20925f5b8181106107e057509260019285926106ab989660079896106107c7575b505050811b01905561069f565b01355f19600384901b60f8161c191690558b80806107ba565b9193602060018192878701358155019501920161079d565b013590508a80610496565b601f19831691845f5260205f20925f5b81811061084f5750908460019594939210610836575b505050811b019055610639565b01355f19600384901b60f8161c19169055898080610829565b91936020600181928787013581550195019201610813565b601f19831691845f5260205f20925f5b8181106108b3575090846001959493921061089a575b505050811b0190556105db565b01355f19600384901b60f8161c1916905589808061088d565b91936020600181928787013581550195019201610877565b601f19831691845f5260205f20925f5b81811061091757509084600195949392106108fe575b505050811b01905561057d565b01355f19600384901b60f8161c191690558980806108f1565b919360206001819287870135815501950192016108db565b601f19831691845f5260205f20925f5b81811061097b5750908460019594939210610962575b505050811b01905561050b565b01355f19600384901b60f8161c19169055898080610955565b9193602060018192878701358155019501920161093f565b601f19831691845f5260205f20925f5b8181106109df57509084600195949392106109c6575b505050811b0190556104ad565b01355f19600384901b60f8161c191690558980806109b9565b919360206001819287870135815501950192016109a3565b634e487b7160e01b5f525f60045260245ffd5b7fb2588e454b367fc93e9f71068bc2560f63b95b2a025e842d32e9fa39902f4a1b602084604051908152a1610a3d61205d565b005b6001600160fd1b0381168103610ad75760025f5260031b7f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace017f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5b818110610aa757506103e8565b805f60089255610ab96001820161193b565b610ac56002820161193b565b610ad16003820161198a565b01610a9a565b634e487b7160e01b5f52601160045260245ffd5b630272d02960e61b5f52336004526401625f300060245260445ffd5b346100c6575f3660031901126100c657600254610b23816114c2565b90610b316040519283611384565b80825260208201908160025f527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5f915b838310610c245785856040519060208201926020835251809352604082019260408160051b84010191905f5b818110610b9b5784840385f35b909192603f1985820301865283518051916004831015610c1057610c01602092826001958594526060610bf0610bde868501516080888601526080850190611131565b60408501518482036040860152611131565b920151906060818403910152611155565b95019601910194919094610b8e565b634e487b7160e01b5f52602160045260245ffd5b60086020600192610c34856118af565b815201920192019190610b62565b346100c65760203660031901126100c65760043560035480821015610c9b57610375610c80610c87610c738561169a565b5060405192838092611441565b0382611384565b604051918291602083526020830190611131565b90630422ba0560e41b5f5260045260245260445ffd5b346100c65760203660031901126100c6576004356001600160401b0381116100c657610ced610ce66020923690600401611104565b36916113c4565b818151910120604051908152f35b346100c65760403660031901126100c6576004356001600160401b0381116100c657610d2b9036906004016112b3565b906024356001600160401b0381116100c657610d4b9036906004016112b3565b90916401625f00013303610efe5760ff60065416610ef057818403610ed95792905f5b82811015610ec257610d88610ce68260051b8701876116db565b8051602082012092835f52600560205260405f2060016001600160401b0319825416179055610dc2610dbb84838961170d565b369161176c565b935f52600160205260405f20600381019060ff82541615610e8e575b60029150610dec8482611b8f565b6001810160016001600160401b03198254161790550194610e0c86611c5b565b5f5b8551811015610e345780610e2e610e27600193896116c7565b5189612034565b01610e0e565b509693509350906001917f7975257cf5e9e8be1e03cf04b950dc8c5d4e450bd543bae28a89f1c9e0e298b86040610e77610e6f85898b61170d565b949050611893565b928151908682526020820152a20193919093610d6e565b5f5491600160401b8310156102ed57610eb2856102d7856001600297015f55611670565b805460ff19166001179055610dde565b610eca61205d565b6006805460ff19166001179055005b5082631f4bb7c160e31b5f5260045260245260445ffd5b62dc149f60e41b5f5260045ffd5b630272d02960e61b5f52336004526401625f000160245260445ffd5b346100c6575f3660031901126100c6576060604051610f3881611333565b52600354610f4581611621565b905f5b818110610f6e576103758360405190610f6082611333565b81526040519182918261124b565b80610c80610f80610c7360019461169a565b602081519101205f52600460205260405f20610fd060026001600160401b0385840154169260405193610fb28561134e565b604051610fc381610c808186611441565b8552602085015201611568565b6040820152610fdf82866116c7565b52610fea81856116c7565b5001610f48565b346100c6575f3660031901126100c657606060405161100f81611333565b525f5461101b81611621565b905f5b818110611036576103758360405190610f6082611333565b80610c80611048610c73600194611670565b602081519101205f528160205260405f2061107960026001600160401b0385840154169260405193610fb28561134e565b604082015261108882866116c7565b5261109381856116c7565b500161101e565b346100c65760203660031901126100c6576004356001600160401b0381116100c6576110d66110d0610375923690600401611104565b906115be565b6040519182916020835260208301906111c1565b346100c6575f3660031901126100c6576020906003548152f35b9181601f840112156100c6578235916001600160401b0383116100c657602083818601950101116100c657565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b6111be9160806111ad61119b611189611177865160a0875260a0870190611131565b60208701518682036020880152611131565b60408601518582036040870152611131565b60608501518482036060860152611131565b920151906080818403910152611131565b90565b60406111d68251606085526060850190611131565b916001600160401b0360208201511660208501520151916040818303910152815180825260208201916020808360051b8301019401925f915b83831061121e57505050505090565b909192939460208061123c600193601f198682030187528951611155565b9701930193019193929061120f565b602081526040810191519160208083015282518091526060820191602060608360051b8301019401925f915b83831061128657505050505090565b90919293946020806112a4600193605f1986820301875289516111c1565b97019301930191939290611277565b9181601f840112156100c6578235916001600160401b0383116100c6576020808501948460051b0101116100c657565b60406003198201126100c6576004356001600160401b0381116100c6578161130d91600401611104565b92909291602435906001600160401b0382116100c65761132f91600401611104565b9091565b602081019081106001600160401b038211176102ed57604052565b606081019081106001600160401b038211176102ed57604052565b60a081019081106001600160401b038211176102ed57604052565b90601f801991011681019081106001600160401b038211176102ed57604052565b604051906113b28261134e565b60606040838281525f60208201520152565b9291926001600160401b0382116102ed57604051916113ed601f8201601f191660200184611384565b8294818452818301116100c6578281602093845f960137010152565b90600182811c92168015611437575b602083101461142357565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611418565b5f929181549161145083611409565b80835292600181169081156114a5575060011461146c57505050565b5f9081526020812093945091925b83831061148b575060209250010190565b60018160209294939454838587010152019101919061147a565b915050602093945060ff929192191683830152151560051b010190565b6001600160401b0381116102ed5760051b60200190565b90600460806040516114ea81611369565b611564819560405161150081610c808185611441565b835260405161151681610c808160018601611441565b602084015260405161152f81610c808160028601611441565b604084015260405161154881610c808160038601611441565b606084015261155d6040518096819301611441565b0384611384565b0152565b908154611574816114c2565b926115826040519485611384565b81845260208401905f5260205f205f915b8383106115a05750505050565b600560206001926115b0856114d9565b815201920192019190611593565b6115d2906115ca6113a5565b9236916113c4565b602081519101205f52600460205260405f209060ff6003830154161561161c575061161460026001600160401b036001840154169260405193610fb28561134e565b604082015290565b905090565b9061162b826114c2565b6116386040519182611384565b8281528092611649601f19916114c2565b01905f5b82811061165957505050565b6020906116646113a5565b8282850101520161164d565b5f54811015611686575f805260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b6003548110156116865760035f5260205f2001905f90565b8054821015611686575f5260205f2001905f90565b80518210156116865760209160051b010190565b903590601e19813603018212156100c657018035906001600160401b0382116100c6576020019181360383136100c657565b91908110156116865760051b81013590601e19813603018212156100c65701908135916001600160401b0383116100c6576020018260051b360381136100c6579190565b9080601f830112156100c6578160206111be933591016113c4565b92919092611779846114c2565b936117876040519586611384565b602085828152019060051b8201918383116100c65780915b8383106117ad575050505050565b82356001600160401b0381116100c657820160a0818703126100c657604051916117d683611369565b81356001600160401b0381116100c657876117f2918401611751565b835260208201356001600160401b0381116100c65787611813918401611751565b602084015260408201356001600160401b0381116100c65787611837918401611751565b604084015260608201356001600160401b0381116100c6578761185b918401611751565b60608401526080820135926001600160401b0384116100c65761188388602095869501611751565b608082015281520192019161179f565b602090604051918183925191829101835e81015f815203902090565b90604051608081018181106001600160401b038211176102ed57604052809260ff815416906004821015610c105760036119209160609385526040516118fc81610c808160018601611441565b602086015260405161191581610c808160028601611441565b6040860152016114d9565b910152565b818110611930575050565b5f8155600101611925565b6119458154611409565b908161194f575050565b81601f5f93116001146119615750555b565b8183526020832061197d91601f0160051c810190600101611925565b8082528160208120915555565b600461195f916119998161193b565b6119a56001820161193b565b6119b16002820161193b565b6119bd6003820161193b565b0161193b565b6002548110156116865760025f5260205f209060031b01905f90565b9190601f81116119ee57505050565b61195f925f5260205f20906020601f840160051c83019310611a18575b601f0160051c0190611925565b9091508190611a0b565b8054821015611686575f52600560205f20910201905f90565b611a469136916113c4565b602081519101205f52600460205260405f209160ff60038401541615611ac75760025f93018054935b848110611a7f5750505050505f90565b611ab1610c80611a92610c738486611a22565b611a9d3686886113c4565b906020815191012090602081519101201490565b611abd57600101611a6f565b5050505050600190565b5050505f90565b91929092611b0a60405193611ae285611369565b60608552606060208601526060604086015260608086015260606080860152849536916113c4565b602081519101205f52600460205260405f209260ff60038501541615611b87575060025f9301918254935b848110611b4457505050505090565b611b62610c80611b57610c738488611a22565b611a9d3685876113c4565b611b6e57600101611b35565b929150506111be9350611b819250611a22565b506114d9565b935050505090565b91909182516001600160401b0381116102ed57611bb0816106ca8454611409565b6020601f8211600114611bee578190611bdf9394955f92611be35750508160011b915f199060031b1c19161790565b9055565b015190505f80610496565b601f19821690835f52805f20915f5b818110611c3457509583600195969710611c1c575b505050811b019055565b01515f1960f88460031b161c191690555f8080611c12565b9192602060018192868b015181550194019201611bfd565b91906109f75761195f91611b8f565b8054905f815581611c6a575050565b81600502916005830403610ad7575f5260205f20908101905b818110611c8e575050565b80611c9a60059261198a565b01611c83565b92906109f75781519283516001600160401b0381116102ed57611cc7816106ca8454611409565b602094601f8211600114611fd357611cf89293949582915f92611be35750508160011b915f199060031b1c19161790565b81555b6001810160208401518051906001600160401b0382116102ed57611d23826104768554611409565b602090601f8311600114611f7057611d5192915f9183611be35750508160011b915f199060031b1c19161790565b90555b6002810160408401518051906001600160401b0382116102ed57611d7c826104768554611409565b602090601f8311600114611f0d57611daa92915f9183611be35750508160011b915f199060031b1c19161790565b90555b6003810160608401518051906001600160401b0382116102ed57611dd5826104768554611409565b602090601f8311600114611ea457826080959360049593611e0a935f92611be35750508160011b915f199060031b1c19161790565b90555b019201519182516001600160401b0381116102ed57611e30816106ca8454611409565b6020601f8211600114611e5f578190611bdf9394955f92611be35750508160011b915f199060031b1c19161790565b601f19821690835f52805f20915f5b818110611e8c57509583600195969710611c1c57505050811b019055565b9192602060018192868b015181550194019201611e6e565b90601f19831691845f52815f20925f5b818110611ef55750926001928592608098966004989610611edd575b505050811b019055611e0d565b01515f1960f88460031b161c191690555f8080611ed0565b92936020600181928786015181550195019301611eb4565b90601f19831691845f52815f20925f5b818110611f585750908460019594939210611f40575b505050811b019055611dad565b01515f1960f88460031b161c191690555f8080611f33565b92936020600181928786015181550195019301611f1d565b90601f19831691845f52815f20925f5b818110611fbb5750908460019594939210611fa3575b505050811b019055611d54565b01515f1960f88460031b161c191690555f8080611f96565b92936020600181928786015181550195019301611f80565b601f19821695835f52805f20915f5b88811061201c57508360019596979810612004575b505050811b018155611cfb565b01515f1960f88460031b161c191690555f8080611ff7565b91926020600181928685015181550194019201611fe2565b90815491600160401b8310156102ed578261205791600161195f95018155611a22565b90611ca0565b612065612292565b5f5b5f5481101561216057610c8061207f610c7383611670565b60208151910120805f526001602052600260405f206001600160401b036001820154166120c583604051936120bf856120b88184611441565b0386611384565b01611568565b935f5260046020526120eb60405f20926003840160ff81541615612146575b5083611b8f565b6001600160401b036001830191166001600160401b0319825416179055019061211382611c5b565b5f5b815181101561213b578061213561212e600193856116c7565b5185612034565b01612115565b505050600101612067565b61214f82612428565b805460ff191660011790555f6120e4565b505f905b60025482101561223e5761218061217a836119c3565b506118af565b9182516004811015610c10576121a457600191925061219d612292565b0190612164565b82516004811015610c10576001036121cb576121c6602060019394015161278b565b61219d565b82516004811015610c10576002036121f4576121c68360406020600195960151910151906126a8565b82516004811015610c105760030361221d576121c683606060206001959601519101519061252a565b82516004811015610c105760ff90633f8175f160e01b5f521660045260245ffd5b90507fb100af7f52336737303f9fe871f3b326ba1c04e07e8e7f07a32da3ef3e0665e76020600354604051908152a1565b60035f9161227c8161193b565b82600182015561228e60028201611c5b565b0155565b5f5b6003548110156122d05780610c806122b0610c7360019461169a565b602081519101205f5260046020526122ca60405f2061226f565b01612294565b506003545f600355806122e05750565b60035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b017fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b818110612333575050565b8061233f60019261193b565b01612328565b919091828114612414576123598354611409565b6001600160401b0381116102ed57612375816106ca8454611409565b5f93601f82116001146123af57611bdf92939482915f926123a45750508160011b915f199060031b1c19161790565b015490505f80610496565b601f198216905f5260205f2094835f5260205f20915f5b8181106123fc575095836001959697106123e457505050811b019055565b01545f1960f88460031b161c191690555f8080611c12565b9192600180602092868b0154815501940192016123c6565b509050565b91906109f75761195f91612345565b600354805f5b8181106124a1575b50600160401b8110156102ed57600181016003556124558160036116b2565b50505b81811161246f5750906102d761195f9260036116b2565b5f19810190808211610ad75761249c9061249661248d8460036116b2565b509160036116b2565b90612419565b612458565b5f6124bc610c806124b6610c738560036116b2565b866128c4565b126124c95760010161242e565b91505f612436565b906109f7578181036124e1575050565b600480836124f261195f9585612345565b6125026001820160018601612345565b6125126002820160028601612345565b6125226003820160038601612345565b019101612345565b919091805160208201205f52600460205260405f20906003820160ff815416156126685750506002019182545f5b8181106126175750805f5b8181106125d3575b508454600160401b8110156102ed5780600161258a9201875586611a22565b50505b8181116125a357506120579061195f9394611a22565b5f19810190808211610ad7576125ce906125c86125c08489611a22565b509188611a22565b906124d1565b61258d565b5f6126026125f686516125fd6125e9868c611a22565b5060405193848092611441565b0383611384565b6128c4565b1261260f57600101612563565b91505f61256b565b61264d6126248287611a22565b50610c8061263a86519260405192838092611441565b6020815191012090602081519101201490565b61265957600101612558565b612057915061195f9394611a22565b9161268f8261195f95969461267e600295612428565b805460ff1916600117905582611b8f565b60018101805467ffffffffffffffff1916905501612034565b602081519101205f52600460205260405f2060ff60038201541615612787576002019081545f5b8181106126dd575b50505050565b6126f183610c8061263a610c738589611a22565b6126fd576001016126cf565b92935f19820191821193909250835b610ad7578181101561273b576001810190818111610ad757612735906125c86125c08489611a22565b8361270c565b505091905080548015612773575f1901906127568282611a22565b6109f7576004816119996127699361193b565b555f8080806126d7565b634e487b7160e01b5f52603160045260245ffd5b5050565b60208151910120805f52600460205260ff600360405f20015416156128b0576003545f5b8181106127cc575b50505f52600460205261195f60405f2061226f565b82610c806127dc610c738461169a565b60208151910120146127f0576001016127af565b5f19820191821193929190845b610ad75781811015612832576001810190818111610ad75761282c906124966128258461169a565b509161169a565b846127fd565b50509091506003548015612773575f190161284c8161169a565b6109f75761285a8154611409565b908161286d575b50506003555f806127b7565b81601f5f93116001146128845750555b5f80612861565b818352602083206128a091601f0160051c810190600101611925565b808252816020812091555561287d565b50565b908151811015611686570160200190565b805182518082101561297557505b5f5b8181106128fd575050519051908181106128f657116128f1575f90565b600190565b50505f1990565b6001600160f81b031961291082856128b3565b51166001600160f81b031961292583876128b3565b51161161296c576001600160f81b031961293f82856128b3565b51166001600160f81b031961295483876128b3565b511610612963576001016128d4565b50505050600190565b505050505f1990565b90506128d256fea264697066735822122036d016fb076813c2e23b382573fa0a757ce6f8ba365af569cb87eaccd28f669d64736f6c634300081e0033", + "storage": { + "0xfec1f4c1f0a2ef06b8dabad47e2992388a567cbc6a755b7b4294251ac3dd9b79": "0x01", + "0x06": "0x01", + "0x61e85e8fe95b367d6f8ad8d21143de8b7d42111c1140a907ad42b2e220ad428a": "0x324b3765706f4a576c5f61426f594770586d44424269456e7751305164565255", + "0x885bf9bf9057500f98ee135fff365ddf50cf43f6ce70abb7e4f2369aab4076be": "0x47784b663579664550306849516c435f6b466d344c5f316b5631533055506d4d", + "0x61e85e8fe95b367d6f8ad8d21143de8b7d42111c1140a907ad42b2e220ad4290": "0x7632783852374c5f33583745316e474d6a4b56565a4d7665515f484d6558766e", + "0xfec1f4c1f0a2ef06b8dabad47e2992388a567cbc6a755b7b4294251ac3dd9b7a": "0x01", + "0x61e85e8fe95b367d6f8ad8d21143de8b7d42111c1140a907ad42b2e220ad428e": "0x4f3841586a54335f5a4d3855754c3864346a426e5f665a4c7a644549344d4872", + "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563": "0x68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d0000000036", + "0x1a504bf27ead596f9161b2aeb3cf1e9dff04e2cc16afea6f2a8631969736cdee": "0x5253410000000000000000000000000000000000000000000000000000000006", + "0x885bf9bf9057500f98ee135fff365ddf50cf43f6ce70abb7e4f2369aab4076c1": "0x33446b717856663578766e37715f582d6750717a5645394a7700000000000000", + "0xb0f558b214ca9ba6e2d16fc489b84f28d780dc7623980e0d7ab0f8bcace2d1a6": "0x01", + "0x61e85e8fe95b367d6f8ad8d21143de8b7d42111c1140a907ad42b2e220ad428b": "0x3167736247584e724562725a45516459354b6a48355035675a4d713364334b76", + "0xb0f558b214ca9ba6e2d16fc489b84f28d780dc7623980e0d7ab0f8bcace2d1a7": "0x01", + "0x885bf9bf9057500f98ee135fff365ddf50cf43f6ce70abb7e4f2369aab4076ba": "0x684a754f5f6f4c4f32425855534c396137664c48786e5a4355664a7654324b2d", + "0xb12c177958ee6507f9a203f76660bdd00c3a88f19a2fc339d41878a9e8f9c05c": "0x4151414200000000000000000000000000000000000000000000000000000008", + "0x885bf9bf9057500f98ee135fff365ddf50cf43f6ce70abb7e4f2369aab4076b7": "0x324b3765706f4a576c5f61426f594770586d44424269456e7751305164565255", + "0xc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b": "0x68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d0000000036", + "0x885bf9bf9057500f98ee135fff365ddf50cf43f6ce70abb7e4f2369aab4076bc": "0x5a4c565361484476764b714c5f6d4578516f366346442d71794c5a2d54366148", + "0xd70839cb5705a05450ff9ac8fa20da15545b0a309547e31f790e11b6ad4b5233": "0x6635663463306165366536303930613635616230613639346436626136663139", + "0x1a504bf27ead596f9161b2aeb3cf1e9dff04e2cc16afea6f2a8631969736cdf0": "0x4151414200000000000000000000000000000000000000000000000000000008", + "0xfec1f4c1f0a2ef06b8dabad47e2992388a567cbc6a755b7b4294251ac3dd9b78": "0x68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d0000000036", + "0x61e85e8fe95b367d6f8ad8d21143de8b7d42111c1140a907ad42b2e220ad4291": "0x47784b663579664550306849516c435f6b466d344c5f316b5631533055506d4d", + "0x27902f3e743c4d5d4489fc5f264ae24eaba31e6d6a4d87e6db9349e0ec01872e": "0x6435643062346536000000000000000000000000000000000000000000000000", + "0x61e85e8fe95b367d6f8ad8d21143de8b7d42111c1140a907ad42b2e220ad4293": "0x4f5f39515a6c50433066463073704c48663253336e4e71493076336b32453771", + "0x1a504bf27ead596f9161b2aeb3cf1e9dff04e2cc16afea6f2a8631969736cded": "0x51", + "0x885bf9bf9057500f98ee135fff365ddf50cf43f6ce70abb7e4f2369aab4076bf": "0x70745a4c32714934566e58716d714936545a4a79452d33565848674e6e315a31", + "0x61e85e8fe95b367d6f8ad8d21143de8b7d42111c1140a907ad42b2e220ad4292": "0x70745a4c32714934566e58716d714936545a4a79452d33565848674e6e315a31", + "0x885bf9bf9057500f98ee135fff365ddf50cf43f6ce70abb7e4f2369aab4076b9": "0x54316a354b73443274465f396a464d444c7156345657444e4a524c67534e4a78", + "0xb12c177958ee6507f9a203f76660bdd00c3a88f19a2fc339d41878a9e8f9c05b": "0x525332353600000000000000000000000000000000000000000000000000000a", + "0x885bf9bf9057500f98ee135fff365ddf50cf43f6ce70abb7e4f2369aab4076bd": "0x7632783852374c5f33583745316e474d6a4b56565a4d7665515f484d6558766e", + "0x1a504bf27ead596f9161b2aeb3cf1e9dff04e2cc16afea6f2a8631969736cdf1": "0x02b3", + "0xb12c177958ee6507f9a203f76660bdd00c3a88f19a2fc339d41878a9e8f9c059": "0x51", + "0x00": "0x01", + "0xfec1f4c1f0a2ef06b8dabad47e2992388a567cbc6a755b7b4294251ac3dd9b7b": "0x01", + "0xbab63e467257ef740ac907e0959a04bbcc754a95e1365acd9a9de17e6eb61a92": "0x01", + "0xb0f558b214ca9ba6e2d16fc489b84f28d780dc7623980e0d7ab0f8bcace2d1a8": "0x01", + "0x1a504bf27ead596f9161b2aeb3cf1e9dff04e2cc16afea6f2a8631969736cdef": "0x525332353600000000000000000000000000000000000000000000000000000a", + "0x61e85e8fe95b367d6f8ad8d21143de8b7d42111c1140a907ad42b2e220ad428d": "0x684a754f5f6f4c4f32425855534c396137664c48786e5a4355664a7654324b2d", + "0x61e85e8fe95b367d6f8ad8d21143de8b7d42111c1140a907ad42b2e220ad428f": "0x5a4c565361484476764b714c5f6d4578516f366346442d71794c5a2d54366148", + "0x885bf9bf9057500f98ee135fff365ddf50cf43f6ce70abb7e4f2369aab4076c0": "0x4f5f39515a6c50433066463073704c48663253336e4e71493076336b32453771", + "0x61e85e8fe95b367d6f8ad8d21143de8b7d42111c1140a907ad42b2e220ad4294": "0x33446b717856663578766e37715f582d6750717a5645394a7700000000000000", + "0xb12c177958ee6507f9a203f76660bdd00c3a88f19a2fc339d41878a9e8f9c05a": "0x5253410000000000000000000000000000000000000000000000000000000006", + "0x885bf9bf9057500f98ee135fff365ddf50cf43f6ce70abb7e4f2369aab4076b8": "0x3167736247584e724562725a45516459354b6a48355035675a4d713364334b76", + "0xb0f558b214ca9ba6e2d16fc489b84f28d780dc7623980e0d7ab0f8bcace2d1a5": "0x68747470733a2f2f6163636f756e74732e676f6f676c652e636f6d0000000036", + "0x27902f3e743c4d5d4489fc5f264ae24eaba31e6d6a4d87e6db9349e0ec01872d": "0x6635663463306165366536303930613635616230613639346436626136663139", + "0xd70839cb5705a05450ff9ac8fa20da15545b0a309547e31f790e11b6ad4b5234": "0x6435643062346536000000000000000000000000000000000000000000000000", + "0xb12c177958ee6507f9a203f76660bdd00c3a88f19a2fc339d41878a9e8f9c05d": "0x02b3", + "0x03": "0x01", + "0x61e85e8fe95b367d6f8ad8d21143de8b7d42111c1140a907ad42b2e220ad428c": "0x54316a354b73443274465f396a464d444c7156345657444e4a524c67534e4a78", + "0x885bf9bf9057500f98ee135fff365ddf50cf43f6ce70abb7e4f2369aab4076bb": "0x4f3841586a54335f5a4d3855754c3864346a426e5f665a4c7a644549344d4872" + } + }, + "0x00000000000000000000000000000001625f2000": { + "balance": "0x00", + "nonce": 1, + "code": "0x60806040526004361015610011575f80fd5b5f5f3560e01c8063068bcd8d14610b3057806316ae20c714610a7b5780633b7a740414610a0a5780634ff0293b146109a45780635167b6fc146108ff5780635b16ebb7146108c25780635dd7223b1461085c5780636b48235b1461063e57806374a9430b146105cd5780637cf255171461055c5780638eec5d7014610540578063920879e6146104c15780639fdbd4d7146104a4578063b8c2dec414610412578063d88ff1f41461034c578063d9bbd2781461030a578063dbcd704b1461026b578063ec914bb4146101d2578063f02465ca146101165763fd2dbea1146100f6575f80fd5b346101135780600319360112610113576020600254604051908152f35b80fd5b50346101a05760203660031901126101a0576001600160a01b03610138610b88565b16805f52600160205260ff60405f205416156101c0576401625f200133036101a457803b156101a0575f8091600460405180948193634312910560e11b83525af1801561019557610187575080f35b61019391505f90610bdf565b005b6040513d5f823e3d90fd5b5f80fd5b630272d02960e61b5f52336004526401625f200160245260445ffd5b630f4c971b60e21b5f5260045260245ffd5b346101a05760203660031901126101a0576001600160a01b036101f3610b88565b16805f52600160205260ff60405f205416156101c057602060049160405192838092620ef41560ea1b82525afa8015610195575f90610238575b602090604051908152f35b506020813d602011610263575b8161025260209383610bdf565b810103126101a0576020905161022d565b3d9150610245565b346101a05760203660031901126101a0576001600160a01b0361028c610b88565b16805f52600160205260ff60405f205416156101c057602060049160405192838092631cfe878d60e31b82525afa8015610195576020915f916102dd575b506040516001600160a01b039091168152f35b6102fd9150823d8411610303575b6102f58183610bdf565b810190610c01565b826102ca565b503d6102eb565b346101a0575f3660031901126101a05760405163762ffd6160e11b81526020816004816401625f10015afa8015610195575f9061023857602090604051908152f35b346101a0575f3660031901126101a0576040518060205f54928381520180925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563905f5b8181106103f357505050816103a8910382610bdf565b604051918291602083019060208452518091526040830191905f5b8181106103d1575050500390f35b82516001600160a01b03168452859450602093840193909201916001016103c3565b82546001600160a01b0316845260209093019260019283019201610392565b346101a05760403660031901126101a05761042b610b88565b610433610b9e565b9060018060a01b031690815f52600160205260ff60405f205416156104915767ffffffffffffffff602460209260405194859384926351cb86cd60e01b84521660048301525afa8015610195575f9061023857602090604051908152f35b50630f4c971b60e21b5f5260045260245ffd5b346101a0575f3660031901126101a0576020600254604051908152f35b346101a05760403660031901126101a0576104da610b88565b6104e2610b9e565b9060018060a01b031690815f52600160205260ff60405f205416156104915767ffffffffffffffff6024602092604051948593849263b392fbfb60e01b84521660048301525afa8015610195575f9061023857602090604051908152f35b346101a0575f3660031901126101a05760205f54604051908152f35b346101a05760203660031901126101a0576001600160a01b0361057d610b88565b16805f52600160205260ff60405f205416156101c057602060049160405192838092638da5cb5b60e01b82525afa8015610195576020915f916102dd57506040516001600160a01b039091168152f35b346101a05760203660031901126101a0576001600160a01b036105ee610b88565b16805f52600160205260ff60405f205416156101c0576020600491604051928380926372b45a5560e01b82525afa8015610195576020915f916102dd57506040516001600160a01b039091168152f35b60a03660031901126101a057610652610b88565b6024356001600160a01b03811691908290036101a0576044356001600160a01b03811691908290036101a0576064356001600160a01b038116908190036101a0576084359167ffffffffffffffff83168093036101a05760405163762ffd6160e11b81526020816004816401625f10015afa908115610195575f9161082a575b508034106108145750600254925f1984146107ec576001840160025560405192611ae2918285019185831067ffffffffffffffff8411176108005760a0948694610c218639600180871b03169788845289602085015260408401526060830152608082015203019034f580156101955760018060a01b0316905f54680100000000000000008110156108005780600161076d92015f55610bb5565b81546001600160a01b0360039290921b91821b19169084901b1790555f8281526001602081905260408220805460ff19169091179055545f1981019081116107ec576020938391604051918252858201527f45d43f0d6767b37a70a442985866e6b596772c5a7f529f2b9f6798423b26a3e860403392a4604051908152f35b634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b6353b5c2b960e11b5f523460045260245260445ffd5b90506020813d602011610854575b8161084560209383610bdf565b810103126101a05751866106d2565b3d9150610838565b346101a05760203660031901126101a0576001600160a01b0361087d610b88565b16805f52600160205260ff60405f205416156101c0576020600491604051928380926302e70f6b60e31b82525afa8015610195575f9061023857602090604051908152f35b346101a05760203660031901126101a0576001600160a01b036108e3610b88565b165f526001602052602060ff60405f2054166040519015158152f35b346101a05760203660031901126101a0576001600160a01b03610920610b88565b16805f52600160205260ff60405f205416156101c057602060049160405192838092632938b58d60e21b82525afa8015610195575f90610968575b6020906040519015158152f35b506020813d60201161099c575b8161098260209383610bdf565b810103126101a0575180151581036101a05760209061095b565b3d9150610975565b346101a05760203660031901126101a0576001600160a01b036109c5610b88565b16805f52600160205260ff60405f205416156101c057602060049160405192838092630928e23160e31b82525afa8015610195575f9061023857602090604051908152f35b346101a05760203660031901126101a0576001600160a01b03610a2b610b88565b16805f52600160205260ff60405f205416156101c057602060049160405192838092630acdfd4f60e21b82525afa8015610195576020915f916102dd57506040516001600160a01b039091168152f35b346101a05760203660031901126101a0576001600160a01b03610a9c610b88565b16805f52600160205260ff60405f205416156101c0576020600491604051928380926314ff598560e21b82525afa8015610195575f90610aec575b60209067ffffffffffffffff60405191168152f35b506020813d602011610b28575b81610b0660209383610bdf565b810103126101a0575167ffffffffffffffff811681036101a057602090610ad7565b3d9150610af9565b346101a05760203660031901126101a0576004355f5480821015610b72576020610b5983610bb5565b905460405160039290921b1c6001600160a01b03168152f35b906306a7475b60e11b5f5260045260245260445ffd5b600435906001600160a01b03821682036101a057565b6024359067ffffffffffffffff821682036101a057565b5f54811015610bcb575f805260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b90601f8019910116810190811067ffffffffffffffff82111761080057604052565b908160209103126101a057516001600160a01b03811681036101a0579056fe60a08060405260a081611ae2803803809161001a82856102a7565b8339810103126102435761002d816102de565b9061003a602082016102de565b610046604083016102de565b9061005f6080610058606086016102de565b94016102f2565b936001600160a01b0316801561029457600180546001600160a01b03199081169091555f80549182168317815560405192916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a333608052637e345def60e11b81526020816004816401625f10005afa90811561024f575f9161025a575b50604051634f0f2a3960e11b8152906020826004816401625f10015afa91821561024f575f9261020f575b506001600160401b036101278383610306565b6001600160401b03909716961686106101e1575050600280546001600160a01b03199081166001600160a01b039384161790915560038054821693831693909317909255600480549092169216919091179055600680546001600160401b03191691909117905534600581905560405190815230907f7c717985ac273e663b7f3050f5b15a4388ff6ed952338954f650e2093e13937f90602090a26040516117ae908161033482396080518181816108910152610eb50152f35b85916101ec91610306565b632041578960e11b5f9081526004929092526001600160401b0316602452604490fd5b9091506020813d602011610247575b8161022b602093836102a7565b810103126102435761023c906102f2565b905f610114565b5f80fd5b3d915061021e565b6040513d5f823e3d90fd5b90506020813d60201161028c575b81610275602093836102a7565b8101031261024357610286906102f2565b5f6100e9565b3d9150610268565b631e4fbdf760e01b5f525f60045260245ffd5b601f909101601f19168101906001600160401b038211908210176102ca57604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b038216820361024357565b51906001600160401b038216820361024357565b6001600160401b03918216908216019190821161031f57565b634e487b7160e01b5f52601160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c90816317387b5814610ee4575080632b37f53c14610db45780632dd3100014610ea05780632e17de7814610e215780633bd0540014610e075780634160532f14610ddc57806346c96aac14610db45780634947118814610ceb5780634bc2a65714610c6c57806351cb86cd1461061e57806353fd66141461026e578063570ca7351461021e5780635a627dbc14610afd5780635ebaf1db14610a72578063715018a614610a9a57806372b45a5514610a7257806379ba5097146109ed578063862101301461083b5780638625220a1461087f5780638da5cb5b146108585780639668ceb81461083b578063a29a43bb146107bc578063a4e2d63414610745578063acc2216a146106a9578063b2a25b5214610623578063b392fbfb1461061e578063b3ab15fb1461059f578063b96130a914610355578063bd49c35f14610338578063c03102ec1461031b578063c354bd6e146102f9578063c485a4d814610294578063ce0617ec1461026e578063e30c397814610246578063e7f43c681461021e5763f2fde38b146101a8575f80fd5b3461021a57602036600319011261021a576101c1610efe565b6101c96113d8565b60018060a01b0316806bffffffffffffffffffffffff60a01b600154161760015560018060a01b035f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b3461021a575f36600319011261021a576003546040516001600160a01b039091168152602090f35b3461021a575f36600319011261021a576001546040516001600160a01b039091168152602090f35b3461021a575f36600319011261021a5760206001600160401b0360065416604051908152f35b3461021a57602036600319011261021a575f60206040516102b481610f43565b828152015260406102c6600435610fcc565b5081516102d281610f43565b602060016001600160401b0384541693848452015491019081528251918252516020820152f35b3461021a575f36600319011261021a576020610313611543565b604051908152f35b3461021a575f36600319011261021a576020600754604051908152f35b3461021a575f36600319011261021a576020600554604051908152f35b3461021a57602036600319011261021a576004356001600160401b03811680820361021a576002546001600160a01b0316338190036105895750604051630bcfee3f60e11b81526020816004816401625f20035afa90811561050b575f9161055a575b5061054b57600654906103d56001600160401b03831693846110f3565b916001600160401b03831691848311156105355750604051637e345def60e11b81526020816004816401625f10005afa90811561050b575f91610516575b50604051634f0f2a3960e11b8152906020826004816401625f10015afa91821561050b575f926104da575b506001600160401b0361045183836110f3565b1684106104b05767ffffffffffffffff1983168417600655604080516001600160401b0380891682528716602082015230917f7e4f3ccb2c7ca76eee6682c0e86fefbbd6fe24e4af19381a854a14ea091bd9af9190819081015b0390a2005b6104c36001600160401b039285926110f3565b90632041578960e11b5f526004521660245260445ffd5b6104fd91925060203d602011610504575b6104f58183610f72565b810190611032565b908661043e565b503d6104eb565b6040513d5f823e3d90fd5b61052f915060203d602011610504576104f58183610f72565b85610413565b84638a36f64360e01b5f5260045260245260445ffd5b63b7a174cb60e01b5f5260045ffd5b61057c915060203d602011610582575b6105748183610f72565b810190610f93565b836103b8565b503d61056a565b63e837add960e01b5f523360045260245260445ffd5b3461021a57602036600319011261021a576105b8610efe565b6105c06113d8565b600380546001600160a01b039283166001600160a01b03198216811790925560408051939091168352602083019190915230917f01c8730122ff73369629940a5296f4e7100ef16317d943fbbbfa1b0193ac35cb91819081016104ab565b610f14565b3461021a57602036600319011261021a5761063c610efe565b6002546001600160a01b0316338190036105895750604051630bcfee3f60e11b81526020816004816401625f20035afa90811561050b575f9161068a575b5061054b5761031360209161148f565b6106a3915060203d602011610582576105748183610f72565b8261067a565b3461021a57604036600319011261021a576024356001600160a01b038116810361021a576002546001600160a01b0316338190036105895750604051630bcfee3f60e11b81526020816004816401625f20035afa90811561050b575f91610726575b5061054b57610313602091610721600435611113565b61148f565b61073f915060203d602011610582576105748183610f72565b8261070b565b3461021a575f36600319011261021a57604051637e345def60e11b81526020816004816401625f10005afa801561050b576020915f9161079f575b506001600160401b03600654166001600160401b036040519216108152f35b6107b69150823d8411610504576104f58183610f72565b82610780565b3461021a57602036600319011261021a576107d5610efe565b6107dd6113d8565b600280546001600160a01b039283166001600160a01b03198216811790925560408051939091168352602083019190915230917f9839267567551f9b0177b329394308fa17d5b854676019a962010283cba2c3d491819081016104ab565b3461021a575f36600319011261021a576020600854604051908152f35b3461021a575f36600319011261021a575f546040516001600160a01b039091168152602090f35b3461021a575f36600319011261021a577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036109da57604051637e345def60e11b81526020816004816401625f10005afa90811561050b575f916109bb575b50604051634f0f2a3960e11b8152906020826004816401625f10015afa90811561050b5761091d925f9261099a575b506110f3565b600654906001600160401b038216916001600160401b0382169183831161094057005b7f7e4f3ccb2c7ca76eee6682c0e86fefbbd6fe24e4af19381a854a14ea091bd9af926104ab926001600160401b031916176006556040519182913095839092916001600160401b0360209181604085019616845216910152565b6109b491925060203d602011610504576104f58183610f72565b9083610917565b6109d4915060203d602011610504576104f58183610f72565b816108e8565b63d37ceefd60e01b5f523360045260245ffd5b3461021a575f36600319011261021a57600154336001600160a01b0390911603610a5f57600180546001600160a01b03199081169091555f805433928116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b63118cdaa760e01b5f523360045260245ffd5b3461021a575f36600319011261021a576002546040516001600160a01b039091168152602090f35b3461021a575f36600319011261021a57610ab26113d8565b600180546001600160a01b03199081169091555f80549182168155906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b5f36600319011261021a576002546001600160a01b03163381900361058957604051630bcfee3f60e11b81526020816004816401625f20035afa90811561050b575f91610c4d575b5061054b573415610c3e57610b5c346005546110e6565b600555604051637e345def60e11b81526020816004816401625f10005afa90811561050b575f91610c1f575b50604051634f0f2a3960e11b8152906020826004816401625f10015afa90811561050b57610bbc925f9261099a57506110f3565b6001600160401b036006549116906001600160401b0381168211610c09575b6040513481527f7c717985ac273e663b7f3050f5b15a4388ff6ed952338954f650e2093e13937f60203092a2005b67ffffffffffffffff1916176006558080610bdb565b610c38915060203d602011610504576104f58183610f72565b81610b88565b631f2a200560e01b5f5260045ffd5b610c66915060203d602011610582576105748183610f72565b81610b45565b3461021a57602036600319011261021a57610c85610efe565b610c8d6113d8565b600480546001600160a01b039283166001600160a01b03198216811790925560408051939091168352602083019190915230917f9268b9726f38824965649bfcf3b0d32ff50816216bf7cdbd57abc3cc8c5dab1291819081016104ab565b3461021a575f36600319011261021a57604051637e345def60e11b81526020816004816401625f10005afa90811561050b575f91610d95575b506001600160401b03604051916351cb86cd60e01b8352166004820152602081602481305afa801561050b575f90610d62575b602090604051908152f35b506020813d602011610d8d575b81610d7c60209383610f72565b8101031261021a5760209051610d57565b3d9150610d6f565b610dae915060203d602011610504576104f58183610f72565b81610d24565b3461021a575f36600319011261021a576004546040516001600160a01b039091168152602090f35b3461021a575f36600319011261021a576020610df6611071565b6001600160401b0360405191168152f35b3461021a575f36600319011261021a576020610313610ffc565b3461021a57602036600319011261021a576002546001600160a01b03163381900361058957604051630bcfee3f60e11b81526020816004816401625f20035afa90811561050b575f91610e81575b5061054b57610e7f600435611113565b005b610e9a915060203d602011610582576105748183610f72565b81610e6f565b3461021a575f36600319011261021a576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461021a575f36600319011261021a576020906005548152f35b600435906001600160a01b038216820361021a57565b3461021a57602036600319011261021a576004356001600160401b038116810361021a576103136020916113eb565b604081019081106001600160401b03821117610f5e57604052565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b03821117610f5e57604052565b9081602091031261021a5751801515810361021a5790565b91908203918211610fb857565b634e487b7160e01b5f52601160045260245ffd5b600754811015610fe85760075f5260205f209060011b01905f90565b634e487b7160e01b5f52603260045260245ffd5b600754801561102d575f198101908111610fb857600161101e61102a92610fcc565b50015460085490610fab565b90565b505f90565b9081602091031261021a57516001600160401b038116810361021a5790565b906001600160401b03809116911603906001600160401b038211610fb857565b604051637e345def60e11b81526020816004816401625f10005afa90811561050b575f916110c7575b506001600160401b0360065416906001600160401b03811682116110be5750505f90565b61102a91611051565b6110e0915060203d602011610504576104f58183610f72565b5f61109a565b91908201809211610fb857565b906001600160401b03809116911601906001600160401b038211610fb857565b8015610c3e576005548082116113c25760405163facd743b60e01b81523060048201526020816024816401625f20015afa801561050b5783915f916113a3575b50611268575b61116291610fab565b6005556001600160401b036006541660075480155f146111d9575060405161119a9161118d82610f43565b815282602082015261162a565b6001600160401b036006541660405191825260208201527f536c53e11db8105c787d8d5fce8b01f689aefd57771dad0d0c62c33af2ecc1f960403092a2565b5f198101908111610fb8576111ed90610fcc565b5080546001600160401b0316828103611218575060019150016112118282546110e6565b905561119a565b8281101561125157509061123383600161124c9401546110e6565b6040519161124083610f43565b8252602082015261162a565b61119a565b90506350579b2960e01b5f5260045260245260445ffd5b5060405163a310624f60e01b81523060048201526020816024816401625f20015afa90811561050b575f91611368575b50600481101561135457806002849214908115611349575b5015611159575060405163aa7517e160e01b81526020816004816401625f10025afa90811561050b575f91611317575b50806112ec8484610fab565b106112f8575081611159565b9161130291610fab565b630398e3fb60e11b5f5260045260245260445ffd5b90506020813d602011611341575b8161133260209383610f72565b8101031261021a57515f6112e0565b3d9150611325565b60039150145f6112b0565b634e487b7160e01b5f52602160045260245ffd5b90506020813d60201161139b575b8161138360209383610f72565b8101031261021a5751600481101561021a575f611298565b3d9150611376565b6113bc915060203d602011610582576105748183610f72565b5f611153565b9063503a9fa360e11b5f5260045260245260445ffd5b5f546001600160a01b03163303610a5f57565b6006546001600160401b03908116908216116114855761140d600554916116a1565b60085490818082116114765750505f905b6007545f918161144c575b5050808210156114475761102a929161144191610fab565b906110e6565b505090565b5f1982019250908211610fb857600161146761146f93610fcc565b500154610fab565b5f80611429565b61147f91610fab565b9061141e565b61140d5f916116a1565b90611498611543565b91821561153d575f80808581946114b1826008546110e6565b60085560018060a01b0316806040518381527fd0d89537daf7d9f2b5b2315d3af47f1fe04419966247ffb963b1fa5b077c063660203092a35af13d15611538573d6001600160401b038111610f5e5760405190611518601f8201601f191660200183610f72565b81525f60203d92013e5b1561152957565b6312171d8360e31b5f5260045ffd5b611522565b505f9150565b6007541561162657604051637e345def60e11b81526020816004816401625f10005afa90811561050b575f91611607575b5060405163d8f08ab560e01b8152906020826004816401625f10015afa91821561050b575f926115e6575b506001600160401b0382166001600160401b03821611156115e0576115cc916115c791611051565b6116a1565b600854808211156115e05761102a91610fab565b50505f90565b61160091925060203d602011610504576104f58183610f72565b905f61159f565b611620915060203d602011610504576104f58183610f72565b5f611574565b5f90565b60075468010000000000000000811015610f5e5760018101600755600754811015610fe85760075f5260011b7fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68801906020816001600160401b03806001945116166001600160401b03198554161784550151910155565b60075480156115e05760075415610fe85760075f527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688546001600160401b0392831692168211156115e0575f1981019081119081610fb857826001600160401b0361170b83610fcc565b50541610611764575f91610fb857905b60018101808211610fb8578211156117645761173782826110e6565b60011c90836001600160401b0361174d84610fcc565b505416101561175c575061171b565b91509061171b565b600192506117729150610fcc565b5001549056fea2646970667358221220c365f3f4f8cfa5654455645a147f53c0fbc27f24ee590aae99643888582284a164736f6c634300081e0033a2646970667358221220e417fbdad09257f88a74f96891799b43aff69af121903ec9f86ae54fadc2e71864736f6c634300081e0033", + "storage": { + "0x00": "0x01", + "0x02": "0x01", + "0x22f8456ca89e632878b5375f09b6a9c6852f97dd565185ff2a272ebd1ceccf87": "0x01", + "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563": "0x33f4ee289578b2ff35ac3ffa46ea2e97557da32c" + } + }, + "0x00000000000000000000000000000001625f1004": { + "balance": "0x00", + "nonce": 0, + "code": "0x60806040526004361015610011575f80fd5b5f3560e01c8063168e2a4c146102a55780632f01b9751461021357806331ead843146101ee578063392e53cd146101c95780635282490e146101af578063664b96bf146101885780637f1514e714610166578063c22b026f1461009d5763d28bd80f1461007c575f80fd5b34610099575f366003190112610099576020600154604051908152f35b5f80fd5b34610099576100ab36610373565b90916401625f0001330361014a576006549160ff8360081c1661013c57610100936001600160801b0367ffffffffffffffff936100e7846104dd565b166001600160801b03195f5416175f556001551667ffffffffffffffff19600254161760025561ff001916176006557fefb132df7634b5f0952f33d2fd54b9553619b8ed5db752b495b59970219012d95f80a1005b62dc149f60e41b5f5260045ffd5b630272d02960e61b5f52336004526401625f000160245260445ffd5b34610099575f36600319011261009957602060ff600654166040519015158152f35b34610099575f36600319011261009957602067ffffffffffffffff60025416604051908152f35b34610099575f366003190112610099576101c76103e2565b005b34610099575f36600319011261009957602060ff60065460081c166040519015158152f35b34610099575f3660031901126100995760206001600160801b035f5416604051908152f35b34610099575f366003190112610099575f604061022e6103ae565b82815282602082015201526102416104be565b608060ff6006541667ffffffffffffffff61025a6103ae565b6001600160801b03600354168152600454602082019081526001600160801b038360055416926040810193845260405195151586525116602085015251604084015251166060820152f35b34610099576102b336610373565b6401625f30003303610357576040926102ca6104be565b6102d3826104dd565b67ffffffffffffffff6001600160801b036102ec6103ae565b9216928383528460208401521693849101526001600160801b0319600354161760035560045567ffffffffffffffff196005541617600555600160ff1960065416176006557f03712bdfc6d1df48d5accaa6201c546b6a7b3e0efcd0a87c8f313f0db03afaad5f80a1005b630272d02960e61b5f52336004526401625f300060245260445ffd5b6060906003190112610099576004356001600160801b038116810361009957906024359060443567ffffffffffffffff811681036100995790565b604051906060820182811067ffffffffffffffff8211176103ce57604052565b634e487b7160e01b5f52604160045260245ffd5b6401625f200333036104a2576103f66104be565b60065460ff81161561049f576001600160801b03600354166001600160801b03195f5416175f5560045460015567ffffffffffffffff6005541667ffffffffffffffff19600254161760025560ff19166006555f6003555f6004555f6005557fefb132df7634b5f0952f33d2fd54b9553619b8ed5db752b495b59970219012d95f80a17f146dba57fde6cfafd5deee4300406784cc20d811eeccf1060527984a9476f3305f80a1565b50565b630272d02960e61b5f52336004526401625f200360245260445ffd5b60ff60065460081c16156104ce57565b63d4f753b560e01b5f5260045ffd5b67ffffffffffffffff16156104ee57565b632be0023160e11b5f5260045ffdfea2646970667358221220a40011940a30fc866e833d1b758a9a5bec8cd915c22dabe9e66eaedb6859e15b64736f6c634300081e0033", + "storage": { + "0x01": "0x8ac7230489e80000", + "0x06": "0x0100", + "0x02": "0x8cd0e3a000", + "0x00": "0x0de0b6b3a7640000" + } + }, + "0x00000000000000000000000000000001625f4000": { + "balance": "0x00", + "nonce": 0, + "code": "0x60a06040526004361015610011575f80fd5b5f3560e01c806309563ca41461066757806319a1df9f1461061d57806352e7ae8f146105e05780637779cf9f14610548578063942ff9bd1461050f5780639e2fe43e146103955780639ee1ed1e146102e9578063c243109214610289578063c7c3c18f146101e65763d46c83a414610087575f80fd5b346101e25763ffffffff61009a36610932565b9290916060604080516100ac8161098d565b5f81525f60208201520152165f525f60205260405f20905f526020526001600160801b0360405f2091165f5260205260405f206040516100eb8161098d565b81546001600160401b03168152600182015460208201908152604051600290930180545f9161011982610a1a565b80875291600181169081156101bb575060011461017e575b6001600160401b038561017a888761014b828903836109a8565b604084019182526040519485946020865251166020850152516040840152516060808401526080830190610969565b0390f35b5f908152602081209092505b8183106101a157505083016020018161014b610131565b6001816020929493945483858a010152019101919061018a565b60ff191660208089019190915292151560051b8701909201925083915061014b9050610131565b5f80fd5b346101e25760603660031901126101e2576101ff6108ef565b6044356001600160a01b03811691602435918390036101e25763ffffffff90610226610e63565b165f81815260036020908152604080832085845282529182902080546001600160a01b03198116871790915591519485526001600160a01b03909116937f06d3d665901667761bd3d45f129320bfcb3912331aa33a2496a22e731cc167d89190a4005b346101e257602063ffffffff61029e36610932565b929091165f526001835260405f20905f5282526001600160801b0360405f20541680151591826102d5575b50506040519015158152f35b6001600160801b03161115905082806102c9565b346101e25760c03660031901126101e2576103026108ef565b6044356001600160401b0381116101e257610321903690600401610902565b916064356001600160401b0381116101e257610341903690600401610902565b906084356001600160401b0381116101e257610361903690600401610902565b92909160a435966001600160401b0388116101e257610387610393983690600401610902565b97909660243590610ae6565b005b346101e25760403660031901126101e2576004356001600160401b0381116101e2576103c5903690600401610902565b6024356001600160401b0381116101e2576103e4903690600401610902565b91906401625f000133036104f35760ff600454166104e5578282036104cf575f5b82811061041b576004805460ff19166001179055005b8061043161042c6001938786610a9d565b610ac1565b63ffffffff61044961044484888b610a9d565b610ad5565b165f52600260205260405f2090838060a01b03166bffffffffffffffffffffffff60a01b8254161790555f61048261044483878a610a9d565b7f88fc9028c303c26a3ed0e73d9021d763d4e2118b0d4d8529257a43dc1d7d7276602063ffffffff6104b861042c878c8b610a9d565b9360405194888060a01b031685521692a301610405565b50631f4bb7c160e31b5f5260045260245260445ffd5b62dc149f60e41b5f5260045ffd5b630272d02960e61b5f52336004526401625f000160245260445ffd5b346101e25760403660031901126101e257602061053661052d6108ef565b60243590610a52565b6040516001600160a01b039091168152f35b346101e25760403660031901126101e2576105616108ef565b6024356001600160a01b03811691908290036101e25763ffffffff90610585610e63565b165f8181526002602090815260409182902080546001600160a01b03198116861790915591519384526001600160a01b03909116927f88fc9028c303c26a3ed0e73d9021d763d4e2118b0d4d8529257a43dc1d7d72769190a3005b346101e25760203660031901126101e25763ffffffff6105fe6108ef565b165f526002602052602060018060a01b0360405f205416604051908152f35b346101e25760403660031901126101e25763ffffffff61063b6108ef565b165f52600160205260405f206024355f5260205260206001600160801b0360405f205416604051908152f35b346101e25760c03660031901126101e2576106806108ef565b6024356044356001600160801b03811681036101e257608435906001600160401b0382116101e257366023830112156101e2578160040135906001600160401b0382116101e257602483019260248336920101116101e25760a4356106e3610e39565b6106ee828688610e8d565b600190806108da575b506106fe57005b600260405161070c8161098d565b6001600160401b034216815263ffffffff610732602083019660643588528636916109e4565b97604083019889521694855f525f60205260405f20875f5260205260405f206001600160801b0385165f526020526001600160401b0360405f209251166001600160401b03198354161782555160018201550194519485516001600160401b0381116108c6576107a28254610a1a565b601f8111610881575b506020601f821160011461080f5781905f51602061111a5f395f51905f529697985f92610804575b50508160011b915f199060031b1c19161790555b604080516001600160801b039290921682526020820192909252a3005b0151905088806107d3565b601f19821697835f52815f20985f5b8181106108695750915f51602061111a5f395f51905f5297989991846001959410610851575b505050811b0190556107e7565b01515f1960f88460031b161c19169055888080610844565b838301518b556001909a01996020938401930161081e565b825f5260205f20601f830160051c810191602084106108bc575b601f0160051c01905b8181106108b157506107ab565b5f81556001016108a4565b909150819061089b565b634e487b7160e01b5f52604160045260245ffd5b6108e99150838584888a610f10565b866106f7565b6004359063ffffffff821682036101e257565b9181601f840112156101e2578235916001600160401b0383116101e2576020808501948460051b0101116101e257565b60609060031901126101e25760043563ffffffff811681036101e25790602435906044356001600160801b03811681036101e25790565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b606081019081106001600160401b038211176108c657604052565b90601f801991011681019081106001600160401b038211176108c657604052565b6001600160401b0381116108c657601f01601f191660200190565b9291926109f0826109c9565b916109fe60405193846109a8565b8294818452818301116101e2578281602093845f960137010152565b90600182811c92168015610a48575b6020831014610a3457565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610a29565b63ffffffff1690815f52600360205260405f20905f5260205260018060a01b0360405f20541680610a9857505f908152600260205260409020546001600160a01b031690565b905090565b9190811015610aad5760051b0190565b634e487b7160e01b5f52603260045260245ffd5b356001600160a01b03811681036101e25790565b3563ffffffff811681036101e25790565b969394919798959290608052610afa610e39565b8015610e2e57838114801590610e24575b610e09575f5b818110610b245750505050505050505050565b610b2f81838b610a9d565b35906001600160801b03821682036101e257610b4c818589610a9d565b3586821015610aad578160051b860135601e19873603018112156101e25786016001600160401b038135116101e25760208101918135360383136101e2578b610ba68f610b9b878f8a93610a9d565b359260805190610e8d565b60019080610def575b50610bc2575b5050506001915001610b11565b610bef60405193610bd28561098d565b6001600160401b03421685526020850192835236908435906109e4565b906040840191825263ffffffff8d165f525f60205260405f206080515f5260205260405f206001600160801b0387165f526020526001600160401b0360405f209451166001600160401b0319855416178455516001840155519182516001600160401b0381116108c6578c93610c686002840154610a1a565b601f8111610d8c575b50602090601f8311600114610cf85792600283610ce29460019a945f51602061111a5f395f51905f52975f92610ced575b50505f19600383901b1c1916908a1b179101555b604080516080516001600160801b03909316815294356020860152909463ffffffff1693918291820190565b0390a35f8080610bb5565b015190505f80610ca2565b96929190600283015f52805f20975f5b601f1984168110610d625750600183819a610ce296946002945f51602061111a5f395f51905f529997601f19811610610d4a575b505050811b01910155610cb6565b01515f1960f88460031b161c191690555f8080610d3c565b9294965090929496976020600181928685015181550194019201908f969492919897959398610d08565b909192939450600284015f5260205f20601f840160051c810160208510610de8575b908f9695949392915b601f830160051c82018110610dcd575050610c71565b600191929394959697505f815501908f969594939291610db7565b5080610dae565b610e0391508d858886359260805190610f10565b5f610baf565b83869163055fc4f160e41b5f5260045260245260445260645ffd5b5085811415610b0b565b505050505050505050565b6401625f00003303610e4757565b630272d02960e61b5f52336004526401625f000060245260445ffd5b6401625f30003303610e7157565b630272d02960e61b5f52336004526401625f300060245260445ffd5b63ffffffff16805f52600160205260405f20825f526020526001600160801b038060405f20541693169280841115610ee757505f52600160205260405f20905f5260205260405f20906001600160801b0319825416179055565b6084939192604051936331de2c6960e21b85526004850152602484015260448301526064820152fd5b9290939491610f1f8585610a52565b6001600160a01b03811693841561110c5763ffffffff60209188975f8860a4604051809e81978296637d59959360e11b8452169d8e60048401526024830152806001600160801b038c169c8d604485015260806064850152816084850152848401378181018301859052601f01601f19168101030193f15f97816110cf575b506110265750507f87bf04492b6c9a596ce593adb0c3385db667d8afcfd0d7ce7b2a31178235d579929394503d5f1461101c576110143d610fde816109c9565b90610fec60405192836109a8565b81523d5f602083013e5b60405193849384526020840152606060408401526060830190610969565b0390a3600190565b6110146060610ff6565b604080516001600160801b03841681526001600160a01b0383166020820152929450909250859185917f8abfad87b49edad3c3576a30c16dfd697e67989263573e5841bc112ff7a5adfe91a38415611080575b5050505090565b604080516001600160801b039390931683526001600160a01b039190911660208301527fe47110ba144893e977108101be7b8a468a86641827530c3017faec035955b41b91a35f808080611079565b9097506020813d602011611104575b816110eb602093836109a8565b810103126101e2575180151581036101e257965f610f9e565b3d91506110de565b505050505050505060019056fe4ad19702760607537c43d0887de2e9ec45910c3b3b2bbee41f61266954010f15a2646970667358221220dd030be4b4c9f0da0230f009168b6c47d5a884b91f46a8b0a9854c26f2c89e4264736f6c634300081e0033", + "storage": { + "0xac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077b": "0x595475934ed7d9faa7fca28341c2ce583904a44e", + "0x04": "0x01", + "0xe90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0": "0x01625f4001" + } + }, + "0x00000000000000000000000000000001625f1007": { + "balance": "0x00", + "nonce": 0, + "code": "0x60806040526004361015610011575f80fd5b5f3560e01c80631f6fc389146103b65780632f01b975146102d8578063392e53cd146102b35780634308aec114610278578063439fab91146100a65780635282490e1461008c57637f1514e714610066575f80fd5b34610088575f36600319011261008857602060ff600254166040519015158152f35b5f80fd5b34610088575f366003190112610088576100a4610709565b005b34610088576100b43661053d565b906401625f0001330361025c5760ff60025460081c1661024d57811561023e5767ffffffffffffffff821161022a576100ed5f546105b2565b601f81116101e5575b505f91601f8111600114610178576101278180610140955f9161016d575b508160011b915f199060031b1c19161790565b5f555b61010061ff001960025416176002553691610622565b602081519101207f90114d889e44b2935273e7c12f7f28f02fb3711ee96b6956f06111206e3ac2055f80a2005b905084013586610114565b5f808052601f198216935f5160206109765f395f51905f52915b8581106101cd57508261014095106101b4575b5050600181811b015f5561012a565b8301355f19600384901b60f8161c1916905583806101a5565b90916020600181928588013581550193019101610192565b5f805261021a905f5160206109765f395f51905f52601f850160051c81019160208610610220575b601f0160051c01906105ea565b826100f6565b909150819061020d565b634e487b7160e01b5f52604160045260245ffd5b6330745b1d60e11b5f5260045ffd5b63287e769960e11b5f5260045ffd5b630272d02960e61b5f52336004526401625f000160245260445ffd5b34610088575f36600319011261008857610290610956565b6102af61029b610668565b60405191829160208352602083019061058e565b0390f35b34610088575f36600319011261008857602060ff60025460081c166040519015158152f35b34610088575f366003190112610088576102f0610956565b60ff60025416604051905f8260015491610309836105b2565b8083529260018116908115610397575060011461034b575b61032d92500383610600565b6102af6040519283921515835260406020840152604083019061058e565b5060015f90815290915f5160206109965f395f51905f525b81831061037b57505090602061032d92820101610321565b6020919350806001915483858901015201910190918492610363565b6020925061032d94915060ff191682840152151560051b820101610321565b34610088576103c43661053d565b906401625f30003303610521576103d9610956565b811561023e5767ffffffffffffffff821161022a576103f96001546105b2565b601f81116104e6575b505f91601f811160011461047757610432818061044a955f9161016d57508160011b915f199060031b1c19161790565b6001555b600160ff1960025416176002553691610622565b602081519101207f2a585ec3dd96a5e9aa4fb3e4f087a56630725dce18cec07e46afbd48d03c64cc5f80a2005b601f1981169260015f525f5160206109965f395f51905f52905f5b8581106104ce57508261044a95106104b5575b5050600181811b01600155610436565b8301355f19600384901b60f8161c1916905583806104a5565b90916020600181928588013581550193019101610492565b60015f5261051b905f5160206109965f395f51905f52601f850160051c8101916020861061022057601f0160051c01906105ea565b82610402565b630272d02960e61b5f52336004526401625f300060245260445ffd5b9060206003198301126100885760043567ffffffffffffffff811161008857826023820112156100885780600401359267ffffffffffffffff84116100885760248483010111610088576024019190565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b90600182811c921680156105e0575b60208310146105cc57565b634e487b7160e01b5f52602260045260245ffd5b91607f16916105c1565b8181106105f5575050565b5f81556001016105ea565b90601f8019910116810190811067ffffffffffffffff82111761022a57604052565b92919267ffffffffffffffff821161022a576040519161064c601f8201601f191660200184610600565b829481845281830111610088578281602093845f960137010152565b604051905f825f549161067a836105b2565b80835292600181169081156106ea57506001146106a0575b61069e92500383610600565b565b505f80805290915f5160206109765f395f51905f525b8183106106ce57505090602061069e92820101610692565b60209193508060019154838589010152019101909184926106b6565b6020925061069e94915060ff191682840152151560051b820101610692565b6401625f2003330361093a5761071d610956565b60ff600254161561069e576107336001546105b2565b9067ffffffffffffffff821161022a5761074d5f546105b2565b601f8111610900575b505f91601f8111600114610886578061078392935f9161087a57508160011b915f199060031b1c19161790565b5f555b60ff196002541660025561079b6001546105b2565b806107fb575b506107aa610668565b602081519101207f90114d889e44b2935273e7c12f7f28f02fb3711ee96b6956f06111206e3ac2055f80a27f6817a9f9ad56d871a114f3e84be78b44f0c7d5a5ed8acb8dc44939ee168ec9d85f80a1565b601f811160011461081257505f6001555b5f6107a1565b601f0160051c5f5160206109965f395f51905f52017fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf75b81811061086f57505060015f525f6001555f5f5160206109965f395f51905f525561080c565b5f8155600101610849565b9050600101545f610114565b5f8080525f5160206109965f395f51905f52935f5160206109765f395f51905f5291601f198416905b8181106108e85750948360019596106108d0575b505050811b015f55610786565b01545f1960f88460031b161c191690555f80806108c3565b9192600180602092868a0154815501940192016108af565b5f8052610934905f5160206109765f395f51905f52601f850160051c8101916020861061022057601f0160051c01906105ea565b5f610756565b630272d02960e61b5f52336004526401625f200360245260445ffd5b60ff60025460081c161561096657565b63cff6ea4360e01b5f5260045ffdfe290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6a2646970667358221220400e4733484e9d981cc379c874d017139d2fdc7db8246e64eb10d2b42d60619064736f6c634300081e0033", + "storage": { + "0x02": "0x0100", + "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e564": "0x0100010200000000000000000020000000000000000000000000000000000000", + "0x00": "0x69", + "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563": "0x0301010a00000000000000280000000000000001010000000a00000000000000" + } + }, + "0x00000000000000000000000000000001625f1002": { + "balance": "0x00", + "nonce": 0, + "code": "0x6080806040526004361015610012575f80fd5b5f3560e01c90816319905cd11461058c575080632aa12a5b146105635780632f01b9751461045f578063392e53cd1461043a57806341c87e661461041d5780635282490e146104035780637f1514e7146103e15780638d4273b1146103bf57806397b18616146102cd578063aa7517e1146102b1578063b0bdfc0914610170578063b692f9081461014b578063bd8499af1461012e578063cd8dc9f514610113578063d8f08ab5146100ed5763e84d01be146100cc575f80fd5b346100e9575f3660031901126100e9576020600154604051908152f35b5f80fd5b346100e9575f3660031901126100e95760206001600160401b0360025416604051908152f35b346100e9575f3660031901126100e957602060405160328152f35b346100e9575f3660031901126100e9576020604051620100008152f35b346100e9575f3660031901126100e957602060ff60025460401c166040519015158152f35b346100e95761017e366105a6565b966401625f30009691939492959633036102955761019a610753565b6101a78686898585610772565b8760e06001600160401b036101ba610607565b99848b528560208c015216948560408b01521515958660608b01526001600160401b03881660808b01528860a08b01521515988960c082015201526006556007556001600160401b0319600854161760085560ff60401b6008549160401b169060ff60401b19161760085567ffffffffffffffff60481b806008549260481b16169067ffffffffffffffff60481b19161760085560095560ff8019600a5416911617600a55600b55600160ff19600c541617600c557f48c14389f3a7f2f6247df576dcbbbce936a180a7ff3c255dab8bf4c6362ed55f5f80a1005b630272d02960e61b5f52336004526401625f300060245260445ffd5b346100e9575f3660031901126100e95760205f54604051908152f35b346100e9576102db366105a6565b94919295966401625f000194919433036103a357600c549660ff8860081c166103955788826103158784886101009e60ff60401b98610772565b5f556001556001600160401b0367ffffffffffffffff60481b6002549260481b169416906001600160881b0319161791151560401b16171760025560035560ff801960045416911515161760045560055561ff00191617600c557fe13723bcd78cddcc4ae905817058fcfc8c022ca2ca0fdd822a9a74cd466e85aa5f80a1005b62dc149f60e41b5f5260045ffd5b630272d02960e61b5f52336004526401625f000160245260445ffd5b346100e9575f3660031901126100e957602060ff600454166040519015158152f35b346100e9575f3660031901126100e957602060ff600c54166040519015158152f35b346100e9575f3660031901126100e95761041b61063b565b005b346100e9575f3660031901126100e9576020600354604051908152f35b346100e9575f3660031901126100e957602060ff600c5460081c166040519015158152f35b346100e9575f3660031901126100e9575f60e061047a610607565b8281528260208201528260408201528260608201528260808201528260a08201528260c082015201526104ab610753565b61012060ff600c54166104bc610607565b6006548152600754602082019081526008546001600160401b03604084019181811683526060850160ff8260401c161515815282608087019260481c168252826009549460a0880195865260ff600a54169660c089019715158852600b549860e08101998a526040519a15158b525160208b01525160408a0152511660608801525115156080870152511660a08501525160c084015251151560e083015251610100820152f35b346100e9575f3660031901126100e95760206001600160401b0360025460481c16604051908152f35b346100e9575f3660031901126100e9576020906005548152f35b6101009060031901126100e95760043590602435906044356001600160401b03811681036100e9579060643580151581036100e957906084356001600160401b03811681036100e9579060a4359060c43580151581036100e9579060e43590565b6040519061010082018281106001600160401b0382111761062757604052565b634e487b7160e01b5f52604160045260245ffd5b6401625f200333036107375761064f610753565b600c5460ff811615610734576006545f556007546001556008546002549060ff60401b60ff67ffffffffffffffff60481b8316936001600160401b038416906001600160881b031916179260401c16151560401b16171760025560095460035560ff600a5416151560ff801960045416911617600455600b5460055560ff1916600c555f6006555f6007555f6008555f6009555f600a555f600b557fe13723bcd78cddcc4ae905817058fcfc8c022ca2ca0fdd822a9a74cd466e85aa5f80a17fa6feeb388468b854dc4288e2740c5bb1239c38b279a61ba68504e9cf02d831645f80a1565b50565b630272d02960e61b5f52336004526401625f200360245260445ffd5b60ff600c5460081c161561076357565b630ce192cf60e21b5f5260045ffd5b8015610814578082106107ff5750506001600160401b0316156107f0576001600160401b0316801580156107e6575b6107d45750801580156107c8575b6107b65750565b630703d21b60e11b5f5260045260245ffd5b506201000081116107af565b63063362af60e51b5f5260045260245ffd5b50603281116107a1565b63c28135ab60e01b5f5260045ffd5b631b7196bf60e21b5f5260045260245260445ffd5b6324c76d4f60e01b5f5260045ffdfea264697066735822122098b4cca4d1be17a7d291f4d2b11493bb52648b4ee77f263561b9146f8a06841164736f6c634300081e0033", + "storage": { + "0x02": "0x14010000008cd0e3a000", + "0x00": "0x0de0b6b3a7640000", + "0x03": "0x64", + "0x0c": "0x0100", + "0x01": "0xd3c21bcecceda1000000" + } + }, + "0x00000000000000000000000000000001625f2005": { + "balance": "0x00", + "nonce": 0, + "code": "0x60806040526004361015610011575f80fd5b5f3560e01c806303f89347146104405780630485aa6214610305578063392e53cd146102e357806354a55aef146102c7578063afe4bd441461028b578063b28f6645146100f75763fe4b84df14610066575f80fd5b346100f35760203660031901126100f3576004356401625f000133036100d75760015460ff81166100c95760019060ff1916176001555f5b8181106100a757005b6001906100c36100b5610531565b5f81525f6020820152610550565b0161009e565b62dc149f60e41b5f5260045ffd5b630272d02960e61b5f52336004526401625f000160245260445ffd5b5f80fd5b346100f35760403660031901126100f3576101106104f1565b6024356001600160401b0381116100f357366023820112156100f3578060040135906001600160401b0382116100f3573660248360051b830101116100f3576401625f2004330361026f575f54926001600160401b038116906001600160401b0382141580610266575b610234575b505f5b838110156102065760248160051b84010135906001600160401b038216918281036100f35786600193106101b8575b5001610182565b6101c461020091610507565b5080546fffffffffffffffff0000000000000000198116604091821c6001600160401b0316860190911b67ffffffffffffffff60401b16179055565b866101b1565b507fb22f35b6ef1267e7ff2e09ae03aeb649a60a63c689538cb380fc1e406738d8fb602084604051908152a2005b61023d90610507565b50805467ffffffffffffffff1981166001600160401b039182166001019091161790558461017f565b5084821061017a565b630272d02960e61b5f52336004526401625f200460245260445ffd5b346100f35760203660031901126100f35760406001600160401b036102b66102b16104f1565b61060a565b835191831682529091166020820152f35b346100f3575f3660031901126100f35760205f54604051908152f35b346100f3575f3660031901126100f357602060ff600154166040519015158152f35b346100f3575f3660031901126100f3575f54610320816105df565b6040519190601f01601f191682016001600160401b0381118382101761042c57604052808252601f19610352826105df565b015f5b81811061040d5750505f5b8181106103c457826040518091602082016020835281518091526020604084019201905f5b818110610393575050500390f35b91935091602060406001926001600160401b0383885182815116845201511683820152019401910191849392610385565b806103d0600192610507565b506001600160401b036103e1610531565b9154818116835260401c1660208201526103fb82866105f6565b5261040681856105f6565b5001610360565b602090610418610531565b5f81525f8382015282828701015201610355565b634e487b7160e01b5f52604160045260245ffd5b346100f35760203660031901126100f3576004356401625f200333036104d5575f54805b61048857505f5b81811061047457005b6001906104826100b5610531565b0161046b565b5f5480156104c1575f190161049c81610507565b6104ae575f90555f555f190180610464565b634e487b7160e01b5f525f60045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b630272d02960e61b5f52336004526401625f200360245260445ffd5b600435906001600160401b03821682036100f357565b5f5481101561051d575f805260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b60405190604082018281106001600160401b0382111761042c57604052565b5f546801000000000000000081101561042c57600181015f555f5481101561051d575f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630181518154602093909301516fffffffffffffffffffffffffffffffff199093166001600160401b03919091161760409290921b67ffffffffffffffff60401b16919091179055565b6001600160401b03811161042c5760051b60200190565b805182101561051d5760209160051b010190565b5f546001600160401b038216101561063b5761062590610507565b5054906001600160401b038083169260401c1690565b505f905f9056fea2646970667358221220031cf0551ed0484ad5f87f30c2cbb562a36b6e422b15d7a21b200a43aa81fd0c64736f6c634300081e0033", + "storage": { + "0x00": "0x01", + "0x01": "0x01" + } + }, + "0x00000000000000000000000000000001625f1009": { + "balance": "0x00", + "nonce": 0, + "code": "0x60806040526004361015610011575f80fd5b5f3560e01c8063319bb28d14610b265780633fde8bd014610adb57806347f7b60b14610738578063677716531461067c5780636cb6cde61461063c578063779900b4146102f75780639286144e146102a6578063bdb97371146101e6578063ca9a11ad1461013c5763dc883dc014610087575f80fd5b346101385760203660031901126101385763ffffffff6100a5610c71565b165f52600460205260405f20604051806020835491828152019081935f5260205f20905f5b81811061012257505050816100e0910382610d53565b604051918291602083019060208452518091526040830191905f5b818110610109575050500390f35b82518452859450602093840193909201916001016100fb565b82548452602090930192600192830192016100ca565b5f80fd5b346101385763ffffffff61014f36610c84565b9290915f602060405161016181610d1d565b606081520152165f52600160205260405f20905f5260205260405f20905f526020526101da60405f206001600160401b036001604051926101a184610d1d565b6101aa81610d9f565b8452015416602082019081526001600160401b036040519384936020855251604060208601526060850190610cab565b91511660408301520390f35b34610138575f3660031901126101385760025461020281610d74565b906102106040519283610d53565b80825261021c81610d74565b602083019190601f19013683375f5b81811061027c578284604051918291602083019060208452518091526040830191905f5b81811061025d575050500390f35b825163ffffffff1684528594506020938401939092019160010161024f565b8063ffffffff61028d600193610e3f565b90549060031b1c1661029f8287610d8b565b520161022b565b346101385760603660031901126101385763ffffffff6102c4610c71565b165f525f60205260405f206024355f5260205260206102e860443560405f20610e57565b90549060031b1c604051908152f35b34610138575f366003190112610138575f6002545f5b8181106105ba575061031e82610d74565b9161032c6040519384610d53565b80835261033b601f1991610d74565b015f5b8181106105855750505f905f5b8181106103f957836040518091602082016020835281518091526040830190602060408260051b8601019301915f905b82821061038a57505050500390f35b919360019193955060208091603f1989820301855287519063ffffffff825116815282820151838201526040820151604082015260806001600160401b03816103e2606086015160a0606087015260a0860190610cab565b94015116910152960192019201859493919261037b565b63ffffffff61040782610e3f565b90549060031b1c16805f52600460205260405f2054905f905b8282106104325750505060010161034b565b92919593835f96929652600460205261044e8660405f20610e57565b90549060031b1c92845f525f60205260405f20845f5260205260405f209260405180948591602082549182815201915f5260205f20905f905b80821061056d575050509061049d910385610d53565b5f905b845182101561055957865f52600160205260405f20865f5260205260405f206104c98387610d8b565b515f5260205260405f206104dd8387610d8b565b51906105116001600160401b0360018301541691604051936104fe85610d38565b8b85528a60208601526040850152610d9f565b60608301526080820152610525828a610d8b565b526105308189610d8b565b505f19811461054557600191820191016104a0565b634e487b7160e01b5f52601160045260245ffd5b979195935050600191959793500190610420565b90919260016020819286548152019401920190610487565b60209060405161059481610d38565b5f81525f838201525f60408201526060808201525f60808201528282870101520161033e565b63ffffffff6105c882610e3f565b90549060031b1c16805f52600460205260405f2054905f915b8083106105f35750505060010161030d565b909194825f52600460205261060b8660405f20610e57565b90549060031b1c835f525f60205260405f20905f5260205260405f20548101809111610545579460010191906105e1565b346101385760403660031901126101385763ffffffff61065a610c71565b165f525f60205260405f206024355f52602052602060405f2054604051908152f35b346101385760403660031901126101385763ffffffff61069a610c71565b165f525f60205260405f206024355f5260205260405f20604051806020835491828152019081935f5260205f20905f5b81811061072257505050816106e0910382610d53565b604051918291602083019060208452518091526040830191905f5b818110610709575050500390f35b82518452859450602093840193909201916001016106fb565b82548452602090930192600192830192016106ca565b3461013857608036600319011261013857610751610c71565b60243560443591606435906001600160401b0382116101385736602383011215610138578160040135906001600160401b0382116101385760248301926024833692010111610138576401625f000133141580610acc575b610a1a578115610a0b5763ffffffff16916107c383610ff8565b50825f5260046020526107d98460405f2061104d565b50825f525f60205260405f20845f526020526107f88560405f2061104d565b5060405161080581610d1d565b601f19601f8401169060405161081e6020840182610d53565b848152848460208301375f60208683010152815260208101906001600160401b0342168252855f52600160205260405f20875f5260205260405f20885f5260205260405f2090518051906001600160401b0382116109f7576108808354610ccf565b601f81116109bc575b50602090601f83116001146109285760409593837f98f2657b7d68bf8c8ce10d886ca0cb34ca75fe6deb58b7f03912b7f9f890423d999896946001600160401b03946001945f9261091d575b50505f19600383901b1c191690831b1781555b019151166001600160401b03198254161790555f838581519687956020875281602088015283870137840101528101030190a4005b015190508e806108d5565b90601f19831691845f52815f20925f5b8181106109a45750846001600160401b039460019460409a98947f98f2657b7d68bf8c8ce10d886ca0cb34ca75fe6deb58b7f03912b7f9f890423d9d9c9a9887951061098c575b505050811b0181556108e8565b01515f1960f88460031b161c191690558e808061097f565b92936020600181928786015181550195019301610938565b6109e790845f5260205f20601f850160051c810191602086106109ed575b601f0160051c0190610d07565b8a610889565b90915081906109da565b634e487b7160e01b5f52604160045260245ffd5b6330745b1d60e11b5f5260045ffd5b604051610a28606082610d53565b60028152602081016040368237815115610ab8576401625f00018152815160011015610ab857906401625f3000604082015260405191829163020be67b60e11b8352604483019033600485015260406024850152518091526064830191905f5b818110610a96575050500390fd5b82516001600160a01b0316845285945060209384019390920191600101610a88565b634e487b7160e01b5f52603260045260245ffd5b506401625f30003314156107a9565b346101385763ffffffff610aee36610c84565b929091165f52600160205260405f20905f5260205260405f20905f526020526020610b1c60405f2054610ccf565b1515604051908152f35b3461013857610b3436610c84565b916401625f30003303610c555763ffffffff16805f525f60205260405f20825f52602052610b658360405f20610f47565b50805f52600160205260405f20825f5260205260405f20835f526020525f600160408220610b938154610ccf565b80610c14575b500155805f525f60205260405f20825f5260205260405f205415610bde575b7f210a43ad8babab5f09f5c14b5ce04d427f3c7ef720a9bfb2f15e46d1696f327a5f80a4005b805f526004602052610bf38260405f20610f47565b50805f52600460205260405f2054610bb857610c0e81610e6c565b50610bb8565b601f81118314610c2957508281555b86610b99565b81845260208420610c4491601f0160051c8101908401610d07565b808352826020812081835555610c23565b630272d02960e61b5f52336004526401625f300060245260445ffd5b6004359063ffffffff8216820361013857565b60609060031901126101385760043563ffffffff8116810361013857906024359060443590565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b90600182811c92168015610cfd575b6020831014610ce957565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610cde565b818110610d12575050565b5f8155600101610d07565b604081019081106001600160401b038211176109f757604052565b60a081019081106001600160401b038211176109f757604052565b90601f801991011681019081106001600160401b038211176109f757604052565b6001600160401b0381116109f75760051b60200190565b8051821015610ab85760209160051b010190565b9060405191825f825492610db284610ccf565b8084529360018116908115610e1d5750600114610dd9575b50610dd792500383610d53565b565b90505f9291925260205f20905f915b818310610e01575050906020610dd7928201015f610dca565b6020919350806001915483858901015201910190918492610de8565b905060209250610dd794915060ff191682840152151560051b8201015f610dca565b600254811015610ab85760025f5260205f2001905f90565b8054821015610ab8575f5260205f2001905f90565b5f818152600360205260409020548015610f41575f198101818111610545576002545f1981019190821161054557818103610ef3575b5050506002548015610edf575f1901610ebc816002610e57565b8154905f199060031b1b191690556002555f5260036020525f6040812055600190565b634e487b7160e01b5f52603160045260245ffd5b610f2b610f04610f15936002610e57565b90549060031b1c9283926002610e57565b819391549060031b91821b915f19901b19161790565b90555f52600360205260405f20555f8080610ea2565b50505f90565b906001820191815f528260205260405f20548015155f14610ff0575f1981018181116105455782545f1981019190821161054557818103610fbb575b50505080548015610edf575f190190610f9c8282610e57565b8154905f199060031b1b19169055555f526020525f6040812055600190565b610fdb610fcb610f159386610e57565b90549060031b1c92839286610e57565b90555f528360205260405f20555f8080610f83565b505050505f90565b805f52600360205260405f2054155f1461104857600254600160401b8110156109f757611031610f158260018594016002556002610e57565b9055600254905f52600360205260405f2055600190565b505f90565b6001810190825f528160205260405f2054155f1461109a578054600160401b8110156109f757611087610f15826001879401855584610e57565b905554915f5260205260405f2055600190565b5050505f9056fea2646970667358221220a4a2e86bff68a2bee72e5208bb41992edfedbc52c97739dada3402ccd73ffb0864736f6c634300081e0033", + "storage": { + "0x9f02692b5d36b58b175c81f02691731273e11087a584cf36859114a142da2b9a": "0x0169", + "0x17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec": "0x01", + "0x02": "0x01", + "0x31b4db95c987bd8482207ace6955440c21de6cacbc583541dfb4d4dc45cb3fbb": "0x677261766974793a2f2f302f31313135353131312f6576656e74733f636f6e74", + "0x295841a49a1089f4b560f91cfbb0133326654dcbb1041861fc5dde96c724a22f": "0xaa36a7", + "0x31b4db95c987bd8482207ace6955440c21de6cacbc583541dfb4d4dc45cb3fbe": "0x7835363436653638326337643939346266313166356132633861646462363064", + "0x04e21d6c5357d6a70ec762a83df7df1854be66d5a06c8821bc0733922272b139": "0x01", + "0xf00864fb47ee2027b38f18739b5b0f1e3387a0b3a9ba054402b3fe5545e5e7e2": "0x01", + "0x3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff": "0x01", + "0x9f02692b5d36b58b175c81f02691731273e11087a584cf36859114a142da2b9b": "0x69b7dfbe", + "0x7da1f7a626cc18c1c3b9df8c4a1f0a4a3e70d4b0de4ca799deaa2c3fa809e2e0": "0xaeb8ee1b0922df12bb504e71178ddc7c409f1cf4639136bcb7879524fee5a344", + "0x8a0d3dd1beab180b7a2fe85015190738fd858883fccebb0004ca80cba5f16f09": "0x01", + "0x31b4db95c987bd8482207ace6955440c21de6cacbc583541dfb4d4dc45cb3fbc": "0x726163743d307830663736314231423363316143393233324339303135413732", + "0x31b4db95c987bd8482207ace6955440c21de6cacbc583541dfb4d4dc45cb3fbf": "0x3033633833636461336236353032356138323633343635383964663433343036", + "0x31b4db95c987bd8482207ace6955440c21de6cacbc583541dfb4d4dc45cb3fbd": "0x373636393235363061443661303546266576656e745369676e61747572653d30", + "0x31b4db95c987bd8482207ace6955440c21de6cacbc583541dfb4d4dc45cb3fc0": "0x652666726f6d426c6f636b3d3130323031323630000000000000000000000000" + } + }, + "0x33f4ee289578b2ff35ac3ffa46ea2e97557da32c": { + "balance": "0x043c33c1937564800000", + "nonce": 1, + "code": "0x6080806040526004361015610012575f80fd5b5f3560e01c90816317387b5814610ee4575080632b37f53c14610db45780632dd3100014610ea05780632e17de7814610e215780633bd0540014610e075780634160532f14610ddc57806346c96aac14610db45780634947118814610ceb5780634bc2a65714610c6c57806351cb86cd1461061e57806353fd66141461026e578063570ca7351461021e5780635a627dbc14610afd5780635ebaf1db14610a72578063715018a614610a9a57806372b45a5514610a7257806379ba5097146109ed578063862101301461083b5780638625220a1461087f5780638da5cb5b146108585780639668ceb81461083b578063a29a43bb146107bc578063a4e2d63414610745578063acc2216a146106a9578063b2a25b5214610623578063b392fbfb1461061e578063b3ab15fb1461059f578063b96130a914610355578063bd49c35f14610338578063c03102ec1461031b578063c354bd6e146102f9578063c485a4d814610294578063ce0617ec1461026e578063e30c397814610246578063e7f43c681461021e5763f2fde38b146101a8575f80fd5b3461021a57602036600319011261021a576101c1610efe565b6101c96113d8565b60018060a01b0316806bffffffffffffffffffffffff60a01b600154161760015560018060a01b035f54167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b3461021a575f36600319011261021a576003546040516001600160a01b039091168152602090f35b3461021a575f36600319011261021a576001546040516001600160a01b039091168152602090f35b3461021a575f36600319011261021a5760206001600160401b0360065416604051908152f35b3461021a57602036600319011261021a575f60206040516102b481610f43565b828152015260406102c6600435610fcc565b5081516102d281610f43565b602060016001600160401b0384541693848452015491019081528251918252516020820152f35b3461021a575f36600319011261021a576020610313611543565b604051908152f35b3461021a575f36600319011261021a576020600754604051908152f35b3461021a575f36600319011261021a576020600554604051908152f35b3461021a57602036600319011261021a576004356001600160401b03811680820361021a576002546001600160a01b0316338190036105895750604051630bcfee3f60e11b81526020816004816401625f20035afa90811561050b575f9161055a575b5061054b57600654906103d56001600160401b03831693846110f3565b916001600160401b03831691848311156105355750604051637e345def60e11b81526020816004816401625f10005afa90811561050b575f91610516575b50604051634f0f2a3960e11b8152906020826004816401625f10015afa91821561050b575f926104da575b506001600160401b0361045183836110f3565b1684106104b05767ffffffffffffffff1983168417600655604080516001600160401b0380891682528716602082015230917f7e4f3ccb2c7ca76eee6682c0e86fefbbd6fe24e4af19381a854a14ea091bd9af9190819081015b0390a2005b6104c36001600160401b039285926110f3565b90632041578960e11b5f526004521660245260445ffd5b6104fd91925060203d602011610504575b6104f58183610f72565b810190611032565b908661043e565b503d6104eb565b6040513d5f823e3d90fd5b61052f915060203d602011610504576104f58183610f72565b85610413565b84638a36f64360e01b5f5260045260245260445ffd5b63b7a174cb60e01b5f5260045ffd5b61057c915060203d602011610582575b6105748183610f72565b810190610f93565b836103b8565b503d61056a565b63e837add960e01b5f523360045260245260445ffd5b3461021a57602036600319011261021a576105b8610efe565b6105c06113d8565b600380546001600160a01b039283166001600160a01b03198216811790925560408051939091168352602083019190915230917f01c8730122ff73369629940a5296f4e7100ef16317d943fbbbfa1b0193ac35cb91819081016104ab565b610f14565b3461021a57602036600319011261021a5761063c610efe565b6002546001600160a01b0316338190036105895750604051630bcfee3f60e11b81526020816004816401625f20035afa90811561050b575f9161068a575b5061054b5761031360209161148f565b6106a3915060203d602011610582576105748183610f72565b8261067a565b3461021a57604036600319011261021a576024356001600160a01b038116810361021a576002546001600160a01b0316338190036105895750604051630bcfee3f60e11b81526020816004816401625f20035afa90811561050b575f91610726575b5061054b57610313602091610721600435611113565b61148f565b61073f915060203d602011610582576105748183610f72565b8261070b565b3461021a575f36600319011261021a57604051637e345def60e11b81526020816004816401625f10005afa801561050b576020915f9161079f575b506001600160401b03600654166001600160401b036040519216108152f35b6107b69150823d8411610504576104f58183610f72565b82610780565b3461021a57602036600319011261021a576107d5610efe565b6107dd6113d8565b600280546001600160a01b039283166001600160a01b03198216811790925560408051939091168352602083019190915230917f9839267567551f9b0177b329394308fa17d5b854676019a962010283cba2c3d491819081016104ab565b3461021a575f36600319011261021a576020600854604051908152f35b3461021a575f36600319011261021a575f546040516001600160a01b039091168152602090f35b3461021a575f36600319011261021a577f00000000000000000000000000000000000000000000000000000001625f20006001600160a01b031633036109da57604051637e345def60e11b81526020816004816401625f10005afa90811561050b575f916109bb575b50604051634f0f2a3960e11b8152906020826004816401625f10015afa90811561050b5761091d925f9261099a575b506110f3565b600654906001600160401b038216916001600160401b0382169183831161094057005b7f7e4f3ccb2c7ca76eee6682c0e86fefbbd6fe24e4af19381a854a14ea091bd9af926104ab926001600160401b031916176006556040519182913095839092916001600160401b0360209181604085019616845216910152565b6109b491925060203d602011610504576104f58183610f72565b9083610917565b6109d4915060203d602011610504576104f58183610f72565b816108e8565b63d37ceefd60e01b5f523360045260245ffd5b3461021a575f36600319011261021a57600154336001600160a01b0390911603610a5f57600180546001600160a01b03199081169091555f805433928116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b63118cdaa760e01b5f523360045260245ffd5b3461021a575f36600319011261021a576002546040516001600160a01b039091168152602090f35b3461021a575f36600319011261021a57610ab26113d8565b600180546001600160a01b03199081169091555f80549182168155906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b5f36600319011261021a576002546001600160a01b03163381900361058957604051630bcfee3f60e11b81526020816004816401625f20035afa90811561050b575f91610c4d575b5061054b573415610c3e57610b5c346005546110e6565b600555604051637e345def60e11b81526020816004816401625f10005afa90811561050b575f91610c1f575b50604051634f0f2a3960e11b8152906020826004816401625f10015afa90811561050b57610bbc925f9261099a57506110f3565b6001600160401b036006549116906001600160401b0381168211610c09575b6040513481527f7c717985ac273e663b7f3050f5b15a4388ff6ed952338954f650e2093e13937f60203092a2005b67ffffffffffffffff1916176006558080610bdb565b610c38915060203d602011610504576104f58183610f72565b81610b88565b631f2a200560e01b5f5260045ffd5b610c66915060203d602011610582576105748183610f72565b81610b45565b3461021a57602036600319011261021a57610c85610efe565b610c8d6113d8565b600480546001600160a01b039283166001600160a01b03198216811790925560408051939091168352602083019190915230917f9268b9726f38824965649bfcf3b0d32ff50816216bf7cdbd57abc3cc8c5dab1291819081016104ab565b3461021a575f36600319011261021a57604051637e345def60e11b81526020816004816401625f10005afa90811561050b575f91610d95575b506001600160401b03604051916351cb86cd60e01b8352166004820152602081602481305afa801561050b575f90610d62575b602090604051908152f35b506020813d602011610d8d575b81610d7c60209383610f72565b8101031261021a5760209051610d57565b3d9150610d6f565b610dae915060203d602011610504576104f58183610f72565b81610d24565b3461021a575f36600319011261021a576004546040516001600160a01b039091168152602090f35b3461021a575f36600319011261021a576020610df6611071565b6001600160401b0360405191168152f35b3461021a575f36600319011261021a576020610313610ffc565b3461021a57602036600319011261021a576002546001600160a01b03163381900361058957604051630bcfee3f60e11b81526020816004816401625f20035afa90811561050b575f91610e81575b5061054b57610e7f600435611113565b005b610e9a915060203d602011610582576105748183610f72565b81610e6f565b3461021a575f36600319011261021a576040517f00000000000000000000000000000000000000000000000000000001625f20006001600160a01b03168152602090f35b3461021a575f36600319011261021a576020906005548152f35b600435906001600160a01b038216820361021a57565b3461021a57602036600319011261021a576004356001600160401b038116810361021a576103136020916113eb565b604081019081106001600160401b03821117610f5e57604052565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b03821117610f5e57604052565b9081602091031261021a5751801515810361021a5790565b91908203918211610fb857565b634e487b7160e01b5f52601160045260245ffd5b600754811015610fe85760075f5260205f209060011b01905f90565b634e487b7160e01b5f52603260045260245ffd5b600754801561102d575f198101908111610fb857600161101e61102a92610fcc565b50015460085490610fab565b90565b505f90565b9081602091031261021a57516001600160401b038116810361021a5790565b906001600160401b03809116911603906001600160401b038211610fb857565b604051637e345def60e11b81526020816004816401625f10005afa90811561050b575f916110c7575b506001600160401b0360065416906001600160401b03811682116110be5750505f90565b61102a91611051565b6110e0915060203d602011610504576104f58183610f72565b5f61109a565b91908201809211610fb857565b906001600160401b03809116911601906001600160401b038211610fb857565b8015610c3e576005548082116113c25760405163facd743b60e01b81523060048201526020816024816401625f20015afa801561050b5783915f916113a3575b50611268575b61116291610fab565b6005556001600160401b036006541660075480155f146111d9575060405161119a9161118d82610f43565b815282602082015261162a565b6001600160401b036006541660405191825260208201527f536c53e11db8105c787d8d5fce8b01f689aefd57771dad0d0c62c33af2ecc1f960403092a2565b5f198101908111610fb8576111ed90610fcc565b5080546001600160401b0316828103611218575060019150016112118282546110e6565b905561119a565b8281101561125157509061123383600161124c9401546110e6565b6040519161124083610f43565b8252602082015261162a565b61119a565b90506350579b2960e01b5f5260045260245260445ffd5b5060405163a310624f60e01b81523060048201526020816024816401625f20015afa90811561050b575f91611368575b50600481101561135457806002849214908115611349575b5015611159575060405163aa7517e160e01b81526020816004816401625f10025afa90811561050b575f91611317575b50806112ec8484610fab565b106112f8575081611159565b9161130291610fab565b630398e3fb60e11b5f5260045260245260445ffd5b90506020813d602011611341575b8161133260209383610f72565b8101031261021a57515f6112e0565b3d9150611325565b60039150145f6112b0565b634e487b7160e01b5f52602160045260245ffd5b90506020813d60201161139b575b8161138360209383610f72565b8101031261021a5751600481101561021a575f611298565b3d9150611376565b6113bc915060203d602011610582576105748183610f72565b5f611153565b9063503a9fa360e11b5f5260045260245260445ffd5b5f546001600160a01b03163303610a5f57565b6006546001600160401b03908116908216116114855761140d600554916116a1565b60085490818082116114765750505f905b6007545f918161144c575b5050808210156114475761102a929161144191610fab565b906110e6565b505090565b5f1982019250908211610fb857600161146761146f93610fcc565b500154610fab565b5f80611429565b61147f91610fab565b9061141e565b61140d5f916116a1565b90611498611543565b91821561153d575f80808581946114b1826008546110e6565b60085560018060a01b0316806040518381527fd0d89537daf7d9f2b5b2315d3af47f1fe04419966247ffb963b1fa5b077c063660203092a35af13d15611538573d6001600160401b038111610f5e5760405190611518601f8201601f191660200183610f72565b81525f60203d92013e5b1561152957565b6312171d8360e31b5f5260045ffd5b611522565b505f9150565b6007541561162657604051637e345def60e11b81526020816004816401625f10005afa90811561050b575f91611607575b5060405163d8f08ab560e01b8152906020826004816401625f10015afa91821561050b575f926115e6575b506001600160401b0382166001600160401b03821611156115e0576115cc916115c791611051565b6116a1565b600854808211156115e05761102a91610fab565b50505f90565b61160091925060203d602011610504576104f58183610f72565b905f61159f565b611620915060203d602011610504576104f58183610f72565b5f611574565b5f90565b60075468010000000000000000811015610f5e5760018101600755600754811015610fe85760075f5260011b7fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68801906020816001600160401b03806001945116166001600160401b03198554161784550151910155565b60075480156115e05760075415610fe85760075f527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688546001600160401b0392831692168211156115e0575f1981019081119081610fb857826001600160401b0361170b83610fcc565b50541610611764575f91610fb857905b60018101808211610fb8578211156117645761173782826110e6565b60011c90836001600160401b0361174d84610fcc565b505416101561175c575061171b565b91509061171b565b600192506117729150610fcc565b5001549056fea2646970667358221220c365f3f4f8cfa5654455645a147f53c0fbc27f24ee590aae99643888582284a164736f6c634300081e0033000000000000000000000000000000000000000000000000000000000000000000", + "storage": { + "0x03": "0x6e2021ee24e2430da0f5bb9c2ae6c586bf3e0a0f", + "0x06": "0x06640af00b8000", + "0x04": "0x6e2021ee24e2430da0f5bb9c2ae6c586bf3e0a0f", + "0x02": "0x6e2021ee24e2430da0f5bb9c2ae6c586bf3e0a0f", + "0x00": "0x6e2021ee24e2430da0f5bb9c2ae6c586bf3e0a0f", + "0x05": "0x043c33c1937564800000" + } + }, + "0x00000000000000000000000000000001625f2004": { + "balance": "0x00", + "nonce": 0, + "code": "0x6080806040526004361015610012575f80fd5b5f905f3560e01c908163392e53cd1461048a575080634a145d36146104695780638129fc1c1461036f57638d4adfd51461004a575f80fd5b3461036c57606036600319011261036c576004356001600160401b038116908181036102ef57602435916001600160401b03831161028c573660238401121561028c578260040135926001600160401b03841161036a573660248560051b8301011161036a57604435936001600160401b038516850361034a576401625f0000330361034e576401625f20053b1561034a5790818693926040519363b28f664560e01b855260448501906004860152604060248601525260246064840192019084905b80821061031357505050818084920381836401625f20055af180156102f3576102fe575b505061013c90610546565b6401625f10003b156102ef5760405163226d778f60e21b81526001600160a01b03821660048201526001600160401b038316602482015283908181604481836401625f10005af180156102f3576102da575b5050604051633020f57360e11b8152602081600481876401625f20035af18015610298576102a3575b50604051630ecce30160e31b81526020816004816401625f20035afa908115610298578491610230575b50604080516001600160a01b039390931683526001600160401b03938416602084015292169143917ffaa20495974cbbcac6e64b92eb3ec66df59d0acca6d852e551001deeefdc35f89190a380f35b90506020813d602011610290575b8161024b602093836104a8565b8101031261028c576001600160401b036102857ffaa20495974cbbcac6e64b92eb3ec66df59d0acca6d852e551001deeefdc35f8926104dd565b91506101e1565b8380fd5b3d915061023e565b6040513d86823e3d90fd5b6020813d6020116102d2575b816102bc602093836104a8565b8101031261028c575180151581146101b7578380fd5b3d91506102af565b816102e4916104a8565b6102ef57825f61018e565b8280fd5b6040513d84823e3d90fd5b81610308916104a8565b6102ef57825f610131565b919394929092508335906001600160401b038216809203610346576020816001938293520194019201879493929161010d565b8880fd5b8580fd5b630272d02960e61b8652336004526401625f0000602452604486fd5b845b80fd5b503461043b575f36600319011261043b576401625f0001330361044d575f5460ff811661043f5760ff19166001175f556401625f10003b1561043b5760405163226d778f60e21b81526401625f000060048201525f6024820181905281604481836401625f10005af180156104305761041d575b5080807ffaa20495974cbbcac6e64b92eb3ec66df59d0acca6d852e551001deeefdc35f8604080516401625f00008152836020820152a380f35b61042991505f906104a8565b5f5f6103e3565b6040513d5f823e3d90fd5b5f80fd5b62dc149f60e41b5f5260045ffd5b630272d02960e61b5f52336004526401625f000160245260445ffd5b3461043b575f36600319011261043b5760206040516001600160401b038152f35b3461043b575f36600319011261043b5760209060ff5f541615158152f35b90601f801991011681019081106001600160401b038211176104c957604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160401b038216820361043b57565b81601f8201121561043b578051906001600160401b0382116104c95760405192610525601f8401601f1916602001856104a8565b8284526020838301011161043b57815f9260208093018386015e8301015290565b6001600160401b03166001600160401b0381146106b3576040519063c073525160e01b825260048201525f816024816401625f20015afa908115610430575f91610599575b50516001600160a01b031690565b90503d805f833e6105aa81836104a8565b81019060208183031261043b578051906001600160401b03821161043b570160e08183031261043b576040519160e083018381106001600160401b038211176104c95760405281516001600160a01b038116810361043b57835260208201516001600160401b03811161043b57816106239184016104f1565b602084015260408201516001600160401b03811161043b57816106479184016104f1565b604084015260608201516060840152610662608083016104dd565b608084015260a08201516001600160401b03811161043b57816106869184016104f1565b60a084015260c08201516001600160401b03811161043b576106a892016104f1565b60c08201525f61058b565b506401625f00009056fea2646970667358221220a767da03df9dd7fde30ea0525d91b27ed5545a267e71ab0778c4269fcb1349a664736f6c634300081e0033", + "storage": { + "0x00": "0x01" + } + }, + "0x00000000000000000000000000000001625f1001": { + "balance": "0x00", + "nonce": 0, + "code": "0x60806040526004361015610011575f80fd5b5f3560e01c80630bb9f823146103155780631a5d43611461025a578063233e9903146102095780638aff105d146101ec5780639e1e5472146101c5578063d8f08ab51461019b578063ec5ffac21461017f578063f77bdfb8146100db5763fc154d671461007c575f80fd5b346100d75760203660031901126100d7576004356100986103fa565b600254908060025560405191825260208201525f5160206104255f395f51905f526040736d696e696d756d50726f706f73616c5374616b6560601b92a2005b5f80fd5b346100d75760203660031901126100d7576100f46103e3565b6100fc6103fa565b67ffffffffffffffff8116908115610170576001805467ffffffffffffffff19811690931790556040805167ffffffffffffffff9384168152929091166020830152736c6f636b75704475726174696f6e4d6963726f7360601b915f5160206104255f395f51905f5291819081015b0390a2005b631ab8aa1760e21b5f5260045ffd5b346100d7575f3660031901126100d75760205f54604051908152f35b346100d7575f3660031901126100d757602067ffffffffffffffff60015460401c16604051908152f35b346100d7575f3660031901126100d757602067ffffffffffffffff60015416604051908152f35b346100d7575f3660031901126100d7576020600254604051908152f35b346100d75760203660031901126100d7576004356102256103fa565b5f5490805f5560405191825260208201525f5160206104255f395f51905f5260406b6d696e696d756d5374616b6560a01b92a2005b346100d75760203660031901126100d7576102736103e3565b61027b6103fa565b67ffffffffffffffff811615610306576001805467ffffffffffffffff60401b604084811b919091166fffffffffffffffff000000000000000019831617909255815167ffffffffffffffff91831c821681529216602083015273756e626f6e64696e6744656c61794d6963726f7360601b915f5160206104255f395f51905f52918190810161016b565b63c28135ab60e01b5f5260045ffd5b346100d75760803660031901126100d75760243567ffffffffffffffff81168091036100d75760443567ffffffffffffffff8116908181036100d7576401625f000133036103c7576003549160ff83166103b95783156101705715610306576004355f55600180546fffffffffffffffffffffffffffffffff191690931760409190911b67ffffffffffffffff60401b1617825560643560025560ff191617600355005b62dc149f60e41b5f5260045ffd5b630272d02960e61b5f52336004526401625f000160245260445ffd5b6004359067ffffffffffffffff821682036100d757565b6401625f3000330361040857565b630272d02960e61b5f52336004526401625f300060245260445ffdfeac2ccce3de9c0816ae772598f7f65fe69f9893b637f7c490497378cbb3ea043ea2646970667358221220be9551466f2ab3e3d07bc3130ba6d83edc7be0e93aaf8fddf5296a5b2862e41864736f6c634300081e0033", + "storage": { + "0x00": "0x0de0b6b3a7640000", + "0x02": "0x8ac7230489e80000", + "0x03": "0x01", + "0x01": "0x141dd76000000000141dd76000" + } + }, + "0x00000000000000000000000000000001625f1005": { + "balance": "0x00", + "nonce": 0, + "code": "0x60806040526004361015610011575f80fd5b5f3560e01c80632f01b97514610284578063392e53cd146102605780633dc4c76a146101a05780635282490e146101865780637f1514e714610162578063a0fe71da1461013c5763eb92db2714610066575f80fd5b346101385760203660031901126101385760043567ffffffffffffffff8116809103610138576401625f0001330361011c575f5460ff8160881c1661010d5781156100fe57816040917f2d907e8e2eaed7ba43f41523e1d4dad3d0b4df21bfec8eddbc175f771dcd4ce593600160881b9171ff000000000000000000ffffffffffffffff191617175f558151905f82526020820152a1005b6364b2c75560e11b5f5260045ffd5b63493a506960e01b5f5260045ffd5b630272d02960e61b5f52336004526401625f000160245260445ffd5b5f80fd5b34610138575f36600319011261013857602067ffffffffffffffff5f5416604051908152f35b34610138575f36600319011261013857602060ff5f5460801c166040519015158152f35b34610138575f3660031901126101385761019e6102c1565b005b346101385760203660031901126101385760043567ffffffffffffffff811690818103610138576401625f30003303610244576101db610387565b81156100fe575f805470ffffffffffffffffff00000000000000001916604092831b6fffffffffffffffff00000000000000001617600160801b179055519081527f68dc2af2176f124e3f363df77e691de82f295c72b827c09c66670743f69424fc90602090a1005b630272d02960e61b5f52336004526401625f300060245260445ffd5b34610138575f36600319011261013857602060ff5f5460881c166040519015158152f35b34610138575f3660031901126101385761029c610387565b60405f5467ffffffffffffffff82519160ff8160801c1615158352831c166020820152f35b6401625f2003330361036b576102d5610387565b5f5460ff8160801c16156103685760408167ffffffffffffffff7f2d907e8e2eaed7ba43f41523e1d4dad3d0b4df21bfec8eddbc175f771dcd4ce593831c168070ffffffffffffffffffffffffffffffffff198316175f5567ffffffffffffffff8351921682526020820152a17f5cbe438be0adb60efb88e3dc46034e29586021da7f855d0f22d71e61b51c14c75f80a1565b50565b630272d02960e61b5f52336004526401625f200360245260445ffd5b60ff5f5460881c161561039657565b63ebf9c53960e01b5f5260045ffdfea2646970667358221220d0bfaaf41a65321a77dae59817e891437476e08e5b908e29cd59ffe232b77db264736f6c634300081e0033", + "storage": { + "0x00": "0x0100000000000000000000000001ad274800" + } + }, + "0x00000000000000000000000000000001625f0001": { + "balance": "0xd7fe4f90606305800000", + "nonce": 1, + "code": "0x60806040526004361015610011575f80fd5b5f5f3560e01c636032f7e814610025575f80fd5b6020366003190112611199576004356001600160401b03811161119957806004019080360390610340600319830112611199576401625f000033036111ab5760ff5f541661119d5761007960448201611271565b61008560648301611285565b61009160848401611271565b9061009e60c48501611285565b916401625f10023b15611199576001600160401b03918260405195634bd8c30b60e11b875289356004880152602488013560248801521660448601521515606485015216608483015260a483013560a4830152151560c482015260e482013560e48201525f8161010481836401625f10025af1801561118e57611179575b508361012b6101248301611271565b6101386101448401611271565b6401625f10013b1561064c57604051630bb9f82360e01b815261010485013560048201526001600160401b0392831660248201529116604482015261016483013560648201528181608481836401625f10015af1801561063d57611164575b506101a56101e48301611271565b6401625f10053b15610aad576001600160401b036040519163eb92db2760e01b83521660048201528181602481836401625f10055af1801561063d5761114f575b506101f5610224830185611292565b6401625f10073b1561064c5760405163439fab9160e01b8152602060048201529183918391829161022b916024840191906112c4565b0381836401625f10075af1801561063d5761113a575b50610250610244830185611292565b6401625f10083b1561064c5760405163439fab9160e01b81526020600482015291839183918291610286916024840191906112c4565b0381836401625f10085af1801561063d57611125575b506101848201356001600160801b038116809103610aad576102c16101c48401611271565b6401625f10043b1561064c5760405163c22b026f60e01b815260048101929092526101a484013560248301526001600160401b031660448201528181606481836401625f10045af1801561063d57611110575b506103226102048301611271565b6401625f10063b15610aad576001600160401b036040519163eb92db2760e01b83521660048201528181602481836401625f10065af1801561063d576110fb575b50506401625f10033b15610b82576040516362f0132960e11b81528490610264830135600281101561064c5760048201526001600160801b036103a961028485016112e4565b1660248201526001600160801b036103c46102a485016112e4565b1660448201526001600160801b036103df6102c485016112e4565b1660648201528181608481836401625f10035af1801561063d576110e6575b50506102e481013560a21983018112156106485781019160048301906103048301359060421901811215610639578201600481019061043d83806111c7565b905061044b60648701611285565b156110145761045c6084870161130f565b6040519061058590818301918383106001600160401b03841117611000579183916020936113e384396001600160a01b0316815203019089f0908115610ff55760018101808211610fe1576104b0816112f8565b916104be604051938461122c565b818352601f196104cd836112f8565b0136602085013782936104df836112f8565b926104ed604051948561122c565b8084526104fc601f19916112f8565b013660208501378b83948160248d01905b8b868210610f78575050509061052884610538959493611358565b526001600160a01b031692611358565b525b8151610ea1575b505061054d82806111c7565b9050610c3d575b5091926044019150845b61056883836111c7565b90508110156106645761057b83836111c7565b8210156106505786908260051b81013590607e198136030182121561064c57016105a481611347565b6105b16060830183611292565b916401625f10093b156106485761060463ffffffff9286946040805197889687966347f7b60b60e01b885216600487015260208101356024870152013560448501526080606485015260848401916112c4565b0381836401625f10095af1801561063d57610624575b505060010161055e565b8161062e9161122c565b61063957855f61061a565b8580fd5b6040513d84823e3d90fd5b8480fd5b8280fd5b634e487b7160e01b87526032600452602487fd5b505050610324019061067682826111c7565b9091610681826112f8565b9261068f604051948561122c565b828452601f1961069e846112f8565b01865b818110610bf2575050604051634f0f2a3960e11b81526020816004816401625f10015afa8015610be7578790610b9a575b6001600160401b03915016660663f6d234200001916001600160401b038311610b865792946001600160401b0392909216923682900361011e190192875b878110156108ff578060051b840135858112156108fb57840160208101906107378261130f565b916107418161130f565b61074a8361130f565b6107538361130f565b60408051636b48235b60e01b81526001600160a01b039788166004820152938716602485015291861660448401529094166064820152608481018a905292602090849060a49082908601356401625f20005af19283156108f0578c936108a9575b506107c26060830183611292565b91906107d16080850185611292565b906107df60a0870187611292565b6107ec60c0890189611292565b93909460e08a016107fd908b611292565b9790986108099061130f565b996040519c6108178e6111fc565b6001600160a01b03168d5261082e9136919061139d565b60208c0152369061083e9261139d565b60408a0152369061084e9261139d565b6060880152369061085e9261139d565b6080860152369061086e9261139d565b60a08401526001600160a01b031660c0830152610100013560e08201526108958289611358565b526108a08188611358565b50600101610710565b9092506020813d82116108e8575b816108c46020938361122c565b810103126108e457516001600160a01b03811681036108e457915f6107b4565b8b80fd5b3d91506108b7565b6040513d8e823e3d90fd5b8980fd5b888383896401625f20013b15610b8257839060405190632b7d896f60e11b8252602482016020600484015281518091526044830190602060448260051b86010193019185905b828210610ac65750505050818084920381836401625f20015af1801561063d57610ab1575b5061097582846111c7565b90506401625f20053b15610aad576040519063fe4b84df60e01b825260048201528181602481836401625f20055af1801561063d57610a98575b50506401625f20033b1561064c5760405163204a7f0760e21b815283908181600481836401625f20035af1801561063d57610a83575b50506401625f20043b1561064c5760405163204a7f0760e21b815283908181600481836401625f20045af1801561063d57610a6e575b50805460ff191660011781557f219511cb634a6dc43941bcb98d6c740b7d92f55cf8501a5ccec2b2f79c32dd0e6040610a5484866111c7565b905081519081526001600160401b0342166020820152a180f35b81610a789161122c565b61064c578284610a1b565b81610a8d9161122c565b61064c5782846109e5565b81610aa29161122c565b61064c5782846109af565b5080fd5b81610abb9161122c565b61064c57828461096a565b91936001919395965060208091604319898203018552875190848060a01b03825116815260e080610b5a610b48610b36610b24610b12898901516101008b8a015261010089019061124d565b604089015188820360408a015261124d565b6060880151878203606089015261124d565b6080870151868203608088015261124d565b60a086015185820360a087015261124d565b93878060a01b0360c08201511660c08501520151910152960192019201889594939192610945565b8380fd5b634e487b7160e01b87526011600452602487fd5b506020813d602011610bdf575b81610bb46020938361122c565b81010312610bdb57516001600160401b0381168103610bdb576001600160401b03906106d2565b8680fd5b3d9150610ba7565b6040513d89823e3d90fd5b602090604051610c01816111fc565b8981526060838201526060604082015260608082015260606080820152606060a08201528960c08201528960e0820152828289010152016106a1565b610c5782610c4d816024956111c7565b94909301906111c7565b90916401625f40013b15610e9d5791889392604051936318a8ad6560e21b855280604486016040600488015252606485019060648160051b87010192809288915b838310610e5f575050505050600319848203016024850152828152602081019260208160051b83010193838793601e1982360301905b848610610d0b5750505050505050818084920381836401625f40015af1801561063d57156105545781610d009161122c565b61064857845f610554565b919395979850919395601f198282030185528d883584811215610aad578501803560208201936001600160401b038211610b82578160051b92833603861361064857919081815260208082019482010195949260be19813603015b838510610d8f575050505050505060208060019299019501960193949290918d98979692610cce565b90919293949596601f19848203018752873582811215610e55576020610e466001938683940190610e3884830160a0610e30610e15610dfa610de0610dd4868061136c565b868a52868a01916112c4565b610ded60408a018761136c565b908983038d8b01526112c4565b610e07606089018661136c565b9088830360408a01526112c4565b610e22608088018561136c565b9087830360608901526112c4565b94019061136c565b9160808185039101526112c4565b99019701950193929190610d66565b5050505050508f80fd5b9193959798509193602080610e896001936063198d8203018752610e838a8761136c565b906112c4565b97019301930190928d989795949293610c98565b8880fd5b6401625f40003b15610e9d5790889160405191634f17f21f60e11b835260448301604060048501528151809152602060648501920190855b818110610f595750505060031983820301602484015260208083519283815201920190845b818110610f3757505050818084920381836401625f40005af1801561063d57156105415781610f2c9161122c565b610bdb57865f610541565b82516001600160a01b031684528c955060209384019390920191600101610efe565b825163ffffffff1684528d965060209384019390920191600101610ed9565b82939450610fbe82610f9b60019584610fa6610fa185610f9b84610fc39a6111c7565b90611323565b611347565b63ffffffff610fb5868d611358565b911690526111c7565b61130f565b610fcd8289611358565b90838060a01b0316905201908e929161050d565b634e487b7160e01b8a52601160045260248afd5b6040513d8a823e3d90fd5b634e487b7160e01b8c52604160045260248cfd5b5061101f83806111c7565b611028816112f8565b91611036604051938461122c565b818352602083019160051b8101903682116110e257915b8183106110c55750505061106460248701856111c7565b61106d816112f8565b9161107b604051938461122c565b818352602083019160051b8101903682116108e457915b8183106110a15750505061053a565b82356001600160a01b03811681036110c157815260209283019201611092565b8c80fd5b823563ffffffff811681036108e45781526020928301920161104d565b8a80fd5b816110f09161122c565b610b8257835f6103fe565b816111059161122c565b610b8257835f610363565b8161111a9161122c565b610b8257835f610314565b8161112f9161122c565b610b8257835f61029c565b816111449161122c565b610b8257835f610241565b816111599161122c565b610b8257835f6101e6565b8161116e9161122c565b610b8257835f610197565b6111869194505f9061122c565b5f925f61011c565b6040513d5f823e3d90fd5b5f80fd5b62dc149f60e41b5f5260045ffd5b630272d02960e61b5f52336004526401625f000060245260445ffd5b903590601e198136030182121561119957018035906001600160401b03821161119957602001918160051b3603831361119957565b61010081019081106001600160401b0382111761121857604052565b634e487b7160e01b5f52604160045260245ffd5b90601f801991011681019081106001600160401b0382111761121857604052565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b356001600160401b03811681036111995790565b3580151581036111995790565b903590601e198136030182121561119957018035906001600160401b0382116111995760200191813603831361119957565b908060209392818452848401375f828201840152601f01601f1916010190565b35906001600160801b038216820361119957565b6001600160401b0381116112185760051b60200190565b356001600160a01b03811681036111995790565b91908110156113335760051b0190565b634e487b7160e01b5f52603260045260245ffd5b3563ffffffff811681036111995790565b80518210156113335760209160051b010190565b9035601e19823603018112156111995701602081359101916001600160401b03821161119957813603831361119957565b9291926001600160401b03821161121857604051916113c6601f8201601f19166020018461122c565b829481845281830111611199578281602093845f96013701015256fe60a034606c57601f61058538819003918201601f19168301916001600160401b03831184841017607057808492602094604052833981010312606c57516001600160a01b0381168103606c576080526040516105009081610085823960805181818160c401526103300152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c80632e996a8a146100445780639b8bd1031461003f5763fab32b261461003a575f80fd5b6100f3565b6100af565b3461007f57602036600319011261007f576001600160801b03610065610083565b165f525f60205260ff60405f205416151560805260206080f35b5f80fd5b600435906001600160801b038216820361007f57565b604435906001600160801b038216820361007f57565b3461007f575f36600319011261007f576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461007f57608036600319011261007f5760043563ffffffff8116810361007f5761011c610099565b906064359067ffffffffffffffff821161007f573660238301121561007f5781600401359067ffffffffffffffff821161007f57366024838501011161007f57610183936024610171940191602435906101de565b60405190151581529081906020820190565b0390f35b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176101bd57604052565b610187565b67ffffffffffffffff81116101bd57601f01601f191660200190565b5050509190916401625f400033036102a3576101f9836101c2565b92610207604051948561019b565b8084526020840191368282011161007f57815f9260209285378501015282516024811061028d575061023983516102b2565b905160601c603484015160801c90604051928084526020601f19601f8301168501016040525f5b81811061027757505061027493945061032b565b90565b8060446020928901015182828801015201610260565b63618e5f4d60e11b5f526004526024805260445ffd5b633333b5ab60e21b5f5260045ffd5b6023198101919082116102c157565b634e487b7160e01b5f52601160045260245ffd5b919082604091031261007f5781516020909201516001600160a01b038116810361007f5790565b3d15610326573d9061030d826101c2565b9161031b604051938461019b565b82523d5f602084013e565b606090565b9091907f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b03808316908216036104a9575050610389610382836001600160801b03165f525f60205260405f2090565b5460ff1690565b61048d57806020806103a0935183010191016102d5565b60018060a09493941b0316906103d66103c9826001600160801b03165f525f60205260405f2090565b805460ff19166001179055565b604051600160f81b602082019081526bffffffffffffffffffffffff19606085901b166021830152603580830186905282525f9182919061041860558261019b565b5190826401625f50005af161042b6102fc565b501561046c576040519283526001600160801b0316917f28a48d0161bbc70613fb99402d1437dea020d82e4495b003eb642c78fa4e258490602090a3600190565b635c0b206f60e01b5f526001600160a01b038216600452602483905260445ffd5b631a10e87760e31b5f526001600160801b03821660045260245ffd5b63708986dd60e11b5f526001600160a01b039081166004521660245260445ffdfea2646970667358221220148da52a4c3454aa1595174d5b869ec3085abfa4ab4ce2ce85aa572eae3f6d6764736f6c634300081e0033a2646970667358221220e526af234f90f10fdb35a8d74c037da2ea82db2b353edc3970a2203ce9b9cd9064736f6c634300081e0033", + "storage": { + "0x00": "0x01" + } + }, + "0x00000000000000000000000000000001625f1000": { + "balance": "0x00", + "nonce": 0, + "code": "0x6080806040526004361015610012575f80fd5b5f3560e01c9081631a3cdd2c146101f8575080633e8384c8146101db57806389b5de3c146100b2578063f9091ec71461007d5763fc68bbde14610053575f80fd5b34610079575f36600319011261007957602067ffffffffffffffff5f5416604051908152f35b5f80fd5b34610079575f366003190112610079576020620f424067ffffffffffffffff5f54160467ffffffffffffffff60405191168152f35b34610079576040366003190112610079576004356001600160a01b038116908190036100795760243567ffffffffffffffff8116809103610079576401625f200433036101bf575f5467ffffffffffffffff811691906401625f00008403610168575081810361015357907f4465e64a94364ec91119868c583b824db3badb75f76f5e1d8507788bd2bfb492915b60408051928352602083019190915290a2005b6385f58ac560e01b5f5260045260245260445ffd5b929190818111156101aa57807f4465e64a94364ec91119868c583b824db3badb75f76f5e1d8507788bd2bfb492939467ffffffffffffffff1916175f55610140565b63f9b6693d60e01b5f5260045260245260445ffd5b630272d02960e61b5f52336004526401625f200460245260445ffd5b34610079575f366003190112610079576020604051620f42408152f35b34610079575f3660031901126100795760209067ffffffffffffffff5f54168152f3fea26469706673582212209885564bc2500cdb589368c0e72b7b2b8a7853e8639caab332b88037ee8c995764736f6c634300081e0033", + "storage": {} + }, + "0x00000000000000000000000000000001625f1003": { + "balance": "0x00", + "nonce": 0, + "code": "0x60806040526004361015610011575f80fd5b5f3560e01c806306bca301146104a1578063238dafe01461045a5780632f01b975146103d0578063392e53cd146103ab5780634308aec1146103315780635282490e146103175780637f1514e7146102f55780639ab0babb146101f9578063c5e02652146100dd5763d8628cb214610087575f80fd5b346100d9575f3660031901126100d95761009f6105ba565b5060806100aa610566565b5f81525f60208201525f60408201526100c161059a565b905f825260208201526100d7604051809261052b565bf35b5f80fd5b346100d95760803660031901126100d9576401625f000133036101dd5760ff60065460081c166101ce5761010f610795565b60043560028110156100d957610124816105f0565b61014b61012f610734565b6001600160801b03166001600160801b03196001541617600155565b61017161015661074a565b6001600160801b036001549181199060801b16911617600155565b61019861017c610760565b6001600160801b03166001600160801b03196002541617600255565b61010061ff001960065416176006555f7febbdfd29caa0a9faf2432e4c8b7444ad04ea8f66f165d3b4601ea15fcb0f4d298180a3005b632825c80f60e01b5f5260045ffd5b630272d02960e61b5f52336004526401625f000160245260445ffd5b346100d95760803660031901126100d9576401625f300033036102d95761021e610776565b610226610795565b60043560028110156100d95760ff196003541660ff8216176003556001600160801b03610251610734565b166001600160801b0319600454161760045561026b61074a565b6001600160801b036004549181199060801b169116176004556001600160801b03610294610760565b166001600160801b03196005541617600555600160ff1960065416176006557fbfaaa3112d59b851fb6fa24fac8a819e11acdb815a55bbc6b91f020189b8a1315f80a2005b630272d02960e61b5f52336004526401625f300060245260445ffd5b346100d9575f3660031901126100d957602060ff600654166040519015158152f35b346100d9575f3660031901126100d95761032f610607565b005b346100d9575f3660031901126100d9576103496105ba565b50610352610776565b608061035c61059a565b61036a60ff5f5416826105e4565b610372610566565b6001546001600160801b0381168252831c60208201526001600160801b0360025416604082015260208201526100d7604051809261052b565b346100d9575f3660031901126100d957602060ff60065460081c166040519015158152f35b346100d9575f3660031901126100d9576103e86105ba565b506103f1610776565b60a060ff600654166100d761040461059a565b61041360ff60035416826105e4565b61041b610566565b6004546001600160801b038116825260801c60208201526001600160801b0360055416604082015260208201526040519215158352602083019061052b565b346100d9575f3660031901126100d957610472610776565b60ff5f5416600281101561048d576020906040519015158152f35b634e487b7160e01b5f52602160045260245ffd5b346100d95760603660031901126100d9576004356001600160801b0381168091036100d957602435906001600160801b0382168092036100d9576044356001600160801b0381168091036100d9576080926104fa6105ba565b50610503610566565b9283526020830152604082015261051861059a565b906001825260208201526100d760405180925b8051600281101561048d57604060206060936001600160801b0393865201518281511660208601528260208201511682860152015116910152565b604051906060820182811067ffffffffffffffff82111761058657604052565b634e487b7160e01b5f52604160045260245ffd5b604051906040820182811067ffffffffffffffff82111761058657604052565b6105c261059a565b905f82526105ce610566565b5f81525f60208201525f60408201526020830152565b600282101561048d5752565b600281101561048d5760ff80195f54169116175f55565b6401625f200333036107185761061b610776565b60ff60065416156107165760ff5f541661063960ff600354166105f0565b6106646001600160801b03600454166001600160801b03166001600160801b03196001541617600155565b600454600180546fffffffffffffffffffffffffffffffff199283166001600160801b039182161790915560055460028054909316911617905560ff19600654166006555f6003555f6004555f60055560ff5f541690600281101561048d57600282101561048d577febbdfd29caa0a9faf2432e4c8b7444ad04ea8f66f165d3b4601ea15fcb0f4d295f80a37f26ada38c7fd329a01c71186b3d76a68406c1964552f09c278d55b566fd91da6c5f80a1565b565b630272d02960e61b5f52336004526401625f200360245260445ffd5b6024356001600160801b03811681036100d95790565b6044356001600160801b03811681036100d95790565b6064356001600160801b03811681036100d95790565b60ff60065460081c161561078657565b638f502c5760e01b5f5260045ffd5b60043560028110156100d9576001146107aa57565b6044356001600160801b038116908181036100d95750602435906001600160801b038216918281036100d95750106107de57565b604051629c059160e71b815260206004820152602160248201527f7265636f6e737472756374696f6e206d757374206265203e3d207365637265636044820152607960f81b6064820152608490fdfea2646970667358221220c6881fe5f08647ab0c47577386ee03836ccc6567f895b95f47dc84712c3bec0f64736f6c634300081e0033", + "storage": { + "0x06": "0x0100" + } + }, + "0x00000000000000000000000000000001625f2002": { + "balance": "0x00", + "nonce": 0, + "code": "0x60806040526004361015610011575f80fd5b5f3560e01c806323764e8214610e7757806332dbe6851461016e5780633dbefe1914610e5d57806366bc75bd146101ea578063698d938d146101905780636dfc2fa81461016e578063bd7d9c9f146100f4578063d2a959ac146100dc578063e4df631d146100b05763f3097f8314610087575f80fd5b346100ac575f3660031901126100ac57602060ff60105460081c166040519015158152f35b5f80fd5b346100ac575f3660031901126100ac576100c8611ed1565b906100d860405192839283611641565b0390f35b346100ac575f3660031901126100ac576100c8611ead565b346100ac575f3660031901126100ac5761010c611ba1565b50610115611ba1565b50610146601054610124611d13565b9060ff610161610132611de6565b60405195869560808752608087019061158e565b90838560081c1615156020870152858203604087015261158e565b9116151560608301520390f35b346100ac575f3660031901126100ac57602060ff601054166040519015158152f35b346100ac5760203660031901126100ac576004356001600160401b0381116100ac576060816004019160031990360301126100ac576101d96101d482602093611aae565b611b0c565b6001600160401b0360405191168152f35b346100ac5760e03660031901126100ac576004356001600160401b0381168091036100ac5760803660231901126100ac5760a4356001600160401b0381116100ac5761023a90369060040161145d565b9060c4356001600160401b0381116100ac5761025a90369060040161145d565b9091610264611ef8565b60ff60105416610e4e57604051637e345def60e11b81526020816004816401625f10005afa908115610e43575f91610e01575b50856001600160401b03195f5416175f5560243560028110156100ac5760ff8019600154169116176001556044356001600160801b038116908181036100ac57506001600160801b031960025416176002556064356001600160801b03811681036100ac576001600160801b036002549181199060801b16911617600255608435906001600160801b0382168083036100ac576001600160401b0392506001600160801b031960035416176003551693846001600160401b0319600654161760065561036460075461165a565b601f8111610dd6575b505f60075561037a611730565b5f5b8181106109fd5750505061038e6117de565b5f5b8181106105da57505050600160ff1960105416176010556040519081526040602082015261012081016001600160401b035f541660408301526103db6060830160ff6001541661148d565b6002546001600160801b038116608084015260801c60a08301526001600160801b036003541660c083015260e080830152600454809152610140820160206101208360051b850101019160045f5260205f20915f905b8282106105395750505050603f1982820301610100830152600554808252602082019060208160051b8401019260055f5260205f20925f915b83831061049a57877f9bdb169dc6499419298eb8d6bd34e15a5c2c65043c5b6ca4f365aaef542b341a88880389a2005b90919293946020600761052a600193601f19868203018752848060a01b038a5416815260e0848201526105186104ea6104d98c8860e086019101611b20565b838103604085015260028d01611b20565b60038c015460608401526001600160401b0360048d015416608084015282810360a084015260058c01611b20565b9060c081830391015260068a01611b20565b9701930193019193929061046a565b90919293602060076105cc600193601f1961011f198b830301018652848060a01b03895416815260e0848201526105ba61058c61057b60e08401888d01611b20565b838103604085015260028c01611b20565b60038b015460608401526001600160401b0360048c015416608084015282810360a084015260058b01611b20565b9060c081830391015260068901611b20565b960192019201909291610431565b6105e5818385611ac3565b600554600160401b81101561088c5760018101806005558110156109e95760055f526007027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00181356001600160a01b03811681036100ac5781546001600160a01b0319166001600160a01b03919091161781556001810161066a6020840184611ada565b906001600160401b03821161088c5761068d82610687855461165a565b856116a8565b5f90601f8311600114610985576106bb92915f9183610916575b50508160011b915f199060031b1c19161790565b90555b600281016106cf6040840184611ada565b906001600160401b03821161088c576106ec82610687855461165a565b5f90601f83116001146109215761071992915f91836109165750508160011b915f199060031b1c19161790565b90555b6060820135600382015561073260808301611b0c565b6001600160401b036004830191166001600160401b03198254161790556005810161076060a0840184611ada565b906001600160401b03821161088c5761077d82610687855461165a565b5f90601f83116001146108ab57826107c19593600695936107b2935f926108a05750508160011b915f199060031b1c19161790565b90555b019160c0810190611ada565b906001600160401b03821161088c576107de82610687855461165a565b5f90601f83116001146108245791806108109260019695945f926108195750508160011b915f199060031b1c19161790565b90555b01610390565b013590508a806106a7565b601f19831691845f5260205f20925f5b81811061087457509160019695949291838895931061085b575b505050811b019055610813565b01355f19600384901b60f8161c1916905589808061084e565b91936020600181928787013581550195019201610834565b634e487b7160e01b5f52604160045260245ffd5b013590508d806106a7565b601f19831691845f5260205f20925f5b8181106108fe57509260019285926107c1989660069896106108e5575b505050811b0190556107b5565b01355f19600384901b60f8161c191690558c80806108d8565b919360206001819287870135815501950192016108bb565b013590508b806106a7565b601f19831691845f5260205f20925f5b81811061096d5750908460019594939210610954575b505050811b01905561071c565b01355f19600384901b60f8161c191690558a8080610947565b91936020600181928787013581550195019201610931565b601f19831691845f5260205f20925f5b8181106109d157509084600195949392106109b8575b505050811b0190556106be565b01355f19600384901b60f8161c191690558a80806109ab565b91936020600181928787013581550195019201610995565b634e487b7160e01b5f52603260045260245ffd5b610a08818385611ac3565b600454600160401b81101561088c5760018101806004558110156109e95760045f526007027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0181356001600160a01b03811681036100ac5781546001600160a01b0319166001600160a01b039190911617815560018101610a8d6020840184611ada565b906001600160401b03821161088c57610aaa82610687855461165a565b5f90601f8311600114610d7257610ad792915f91836108a05750508160011b915f199060031b1c19161790565b90555b60028101610aeb6040840184611ada565b906001600160401b03821161088c57610b0882610687855461165a565b5f90601f8311600114610d0e57610b3592915f91836108a05750508160011b915f199060031b1c19161790565b90555b60608201356003820155610b4e60808301611b0c565b6001600160401b036004830191166001600160401b031982541617905560058101610b7c60a0840184611ada565b906001600160401b03821161088c57610b9982610687855461165a565b5f90601f8311600114610ca45782610bce9593600695936107b2935f92610c995750508160011b915f199060031b1c19161790565b906001600160401b03821161088c57610beb82610687855461165a565b5f90601f8311600114610c31579180610c1d9260019695945f92610c265750508160011b915f199060031b1c19161790565b90555b0161037c565b013590508c806106a7565b601f19831691845f5260205f20925f5b818110610c81575091600196959492918388959310610c68575b505050811b019055610c20565b01355f19600384901b60f8161c191690558b8080610c5b565b91936020600181928787013581550195019201610c41565b013590508f806106a7565b601f19831691845f5260205f20925f5b818110610cf65750926001928592610bce98966006989610610cdd57505050811b0190556107b5565b01355f19600384901b60f8161c191690558e80806108d8565b91936020600181928787013581550195019201610cb4565b601f19831691845f5260205f20925f5b818110610d5a5750908460019594939210610d41575b505050811b019055610b38565b01355f19600384901b60f8161c191690558c8080610d34565b91936020600181928787013581550195019201610d1e565b601f19831691845f5260205f20925f5b818110610dbe5750908460019594939210610da5575b505050811b019055610ada565b01355f19600384901b60f8161c191690558c8080610d98565b91936020600181928787013581550195019201610d82565b60075f52610dfb90601f0160051c5f516020611fd15f395f51905f5290810190611692565b8661036d565b90506020813d602011610e3b575b81610e1c60209383611a41565b810103126100ac57516001600160401b03811681036100ac5786610297565b3d9150610e0f565b6040513d5f823e3d90fd5b6312cfd45f60e01b5f5260045ffd5b346100ac575f3660031901126100ac57610e75611a62565b005b346100ac5760203660031901126100ac576004356001600160401b0381116100ac57366023820112156100ac578060040135906001600160401b0382116100ac5736602483830101116100ac57610ecc611ef8565b60ff601054161561144e576001600160401b035f541690610eee60075461165a565b601f8111611408575b505f83601f81116001146113935780610f24925f91611385575b508160011b915f199060031b1c19161790565b6007555b6001600160401b035f54166001600160401b0319600854161760085560ff600154166002811015611371576009805460ff19169190911790556002546fffffffffffffffffffffffffffffffff198082166001600160801b0392831617600a55600354600b80549092169216919091179055600454610fa881600c611878565b600c5f9081527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c77f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8383106112c2575050505060055461100a81600d611878565b600d5f9081527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb57f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b83831061121357505050506001600160401b03600654166001600160401b0319600e541617600e5561108660075461165a565b926001600160401b03841161088c576110ab846110a4600f5461165a565b600f6116a8565b5f93601f811160011461115a57906110fd82602094937fd71a70bcb870a8d7332955e395cdb27f9f4f1f499d2d9021e3cfede1123de6cb96975f9161114e57508160011b915f199060031b1c19161790565b600f555b61010061ff00196010541617601055611118611f22565b5f836040519261113182601f19601f8401160185611a41565b8084528060248386019601863783010152519020604051908152a2005b90506007015488610f11565b600f5f9081527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80295905f516020611fd15f395f51905f5290601f198416905b8181106111fb575096600192849260209796957fd71a70bcb870a8d7332955e395cdb27f9f4f1f499d2d9021e3cfede1123de6cb999a106111e3575b505050811b01600f55611101565b01545f1960f88460031b161c191690558780806111d5565b82840154895560019889019890930192602001611199565b60078082600193850361122d575b01920192019190611053565b805485546001600160a01b03191660a086901b86900391909116178555611258818501868601611911565b6112686002820160028701611911565b600381015460038601556001600160401b036004820154166001600160401b036004870191166001600160401b03198254161790556112ad6005820160058701611911565b6112bd6006820160068701611911565b611221565b6007808260019385036112dc575b01920192019190610ff1565b805485546001600160a01b03191660a086901b86900391909116178555611307818501868601611911565b6113176002820160028701611911565b600381015460038601556001600160401b036004820154166001600160401b036004870191166001600160401b031982541617905561135c6005820160058701611911565b61136c6006820160068701611911565b6112d0565b634e487b7160e01b5f52602160045260245ffd5b602491508401013586610f11565b50601f1984169060075f52845f516020611fd15f395f51905f52925f5b8181106113ea5750106113ce575b5050600183811b01600755610f28565b8201602401355f19600386901b60f8161c1916905583806113be565b858401602401358555600190940193602093840193889350016113b0565b60075f5261143e905f516020611fd15f395f51905f52601f860160051c81019160208710611444575b601f0160051c0190611692565b83610ef7565b9091508190611431565b6321b2ae1360e01b5f5260045ffd5b9181601f840112156100ac578235916001600160401b0383116100ac576020808501948460051b0101116100ac57565b9060028210156113715752565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9080602083519182815201916020808360051b8301019401925f915b8383106114e957505050505090565b909192939460208061157f600193601f19868203018752895190858060a01b03825116815260c061156e61153f61152d8786015160e08987015260e086019061149a565b6040860151858203604087015261149a565b606085015160608501526001600160401b03608086015116608085015260a085015184820360a086015261149a565b9201519060c081840391015261149a565b970193019301919392906114da565b61163e91604061161a8351606084526001600160401b0381511660608501526001600160801b03836020808401516115ca60808901825161148d565b01518281511660a08801528260208201511660c088015201511660e085015260606116058483015160e06101008801526101408701906114be565b910151848203605f19016101208601526114be565b926001600160401b036020820151166020840152015190604081840391015261149a565b90565b60409061163e939215158152816020820152019061158e565b90600182811c92168015611688575b602083101461167457565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611669565b81811061169d575050565b5f8155600101611692565b9190601f81116116b757505050565b6116e0925f5260205f20906020601f840160051c8301931061144457601f0160051c0190611692565b565b6116ec815461165a565b90816116f6575050565b81601f5f9311600114611707575055565b8183526020832061172391601f0160051c810190600101611692565b8082528160208120915555565b6004545f6004558061173f5750565b806007029060078204036117ca5760045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b908101905b818110611782575050565b805f60079255611794600182016116e2565b6117a0600282016116e2565b5f60038201555f60048201556117b8600582016116e2565b6117c4600682016116e2565b01611777565b634e487b7160e01b5f52601160045260245ffd5b6005545f600555806117ed5750565b806007029060078204036117ca5760055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0908101905b818110611830575050565b805f60079255611842600182016116e2565b61184e600282016116e2565b5f60038201555f6004820155611866600582016116e2565b611872600682016116e2565b01611825565b90600160401b811161088c5781549181815582821061189657505050565b826007029260078404036117ca57816007029160078304036117ca575f5260205f2091820191015b8181106118c9575050565b805f600792556118db600182016116e2565b6118e7600282016116e2565b5f60038201555f60048201556118ff600582016116e2565b61190b600682016116e2565b016118be565b9190918281146119eb57611925835461165a565b6001600160401b03811161088c5761194781611941845461165a565b846116a8565b5f93601f82116001146119855761197692939482915f9261197a5750508160011b915f199060031b1c19161790565b9055565b015490505f806106a7565b601f198216905f5260205f2094835f5260205f20915f5b8181106119d3575095836001959697106119bb575b505050811b019055565b01545f1960f88460031b161c191690555f80806119b1565b9192600180602092868b01548155019401920161199c565b509050565b606081019081106001600160401b0382111761088c57604052565b608081019081106001600160401b0382111761088c57604052565b604081019081106001600160401b0382111761088c57604052565b90601f801991011681019081106001600160401b0382111761088c57604052565b611a6a611ef8565b60ff60105416156116e0576001600160401b035f5416611a88611f22565b7ff9ebdb068db417b127e53217fe02b4b4fec81cfc98c7134e546bbaaeb737cecd5f80a2565b90359060de19813603018212156100ac570190565b908210156109e95761163e9160051b810190611aae565b903590601e19813603018212156100ac57018035906001600160401b0382116100ac576020019181360383136100ac57565b356001600160401b03811681036100ac5790565b5f9291815491611b2f8361165a565b8083529260018116908115611b845750600114611b4b57505050565b5f9081526020812093945091925b838310611b6a575060209250010190565b600181602092949394548385870101520191019190611b59565b915050602093945060ff929192191683830152151560051b010190565b60405190611bae826119f0565b60606040838151611bbe81611a0b565b5f81528251611bcc81611a26565b5f81528351611bda816119f0565b5f81525f60208201525f85820152602082015260208201528383820152838082015281525f60208201520152565b908154916001600160401b03831161088c5760405192611c2e60208260051b0185611a41565b80845260208401915f5260205f20915f905b828210611c4d5750505050565b60405160e081018181106001600160401b0382111761088c57604090815285546001600160a01b0316825251600192600792602092611c9981611c92818c8a01611b20565b0382611a41565b83820152604051611cb181611c928160028d01611b20565b6040820152600388015460608201526001600160401b036004890154166080820152604051611ce781611c928160058d01611b20565b60a0820152604051611d0081611c928160068d01611b20565b60c0820152815201940191019092611c40565b60405190611d20826119f0565b81604051611d2d81611a0b565b6001600160401b03600854168152604051611d4781611a26565b60ff600954166002811015611371578152604051611d64816119f0565b600a546001600160801b038116825260801c60208201526001600160801b03600b5416604082015260208201526020820152611da0600c611c08565b6040820152611daf600d611c08565b606082015281526001600160401b03600e541660208201526040805191611de283611ddb81600f611b20565b0384611a41565b0152565b60405190611df3826119f0565b81604051611e0081611a0b565b6001600160401b035f54168152604051611e1981611a26565b60ff600154166002811015611371578152604051611e36816119f0565b6002546001600160801b038116825260801c60208201526001600160801b0360035416604082015260208201526020820152611e726004611c08565b6040820152611e816005611c08565b606082015281526001600160401b036006541660208201526040805191611de283611ddb816007611b20565b611eb5611ba1565b9060ff60105416611ec5575f9190565b6001915061163e611de6565b611ed9611ba1565b9060ff60105460081c16611eec575f9190565b6001915061163e611d13565b6401625f20033303611f0657565b630272d02960e61b5f52336004526401625f200360245260445ffd5b5f80555f6001555f6002555f600355611f39611730565b611f416117de565b5f600655611f5060075461165a565b80611f63575b5060ff1960105416601055565b601f8111600114611f7a57505f6007555b5f611f56565b60075f52611fbd90601f0160051c5f516020611fd15f395f51905f52017fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c689611692565b60075f525f602081208160075555611f7456fea66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688a26469706673582212205ccde057e18f7eea7cd5e64a21238bab692a1e8f82c28e7afc9a29fe9fa3d3a164736f6c634300081e0033", + "storage": {} + }, + "0x00000000000000000000000000000001625f1006": { + "balance": "0x00", + "nonce": 0, + "code": "0x60806040526004361015610011575f80fd5b5f3560e01c80632f01b97514610296578063392e53cd146102725780633dc4c76a1461018b5780635282490e146101715780637f1514e71461014d578063af05a5c5146101275763eb92db2714610066575f80fd5b346101235760203660031901126101235760043567ffffffffffffffff8116809103610123576401625f00013303610107575f5460ff8160881c166100f857816040917f4a4f57ae57a24108de8e66caba40243d69a925bc88beae4ab9c6694acb9c33ef93600160881b9171ff000000000000000000ffffffffffffffff191617175f558151905f82526020820152a1005b6302875f6560e61b5f5260045ffd5b630272d02960e61b5f52336004526401625f000160245260445ffd5b5f80fd5b34610123575f36600319011261012357602067ffffffffffffffff5f5416604051908152f35b34610123575f36600319011261012357602060ff5f5460801c166040519015158152f35b34610123575f366003190112610123576101896102d3565b005b346101235760203660031901126101235760043567ffffffffffffffff811690818103610123576401625f30003303610256576101c6610399565b5f5467ffffffffffffffff81168084111561023f5770ffffffffffffffffff0000000000000000198216604084811b6fffffffffffffffff00000000000000001691909117600160801b175f55518481527f521917b6b0aaaa340d950a1e90a788a5dc638cb11e1d7db803f868d3f377661690602090a1005b839063100ffb2d60e21b5f5260045260245260445ffd5b630272d02960e61b5f52336004526401625f300060245260445ffd5b34610123575f36600319011261012357602060ff5f5460881c166040519015158152f35b34610123575f366003190112610123576102ae610399565b60405f5467ffffffffffffffff82519160ff8160801c1615158352831c166020820152f35b6401625f2003330361037d576102e7610399565b5f5460ff8160801c161561037a5760408167ffffffffffffffff7f4a4f57ae57a24108de8e66caba40243d69a925bc88beae4ab9c6694acb9c33ef93831c168070ffffffffffffffffffffffffffffffffff198316175f5567ffffffffffffffff8351921682526020820152a17fb2340da3114c2d92a2f200fca9ed92945bdd6164e071ee53fa5a331ab1def92e5f80a1565b50565b630272d02960e61b5f52336004526401625f200360245260445ffd5b60ff5f5460881c16156103a857565b6348ad8daf60e11b5f5260045ffdfea26469706673582212200bd7ce7526a644878d52fe38e38c40e1cf8ac8d6036bbadfc1b9bd889c2baf2764736f6c634300081e0033", + "storage": { + "0x00": "0x010000000000000000000000000000000001" + } + }, + "0x00000000000000000000000000000001625f2001": { + "balance": "0x00", + "nonce": 0, + "code": "0x6080806040526004361015610012575f80fd5b5f3560e01c90816311acc1a714612a9a575080631904bb2e146127d0578063270401cb1461267157806337deea7014612654578063392e53cd14612632578063396e1e47146126175780634eccddaf1461258657806353dc6a5e1461249757806356fb12de14611c9d578063671b379314611c80578063683359e914611c595780636c344ec514611c3e57806379fa7983146116eb57806395d8abd7146116c35780639de70258146116205780639fcaa0801461157d578063a310624f1461151d578063b4c0cf4114611505578063b97dd9e21461147f578063c073525114611352578063c47d09f714610fae578063df55e21d14610ea9578063eb958f0b14610af5578063f934e3c5146101745763facd743b1461012f575f80fd5b34610170576020366003190112610170576001600160a01b03610150612ab4565b165f525f602052602060018060a01b0360405f2054161515604051908152f35b5f80fd5b346101705760c03660031901126101705761018d612ab4565b6024356001600160401b038111610170576101ac903690600401612be0565b91906044356001600160401b038111610170576101cd903690600401612be0565b9390926064356001600160401b038111610170576101ef903690600401612be0565b9190956084356001600160401b03811161017057610211903690600401612be0565b909160a4356001600160401b03811161017057610232903690600401612be0565b604051635b16ebb760e01b81526001600160a01b03871660048201819052919b919a92979192906020816024816401625f20005afa908115610915575f91610ac6575b5015610ab35760405163dbcd704b60e01b8152600481018c90526020816024816401625f20005afa908115610915575f91610a94575b506001600160a01b031633819003610a7e57505f8b8152602081905260409020546001600160a01b0316610a6b57604051637e345def60e11b81526020816004816401625f10005afa908115610915575f91610a2b575b50604051632e30b7b160e21b81526001600160a01b03891660048201526001600160401b03909116602482015260208180604481015b03816401625f20005afa908115610915575f916109f9575b5060405163aa7517e160e01b81526020816004816401625f10025afa908115610915575f916109c7575b508082106109b2575050601f891161099a5761039882848684613d66565b8a5f525f60205260405f20968b6001600160601b0360a01b895416178855600188016001600160401b038b11610756576103dc8b6103d68354612c65565b8361305c565b5f8b80610991575b6103fa918160011b915f199060031b1c19161790565b9055600a880180546001600160a01b0319168d179055604051637cf2551760e01b8152600481018d90526020816024816401625f20005afa908115610915575f91610962575b506008890180546001600160a01b0319166001600160a01b0390921691909117905560028801805460ff19169055604051637e345def60e11b81526020816004816401625f10005afa908115610915575f91610920575b50604051632e30b7b160e21b81526001600160a01b0390921660048301526001600160401b0316602482015260208180604481015b03816401625f20005afa908115610915575f916108e3575b5060038801556104f53685836130ba565b6020815191012093845f52600660205260018060a01b0360405f2054166108bb5760048801916001600160401b0382116107565761053d826105378554612c65565b8561305c565b5f90601f83116001146108575761056b92915f918361084c575b50508160011b915f199060031b1c19161790565b90555b60058601916001600160401b0382116107565761058f826105378554612c65565b5f90601f83116001146107e8576105bc92915f91836107dd5750508160011b915f199060031b1c19161790565b90555b5f52600660205260405f20876001600160601b0360a01b82541617905560068301916001600160401b038211610756576105fd826105378554612c65565b5f90601f831160011461077557918061062f9260079695945f9261076a5750508160011b915f199060031b1c19161790565b90555b01906001600160401b03861161075657610656866106508454612c65565b8461305c565b5f90601f87116001146106d05795806106a6927f3ac90d069dcde8ad9ac7ff6eeb0dc4ce2fead5d96404718826477aa58fca3de497985f926106c55750508160011b915f199060031b1c19161790565b90555b6106c06040519283926020845260208401916130fd565b0390a2005b013590508880610557565b601f19871691835f5260205f20925f5b81811061073e57509160019391897f3ac90d069dcde8ad9ac7ff6eeb0dc4ce2fead5d96404718826477aa58fca3de4999a9410610725575b505050811b0190556106a9565b01355f19600384901b60f8161c19169055878080610718565b919360206001819287870135815501950192016106e0565b634e487b7160e01b5f52604160045260245ffd5b013590508b80610557565b601f19831691845f5260205f20925f5b8181106107c55750916001939185600798979694106107ac575b505050811b019055610632565b01355f19600384901b60f8161c191690558a808061079f565b91936020600181928787013581550195019201610785565b013590508d80610557565b601f19831691845f5260205f20925f5b818110610834575090846001959493921061081b575b505050811b0190556105bf565b01355f19600384901b60f8161c191690558c808061080e565b919360206001819287870135815501950192016107f8565b013590508f80610557565b601f19831691845f5260205f20925f5b8181106108a3575090846001959493921061088a575b505050811b01905561056e565b01355f19600384901b60f8161c191690558e808061087d565b91936020600181928787013581550195019201610867565b6108df60405192839263352398bf60e21b84526020600485015260248401916130fd565b0390fd5b90506020813d60201161090d575b816108fe60209383612c44565b8101031261017057518d6104e4565b3d91506108f1565b6040513d5f823e3d90fd5b90506020813d60201161095a575b8161093b60209383612c44565b81010312610170576104cc9161095260209261322f565b915091610497565b3d915061092e565b610984915060203d60201161098a575b61097c8183612c44565b810190612d1e565b8e610440565b503d610972565b8d3591506103e4565b88634ea11dc760e11b5f52601f60045260245260445ffd5b6344d4caf760e01b5f5260045260245260445ffd5b90506020813d6020116109f1575b816109e260209383612c44565b8101031261017057518e61037a565b3d91506109d5565b90506020813d602011610a23575b81610a1460209383612c44565b8101031261017057518d610350565b3d9150610a07565b90506020813d602011610a63575b81610a4660209383612c44565b81010312610170576020610a5c6103389261322f565b9150610302565b3d9150610a39565b8a63164688df60e21b5f5260045260245ffd5b6311ce341560e21b5f526004523360245260445ffd5b610aad915060203d60201161098a5761097c8183612c44565b8d6102ab565b8a630f4c971b60e21b5f5260045260245ffd5b610ae8915060203d602011610aee575b610ae08183612c44565b810190612d3d565b8d610275565b503d610ad6565b3461017057606036600319011261017057610b0e612ab4565b6024356001600160401b03811161017057610b2d903690600401612be0565b91906044356001600160401b03811161017057610b4e903690600401612be0565b6001600160a01b039384165f81815260208190526040902054919590949092911615610e965760405163dbcd704b60e01b8152600481018590526020816024816401625f20005afa908115610915575f91610e77575b506001600160a01b031633819003610a7e5750604051630bcfee3f60e11b81526020816004816401625f20035afa908115610915575f91610e58575b50610e4957610bf185828486613d66565b835f525f60205260405f20610c073684866130ba565b6020815191012090815f52600660205260018060a01b0360405f205416610e21576004810191604051610c4581610c3e8187612c9d565b0382612c44565b602081519101205f52600660205260405f206001600160601b0360a01b81541690555f52600660205260405f20866001600160601b0360a01b8254161790556001600160401b03841161075657610ca0846106508454612c65565b5f9184601f8111600114610db85780610cd0916005955f91610dad575b508160011b915f199060031b1c19161790565b90555b01906001600160401b03861161075657610cf1866106508454612c65565b5f90601f8711600114610d415795806106a6927f4dff72df9b593511d2f3e56e13f5e8615d8ef61595c480d076926ccfcf13fe2697985f926106c55750508160011b915f199060031b1c19161790565b601f19871691835f5260205f20925f5b818110610d9557509160019391897f4dff72df9b593511d2f3e56e13f5e8615d8ef61595c480d076926ccfcf13fe26999a941061072557505050811b0190556106a9565b91936020600181928787013581550195019201610d51565b90508801358b610cbd565b505f81815260208120909386601f1981165b808710610e03576005965010610dea575b5050600185811b019055610cd3565b8701355f19600388901b60f8161c191690558880610ddb565b89830135845560209687019660019094019390920191889150610dca565b505060405163352398bf60e21b8152602060048201529283926108df925060248401916130fd565b63b7a174cb60e01b5f5260045ffd5b610e71915060203d602011610aee57610ae08183612c44565b86610be0565b610e90915060203d60201161098a5761097c8183612c44565b86610ba4565b83635a4887e160e01b5f5260045260245ffd5b3461017057602036600319011261017057610ec2612ab4565b6001600160a01b038181165f8181526020819052604090205490911615610f9c576040519063dbcd704b60e01b825260048201526020816024816401625f20005afa908115610915575f91610f7d575b506001600160a01b031633819003610a7e5750604051630bcfee3f60e11b81526020816004816401625f20035afa908115610915575f91610f5e575b50610e4957610f5c90613567565b005b610f77915060203d602011610aee57610ae08183612c44565b82610f4e565b610f96915060203d60201161098a5761097c8183612c44565b82610f12565b635a4887e160e01b5f5260045260245ffd5b3461017057602036600319011261017057610fc7612ab4565b6001600160a01b038181165f8181526020819052604090205490911615610f9c5760405163dbcd704b60e01b8152600481018290526020816024816401625f20005afa908115610915575f91611333575b506001600160a01b031633819003610a7e5750604051630bcfee3f60e11b81526020816004816401625f20035afa908115610915575f91611314575b50610e4957805f525f60205260405f206040516316d25f2160e31b81526020816004816401625f10025afa908115610915575f916112f5575b50156112e6576002019160ff83541660048110156112d257806112bc5750604051637e345def60e11b81526020816004816401625f10005afa908115610915575f9161127c575b50604051632e30b7b160e21b81526001600160a01b03831660048201526001600160401b03909116602482015260208180604481015b03816401625f20005afa908115610915575f9161124a575b5060405163aa7517e160e01b81526020816004816401625f10025afa908115610915575f91611218575b508082106109b25750506040516320e43f3360e11b8152926020846004816401625f10025afa938415610915575f946111e4575b5083611191600154600254906130f0565b10156111d157805460ff191660011790556111ab90612e11565b7f1b00bc7086f79690a6673c20a8f4a6265c08f6ce68ecd7dbab6fb61848da2f4a5f80a2005b836366dc758560e01b5f5260045260245ffd5b9093506020813d602011611210575b8161120060209383612c44565b8101031261017057519284611180565b3d91506111f3565b90506020813d602011611242575b8161123360209383612c44565b8101031261017057518561114c565b3d9150611226565b90506020813d602011611274575b8161126560209383612c44565b81010312610170575184611122565b3d9150611258565b90506020813d6020116112b4575b8161129760209383612c44565b810103126101705760206112ad61110a9261322f565b91506110d4565b3d915061128a565b63f924664d60e01b5f525f60045260245260445ffd5b634e487b7160e01b5f52602160045260245ffd5b631248725360e11b5f5260045ffd5b61130e915060203d602011610aee57610ae08183612c44565b8461108d565b61132d915060203d602011610aee57610ae08183612c44565b83611054565b61134c915060203d60201161098a5761097c8183612c44565b83611018565b34610170576020366003190112610170576004356001600160401b0381168082036101705761137f612f67565b50600154908181101561145f5761145b61139884612d81565b60018060a01b0391549060031b1c16805f525f602052600761144260405f2060038101546001600160401b03600a83015460a01c1690604051956113db87612c29565b86526040516113f181610c3e8160048801612c9d565b602087015260405161140a81610c3e8160058801612c9d565b60408701526060860152608085015260405161142d81610c3e8160068601612c9d565b60a0850152610c3e6040518094819301612c9d565b60c0820152604051918291602083526020830190612afb565b0390f35b6001600160401b03925063305b6d3160e11b5f526004521660245260445ffd5b34610170575f36600319011261017057604051630ecce30160e31b81526020816004816401625f20035afa8015610915575f906114cb575b6020906001600160401b0360405191168152f35b506020813d6020116114fd575b816114e560209383612c44565b81010312610170576114f860209161322f565b6114b7565b3d91506114d8565b34610170575f36600319011261017057610f5c613251565b34610170576020366003190112610170576001600160a01b0361153e612ab4565b165f818152602081905260409020546001600160a01b031615610f9c575f525f602052602060ff600260405f2001541661157b6040518092612aee565bf35b34610170575f3660031901126101705760035461159981612f9d565b905f5b8181106115b1576040518061145b8582612b81565b806115bd600192612d99565b838060a01b0391549060031b1c16805f525f60205260076115ff60405f2060038101546001600160401b03600a83015460a01c1690604051956113db87612c29565b60c082015261160e8286612fec565b526116198185612fec565b500161159c565b34610170575f3660031901126101705760015461163c81612f9d565b905f5b818110611654576040518061145b8582612b81565b80611660600192612d81565b838060a01b0391549060031b1c16805f525f60205260076116a260405f2060038101546001600160401b03600a83015460a01c1690604051956113db87612c29565b60c08201526116b18286612fec565b526116bc8185612fec565b500161163f565b34610170575f3660031901126101705761145b6116de6138ed565b5160405191829182612b81565b34610170575f36600319011261017057611703613683565b61170b6138ed565b60208101516040820151905f5b828110611bc257836003545f60035580611b8a575b5060608101516080820151905f5b828110611b1c578360a081015160c0820151905f5b828110611aea578360e0810151610100820151906002545f60025580611ab2575b505f5b828110611a8d5783516001545f60015580611a55575b505f5b8151811015611825576001906001600160a01b036117ab8285612fec565b5151166117b781612dc6565b5f525f60205260405f2061180b6001600160401b0360806117d88588612fec565b510151600a8401805467ffffffffffffffff60a01b19169290911660a01b67ffffffffffffffff60a01b16919091179055565b600360606118198487612fec565b5101519101550161178d565b6001545f5b8181106119e6576001545f5b818110611970576001545f5b81811061193857611851613d1e565b80600455604051630ecce30160e31b81526020816004816401625f20035afa908115610915575f916118f3575b506001600160401b036001911601906001600160401b0382116118df577f428bb2c6ef32ad56ffa5ff436461bc47a5abb8880ef7c06aaf805fddf2f8b245916060916001546001600160401b036040519316835260208301526040820152a1005b634e487b7160e01b5f52601160045260245ffd5b90506020813d602011611930575b8161190e60209383612c44565b81010312610170576001600160401b0361192960019261322f565b915061187e565b3d9150611901565b80611944600192612d81565b838060a01b0391549060031b1c1661195b81613760565b905f525f602052600360405f20015501611842565b8061197c600192612d81565b838060a01b0391549060031b1c165f525f60205260405f206009810190838060a01b0382541690816119b2575b50505001611836565b60080190848060a01b03166001600160601b0360a01b8254161790556001600160601b0360a01b81541690558380806119a9565b6119ef81612d81565b905460039190911b1c6001600160a01b0316906401625f20003b15610170576040519163781232e560e11b835260048301525f82602481836401625f20005af191821561091557600192611a45575b500161182a565b5f611a4f91612c44565b83611a3e565b60015f52611a87907fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690810190613046565b8161178a565b600190611aac6001600160a01b03611aa58386612fec565b5116612e11565b01611774565b60025f52611ae4907f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90810190613046565b83611771565b6001906001600160a01b03611aff8285612fec565b51165f525f602052600260405f200160ff19815416905501611750565b6001906001600160a01b03611b318285612fec565b5116805f525f602052600260405f2001600260ff198254161790557fd1e3b27bbde31c3e8d287c2382f14d8dde1546d7d84d2aaa0ad22254e2ef89936040611b7883613760565b8151905f82526020820152a20161173b565b60035f52611bbc907fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90810190613046565b8161172d565b6001906001600160a01b03611bd78285612fec565b51165f81815260208190526040812060028101805460ff19169055600a01805467ffffffffffffffff60a01b191667ffffffffffffffff60a01b1790557f23d934bfe7f1275bc6fd70432159c9cc1c0075d069f89da6a40f43bfe7a94ed39080a201611718565b34610170575f36600319011261017057602060405160308152f35b34610170575f3660031901126101705761145b611c7461311d565b60405191829182612b81565b34610170575f366003190112610170576020600454604051908152f35b34610170576020366003190112610170576001600160401b036004351161017057366023600435011215610170576001600160401b036004356004013511610170573660246004356004013560051b600435010111610170576401625f0001330361247b5760ff6005541661246d57600435360361012219015f805b600435600401358210156124245760248260051b600435010135908382121561017057601f611d5360043584016044810190602401613000565b9050116123f6576001600160a01b03611d726004358401602401613032565b165f9081526020819052604090206001600160a01b03611d986004358501602401613032565b82546001600160a01b0319169116178155611dbe60043584016044810190602401613000565b60018301916001600160401b03821161075657611ddf826105378554612c65565b5f90601f831160011461239257611e0c92915f91836122525750508160011b915f199060031b1c19161790565b90555b611e1f6024846004350101613032565b600a820180546001600160a01b0319166001600160a01b03929092169190911790556002808201805460ff1916909117905560043583016101048101356003830155611e72906064810190602401613000565b60048301916001600160401b03821161075657611e93826105378554612c65565b5f90601f831160011461232e57611ec092915f91836122525750508160011b915f199060031b1c19161790565b90555b611ed860043584016084810190602401613000565b906001600160401b03821161075657611f0182611ef86005860154612c65565b6005860161305c565b5f90601f83116001146122c157611f2e92915f91836106c55750508160011b915f199060031b1c19161790565b60058201555b611f446024846004350101613032565b611f63611f5c60043586016064810190602401613000565b36916130ba565b602081519101205f52600660205260405f209060018060a01b03166001600160601b0360a01b825416179055611fa760a48460043501016024856004350101613000565b60068301916001600160401b03821161075657611fc8826105378554612c65565b5f90601f831160011461225d57611ff592915f91836122525750508160011b915f199060031b1c19161790565b90555b61200d600435840160c4810190602401613000565b60078301916001600160401b0382116107565761202e826105378554612c65565b5f90601f83116001146121bc57946120f7600197957fd1e3b27bbde31c3e8d287c2382f14d8dde1546d7d84d2aaa0ad22254e2ef89939561208f8660409761211f97600a9f9e9c5f9261084c5750508160011b915f199060031b1c19161790565b90555b6120a260e4886004350101613032565b6008820180546001600160a01b03191660a08c811b8d90039093161790559a01805467ffffffffffffffff60a01b19169a88901b67ffffffffffffffff60a01b169a909a179099556001600160401b03861698565b61210f61210a6024876004350101613032565b612dc6565b61010485600435010135906130f0565b966121306024856004350101613032565b7f3ac90d069dcde8ad9ac7ff6eeb0dc4ce2fead5d96404718826477aa58fca3de461216660043587016044810190602401613000565b926121858651928392602084528c8060a01b03169560208401916130fd565b0390a2610104868060a01b036121a16024876004350101613032565b169483519283526004350101356020820152a2019091611d19565b601f19831691845f5260205f20925f5b81811061223a5750957fd1e3b27bbde31c3e8d287c2382f14d8dde1546d7d84d2aaa0ad22254e2ef89939560018661211f96600a9e9d9b966120f79660409a859f9d10612221575b505050811b019055612092565b01355f19600384901b60f8161c191690558e8080612214565b919360206001819287870135815501950192016121cc565b013590508980610557565b601f19831691845f5260205f20925f5b8181106122a95750908460019594939210612290575b505050811b019055611ff8565b01355f19600384901b60f8161c19169055888080612283565b9193602060018192878701358155019501920161226d565b600584939293015f5260205f20905f935b601f1984168510612316576001945083601f198116106122fd575b505050811b016005820155611f34565b01355f19600384901b60f8161c191690558780806122ed565b818101358355602094850194600190930192016122d2565b601f19831691845f5260205f20925f5b81811061237a5750908460019594939210612361575b505050811b019055611ec3565b01355f19600384901b60f8161c19169055888080612354565b9193602060018192878701358155019501920161233e565b601f19831691845f5260205f20925f5b8181106123de57509084600195949392106123c5575b505050811b019055611e0f565b01355f19600384901b60f8161c191690558880806123b8565b919360206001819287870135815501950192016123a2565b61240b60043583016044810190602401613000565b9050634ea11dc760e11b5f52601f60045260245260445ffd5b60407f7d16da453c8cb6024fcdffe81df7ebd4bcbec712c229da3bd2b86dcd1231b2349180600455600160ff1960055416176005558151906004356004013582526020820152a1005b62dc149f60e41b5f5260045ffd5b630272d02960e61b5f52336004526401625f000160245260445ffd5b34610170575f366003190112610170576002546124b381612f9d565b905f5b8181106124cb576040518061145b8582612b81565b806124d7600192612d55565b838060a01b0391549060031b1c16805f525f602052600761256560405f206124fe84613760565b6040519461250b86612c29565b855260405161252181610c3e8160048701612c9d565b602086015260405161253a81610c3e8160058701612c9d565b604086015260608501526001600160401b03608085015260405161142d81610c3e8160068601612c9d565b60c08201526125748286612fec565b5261257f8185612fec565b50016124b6565b346101705760203660031901126101705761259f612ab4565b6001600160a01b038181165f8181526020819052604090205490911615610f9c5750604051630bcfee3f60e11b81526020816004816401625f20035afa908115610915575f916125f8575b50610e4957610f5c90612e5b565b612611915060203d602011610aee57610ae08183612c44565b826125ea565b34610170575f366003190112610170576020604051601f8152f35b34610170575f36600319011261017057602060ff600554166040519015158152f35b34610170575f366003190112610170576020600154604051908152f35b346101705760403660031901126101705761268a612ab4565b6024356001600160a01b0381169190829003610170576001600160a01b039081165f8181526020819052604090205490929116156127bd5760405163dbcd704b60e01b8152600481018390526020816024816401625f20005afa908115610915575f9161279e575b506001600160a01b031633819003610a7e5750604051630bcfee3f60e11b81526020816004816401625f20035afa908115610915575f9161277f575b50610e495760207faaebcf1bfa00580e41d966056b48521fa9f202645c86d4ddf28113e617c1b1d391835f525f8252600960405f2001816001600160601b0360a01b825416179055604051908152a2005b612798915060203d602011610aee57610ae08183612c44565b8361272e565b6127b7915060203d60201161098a5761097c8183612c44565b836126f2565b50635a4887e160e01b5f5260045260245ffd5b34610170576020366003190112610170576127e9612ab4565b5f6101606040516127f981612c0d565b8281526060602082015282604082015282606082015260606080820152606060a0820152606060c0820152606060e0820152826101008201528261012082015282610140820152015260018060a01b0316805f525f60205260018060a01b0360405f20541615610f9c575f525f60205260405f2060405161287981612c0d565b81546001600160a01b03168152604051916128a28361289b8160018501612c9d565b0384612c44565b6020820192835260ff60028201541690604083019160048110156112d257825260038101546060840190815260405191826128e08160048401612c9d565b036128eb9084612c44565b60808501928352604051806129038160058501612c9d565b0361290e9082612c44565b60a08601908152604051806129268160068601612c9d565b036129319082612c44565b60c08701908152604051918261294a8160078701612c9d565b036129559084612c44565b60e08801928352600160a01b60019003600885015416966101008901978852600160a01b60019003600986015416946101208a01958652600a0154966101408a0196600160a01b60019003891688526101608b019860a01c6001600160401b031689526040519b8c9b60208d52600160a01b6001900390511660208d01525160408c0161018090526101a08c016129eb91612aca565b925160608c016129fa91612aee565b5160808b015251898203601f190160a08b0152612a179190612aca565b9051888203601f190160c08a0152612a2f9190612aca565b9051878203601f190160e0890152612a479190612aca565b9051868203601f1901610100880152612a609190612aca565b93516001600160a01b0390811661012087015290518116610140860152905116610160840152516001600160401b03166101808301520390f35b34610170575f366003190112610170576020906004548152f35b600435906001600160a01b038216820361017057565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9060048210156112d25752565b612b7e9160018060a01b03825116815260c0612b6d612b3e612b2c602086015160e0602087015260e0860190612aca565b60408601518582036040870152612aca565b606085015160608501526001600160401b03608086015116608085015260a085015184820360a0860152612aca565b9201519060c0818403910152612aca565b90565b602081016020825282518091526040820191602060408360051b8301019401925f915b838310612bb357505050505090565b9091929394602080612bd1600193603f198682030187528951612afb565b97019301930191939290612ba4565b9181601f84011215610170578235916001600160401b038311610170576020838186019501011161017057565b61018081019081106001600160401b0382111761075657604052565b60e081019081106001600160401b0382111761075657604052565b90601f801991011681019081106001600160401b0382111761075657604052565b90600182811c92168015612c93575b6020831014612c7f57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691612c74565b5f9291815491612cac83612c65565b8083529260018116908115612d015750600114612cc857505050565b5f9081526020812093945091925b838310612ce7575060209250010190565b600181602092949394548385870101520191019190612cd6565b915050602093945060ff929192191683830152151560051b010190565b9081602091031261017057516001600160a01b03811681036101705790565b90816020910312610170575180151581036101705790565b600254811015612d6d5760025f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b600154811015612d6d5760015f5260205f2001905f90565b600354811015612d6d5760035f5260205f2001905f90565b8054821015612d6d575f5260205f2001905f90565b60015490600160401b82101561075657612deb826001612e0f94016001556001612db1565b81546001600160a01b0393841660039290921b91821b9390911b1916919091179055565b565b60025490600160401b82101561075657612deb826001612e0f94016002556002612db1565b60035490600160401b82101561075657612deb826001612e0f94016003556003612db1565b6401625f30003303612f345760018060a01b03811690815f525f602052600260405f200160ff81541660048110156112d257600114612efc5760ff81541660048110156112d25760028103612ee55750805460ff19166003179055612ebf90612e36565b7fd985a09c845b706d385ae0e16aa6d237b665c09e65f937bad0d892c3ae565a0a5f80a2565b63f924664d60e01b5f52600260045260245260445ffd5b90612f06906136ad565b805460ff191690557fd985a09c845b706d385ae0e16aa6d237b665c09e65f937bad0d892c3ae565a0a5f80a2565b630272d02960e61b5f52336004526401625f300060245260445ffd5b6001600160401b0381116107565760051b60200190565b60405190612f7482612c29565b606060c0835f81528260208201528260408201525f838201525f60808201528260a08201520152565b90612fa782612f50565b612fb46040519182612c44565b8281528092612fc5601f1991612f50565b01905f5b828110612fd557505050565b602090612fe0612f67565b82828501015201612fc9565b8051821015612d6d5760209160051b010190565b903590601e198136030182121561017057018035906001600160401b0382116101705760200191813603831361017057565b356001600160a01b03811681036101705790565b818110613051575050565b5f8155600101613046565b9190601f811161306b57505050565b612e0f925f5260205f20906020601f840160051c83019310613095575b601f0160051c0190613046565b9091508190613088565b6001600160401b03811161075657601f01601f191660200190565b9291926130c68261309f565b916130d46040519384612c44565b829481845281830111610170578281602093845f960137010152565b919082018092116118df57565b908060209392818452848401375f828201840152601f01601f1916010190565b60015480156131f75761312f81612f9d565b905f5b81811061313e57505090565b8061314a600192612d81565b838060a01b0391549060031b1c16805f525f60205260076131d660405f2060038101546040519461317a86612c29565b855260405161319081610c3e8160048701612c9d565b60208601526040516131a981610c3e8160058701612c9d565b604086015260608501526001600160401b038516608085015260405161142d81610c3e8160068601612c9d565b60c08201526131e58286612fec565b526131f08185612fec565b5001613132565b50604051613206602082612c44565b5f81525f805b81811061321857505090565b602090613223612f67565b8282860101520161320c565b51906001600160401b038216820361017057565b5f1981146118df5760010190565b613259613683565b604051638d4273b160e01b81526020816004816401625f10025afa908115610915575f91613548575b5015612e0f576040516319905cd160e01b81526020816004816401625f10025afa908115610915575f91613516575b50604051630242d53160e11b8152905f826004816401625f20055afa918215610915575f92613440575b5060015482518082101561343a575080915b5f5b8381106132fe575b5050505050565b61330781612d81565b60018060a01b0391549060031b1c1690815f525f602052600260405f20019160ff83541660048110156112d25760020361343057836001600160401b0361334e848a612fec565b5151161115613364575b50600191505b016132ef565b5f5f5b8681106133da5750600110156133d357600192600360ff1982541617905561338e81612e36565b7f11064a2b1d53991ff81561c8c285f9d502e16b45b74c5012fe5cc51370dda02060206001600160401b036133c3858b612fec565b515116604051908152a25f613358565b50506132f7565b6133e381612d81565b60018060a01b0391549060031b1c165f525f60205260ff600260405f2001541660048110156112d25760021461341c575b600101613367565b90613428600191613243565b919050613414565b506001915061335e565b916132ed565b9091503d805f833e6134528183612c44565b810190602081830312610170578051906001600160401b038211610170570181601f820112156101705780519061348882612f50565b926134966040519485612c44565b82845260208085019360061b8301019181831161017057602001925b8284106134c45750505050905f6132db565b604084830312610170576040519060408201908282106001600160401b038311176107565760409260209284526134fa8761322f565b815261350783880161322f565b838201528152019301926134b2565b90506020813d602011613540575b8161353160209383612c44565b8101031261017057515f6132b1565b3d9150613524565b613561915060203d602011610aee57610ae08183612c44565b5f613282565b60018060a01b03811690815f525f60205260405f206040516316d25f2160e31b81526020816004816401625f10025afa908115610915575f91613664575b50156112e6576002019060ff82541660048110156112d25760011461362d5760ff82541660048110156112d25760028103612ee55750600180541461361e576135f891600360ff19825416179055612e36565b7f9a1c32f04dbb16c5a8b525c028c5fb9d9ed03b1d51009c3ef6fd9e2aab77e8385f80a2565b632c46098f60e21b5f5260045ffd5b613636906136ad565b805460ff191690557f9a1c32f04dbb16c5a8b525c028c5fb9d9ed03b1d51009c3ef6fd9e2aab77e8385f80a2565b61367d915060203d602011610aee57610ae08183612c44565b5f6135a5565b6401625f2003330361369157565b630272d02960e61b5f52336004526401625f200360245260445ffd5b6002545f5b8181106136be57505050565b6136c781612d55565b905460039190911b1c6001600160a01b03908116908416146136eb576001016136b2565b5f19820192509082116118df57612deb61370761371f93612d55565b905460039190911b1c6001600160a01b031691612d55565b600254801561374c575f190161373481612d55565b81549060018060a01b039060031b1b19169055600255565b634e487b7160e01b5f52603160045260245ffd5b604051637e345def60e11b81526020816004816401625f10005afa908115610915575f91613879575b50604051632e30b7b160e21b81526001600160a01b0390921660048301526001600160401b0316602482015260208180604481015b03816401625f20005afa908115610915575f91613847575b5060405163742680df60e11b8152906020826004816401625f10025afa918215610915575f92613813575b508181111561380e575090565b905090565b9091506020813d60201161383f575b8161382f60209383612c44565b810103126101705751905f613801565b3d9150613822565b90506020813d602011613871575b8161386260209383612c44565b8101031261017057515f6137d6565b3d9150613855565b90506020813d6020116138b3575b8161389460209383612c44565b81010312610170576137be916138ab60209261322f565b915091613789565b3d9150613887565b906138c582612f50565b6138d26040519182612c44565b82815280926138e3601f1991612f50565b0190602036910137565b60405161012081018181106001600160401b03821117610756576040526060815260208101906060825260408101925f845260608201906060825260808301935f855260a08401906060825260c08501905f825260e0860191606083526101008701935f855260015499600254936003548092613969826138bb565b835252613975856138bb565b8952613980856138bb565b835261398b856138bb565b86525f5b828110613cf2575050505f945f5b8b8110613cad57506139ad613d1e565b94604051632aa12a5b60e01b81526020816004816401625f10025afa8015610915575f90613c6d575b6001600160401b03915016808702908715978204148717156118df5761271081029080820461271014901517156118df5760405163aa7517e160e01b81529590620f424090046020876004816401625f10025afa968715610915575f97613c39575b508c9197958b5f5f9815945b8b8a10613b6a5798505050505050505050613a679250613a6c93915051906130f0565b612f9d565b83525f945f5b818110613af95750505f945b8451861015613af057613ae881613ae2600193848060a01b03613aa28b8951612fec565b5116805f525f6020526007613aca60405f20613abd84613760565b6040519461317a86612c29565b60c0820152885190613adc8383612fec565b52612fec565b50613243565b950194613a7e565b50935050905090565b613b0281612d81565b905460039190911b1c6001600160a01b0316613b1d81613e27565b15613b2c575b50600101613a72565b87613ae26001939983613b63945f525f6020526007613b5160405f20613abd84613760565b60c0820152895190613adc8383612fec565b9690613b23565b613b738a612d55565b905460039190911b1c6001600160a01b0316613b8e81613760565b938c8510613c10578780613bfe575b613bd55791613bc99391613bb76001969451835190612fec565b52613bc28151613243565b90526130f0565b975b01968c908f613a44565b50905060019250613bec879a929a51895190612fec565b52613bf78751613243565b8752613bcb565b5086613c0a86866130f0565b11613b9d565b50905060019250613c27899a929a51855190612fec565b52613c328351613243565b8352613bcb565b9096506020813d602011613c65575b81613c5560209383612c44565b810103126101705751955f613a38565b3d9150613c48565b506020813d602011613ca5575b81613c8760209383612c44565b8101031261017057613ca06001600160401b039161322f565b6139d6565b3d9150613c7a565b613cd0613cb982612d81565b905460039190911b1c6001600160a01b0316613e27565b15613cde575b60010161399d565b95613cea600191613243565b969050613cd6565b80613cfe600192612d99565b838060a01b0391549060031b1c16613d17828551612fec565b520161398f565b5f6001545f905b808210613d3157505090565b9091613d5e600191613d58613d4586612d81565b858060a01b0391549060031b1c16613760565b906130f0565b920190613d25565b9092613d9c5f94602083879660405195848795858701998a378501918483018a815237010185815203601f198101835282612c44565b51906401625f50015afa3d15613e1f573d90613db78261309f565b91613dc56040519384612c44565b82523d5f602084013e5b15908115613e12575b8115613df5575b50613de657565b63261ef0bf60e11b5f5260045ffd5b80516020808301935090820191909103126101705751155f613ddf565b9050602081511090613dd8565b606090613dcf565b600354905f5b828110613e3b575050505f90565b613e4481612d99565b905460039190911b1c6001600160a01b0390811690831614613e6857600101613e2d565b50505060019056fea2646970667358221220d8cab856354851146bbbc3f52fc45272e78a9355a8a6d97d4df6732a88b3194164736f6c634300081e0033", + "storage": { + "0x76f9ef4f86a037f1fdd56e471ae9bb58e6c61d232ca8152007d0a755833fa1ca": "0x33f4ee289578b2ff35ac3ffa46ea2e97557da32c", + "0x50de791c24baa9a4992c07eac9e1e39907962185a2693c6a347ba272f211ad80": "0x33f4ee289578b2ff35ac3ffa46ea2e97557da32c", + "0x01": "0x01", + "0x6701bf9acf712c5f8801bbb1b9012c7b3edc7d14f6104171c2ec647657c0548b": "0x851d41932d866f5fabed6673898e15473e6a0adcf5033d2c93816c6b115c85ad", + "0x39291b36c067c69fa2301130b467d7bd3f5367918148920d63acba9eb9491ad5": "0x6565323465323433306461306635626239633261653663353836626633653061", + "0x50de791c24baa9a4992c07eac9e1e39907962185a2693c6a347ba272f211ad77": "0x76616c696461746f722d31000000000000000000000000000000000000000016", + "0x50de791c24baa9a4992c07eac9e1e39907962185a2693c6a347ba272f211ad7c": "0xdd", + "0x50de791c24baa9a4992c07eac9e1e39907962185a2693c6a347ba272f211ad7e": "0x6e2021ee24e2430da0f5bb9c2ae6c586bf3e0a0f", + "0x50de791c24baa9a4992c07eac9e1e39907962185a2693c6a347ba272f211ad76": "0x33f4ee289578b2ff35ac3ffa46ea2e97557da32c", + "0x39291b36c067c69fa2301130b467d7bd3f5367918148920d63acba9eb9491ad4": "0x6b2f326438366234306131643639326330373439613061303432366532303231", + "0x39291b36c067c69fa2301130b467d7bd3f5367918148920d63acba9eb9491ad6": "0x30662f68616e647368616b652f30000000000000000000000000000000000000", + "0x04": "0x043c33c1937564800000", + "0x7a2cc5cefb980390bb0de895f4c09dfc8b69bde1e73ced57340f79981ce228b1": "0x6565323465323433306461306635626239633261653663353836626633653061", + "0x7a2cc5cefb980390bb0de895f4c09dfc8b69bde1e73ced57340f79981ce228af": "0x6d2f6970342f3132372e302e302e312f7463702f323032342f6e6f6973652d69", + "0x50de791c24baa9a4992c07eac9e1e39907962185a2693c6a347ba272f211ad7d": "0xdd", + "0x6701bf9acf712c5f8801bbb1b9012c7b3edc7d14f6104171c2ec647657c0548c": "0x3451e0bac61d570d5ed9f23e1e7f77c400000000000000000000000000000000", + "0x05": "0x01", + "0x50de791c24baa9a4992c07eac9e1e39907962185a2693c6a347ba272f211ad7a": "0x61", + "0x50de791c24baa9a4992c07eac9e1e39907962185a2693c6a347ba272f211ad78": "0x02", + "0x7a2cc5cefb980390bb0de895f4c09dfc8b69bde1e73ced57340f79981ce228b0": "0x6b2f326438366234306131643639326330373439613061303432366532303231", + "0x50de791c24baa9a4992c07eac9e1e39907962185a2693c6a347ba272f211ad79": "0x043c33c1937564800000", + "0x39291b36c067c69fa2301130b467d7bd3f5367918148920d63acba9eb9491ad3": "0x6d2f6970342f3132372e302e302e312f7463702f323032342f6e6f6973652d69", + "0x7a2cc5cefb980390bb0de895f4c09dfc8b69bde1e73ced57340f79981ce228b2": "0x30662f68616e647368616b652f30000000000000000000000000000000000000", + "0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6": "0x33f4ee289578b2ff35ac3ffa46ea2e97557da32c" + } + }, + "0x00000000000000000000000000000001625f1008": { + "balance": "0x00", + "nonce": 0, + "code": "0x60806040526004361015610011575f80fd5b5f3560e01c80631f6fc389146103b65780632f01b975146102d8578063392e53cd146102b35780634308aec114610278578063439fab91146100a65780635282490e1461008c57637f1514e714610066575f80fd5b34610088575f36600319011261008857602060ff600254166040519015158152f35b5f80fd5b34610088575f366003190112610088576100a4610709565b005b34610088576100b43661053d565b906401625f0001330361025c5760ff60025460081c1661024d57811561023e5767ffffffffffffffff821161022a576100ed5f546105b2565b601f81116101e5575b505f91601f8111600114610178576101278180610140955f9161016d575b508160011b915f199060031b1c19161790565b5f555b61010061ff001960025416176002553691610622565b602081519101207ff2f849960038eb2fdda1e2480d81dd0833fcaab2ab40db6aa9ec54ecc66eaf525f80a2005b905084013586610114565b5f808052601f198216935f5160206109765f395f51905f52915b8581106101cd57508261014095106101b4575b5050600181811b015f5561012a565b8301355f19600384901b60f8161c1916905583806101a5565b90916020600181928588013581550193019101610192565b5f805261021a905f5160206109765f395f51905f52601f850160051c81019160208610610220575b601f0160051c01906105ea565b826100f6565b909150819061020d565b634e487b7160e01b5f52604160045260245ffd5b6330745b1d60e11b5f5260045ffd5b632391e7d960e21b5f5260045ffd5b630272d02960e61b5f52336004526401625f000160245260445ffd5b34610088575f36600319011261008857610290610956565b6102af61029b610668565b60405191829160208352602083019061058e565b0390f35b34610088575f36600319011261008857602060ff60025460081c166040519015158152f35b34610088575f366003190112610088576102f0610956565b60ff60025416604051905f8260015491610309836105b2565b8083529260018116908115610397575060011461034b575b61032d92500383610600565b6102af6040519283921515835260406020840152604083019061058e565b5060015f90815290915f5160206109965f395f51905f525b81831061037b57505090602061032d92820101610321565b6020919350806001915483858901015201910190918492610363565b6020925061032d94915060ff191682840152151560051b820101610321565b34610088576103c43661053d565b906401625f30003303610521576103d9610956565b811561023e5767ffffffffffffffff821161022a576103f96001546105b2565b601f81116104e6575b505f91601f811160011461047757610432818061044a955f9161016d57508160011b915f199060031b1c19161790565b6001555b600160ff1960025416176002553691610622565b602081519101207f47e8cff32d5b0ec9837b18fa503999468fe05910d3e75fd23ca2f7dff666472c5f80a2005b601f1981169260015f525f5160206109965f395f51905f52905f5b8581106104ce57508261044a95106104b5575b5050600181811b01600155610436565b8301355f19600384901b60f8161c1916905583806104a5565b90916020600181928588013581550193019101610492565b60015f5261051b905f5160206109965f395f51905f52601f850160051c8101916020861061022057601f0160051c01906105ea565b82610402565b630272d02960e61b5f52336004526401625f300060245260445ffd5b9060206003198301126100885760043567ffffffffffffffff811161008857826023820112156100885780600401359267ffffffffffffffff84116100885760248483010111610088576024019190565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b90600182811c921680156105e0575b60208310146105cc57565b634e487b7160e01b5f52602260045260245ffd5b91607f16916105c1565b8181106105f5575050565b5f81556001016105ea565b90601f8019910116810190811067ffffffffffffffff82111761022a57604052565b92919267ffffffffffffffff821161022a576040519161064c601f8201601f191660200184610600565b829481845281830111610088578281602093845f960137010152565b604051905f825f549161067a836105b2565b80835292600181169081156106ea57506001146106a0575b61069e92500383610600565b565b505f80805290915f5160206109765f395f51905f525b8183106106ce57505090602061069e92820101610692565b60209193508060019154838589010152019101909184926106b6565b6020925061069e94915060ff191682840152151560051b820101610692565b6401625f2003330361093a5761071d610956565b60ff600254161561069e576107336001546105b2565b9067ffffffffffffffff821161022a5761074d5f546105b2565b601f8111610900575b505f91601f8111600114610886578061078392935f9161087a57508160011b915f199060031b1c19161790565b5f555b60ff196002541660025561079b6001546105b2565b806107fb575b506107aa610668565b602081519101207ff2f849960038eb2fdda1e2480d81dd0833fcaab2ab40db6aa9ec54ecc66eaf525f80a27fc7e061e2f649971b382827359d17883e940465af869167a47de55a61c93072915f80a1565b601f811160011461081257505f6001555b5f6107a1565b601f0160051c5f5160206109965f395f51905f52017fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf75b81811061086f57505060015f525f6001555f5f5160206109965f395f51905f525561080c565b5f8155600101610849565b9050600101545f610114565b5f8080525f5160206109965f395f51905f52935f5160206109765f395f51905f5291601f198416905b8181106108e85750948360019596106108d0575b505050811b015f55610786565b01545f1960f88460031b161c191690555f80806108c3565b9192600180602092868a0154815501940192016108af565b5f8052610934905f5160206109765f395f51905f52601f850160051c8101916020861061022057601f0160051c01906105ea565b5f610756565b630272d02960e61b5f52336004526401625f200360245260445ffd5b60ff60025460081c161561096657565b631428ca4160e21b5f5260045ffdfe290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6a2646970667358221220199da0936c0d556fbf09ea51b4e088b100da0cba170b4f83626f30f7712255c064736f6c634300081e0033", + "storage": { + "0x02": "0x0100", + "0x00": "0x02" + } + }, + "0x00000000000000000000000000000001625f100a": { + "balance": "0x00", + "nonce": 0, + "code": "0x60806040526004361015610011575f80fd5b5f3560e01c8063af8b458b146104e3578063b8fac83714610252578063b90bce37146101955763f20ab81914610045575f80fd5b346101915760403660031901126101915763ffffffff61006361052d565b5f602060405161007281610578565b606081520152165f525f60205260405f206024355f5260205260405f206040519061009c82610578565b6040515f82546100ab81610540565b808452906001811690811561016e5750600114610133575b50608092826100df67ffffffffffffffff946001940382610594565b85520154169160208101928352602067ffffffffffffffff604051948593838552516040848601528051938491826060880152018686015e5f84840186015251166040830152601f01601f19168101030190f35b5f848152602081209092505b818310610154575050810160200160806100c3565b60018160209294939454838588010152019101919061013f565b60ff191660208086019190915291151560051b84019091019150608090506100c3565b5f80fd5b34610191576040366003190112610191576101ae61052d565b63ffffffff602435916101bf6105cc565b16805f525f60205260405f20825f526020525f6001604082206101e28154610540565b80610211575b5001557f1544f43fdb22f27cc517fb15c1e8bab0c54496fb9b016c7dd552a3425d7e370c5f80a3005b601f8111831461022657508281555b856101e8565b8184526020842061024191601f0160051c81019084016105b6565b808352826020812081835555610220565b346101915760603660031901126101915761026b61052d565b6024359060443567ffffffffffffffff811161019157366023820112156101915780600401359067ffffffffffffffff82116101915760248101906024833692010111610191576102ba6105cc565b81156104d457604051926102cd84610578565b601f19601f840116906040516102e66020840182610594565b848152848460208301375f60208683010152855263ffffffff602086019167ffffffffffffffff421683521694855f525f60205260405f20875f5260205260405f20905180519067ffffffffffffffff82116104c0576103468354610540565b601f8111610485575b50602090601f83116001146103f05760409593837f7e9b025d603fa7936ff1d7f98b343f022097fe6342a0f905c6d8f4246178854e9998969467ffffffffffffffff946001945f926103e5575b50505f19600383901b1c191690831b1781555b0191511667ffffffffffffffff198254161790555f838581519687956020875281602088015283870137840101528101030190a3005b015190508d8061039c565b90601f19831691845f52815f20925f5b81811061046d57508467ffffffffffffffff9460019460409a98947f7e9b025d603fa7936ff1d7f98b343f022097fe6342a0f905c6d8f4246178854e9d9c9a98879510610455575b505050811b0181556103af565b01515f1960f88460031b161c191690558d8080610448565b92936020600181928786015181550195019301610400565b6104b090845f5260205f20601f850160051c810191602086106104b6575b601f0160051c01906105b6565b8961034f565b90915081906104a3565b634e487b7160e01b5f52604160045260245ffd5b6330745b1d60e11b5f5260045ffd5b346101915760403660031901126101915763ffffffff61050161052d565b165f525f60205260405f206024355f52602052602061052360405f2054610540565b1515604051908152f35b6004359063ffffffff8216820361019157565b90600182811c9216801561056e575b602083101461055a57565b634e487b7160e01b5f52602260045260245ffd5b91607f169161054f565b6040810190811067ffffffffffffffff8211176104c057604052565b90601f8019910116810190811067ffffffffffffffff8211176104c057604052565b8181106105c1575050565b5f81556001016105b6565b6401625f300033036105da57565b630272d02960e61b5f52336004526401625f300060245260445ffdfea2646970667358221220d70f6236bb91ea87098d3e2a1c53000bb4d1d719c08e7f75b0abcd1f5988c19c64736f6c634300081e0033", + "storage": {} + }, + "0x595475934ed7d9faa7fca28341c2ce583904a44e": { + "balance": "0x00", + "nonce": 1, + "code": "0x60806040526004361015610011575f80fd5b5f3560e01c80632e996a8a146100445780639b8bd1031461003f5763fab32b261461003a575f80fd5b6100f3565b6100af565b3461007f57602036600319011261007f576001600160801b03610065610083565b165f525f60205260ff60405f205416151560805260206080f35b5f80fd5b600435906001600160801b038216820361007f57565b604435906001600160801b038216820361007f57565b3461007f575f36600319011261007f576040517f0000000000000000000000003fc870008b1cc26f3614f14a726f8077227ca2c36001600160a01b03168152602090f35b3461007f57608036600319011261007f5760043563ffffffff8116810361007f5761011c610099565b906064359067ffffffffffffffff821161007f573660238301121561007f5781600401359067ffffffffffffffff821161007f57366024838501011161007f57610183936024610171940191602435906101de565b60405190151581529081906020820190565b0390f35b634e487b7160e01b5f52604160045260245ffd5b90601f8019910116810190811067ffffffffffffffff8211176101bd57604052565b610187565b67ffffffffffffffff81116101bd57601f01601f191660200190565b5050509190916401625f400033036102a3576101f9836101c2565b92610207604051948561019b565b8084526020840191368282011161007f57815f9260209285378501015282516024811061028d575061023983516102b2565b905160601c603484015160801c90604051928084526020601f19601f8301168501016040525f5b81811061027757505061027493945061032b565b90565b8060446020928901015182828801015201610260565b63618e5f4d60e11b5f526004526024805260445ffd5b633333b5ab60e21b5f5260045ffd5b6023198101919082116102c157565b634e487b7160e01b5f52601160045260245ffd5b919082604091031261007f5781516020909201516001600160a01b038116810361007f5790565b3d15610326573d9061030d826101c2565b9161031b604051938461019b565b82523d5f602084013e565b606090565b9091907f0000000000000000000000003fc870008b1cc26f3614f14a726f8077227ca2c3906001600160a01b03808316908216036104a9575050610389610382836001600160801b03165f525f60205260405f2090565b5460ff1690565b61048d57806020806103a0935183010191016102d5565b60018060a09493941b0316906103d66103c9826001600160801b03165f525f60205260405f2090565b805460ff19166001179055565b604051600160f81b602082019081526bffffffffffffffffffffffff19606085901b166021830152603580830186905282525f9182919061041860558261019b565b5190826401625f50005af161042b6102fc565b501561046c576040519283526001600160801b0316917f28a48d0161bbc70613fb99402d1437dea020d82e4495b003eb642c78fa4e258490602090a3600190565b635c0b206f60e01b5f526001600160a01b038216600452602483905260445ffd5b631a10e87760e31b5f526001600160801b03821660045260245ffd5b63708986dd60e11b5f526001600160a01b039081166004521660245260445ffdfea2646970667358221220148da52a4c3454aa1595174d5b869ec3085abfa4ab4ce2ce85aa572eae3f6d6764736f6c634300081e0033000000000000000000000000000000000000000000000000000000000000000000", + "storage": {} + }, + "0x0000000000000000000000000000000000002000": { + "balance": "0xad78ebc5ac6200000", + "nonce": 0 + }, + "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266": { + "balance": "0x2000000000000000000000000000000000000000000000000000000000000000" + }, + "0x0000000000000000000000000000000000002013": { + "balance": "0x1999999999999999999999999999999999999999999999999999999999999999", + "nonce": 0 + }, + "0x0000000000000000000000000000000000002018": { + "balance": "0x1999999999999999999999999999999999999999999999999999999999999999", + "nonce": 0 + }, + "0x00000000000000000000000000000001625f0000": { + "balance": "0x1999999999999999999999999999999999999999999999999999999999999999", + "nonce": 0 + } + }, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000" +} diff --git a/crates/pipe-exec-layer-ext-v2/execute/tests/HARDFORK_TESTING.md b/crates/pipe-exec-layer-ext-v2/execute/tests/HARDFORK_TESTING.md new file mode 100644 index 0000000000..a0ea4fa0d4 --- /dev/null +++ b/crates/pipe-exec-layer-ext-v2/execute/tests/HARDFORK_TESTING.md @@ -0,0 +1,128 @@ +# Gravity Hardfork Integration Testing + +## Overview + +`gravity_hardfork_test.rs` is a **single-node integration test** that verifies reth correctly performs system contract bytecode replacements (hardfork) at a specified block number. + +## How It Works + +``` +Genesis (v1.0.0 old contracts) → run N blocks → gammaBlock triggers apply_gamma() → run M blocks → verify +``` + +1. **Build an old-version Genesis**: Check out a historical tag (e.g. `gravity-testnet-v1.0.0`) from the contracts repo, then run `scripts/generate_genesis_single.sh` to produce a `genesis.json` containing legacy contract bytecodes. +2. **Inject hardfork config**: Add `gravityHardforks.gammaBlock` to the genesis JSON's `config` object. +3. **Boot a reth node**: Start a single-node reth instance using the modified genesis. +4. **Push blocks via MockConsensus**: Use `PipeExecLayerApi` to push empty blocks across the `gammaBlock` boundary. +5. **Verify bytecode replacement**: + - Before hardfork (`gammaBlock - 1`): contract bytecodes must still be the old version. + - At hardfork (`gammaBlock`): contract bytecodes must match the new version. + - After hardfork: the node must continue producing blocks normally. + +## File Reference + +| File | Description | +|------|-------------| +| `gravity_hardfork_test.rs` | Integration test code | +| `gravity_hardfork.json` | Legacy genesis with `gammaBlock` injected | +| `HARDFORK_TESTING.md` | This document | + +Core code paths: + +| File | Description | +|------|-------------| +| `crates/chainspec/src/gravity.rs` | `GravityHardfork` enum (Alpha/Beta/Gamma) | +| `crates/chainspec/src/spec.rs` | Parses `gravityHardforks.gammaBlock` from genesis JSON | +| `crates/chainspec/src/api.rs` | `gamma_transitions_at_block()` trait method | +| `crates/ethereum/evm/src/hardfork/gamma.rs` | Gamma bytecode constants and addresses | +| `crates/ethereum/evm/src/parallel_execute.rs` | `apply_gamma()` bytecode replacement logic | + +## Generating the Test Genesis + +```bash +# 1. Create a worktree at the old tag in the contracts repo +cd gravity_chain_core_contracts +git worktree add /tmp/gcc-v1.0.0 gravity-testnet-v1.0.0 + +# 2. Install dependencies (forge-std, openzeppelin, etc.) +cd /tmp/gcc-v1.0.0 && npm install + +# 3. Generate genesis +bash scripts/generate_genesis_single.sh + +# 4. Inject gammaBlock +python3 -c " +import json +with open('genesis.json') as f: g = json.load(f) +g['config']['gravityHardforks'] = {'gammaBlock': 20} +with open('gravity_hardfork.json', 'w') as f: json.dump(g, f, indent=2) +" + +# 5. Copy to test directory +cp gravity_hardfork.json /crates/pipe-exec-layer-ext-v2/execute/ + +# 6. Clean up worktree +cd gravity_chain_core_contracts && git worktree remove /tmp/gcc-v1.0.0 +``` + +## Running the Test + +```bash +cd crates/pipe-exec-layer-ext-v2/execute +rm -rf data/gravity_hardfork_test # Must clear stale data before each run +RUSTFLAGS="--cfg tokio_unstable" cargo test --test gravity_hardfork_test -- --nocapture +``` + +## Pitfalls and Lessons Learned + +### 1. Genesis build requires node_modules +`generate_genesis_single.sh` depends on `node_modules` (forge-std, openzeppelin). After checking out an old tag, you **must** run `npm install` first — otherwise Forge compilation will fail. + +### 2. `gravityHardforks` must be a top-level config key +reth's `alloy_genesis` handles unknown config fields via `#[serde(flatten)]` into `extra_fields`. This means `gravityHardforks` must be a top-level key inside the `config` object — it cannot be nested under any other field. + +### 3. Contracts that didn't exist in the old genesis +Contracts added after v1.0.0 (e.g. `OracleRequestQueue` at 0x1625F4002) won't be present in the legacy genesis. `apply_gamma()` already handles this by checking `if let Some(ref info)` and skipping missing accounts. The test must tolerate this as well. + +### 4. StakePool addresses are dynamically created +StakePool is **not** a pre-deployed system contract at a fixed address. It is dynamically created via `CREATE` during `Genesis.initialize` in the genesis-tool. The address is deterministic but not in the `0x1625f` system range. To find it, look for accounts in the genesis `alloc` that have `code` but are outside the system address range. + +### 5. ReentrancyGuard storage must be initialized +The new StakePool introduces OpenZeppelin v5's `ReentrancyGuardUpgradeable`, which uses ERC-7201 namespaced storage. When replacing the bytecode at hardfork time, the ReentrancyGuard storage slot **must** be initialized to `NOT_ENTERED` (1). Without this, the very first call to any guarded function will revert with `ReentrancyGuardReentrantCall`. + +### 6. StateProvider::storage() returns Option +`StateProvider::storage()` returns `Result>`, not `Result`. When asserting storage values, wrap the expected value in `Some(...)`. + +### 7. Data directory must be cleaned between runs +reth persists its RocksDB state under `data/gravity_hardfork_test/`. Leftover data from a previous run will cause genesis initialization conflicts. Always `rm -rf data/gravity_hardfork_test` before each test run. + +## Guide: Adding a New Hardfork Test + +Using a hypothetical "Delta" hardfork as an example: + +### 1. Code Changes + +``` +crates/chainspec/src/gravity.rs → Add Delta variant to GravityHardfork enum +crates/chainspec/src/spec.rs → Parse gravityHardforks.deltaBlock +crates/chainspec/src/api.rs → Add delta_transitions_at_block() +crates/ethereum/evm/src/hardfork/delta.rs → New file with updated bytecode constants +crates/ethereum/evm/src/parallel_execute.rs → Add apply_delta() call +``` + +### 2. Test Data + +- Pick a tag **after** Gamma as the "old version" and regenerate the genesis. +- Alternatively, reuse `gravity_hardfork.json` and append `"deltaBlock": N` to the config. +- To test both hardforks in sequence, set both `gammaBlock` and `deltaBlock` in the same genesis. + +### 3. Test Code + +- Either extend `gravity_hardfork_test.rs` with Delta verification logic, or create a separate `gravity_delta_hardfork_test.rs` for isolation. +- The verification pattern is identical: old bytecodes before → new bytecodes at hardfork block → normal block execution after. + +### 4. Things to Watch For + +- If new contracts are being **deployed** (not just upgraded), `apply_delta()` needs to insert a new account rather than just replacing bytecode on an existing one. +- If storage layout changes are involved (e.g. new storage slots), the initial values must be written in `apply_delta()`. +- StakePool and other dynamically-created contract addresses must be enumerated from on-chain data and hardcoded into constants before deployment. diff --git a/crates/pipe-exec-layer-ext-v2/execute/tests/gravity_hardfork_test.rs b/crates/pipe-exec-layer-ext-v2/execute/tests/gravity_hardfork_test.rs new file mode 100644 index 0000000000..bdbbcd0f92 --- /dev/null +++ b/crates/pipe-exec-layer-ext-v2/execute/tests/gravity_hardfork_test.rs @@ -0,0 +1,461 @@ +#![allow(missing_docs)] + +//! Integration test for Gravity Gamma hardfork activation. +//! +//! This test boots a single reth node using a genesis generated from +//! `gravity-testnet-v1.0.0` contracts (via `generate_genesis_single.sh`). +//! It pushes blocks through the MockConsensus/PipeExecLayerApi pipeline +//! and verifies that at `gammaBlock=5`, all 11 system contract bytecodes +//! are replaced with the current HEAD bytecodes. + +use alloy_primitives::{address, Address, B256, U256}; +use alloy_rpc_types_eth::TransactionRequest; +use gravity_api_types::{ + config_storage::{BlockNumber, ConfigStorage, OnChainConfig}, + events::contract_event::GravityEvent, +}; +use gravity_storage::{block_view_storage::BlockViewStorage, GravityStorage}; +use reth_chainspec::{ChainSpec, EthChainSpec}; +use reth_cli_commands::{launcher::FnLauncher, NodeCommand}; +use reth_cli_runner::CliRunner; +use reth_db::DatabaseEnv; +use reth_ethereum_cli::chainspec::EthereumChainSpecParser; +use reth_evm_ethereum::hardfork::gamma::{ + GAMMA_SYSTEM_UPGRADES, REENTRANCY_GUARD_NOT_ENTERED, REENTRANCY_GUARD_SLOT, + STAKEPOOL_ADDRESSES, STAKEPOOL_BYTECODE, +}; +use reth_evm_ethereum::hardfork::delta::{ + GOVERNANCE_ADDRESS, GOVERNANCE_OWNER, GOVERNANCE_OWNER_SLOT, +}; +use reth_node_builder::{EngineNodeLauncher, NodeBuilder, WithLaunchContext}; +use reth_node_ethereum::{node::EthereumAddOns, EthereumNode}; +use reth_pipe_exec_layer_ext_v2::{ + new_pipe_exec_layer_api, ExecutionArgs, OrderedBlock, PipeExecLayerApi, +}; +use reth_provider::{ + providers::BlockchainProvider, BlockHashReader, BlockNumReader, DatabaseProviderFactory, + HeaderProvider, StateProviderFactory, +}; +use reth_rpc_eth_api::{helpers::EthCall, RpcTypes}; +use reth_tracing::{ + tracing_subscriber::filter::LevelFilter, LayerInfo, LogFormat, RethTracer, Tracer, +}; +use std::{ + collections::BTreeMap, + sync::Arc, + time::{Duration, SystemTime}, +}; + +/// Block number at which Gamma hardfork activates (must match gravity_hardfork.json). +const GAMMA_BLOCK: u64 = 20; + +/// Block number at which Delta hardfork activates (must match gravity_hardfork.json). +const DELTA_BLOCK: u64 = 25; + +fn mock_block_id(block_number: u64) -> B256 { + B256::left_padding_from(&block_number.to_be_bytes()) +} + +fn new_ordered_block( + epoch: u64, + block_number: u64, + block_id: B256, + parent_block_id: B256, +) -> OrderedBlock { + OrderedBlock { + epoch, + parent_id: parent_block_id, + id: block_id, + number: block_number, + timestamp_us: SystemTime::now().duration_since(SystemTime::UNIX_EPOCH).unwrap().as_micros() + as u64, + coinbase: Address::ZERO, + prev_randao: B256::ZERO, + withdrawals: Default::default(), + transactions: vec![], + senders: vec![], + proposer_index: Some(0), + extra_data: vec![], + randomness: U256::ZERO, + } +} + +struct MockConsensus { + pipeline_api: PipeExecLayerApi, +} + +impl MockConsensus +where + Storage: GravityStorage, + EthApi: EthCall, + EthApi::NetworkTypes: RpcTypes, +{ + fn new(pipeline_api: PipeExecLayerApi) -> Self { + Self { pipeline_api } + } + + async fn run(self, latest_block_number: u64) { + let Self { pipeline_api } = self; + let mut epoch: u64 = pipeline_api + .fetch_config_bytes(OnChainConfig::Epoch, BlockNumber::Latest) + .unwrap() + .try_into() + .unwrap(); + println!( + "[hardfork_test] latest_block_number={latest_block_number}, epoch={epoch}, gammaBlock={GAMMA_BLOCK}" + ); + + tokio::time::sleep(Duration::from_secs(3)).await; + + // Push blocks past the hardfork boundary (gammaBlock=5) + let target_block = GAMMA_BLOCK + 30; + for block_number in latest_block_number + 1..=target_block { + let block_id = mock_block_id(block_number); + let parent_block_id = mock_block_id(block_number - 1); + pipeline_api + .push_ordered_block(new_ordered_block( + epoch, + block_number, + block_id, + parent_block_id, + )) + .unwrap(); + let result = pipeline_api.pull_executed_block_hash().await.unwrap(); + assert_eq!(result.block_number, block_number); + assert_eq!(result.block_id, block_id); + pipeline_api.commit_executed_block_hash(block_id, Some(result.block_hash)).unwrap(); + + // Handle epoch transitions + for event in &result.gravity_events { + match event { + GravityEvent::NewEpoch(new_epoch, _) => { + assert_eq!(*new_epoch, epoch + 1); + pipeline_api.wait_for_block_persistence(block_number).await.unwrap(); + let stored_epoch: u64 = pipeline_api + .fetch_config_bytes( + OnChainConfig::Epoch, + BlockNumber::Number(block_number), + ) + .unwrap() + .try_into() + .unwrap(); + assert_eq!(stored_epoch, *new_epoch); + // Push stale epoch block + pipeline_api + .push_ordered_block(new_ordered_block( + epoch, + block_number + 1, + mock_block_id(block_number + 1), + block_id, + )) + .unwrap(); + epoch = *new_epoch; + } + _ => {} + } + } + + tokio::time::sleep(Duration::from_millis(200)).await; + } + + println!("[hardfork_test] ✅ Pushed {target_block} blocks past gammaBlock."); + } +} + +/// Verify that all system contracts have the expected new bytecodes after the hardfork. +fn verify_bytecodes_upgraded(provider: &P) { + println!("[hardfork_test] Verifying system contract bytecodes at block {GAMMA_BLOCK}..."); + + let state = provider + .state_by_block_number_or_tag(alloy_eips::BlockNumberOrTag::Number(GAMMA_BLOCK)) + .expect("Failed to get state provider for hardfork block"); + + let mut all_upgraded = true; + for (addr, expected_bytecode) in GAMMA_SYSTEM_UPGRADES { + match state.account_code(addr) { + Ok(Some(code)) => { + let code_bytes = code.original_bytes(); + if code_bytes.as_ref() == *expected_bytecode { + println!("[hardfork_test] ✅ {addr}: bytecode matches ({}B)", code_bytes.len()); + } else { + println!( + "[hardfork_test] ❌ {addr}: MISMATCH got={}B expected={}B", + code_bytes.len(), + expected_bytecode.len() + ); + all_upgraded = false; + } + } + Ok(None) => { + // Contract may not have existed in v1.0.0 genesis — apply_gamma skips it + println!("[hardfork_test] ⚠ {addr}: no code found (not in v1.0.0 genesis, skip)"); + } + Err(e) => { + println!("[hardfork_test] ❌ {addr}: error: {e:?}"); + all_upgraded = false; + } + } + } + + assert!(all_upgraded, "Not all system contracts were upgraded at gammaBlock!"); + println!( + "[hardfork_test] ✅ All {} system contract bytecodes verified!", + GAMMA_SYSTEM_UPGRADES.len() + ); + + // Also verify StakePool upgrades + println!("[hardfork_test] Verifying StakePool bytecodes at block {GAMMA_BLOCK}..."); + for pool_addr in STAKEPOOL_ADDRESSES { + match state.account_code(pool_addr) { + Ok(Some(code)) => { + let code_bytes = code.original_bytes(); + assert_eq!( + code_bytes.as_ref(), + STAKEPOOL_BYTECODE, + "StakePool {pool_addr}: bytecode MISMATCH" + ); + println!( + "[hardfork_test] ✅ StakePool {pool_addr}: bytecode matches ({}B)", + code_bytes.len() + ); + } + Ok(None) => panic!("[hardfork_test] ❌ StakePool {pool_addr}: no code found"), + Err(e) => panic!("[hardfork_test] ❌ StakePool {pool_addr}: error: {e:?}"), + } + } + + // Verify ReentrancyGuard storage slot was initialized for StakePool + println!("[hardfork_test] Verifying ReentrancyGuard storage for StakePools..."); + let guard_slot = alloy_primitives::B256::from(REENTRANCY_GUARD_SLOT); + for pool_addr in STAKEPOOL_ADDRESSES { + let guard_value = + state.storage(*pool_addr, guard_slot).expect("Failed to read ReentrancyGuard storage"); + assert_eq!( + guard_value, + Some(U256::from(REENTRANCY_GUARD_NOT_ENTERED)), + "StakePool {pool_addr}: ReentrancyGuard should be NOT_ENTERED (1)" + ); + println!("[hardfork_test] ✅ StakePool {pool_addr}: ReentrancyGuard = {guard_value:?}"); + } +} + +/// Also verify bytecodes were NOT yet upgraded before the hardfork block. +fn verify_bytecodes_not_upgraded_before(provider: &P) { + println!("[hardfork_test] Verifying bytecodes are OLD before gammaBlock..."); + + let pre_block = GAMMA_BLOCK - 1; + let state = provider + .state_by_block_number_or_tag(alloy_eips::BlockNumberOrTag::Number(pre_block)) + .expect("Failed to get state provider for pre-hardfork block"); + + // Just check the first contract (StakingConfig) as a smoke test + let (addr, expected_new) = &GAMMA_SYSTEM_UPGRADES[0]; + match state.account_code(addr) { + Ok(Some(code)) => { + let code_bytes = code.original_bytes(); + assert_ne!( + code_bytes.as_ref(), + *expected_new, + "Bytecode at {addr} should be OLD before gammaBlock but was already upgraded!" + ); + println!( + "[hardfork_test] ✅ StakingConfig at block {pre_block}: old bytecode ({}B), expected new={}B", + code_bytes.len(), + expected_new.len() + ); + + // Also check StakePool is still OLD before gammaBlock + for pool_addr in STAKEPOOL_ADDRESSES { + match state.account_code(pool_addr) { + Ok(Some(pool_code)) => { + let pool_bytes = pool_code.original_bytes(); + assert_ne!( + pool_bytes.as_ref(), + STAKEPOOL_BYTECODE, + "StakePool {pool_addr}: should be OLD before gammaBlock" + ); + println!( + "[hardfork_test] ✅ StakePool {pool_addr} at block {pre_block}: old bytecode ({}B), expected new={}B", + pool_bytes.len(), + STAKEPOOL_BYTECODE.len() + ); + } + Ok(None) => println!( + "[hardfork_test] ⚠ StakePool {pool_addr} at block {pre_block}: no code" + ), + Err(e) => panic!("[hardfork_test] StakePool {pool_addr}: error: {e:?}"), + } + } + } + Ok(None) => { + println!("[hardfork_test] ⚠ StakingConfig at block {pre_block}: no code (may be expected if no blocks yet)"); + } + Err(e) => { + panic!("[hardfork_test] Failed to fetch code before hardfork: {e:?}"); + } + } +} + +async fn run_pipe( + builder: WithLaunchContext, ChainSpec>>, +) -> eyre::Result<()> { + let handle = builder + .with_types_and_provider::>() + .with_components(EthereumNode::components()) + .with_add_ons(EthereumAddOns::default()) + .launch_with_fn(|builder| { + let launcher = EngineNodeLauncher::new( + builder.task_executor().clone(), + builder.config().datadir(), + reth_engine_primitives::TreeConfig::default(), + ); + builder.launch_with(launcher) + }) + .await?; + + let chain_spec = handle.node.chain_spec(); + + // Verify gammaBlock is parsed correctly + assert!( + chain_spec.gamma_transitions_at_block(GAMMA_BLOCK), + "gamma_transitions_at_block({GAMMA_BLOCK}) should be true" + ); + assert!( + !chain_spec.gamma_transitions_at_block(GAMMA_BLOCK - 1), + "gamma_transitions_at_block({}) should be false", + GAMMA_BLOCK - 1 + ); + println!("[hardfork_test] ✅ ChainSpec correctly parsed gammaBlock={GAMMA_BLOCK}"); + + assert!( + chain_spec.delta_transitions_at_block(DELTA_BLOCK), + "delta_transitions_at_block({DELTA_BLOCK}) should be true" + ); + assert!( + !chain_spec.delta_transitions_at_block(DELTA_BLOCK - 1), + "delta_transitions_at_block({}) should be false", + DELTA_BLOCK - 1 + ); + println!("[hardfork_test] ✅ ChainSpec correctly parsed deltaBlock={DELTA_BLOCK}"); + + let eth_api = handle.node.rpc_registry.eth_api().clone(); + let provider = handle.node.provider; + + let db_provider = provider.database_provider_ro().unwrap(); + let latest_block_number = db_provider.best_block_number().unwrap(); + let latest_block_hash = db_provider.block_hash(latest_block_number).unwrap().unwrap(); + let latest_block_header = db_provider.header_by_number(latest_block_number).unwrap().unwrap(); + drop(db_provider); + + println!("[hardfork_test] latest_block_header: {:?}", latest_block_header); + let storage = BlockViewStorage::new(provider.clone()); + + let (tx, rx) = tokio::sync::oneshot::channel(); + let pipeline_api = new_pipe_exec_layer_api( + chain_spec, + storage, + latest_block_header, + latest_block_hash, + rx, + eth_api, + ); + + tx.send(ExecutionArgs { block_number_to_block_id: BTreeMap::new() }).unwrap(); + + // Run consensus — push blocks past gammaBlock + let consensus = MockConsensus::new(pipeline_api); + consensus.run(latest_block_number).await; + + // After all blocks are pushed, verify bytecodes + verify_bytecodes_not_upgraded_before(&provider); + verify_bytecodes_upgraded(&provider); + verify_governance_owner_set(&provider); + + Ok(()) +} + +#[test] +fn test_gamma_hardfork() { + std::panic::set_hook(Box::new({ + |panic_info| { + let backtrace = std::backtrace::Backtrace::capture(); + eprintln!("Panic occurred: {panic_info}\nBacktrace:\n{backtrace}"); + std::process::exit(1); + } + })); + + let _ = RethTracer::new() + .with_stdout(LayerInfo::new( + LogFormat::Terminal, + LevelFilter::INFO.to_string(), + "".to_string(), + Some("always".to_string()), + )) + .init(); + + let runner = CliRunner::try_default_runtime().unwrap(); + let command: NodeCommand = NodeCommand::try_parse_args_from([ + "reth", + "--chain", + "gravity_hardfork.json", + "--with-unused-ports", + "--dev", + "--datadir", + "data/gravity_hardfork_test", + ]) + .unwrap(); + + runner + .run_command_until_exit(|ctx| { + command.execute( + ctx, + FnLauncher::new::(|builder, _| async move { + run_pipe(builder).await + }), + ) + }) + .unwrap(); + + // Give background threads time to exit cleanly + std::thread::sleep(Duration::from_secs(2)); +} + +/// Verify that the Governance contract owner was set by the Delta hardfork. +fn verify_governance_owner_set(provider: &P) { + println!("[hardfork_test] Verifying Governance owner storage at block {DELTA_BLOCK}..."); + + let state = provider + .state_by_block_number_or_tag(alloy_eips::BlockNumberOrTag::Number(DELTA_BLOCK)) + .expect("Failed to get state provider for delta hardfork block"); + + let owner_slot = alloy_primitives::B256::from(GOVERNANCE_OWNER_SLOT); + let owner_value = state + .storage(GOVERNANCE_ADDRESS, owner_slot) + .expect("Failed to read Governance owner storage"); + let expected_value = U256::from_be_bytes(GOVERNANCE_OWNER.into_word().0); + assert_eq!( + owner_value, + Some(expected_value), + "Governance owner should be set to {GOVERNANCE_OWNER} after deltaBlock" + ); + println!( + "[hardfork_test] ✅ Governance owner at block {DELTA_BLOCK}: {GOVERNANCE_OWNER}" + ); + + // Also verify owner was NOT set before delta block + let pre_state = provider + .state_by_block_number_or_tag(alloy_eips::BlockNumberOrTag::Number(DELTA_BLOCK - 1)) + .expect("Failed to get state provider for pre-delta block"); + let pre_owner = pre_state + .storage(GOVERNANCE_ADDRESS, owner_slot) + .expect("Failed to read pre-delta Governance owner"); + assert_ne!( + pre_owner, + Some(expected_value), + "Governance owner should NOT be set before deltaBlock" + ); + println!( + "[hardfork_test] ✅ Governance owner at block {}: not yet set (as expected)", + DELTA_BLOCK - 1 + ); +} diff --git a/crates/pipe-exec-layer-ext-v2/execute/tests/hardfork_test_helpers.rs b/crates/pipe-exec-layer-ext-v2/execute/tests/hardfork_test_helpers.rs new file mode 100644 index 0000000000..f31ea85316 --- /dev/null +++ b/crates/pipe-exec-layer-ext-v2/execute/tests/hardfork_test_helpers.rs @@ -0,0 +1,145 @@ +//! Reusable test helpers for Gravity hardfork integration tests. +//! +//! These helpers verify that contract bytecodes were correctly replaced +//! during a hardfork. They work with any hardfork by accepting +//! `(address, expected_bytecode)` slices as parameters. +//! +//! # Usage +//! +//! ```ignore +//! use reth_evm_ethereum::hardfork::gamma::{GAMMA_SYSTEM_UPGRADES, STAKEPOOL_ADDRESSES, STAKEPOOL_BYTECODE}; +//! +//! // Verify system contracts were upgraded at the hardfork block +//! verify_bytecodes_at_block(&provider, hardfork_block, GAMMA_SYSTEM_UPGRADES, "Gamma system"); +//! +//! // Verify they were NOT upgraded before the hardfork block +//! verify_bytecodes_old_before_block(&provider, hardfork_block, GAMMA_SYSTEM_UPGRADES, "Gamma system"); +//! ``` + +use alloy_primitives::{Address, B256, U256}; +use reth_provider::StateProviderFactory; + +/// Verify that all contracts in `upgrades` have the expected new bytecodes +/// at the given `block_number`. +/// +/// Panics if any mismatch is found. Contracts that don't exist on-chain +/// are logged as warnings but not treated as failures (they may not have +/// existed in the old genesis). +pub fn verify_bytecodes_at_block( + provider: &P, + block_number: u64, + upgrades: &[(Address, &[u8])], + label: &str, +) { + println!("[hardfork_test] Verifying {label} bytecodes at block {block_number}..."); + + let state = provider + .state_by_block_number_or_tag(alloy_eips::BlockNumberOrTag::Number(block_number)) + .expect("Failed to get state provider"); + + let mut all_ok = true; + for (addr, expected_bytecode) in upgrades { + match state.account_code(addr) { + Ok(Some(code)) => { + let code_bytes = code.original_bytes(); + if code_bytes.as_ref() == *expected_bytecode { + println!( + "[hardfork_test] ✅ {addr}: bytecode matches ({}B)", + code_bytes.len() + ); + } else { + println!( + "[hardfork_test] ❌ {addr}: MISMATCH got={}B expected={}B", + code_bytes.len(), + expected_bytecode.len() + ); + all_ok = false; + } + } + Ok(None) => { + // Contract may not have existed in old genesis — skip + println!("[hardfork_test] ⚠ {addr}: no code found (not in old genesis, skip)"); + } + Err(e) => { + println!("[hardfork_test] ❌ {addr}: error: {e:?}"); + all_ok = false; + } + } + } + + assert!(all_ok, "Not all {label} contracts were upgraded at block {block_number}!"); + println!( + "[hardfork_test] ✅ All {} {label} bytecodes verified!", + upgrades.len() + ); +} + +/// Verify that contracts in `upgrades` do NOT yet have the new bytecodes +/// before the hardfork block (i.e. at `hardfork_block - 1`). +/// +/// Checks only the first contract as a smoke test to avoid excessive slowness. +pub fn verify_bytecodes_old_before_block( + provider: &P, + hardfork_block: u64, + upgrades: &[(Address, &[u8])], + label: &str, +) { + let pre_block = hardfork_block - 1; + println!("[hardfork_test] Verifying {label} bytecodes are OLD before block {pre_block}..."); + + let state = provider + .state_by_block_number_or_tag(alloy_eips::BlockNumberOrTag::Number(pre_block)) + .expect("Failed to get state provider for pre-hardfork block"); + + // Smoke test: check the first contract + let (addr, expected_new) = &upgrades[0]; + match state.account_code(addr) { + Ok(Some(code)) => { + let code_bytes = code.original_bytes(); + assert_ne!( + code_bytes.as_ref(), + *expected_new, + "Bytecode at {addr} should be OLD before hardfork but was already upgraded!" + ); + println!( + "[hardfork_test] ✅ {addr} at block {pre_block}: old bytecode ({}B), new would be {}B", + code_bytes.len(), + expected_new.len() + ); + } + Ok(None) => { + println!("[hardfork_test] ⚠ {addr} at block {pre_block}: no code (may be expected)"); + } + Err(e) => { + panic!("[hardfork_test] Failed to fetch code before hardfork: {e:?}"); + } + } +} + +/// Verify that specific storage slots have expected values at a given block. +/// +/// Useful for checking ReentrancyGuard initialization, new storage slots, etc. +pub fn verify_storage_patches( + provider: &P, + block_number: u64, + patches: &[(Address, B256, U256)], + label: &str, +) { + println!("[hardfork_test] Verifying {label} storage patches at block {block_number}..."); + + let state = provider + .state_by_block_number_or_tag(alloy_eips::BlockNumberOrTag::Number(block_number)) + .expect("Failed to get state provider"); + + for (addr, slot, expected_value) in patches { + let actual = state + .storage(*addr, *slot) + .expect("Failed to read storage"); + assert_eq!( + actual, + Some(*expected_value), + "{label}: {addr} slot {slot} mismatch" + ); + println!("[hardfork_test] ✅ {addr}: storage {slot} = {actual:?}"); + } +}