diff --git a/contracts/utils/src/ArenaController.sol b/contracts/utils/src/ArenaController.sol index b68b88e..aa0aede 100644 --- a/contracts/utils/src/ArenaController.sol +++ b/contracts/utils/src/ArenaController.sol @@ -143,7 +143,7 @@ contract ArenaController { poolManager.initialize(poolKey, sqrtPriceX96, hookData); } - function addLiquidity(int256 liquidityDelta, int24 tickLower, int24 tickUpper) public { + function addLiquidity(int256 liquidityDelta, int24 tickLower, int24 tickUpper, bytes memory hookData) public { if (liquidityDelta > 0) { require(currency0.mint(address(this), uint256(liquidityDelta)), "Minting currency0 failed"); require(currency1.mint(address(this), uint256(liquidityDelta)), "Minting currency1 failed"); @@ -159,6 +159,6 @@ contract ArenaController { salt: "" }); - router.modifyLiquidity(poolKey, params, ""); + router.modifyLiquidity(poolKey, params, hookData); } } diff --git a/src/arena.rs b/src/arena.rs index 48bf5d5..dffa42b 100644 --- a/src/arena.rs +++ b/src/arena.rs @@ -1,7 +1,6 @@ use std::collections::HashMap; use alloy::{ - primitives::Uint, providers::{Provider, ProviderBuilder, WalletProvider}, signers::local::PrivateKeySigner, }; @@ -42,16 +41,20 @@ impl Arena { pub async fn run(&mut self, config: Config) -> Result<(), ArenaError> { let admin_provider = self.providers[&0].clone(); - let controller = - ArenaController::deploy(admin_provider.clone(), config.fee, Uint::from(1)).await?; + let controller = ArenaController::deploy( + admin_provider.clone(), + config.manager_fee, + config.initial_price, + ) + .await?; controller .setPool( - Uint::from(0), - Signed::try_from(2).unwrap(), - Address::default(), - Uint::from(79228162514264337593543950336_u128), - Bytes::new(), + config.pool_fee, + config.tick_spacing, + config.hooks, + config.sqrt_price_x96, + config.hook_data, ) .send() .await diff --git a/src/artifacts/ArenaController.json b/src/artifacts/ArenaController.json index 082723f..3969dab 100644 --- a/src/artifacts/ArenaController.json +++ b/src/artifacts/ArenaController.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[{"name":"fee","type":"uint256","internalType":"uint256"},{"name":"initialPrice","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"MAX_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"MIN_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"POOLS_SLOT","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"POSITIONS_OFFSET","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"addLiquidity","inputs":[{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"constructSignal","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct ArenaController.Signal","components":[{"name":"currentTick","type":"int24","internalType":"int24"},{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"},{"name":"manager","type":"address","internalType":"address"},{"name":"lexPrice","type":"uint256","internalType":"uint256"},{"name":"pool","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"fetcher","type":"address","internalType":"address"}]}],"stateMutability":"view"},{"type":"function","name":"equalizePrice","inputs":[{"name":"depth","type":"int256","internalType":"int256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getRouter","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"poolKey","inputs":[],"outputs":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}],"stateMutability":"view"},{"type":"function","name":"setPool","inputs":[{"name":"poolFee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"},{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPrice","inputs":[{"name":"price","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"swapOnLex","inputs":[{"name":"tokenIn","type":"address","internalType":"address"},{"name":"amountIn","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"}],"bytecode":{"object":"0x610160604052348015610010575f80fd5b5060405161b59038038061b59083398101604081905261002f916104a6565b8160405161003c90610458565b908152602001604051809103905ff08015801561005b573d5f803e3d5ffd5b506001600160a01b0316608081905260405161007690610465565b6001600160a01b039091168152602001604051809103905ff08015801561009f573d5f803e3d5ffd5b506001600160a01b031660a0526080516040516100bb90610472565b6001600160a01b039091168152602001604051809103905ff0801580156100e4573d5f803e3d5ffd5b506001600160a01b031660c0526040516100fd9061047f565b604051809103905ff080158015610116573d5f803e3d5ffd5b506001600160a01b0316610100526040516012906101339061048c565b606080825260099082015268063757272656e6379360bc1b608082015260a06020820181905260029082015261063360f41b60c082015260ff909116604082015260e001604051809103905ff080158015610190573d5f803e3d5ffd5b506001600160a01b0316610120526040516012906101ad9061048c565b60608082526009908201526863757272656e63793160b81b608082015260a06020820181905260029082015261633160f01b60c082015260ff909116604082015260e001604051809103905ff08015801561020a573d5f803e3d5ffd5b506001600160a01b0390811661014081905261012051909116111561024657610140805161012080516001600160a01b03908116909352911690525b61012051610140518260405161025b90610499565b6001600160a01b0393841681529290911660208301526040820152606001604051809103905ff080158015610292573d5f803e3d5ffd5b506001600160a01b0390811660e052610120516040516340c10f1960e01b8152306004820152678ac7230489e8000060248201529116906340c10f19906044016020604051808303815f875af11580156102ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061031291906104c8565b6103775760405162461bcd60e51b815260206004820152602b60248201527f4d696e74696e672063757272656e63793020746f206c6971756964206578636860448201526a185b99d94819985a5b195960aa1b60648201526084015b60405180910390fd5b610140516040516340c10f1960e01b8152306004820152678ac7230489e8000060248201526001600160a01b03909116906340c10f19906044016020604051808303815f875af11580156103cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103f191906104c8565b6104515760405162461bcd60e51b815260206004820152602b60248201527f4d696e74696e672063757272656e63793120746f206c6971756964206578636860448201526a185b99d94819985a5b195960aa1b606482015260840161036e565b50506104ee565b61502b80611d1d83390190565b6116ad80616d4883390190565b6117d4806183f583390190565b6105bc80619bc983390190565b610eea8061a18583390190565b6105218061b06f83390190565b5f80604083850312156104b7575f80fd5b505080516020909101519092909150565b5f602082840312156104d8575f80fd5b815180151581146104e7575f80fd5b9392505050565b60805160a05160c05160e05161010051610120516101405161174b6105d25f395f81816106640152818161086401528181610b17015261101401525f81816105850152818161076801528181610a1b0152610fe501525f81816102fa0152818161053701528181610bd00152610c2001525f818161045d01528181610d530152818161115a01526111db01525f81816109ec01528181610ae801528181610e3b0152610f3301525f81816102610152818161073901528181610835015261095901525f81816103230152818161042e01528181610bff01526110c3015261174b5ff3fe608060405234801561000f575f80fd5b50600436106100b1575f3560e01c806357eb1da71161006e57806357eb1da7146101f05780636af577411461022657806391b7f5ed1461023957806396f5e27c1461024c578063b0f479a11461025f578063c7b8e15d14610285575f80fd5b806301480703146100b557806306ba06fa1461014f57806314ee367714610164578063182148ef146101775780632ba31c53146101f0578063542524dd14610206575b5f80fd5b6100bd61028d565b604080518251600290810b82526020808501516001600160a01b03908116828501528585015181168486015260608087015181860152608080880151805184168288015293840151831660a0808801919091529684015162ffffff1660c08701529083015190930b60e08501529101518116610100830152919092015116610120820152610140015b60405180910390f35b61016261015d3660046112ec565b610561565b005b61016261017236600461132b565b6109d5565b5f54600154600280546101b0936001600160a01b03908116938082169362ffffff600160a01b83041693600160b81b909204900b911685565b604080516001600160a01b039687168152948616602086015262ffffff9093169284019290925260020b606083015291909116608082015260a001610146565b6101f8600681565b604051908152602001610146565b61020e610fb7565b6040516001600160a01b039091168152602001610146565b61016261023436600461137a565b610fd9565b61016261024736600461132b565b611144565b61016261025a366004611476565b6111b5565b7f000000000000000000000000000000000000000000000000000000000000000061020e565b61020e61122e565b6040805160c0810182525f80825260208083018290528284018290526060808401839052845160a080820187528482529281018490528086018490529081018390526080808201849052840152820181905291516332c961d960e01b815290919081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e631bcbf907f00000000000000000000000000000000000000000000000000000000000000009083906332c961d9906103599087906004016114e5565b602060405180830381865afa158015610374573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061039891906114f9565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401608060405180830381865afa1580156103df573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104039190611510565b5050915091506040518060c001604052808260020b8152602001836001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104db91906114f9565b81526040805160a0810182525f546001600160a01b03908116825260015480821660208481019190915262ffffff600160a01b83041684860152600160b81b909104600290810b606085015254821660808401528401919091527f0000000000000000000000000000000000000000000000000000000000000000169101529392505050565b5f831315610722576040516340c10f1960e01b8152306004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906340c10f19906044016020604051808303815f875af11580156105d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105f7919061156c565b6106485760405162461bcd60e51b815260206004820152601860248201527f4d696e74696e672063757272656e637930206661696c6564000000000000000060448201526064015b60405180910390fd5b6040516340c10f1960e01b8152306004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906340c10f19906044016020604051808303815f875af11580156106b2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106d6919061156c565b6107225760405162461bcd60e51b815260206004820152601860248201527f4d696e74696e672063757272656e637931206661696c65640000000000000000604482015260640161063f565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af11580156107ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107d2919061156c565b61081e5760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637930206661696c6564000000604482015260640161063f565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af11580156108aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ce919061156c565b61091a5760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637931206661696c6564000000604482015260640161063f565b60408051608081018252600284810b825283900b60208201528082018590525f606082018190529151632d35e7ed60e11b815290916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691635a6bcfda9161098e91859060040161158b565b6020604051808303815f875af11580156109aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ce91906114f9565b5050505050565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610a61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a85919061156c565b610ad15760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637930206661696c6564000000604482015260640161063f565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610b5d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b81919061156c565b610bcd5760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637931206661696c6564000000604482015260640161063f565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e631bcbf7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166332c961d95f6040518263ffffffff1660e01b8152600401610c6a91906114e5565b602060405180830381865afa158015610c85573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ca991906114f9565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401608060405180830381865afa158015610cf0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d149190611510565b50505090505f610d4e826001600160a01b0316670de0b6b3a7640000610d3a91906115f0565b836001600160a01b0316600160c01b61123e565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd191906114f9565b905080821115610ebd5760408051606081018252600180825260208201879052915f91908101610e076401000276a36001611626565b6001600160a01b039081169091526040805180820182525f80825260208201819052915163088a742d60e21b8152939450927f000000000000000000000000000000000000000000000000000000000000000090921691632229d0b491610e749186908690600401611645565b6020604051808303815f875af1158015610e90573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eb491906114f9565b50505050610fb1565b80821015610fb157604080516060810182525f80825260208201879052918291908101610eff600173fffd8963efd1fc6a506488495d951d5263988d26611607565b6001600160a01b039081169091526040805180820182525f80825260208201819052915163088a742d60e21b8152939450927f000000000000000000000000000000000000000000000000000000000000000090921691632229d0b491610f6c9186908690600401611645565b6020604051808303815f875af1158015610f88573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fac91906114f9565b505050505b50505050565b610fd6600173fffd8963efd1fc6a506488495d951d5263988d26611607565b81565b6040805160a0810182527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081168083527f000000000000000000000000000000000000000000000000000000000000000082166020840181905262ffffff8a811685870181905260028b810b60608801528a861660809097018790525f80546001600160a01b03199081169096178155600180546001600160b81b031916909517600160a01b9093029290921762ffffff60b81b1916600160b81b938d16939093029290921790925580549092169093179055915163695c5bf560e01b81527f00000000000000000000000000000000000000000000000000000000000000009092169163695c5bf5916110fc91869086906004016116a5565b6020604051808303815f875af1158015611118573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061113c91906116fa565b505050505050565b6040516391b7f5ed60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391b7f5ed906024015f604051808303815f87803b1580156111a3575f80fd5b505af11580156109ce573d5f803e3d5ffd5b60405163d004f0f760e01b81526001600160a01b038381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063d004f0f7906044015f604051808303815f87803b15801561121c575f80fd5b505af115801561113c573d5f803e3d5ffd5b610fd66401000276a36001611626565b5f838302815f198587098281108382030391505080841161125d575f80fd5b805f0361126f575082900490506112d4565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b8060020b81146112e9575f80fd5b50565b5f805f606084860312156112fe575f80fd5b833592506020840135611310816112db565b91506040840135611320816112db565b809150509250925092565b5f6020828403121561133b575f80fd5b5035919050565b62ffffff811681146112e9575f80fd5b6001600160a01b03811681146112e9575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f805f805f60a0868803121561138e575f80fd5b853561139981611342565b945060208601356113a9816112db565b935060408601356113b981611352565b925060608601356113c981611352565b9150608086013567ffffffffffffffff8111156113e4575f80fd5b8601601f810188136113f4575f80fd5b803567ffffffffffffffff81111561140e5761140e611366565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561143d5761143d611366565b6040528181528282016020018a1015611454575f80fd5b816020840160208301375f602083830101528093505050509295509295909350565b5f8060408385031215611487575f80fd5b823561149281611352565b946020939093013593505050565b80546001600160a01b0390811683526001820154808216602085015260a081901c62ffffff16604085015260b81c600290810b60608501529091015416608090910152565b60a081016114f382846114a0565b92915050565b5f60208284031215611509575f80fd5b5051919050565b5f805f8060808587031215611523575f80fd5b845161152e81611352565b602086015190945061153f816112db565b604086015190935061155081611342565b606086015190925061156181611342565b939692955090935050565b5f6020828403121561157c575f80fd5b815180151581146112d4575f80fd5b61159581846114a0565b8151600290810b60a08301526020830151900b60c0820152604082015160e082015260609091015161010082015261014061012082018190525f9082015261016001919050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176114f3576114f36115dc565b6001600160a01b0382811682821603908111156114f3576114f36115dc565b6001600160a01b0381811683821601908111156114f3576114f36115dc565b61164f81856114a0565b8251151560a082015260208084015160c08301526040909301516001600160a01b031660e082015281511515610100820152910151151561012082015261016061014082018190525f9082015261018001919050565b6116af81856114a0565b60018060a01b03831660a082015260e060c08201525f82518060e0840152806020850161010085015e5f6101008285010152610100601f19601f830116840101915050949350505050565b5f6020828403121561170a575f80fd5b81516112d4816112db56fea26469706673582212202f1e8b55b9f8b43644f835f5d44698c0c0e32271998428e356f0147397e5da4c64736f6c634300081a003360c0604052348015600e575f80fd5b5060405161502b38038061502b833981016040819052602b916077565b5f80546001600160a01b031916339081178255604051839282917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350608052503060a052608d565b5f602082840312156086575f80fd5b5051919050565b60805160a051614f766100b55f395f6117e201525f818161220b01526122490152614f765ff3fe6080604052600436106101fb575f3560e01c80635a6bcfda11610113578063a58411941161009d578063f135baaa1161006d578063f135baaa14610641578063f2fde38b14610660578063f3cd914c1461067f578063f5298aca1461069e578063fe99049a146106bd575f80fd5b8063a5841194146105ab578063b6363cf2146105ca578063dbd035ff14610603578063f02de3b214610622575f80fd5b806380f0b44c116100e357806380f0b44c146104ed5780638161b8741461050c5780638da5cb5b1461052b57806397e8cd4e146105615780639bf6645f1461058c575f80fd5b80635a6bcfda1461046657806360460f061461049a578063695c5bf5146104af5780637e87ce7d146104ce575f80fd5b8063234266d711610194578063426a849311610164578063426a8493146103a157806348c89491146103c057806352759651146103ec578063558a72971461040b578063598af9e71461042a575f80fd5b8063234266d7146103245780632d7713891461034357806335fd631a146103625780633dd45adb1461038e575f80fd5b80630b0d9c09116101cf5780630b0d9c09146102bd57806311da60b4146102de578063156e29f6146102e65780631e2eaeaf14610305575f80fd5b8062fdd58e146101ff57806301ffc9a71461024857806307eff0dd14610277578063095bcdb61461029e575b5f80fd5b34801561020a575f80fd5b50610235610219366004614397565b600460209081525f928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b348015610253575f80fd5b506102676102623660046143c1565b6106dc565b604051901515815260200161023f565b348015610282575f80fd5b5061028b600181565b60405160029190910b815260200161023f565b3480156102a9575f80fd5b506102676102b83660046143e8565b610712565b3480156102c8575f80fd5b506102dc6102d736600461441a565b6107b9565b005b61023561080a565b3480156102f1575f80fd5b506102dc6103003660046143e8565b61083c565b348015610310575f80fd5b5061023561031f366004614458565b610887565b34801561032f575f80fd5b5061023561033e3660046145d7565b610891565b34801561034e575f80fd5b506102dc61035d36600461463b565b610941565b34801561036d575f80fd5b5061038161037c366004614656565b6109d7565b60405161023f9190614676565b61023561039c36600461463b565b610a14565b3480156103ac575f80fd5b506102676103bb3660046143e8565b610a46565b3480156103cb575f80fd5b506103df6103da3660046146b8565b610aaa565b60405161023f91906146f6565b3480156103f7575f80fd5b506102dc61040636600461472b565b610b6d565b348015610416575f80fd5b5061026761042536600461476c565b610bdc565b348015610435575f80fd5b5061023561044436600461441a565b600560209081525f938452604080852082529284528284209052825290205481565b348015610471575f80fd5b50610485610480366004614796565b610c4b565b6040805192835260208301919091520161023f565b3480156104a5575f80fd5b5061028b617fff81565b3480156104ba575f80fd5b5061028b6104c9366004614838565b610dde565b3480156104d9575f80fd5b506102dc6104e836600461472b565b610fcd565b3480156104f8575f80fd5b506102dc610507366004614397565b61107f565b348015610517575f80fd5b5061023561052636600461441a565b6110f2565b348015610536575f80fd5b505f54610549906001600160a01b031681565b6040516001600160a01b03909116815260200161023f565b34801561056c575f80fd5b5061023561057b36600461463b565b60016020525f908152604090205481565b348015610597575f80fd5b506103816105a636600461487f565b611181565b3480156105b6575f80fd5b506102dc6105c536600461463b565b6111ba565b3480156105d5575f80fd5b506102676105e43660046148ee565b600360209081525f928352604080842090915290825290205460ff1681565b34801561060e575f80fd5b5061038161061d36600461487f565b6111f6565b34801561062d575f80fd5b50600254610549906001600160a01b031681565b34801561064c575f80fd5b5061023561065b366004614458565b61122d565b34801561066b575f80fd5b506102dc61067a36600461463b565b611237565b34801561068a575f80fd5b50610235610699366004614925565b6112c9565b3480156106a9575f80fd5b506102dc6106b83660046143e8565b61140f565b3480156106c8575f80fd5b506102676106d73660046149c3565b611454565b5f6301ffc9a760e01b6001600160e01b03198316148061070c5750630f632fb360e01b6001600160e01b03198316145b92915050565b335f90815260046020908152604080832085845290915281208054839190839061073d908490614a1a565b90915550506001600160a01b0384165f90815260046020908152604080832086845290915281208054849290610774908490614a2d565b909155505060408051338082526020820185905285926001600160a01b038816925f80516020614ee183398151915291015b60405180910390a45060015b9392505050565b5f80516020614f018339815191525c6107dc576107dc6354e3ca0d60e01b6115b3565b6107f1836107e9836115bb565b5f03336115db565b6108056001600160a01b038416838361162e565b505050565b5f5f80516020614f018339815191525c61082e5761082e6354e3ca0d60e01b6115b3565b610837336116c2565b905090565b5f80516020614f018339815191525c61085f5761085f6354e3ca0d60e01b6115b3565b8161086d816107e9846115bb565b610881846001600160a01b03831684611765565b50505050565b5f81545f5260205ff35b5f5f80516020614f018339815191525c6108b5576108b56354e3ca0d60e01b6115b3565b6108bd6117d7565b5f6108dc6108cc8860a0902090565b5f90815260066020526040902090565b90506108e781611819565b6080870151610903906001600160a01b0316888888888861183d565b61090e8187876118ba565b915061091b87833361196d565b6080870151610937906001600160a01b03168888888888611995565b5095945050505050565b5f546001600160a01b0316331461098e5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040517fb4bd8ef53df690b9943d3318996006dbb82a25f54719d8c8035b516a2a5b8acc905f90a250565b6060604051808360051b6020835284602084015260408301925080830190505b855483526020830192506001860195508083106109f75781810382f35b5f5f80516020614f018339815191525c610a3857610a386354e3ca0d60e01b6115b3565b61070c826116c2565b919050565b335f8181526005602090815260408083206001600160a01b03881680855290835281842087855290925280832085905551919285927fb3fd5071835887567a0671151121894ddccc2842f1d10bedad13e0d17cace9a7906107a69087815260200190565b60605f80516020614f018339815191525c15610ad057610ad06328486b6360e11b6115b3565b610ad8611a07565b6040516348eeb9a360e11b815233906391dd734690610afd9086908690600401614a68565b5f604051808303815f875af1158015610b18573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b3f9190810190614a7b565b90505f80516020614f218339815191525c15610b6557610b65635212cba160e01b6115b3565b61070c611a1a565b604082015162ffffff1662800000141580610b9e575081608001516001600160a01b0316336001600160a01b031614155b15610bb357610bb36330d2164160e01b6115b3565b610bc18162ffffff16611a2c565b60a082205f8181526006602052604090206108059083611a52565b335f8181526003602090815260408083206001600160a01b038716808552908352818420805460ff191687151590811790915591519182529293917fceb576d9f15e4e200fdb5096d64d5dfd667e16def20c1eefd14256d8e3faa267910160405180910390a350600192915050565b5f805f80516020614f018339815191525c610c7057610c706354e3ca0d60e01b6115b3565b610c786117d7565b60a086205f818152600660205260409020610c9281611819565b6080880151610cad906001600160a01b031689898989611a6d565b5f610d146040518060c00160405280336001600160a01b031681526020018a5f015160020b81526020018a6020015160020b8152602001610cf18b60400151611b6f565b600f0b81526060808d015160020b60208301528b01516040909101528390611b8b565b94509050610d228185611f05565b9450336001600160a01b0316837f541c041c2cce48e614b3de043c9280f06b6164c0a1741649e2de3c3d375f79748a5f01518b602001518c60400151604051610d8693929190600293840b81529190920b6020820152604081019190915260600190565b60405180910390a360808901515f90610dac906001600160a01b03168b8b898c8c611f38565b90965090508015610dc657610dc68a828c6080015161196d565b610dd18a873361196d565b5050505094509492505050565b5f610de76117d7565b6060850151617fff60029190910b1315610e12576060850151610e12906316e0049f60e31b90612057565b600160020b856060015160020b1215610e3c576060850151610e3c90631d3d20b160e31b90612057565b845160208601516001600160a01b03908116911610610e6e5784516020860151610e6e916306e6c98360e41b91612066565b610e92856040015186608001516001600160a01b031661208890919063ffffffff16565b610ead576080850151610ead90630732d7b560e51b90612149565b5f610ec0866040015162ffffff1661215e565b6080870151909150610ede906001600160a01b031687878787612183565b60a086205f610eec886121f4565b5f848152600660205260409020909250610f099150888386612326565b6080890151909450610f28906001600160a01b03168989878a8a612385565b87602001516001600160a01b0316885f01516001600160a01b0316837fdd466e674ea557f56295e2d0218a125ea4b4f0f6f3307b95f85e6110838d64388b604001518c606001518d608001518d8b604051610fba95949392919062ffffff959095168552600293840b60208601526001600160a01b03928316604086015291166060840152900b608082015260a00190565b60405180910390a4505050949350505050565b6002546001600160a01b03163314610fef57610fef6348f5c3ed60e01b6115b3565b6103e9610fff821610623e900062fff0008316101661101e5761101e63a7abe2f760e01b62ffffff8316612149565b60a082206110408261103a835f90815260066020526040902090565b906123f8565b60405162ffffff8316815281907fe9c42593e71f84403b84352cd168d693e2c9fcd1fdbcc3feb21d92b43e6696f99060200160405180910390a2505050565b5f80516020614f018339815191525c6110a2576110a26354e3ca0d60e01b6115b3565b335f9081526001600160a01b038316602052604081205c906110c3836115bb565b90508181600f0b146110df576110df63bda73abf60e01b6115b3565b610881846110ec83614b0d565b336115db565b6002545f906001600160a01b03163314611116576111166348f5c3ed60e01b6115b3565b8115611122578161113b565b6001600160a01b0383165f908152600160205260409020545b6001600160a01b0384165f90815260016020526040812080549293508392909190611167908490614a1a565b909155506107b290506001600160a01b038416858361162e565b606060405180602082528360208301526040820191508360051b8201855b80355c84526020938401930181841061119f575b5081810382f35b6111c261240d565b6001600160a01b0381166111d35750565b5f6111e6826001600160a01b0316612441565b90506111f282826124bd565b5050565b606060405180602082528360208301526040820191508360051b8201855b803554845260209384019301818410156111b357611214565b5f815c5f5260205ff35b5f546001600160a01b0316331461127f5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610985565b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f5f80516020614f018339815191525c6112ed576112ed6354e3ca0d60e01b6115b3565b6112f56117d7565b83602001515f036113105761131063be8b850760e01b6115b3565b60a085205f81815260066020526040902061132a81611819565b60808701515f908190819061134b906001600160a01b03168b8b8b8b6124fd565b8093508195508294505050506113ba84866040518060a001604052808e6060015160020b81526020018d5f0151151581526020018681526020018d604001516001600160a01b031681526020018562ffffff168152508c5f01516113b3578d60200151612619565b8d51612619565b60808b01519096505f92506113de91506001600160a01b03168a8a888b8b88612707565b909550905080156113f8576113f889828b6080015161196d565b61140389863361196d565b50505050949350505050565b5f80516020614f018339815191525c611432576114326354e3ca0d60e01b6115b3565b81611440816110ec846115bb565b610881846001600160a01b0383168461282a565b5f336001600160a01b0386161480159061149157506001600160a01b0385165f90815260036020908152604080832033845290915290205460ff16155b15611501576001600160a01b0385165f90815260056020908152604080832033845282528083208684529091529020545f1981146114ff576114d38382614a1a565b6001600160a01b0387165f90815260056020908152604080832033845282528083208884529091529020555b505b6001600160a01b0385165f90815260046020908152604080832086845290915281208054849290611533908490614a1a565b90915550506001600160a01b0384165f9081526004602090815260408083208684529091528120805484929061156a908490614a2d565b9091555050604080513381526020810184905284916001600160a01b0380881692908916915f80516020614ee1833981519152910160405180910390a45060015b949350505050565b805f5260045ffd5b5f6001607f1b82106115d7576115d76393dafdf160e01b6115b3565b5090565b81600f0b5f036115ea57505050565b5f806116006001600160a01b03861684866128e8565b91509150805f0361161857611613612921565b611627565b815f0361162757611627612949565b5050505050565b5f6001600160a01b038416611661575f805f8085875af190508061165c5761165c6356cdd02560e11b612971565b610881565b60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f6040820152508061088157610881632745a14f60e21b612971565b5f5f80516020614ec18339815191525c6001600160a01b0381166116e85734915061174c565b34156116fe576116fe6319d245cf60e01b6115b3565b7f1e0745a7db1623981f0b2a5d4232364c00787266eb75ad546f190e6cebe9bd955c5f6117336001600160a01b038416612441565b905061173f8282614a1a565b935061174961299e565b50505b61175f81611759846115bb565b856115db565b50919050565b6001600160a01b0383165f90815260046020908152604080832085845290915281208054839290611797908490614a2d565b9091555050604080513381526020810183905283916001600160a01b038616915f915f80516020614ee183398151915291015b60405180910390a4505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611817576118176306c4a1c760e11b6115b3565b565b80546001600160a01b03165f0361183a5761183a63486aa30760e01b6115b3565b50565b85336001600160a01b038216146118b15760208716156118b1576118af33878787878760405160240161187596959493929190614b74565b60408051601f198184030181529190526020810180516001600160e01b0316635b54587d60e11b1790526001600160a01b038916906129b0565b505b50505050505050565b60038301545f906001600160801b03168082036118e1576118e163a74f97ab60e01b6115b3565b61190f6118ed856115bb565b5f036118f8856115bb565b5f0360809190911b6001600160801b039091161790565b9150831561193b5761192f84600160801b836001600160801b0316612a40565b60018601805490910190555b82156119655761195983600160801b836001600160801b0316612a40565b60028601805490910190555b509392505050565b82516119839061197d8460801d90565b836115db565b610805836020015161197d84600f0b90565b85336001600160a01b038216146118b15760108716156118b1576118af3387878787876040516024016119cd96959493929190614b74565b60408051601f198184030181529190526020810180516001600160e01b031663e1b4af6960e01b1790526001600160a01b038916906129b0565b60015f80516020614f018339815191525d565b5f5f80516020614f018339815191525d565b620f424062ffffff8216111561183a5761183a631400211360e01b62ffffff8316612149565b611a5b82611819565b8154611a679082612adc565b90915550565b84336001600160a01b03821614611b67575f8460400151138015611a945750610800861615155b15611af557611aef3386868686604051602401611ab5959493929190614bbe565b60408051601f198184030181529190526020810180516001600160e01b031663259982e560e01b1790526001600160a01b038816906129b0565b50611b67565b5f846040015113158015611b0c5750610200861615155b15611b67576118b13386868686604051602401611b2d959493929190614bbe565b60408051601f198184030181529190526020810180516001600160e01b031663021d0ee760e41b1790526001600160a01b038816906129b0565b505050505050565b80600f81900b8114610a4157610a416393dafdf160e01b6115b3565b6060810151602082015160408301515f9283929091611baa8282612af7565b604080516080810182525f80825260208201819052918101829052606081019190915283600f0b5f14611cef57611be38884865f612b57565b6001600160801b0316602083015215158152611c028883866001612b57565b6001600160801b03166060830152151560408201525f600f85900b12611cb4575f611c52886080015160020b620d89e7198190058102620d89e8829005820203056001016001600160801b030490565b9050806001600160801b031682602001516001600160801b03161115611c8357611c8363b8e3c38560e01b85612057565b806001600160801b031682606001516001600160801b03161115611cb257611cb263b8e3c38560e01b84612057565b505b805115611cd0576080870151611cd09060058a01908590612c11565b806040015115611cef576080870151611cef9060058a01908490612c11565b5f80611cfc8a8686612c63565b8a5160a08c015160408051602681019290925260068083018a9052600383018b9052928252603a600c8301205f838301819052602080850182905293819052908152928f01909152812092945090925080611d59838a8787612d17565b91509150611d85611d69836115bb565b611d72836115bb565b6001600160801b031660809190911b1790565b995050505050505f84600f0b1215611dee57805115611dc157600283810b5f90815260048a016020526040812081815560018101829055909101555b806040015115611dee57600282810b5f90815260048a016020526040812081815560018101829055909101555b5082600f0b5f14611efb5786545f80611e0a8360a01c60020b90565b6001600160a01b038416915091508460020b8260020b1215611e5957611e52611e4c611e47611e3888612dd0565b611e4188612dd0565b8a613088565b611b6f565b60801b90565b9750611ef7565b8360020b8260020b1215611ed257611e90611e7a611e4783611e4188612dd0565b611d72611e47611e8989612dd0565b858b6130c0565b60038b0154909850611eab906001600160801b0316876130ec565b60038b0180546001600160801b0319166001600160801b0392909216919091179055611ef7565b611ef45f611d72611e47611ee589612dd0565b611eee89612dd0565b8b6130c0565b97505b5050505b5050509250929050565b5f608082811d9084901d01600f83810b9085900b01611f2f611f2683611b6f565b611d7283611b6f565b95945050505050565b5f806001600160a01b0388163303611f5457508390505f61204c565b8491505f86604001511315611fe057610400881615611fdb57611fcc338888888888604051602401611f8b96959493929190614c1e565b60408051601f198184030181529190526020810180516001600160e01b0316625a2a8160e81b17905260028a1615155b6001600160a01b038b169190613113565b9050611fd88282613154565b91505b61204c565b61010088161561204c5761203d33888888888860405160240161200896959493929190614c1e565b60408051601f198184030181529190526020810180516001600160e01b03166346d95b2960e11b17905260018a161515611fbb565b90506120498282613154565b91505b965096945050505050565b815f528060020b60045260245ffd5b825f526001600160a01b0382166004526001600160a01b03811660245260445ffd5b5f6080831615801561209c57506008831615155b156120a857505f61070c565b604083161580156120bb57506004831615155b156120c757505f61070c565b61040083161580156120db57506002831615155b156120e757505f61070c565b61010083161580156120fb57506001831615155b1561210757505f61070c565b6001600160a01b0383161561213857613fff831615158061213357506280000062ffffff8316146107b2565b6107b2565b5062ffffff16628000001415919050565b815f526001600160a01b03811660045260245ffd5b5f6280000062ffffff83160361217557505f919050565b6115d78262ffffff16611a2c565b84336001600160a01b03821614611b6757612000861615611b67576118b133868686866040516024016121ba959493929190614c85565b60408051601f198184030181529190526020810180516001600160e01b03166301a206c160e51b1790526001600160a01b038816906129b0565b6002545f9081906001600160a01b031615612321577f00000000000000000000000000000000000000000000000000000000000000005a101561224157612241630f724b8160e11b6115b3565b6002546040517f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316905f90612283908790602401614cc6565b60408051601f198184030181529190526020810180516001600160e01b031663553bfc3760e01b17815281519192505f918291829190828789f13d60201416955085156122da576040513d5f823e805191505f8152505b8580156122eb57508062ffffff1681145b801561230857506103e9610fff821610623e900062fff000831610165b612313575f80612317565b6001815b9096509450505050505b915091565b83545f906001600160a01b03161561234857612348637983c05160e01b6115b3565b61235184613175565b905061237a826123748561236e6001600160a01b03891686613460565b9061347b565b90612adc565b909455509192915050565b85336001600160a01b038216146118b1576110008716156118b1576118af3387878787876040516024016123be96959493929190614cd4565b60408051601f198184030181529190526020810180516001600160e01b031663a910f80f60e01b1790526001600160a01b038916906129b0565b61240182611819565b8154611a67908261347b565b61242d5f80516020614ec18339815191525c6001600160a01b0316613496565b6118175761181763996caf6560e01b6115b3565b5f6001600160a01b038216612457575047919050565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015612499573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061070c9190614d1d565b6001600160a01b0382165f80516020614ec18339815191525d807f1e0745a7db1623981f0b2a5d4232364c00787266eb75ad546f190e6cebe9bd955d5050565b60208301515f806001600160a01b038816330361251c575f915061260e565b608088161561260e575f61257289338a8a8a8a604051602401612543959493929190614d34565b60408051601f198184030181529190526020810180516001600160e01b03166315d7892d60e21b1790526129b0565b9050805160601461258d5761258d631e048e1d60e01b6115b3565b604088015162ffffff1662800000036125a857606081015191505b600889161561260c57604081015192505f6125c38460801d90565b905080600f0b5f1461260a575f85126125e0600f83900b87614d8d565b9550806125ef575f86126125f3565b5f86135b1561260857612608637d05b8eb60e11b6115b3565b505b505b505b955095509592505050565b5f8080808061262889886134a7565b93509350935093505f831115612656576001600160a01b0386165f9081526001602052604090208054840190555b33887f40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112f6126838760801d90565b61268d88600f0b90565b60408087015160a0880151606089015192516126f2959493908b90600f96870b81529490950b60208501526001600160a01b039290921660408401526001600160801b0316606083015260020b608082015262ffffff9190911660a082015260c00190565b60405180910390a35091979650505050505050565b5f806001600160a01b038916330361272357508490505f61281e565b5f61272e8460801d90565b90505f61273b85600f0b90565b905060408b16156127b5576127a8611e47338c8c8c8c8c60405160240161276796959493929190614db4565b60408051601f198184030181529190526020810180516001600160e01b031663b47b2fb160e01b17905260048e1615156001600160a01b038f169190613113565b6127b29082614e14565b90505b5f81600f0b5f1415806127cb575082600f0b5f14155b1561281657895160208b01515f13901515146127f6576001600160801b038316608083901b17612807565b6001600160801b038216608084901b175b90506128138982613154565b98505b889450925050505b97509795505050505050565b336001600160a01b038416811480159061286957506001600160a01b038085165f9081526003602090815260408083209385168352929052205460ff16155b156128dd576001600160a01b038085165f9081526005602090815260408083209385168352928152828220868352905220545f1981146128db576128ad8382614a1a565b6001600160a01b038087165f9081526005602090815260408083209387168352928152828220888352905220555b505b610881848484613b54565b6001600160a01b038281165f90815290841660205260408120805c9190612913600f85900b84614d8d565b915081815d50935093915050565b5f80516020614f218339815191525c600181039050805f80516020614f218339815191525d50565b5f80516020614f218339815191525c600181019050805f80516020614f218339815191525d50565b3d60405182815260206004820152816024820152815f604483013e602080601f8401040260440191508181fd5b5f5f80516020614ec18339815191525d565b60605f805f8451602086015f885af19050806129d6576129d663fb6a608160e01b612971565b6040519150601f19603f3d011682016040523d82523d5f602084013e602082511080612a24575060208301516001600160e01b031916612a17836020015190565b6001600160e01b03191614155b15612a3957612a39631e048e1d60e01b6115b3565b5092915050565b5f838302815f1985870982811083820303915050808411612a5f575f80fd5b805f03612a71575082900490506107b2565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b60d01b62ffffff60d01b1662ffffff60d01b19919091161790565b8060020b8260020b12612b1657612b1663c4433ed560e01b8383613bbd565b620d89e719600283900b1215612b3757612b3763d5e2f7ab60e01b83612057565b620d89e8600282900b13156111f2576111f263035aeeff60e31b82612057565b600283900b5f908152600485016020526040812080548291906001600160801b0381169060801d612b8882886130ec565b6001600160801b03808216159084168015919091141596509094505f03612bd257885460a01c60020b60020b8860020b13612bd2576001808a0154908401556002808a0154908401555b5f86612be757612be28883614e14565b612bf1565b612bf18883614e41565b90508060801b6001600160801b0386161784555050505094509492505050565b600291820b910b80820715612c3e5760405163d4d8f3e681528260208201528160408201526044601c8201fd5b80820591508160081d5f528260205260405f20600160ff84161b815418815550505050565b600282810b5f81815260048601602052604080822085850b83529082208754929485949293919260a09290921c900b90811215612cb9578160010154836001015403945081600201548360020154039350612d0c565b8560020b8160020b12612ce5578260010154826001015403945082600201548260020154039350612d0c565b81600101548360010154896001015403039450816002015483600201548960020154030393505b505050935093915050565b83545f9081906001600160801b0316600f86900b8203612d5657806001600160801b03165f03612d5157612d51632bbfae4960e21b6115b3565b612d7c565b612d6081876130ec565b87546001600160801b0319166001600160801b03919091161787555b612d9a87600101548603826001600160801b0316600160801b612a40565b9250612dba87600201548503826001600160801b0316600160801b612a40565b6001880195909555505060029094015591929050565b60020b5f60ff82901d80830118620d89e8811115612df957612df96345c3193d60e11b84612057565b7001fffcb933bd6fad37aa2d162d1a5940016001821602600160801b186002821615612e35576ffff97272373d413259a46990580e213a0260801c5b6004821615612e54576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612e73576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612e92576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612eb1576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612ed0576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612eef576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612f0f576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612f2f576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612f4f576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612f6f576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612f8f576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612faf576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612fcf576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612fef576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615613010576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615613030576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561304f576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561306c576b048a170391f7dc42444e8fa20260801c5b5f841315613078575f19045b63ffffffff0160201c9392505050565b5f8082600f0b126130af576130a86130a38585856001613bda565b613c9d565b5f036115ab565b6115ab6130a38585855f035f613bda565b5f8082600f0b126130db576130a86130a38585856001613cb6565b6115ab6130a38585855f035f613cb6565b6001600160801b038216600f82900b01608081901c1561070c576393dafdf15f526004601cfd5b5f8061311f85856129b0565b90508261312f575f9150506107b2565b805160401461314857613148631e048e1d60e01b6115b3565b60400151949350505050565b5f608082811d9084901d03600f83810b9085900b03611f2f611f2683611b6f565b5f73fffd8963efd1fc6a506488495d951d51639616826401000276a21983016001600160a01b031611156131b4576131b46318521d4960e21b83612149565b640100000000600160c01b03602083901b166001600160801b03811160071b81811c6001600160401b03811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c9790881196179094179092171790911717176080811061324757607f810383901c9150613251565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b1461345157886001600160a01b031661343682612dd0565b6001600160a01b0316111561344b5781613453565b80613453565b815b9998505050505050505050565b60a01b62ffffff60a01b1662ffffff60a01b19919091161790565b60b81b62ffffff60b81b1662ffffff60b81b19919091161790565b5f6001600160a01b0382161561070c565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a08101829052819081908554602086015160038801546001600160801b03165f8261350457610fff60c485901c1661350e565b610fff60b885901c165b60408a81015187525f60208801526001600160a01b0386169087015260a085901c60020b606087015261ffff1690508261354c578960020154613552565b89600101545b6080868101919091526001600160801b03831660a08701528901515f9062400000166135875760d085901c62ffffff16613599565b6135998a6080015162ffffff16613d02565b905081156135c757620f424062ffffff821661ffff84168181028381061515939004929092019101036135c9565b805b60408b01519097505f13905062ffffff8716620f42401480156135ea575080155b156135ff576135ff634b10312360e11b6115b3565b89604001515f0361361a575f80985098505050505050613b4b565b83156136985760608a01516001600160a01b03868116911610613659576136596001600160a01b0386165b60608c0151637c9c6e8f60e01b9190613d11565b6401000276a36001600160a01b03168a606001516001600160a01b031610156136935760608a015161369390639e4d7cc760e01b90612149565b613709565b60608a01516001600160a01b038681169116116136c1576136c16001600160a01b038616613645565b73fffd8963efd1fc6a506488495d951d5263988d266001600160a01b03168a606001516001600160a01b0316106137095760608a015161370990639e4d7cc760e01b90612149565b6040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091525b8651158061376957508a606001516001600160a01b031687604001516001600160a01b0316145b613a545760408701516001600160a01b0316815260608701518b516137939160058f019188613d3a565b1515604083015260020b60208201819052620d89e719126137b957620d89e71960208201525b620d89e860020b816020015160020b126137d757620d89e860208201525b6137e48160200151612dd0565b6001600160a01b03908116606083810182905260408a0151908e0151613825939192911680821891811160ff8a1618919091021860a08a01518a518c613e23565b60c085015260a084015260808301526001600160a01b0316604088015281613889576138548160a00151613c9d565b875103875260c08101516080820151613870916130a391614a2d565b876020018181516138819190614e6e565b9052506138c4565b61389c8160c00151826080015101613c9d565b875101875260a08101516138af90613c9d565b876020018181516138c09190614d8d565b9052505b8215613900575f620f4240848360c0015184608001510102816138e9576138e9614e8d565b60c084018051929091049182900390529990990198505b60a08701516001600160801b03161561393f576139338160c00151600160801b8960a001516001600160801b0316612a40565b60808801805190910190525b80606001516001600160a01b031687604001516001600160a01b031603613a1957806040015115613a01575f8086613980578d60010154896080015161398b565b88608001518e600201545b915091505f6139d68f85602001518585600292830b5f90815260049094016020526040909320600181018054909203909155908101805490920390915554600160801b9004600f0b90565b905087156139e1575f035b6139ef8a60a00151826130ec565b6001600160801b031660a08b01525050505b602081015160ff8616900360020b6060880152613742565b805f01516001600160a01b031687604001516001600160a01b031614613a4f57613a468760400151613175565b60020b60608801525b613742565b613a8c8760400151613a7389606001518961346090919063ffffffff16565b6001600160a01b0319166001600160a01b039091161790565b8c5560a08701516001600160801b03858116911614613acc5760a087015160038d0180546001600160801b0319166001600160801b039092169190911790555b84613ae057608087015160028d0155613aeb565b608087015160018d01555b81151585151514613b1f57613b18613b068860200151611b6f565b611d72895f01518e6040015103611b6f565b9950613b44565b613b41613b34885f01518d6040015103611b6f565b611d728960200151611b6f565b99505b5050505050505b92959194509250565b6001600160a01b0383165f90815260046020908152604080832085845290915281208054839290613b86908490614a1a565b9091555050604080513381526020810183905283915f916001600160a01b038716915f80516020614ee183398151915291016117ca565b6040518381528260020b60048201528160020b6024820152604481fd5b5f836001600160a01b0316856001600160a01b03161115613bf9579293925b6001600160a01b038516613c135762bfc9215f526004601cfd5b600160601b600160e01b03606084901b166001600160a01b038686031683613c6657866001600160a01b0316613c538383896001600160a01b0316612a40565b81613c6057613c60614e8d565b04613c92565b613c92613c7d8383896001600160a01b0316613fa9565b886001600160a01b0316808204910615150190565b979650505050505050565b805f811215610a4157610a416393dafdf160e01b6115b3565b5f6001600160a01b038481169086160360ff81901d90810118600160601b6001600160801b038516613ce9818484612a40565b9350845f83858409111684019350505050949350505050565b62bfffff8116610a4181611a2c565b6040518381526001600160a01b03831660048201526001600160a01b0382166024820152604481fd5b5f80600284810b9086900b8181078313919005038315613db557600281900b60081d600181810b5f90815260208a905260409020545f1960ff85168381019390931b01908116801515955085613d9757888360ff16860302613daa565b88613da182613fd9565b840360ff168603025b965050505050613e19565b6001908101600281900b60081d80830b5f90815260208a905260409020545f1960ff841694851b011990811680151595509293919285613dff57888360ff0360ff16860102613e12565b8883613e0a83614069565b0360ff168601025b9650505050505b5094509492505050565b5f80808062ffffff85166001600160a01b03808a16908b1610158288128015613f1c575f613e5c8a5f0385620f424003620f4240612a40565b905082613e7557613e708d8d8d6001613cb6565b613e82565b613e828c8e8d6001613bda565b9650868110613eb6578b9750620f42408414613ead57613ea8878586620f424003613fa9565b613eaf565b865b9450613ef2565b613ec28d8c8386614104565b975082613edb57613ed68d898d6001613cb6565b613ee8565b613ee8888e8d6001613bda565b9650868a5f030394505b82613f0857613f038d898d5f613bda565b613f14565b613f14888e8d5f613cb6565b955050613f9a565b81613f3257613f2d8c8c8c5f613bda565b613f3e565b613f3e8b8d8c5f613cb6565b9450848910613f4f578a9650613f61565b889450613f5e8c8b8785614152565b96505b81613f7857613f738c888c6001613cb6565b613f85565b613f85878d8c6001613bda565b9550613f97868485620f424003613fa9565b93505b50505095509550955095915050565b5f613fb5848484612a40565b90508180613fc557613fc5614e8d565b838509156107b257600101806107b2575f80fd5b5f808211613fe5575f80fd5b507f0706060506020504060203020504030106050205030304010505030400000000601f6f8421084210842108cc6318c6db6d54be831560081b6001600160801b03851160071b1784811c6001600160401b031060061b1784811c63ffffffff1060051b1784811c61ffff1060041b1784811c60ff1060031b1793841c1c161a1790565b5f808211614075575f80fd5b507e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b150316040581196001019091166101e07f804040554300526644320000502061067405302602000010750620017611707760fc7fb6db6db6ddddddddd34d34d349249249210842108c6318c639ce739cffffffff840260f81c161b60f71c1690811c63d76453e004601f169190911a1790565b5f6001600160801b038416156001600160a01b03861615171561412e57634f2461b85f526004601cfd5b81614145576141408585856001614195565b611f2f565b611f2f8585856001614280565b5f6001600160801b038416156001600160a01b03861615171561417c57634f2461b85f526004601cfd5b8161418d576141408585855f614280565b611f2f8585855f5b5f8115614205575f6001600160a01b038411156141c9576141c484600160601b876001600160801b0316612a40565b6141e0565b6141e06001600160801b038616606086901b614ea1565b90506141fd6141f8826001600160a01b038916614a2d565b614362565b9150506115ab565b5f6001600160a01b038411156142325761422d84600160601b876001600160801b0316613fa9565b61424f565b61424f606085901b6001600160801b038716808204910615150190565b9050806001600160a01b0387161161426e57634323a5555f526004601cfd5b6001600160a01b0386160390506115ab565b5f825f0361428f5750836115ab565b600160601b600160e01b03606085901b168215614321576001600160a01b038616848102908582816142c3576142c3614e8d565b04036142f3578181018281106142f1576142e783896001600160a01b031683613fa9565b93505050506115ab565b505b506141fd818561430c6001600160a01b038a1683614ea1565b6143169190614a2d565b808204910615150190565b6001600160a01b0386168481029085820414818311166143485763f5c787f15f526004601cfd5b8082036142e76141f8846001600160a01b038b1684613fa9565b806001600160a01b0381168114610a4157610a416393dafdf160e01b6115b3565b6001600160a01b038116811461183a575f80fd5b5f80604083850312156143a8575f80fd5b82356143b381614383565b946020939093013593505050565b5f602082840312156143d1575f80fd5b81356001600160e01b0319811681146107b2575f80fd5b5f805f606084860312156143fa575f80fd5b833561440581614383565b95602085013595506040909401359392505050565b5f805f6060848603121561442c575f80fd5b833561443781614383565b9250602084013561444781614383565b929592945050506040919091013590565b5f60208284031215614468575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156144a5576144a561446f565b60405290565b604051601f8201601f191681016001600160401b03811182821017156144d3576144d361446f565b604052919050565b803562ffffff81168114610a41575f80fd5b8035600281900b8114610a41575f80fd5b5f60a0828403121561450e575f80fd5b60405160a081016001600160401b03811182821017156145305761453061446f565b604052905080823561454181614383565b8152602083013561455181614383565b6020820152614562604084016144db565b6040820152614573606084016144ed565b6060820152608083013561458681614383565b6080919091015292915050565b5f8083601f8401126145a3575f80fd5b5081356001600160401b038111156145b9575f80fd5b6020830191508360208285010111156145d0575f80fd5b9250929050565b5f805f805f61010086880312156145ec575f80fd5b6145f687876144fe565b945060a0860135935060c0860135925060e08601356001600160401b0381111561461e575f80fd5b61462a88828901614593565b969995985093965092949392505050565b5f6020828403121561464b575f80fd5b81356107b281614383565b5f8060408385031215614667575f80fd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b818110156146ad57835183526020938401939092019160010161468f565b509095945050505050565b5f80602083850312156146c9575f80fd5b82356001600160401b038111156146de575f80fd5b6146ea85828601614593565b90969095509350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060c0838503121561473c575f80fd5b61474684846144fe565b915061475460a084016144db565b90509250929050565b80358015158114610a41575f80fd5b5f806040838503121561477d575f80fd5b823561478881614383565b91506147546020840161475d565b5f805f808486036101408112156147ab575f80fd5b6147b587876144fe565b94506080609f19820112156147c8575f80fd5b506147d1614483565b6147dd60a087016144ed565b81526147eb60c087016144ed565b602082015260e08601356040820152610100860135606082015292506101208501356001600160401b03811115614820575f80fd5b61482c87828801614593565b95989497509550505050565b5f805f8060e0858703121561484b575f80fd5b61485586866144fe565b935060a085013561486581614383565b925060c08501356001600160401b03811115614820575f80fd5b5f8060208385031215614890575f80fd5b82356001600160401b038111156148a5575f80fd5b8301601f810185136148b5575f80fd5b80356001600160401b038111156148ca575f80fd5b8560208260051b84010111156148de575f80fd5b6020919091019590945092505050565b5f80604083850312156148ff575f80fd5b823561490a81614383565b9150602083013561491a81614383565b809150509250929050565b5f805f8084860361012081121561493a575f80fd5b61494487876144fe565b94506060609f1982011215614957575f80fd5b50604051606081016001600160401b038111828210171561497a5761497a61446f565b60405261498960a0870161475d565b815260c0860135602082015260e08601356149a381614383565b604082015292506101008501356001600160401b03811115614820575f80fd5b5f805f80608085870312156149d6575f80fd5b84356149e181614383565b935060208501356149f181614383565b93969395505050506040820135916060013590565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561070c5761070c614a06565b8082018082111561070c5761070c614a06565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f6115ab602083018486614a40565b5f60208284031215614a8b575f80fd5b81516001600160401b03811115614aa0575f80fd5b8201601f81018413614ab0575f80fd5b80516001600160401b03811115614ac957614ac961446f565b614adc601f8201601f19166020016144ab565b818152856020838501011115614af0575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f81600f0b60016001607f1b03198103614b2957614b29614a06565b5f0392915050565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b6001600160a01b0387168152614b8d6020820187614b31565b8460c08201528360e08201526101206101008201525f614bb261012083018486614a40565b98975050505050505050565b6001600160a01b0386168152614bd76020820186614b31565b8351600290810b60c08301526020850151900b60e0820152604084015161010082015260608401516101208201526101606101408201525f613c9261016083018486614a40565b6001600160a01b0387168152614c376020820187614b31565b8451600290810b60c08301526020860151900b60e082015260408501516101008201526060850151610120820152836101408201526101806101608201525f614bb261018083018486614a40565b6001600160a01b0386168152614c9e6020820186614b31565b6001600160a01b03841660c082015261010060e082018190525f90613c929083018486614a40565b60a0810161070c8284614b31565b6001600160a01b0387168152614ced6020820187614b31565b60018060a01b03851660c08201528360020b60e08201526101206101008201525f614bb261012083018486614a40565b5f60208284031215614d2d575f80fd5b5051919050565b6001600160a01b0386168152614d4d6020820186614b31565b8351151560c0820152602084015160e082015260408401516001600160a01b03166101008201526101406101208201525f613c9261014083018486614a40565b8082018281125f831280158216821582161715614dac57614dac614a06565b505092915050565b6001600160a01b0387168152614dcd6020820187614b31565b8451151560c0820152602085015160e082015260408501516001600160a01b0316610100820152836101208201526101606101408201525f614bb261016083018486614a40565b600f81810b9083900b0160016001607f1b03811360016001607f1b03198212171561070c5761070c614a06565b600f82810b9082900b0360016001607f1b0319811260016001607f1b038213171561070c5761070c614a06565b8181035f831280158383131683831282161715612a3957612a39614a06565b634e487b7160e01b5f52601260045260245ffd5b5f82614ebb57634e487b7160e01b5f52601260045260245ffd5b50049056fe27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b91b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac728859c090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab237d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0ba2646970667358221220c720af38850bace8901ec0c414e9cc6b7600fdc66c58c62bb119ab202e9502fe64736f6c634300081a003360a0604052348015600e575f80fd5b506040516116ad3803806116ad833981016040819052602b91603b565b6001600160a01b03166080526066565b5f60208284031215604a575f80fd5b81516001600160a01b0381168114605f575f80fd5b9392505050565b6080516115e46100c95f395f818160790152818160f50152818161022d01528181610294015281816102c501528181610390015281816104fa01528181610550015281816105bf015281816106100152818161077a01526107ad01526115e45ff3fe60806040526004361061003e575f3560e01c80630a5b11e414610042578063481c6a75146100685780635a6bcfda146100b357806391dd7346146100c6575b5f80fd5b610055610050366004611035565b6100f2565b6040519081526020015b60405180910390f35b348015610073575f80fd5b5061009b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161005f565b6100556100c13660046110bb565b61020a565b3480156100d1575f80fd5b506100e56100e0366004611118565b610220565b60405161005f91906111b2565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348c894916040518060c00160405280336001600160a01b03168152602001898152602001888152602001878152602001861515815260200185151581525060405160200161016c919061120e565b6040516020818303038152906040526040518263ffffffff1660e01b815260040161019791906111b2565b5f604051808303815f875af11580156101b2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526101d991908101906112aa565b8060200190518101906101ec919061131e565b9050478015610200576102005f3383610662565b5095945050505050565b5f6102188484845f806100f2565b949350505050565b6060336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610256575f80fd5b5f61026383850185611335565b90505f6102be610278836020015160a0902090565b6040840151805160208201516060909201516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693923092916106fc565b505090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635a6bcfda8460200151856040015186606001516040518463ffffffff1660e01b815260040161031f939291906113fc565b60408051808303815f875af115801561033a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061035e919061144b565b5090505f6103ba610374856020015160a0902090565b6040860151805160208201516060909201516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693923092916106fc565b505090505f6103d485602001515f0151865f015130610753565b925050505f6103ef866020015160200151875f015130610753565b9250505082600f0b86604001516040015186600f0b61040e9190611481565b1461045f5760405162461bcd60e51b815260206004820152601a60248201527f6c6971756964697479206368616e676520696e636f7272656374000000000000604482015260640160405180910390fd5b5f86604001516040015112156104a7575f82138061047c57505f81135b610488576104886114a8565b5f82128061049557505f81125b156104a2576104a26114a8565b6104ea565b5f86604001516040015113156104ea575f8212806104c457505f81125b6104d0576104d06114a8565b5f8213806104dd57505f81135b156104ea576104ea6114a8565b5f821215610540578551610540907f000000000000000000000000000000000000000000000000000000000000000090610523856114bc565b60808a015160208b0151516001600160a01b0316939291906107df565b5f811215610598578551610598907f000000000000000000000000000000000000000000000000000000000000000090610579846114bc565b60808a01516020808c015101516001600160a01b0316939291906107df565b5f8213156105e757855160a08701516020880151516105e7926001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000091908690610aab565b5f81131561063857855160a08701516020808901510151610638926001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000091908590610aab565b60408051602081018690520160405160208183030381529060405296505050505050505b92915050565b5f6001600160a01b038416610695575f805f8085875af1905080610690576106906356cdd02560e11b610b7d565b6106f6565b60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f604082015250806106f6576106f6632745a14f60e21b610b7d565b50505050565b60408051602681018390526006810184905260038101859052858152603a600c8201205f9282018390526020820183905290829052819081906107408a8a83610baa565b919c909b50909950975050505050505050565b5f80806107696001600160a01b03871686610c4d565b925061079e6001600160a01b0387167f0000000000000000000000000000000000000000000000000000000000000000610c4d565b91506107d46001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168588610cdc565b905093509350939050565b801561087457836001600160a01b031663f5298aca8461080e886001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015b5f604051808303815f87803b158015610859575f80fd5b505af115801561086b573d5f803e3d5ffd5b50505050610aa4565b6001600160a01b0385166108eb57836001600160a01b03166311da60b4836040518263ffffffff1660e01b815260040160206040518083038185885af11580156108c0573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906108e5919061131e565b50610aa4565b604051632961046560e21b81526001600160a01b03868116600483015285169063a5841194906024015f604051808303815f87803b15801561092b575f80fd5b505af115801561093d573d5f803e3d5ffd5b505050506001600160a01b03831630146109cf576040516323b872dd60e01b81526001600160a01b0384811660048301528581166024830152604482018490528616906323b872dd906064016020604051808303815f875af11580156109a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c991906114d6565b50610a41565b60405163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905286169063a9059cbb906044016020604051808303815f875af1158015610a1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3f91906114d6565b505b836001600160a01b03166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610a7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa2919061131e565b505b5050505050565b80610aed57604051630b0d9c0960e01b81526001600160a01b038681166004830152848116602483015260448201849052851690630b0d9c0990606401610842565b836001600160a01b031663156e29f684610b16886001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015f604051808303815f87803b158015610b60575f80fd5b505af1158015610b72573d5f803e3d5ffd5b505050505050505050565b3d60405182815260206004820152816024820152815f604483013e602080601f8401040260440191508181fd5b5f805f80610bb88686610d73565b604051631afeb18d60e11b815260048101829052600360248201529091505f906001600160a01b038916906335fd631a906044015f60405180830381865afa158015610c06573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c2d91908101906114f1565b60208101516040820151606090920151909a919950975095505050505050565b5f6001600160a01b038316610c6d57506001600160a01b0381163161065c565b6040516370a0823160e01b81526001600160a01b0383811660048301528416906370a0823190602401602060405180830381865afa158015610cb1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd5919061131e565b905061065c565b5f806001600160a01b0384165f526001600160a01b03831660205260405f209050846001600160a01b031663f135baaa826040518263ffffffff1660e01b8152600401610d2b91815260200190565b602060405180830381865afa158015610d46573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d6a919061131e565b95945050505050565b5f80610d7e84610dc3565b90505f610d8c60068361159b565b6040805160208101879052908101829052909150606001604051602081830303815290604052805190602001209250505092915050565b6040515f90610de2908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b0381118282101715610e3557610e35610dff565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610e6357610e63610dff565b604052919050565b6001600160a01b0381168114610e7f575f80fd5b50565b8035600281900b8114610e93575f80fd5b919050565b5f60a08284031215610ea8575f80fd5b60405160a081016001600160401b0381118282101715610eca57610eca610dff565b6040529050808235610edb81610e6b565b81526020830135610eeb81610e6b565b6020820152604083013562ffffff81168114610f05575f80fd5b6040820152610f1660608401610e82565b60608201526080830135610f2981610e6b565b6080919091015292915050565b5f60808284031215610f46575f80fd5b604051608081016001600160401b0381118282101715610f6857610f68610dff565b604052905080610f7783610e82565b8152610f8560208401610e82565b602082015260408301356040820152606083013560608201525092915050565b5f6001600160401b03821115610fbd57610fbd610dff565b50601f01601f191660200190565b5f82601f830112610fda575f80fd5b8135610fed610fe882610fa5565b610e3b565b818152846020838601011115611001575f80fd5b816020850160208301375f918101602001919091529392505050565b8015158114610e7f575f80fd5b8035610e938161101d565b5f805f805f610180868803121561104a575f80fd5b6110548787610e98565b94506110638760a08801610f36565b93506101208601356001600160401b0381111561107e575f80fd5b61108a88828901610fcb565b93505061014086013561109c8161101d565b91506101608601356110ad8161101d565b809150509295509295909350565b5f805f61014084860312156110ce575f80fd5b6110d88585610e98565b92506110e78560a08601610f36565b91506101208401356001600160401b03811115611102575f80fd5b61110e86828701610fcb565b9150509250925092565b5f8060208385031215611129575f80fd5b82356001600160401b0381111561113e575f80fd5b8301601f8101851361114e575f80fd5b80356001600160401b03811115611163575f80fd5b856020828401011115611174575f80fd5b6020919091019590945092505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111c46020830184611184565b9392505050565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b602080825282516001600160a01b0316828201528201515f9061123460408401826111cb565b506040838101518051600290810b60e08601526020820151900b610100850152908101516101208401526060908101516101408401528301516101a06101608401526112846101c0840182611184565b90506080840151151561018084015260a084015115156101a08401528091505092915050565b5f602082840312156112ba575f80fd5b81516001600160401b038111156112cf575f80fd5b8201601f810184136112df575f80fd5b80516112ed610fe882610fa5565b818152856020838501011115611301575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f6020828403121561132e575f80fd5b5051919050565b5f60208284031215611345575f80fd5b81356001600160401b0381111561135a575f80fd5b82016101a0818503121561136c575f80fd5b611374610e13565b813561137f81610e6b565b815261138e8560208401610e98565b60208201526113a08560c08401610f36565b60408201526101408201356001600160401b038111156113be575f80fd5b6113ca86828501610fcb565b6060830152506113dd610160830161102a565b60808201526113ef610180830161102a565b60a0820152949350505050565b61140681856111cb565b8251600290810b60a08301526020840151900b60c0820152604083015160e082015260608301516101008201526101406101208201525f610d6a610140830184611184565b5f806040838503121561145c575f80fd5b505080516020909101519092909150565b634e487b7160e01b5f52601160045260245ffd5b8082018281125f8312801582168215821617156114a0576114a061146d565b505092915050565b634e487b7160e01b5f52600160045260245ffd5b5f600160ff1b82016114d0576114d061146d565b505f0390565b5f602082840312156114e6575f80fd5b81516111c48161101d565b5f60208284031215611501575f80fd5b81516001600160401b03811115611516575f80fd5b8201601f81018413611526575f80fd5b80516001600160401b0381111561153f5761153f610dff565b8060051b61154f60208201610e3b565b9182526020818401810192908101908784111561156a575f80fd5b6020850194505b8385101561159057845180835260209586019590935090910190611571565b979650505050505050565b8082018082111561065c5761065c61146d56fea2646970667358221220022bb587431beddd1b3a2d4e57eee388a80ee14cf23bcb0c201ec0029fc9cb7a64736f6c634300081a003360a0604052348015600e575f80fd5b506040516117d43803806117d4833981016040819052602b91603b565b6001600160a01b03166080526066565b5f60208284031215604a575f80fd5b81516001600160a01b0381168114605f575f80fd5b9392505050565b6080516117196100bb5f395f8181606e0152818160d7015281816101ee0152818161030001528181610888015281816108e10152818161095e015281816109b201528181610ac50152610af801526117195ff3fe608060405260043610610033575f3560e01c80632229d0b414610037578063481c6a751461005d57806391dd7346146100a8575b5f80fd5b61004a610045366004611286565b6100d4565b6040519081526020015b60405180910390f35b348015610068575f80fd5b506100907f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610054565b3480156100b3575f80fd5b506100c76100c23660046112f7565b6101e1565b6040516100549190611393565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348c894916040518060a00160405280336001600160a01b031681526020018681526020018881526020018781526020018581525060405160200161014491906113ef565b6040516020818303038152906040526040518263ffffffff1660e01b815260040161016f9190611393565b5f604051808303815f875af115801561018a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526101b19190810190611480565b8060200190518101906101c491906114f5565b90504780156101d8576101d85f3383610a04565b50949350505050565b6060336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610217575f80fd5b5f6102248385018561150c565b90505f61023c82604001515f0151835f015130610a9e565b925050505f610257836040015160200151845f015130610a9e565b92505050815f146102af5760405162461bcd60e51b815260206004820152601e60248201527f64656c74614265666f726530206973206e6f7420657175616c20746f2030000060448201526064015b60405180910390fd5b80156102fd5760405162461bcd60e51b815260206004820152601e60248201527f64656c74614265666f726531206973206e6f7420657175616c20746f2030000060448201526064016102a6565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f3cd914c8560400151866060015187608001516040518463ffffffff1660e01b815260040161035a939291906115c4565b6020604051808303815f875af1158015610376573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061039a91906114f5565b90505f6103b285604001515f0151865f015130610a9e565b925050505f6103cd866040015160200151875f015130610a9e565b9250505085606001515f01511561062f575f86606001516020015112156105125785606001516020015182121561047c5760405162461bcd60e51b815260206004820152604760248201527f64656c7461416674657230206973206e6f742067726561746572207468616e2060448201527f6f7220657175616c20746f20646174612e706172616d732e616d6f756e7453706064820152661958da599a595960ca1b608482015260a4016102a6565b816104878460801d90565b600f0b146104a75760405162461bcd60e51b81526004016102a69061160c565b5f81121561050d5760405162461bcd60e51b815260206004820152602d60248201527f64656c7461416674657231206973206e6f742067726561746572207468616e2060448201526c06f7220657175616c20746f203609c1b60648201526084016102a6565b610878565b5f8213156105785760405162461bcd60e51b815260206004820152602d60248201527f64656c7461416674657230206973206e6f74206c657373207468616e206f722060448201526c657175616c20746f207a65726f60981b60648201526084016102a6565b8061058384600f0b90565b600f0b146105a35760405162461bcd60e51b81526004016102a690611657565b85606001516020015181131561050d5760405162461bcd60e51b8152602060048201526044602482018190527f64656c7461416674657231206973206e6f74206c657373207468616e206f7220908201527f657175616c20746f20646174612e706172616d732e616d6f756e745370656369606482015263199a595960e21b608482015260a4016102a6565b5f866060015160200151121561075e578560600151602001518112156106cd5760405162461bcd60e51b815260206004820152604760248201527f64656c7461416674657231206973206e6f742067726561746572207468616e2060448201527f6f7220657175616c20746f20646174612e706172616d732e616d6f756e7453706064820152661958da599a595960ca1b608482015260a4016102a6565b806106d884600f0b90565b600f0b146106f85760405162461bcd60e51b81526004016102a690611657565b5f82121561050d5760405162461bcd60e51b815260206004820152602d60248201527f64656c7461416674657230206973206e6f742067726561746572207468616e2060448201526c06f7220657175616c20746f203609c1b60648201526084016102a6565b5f8113156107c15760405162461bcd60e51b815260206004820152602a60248201527f64656c7461416674657231206973206e6f74206c657373207468616e206f72206044820152690657175616c20746f20360b41b60648201526084016102a6565b816107cc8460801d90565b600f0b146107ec5760405162461bcd60e51b81526004016102a69061160c565b8560600151602001518213156108785760405162461bcd60e51b8152602060048201526044602482018190527f64656c7461416674657230206973206e6f74206c657373207468616e206f7220908201527f657175616c20746f20646174612e706172616d732e616d6f756e745370656369606482015263199a595960e21b608482015260a4016102a6565b5f8212156108d15785516108d1907f0000000000000000000000000000000000000000000000000000000000000000906108b1856116a2565b6020808b0151015160408b0151516001600160a01b031693929190610b2a565b5f811215610936578551610936907f00000000000000000000000000000000000000000000000000000000000000009061090a846116a2565b8960200151602001518a60400151602001516001600160a01b0316610b2a90949392919063ffffffff16565b5f821315610986578551602087015151604088015151610986926001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000091908690610df6565b5f8113156109da578551602080880151516040890151909101516109da926001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000091908590610df6565b60408051602081018590520160405160208183030381529060405296505050505050505b92915050565b5f6001600160a01b038416610a37575f805f8085875af1905080610a3257610a326356cdd02560e11b610ec8565b610a98565b60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f60408201525080610a9857610a98632745a14f60e21b610ec8565b50505050565b5f8080610ab46001600160a01b03871686610ef5565b9250610ae96001600160a01b0387167f0000000000000000000000000000000000000000000000000000000000000000610ef5565b9150610b1f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168588610f84565b905093509350939050565b8015610bbf57836001600160a01b031663f5298aca84610b59886001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015b5f604051808303815f87803b158015610ba4575f80fd5b505af1158015610bb6573d5f803e3d5ffd5b50505050610def565b6001600160a01b038516610c3657836001600160a01b03166311da60b4836040518263ffffffff1660e01b815260040160206040518083038185885af1158015610c0b573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610c3091906114f5565b50610def565b604051632961046560e21b81526001600160a01b03868116600483015285169063a5841194906024015f604051808303815f87803b158015610c76575f80fd5b505af1158015610c88573d5f803e3d5ffd5b505050506001600160a01b0383163014610d1a576040516323b872dd60e01b81526001600160a01b0384811660048301528581166024830152604482018490528616906323b872dd906064016020604051808303815f875af1158015610cf0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d1491906116c8565b50610d8c565b60405163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905286169063a9059cbb906044016020604051808303815f875af1158015610d66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8a91906116c8565b505b836001600160a01b03166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610dc9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ded91906114f5565b505b5050505050565b80610e3857604051630b0d9c0960e01b81526001600160a01b038681166004830152848116602483015260448201849052851690630b0d9c0990606401610b8d565b836001600160a01b031663156e29f684610e61886001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015f604051808303815f87803b158015610eab575f80fd5b505af1158015610ebd573d5f803e3d5ffd5b505050505050505050565b3d60405182815260206004820152816024820152815f604483013e602080601f8401040260440191508181fd5b5f6001600160a01b038316610f1557506001600160a01b038116316109fe565b6040516370a0823160e01b81526001600160a01b0383811660048301528416906370a0823190602401602060405180830381865afa158015610f59573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7d91906114f5565b90506109fe565b5f806001600160a01b0384165f526001600160a01b03831660205260405f209050846001600160a01b031663f135baaa826040518263ffffffff1660e01b8152600401610fd391815260200190565b602060405180830381865afa158015610fee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101291906114f5565b95945050505050565b634e487b7160e01b5f52604160045260245ffd5b60405160a0810167ffffffffffffffff811182821017156110525761105261101b565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156110815761108161101b565b604052919050565b6001600160a01b038116811461109d575f80fd5b50565b80356110ab81611089565b919050565b5f60a082840312156110c0575f80fd5b6110c861102f565b905081356110d581611089565b815260208201356110e581611089565b6020820152604082013562ffffff811681146110ff575f80fd5b60408201526060820135600281900b8114611118575f80fd5b6060820152611129608083016110a0565b608082015292915050565b801515811461109d575f80fd5b5f60608284031215611151575f80fd5b6040516060810167ffffffffffffffff811182821017156111745761117461101b565b604052905080823561118581611134565b815260208381013590820152604083013561119f81611089565b6040919091015292915050565b5f604082840312156111bc575f80fd5b6040805190810167ffffffffffffffff811182821017156111df576111df61101b565b60405290508082356111f081611134565b8152602083013561120081611134565b6020919091015292915050565b5f67ffffffffffffffff8211156112265761122661101b565b50601f01601f191660200190565b5f82601f830112611243575f80fd5b81356112566112518261120d565b611058565b81815284602083860101111561126a575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f80610160858703121561129a575f80fd5b6112a486866110b0565b93506112b38660a08701611141565b92506112c38661010087016111ac565b915061014085013567ffffffffffffffff8111156112df575f80fd5b6112eb87828801611234565b91505092959194509250565b5f8060208385031215611308575f80fd5b823567ffffffffffffffff81111561131e575f80fd5b8301601f8101851361132e575f80fd5b803567ffffffffffffffff811115611344575f80fd5b856020828401011115611355575f80fd5b6020919091019590945092505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6113a56020830184611365565b9392505050565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b602080825282516001600160a01b0316828201528281015180511515604080850191909152910151151560608301528201515f9061143060808401826113ac565b506060830151805115156101208401526020810151610140840152604001516001600160a01b03166101608301526080830151610180808401526114786101a0840182611365565b949350505050565b5f60208284031215611490575f80fd5b815167ffffffffffffffff8111156114a6575f80fd5b8201601f810184136114b6575f80fd5b80516114c46112518261120d565b8181528560208385010111156114d8575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f60208284031215611505575f80fd5b5051919050565b5f6020828403121561151c575f80fd5b813567ffffffffffffffff811115611532575f80fd5b82016101808185031215611544575f80fd5b61154c61102f565b813561155781611089565b815261156685602084016111ac565b602082015261157885606084016110b0565b604082015261158b856101008401611141565b606082015261016082013567ffffffffffffffff8111156115aa575f80fd5b6115b686828501611234565b608083015250949350505050565b6115ce81856113ac565b8251151560a0820152602083015160c082015260408301516001600160a01b031660e08201526101206101008201525f611012610120830184611365565b6020808252602b908201527f64656c74612e616d6f756e74302829206973206e6f7420657175616c20746f2060408201526a064656c74614166746572360ac1b606082015260800190565b6020808252602b908201527f64656c74612e616d6f756e74312829206973206e6f7420657175616c20746f2060408201526a64656c746141667465723160a81b606082015260800190565b5f600160ff1b82016116c257634e487b7160e01b5f52601160045260245ffd5b505f0390565b5f602082840312156116d8575f80fd5b81516113a58161113456fea2646970667358221220ab101dfe4b4748d245c1716f79d45f12181b0ade83665d9ec819f86559f0b77264736f6c634300081a00336080604052348015600e575f80fd5b506105a08061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610055575f3560e01c806332c961d91461005957806357eb1da714610081578063769323e314610089578063b08d3fe214610091578063e631bcbf146100d1575b5f80fd5b61006e610067366004610386565b60a0902090565b6040519081526020015b60405180910390f35b61006e600681565b61006e600481565b6100a461009f366004610423565b61011c565b604080516001600160801b039095168552600f9390930b6020850152918301526060820152608001610078565b6100e46100df36600461045e565b6101d2565b604080516001600160a01b03909516855260029390930b602085015262ffffff91821692840192909252166060820152608001610078565b5f805f805f61012b8787610284565b604051631afeb18d60e11b815260048101829052600360248201529091505f906001600160a01b038a16906335fd631a906044015f60405180830381865afa158015610179573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526101a09190810190610488565b602081015160408201516060909201516001600160801b0382169c60809290921d9b5091995090975095505050505050565b5f805f805f6101e0866102d8565b604051631e2eaeaf60e01b8152600481018290529091505f906001600160a01b03891690631e2eaeaf90602401602060405180830381865afa158015610228573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061024c9190610534565b90506001600160a01b03811695508060a01c60020b945062ffffff8160b81c16935062ffffff8160d01c169250505092959194509250565b5f8061028f846102d8565b90505f61029d60048361054b565b60408051600287900b602082015290810182905290915060600160405160208183030381529060405280519060200120925050505b92915050565b6040515f906102f7908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561035157610351610314565b604052919050565b6001600160a01b038116811461036d575f80fd5b50565b8035600281900b8114610381575f80fd5b919050565b5f60a0828403128015610397575f80fd5b5060405160a0810167ffffffffffffffff811182821017156103bb576103bb610314565b60405282356103c981610359565b815260208301356103d981610359565b6020820152604083013562ffffff811681146103f3575f80fd5b604082015261040460608401610370565b6060820152608083013561041781610359565b60808201529392505050565b5f805f60608486031215610435575f80fd5b833561044081610359565b92506020840135915061045560408501610370565b90509250925092565b5f806040838503121561046f575f80fd5b823561047a81610359565b946020939093013593505050565b5f60208284031215610498575f80fd5b815167ffffffffffffffff8111156104ae575f80fd5b8201601f810184136104be575f80fd5b805167ffffffffffffffff8111156104d8576104d8610314565b8060051b6104e860208201610328565b91825260208184018101929081019087841115610503575f80fd5b6020850194505b838510156105295784518083526020958601959093509091019061050a565b979650505050505050565b5f60208284031215610544575f80fd5b5051919050565b808201808211156102d257634e487b7160e01b5f52601160045260245ffdfea26469706673582212200f59ae3b20597ee5b9c8afd86ef4272903aea11220ba5f5248dea7997a9f1cfe64736f6c634300081a003360e060405234801561000f575f80fd5b50604051610eea380380610eea83398101604081905261002e916101a1565b8282825f61003c84826102a2565b50600161004983826102a2565b5060ff81166080524660a05261005d61006c565b60c052506103cd945050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f60405161009c919061035c565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610127575f80fd5b81516001600160401b0381111561014057610140610104565b604051601f8201601f19908116603f011681016001600160401b038111828210171561016e5761016e610104565b604052818152838201602001851015610185575f80fd5b8160208501602083015e5f918101602001919091529392505050565b5f805f606084860312156101b3575f80fd5b83516001600160401b038111156101c8575f80fd5b6101d486828701610118565b602086015190945090506001600160401b038111156101f1575f80fd5b6101fd86828701610118565b925050604084015160ff81168114610213575f80fd5b809150509250925092565b600181811c9082168061023257607f821691505b60208210810361025057634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561029d57805f5260205f20601f840160051c8101602085101561027b5750805b601f840160051c820191505b8181101561029a575f8155600101610287565b50505b505050565b81516001600160401b038111156102bb576102bb610104565b6102cf816102c9845461021e565b84610256565b6020601f821160018114610301575f83156102ea5750848201515b5f19600385901b1c1916600184901b17845561029a565b5f84815260208120601f198516915b828110156103305787850151825560209485019460019092019101610310565b508482101561034d57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f8083546103698161021e565b6001821680156103805760018114610395576103c2565b60ff19831686528115158202860193506103c2565b865f5260205f205f5b838110156103ba5781548882015260019091019060200161039e565b505081860193505b509195945050505050565b60805160a05160c051610af36103f75f395f61044201525f61040d01525f61013f0152610af35ff3fe608060405234801561000f575f80fd5b50600436106100cb575f3560e01c806340c10f191161008857806395d89b411161006357806395d89b41146101cc578063a9059cbb146101d4578063d505accf146101e7578063dd62ed3e146101fc575f80fd5b806340c10f191461017b57806370a082311461018e5780637ecebe00146101ad575f80fd5b806306fdde03146100cf578063095ea7b3146100ed57806318160ddd1461011057806323b872dd14610127578063313ce5671461013a5780633644e51514610173575b5f80fd5b6100d7610226565b6040516100e4919061083f565b60405180910390f35b6101006100fb36600461088f565b6102b1565b60405190151581526020016100e4565b61011960025481565b6040519081526020016100e4565b6101006101353660046108b7565b61031d565b6101617f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100e4565b61011961040a565b61010061018936600461088f565b610464565b61011961019c3660046108f1565b60036020525f908152604090205481565b6101196101bb3660046108f1565b60056020525f908152604090205481565b6100d7610478565b6101006101e236600461088f565b610485565b6101fa6101f5366004610911565b6104fb565b005b61011961020a36600461097e565b600460209081525f928352604080842090915290825290205481565b5f8054610232906109af565b80601f016020809104026020016040519081016040528092919081815260200182805461025e906109af565b80156102a95780601f10610280576101008083540402835291602001916102a9565b820191905f5260205f20905b81548152906001019060200180831161028c57829003601f168201915b505050505081565b335f8181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061030b9086815260200190565b60405180910390a35060015b92915050565b6001600160a01b0383165f9081526004602090815260408083203384529091528120545f1981146103765761035283826109fb565b6001600160a01b0386165f9081526004602090815260408083203384529091529020555b6001600160a01b0385165f908152600360205260408120805485929061039d9084906109fb565b90915550506001600160a01b038085165f81815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103f79087815260200190565b60405180910390a3506001949350505050565b5f7f0000000000000000000000000000000000000000000000000000000000000000461461043f5761043a61073e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b5f61046f83836107d6565b50600192915050565b60018054610232906109af565b335f908152600360205260408120805483919083906104a59084906109fb565b90915550506001600160a01b0383165f81815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061030b9086815260200190565b428410156105505760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b5f600161055b61040a565b6001600160a01b038a81165f8181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f1981840301815282825280516020918201205f84529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610663573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116158015906106995750876001600160a01b0316816001600160a01b0316145b6106d65760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b6044820152606401610547565b6001600160a01b039081165f9081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f60405161076e9190610a0e565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060025f8282546107e79190610aaa565b90915550506001600160a01b0382165f818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b038116811461088a575f80fd5b919050565b5f80604083850312156108a0575f80fd5b6108a983610874565b946020939093013593505050565b5f805f606084860312156108c9575f80fd5b6108d284610874565b92506108e060208501610874565b929592945050506040919091013590565b5f60208284031215610901575f80fd5b61090a82610874565b9392505050565b5f805f805f805f60e0888a031215610927575f80fd5b61093088610874565b965061093e60208901610874565b95506040880135945060608801359350608088013560ff81168114610961575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f806040838503121561098f575f80fd5b61099883610874565b91506109a660208401610874565b90509250929050565b600181811c908216806109c357607f821691505b6020821081036109e157634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610317576103176109e7565b5f8083545f8160011c90506001821680610a2957607f821691505b602082108103610a4757634e487b7160e01b5f52602260045260245ffd5b808015610a5b5760018114610a7057610a9e565b60ff1984168752821515830287019450610a9e565b5f888152602090205f5b84811015610a9657815489820152600190910190602001610a7a565b505082870194505b50929695505050505050565b80820180821115610317576103176109e756fea2646970667358221220f4620711d0f8649f80fed98a6eb335b7806c86e0ebaba0b9fa57daf20d6ed2f364736f6c634300081a00336080604052348015600e575f80fd5b50604051610521380380610521833981016040819052602b91607b565b5f80546001600160a01b039485166001600160a01b031991821617909155600180549390941692169190911790915560025560af565b80516001600160a01b03811681146076575f80fd5b919050565b5f805f60608486031215608c575f80fd5b6093846061565b9250609f602085016061565b9150604084015190509250925092565b610465806100bc5f395ff3fe608060405234801561000f575f80fd5b5060043610610055575f3560e01c806358dbbe811461005957806391b7f5ed14610089578063a035b1fe1461009e578063d004f0f7146100b5578063f5992699146100c8575b5f80fd5b60015461006c906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61009c6100973660046103c4565b6100da565b005b6100a760025481565b604051908152602001610080565b61009c6100c33660046103db565b610115565b5f5461006c906001600160a01b031681565b60028190556040518181527ff347ee99503bf19c028bd6b18f3c676e82a9bb5b2bb5225aebe0fd62fd6a0d199060200160405180910390a150565b5f805481906001600160a01b039081169085160361015257506001546002546001600160a01b039091169061014b90849061037e565b91506101c2565b6001546001600160a01b039081169085160361018557505f546002546001600160a01b039091169061014b908490610399565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b60448201526064015b60405180910390fd5b6040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b038516906323b872dd906064016020604051808303815f875af1158015610212573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102369190610410565b6102745760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016101b9565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0382169063a9059cbb906044016020604051808303815f875af11580156102be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102e29190610410565b6103205760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016101b9565b604080516001600160a01b03808716825283166020820152908101849052606081018390523360808201527fb39c9bc43f811e1a7ce159c5f147458fdb80266bf23c17322013316e27e086d09060a00160405180910390a150505050565b5f6103928383670de0b6b3a76400006103a9565b9392505050565b5f61039283670de0b6b3a7640000845b5f825f1904841183021582026103bd575f80fd5b5091020490565b5f602082840312156103d4575f80fd5b5035919050565b5f80604083850312156103ec575f80fd5b82356001600160a01b0381168114610402575f80fd5b946020939093013593505050565b5f60208284031215610420575f80fd5b81518015158114610392575f80fdfea264697066735822122071f33bd4e906706fab2f1d579ad88e83e4a15cb735911cd69a3275ede2ed3ced64736f6c634300081a0033","sourceMap":"936:5329:53:-:0;;;1756:794;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1843:3;1827:20;;;;;:::i;:::-;508:25:57;;;496:2;481:18;1827:20:53;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1813:34:53;;;;;1866:40;;;;;:::i;:::-;-1:-1:-1;;;;;728:32:57;;;710:51;;698:2;683:18;1866:40:53;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1857:49:53;;;1946:11;;1929:29;;;;;:::i;:::-;-1:-1:-1;;;;;728:32:57;;;710:51;;698:2;683:18;1929:29:53;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1916:42:53;;;1978:13;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1968:23:53;;;2014:37;;2048:2;;2014:37;;;:::i;:::-;1110:2:57;1092:21;;;1149:1;1129:18;;;1122:29;-1:-1:-1;;;1182:3:57;1167:19;;1160:40;1238:3;1231:4;1216:20;;1209:33;;;1279:1;1258:19;;;1251:30;-1:-1:-1;;;1312:3:57;1297:19;;1290:33;1407:4;1395:17;;;-1:-1:-1;1375:18:57;;1368:45;1355:3;1340:19;2014:37:53;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2002:49:53;;;2073:37;;2107:2;;2073:37;;;:::i;:::-;1762:2:57;1744:21;;;1801:1;1781:18;;;1774:29;-1:-1:-1;;;1834:3:57;1819:19;;1812:40;1890:3;1883:4;1868:20;;1861:33;;;1931:1;1910:19;;;1903:30;-1:-1:-1;;;1964:3:57;1949:19;;1942:33;2059:4;2047:17;;;-1:-1:-1;2027:18:57;;2020:45;2007:3;1992:19;2073:37:53;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2061:49:53;;;;;;;2125:9;;:21;;;;2121:99;;;2188:9;;;2199;;;-1:-1:-1;;;;;2162:47:53;;;;;;;;;;2121:99;2263:9;;2283;;2295:12;2236:72;;;;;:::i;:::-;-1:-1:-1;;;;;2296:32:57;;;2278:51;;2365:32;;;;2360:2;2345:18;;2338:60;2429:2;2414:18;;2407:34;2266:2;2251:18;2236:72:53;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2230:78:53;;;;;2327:9;;:51;;-1:-1:-1;;;2327:51:53;;2350:4;2327:51;;;2653::57;2357:20:53;2720:18:57;;;2713:34;2327:14:53;;;;;2626:18:57;;2327:51:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2319:107;;;;-1:-1:-1;;;2319:107:53;;3242:2:57;2319:107:53;;;3224:21:57;3281:2;3261:18;;;3254:30;3320:34;3300:18;;;3293:62;-1:-1:-1;;;3371:18:57;;;3364:41;3422:19;;2319:107:53;;;;;;;;;2444:9;;:51;;-1:-1:-1;;;2444:51:53;;2467:4;2444:51;;;2653::57;2474:20:53;2720:18:57;;;2713:34;-1:-1:-1;;;;;2444:14:53;;;;;;2626:18:57;;2444:51:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2436:107;;;;-1:-1:-1;;;2436:107:53;;3654:2:57;2436:107:53;;;3636:21:57;3693:2;3673:18;;;3666:30;3732:34;3712:18;;;3705:62;-1:-1:-1;;;3783:18:57;;;3776:41;3834:19;;2436:107:53;3452:407:57;2436:107:53;1756:794;;936:5329;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;14:343:57:-;93:6;101;154:2;142:9;133:7;129:23;125:32;122:52;;;170:1;167;160:12;122:52;-1:-1:-1;;215:16:57;;321:2;306:18;;;300:25;215:16;;300:25;;-1:-1:-1;14:343:57:o;2758:277::-;2825:6;2878:2;2866:9;2857:7;2853:23;2849:32;2846:52;;;2894:1;2891;2884:12;2846:52;2926:9;2920:16;2979:5;2972:13;2965:21;2958:5;2955:32;2945:60;;3001:1;2998;2991:12;2945:60;3024:5;2758:277;-1:-1:-1;;;2758:277:57:o;3452:407::-;936:5329:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b50600436106100b1575f3560e01c806357eb1da71161006e57806357eb1da7146101f05780636af577411461022657806391b7f5ed1461023957806396f5e27c1461024c578063b0f479a11461025f578063c7b8e15d14610285575f80fd5b806301480703146100b557806306ba06fa1461014f57806314ee367714610164578063182148ef146101775780632ba31c53146101f0578063542524dd14610206575b5f80fd5b6100bd61028d565b604080518251600290810b82526020808501516001600160a01b03908116828501528585015181168486015260608087015181860152608080880151805184168288015293840151831660a0808801919091529684015162ffffff1660c08701529083015190930b60e08501529101518116610100830152919092015116610120820152610140015b60405180910390f35b61016261015d3660046112ec565b610561565b005b61016261017236600461132b565b6109d5565b5f54600154600280546101b0936001600160a01b03908116938082169362ffffff600160a01b83041693600160b81b909204900b911685565b604080516001600160a01b039687168152948616602086015262ffffff9093169284019290925260020b606083015291909116608082015260a001610146565b6101f8600681565b604051908152602001610146565b61020e610fb7565b6040516001600160a01b039091168152602001610146565b61016261023436600461137a565b610fd9565b61016261024736600461132b565b611144565b61016261025a366004611476565b6111b5565b7f000000000000000000000000000000000000000000000000000000000000000061020e565b61020e61122e565b6040805160c0810182525f80825260208083018290528284018290526060808401839052845160a080820187528482529281018490528086018490529081018390526080808201849052840152820181905291516332c961d960e01b815290919081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e631bcbf907f00000000000000000000000000000000000000000000000000000000000000009083906332c961d9906103599087906004016114e5565b602060405180830381865afa158015610374573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061039891906114f9565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401608060405180830381865afa1580156103df573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104039190611510565b5050915091506040518060c001604052808260020b8152602001836001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104db91906114f9565b81526040805160a0810182525f546001600160a01b03908116825260015480821660208481019190915262ffffff600160a01b83041684860152600160b81b909104600290810b606085015254821660808401528401919091527f0000000000000000000000000000000000000000000000000000000000000000169101529392505050565b5f831315610722576040516340c10f1960e01b8152306004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906340c10f19906044016020604051808303815f875af11580156105d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105f7919061156c565b6106485760405162461bcd60e51b815260206004820152601860248201527f4d696e74696e672063757272656e637930206661696c6564000000000000000060448201526064015b60405180910390fd5b6040516340c10f1960e01b8152306004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906340c10f19906044016020604051808303815f875af11580156106b2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106d6919061156c565b6107225760405162461bcd60e51b815260206004820152601860248201527f4d696e74696e672063757272656e637931206661696c65640000000000000000604482015260640161063f565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af11580156107ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107d2919061156c565b61081e5760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637930206661696c6564000000604482015260640161063f565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af11580156108aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ce919061156c565b61091a5760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637931206661696c6564000000604482015260640161063f565b60408051608081018252600284810b825283900b60208201528082018590525f606082018190529151632d35e7ed60e11b815290916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691635a6bcfda9161098e91859060040161158b565b6020604051808303815f875af11580156109aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ce91906114f9565b5050505050565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610a61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a85919061156c565b610ad15760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637930206661696c6564000000604482015260640161063f565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610b5d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b81919061156c565b610bcd5760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637931206661696c6564000000604482015260640161063f565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e631bcbf7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166332c961d95f6040518263ffffffff1660e01b8152600401610c6a91906114e5565b602060405180830381865afa158015610c85573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ca991906114f9565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401608060405180830381865afa158015610cf0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d149190611510565b50505090505f610d4e826001600160a01b0316670de0b6b3a7640000610d3a91906115f0565b836001600160a01b0316600160c01b61123e565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dd191906114f9565b905080821115610ebd5760408051606081018252600180825260208201879052915f91908101610e076401000276a36001611626565b6001600160a01b039081169091526040805180820182525f80825260208201819052915163088a742d60e21b8152939450927f000000000000000000000000000000000000000000000000000000000000000090921691632229d0b491610e749186908690600401611645565b6020604051808303815f875af1158015610e90573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eb491906114f9565b50505050610fb1565b80821015610fb157604080516060810182525f80825260208201879052918291908101610eff600173fffd8963efd1fc6a506488495d951d5263988d26611607565b6001600160a01b039081169091526040805180820182525f80825260208201819052915163088a742d60e21b8152939450927f000000000000000000000000000000000000000000000000000000000000000090921691632229d0b491610f6c9186908690600401611645565b6020604051808303815f875af1158015610f88573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fac91906114f9565b505050505b50505050565b610fd6600173fffd8963efd1fc6a506488495d951d5263988d26611607565b81565b6040805160a0810182527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081168083527f000000000000000000000000000000000000000000000000000000000000000082166020840181905262ffffff8a811685870181905260028b810b60608801528a861660809097018790525f80546001600160a01b03199081169096178155600180546001600160b81b031916909517600160a01b9093029290921762ffffff60b81b1916600160b81b938d16939093029290921790925580549092169093179055915163695c5bf560e01b81527f00000000000000000000000000000000000000000000000000000000000000009092169163695c5bf5916110fc91869086906004016116a5565b6020604051808303815f875af1158015611118573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061113c91906116fa565b505050505050565b6040516391b7f5ed60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391b7f5ed906024015f604051808303815f87803b1580156111a3575f80fd5b505af11580156109ce573d5f803e3d5ffd5b60405163d004f0f760e01b81526001600160a01b038381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063d004f0f7906044015f604051808303815f87803b15801561121c575f80fd5b505af115801561113c573d5f803e3d5ffd5b610fd66401000276a36001611626565b5f838302815f198587098281108382030391505080841161125d575f80fd5b805f0361126f575082900490506112d4565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b8060020b81146112e9575f80fd5b50565b5f805f606084860312156112fe575f80fd5b833592506020840135611310816112db565b91506040840135611320816112db565b809150509250925092565b5f6020828403121561133b575f80fd5b5035919050565b62ffffff811681146112e9575f80fd5b6001600160a01b03811681146112e9575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f805f805f60a0868803121561138e575f80fd5b853561139981611342565b945060208601356113a9816112db565b935060408601356113b981611352565b925060608601356113c981611352565b9150608086013567ffffffffffffffff8111156113e4575f80fd5b8601601f810188136113f4575f80fd5b803567ffffffffffffffff81111561140e5761140e611366565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561143d5761143d611366565b6040528181528282016020018a1015611454575f80fd5b816020840160208301375f602083830101528093505050509295509295909350565b5f8060408385031215611487575f80fd5b823561149281611352565b946020939093013593505050565b80546001600160a01b0390811683526001820154808216602085015260a081901c62ffffff16604085015260b81c600290810b60608501529091015416608090910152565b60a081016114f382846114a0565b92915050565b5f60208284031215611509575f80fd5b5051919050565b5f805f8060808587031215611523575f80fd5b845161152e81611352565b602086015190945061153f816112db565b604086015190935061155081611342565b606086015190925061156181611342565b939692955090935050565b5f6020828403121561157c575f80fd5b815180151581146112d4575f80fd5b61159581846114a0565b8151600290810b60a08301526020830151900b60c0820152604082015160e082015260609091015161010082015261014061012082018190525f9082015261016001919050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176114f3576114f36115dc565b6001600160a01b0382811682821603908111156114f3576114f36115dc565b6001600160a01b0381811683821601908111156114f3576114f36115dc565b61164f81856114a0565b8251151560a082015260208084015160c08301526040909301516001600160a01b031660e082015281511515610100820152910151151561012082015261016061014082018190525f9082015261018001919050565b6116af81856114a0565b60018060a01b03831660a082015260e060c08201525f82518060e0840152806020850161010085015e5f6101008285010152610100601f19601f830116840101915050949350505050565b5f6020828403121561170a575f80fd5b81516112d4816112db56fea26469706673582212202f1e8b55b9f8b43644f835f5d44698c0c0e32271998428e356f0147397e5da4c64736f6c634300081a0033","sourceMap":"936:5329:53:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2654:422;;;:::i;:::-;;;;352:13:57;;349:1;338:28;;;320:47;;427:4;415:17;;;409:24;-1:-1:-1;;;;;405:50:57;;;383:20;;;376:80;504:17;;;498:24;494:50;;472:20;;;465:80;601:4;589:17;;;583:24;561:20;;;554:54;655:4;643:17;;;637:24;703:19;;699:45;;677:20;;;670:75;792:23;;;786:30;782:56;;443:3;761:19;;;754:85;;;;886:23;;;880:30;912:8;876:45;870:3;855:19;;848:74;979:23;;;973:30;959:45;;;953:3;938:19;;931:74;1052:23;;1046:30;1042:56;;1036:3;1021:19;;1014:85;1136:16;;;;1130:23;80:31;1212:6;1197:22;;68:44;307:3;292:19;2654:422:53;;;;;;;;5409:854;;;;;;:::i;:::-;;:::i;:::-;;3275:1674;;;;;;:::i;:::-;;:::i;1230:22::-;;;;;;;;;;-1:-1:-1;;;;;1230:22:53;;;;;;;;;-1:-1:-1;;;1230:22:53;;;;-1:-1:-1;;;1230:22:53;;;;;;;;;;;;;-1:-1:-1;;;;;2434:32:57;;;2416:51;;2503:32;;;2498:2;2483:18;;2476:60;2584:8;2572:21;;;2552:18;;;2545:49;;;;2641:1;2630:21;2625:2;2610:18;;2603:49;2689:32;;;;2683:3;2668:19;;2661:61;2403:3;2388:19;1230:22:53;2088:640:57;1523:44:53;;1566:1;1523:44;;;;;2879:25:57;;;2867:2;2852:18;1523:44:53;2733:177:57;1385:69:53;;;:::i;:::-;;;-1:-1:-1;;;;;3079:32:57;;;3061:51;;3049:2;3034:18;1385:69:53;2915:203:57;4955:448:53;;;;;;:::i;:::-;;:::i;3082:76::-;;;;;;:::i;:::-;;:::i;3164:105::-;;;;;;:::i;:::-;;:::i;2556:92::-;2634:6;2556:92;;1310:69;;;:::i;2654:422::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2796:21:53;;-1:-1:-1;;;2796:21:53;;-1:-1:-1;;;;;;;;;;2766:7:53;:16;;;;2783:11;;2766:16;;2796:12;;:21;;-1:-1:-1;;2796:21:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2766:52;;-1:-1:-1;;;;;;2766:52:53;;;;;;;-1:-1:-1;;;;;7334:32:57;;;2766:52:53;;;7316:51:57;7383:18;;;7376:34;7289:18;;2766:52:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2727:91;;;;;;2836:233;;;;;;;;2870:4;2836:233;;;;;;2902:12;-1:-1:-1;;;;;2836:233:53;;;;;2945:11;-1:-1:-1;;;;;2836:233:53;;;;;2981:3;-1:-1:-1;;;;;2981:9:53;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2836:233;;;;;;;;;;3012:7;2836:233;-1:-1:-1;;;;;2836:233:53;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2836:233:53;;;;;;;-1:-1:-1;;;2836:233:53;;;;;;;;;;;;;;;;;;;;;;;;3050:7;2836:233;;;;2829:240;2654:422;-1:-1:-1;;;2654:422:53:o;5409:854::-;5526:1;5509:14;:18;5505:245;;;5551:54;;-1:-1:-1;;;5551:54:53;;5574:4;5551:54;;;7316:51:57;7383:18;;;7376:34;;;5551:9:53;-1:-1:-1;;;;;5551:14:53;;;;7289:18:57;;5551:54:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5543:91;;;;-1:-1:-1;;;5543:91:53;;9032:2:57;5543:91:53;;;9014:21:57;9071:2;9051:18;;;9044:30;9110:26;9090:18;;;9083:54;9154:18;;5543:91:53;;;;;;;;;5656:54;;-1:-1:-1;;;5656:54:53;;5679:4;5656:54;;;7316:51:57;7383:18;;;7376:34;;;5656:9:53;-1:-1:-1;;;;;5656:14:53;;;;7289:18:57;;5656:54:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5648:91;;;;-1:-1:-1;;;5648:91:53;;9385:2:57;5648:91:53;;;9367:21:57;9424:2;9404:18;;;9397:30;9463:26;9443:18;;;9436:54;9507:18;;5648:91:53;9183:348:57;5648:91:53;5768:53;;-1:-1:-1;;;5768:53:53;;-1:-1:-1;;;;;5794:6:53;7334:32:57;;5768:53:53;;;7316:51:57;-1:-1:-1;;7383:18:57;;;7376:34;5768:9:53;:17;;;;7289:18:57;;5768:53:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5760:95;;;;-1:-1:-1;;;5760:95:53;;9738:2:57;5760:95:53;;;9720:21:57;9777:2;9757:18;;;9750:30;9816:31;9796:18;;;9789:59;9865:18;;5760:95:53;9536:353:57;5760:95:53;5873:53;;-1:-1:-1;;;5873:53:53;;-1:-1:-1;;;;;5899:6:53;7334:32:57;;5873:53:53;;;7316:51:57;-1:-1:-1;;7383:18:57;;;7376:34;5873:9:53;:17;;;;7289:18:57;;5873:53:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5865:95;;;;-1:-1:-1;;;5865:95:53;;10096:2:57;5865:95:53;;;10078:21:57;10135:2;10115:18;;;10108:30;10174:31;10154:18;;;10147:59;10223:18;;5865:95:53;9894:353:57;5865:95:53;6022:180;;;;;;;;;;;;;;;;;;;;;;;;;;;5971:48;6022:180;;;;;;6213:43;;-1:-1:-1;;;6213:43:53;;6022:180;;-1:-1:-1;;;;;6213:6:53;:22;;;;:43;;6022:180;;6213:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5495:768;5409:854;;;:::o;3275:1674::-;3337:57;;-1:-1:-1;;;3337:57:53;;-1:-1:-1;;;;;3363:10:53;7334:32:57;;3337:57:53;;;7316:51:57;-1:-1:-1;;7383:18:57;;;7376:34;3337:9:53;:17;;;;7289:18:57;;3337:57:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3329:99;;;;-1:-1:-1;;;3329:99:53;;9738:2:57;3329:99:53;;;9720:21:57;9777:2;9757:18;;;9750:30;9816:31;9796:18;;;9789:59;9865:18;;3329:99:53;9536:353:57;3329:99:53;3446:57;;-1:-1:-1;;;3446:57:53;;-1:-1:-1;;;;;3472:10:53;7334:32:57;;3446:57:53;;;7316:51:57;-1:-1:-1;;7383:18:57;;;7376:34;3446:9:53;:17;;;;7289:18:57;;3446:57:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3438:99;;;;-1:-1:-1;;;3438:99:53;;10096:2:57;3438:99:53;;;10078:21:57;10135:2;10115:18;;;10108:30;10174:31;10154:18;;;10147:59;10223:18;;3438:99:53;9894:353:57;3438:99:53;3549:20;3576:7;-1:-1:-1;;;;;3576:16:53;;3593:11;3606:7;-1:-1:-1;;;;;3606:12:53;;3619:7;3606:21;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3576:52;;-1:-1:-1;;;;;;3576:52:53;;;;;;;-1:-1:-1;;;;;7334:32:57;;;3576:52:53;;;7316:51:57;7383:18;;;7376:34;7289:18;;3576:52:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3548:80;;;;;3647:20;3670:80;3694:12;-1:-1:-1;;;;;3686:21:53;3710:6;3686:30;;;;:::i;:::-;3726:12;-1:-1:-1;;;;;3718:21:53;-1:-1:-1;;;3670:15:53;:80::i;:::-;3647:103;;3760:16;3779:3;-1:-1:-1;;;;;3779:9:53;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3760:30;;3820:8;3805:12;:23;3801:1142;;;3921:222;;;;;;;;3862:4;3921:222;;;;;;;;;3862:4;3844:15;;3921:222;;;1352:27;1586:10:40;1378:1:53;1352:27;:::i;:::-;-1:-1:-1;;;;;3921:222:53;;;;;;4222:70;;;;;;;;4158:45;4222:70;;;;;;;;;4307:50;;-1:-1:-1;;;4307:50:53;;3881:262;;-1:-1:-1;4222:70:53;4307:10;:15;;;;;;:50;;3881:262;;4222:70;;4307:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3830:539;;;3801:1142;;;4394:8;4379:12;:23;4375:568;;;4496:222;;;;;;;;4418:15;4496:222;;;;;;;;;4418:15;;;4496:222;;;1427:27;1453:1;1766:49:40;1427:27:53;:::i;:::-;-1:-1:-1;;;;;4496:222:53;;;;;;4797:70;;;;;;;;4733:45;4797:70;;;;;;;;;4882:50;;-1:-1:-1;;;4882:50:53;;4456:262;;-1:-1:-1;4797:70:53;4882:10;:15;;;;;;:50;;4456:262;;4797:70;;4882:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4404:539;;;4375:568;3319:1630;;;3275:1674;:::o;1385:69::-;1427:27;1453:1;1766:49:40;1427:27:53;:::i;:::-;1385:69;:::o;4955:448::-;5105:225;;;;;;;;5160:9;-1:-1:-1;;;;;5105:225:53;;;;;;5218:9;5105:225;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5095:235:53;;-1:-1:-1;;;;;;5095:235:53;;;;;;;;-1:-1:-1;5095:235:53;;-1:-1:-1;;;;;;5095:235:53;;;;-1:-1:-1;;;5095:235:53;;;;;;;-1:-1:-1;;;;5095:235:53;-1:-1:-1;;;5095:235:53;;;;;;;;;;;;;;;;;;;;;;;;5341:55;;-1:-1:-1;;;5341:55:53;;:11;:22;;;;;;:55;;5373:12;;5387:8;;5341:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4955:448;;;;;:::o;3082:76::-;3132:19;;-1:-1:-1;;;3132:19:53;;;;;2879:25:57;;;3132:3:53;-1:-1:-1;;;;;3132:12:53;;;;2852:18:57;;3132:19:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3164:105;3235:27;;-1:-1:-1;;;3235:27:53;;-1:-1:-1;;;;;7334:32:57;;;3235:27:53;;;7316:51:57;7383:18;;;7376:34;;;3235:3:53;:8;;;;7289:18:57;;3235:27:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1310:69;1352:27;1586:10:40;1378:1:53;1352:27;:::i;741:4141:25:-;823:14;1212:5;;;823:14;-1:-1:-1;;1216:1:25;1212;1400:20;1473:5;1469:2;1466:13;1458:5;1454:2;1450:14;1446:34;1437:43;;;1633:5;1619:11;:19;1611:28;;;;;;1720:5;1729:1;1720:10;1716:177;;-1:-1:-1;1807:23:25;;;;-1:-1:-1;1865:13:25;;1716:177;2193:17;2293:11;2290:1;2287;2280:25;2701:12;2717:15;;;2716:31;;2869:22;;;;;3776:1;3757;:15;;3756:21;;4019:17;;;4015:21;;4008:28;4081:17;;;4077:21;;4070:28;4144:17;;;4140:21;;4133:28;4207:17;;;4203:21;;4196:28;4270:17;;;4266:21;;4259:28;4334:17;;;4330:21;;;4323:28;3313:12;;;;3309:23;;;3334:1;3305:31;2454:20;;;2443:32;;;3372:12;;;;2501:21;;;;3029:16;;;;3363:21;;;;4827:11;;;;;-1:-1:-1;;741:4141:25;;;;;;:::o;1231:118:57:-;1318:5;1315:1;1304:20;1297:5;1294:31;1284:59;;1339:1;1336;1329:12;1284:59;1231:118;:::o;1354:499::-;1426:6;1434;1442;1495:2;1483:9;1474:7;1470:23;1466:32;1463:52;;;1511:1;1508;1501:12;1463:52;1556:23;;;-1:-1:-1;1655:2:57;1640:18;;1627:32;1668:31;1627:32;1668:31;:::i;:::-;1718:7;-1:-1:-1;1777:2:57;1762:18;;1749:32;1790:31;1749:32;1790:31;:::i;:::-;1840:7;1830:17;;;1354:499;;;;;:::o;1858:225::-;1916:6;1969:2;1957:9;1948:7;1944:23;1940:32;1937:52;;;1985:1;1982;1975:12;1937:52;-1:-1:-1;2030:23:57;;1858:225;-1:-1:-1;1858:225:57:o;3305:119::-;3390:8;3383:5;3379:20;3372:5;3369:31;3359:59;;3414:1;3411;3404:12;3429:139;-1:-1:-1;;;;;3512:31:57;;3502:42;;3492:70;;3558:1;3555;3548:12;3573:127;3634:10;3629:3;3625:20;3622:1;3615:31;3665:4;3662:1;3655:15;3689:4;3686:1;3679:15;3705:1529;3821:6;3829;3837;3845;3853;3906:3;3894:9;3885:7;3881:23;3877:33;3874:53;;;3923:1;3920;3913:12;3874:53;3962:9;3949:23;3981:30;4005:5;3981:30;:::i;:::-;4030:5;-1:-1:-1;4087:2:57;4072:18;;4059:32;4100:31;4059:32;4100:31;:::i;:::-;4150:7;-1:-1:-1;4209:2:57;4194:18;;4181:32;4222:41;4181:32;4222:41;:::i;:::-;4282:7;-1:-1:-1;4341:2:57;4326:18;;4313:32;4354:41;4313:32;4354:41;:::i;:::-;4414:7;-1:-1:-1;4472:3:57;4457:19;;4444:33;4500:18;4489:30;;4486:50;;;4532:1;4529;4522:12;4486:50;4555:22;;4608:4;4600:13;;4596:27;-1:-1:-1;4586:55:57;;4637:1;4634;4627:12;4586:55;4677:2;4664:16;4703:18;4695:6;4692:30;4689:56;;;4725:18;;:::i;:::-;4774:2;4768:9;4866:2;4828:17;;-1:-1:-1;;4824:31:57;;;4857:2;4820:40;4816:54;4804:67;;4901:18;4886:34;;4922:22;;;4883:62;4880:88;;;4948:18;;:::i;:::-;4984:2;4977:22;5008;;;5049:15;;;5066:2;5045:24;5042:37;-1:-1:-1;5039:57:57;;;5092:1;5089;5082:12;5039:57;5148:6;5143:2;5139;5135:11;5130:2;5122:6;5118:15;5105:50;5201:1;5196:2;5187:6;5179;5175:19;5171:28;5164:39;5222:6;5212:16;;;;;3705:1529;;;;;;;;:::o;5470:375::-;5538:6;5546;5599:2;5587:9;5578:7;5574:23;5570:32;5567:52;;;5615:1;5612;5605:12;5567:52;5654:9;5641:23;5673:39;5706:5;5673:39;:::i;:::-;5731:5;5809:2;5794:18;;;;5781:32;;-1:-1:-1;;;5470:375:57:o;6058:555::-;6143:12;;-1:-1:-1;;;;;6139:38:57;;;6127:51;;6174:1;6210:16;;6204:23;6259:35;;;6252:4;6243:14;;6236:59;6165:3;6331:19;;;6352:8;6327:34;6320:4;6311:14;;6304:58;6412:3;6408:19;6405:1;6394:34;;;6387:4;6378:14;;6371:58;6454:13;;;6448:20;6513:28;6566:4;6557:14;;;6550:57;6058:555::o;6618:254::-;6801:3;6786:19;;6814:52;6790:9;6848:6;6814:52;:::i;:::-;6618:254;;;;:::o;6877:212::-;6975:6;7028:2;7016:9;7007:7;7003:23;6999:32;6996:52;;;7044:1;7041;7034:12;6996:52;-1:-1:-1;7067:16:57;;6877:212;-1:-1:-1;6877:212:57:o;7421:654::-;7514:6;7522;7530;7538;7591:3;7579:9;7570:7;7566:23;7562:33;7559:53;;;7608:1;7605;7598:12;7559:53;7640:9;7634:16;7659:39;7692:5;7659:39;:::i;:::-;7767:2;7752:18;;7746:25;7717:5;;-1:-1:-1;7780:31:57;7746:25;7780:31;:::i;:::-;7882:2;7867:18;;7861:25;7830:7;;-1:-1:-1;7895:32:57;7861:25;7895:32;:::i;:::-;7998:2;7983:18;;7977:25;7946:7;;-1:-1:-1;8011:32:57;7977:25;8011:32;:::i;:::-;7421:654;;;;-1:-1:-1;7421:654:57;;-1:-1:-1;;7421:654:57:o;8548:277::-;8615:6;8668:2;8656:9;8647:7;8643:23;8639:32;8636:52;;;8684:1;8681;8674:12;8636:52;8716:9;8710:16;8769:5;8762:13;8755:21;8748:5;8745:32;8735:60;;8791:1;8788;8781:12;10252:807;10618:52;10660:9;10652:6;10618:52;:::i;:::-;10721:13;;10718:1;10707:28;;;10701:3;10686:19;;10679:57;10805:4;10793:17;;10787:24;10773:39;;10767:3;10752:19;;10745:68;10868:4;10856:17;;10850:24;10844:3;10829:19;;10822:53;10930:4;10918:17;;;10912:24;10906:3;10891:19;;10884:53;10974:3;10968;10953:19;;10946:32;;;-1:-1:-1;10994:19:57;;;10987:30;11049:3;11034:19;;10252:807;-1:-1:-1;10252:807:57:o;11287:127::-;11348:10;11343:3;11339:20;11336:1;11329:31;11379:4;11376:1;11369:15;11403:4;11400:1;11393:15;11419:168;11492:9;;;11523;;11540:15;;;11534:22;;11520:37;11510:71;;11561:18;;:::i;11592:198::-;-1:-1:-1;;;;;11692:27:57;;;11663;;;11659:61;;11732:29;;11729:55;;;11764:18;;:::i;11795:195::-;-1:-1:-1;;;;;11864:27:57;;;11893;;;11860:61;;11933:28;;11930:54;;;11964:18;;:::i;11995:970::-;12429:52;12471:9;12463:6;12429:52;:::i;:::-;12532:13;;12525:21;12518:29;12512:3;12497:19;;12490:58;12603:4;12591:17;;;12585:24;12579:3;12564:19;;12557:53;12669:4;12657:17;;;12651:24;-1:-1:-1;;;;;12647:50:57;12641:3;12626:19;;12619:79;12749:13;;12742:21;12735:29;12729:3;12714:19;;12707:58;12822:17;;12816:24;12809:32;12802:40;12796:3;12781:19;;12774:69;12880:3;12874;12859:19;;12852:32;;;-1:-1:-1;12900:19:57;;;12893:30;12955:3;12940:19;;11995:970;-1:-1:-1;11995:970:57:o;12970:669::-;13204:52;13246:9;13238:6;13204:52;:::i;:::-;13322:1;13318;13313:3;13309:11;13305:19;13297:6;13293:32;13287:3;13276:9;13272:19;13265:61;13363:3;13357;13346:9;13342:19;13335:32;13185:4;13396:6;13390:13;13440:6;13434:3;13423:9;13419:19;13412:35;13502:6;13495:4;13487:6;13483:17;13477:3;13466:9;13462:19;13456:53;13559:1;13553:3;13544:6;13533:9;13529:22;13525:32;13518:43;13629:3;13622:2;13618:7;13613:2;13605:6;13601:15;13597:29;13586:9;13582:45;13578:55;13570:63;;;12970:669;;;;;;:::o;13644:247::-;13712:6;13765:2;13753:9;13744:7;13740:23;13736:32;13733:52;;;13781:1;13778;13771:12;13733:52;13813:9;13807:16;13832:29;13855:5;13832:29;:::i","linkReferences":{},"immutableReferences":{"11597":[{"start":803,"length":32},{"start":1070,"length":32},{"start":3071,"length":32},{"start":4291,"length":32}],"11600":[{"start":609,"length":32},{"start":1849,"length":32},{"start":2101,"length":32},{"start":2393,"length":32}],"11603":[{"start":2540,"length":32},{"start":2792,"length":32},{"start":3643,"length":32},{"start":3891,"length":32}],"11606":[{"start":1117,"length":32},{"start":3411,"length":32},{"start":4442,"length":32},{"start":4571,"length":32}],"11609":[{"start":762,"length":32},{"start":1335,"length":32},{"start":3024,"length":32},{"start":3104,"length":32}],"11612":[{"start":1413,"length":32},{"start":1896,"length":32},{"start":2587,"length":32},{"start":4069,"length":32}],"11615":[{"start":1636,"length":32},{"start":2148,"length":32},{"start":2839,"length":32},{"start":4116,"length":32}]}},"methodIdentifiers":{"MAX_PRICE_LIMIT()":"542524dd","MIN_PRICE_LIMIT()":"c7b8e15d","POOLS_SLOT()":"57eb1da7","POSITIONS_OFFSET()":"2ba31c53","addLiquidity(int256,int24,int24)":"06ba06fa","constructSignal()":"01480703","equalizePrice(int256)":"14ee3677","getRouter()":"b0f479a1","poolKey()":"182148ef","setPool(uint24,int24,address,uint160,bytes)":"6af57741","setPrice(uint256)":"91b7f5ed","swapOnLex(address,uint256)":"96f5e27c"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialPrice\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"MAX_PRICE_LIMIT\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"\",\"type\":\"uint160\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_PRICE_LIMIT\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"\",\"type\":\"uint160\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOLS_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POSITIONS_OFFSET\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"liquidityDelta\",\"type\":\"int256\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"}],\"name\":\"addLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"constructSignal\",\"outputs\":[{\"components\":[{\"internalType\":\"int24\",\"name\":\"currentTick\",\"type\":\"int24\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lexPrice\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"pool\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"fetcher\",\"type\":\"address\"}],\"internalType\":\"struct ArenaController.Signal\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"depth\",\"type\":\"int256\"}],\"name\":\"equalizePrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"poolKey\",\"outputs\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint24\",\"name\":\"poolFee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"setPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"setPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"name\":\"swapOnLex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/ArenaController.sol\":\"ArenaController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/=lib/v4-core/node_modules/@ensdomains/\",\":@openzeppelin/=lib/v4-core/lib/openzeppelin-contracts/\",\":@openzeppelin/contracts/=lib/v4-core/lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/solmate/lib/ds-test/src/\",\":erc4626-tests/=lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-gas-snapshot/=lib/v4-core/lib/forge-gas-snapshot/src/\",\":forge-std/=lib/forge-std/src/\",\":hardhat/=lib/v4-core/node_modules/hardhat/\",\":openzeppelin-contracts/=lib/v4-core/lib/openzeppelin-contracts/\",\":solmate/=lib/solmate/src/\",\":v4-core/=lib/v4-core/src/\"]},\"sources\":{\"lib/solmate/src/auth/Owned.sol\":{\"keccak256\":\"0xfedb27d14c508342c33eb067c9a02eabcdb0f9dcf93b04ded1001f580d12d0ea\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://1ff52bbee698b9cf9e4574615e6550be0887ccf355f6571e23d6f25b332e79b4\",\"dweb:/ipfs/QmVorA2apojVRStzS7h8aFccR3Uv32G6HVtBtFHZrE7YXx\"]},\"lib/solmate/src/tokens/ERC20.sol\":{\"keccak256\":\"0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35\",\"dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97\"]},\"lib/solmate/src/utils/FixedPointMathLib.sol\":{\"keccak256\":\"0x1b62af9baf5b8e991ed7531bc87f45550ba9d61e8dbff5caf237ccaf3a3fd843\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://b7b38b977c5305b18ceefbeed4c9ceaaaefa419b520de62de6604ea661f8c0a9\",\"dweb:/ipfs/QmecMRzgfMyDVa2pvBqMMDLYBappaj7Aa3qcMoQYEQrhWi\"]},\"lib/v4-core/src/ERC6909.sol\":{\"keccak256\":\"0x22476a1c183be1b547a509b3e6906abaccb6408375f798fce805ff7877aca09f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e85580e1563ea0556705132fb6bd038ca4aa355749039923853ebcb76b7c84e6\",\"dweb:/ipfs/QmVoxPrbagRKpFdRWoaCSKmStYLZrhNFuedcuyGycSGR7q\"]},\"lib/v4-core/src/ERC6909Claims.sol\":{\"keccak256\":\"0xf496ef3a5a9bf4f4aa2eec951dbeff09a01ef058bb9f64b1664cf46c9e85cd49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a0a97c359a7a4c526ba9fc4ceb20af8050f9cf7886ea7e1f38c9c10b4a3750c\",\"dweb:/ipfs/QmPy6pCQbvzCdJRqG1thHRSwEZoLBAaLo3KQnueL3wxb8i\"]},\"lib/v4-core/src/Extsload.sol\":{\"keccak256\":\"0x784074bd04a1541c7c6ace074e30245746133fd37c3ba16b025dce394db986ce\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35f1f4fb306bf01e98b7eca012b85f3ab978b39fa5136193363e2519c4435e51\",\"dweb:/ipfs/QmeGrjGMt71dJymVhkEadh5CuCW5GxRqNEZLi5AJxvC5tU\"]},\"lib/v4-core/src/Exttload.sol\":{\"keccak256\":\"0x769ee2733a08112c652274f4b972c45fb56cc46109f233b9a30f81561b15dd54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dd19e88d50ae77c1ed5581baca1c75b3fb828d0b58cded90188d55c4e336266c\",\"dweb:/ipfs/Qmc8YM6Tfpwwa4qivHHzRxNdhZzdzGiD7VexWsDvkaQTxG\"]},\"lib/v4-core/src/NoDelegateCall.sol\":{\"keccak256\":\"0x5c238701785d16c58a1598daec0f72a2aaf47d5d017b9dd7441cc8093b65b202\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://696cf79b74bc38e7316d94dfd8bdd9579a94f74121e9b65d2613eb59c106ea50\",\"dweb:/ipfs/QmRttHmshQJ5E7EGaeBC7yT4wyzthNXZQJn7sy2nJvb4dB\"]},\"lib/v4-core/src/PoolManager.sol\":{\"keccak256\":\"0xca5369a1683d06842268987fb6f46b05e6364a46cc856f72bb5c603826f47eac\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://5ae5893222abc5dc5fa57bc05af40b60a96a1537bd3c1f3845257d6a3c2b5821\",\"dweb:/ipfs/QmZxQH8M3NVunurxDNJ5EZm2fy6Ws8CHJSezCQaoqzMPoq\"]},\"lib/v4-core/src/ProtocolFees.sol\":{\"keccak256\":\"0x2e7533e46dcab5508ed417ab33c2d0ca8c52a6b5f445dd90daf328173ada4449\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8403de6f2c89a665a3ff3566a917179a5bfb3e0ac9514f0438d82270a7f98c91\",\"dweb:/ipfs/QmTq9cjKTaXeCoSfCywpFwo7sNvuXM4wSMnebwX3hBuiRG\"]},\"lib/v4-core/src/interfaces/IExtsload.sol\":{\"keccak256\":\"0x80b53ca4907d6f0088c3b931f2b72cad1dc4615a95094d96bd0fb8dff8d5ba43\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://375c69148622aab7a3537d5fd37d373a8e9731022c8d87bdaee46233b0a99fe1\",\"dweb:/ipfs/QmXFjdoYRxsA5B1kyuxEXgNf3FBoL1zPvy26Qy8EtpdFRN\"]},\"lib/v4-core/src/interfaces/IExttload.sol\":{\"keccak256\":\"0xc6b68283ebd8d1c789df536756726eed51c589134bb20821b236a0d22a135937\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://294394f72dfc219689209f4130d85601dfd0d63c8d47578050d312db70f9b6c8\",\"dweb:/ipfs/QmTDMQ3oxCGHgEBU48a3Lp4S1rRjc8vVCxkhE5ZNej1bsY\"]},\"lib/v4-core/src/interfaces/IHooks.sol\":{\"keccak256\":\"0xdbaf1db938b70f77eb4ddbad5b8d2a1fc648c7d65ca2a312aba16cc013c85df0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ad2d9c85116a2e51281dd40577c798d6d5968be1f8908f43ba152849809deaa\",\"dweb:/ipfs/QmZP4kk9KJzoxv81EgsTfHnJeU8YUxX3yWZudJHbxQjpa8\"]},\"lib/v4-core/src/interfaces/IPoolManager.sol\":{\"keccak256\":\"0x4e07d93993f6ba033c8b5e5b0a3473659aeffe9af0cf8316a879a55ebd696d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://50add8378d59b89b1dc106ea248641caaedd3ac45d62754babe55c526b87c9ad\",\"dweb:/ipfs/QmQUrvy8ZDDdTRTr17msqynVECP3rQFBVBUmFcpFvjAmQx\"]},\"lib/v4-core/src/interfaces/IProtocolFeeController.sol\":{\"keccak256\":\"0xc2d7f3605da9767e36cf25d4d4fa9b95663a6659e26ce28cf29b8b88acb79a4c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c7a43cda35b8a9254ed3e46cfd8649361f09121d17ef554bd3d190b9a8d57cc6\",\"dweb:/ipfs/QmRBDQoqCWddH5hY1JdxMyYtY8jMZhWAwtuFJBc3r8V31G\"]},\"lib/v4-core/src/interfaces/IProtocolFees.sol\":{\"keccak256\":\"0x68700020df618c5715737e57630876ec22ccde2d31191a5608babb9f140ed297\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://56b7bb6786f48fff8c9d04e9054955b8cf3d9f5bf819ccda7be192ad2004a27f\",\"dweb:/ipfs/QmZKmUvcYnyihEFySD6SY9osMkP8M1Y7a4kPxLQycEyThw\"]},\"lib/v4-core/src/interfaces/callback/IUnlockCallback.sol\":{\"keccak256\":\"0x58c82f2bd9d7c097ed09bd0991fedc403b0ec270eb3d0158bfb095c06a03d719\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91168ca26a10980df2cdc3fbfe8ddf372c002b7ef19e3c59a0c9870d64198f1b\",\"dweb:/ipfs/QmUSpaM825vd1SwvF38esgbdLgYiPwefKaFERTWvUi6uSK\"]},\"lib/v4-core/src/interfaces/external/IERC20Minimal.sol\":{\"keccak256\":\"0xc1c23330c1511ecfd45c67a683962b4e2555b82f1dacd40cc8b46ae5a6e250e7\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5ce10b7970482a65f9e9a365b810eeb154a5d4a8229a26653028d84b9622a410\",\"dweb:/ipfs/QmTSwXxZ2FTkM5duBZgbpFs8SRVDR5NPAnW4YimeDhb1s8\"]},\"lib/v4-core/src/interfaces/external/IERC6909Claims.sol\":{\"keccak256\":\"0xa586f345739e52b0488a0fe40b6e375cce67fdd25758408b0efcb5133ad96a48\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e8c557b7e52abdbbd82e415a1acc27921446a7fd090b7d4877e52be72619547f\",\"dweb:/ipfs/QmXE2KNPbXmGX8BQF3ei6zhzRTnhoTQg39XmqMnkhbr6QK\"]},\"lib/v4-core/src/libraries/BitMath.sol\":{\"keccak256\":\"0x59e18adcff8917b0965a240d88b34d5d800e0efebd5f40c5594ddcf28a15949b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d358beebf8d5079520b6e138d744e5063ecbfbeae355c08af86a3b74afa71b09\",\"dweb:/ipfs/QmUXmAK9aoxnaeykq8MLXoRKP8yGTDyY3jPFMwHnqRxf46\"]},\"lib/v4-core/src/libraries/CurrencyDelta.sol\":{\"keccak256\":\"0xb1eb18c3794b67f4f710229df279d3a630a963194fbbeb51906198ec7145b98e\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://e5ea08b69754250cf04cc544785320f5c8fd8b9a65e5d9e0bc44aadadaa9ea0c\",\"dweb:/ipfs/QmWW1qfqGydoiSeDtVVQ53nV3FphuUgH1PFUC3uGaWzxWR\"]},\"lib/v4-core/src/libraries/CurrencyReserves.sol\":{\"keccak256\":\"0xdeffc5cf2f8f7d3f802998941061392c0c926a32c7105ffd9f902ab84d3a31c6\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://869bd659c5593bc525ce4d44771d85eb8acb74a7f0492802bdcc79d2bfdfcaf7\",\"dweb:/ipfs/QmSrTWzUHrou7ZxcuFXQhvzXmEgbLeCtwAqeS6k9vD22h3\"]},\"lib/v4-core/src/libraries/CustomRevert.sol\":{\"keccak256\":\"0x70a444afeb27564398dbdf7553651ee2cae14c03c923b6f8972040c8f460ebe3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9d7b05390bac9b29188725c8a84edac43cd05571da27b33a0b1e36d9500ecaa6\",\"dweb:/ipfs/QmdYDLwTfFgePDEwFMUqGTj8SNNXXq4JQJnrgomJgcZFvP\"]},\"lib/v4-core/src/libraries/FixedPoint128.sol\":{\"keccak256\":\"0xc7e80dc41f28887d0d915a75c0b2783ae659e5384dd1a3ed1251a42e058d8835\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://2df62bf1d9d4349236fd0bc7a96b3a3be95f4c049603e4a20c8473cca9402b4d\",\"dweb:/ipfs/QmVR5dmMkoypmhaBeBj8cGegHpJycbofUDg59dHm42i9MT\"]},\"lib/v4-core/src/libraries/FixedPoint96.sol\":{\"keccak256\":\"0xf0a545fc5bbc271e8dbd191413dc03e8725d1f003df4d9d36ea7cdb73058c417\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5d1013d8b5c93024526f129b0a9271b35c578da09bcfe6c3240ff4d590ebc196\",\"dweb:/ipfs/QmX1GyF9jJhYGXst6PyK6HJvcfVQ69nNTnuBEBaEiAZPv7\"]},\"lib/v4-core/src/libraries/FullMath.sol\":{\"keccak256\":\"0x4fc73a00817193fd3cac1cc03d8167d21af97d75f1815a070ee31a90c702b4c2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3b2d66d36b1ad56b1ab6e2eb8a816740877b40b461c93f125e88621c8378e52\",\"dweb:/ipfs/QmPGvMZzKQvNiWKd8aRzzdW7oAizwrMgcMtnaworDkVHFC\"]},\"lib/v4-core/src/libraries/Hooks.sol\":{\"keccak256\":\"0xfa031f4efc096e9c93bb094509321e1c08b5eb271f46554f858e74803c43ae66\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7cc33d5eb869ecacfb70d024f7b925d191d98553dbb921bd8188f97d51c9e111\",\"dweb:/ipfs/Qme5VCnaS5mXyqaWV5uiW5xcmTb56uCKBPFrLZp2dq41dQ\"]},\"lib/v4-core/src/libraries/LPFeeLibrary.sol\":{\"keccak256\":\"0xfbebd6766871b795d945a74b6110931f73fc775aeeecc2682d6d6ca841a01ece\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://36fcc7098454971ae16d790ee9aee227c22c5cbbd7ff6e27e58ac29b901d5896\",\"dweb:/ipfs/QmboCGTWtycGpda7E169pD67Fox2H9b1YRsNHcsxBRrhfo\"]},\"lib/v4-core/src/libraries/LiquidityMath.sol\":{\"keccak256\":\"0x4a04b9383e2fb943c2c3ae7d0c9071b58dd97b6dac0a409fe1c79c3ca897bbcf\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0b33cf0ff936f62aa7f3b82922fa0ac52ac24471561e87fbf7ab8372607f6dfc\",\"dweb:/ipfs/Qmcr6omwzJjQPu6HQ8E9vFXaTgrtqfb2KbfxbuQavfUzFa\"]},\"lib/v4-core/src/libraries/Lock.sol\":{\"keccak256\":\"0x9338be4b5695f1da5f3d3f7a3eeaf7a356c1045458289586ac0cbe9cef77c6d5\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://485ec42ed6155469d612a9a0c18068ebfbad74448792a338a435503de3ef1b2c\",\"dweb:/ipfs/QmVnnv5u74MYatfRmBgrcfFYQcsMAJMG9jQ6ju8UiydKNF\"]},\"lib/v4-core/src/libraries/NonZeroDeltaCount.sol\":{\"keccak256\":\"0x6b7e23f470b8352efdbf459a34dd0dcfdbe03e623cb4de67f4ad9be326691586\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b86af075e2331f7a065b15d91253f2ce6b845dfe09493338f2d7cdab6f9e4cc2\",\"dweb:/ipfs/QmdzHJQapqAS42rMrYPgdvb4Sae7NVy3ESkNc1TuBRcxUC\"]},\"lib/v4-core/src/libraries/ParseBytes.sol\":{\"keccak256\":\"0xf0795198d1e651b0b33fd1708d80a14f501bb2a1486905676d35f364e880f579\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5aea527fcec51d7274f0c189dc2479a6aa708fc91857187a4d7db46bb1d6c7a8\",\"dweb:/ipfs/QmUTrwTPSZ7EHBaTyfAA78rZVP17iQzmAmvDcQ8GhDRAEf\"]},\"lib/v4-core/src/libraries/Pool.sol\":{\"keccak256\":\"0x7a506727ae59f5b5487a0a16ec1d7038b7c2a4ee5f4a7fa7c444ec7df6ad5a7c\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://befdd15aee06a7b2a3c64cb899220ec03a1ae8470ad17e19050bcca1ac5266a8\",\"dweb:/ipfs/QmWPfBgfp5VKnku9ZtKXwYycyKdAZuCj6778T2HFrfQ61H\"]},\"lib/v4-core/src/libraries/Position.sol\":{\"keccak256\":\"0x0309a650890f1cd93e2b4b1e9a40032d5feb8c6a0ccc24be24373bfd7590ff80\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://63aae574b22048f1453da8f9142374e334683bb3a069c2312f73e6b857842bce\",\"dweb:/ipfs/QmcJZK3kU4jsWfJKBpRq2kaouutEDHcytgMX8ZaGeBsbgu\"]},\"lib/v4-core/src/libraries/ProtocolFeeLibrary.sol\":{\"keccak256\":\"0x2739e8f54707c6a0e23f9c61a0783dd18b107c3fc287b2827f1ab4b41f891902\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://2e3b154410bbfcbe8808c6dfb74c4bbbac50a59e228cee59b34e169dbd34ee1a\",\"dweb:/ipfs/QmcRoM6T2F7FTHtGdD5aRiVthCon8oiWur661GCrk5FejP\"]},\"lib/v4-core/src/libraries/SafeCast.sol\":{\"keccak256\":\"0xbccc4f8d5d467d162d7f0ab5a7f22bcccf05ae07577b9728c9e3030c63977e60\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0003ea7a515ba709a3fdeaa19e7930c1f883b3b4fbdbf389d4f2f85b25eb72b4\",\"dweb:/ipfs/QmYs8uNcYRGuGUbeBfF27fhArNaQ5Y9iMCTMfgic5d39fM\"]},\"lib/v4-core/src/libraries/SqrtPriceMath.sol\":{\"keccak256\":\"0x1a5a8fd4a21cec19c0c253201e9b5534e8d810eb132bceee04af37fd78adb5db\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://afa2a5950c9057fd3c00a6f413fba91c4c7dab06d573f7349aaf8f806c0e1f31\",\"dweb:/ipfs/Qmb2m62xAPRBtxtx3sV7MAFw2vHWNm9m49ctPHmFX5hozt\"]},\"lib/v4-core/src/libraries/StateLibrary.sol\":{\"keccak256\":\"0x67ead4d1ffe7e4fc381cef059c8d4941c7b4d581ef043fc8d3278d0829da414e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0d12edd46a3ff2e19ea9b650507ea22e7714daa335a6b40f4d2f6d29c16431e4\",\"dweb:/ipfs/QmZn6dzXZgR3rGohZAvKzqYMgm5n9qTrpi1VhXizYhiquH\"]},\"lib/v4-core/src/libraries/SwapMath.sol\":{\"keccak256\":\"0xa8cedd0f63b2d8b6faac60455f499c79816f53fbd86f3bb0706fae426b2c231e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8d926c2df899b21811862d106d5e1d2b5bdf83c76ae6ff4216e7c9ce443d8e75\",\"dweb:/ipfs/QmTTVSCumUXZ4vf3R1GwfqJSTgLFyjueuxZkRH9U6dsTb3\"]},\"lib/v4-core/src/libraries/TickBitmap.sol\":{\"keccak256\":\"0x23abd96aa808657304affd775666d7cc5fb0ab564f87d1b65fbf8dc5877d9cd6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4c7686aefb704a3efe97cc0e8f180ed48f7667f5ae69d3754962f04352c66b79\",\"dweb:/ipfs/QmULiCBW9s2hB6SmnJTi2wiAwgkLXpZJcdVZm9f77zDNuc\"]},\"lib/v4-core/src/libraries/TickMath.sol\":{\"keccak256\":\"0x64c668177d82bb185d902fb2190630ccb67babb6439422979692ac2f8dfb6dcd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e2714a025df18c22f20b358b7143e8a5c55cffb20c7de292be0376845a5f0408\",\"dweb:/ipfs/QmWaeCkxwkVuReFUSK2nDat1BB5DJ8BUowwGwmVyKpsrME\"]},\"lib/v4-core/src/libraries/TransientStateLibrary.sol\":{\"keccak256\":\"0x1bc28f30c176c7c598522da0d8907a90c4cd8ecce81775bb4deb3a9b78782f86\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb5c05fb51e59ef168ba884c4ea3627525dba9feea0de9ffa0587438f70fd095\",\"dweb:/ipfs/Qmbx3ntPDZ9VeGsAnVNSM5DKmhPg92yobh5ZHbvdGWtHUd\"]},\"lib/v4-core/src/libraries/UnsafeMath.sol\":{\"keccak256\":\"0xe9b87da934af38419d4b5f20cc09943dbb569425448fc23fdc5ec6aebbb63c84\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://29838c28905c34f9602a453759b55f5acc6aff02bf6d7a6afac5d1a245dd5db3\",\"dweb:/ipfs/QmfN5bhLFw1CsnnaJQNZd3bLpLufQcwt9ztaR71LA43UGY\"]},\"lib/v4-core/src/test/PoolModifyLiquidityTest.sol\":{\"keccak256\":\"0x4578759af55db566eee1d19c19a285710b1d301b511e37df4a1072c2d5a47ade\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://aa6588f1f695efe625241fdbad07730611c8bec77d963698c6412775b7dd68a7\",\"dweb:/ipfs/QmeDGAKa9sR6Wk5ibyzt4YGa6tdtjmFPzJafMbBgkWRB9d\"]},\"lib/v4-core/src/test/PoolSwapTest.sol\":{\"keccak256\":\"0x389d2274a70c565c12c8fd7f0f5bdbee7532d842936243141c65cf1477c1a7e8\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://cdaff983aa947444cece280d8485f524a778cf8843c3f8b96f60e4ad137aa8d3\",\"dweb:/ipfs/QmP7qbC3UZz723pTWuJh18qap1vYAHDY5UoJwGtvosWs9k\"]},\"lib/v4-core/src/test/PoolTestBase.sol\":{\"keccak256\":\"0x71db5a5215d858124dd2ccf73c4474421651f248e4c85d33455d95abced0a23c\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://fac0df901621d44a1b98ce4569616940ca6700e7829357bdf18509237b822072\",\"dweb:/ipfs/Qmf9sWokQvzmKfAY6Vd4QzyTyhikqCb8zUowrFPe9DRxs5\"]},\"lib/v4-core/src/types/BalanceDelta.sol\":{\"keccak256\":\"0xa719c8fe51e0a9524280178f19f6851bcc3b3b60e73618f3d60905d35ae5569f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7436928dc9de35c6c7c5c636cb51adaf295cfd590da83b19a004ae33cbec9ef9\",\"dweb:/ipfs/QmRJ9yZkUpzk4433GX3LgVVL8jwpbSYSUwXcucKisf3v4H\"]},\"lib/v4-core/src/types/BeforeSwapDelta.sol\":{\"keccak256\":\"0x2a774312d91285313d569da1a718c909655da5432310417692097a1d4dc83a78\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2c7a0379955cff9c17ab9e61f95e42909aa5947c22740f86ce940d09856f782\",\"dweb:/ipfs/QmaAuo8UBYXsGrVuKh8iRoAAdqwtg1jDq515cW1ZRP5m9K\"]},\"lib/v4-core/src/types/Currency.sol\":{\"keccak256\":\"0xc77e2d4d380be1887078b1d21e2381fe4e9138dce8c7efbf9050aa7d65d75d4c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b85a1edba4be624be660d69badac1e3641d83190893839fa30260eef316d00c8\",\"dweb:/ipfs/QmPaEaeNkhy5F4X9dwzyDzVU3H67P5ZhpeijDS7wscaSd9\"]},\"lib/v4-core/src/types/PoolId.sol\":{\"keccak256\":\"0x6946552d4f78712c769df47a9187aa0add8737bb6d06ef04b63a33a3c0ff59f8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://637851aaa9e06ff59b517e6da17dad3476968c0bc62e141158f76526a8f9c79f\",\"dweb:/ipfs/QmVUxPCRCBE23XQdCrroeUuFqNTtq2LvJaDYmp43QGNsMB\"]},\"lib/v4-core/src/types/PoolKey.sol\":{\"keccak256\":\"0x10a2ff74d87d105f52c6c10f0c6ea0548c12a75dfb979abab8a8b7d647305162\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0680665f799067c0f0238e864e363c265ff23188dfe6ae1c4738f7d0a281ccf\",\"dweb:/ipfs/QmRCkZhaPknrV9cHkUiU3HVyMYYT3UaD8RfptHi4qB62zY\"]},\"lib/v4-core/src/types/Slot0.sol\":{\"keccak256\":\"0x8b4912fac7e25ea680056748121113f902d56f8b2640f421d5c38d438db11c1b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c19b1ff5b951fb54129268d2be37d82c8bb3ea6e29ac9bc78a8a37794fc082b8\",\"dweb:/ipfs/QmTAQ2mUoiT77hoWJAfn9pyoGy47qaevn45QHrbyovGt2C\"]},\"lib/v4-core/test/utils/CurrencySettler.sol\":{\"keccak256\":\"0xf5d04aa76b3ac6ff75396661e75ec612035ebd73d23eb6f4e207dbd46392688e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://67a67b94a2987309f06003374ddfc30ab8e81d9fec3b1585e93871eec6966d96\",\"dweb:/ipfs/QmYLzboZNfXoNufKX8UYMGhHVChqMK96vwFWjKeoWcfb24\"]},\"src/ArenaController.sol\":{\"keccak256\":\"0x519cc8745a4b9f0086eb9f21ad3b011f77fede5c4060d9b37e198744f1e1bc98\",\"urls\":[\"bzz-raw://1d833362f6560884cbe7165b6c70c3f7557596fd7446b687f4eafe49d8970018\",\"dweb:/ipfs/QmaWQ1kL62hT248K2Ze4deDtnQxWoasH2soAnYANV5kgJr\"]},\"src/ArenaToken.sol\":{\"keccak256\":\"0x59ea858a9c33398efbfb770c958c1f544425ad32d73a3cd3991f6834ec04028a\",\"urls\":[\"bzz-raw://242a38f560c8dc312e27a30dad15ddf2fccb4163f4f0692f814b3cfa71180105\",\"dweb:/ipfs/QmZqhSdNeRiVf5rJJYgX48SiUi1dwgpYAvMo6a7XBVRjXF\"]},\"src/Fetcher.sol\":{\"keccak256\":\"0x1895e5c0688650ca60371f208b62d9f64beea29bd7515b2600a1c8d5c73805df\",\"urls\":[\"bzz-raw://f9c904c9d032167f6d8fec1392c9a023f339a4aee9f75f06df6347a495af9d38\",\"dweb:/ipfs/QmYSaPzRawAnh2qD3JY5uvWypEueo5hSTQVyVFfX96msfb\"]},\"src/LiquidExchange.sol\":{\"keccak256\":\"0xc979e540abc8a2d1bc82f2c741beb4ea9037c7e69ab11a5a20ef11ab7b9cee22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e5f08cb7b8685020a78fd9b84d740649dcbf9ba92057cc5914d829f275d396c5\",\"dweb:/ipfs/QmQKVvRCmSumaf2xtbLey6KdUyt9bfTLeq9gPGssisJi17\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"initialPrice","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"stateMutability":"view","type":"function","name":"MAX_PRICE_LIMIT","outputs":[{"internalType":"uint160","name":"","type":"uint160"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"MIN_PRICE_LIMIT","outputs":[{"internalType":"uint160","name":"","type":"uint160"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"POOLS_SLOT","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"POSITIONS_OFFSET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"int256","name":"liquidityDelta","type":"int256"},{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"}],"stateMutability":"nonpayable","type":"function","name":"addLiquidity"},{"inputs":[],"stateMutability":"view","type":"function","name":"constructSignal","outputs":[{"internalType":"struct ArenaController.Signal","name":"","type":"tuple","components":[{"internalType":"int24","name":"currentTick","type":"int24"},{"internalType":"uint160","name":"sqrtPriceX96","type":"uint160"},{"internalType":"address","name":"manager","type":"address"},{"internalType":"uint256","name":"lexPrice","type":"uint256"},{"internalType":"struct PoolKey","name":"pool","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"address","name":"fetcher","type":"address"}]}]},{"inputs":[{"internalType":"int256","name":"depth","type":"int256"}],"stateMutability":"nonpayable","type":"function","name":"equalizePrice"},{"inputs":[],"stateMutability":"view","type":"function","name":"getRouter","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"poolKey","outputs":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"inputs":[{"internalType":"uint24","name":"poolFee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"},{"internalType":"uint160","name":"sqrtPriceX96","type":"uint160"},{"internalType":"bytes","name":"hookData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"setPool"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setPrice"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"swapOnLex"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@ensdomains/=lib/v4-core/node_modules/@ensdomains/","@openzeppelin/=lib/v4-core/lib/openzeppelin-contracts/","@openzeppelin/contracts/=lib/v4-core/lib/openzeppelin-contracts/contracts/","ds-test/=lib/solmate/lib/ds-test/src/","erc4626-tests/=lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/","forge-gas-snapshot/=lib/v4-core/lib/forge-gas-snapshot/src/","forge-std/=lib/forge-std/src/","hardhat/=lib/v4-core/node_modules/hardhat/","openzeppelin-contracts/=lib/v4-core/lib/openzeppelin-contracts/","solmate/=lib/solmate/src/","v4-core/=lib/v4-core/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/ArenaController.sol":"ArenaController"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/solmate/src/auth/Owned.sol":{"keccak256":"0xfedb27d14c508342c33eb067c9a02eabcdb0f9dcf93b04ded1001f580d12d0ea","urls":["bzz-raw://1ff52bbee698b9cf9e4574615e6550be0887ccf355f6571e23d6f25b332e79b4","dweb:/ipfs/QmVorA2apojVRStzS7h8aFccR3Uv32G6HVtBtFHZrE7YXx"],"license":"AGPL-3.0-only"},"lib/solmate/src/tokens/ERC20.sol":{"keccak256":"0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10","urls":["bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35","dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97"],"license":"AGPL-3.0-only"},"lib/solmate/src/utils/FixedPointMathLib.sol":{"keccak256":"0x1b62af9baf5b8e991ed7531bc87f45550ba9d61e8dbff5caf237ccaf3a3fd843","urls":["bzz-raw://b7b38b977c5305b18ceefbeed4c9ceaaaefa419b520de62de6604ea661f8c0a9","dweb:/ipfs/QmecMRzgfMyDVa2pvBqMMDLYBappaj7Aa3qcMoQYEQrhWi"],"license":"AGPL-3.0-only"},"lib/v4-core/src/ERC6909.sol":{"keccak256":"0x22476a1c183be1b547a509b3e6906abaccb6408375f798fce805ff7877aca09f","urls":["bzz-raw://e85580e1563ea0556705132fb6bd038ca4aa355749039923853ebcb76b7c84e6","dweb:/ipfs/QmVoxPrbagRKpFdRWoaCSKmStYLZrhNFuedcuyGycSGR7q"],"license":"MIT"},"lib/v4-core/src/ERC6909Claims.sol":{"keccak256":"0xf496ef3a5a9bf4f4aa2eec951dbeff09a01ef058bb9f64b1664cf46c9e85cd49","urls":["bzz-raw://2a0a97c359a7a4c526ba9fc4ceb20af8050f9cf7886ea7e1f38c9c10b4a3750c","dweb:/ipfs/QmPy6pCQbvzCdJRqG1thHRSwEZoLBAaLo3KQnueL3wxb8i"],"license":"MIT"},"lib/v4-core/src/Extsload.sol":{"keccak256":"0x784074bd04a1541c7c6ace074e30245746133fd37c3ba16b025dce394db986ce","urls":["bzz-raw://35f1f4fb306bf01e98b7eca012b85f3ab978b39fa5136193363e2519c4435e51","dweb:/ipfs/QmeGrjGMt71dJymVhkEadh5CuCW5GxRqNEZLi5AJxvC5tU"],"license":"MIT"},"lib/v4-core/src/Exttload.sol":{"keccak256":"0x769ee2733a08112c652274f4b972c45fb56cc46109f233b9a30f81561b15dd54","urls":["bzz-raw://dd19e88d50ae77c1ed5581baca1c75b3fb828d0b58cded90188d55c4e336266c","dweb:/ipfs/Qmc8YM6Tfpwwa4qivHHzRxNdhZzdzGiD7VexWsDvkaQTxG"],"license":"MIT"},"lib/v4-core/src/NoDelegateCall.sol":{"keccak256":"0x5c238701785d16c58a1598daec0f72a2aaf47d5d017b9dd7441cc8093b65b202","urls":["bzz-raw://696cf79b74bc38e7316d94dfd8bdd9579a94f74121e9b65d2613eb59c106ea50","dweb:/ipfs/QmRttHmshQJ5E7EGaeBC7yT4wyzthNXZQJn7sy2nJvb4dB"],"license":"BUSL-1.1"},"lib/v4-core/src/PoolManager.sol":{"keccak256":"0xca5369a1683d06842268987fb6f46b05e6364a46cc856f72bb5c603826f47eac","urls":["bzz-raw://5ae5893222abc5dc5fa57bc05af40b60a96a1537bd3c1f3845257d6a3c2b5821","dweb:/ipfs/QmZxQH8M3NVunurxDNJ5EZm2fy6Ws8CHJSezCQaoqzMPoq"],"license":"BUSL-1.1"},"lib/v4-core/src/ProtocolFees.sol":{"keccak256":"0x2e7533e46dcab5508ed417ab33c2d0ca8c52a6b5f445dd90daf328173ada4449","urls":["bzz-raw://8403de6f2c89a665a3ff3566a917179a5bfb3e0ac9514f0438d82270a7f98c91","dweb:/ipfs/QmTq9cjKTaXeCoSfCywpFwo7sNvuXM4wSMnebwX3hBuiRG"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/interfaces/IExtsload.sol":{"keccak256":"0x80b53ca4907d6f0088c3b931f2b72cad1dc4615a95094d96bd0fb8dff8d5ba43","urls":["bzz-raw://375c69148622aab7a3537d5fd37d373a8e9731022c8d87bdaee46233b0a99fe1","dweb:/ipfs/QmXFjdoYRxsA5B1kyuxEXgNf3FBoL1zPvy26Qy8EtpdFRN"],"license":"MIT"},"lib/v4-core/src/interfaces/IExttload.sol":{"keccak256":"0xc6b68283ebd8d1c789df536756726eed51c589134bb20821b236a0d22a135937","urls":["bzz-raw://294394f72dfc219689209f4130d85601dfd0d63c8d47578050d312db70f9b6c8","dweb:/ipfs/QmTDMQ3oxCGHgEBU48a3Lp4S1rRjc8vVCxkhE5ZNej1bsY"],"license":"MIT"},"lib/v4-core/src/interfaces/IHooks.sol":{"keccak256":"0xdbaf1db938b70f77eb4ddbad5b8d2a1fc648c7d65ca2a312aba16cc013c85df0","urls":["bzz-raw://4ad2d9c85116a2e51281dd40577c798d6d5968be1f8908f43ba152849809deaa","dweb:/ipfs/QmZP4kk9KJzoxv81EgsTfHnJeU8YUxX3yWZudJHbxQjpa8"],"license":"MIT"},"lib/v4-core/src/interfaces/IPoolManager.sol":{"keccak256":"0x4e07d93993f6ba033c8b5e5b0a3473659aeffe9af0cf8316a879a55ebd696d7a","urls":["bzz-raw://50add8378d59b89b1dc106ea248641caaedd3ac45d62754babe55c526b87c9ad","dweb:/ipfs/QmQUrvy8ZDDdTRTr17msqynVECP3rQFBVBUmFcpFvjAmQx"],"license":"MIT"},"lib/v4-core/src/interfaces/IProtocolFeeController.sol":{"keccak256":"0xc2d7f3605da9767e36cf25d4d4fa9b95663a6659e26ce28cf29b8b88acb79a4c","urls":["bzz-raw://c7a43cda35b8a9254ed3e46cfd8649361f09121d17ef554bd3d190b9a8d57cc6","dweb:/ipfs/QmRBDQoqCWddH5hY1JdxMyYtY8jMZhWAwtuFJBc3r8V31G"],"license":"MIT"},"lib/v4-core/src/interfaces/IProtocolFees.sol":{"keccak256":"0x68700020df618c5715737e57630876ec22ccde2d31191a5608babb9f140ed297","urls":["bzz-raw://56b7bb6786f48fff8c9d04e9054955b8cf3d9f5bf819ccda7be192ad2004a27f","dweb:/ipfs/QmZKmUvcYnyihEFySD6SY9osMkP8M1Y7a4kPxLQycEyThw"],"license":"MIT"},"lib/v4-core/src/interfaces/callback/IUnlockCallback.sol":{"keccak256":"0x58c82f2bd9d7c097ed09bd0991fedc403b0ec270eb3d0158bfb095c06a03d719","urls":["bzz-raw://91168ca26a10980df2cdc3fbfe8ddf372c002b7ef19e3c59a0c9870d64198f1b","dweb:/ipfs/QmUSpaM825vd1SwvF38esgbdLgYiPwefKaFERTWvUi6uSK"],"license":"MIT"},"lib/v4-core/src/interfaces/external/IERC20Minimal.sol":{"keccak256":"0xc1c23330c1511ecfd45c67a683962b4e2555b82f1dacd40cc8b46ae5a6e250e7","urls":["bzz-raw://5ce10b7970482a65f9e9a365b810eeb154a5d4a8229a26653028d84b9622a410","dweb:/ipfs/QmTSwXxZ2FTkM5duBZgbpFs8SRVDR5NPAnW4YimeDhb1s8"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/interfaces/external/IERC6909Claims.sol":{"keccak256":"0xa586f345739e52b0488a0fe40b6e375cce67fdd25758408b0efcb5133ad96a48","urls":["bzz-raw://e8c557b7e52abdbbd82e415a1acc27921446a7fd090b7d4877e52be72619547f","dweb:/ipfs/QmXE2KNPbXmGX8BQF3ei6zhzRTnhoTQg39XmqMnkhbr6QK"],"license":"MIT"},"lib/v4-core/src/libraries/BitMath.sol":{"keccak256":"0x59e18adcff8917b0965a240d88b34d5d800e0efebd5f40c5594ddcf28a15949b","urls":["bzz-raw://d358beebf8d5079520b6e138d744e5063ecbfbeae355c08af86a3b74afa71b09","dweb:/ipfs/QmUXmAK9aoxnaeykq8MLXoRKP8yGTDyY3jPFMwHnqRxf46"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/CurrencyDelta.sol":{"keccak256":"0xb1eb18c3794b67f4f710229df279d3a630a963194fbbeb51906198ec7145b98e","urls":["bzz-raw://e5ea08b69754250cf04cc544785320f5c8fd8b9a65e5d9e0bc44aadadaa9ea0c","dweb:/ipfs/QmWW1qfqGydoiSeDtVVQ53nV3FphuUgH1PFUC3uGaWzxWR"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/CurrencyReserves.sol":{"keccak256":"0xdeffc5cf2f8f7d3f802998941061392c0c926a32c7105ffd9f902ab84d3a31c6","urls":["bzz-raw://869bd659c5593bc525ce4d44771d85eb8acb74a7f0492802bdcc79d2bfdfcaf7","dweb:/ipfs/QmSrTWzUHrou7ZxcuFXQhvzXmEgbLeCtwAqeS6k9vD22h3"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/CustomRevert.sol":{"keccak256":"0x70a444afeb27564398dbdf7553651ee2cae14c03c923b6f8972040c8f460ebe3","urls":["bzz-raw://9d7b05390bac9b29188725c8a84edac43cd05571da27b33a0b1e36d9500ecaa6","dweb:/ipfs/QmdYDLwTfFgePDEwFMUqGTj8SNNXXq4JQJnrgomJgcZFvP"],"license":"MIT"},"lib/v4-core/src/libraries/FixedPoint128.sol":{"keccak256":"0xc7e80dc41f28887d0d915a75c0b2783ae659e5384dd1a3ed1251a42e058d8835","urls":["bzz-raw://2df62bf1d9d4349236fd0bc7a96b3a3be95f4c049603e4a20c8473cca9402b4d","dweb:/ipfs/QmVR5dmMkoypmhaBeBj8cGegHpJycbofUDg59dHm42i9MT"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/FixedPoint96.sol":{"keccak256":"0xf0a545fc5bbc271e8dbd191413dc03e8725d1f003df4d9d36ea7cdb73058c417","urls":["bzz-raw://5d1013d8b5c93024526f129b0a9271b35c578da09bcfe6c3240ff4d590ebc196","dweb:/ipfs/QmX1GyF9jJhYGXst6PyK6HJvcfVQ69nNTnuBEBaEiAZPv7"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/FullMath.sol":{"keccak256":"0x4fc73a00817193fd3cac1cc03d8167d21af97d75f1815a070ee31a90c702b4c2","urls":["bzz-raw://c3b2d66d36b1ad56b1ab6e2eb8a816740877b40b461c93f125e88621c8378e52","dweb:/ipfs/QmPGvMZzKQvNiWKd8aRzzdW7oAizwrMgcMtnaworDkVHFC"],"license":"MIT"},"lib/v4-core/src/libraries/Hooks.sol":{"keccak256":"0xfa031f4efc096e9c93bb094509321e1c08b5eb271f46554f858e74803c43ae66","urls":["bzz-raw://7cc33d5eb869ecacfb70d024f7b925d191d98553dbb921bd8188f97d51c9e111","dweb:/ipfs/Qme5VCnaS5mXyqaWV5uiW5xcmTb56uCKBPFrLZp2dq41dQ"],"license":"MIT"},"lib/v4-core/src/libraries/LPFeeLibrary.sol":{"keccak256":"0xfbebd6766871b795d945a74b6110931f73fc775aeeecc2682d6d6ca841a01ece","urls":["bzz-raw://36fcc7098454971ae16d790ee9aee227c22c5cbbd7ff6e27e58ac29b901d5896","dweb:/ipfs/QmboCGTWtycGpda7E169pD67Fox2H9b1YRsNHcsxBRrhfo"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/LiquidityMath.sol":{"keccak256":"0x4a04b9383e2fb943c2c3ae7d0c9071b58dd97b6dac0a409fe1c79c3ca897bbcf","urls":["bzz-raw://0b33cf0ff936f62aa7f3b82922fa0ac52ac24471561e87fbf7ab8372607f6dfc","dweb:/ipfs/Qmcr6omwzJjQPu6HQ8E9vFXaTgrtqfb2KbfxbuQavfUzFa"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/Lock.sol":{"keccak256":"0x9338be4b5695f1da5f3d3f7a3eeaf7a356c1045458289586ac0cbe9cef77c6d5","urls":["bzz-raw://485ec42ed6155469d612a9a0c18068ebfbad74448792a338a435503de3ef1b2c","dweb:/ipfs/QmVnnv5u74MYatfRmBgrcfFYQcsMAJMG9jQ6ju8UiydKNF"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/NonZeroDeltaCount.sol":{"keccak256":"0x6b7e23f470b8352efdbf459a34dd0dcfdbe03e623cb4de67f4ad9be326691586","urls":["bzz-raw://b86af075e2331f7a065b15d91253f2ce6b845dfe09493338f2d7cdab6f9e4cc2","dweb:/ipfs/QmdzHJQapqAS42rMrYPgdvb4Sae7NVy3ESkNc1TuBRcxUC"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/ParseBytes.sol":{"keccak256":"0xf0795198d1e651b0b33fd1708d80a14f501bb2a1486905676d35f364e880f579","urls":["bzz-raw://5aea527fcec51d7274f0c189dc2479a6aa708fc91857187a4d7db46bb1d6c7a8","dweb:/ipfs/QmUTrwTPSZ7EHBaTyfAA78rZVP17iQzmAmvDcQ8GhDRAEf"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/Pool.sol":{"keccak256":"0x7a506727ae59f5b5487a0a16ec1d7038b7c2a4ee5f4a7fa7c444ec7df6ad5a7c","urls":["bzz-raw://befdd15aee06a7b2a3c64cb899220ec03a1ae8470ad17e19050bcca1ac5266a8","dweb:/ipfs/QmWPfBgfp5VKnku9ZtKXwYycyKdAZuCj6778T2HFrfQ61H"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/Position.sol":{"keccak256":"0x0309a650890f1cd93e2b4b1e9a40032d5feb8c6a0ccc24be24373bfd7590ff80","urls":["bzz-raw://63aae574b22048f1453da8f9142374e334683bb3a069c2312f73e6b857842bce","dweb:/ipfs/QmcJZK3kU4jsWfJKBpRq2kaouutEDHcytgMX8ZaGeBsbgu"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/ProtocolFeeLibrary.sol":{"keccak256":"0x2739e8f54707c6a0e23f9c61a0783dd18b107c3fc287b2827f1ab4b41f891902","urls":["bzz-raw://2e3b154410bbfcbe8808c6dfb74c4bbbac50a59e228cee59b34e169dbd34ee1a","dweb:/ipfs/QmcRoM6T2F7FTHtGdD5aRiVthCon8oiWur661GCrk5FejP"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/SafeCast.sol":{"keccak256":"0xbccc4f8d5d467d162d7f0ab5a7f22bcccf05ae07577b9728c9e3030c63977e60","urls":["bzz-raw://0003ea7a515ba709a3fdeaa19e7930c1f883b3b4fbdbf389d4f2f85b25eb72b4","dweb:/ipfs/QmYs8uNcYRGuGUbeBfF27fhArNaQ5Y9iMCTMfgic5d39fM"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/SqrtPriceMath.sol":{"keccak256":"0x1a5a8fd4a21cec19c0c253201e9b5534e8d810eb132bceee04af37fd78adb5db","urls":["bzz-raw://afa2a5950c9057fd3c00a6f413fba91c4c7dab06d573f7349aaf8f806c0e1f31","dweb:/ipfs/Qmb2m62xAPRBtxtx3sV7MAFw2vHWNm9m49ctPHmFX5hozt"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/StateLibrary.sol":{"keccak256":"0x67ead4d1ffe7e4fc381cef059c8d4941c7b4d581ef043fc8d3278d0829da414e","urls":["bzz-raw://0d12edd46a3ff2e19ea9b650507ea22e7714daa335a6b40f4d2f6d29c16431e4","dweb:/ipfs/QmZn6dzXZgR3rGohZAvKzqYMgm5n9qTrpi1VhXizYhiquH"],"license":"MIT"},"lib/v4-core/src/libraries/SwapMath.sol":{"keccak256":"0xa8cedd0f63b2d8b6faac60455f499c79816f53fbd86f3bb0706fae426b2c231e","urls":["bzz-raw://8d926c2df899b21811862d106d5e1d2b5bdf83c76ae6ff4216e7c9ce443d8e75","dweb:/ipfs/QmTTVSCumUXZ4vf3R1GwfqJSTgLFyjueuxZkRH9U6dsTb3"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/TickBitmap.sol":{"keccak256":"0x23abd96aa808657304affd775666d7cc5fb0ab564f87d1b65fbf8dc5877d9cd6","urls":["bzz-raw://4c7686aefb704a3efe97cc0e8f180ed48f7667f5ae69d3754962f04352c66b79","dweb:/ipfs/QmULiCBW9s2hB6SmnJTi2wiAwgkLXpZJcdVZm9f77zDNuc"],"license":"MIT"},"lib/v4-core/src/libraries/TickMath.sol":{"keccak256":"0x64c668177d82bb185d902fb2190630ccb67babb6439422979692ac2f8dfb6dcd","urls":["bzz-raw://e2714a025df18c22f20b358b7143e8a5c55cffb20c7de292be0376845a5f0408","dweb:/ipfs/QmWaeCkxwkVuReFUSK2nDat1BB5DJ8BUowwGwmVyKpsrME"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/TransientStateLibrary.sol":{"keccak256":"0x1bc28f30c176c7c598522da0d8907a90c4cd8ecce81775bb4deb3a9b78782f86","urls":["bzz-raw://fb5c05fb51e59ef168ba884c4ea3627525dba9feea0de9ffa0587438f70fd095","dweb:/ipfs/Qmbx3ntPDZ9VeGsAnVNSM5DKmhPg92yobh5ZHbvdGWtHUd"],"license":"MIT"},"lib/v4-core/src/libraries/UnsafeMath.sol":{"keccak256":"0xe9b87da934af38419d4b5f20cc09943dbb569425448fc23fdc5ec6aebbb63c84","urls":["bzz-raw://29838c28905c34f9602a453759b55f5acc6aff02bf6d7a6afac5d1a245dd5db3","dweb:/ipfs/QmfN5bhLFw1CsnnaJQNZd3bLpLufQcwt9ztaR71LA43UGY"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/test/PoolModifyLiquidityTest.sol":{"keccak256":"0x4578759af55db566eee1d19c19a285710b1d301b511e37df4a1072c2d5a47ade","urls":["bzz-raw://aa6588f1f695efe625241fdbad07730611c8bec77d963698c6412775b7dd68a7","dweb:/ipfs/QmeDGAKa9sR6Wk5ibyzt4YGa6tdtjmFPzJafMbBgkWRB9d"],"license":"UNLICENSED"},"lib/v4-core/src/test/PoolSwapTest.sol":{"keccak256":"0x389d2274a70c565c12c8fd7f0f5bdbee7532d842936243141c65cf1477c1a7e8","urls":["bzz-raw://cdaff983aa947444cece280d8485f524a778cf8843c3f8b96f60e4ad137aa8d3","dweb:/ipfs/QmP7qbC3UZz723pTWuJh18qap1vYAHDY5UoJwGtvosWs9k"],"license":"UNLICENSED"},"lib/v4-core/src/test/PoolTestBase.sol":{"keccak256":"0x71db5a5215d858124dd2ccf73c4474421651f248e4c85d33455d95abced0a23c","urls":["bzz-raw://fac0df901621d44a1b98ce4569616940ca6700e7829357bdf18509237b822072","dweb:/ipfs/Qmf9sWokQvzmKfAY6Vd4QzyTyhikqCb8zUowrFPe9DRxs5"],"license":"UNLICENSED"},"lib/v4-core/src/types/BalanceDelta.sol":{"keccak256":"0xa719c8fe51e0a9524280178f19f6851bcc3b3b60e73618f3d60905d35ae5569f","urls":["bzz-raw://7436928dc9de35c6c7c5c636cb51adaf295cfd590da83b19a004ae33cbec9ef9","dweb:/ipfs/QmRJ9yZkUpzk4433GX3LgVVL8jwpbSYSUwXcucKisf3v4H"],"license":"MIT"},"lib/v4-core/src/types/BeforeSwapDelta.sol":{"keccak256":"0x2a774312d91285313d569da1a718c909655da5432310417692097a1d4dc83a78","urls":["bzz-raw://a2c7a0379955cff9c17ab9e61f95e42909aa5947c22740f86ce940d09856f782","dweb:/ipfs/QmaAuo8UBYXsGrVuKh8iRoAAdqwtg1jDq515cW1ZRP5m9K"],"license":"MIT"},"lib/v4-core/src/types/Currency.sol":{"keccak256":"0xc77e2d4d380be1887078b1d21e2381fe4e9138dce8c7efbf9050aa7d65d75d4c","urls":["bzz-raw://b85a1edba4be624be660d69badac1e3641d83190893839fa30260eef316d00c8","dweb:/ipfs/QmPaEaeNkhy5F4X9dwzyDzVU3H67P5ZhpeijDS7wscaSd9"],"license":"MIT"},"lib/v4-core/src/types/PoolId.sol":{"keccak256":"0x6946552d4f78712c769df47a9187aa0add8737bb6d06ef04b63a33a3c0ff59f8","urls":["bzz-raw://637851aaa9e06ff59b517e6da17dad3476968c0bc62e141158f76526a8f9c79f","dweb:/ipfs/QmVUxPCRCBE23XQdCrroeUuFqNTtq2LvJaDYmp43QGNsMB"],"license":"MIT"},"lib/v4-core/src/types/PoolKey.sol":{"keccak256":"0x10a2ff74d87d105f52c6c10f0c6ea0548c12a75dfb979abab8a8b7d647305162","urls":["bzz-raw://a0680665f799067c0f0238e864e363c265ff23188dfe6ae1c4738f7d0a281ccf","dweb:/ipfs/QmRCkZhaPknrV9cHkUiU3HVyMYYT3UaD8RfptHi4qB62zY"],"license":"MIT"},"lib/v4-core/src/types/Slot0.sol":{"keccak256":"0x8b4912fac7e25ea680056748121113f902d56f8b2640f421d5c38d438db11c1b","urls":["bzz-raw://c19b1ff5b951fb54129268d2be37d82c8bb3ea6e29ac9bc78a8a37794fc082b8","dweb:/ipfs/QmTAQ2mUoiT77hoWJAfn9pyoGy47qaevn45QHrbyovGt2C"],"license":"MIT"},"lib/v4-core/test/utils/CurrencySettler.sol":{"keccak256":"0xf5d04aa76b3ac6ff75396661e75ec612035ebd73d23eb6f4e207dbd46392688e","urls":["bzz-raw://67a67b94a2987309f06003374ddfc30ab8e81d9fec3b1585e93871eec6966d96","dweb:/ipfs/QmYLzboZNfXoNufKX8UYMGhHVChqMK96vwFWjKeoWcfb24"],"license":"MIT"},"src/ArenaController.sol":{"keccak256":"0x519cc8745a4b9f0086eb9f21ad3b011f77fede5c4060d9b37e198744f1e1bc98","urls":["bzz-raw://1d833362f6560884cbe7165b6c70c3f7557596fd7446b687f4eafe49d8970018","dweb:/ipfs/QmaWQ1kL62hT248K2Ze4deDtnQxWoasH2soAnYANV5kgJr"],"license":null},"src/ArenaToken.sol":{"keccak256":"0x59ea858a9c33398efbfb770c958c1f544425ad32d73a3cd3991f6834ec04028a","urls":["bzz-raw://242a38f560c8dc312e27a30dad15ddf2fccb4163f4f0692f814b3cfa71180105","dweb:/ipfs/QmZqhSdNeRiVf5rJJYgX48SiUi1dwgpYAvMo6a7XBVRjXF"],"license":null},"src/Fetcher.sol":{"keccak256":"0x1895e5c0688650ca60371f208b62d9f64beea29bd7515b2600a1c8d5c73805df","urls":["bzz-raw://f9c904c9d032167f6d8fec1392c9a023f339a4aee9f75f06df6347a495af9d38","dweb:/ipfs/QmYSaPzRawAnh2qD3JY5uvWypEueo5hSTQVyVFfX96msfb"],"license":null},"src/LiquidExchange.sol":{"keccak256":"0xc979e540abc8a2d1bc82f2c741beb4ea9037c7e69ab11a5a20ef11ab7b9cee22","urls":["bzz-raw://e5f08cb7b8685020a78fd9b84d740649dcbf9ba92057cc5914d829f275d396c5","dweb:/ipfs/QmQKVvRCmSumaf2xtbLey6KdUyt9bfTLeq9gPGssisJi17"],"license":"MIT"}},"version":1},"id":53} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[{"name":"fee","type":"uint256","internalType":"uint256"},{"name":"initialPrice","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"MAX_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"MIN_PRICE_LIMIT","inputs":[],"outputs":[{"name":"","type":"uint160","internalType":"uint160"}],"stateMutability":"view"},{"type":"function","name":"POOLS_SLOT","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"POSITIONS_OFFSET","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"addLiquidity","inputs":[{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"constructSignal","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct ArenaController.Signal","components":[{"name":"currentTick","type":"int24","internalType":"int24"},{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"},{"name":"manager","type":"address","internalType":"address"},{"name":"lexPrice","type":"uint256","internalType":"uint256"},{"name":"pool","type":"tuple","internalType":"struct PoolKey","components":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}]},{"name":"fetcher","type":"address","internalType":"address"}]}],"stateMutability":"view"},{"type":"function","name":"equalizePrice","inputs":[{"name":"depth","type":"int256","internalType":"int256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getRouter","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"poolKey","inputs":[],"outputs":[{"name":"currency0","type":"address","internalType":"Currency"},{"name":"currency1","type":"address","internalType":"Currency"},{"name":"fee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"}],"stateMutability":"view"},{"type":"function","name":"setPool","inputs":[{"name":"poolFee","type":"uint24","internalType":"uint24"},{"name":"tickSpacing","type":"int24","internalType":"int24"},{"name":"hooks","type":"address","internalType":"contract IHooks"},{"name":"sqrtPriceX96","type":"uint160","internalType":"uint160"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPrice","inputs":[{"name":"price","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"swapOnLex","inputs":[{"name":"tokenIn","type":"address","internalType":"address"},{"name":"amountIn","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"}],"bytecode":{"object":"0x610160604052348015610010575f80fd5b5060405161b5dc38038061b5dc83398101604081905261002f916104a6565b8160405161003c90610458565b908152602001604051809103905ff08015801561005b573d5f803e3d5ffd5b506001600160a01b0316608081905260405161007690610465565b6001600160a01b039091168152602001604051809103905ff08015801561009f573d5f803e3d5ffd5b506001600160a01b031660a0526080516040516100bb90610472565b6001600160a01b039091168152602001604051809103905ff0801580156100e4573d5f803e3d5ffd5b506001600160a01b031660c0526040516100fd9061047f565b604051809103905ff080158015610116573d5f803e3d5ffd5b506001600160a01b0316610100526040516012906101339061048c565b606080825260099082015268063757272656e6379360bc1b608082015260a06020820181905260029082015261063360f41b60c082015260ff909116604082015260e001604051809103905ff080158015610190573d5f803e3d5ffd5b506001600160a01b0316610120526040516012906101ad9061048c565b60608082526009908201526863757272656e63793160b81b608082015260a06020820181905260029082015261633160f01b60c082015260ff909116604082015260e001604051809103905ff08015801561020a573d5f803e3d5ffd5b506001600160a01b0390811661014081905261012051909116111561024657610140805161012080516001600160a01b03908116909352911690525b61012051610140518260405161025b90610499565b6001600160a01b0393841681529290911660208301526040820152606001604051809103905ff080158015610292573d5f803e3d5ffd5b506001600160a01b0390811660e052610120516040516340c10f1960e01b8152306004820152678ac7230489e8000060248201529116906340c10f19906044016020604051808303815f875af11580156102ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061031291906104c8565b6103775760405162461bcd60e51b815260206004820152602b60248201527f4d696e74696e672063757272656e63793020746f206c6971756964206578636860448201526a185b99d94819985a5b195960aa1b60648201526084015b60405180910390fd5b610140516040516340c10f1960e01b8152306004820152678ac7230489e8000060248201526001600160a01b03909116906340c10f19906044016020604051808303815f875af11580156103cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103f191906104c8565b6104515760405162461bcd60e51b815260206004820152602b60248201527f4d696e74696e672063757272656e63793120746f206c6971756964206578636860448201526a185b99d94819985a5b195960aa1b606482015260840161036e565b50506104ee565b61502b80611d6983390190565b6116ad80616d9483390190565b6117d48061844183390190565b6105bc80619c1583390190565b610eea8061a1d183390190565b6105218061b0bb83390190565b5f80604083850312156104b7575f80fd5b505080516020909101519092909150565b5f602082840312156104d8575f80fd5b815180151581146104e7575f80fd5b9392505050565b60805160a05160c05160e0516101005161012051610140516117976105d25f395f81816106a801528181610c4601528181610e46015261101701525f81816105a701528181610b6c01528181610d4a0152610fe801525f81816102fa015281816105370152818161076101526107b101525f818161045d015281816108e40152818161115501526111dd01525f818161057801528181610679015281816109cc0152610ac401525f818161026101528181610d1b01528181610e170152610f3b01525f81816103230152818161042e0152818161079001526110c601526117975ff3fe608060405234801561000f575f80fd5b50600436106100b1575f3560e01c806357eb1da71161006e57806357eb1da7146101dd5780636af577411461022657806391b7f5ed1461023957806396f5e27c1461024c578063b0f479a11461025f578063c7b8e15d14610285575f80fd5b806301480703146100b557806314ee36771461014f578063182148ef146101645780632ba31c53146101dd578063407bf6d2146101f3578063542524dd14610206575b5f80fd5b6100bd61028d565b604080518251600290810b82526020808501516001600160a01b03908116828501528585015181168486015260608087015181860152608080880151805184168288015293840151831660a0808801919091529684015162ffffff1660c08701529083015190930b60e08501529101518116610100830152919092015116610120820152610140015b60405180910390f35b61016261015d3660046112dd565b610561565b005b5f546001546002805461019d936001600160a01b03908116938082169362ffffff600160a01b83041693600160b81b909204900b911685565b604080516001600160a01b039687168152948616602086015262ffffff9093169284019290925260020b606083015291909116608082015260a001610146565b6101e5600681565b604051908152602001610146565b6101626102013660046113a4565b610b48565b61020e610fba565b6040516001600160a01b039091168152602001610146565b610162610234366004611430565b610fdc565b6101626102473660046112dd565b61113f565b61016261025a3660046114b3565b6111b7565b7f000000000000000000000000000000000000000000000000000000000000000061020e565b61020e611230565b6040805160c0810182525f80825260208083018290528284018290526060808401839052845160a080820187528482529281018490528086018490529081018390526080808201849052840152820181905291516332c961d960e01b815290919081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e631bcbf907f00000000000000000000000000000000000000000000000000000000000000009083906332c961d990610359908790600401611522565b602060405180830381865afa158015610374573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103989190611536565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401608060405180830381865afa1580156103df573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610403919061154d565b5050915091506040518060c001604052808260020b8152602001836001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104db9190611536565b81526040805160a0810182525f546001600160a01b03908116825260015480821660208481019190915262ffffff600160a01b83041684860152600160b81b909104600290810b606085015254821660808401528401919091527f0000000000000000000000000000000000000000000000000000000000000000169101529392505050565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af11580156105ed573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061061191906115a9565b6106625760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637930206661696c656400000060448201526064015b60405180910390fd5b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af11580156106ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061071291906115a9565b61075e5760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637931206661696c65640000006044820152606401610659565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e631bcbf7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166332c961d95f6040518263ffffffff1660e01b81526004016107fb9190611522565b602060405180830381865afa158015610816573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083a9190611536565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401608060405180830381865afa158015610881573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108a5919061154d565b50505090505f6108df826001600160a01b0316670de0b6b3a76400006108cb91906115dc565b836001600160a01b0316600160c01b611240565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561093e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109629190611536565b905080821115610a4e5760408051606081018252600180825260208201879052915f919081016109986401000276a36001611612565b6001600160a01b039081169091526040805180820182525f80825260208201819052915163088a742d60e21b8152939450927f000000000000000000000000000000000000000000000000000000000000000090921691632229d0b491610a059186908690600401611631565b6020604051808303815f875af1158015610a21573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a459190611536565b50505050610b42565b80821015610b4257604080516060810182525f80825260208201879052918291908101610a90600173fffd8963efd1fc6a506488495d951d5263988d266115f3565b6001600160a01b039081169091526040805180820182525f80825260208201819052915163088a742d60e21b8152939450927f000000000000000000000000000000000000000000000000000000000000000090921691632229d0b491610afd9186908690600401611631565b6020604051808303815f875af1158015610b19573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3d9190611536565b505050505b50505050565b5f841315610d04576040516340c10f1960e01b8152306004820152602481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906340c10f19906044016020604051808303815f875af1158015610bba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bde91906115a9565b610c2a5760405162461bcd60e51b815260206004820152601860248201527f4d696e74696e672063757272656e637930206661696c656400000000000000006044820152606401610659565b6040516340c10f1960e01b8152306004820152602481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906340c10f19906044016020604051808303815f875af1158015610c94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cb891906115a9565b610d045760405162461bcd60e51b815260206004820152601860248201527f4d696e74696e672063757272656e637931206661696c656400000000000000006044820152606401610659565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610d90573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610db491906115a9565b610e005760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637930206661696c65640000006044820152606401610659565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610e8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eb091906115a9565b610efc5760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637931206661696c65640000006044820152606401610659565b60408051608081018252600285810b825284900b60208201528082018690525f606082018190529151632d35e7ed60e11b815290916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691635a6bcfda91610f7291859087906004016116bf565b6020604051808303815f875af1158015610f8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fb29190611536565b505050505050565b610fd9600173fffd8963efd1fc6a506488495d951d5263988d266115f3565b81565b6040805160a0810182527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081168083527f000000000000000000000000000000000000000000000000000000000000000082166020840181905262ffffff8a811685870181905260028b810b60608801528a861660809097018790525f80546001600160a01b03199081169096178155600180546001600160b81b031916909517600160a01b9093029290921762ffffff60b81b1916600160b81b938d16939093029290921790925580549092169093179055915163695c5bf560e01b81527f00000000000000000000000000000000000000000000000000000000000000009092169163695c5bf5916110ff9186908690600401611716565b6020604051808303815f875af115801561111b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fb29190611746565b6040516391b7f5ed60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391b7f5ed906024015f604051808303815f87803b15801561119e575f80fd5b505af11580156111b0573d5f803e3d5ffd5b5050505050565b60405163d004f0f760e01b81526001600160a01b038381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063d004f0f7906044015f604051808303815f87803b15801561121e575f80fd5b505af1158015610fb2573d5f803e3d5ffd5b610fd96401000276a36001611612565b5f838302815f198587098281108382030391505080841161125f575f80fd5b805f03611271575082900490506112d6565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b5f602082840312156112ed575f80fd5b5035919050565b8060020b8114611302575f80fd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611328575f80fd5b813567ffffffffffffffff81111561134257611342611305565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561137157611371611305565b604052818152838201602001851015611388575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f80608085870312156113b7575f80fd5b8435935060208501356113c9816112f4565b925060408501356113d9816112f4565b9150606085013567ffffffffffffffff8111156113f4575f80fd5b61140087828801611319565b91505092959194509250565b62ffffff81168114611302575f80fd5b6001600160a01b0381168114611302575f80fd5b5f805f805f60a08688031215611444575f80fd5b853561144f8161140c565b9450602086013561145f816112f4565b9350604086013561146f8161141c565b9250606086013561147f8161141c565b9150608086013567ffffffffffffffff81111561149a575f80fd5b6114a688828901611319565b9150509295509295909350565b5f80604083850312156114c4575f80fd5b82356114cf8161141c565b946020939093013593505050565b80546001600160a01b0390811683526001820154808216602085015260a081901c62ffffff16604085015260b81c600290810b60608501529091015416608090910152565b60a0810161153082846114dd565b92915050565b5f60208284031215611546575f80fd5b5051919050565b5f805f8060808587031215611560575f80fd5b845161156b8161141c565b602086015190945061157c816112f4565b604086015190935061158d8161140c565b606086015190925061159e8161140c565b939692955090935050565b5f602082840312156115b9575f80fd5b815180151581146112d6575f80fd5b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417611530576115306115c8565b6001600160a01b038281168282160390811115611530576115306115c8565b6001600160a01b038181168382160190811115611530576115306115c8565b61163b81856114dd565b8251151560a082015260208084015160c08301526040909301516001600160a01b031660e082015281511515610100820152910151151561012082015261016061014082018190525f9082015261018001919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6116c981856114dd565b825160020b60a0820152602083015160020b60c0820152604083015160e082015260608301516101008201526101406101208201525f61170d610140830184611691565b95945050505050565b61172081856114dd565b6001600160a01b03831660a082015260e060c082018190525f9061170d90830184611691565b5f60208284031215611756575f80fd5b81516112d6816112f456fea2646970667358221220f2cdea43beb93a284b948a58623de230568d3ac92bf2c85a26a46cfe6f5dcf9764736f6c634300081a003360c0604052348015600e575f80fd5b5060405161502b38038061502b833981016040819052602b916077565b5f80546001600160a01b031916339081178255604051839282917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350608052503060a052608d565b5f602082840312156086575f80fd5b5051919050565b60805160a051614f766100b55f395f6117e201525f818161220b01526122490152614f765ff3fe6080604052600436106101fb575f3560e01c80635a6bcfda11610113578063a58411941161009d578063f135baaa1161006d578063f135baaa14610641578063f2fde38b14610660578063f3cd914c1461067f578063f5298aca1461069e578063fe99049a146106bd575f80fd5b8063a5841194146105ab578063b6363cf2146105ca578063dbd035ff14610603578063f02de3b214610622575f80fd5b806380f0b44c116100e357806380f0b44c146104ed5780638161b8741461050c5780638da5cb5b1461052b57806397e8cd4e146105615780639bf6645f1461058c575f80fd5b80635a6bcfda1461046657806360460f061461049a578063695c5bf5146104af5780637e87ce7d146104ce575f80fd5b8063234266d711610194578063426a849311610164578063426a8493146103a157806348c89491146103c057806352759651146103ec578063558a72971461040b578063598af9e71461042a575f80fd5b8063234266d7146103245780632d7713891461034357806335fd631a146103625780633dd45adb1461038e575f80fd5b80630b0d9c09116101cf5780630b0d9c09146102bd57806311da60b4146102de578063156e29f6146102e65780631e2eaeaf14610305575f80fd5b8062fdd58e146101ff57806301ffc9a71461024857806307eff0dd14610277578063095bcdb61461029e575b5f80fd5b34801561020a575f80fd5b50610235610219366004614397565b600460209081525f928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b348015610253575f80fd5b506102676102623660046143c1565b6106dc565b604051901515815260200161023f565b348015610282575f80fd5b5061028b600181565b60405160029190910b815260200161023f565b3480156102a9575f80fd5b506102676102b83660046143e8565b610712565b3480156102c8575f80fd5b506102dc6102d736600461441a565b6107b9565b005b61023561080a565b3480156102f1575f80fd5b506102dc6103003660046143e8565b61083c565b348015610310575f80fd5b5061023561031f366004614458565b610887565b34801561032f575f80fd5b5061023561033e3660046145d7565b610891565b34801561034e575f80fd5b506102dc61035d36600461463b565b610941565b34801561036d575f80fd5b5061038161037c366004614656565b6109d7565b60405161023f9190614676565b61023561039c36600461463b565b610a14565b3480156103ac575f80fd5b506102676103bb3660046143e8565b610a46565b3480156103cb575f80fd5b506103df6103da3660046146b8565b610aaa565b60405161023f91906146f6565b3480156103f7575f80fd5b506102dc61040636600461472b565b610b6d565b348015610416575f80fd5b5061026761042536600461476c565b610bdc565b348015610435575f80fd5b5061023561044436600461441a565b600560209081525f938452604080852082529284528284209052825290205481565b348015610471575f80fd5b50610485610480366004614796565b610c4b565b6040805192835260208301919091520161023f565b3480156104a5575f80fd5b5061028b617fff81565b3480156104ba575f80fd5b5061028b6104c9366004614838565b610dde565b3480156104d9575f80fd5b506102dc6104e836600461472b565b610fcd565b3480156104f8575f80fd5b506102dc610507366004614397565b61107f565b348015610517575f80fd5b5061023561052636600461441a565b6110f2565b348015610536575f80fd5b505f54610549906001600160a01b031681565b6040516001600160a01b03909116815260200161023f565b34801561056c575f80fd5b5061023561057b36600461463b565b60016020525f908152604090205481565b348015610597575f80fd5b506103816105a636600461487f565b611181565b3480156105b6575f80fd5b506102dc6105c536600461463b565b6111ba565b3480156105d5575f80fd5b506102676105e43660046148ee565b600360209081525f928352604080842090915290825290205460ff1681565b34801561060e575f80fd5b5061038161061d36600461487f565b6111f6565b34801561062d575f80fd5b50600254610549906001600160a01b031681565b34801561064c575f80fd5b5061023561065b366004614458565b61122d565b34801561066b575f80fd5b506102dc61067a36600461463b565b611237565b34801561068a575f80fd5b50610235610699366004614925565b6112c9565b3480156106a9575f80fd5b506102dc6106b83660046143e8565b61140f565b3480156106c8575f80fd5b506102676106d73660046149c3565b611454565b5f6301ffc9a760e01b6001600160e01b03198316148061070c5750630f632fb360e01b6001600160e01b03198316145b92915050565b335f90815260046020908152604080832085845290915281208054839190839061073d908490614a1a565b90915550506001600160a01b0384165f90815260046020908152604080832086845290915281208054849290610774908490614a2d565b909155505060408051338082526020820185905285926001600160a01b038816925f80516020614ee183398151915291015b60405180910390a45060015b9392505050565b5f80516020614f018339815191525c6107dc576107dc6354e3ca0d60e01b6115b3565b6107f1836107e9836115bb565b5f03336115db565b6108056001600160a01b038416838361162e565b505050565b5f5f80516020614f018339815191525c61082e5761082e6354e3ca0d60e01b6115b3565b610837336116c2565b905090565b5f80516020614f018339815191525c61085f5761085f6354e3ca0d60e01b6115b3565b8161086d816107e9846115bb565b610881846001600160a01b03831684611765565b50505050565b5f81545f5260205ff35b5f5f80516020614f018339815191525c6108b5576108b56354e3ca0d60e01b6115b3565b6108bd6117d7565b5f6108dc6108cc8860a0902090565b5f90815260066020526040902090565b90506108e781611819565b6080870151610903906001600160a01b0316888888888861183d565b61090e8187876118ba565b915061091b87833361196d565b6080870151610937906001600160a01b03168888888888611995565b5095945050505050565b5f546001600160a01b0316331461098e5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040517fb4bd8ef53df690b9943d3318996006dbb82a25f54719d8c8035b516a2a5b8acc905f90a250565b6060604051808360051b6020835284602084015260408301925080830190505b855483526020830192506001860195508083106109f75781810382f35b5f5f80516020614f018339815191525c610a3857610a386354e3ca0d60e01b6115b3565b61070c826116c2565b919050565b335f8181526005602090815260408083206001600160a01b03881680855290835281842087855290925280832085905551919285927fb3fd5071835887567a0671151121894ddccc2842f1d10bedad13e0d17cace9a7906107a69087815260200190565b60605f80516020614f018339815191525c15610ad057610ad06328486b6360e11b6115b3565b610ad8611a07565b6040516348eeb9a360e11b815233906391dd734690610afd9086908690600401614a68565b5f604051808303815f875af1158015610b18573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b3f9190810190614a7b565b90505f80516020614f218339815191525c15610b6557610b65635212cba160e01b6115b3565b61070c611a1a565b604082015162ffffff1662800000141580610b9e575081608001516001600160a01b0316336001600160a01b031614155b15610bb357610bb36330d2164160e01b6115b3565b610bc18162ffffff16611a2c565b60a082205f8181526006602052604090206108059083611a52565b335f8181526003602090815260408083206001600160a01b038716808552908352818420805460ff191687151590811790915591519182529293917fceb576d9f15e4e200fdb5096d64d5dfd667e16def20c1eefd14256d8e3faa267910160405180910390a350600192915050565b5f805f80516020614f018339815191525c610c7057610c706354e3ca0d60e01b6115b3565b610c786117d7565b60a086205f818152600660205260409020610c9281611819565b6080880151610cad906001600160a01b031689898989611a6d565b5f610d146040518060c00160405280336001600160a01b031681526020018a5f015160020b81526020018a6020015160020b8152602001610cf18b60400151611b6f565b600f0b81526060808d015160020b60208301528b01516040909101528390611b8b565b94509050610d228185611f05565b9450336001600160a01b0316837f541c041c2cce48e614b3de043c9280f06b6164c0a1741649e2de3c3d375f79748a5f01518b602001518c60400151604051610d8693929190600293840b81529190920b6020820152604081019190915260600190565b60405180910390a360808901515f90610dac906001600160a01b03168b8b898c8c611f38565b90965090508015610dc657610dc68a828c6080015161196d565b610dd18a873361196d565b5050505094509492505050565b5f610de76117d7565b6060850151617fff60029190910b1315610e12576060850151610e12906316e0049f60e31b90612057565b600160020b856060015160020b1215610e3c576060850151610e3c90631d3d20b160e31b90612057565b845160208601516001600160a01b03908116911610610e6e5784516020860151610e6e916306e6c98360e41b91612066565b610e92856040015186608001516001600160a01b031661208890919063ffffffff16565b610ead576080850151610ead90630732d7b560e51b90612149565b5f610ec0866040015162ffffff1661215e565b6080870151909150610ede906001600160a01b031687878787612183565b60a086205f610eec886121f4565b5f848152600660205260409020909250610f099150888386612326565b6080890151909450610f28906001600160a01b03168989878a8a612385565b87602001516001600160a01b0316885f01516001600160a01b0316837fdd466e674ea557f56295e2d0218a125ea4b4f0f6f3307b95f85e6110838d64388b604001518c606001518d608001518d8b604051610fba95949392919062ffffff959095168552600293840b60208601526001600160a01b03928316604086015291166060840152900b608082015260a00190565b60405180910390a4505050949350505050565b6002546001600160a01b03163314610fef57610fef6348f5c3ed60e01b6115b3565b6103e9610fff821610623e900062fff0008316101661101e5761101e63a7abe2f760e01b62ffffff8316612149565b60a082206110408261103a835f90815260066020526040902090565b906123f8565b60405162ffffff8316815281907fe9c42593e71f84403b84352cd168d693e2c9fcd1fdbcc3feb21d92b43e6696f99060200160405180910390a2505050565b5f80516020614f018339815191525c6110a2576110a26354e3ca0d60e01b6115b3565b335f9081526001600160a01b038316602052604081205c906110c3836115bb565b90508181600f0b146110df576110df63bda73abf60e01b6115b3565b610881846110ec83614b0d565b336115db565b6002545f906001600160a01b03163314611116576111166348f5c3ed60e01b6115b3565b8115611122578161113b565b6001600160a01b0383165f908152600160205260409020545b6001600160a01b0384165f90815260016020526040812080549293508392909190611167908490614a1a565b909155506107b290506001600160a01b038416858361162e565b606060405180602082528360208301526040820191508360051b8201855b80355c84526020938401930181841061119f575b5081810382f35b6111c261240d565b6001600160a01b0381166111d35750565b5f6111e6826001600160a01b0316612441565b90506111f282826124bd565b5050565b606060405180602082528360208301526040820191508360051b8201855b803554845260209384019301818410156111b357611214565b5f815c5f5260205ff35b5f546001600160a01b0316331461127f5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610985565b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f5f80516020614f018339815191525c6112ed576112ed6354e3ca0d60e01b6115b3565b6112f56117d7565b83602001515f036113105761131063be8b850760e01b6115b3565b60a085205f81815260066020526040902061132a81611819565b60808701515f908190819061134b906001600160a01b03168b8b8b8b6124fd565b8093508195508294505050506113ba84866040518060a001604052808e6060015160020b81526020018d5f0151151581526020018681526020018d604001516001600160a01b031681526020018562ffffff168152508c5f01516113b3578d60200151612619565b8d51612619565b60808b01519096505f92506113de91506001600160a01b03168a8a888b8b88612707565b909550905080156113f8576113f889828b6080015161196d565b61140389863361196d565b50505050949350505050565b5f80516020614f018339815191525c611432576114326354e3ca0d60e01b6115b3565b81611440816110ec846115bb565b610881846001600160a01b0383168461282a565b5f336001600160a01b0386161480159061149157506001600160a01b0385165f90815260036020908152604080832033845290915290205460ff16155b15611501576001600160a01b0385165f90815260056020908152604080832033845282528083208684529091529020545f1981146114ff576114d38382614a1a565b6001600160a01b0387165f90815260056020908152604080832033845282528083208884529091529020555b505b6001600160a01b0385165f90815260046020908152604080832086845290915281208054849290611533908490614a1a565b90915550506001600160a01b0384165f9081526004602090815260408083208684529091528120805484929061156a908490614a2d565b9091555050604080513381526020810184905284916001600160a01b0380881692908916915f80516020614ee1833981519152910160405180910390a45060015b949350505050565b805f5260045ffd5b5f6001607f1b82106115d7576115d76393dafdf160e01b6115b3565b5090565b81600f0b5f036115ea57505050565b5f806116006001600160a01b03861684866128e8565b91509150805f0361161857611613612921565b611627565b815f0361162757611627612949565b5050505050565b5f6001600160a01b038416611661575f805f8085875af190508061165c5761165c6356cdd02560e11b612971565b610881565b60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f6040820152508061088157610881632745a14f60e21b612971565b5f5f80516020614ec18339815191525c6001600160a01b0381166116e85734915061174c565b34156116fe576116fe6319d245cf60e01b6115b3565b7f1e0745a7db1623981f0b2a5d4232364c00787266eb75ad546f190e6cebe9bd955c5f6117336001600160a01b038416612441565b905061173f8282614a1a565b935061174961299e565b50505b61175f81611759846115bb565b856115db565b50919050565b6001600160a01b0383165f90815260046020908152604080832085845290915281208054839290611797908490614a2d565b9091555050604080513381526020810183905283916001600160a01b038616915f915f80516020614ee183398151915291015b60405180910390a4505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611817576118176306c4a1c760e11b6115b3565b565b80546001600160a01b03165f0361183a5761183a63486aa30760e01b6115b3565b50565b85336001600160a01b038216146118b15760208716156118b1576118af33878787878760405160240161187596959493929190614b74565b60408051601f198184030181529190526020810180516001600160e01b0316635b54587d60e11b1790526001600160a01b038916906129b0565b505b50505050505050565b60038301545f906001600160801b03168082036118e1576118e163a74f97ab60e01b6115b3565b61190f6118ed856115bb565b5f036118f8856115bb565b5f0360809190911b6001600160801b039091161790565b9150831561193b5761192f84600160801b836001600160801b0316612a40565b60018601805490910190555b82156119655761195983600160801b836001600160801b0316612a40565b60028601805490910190555b509392505050565b82516119839061197d8460801d90565b836115db565b610805836020015161197d84600f0b90565b85336001600160a01b038216146118b15760108716156118b1576118af3387878787876040516024016119cd96959493929190614b74565b60408051601f198184030181529190526020810180516001600160e01b031663e1b4af6960e01b1790526001600160a01b038916906129b0565b60015f80516020614f018339815191525d565b5f5f80516020614f018339815191525d565b620f424062ffffff8216111561183a5761183a631400211360e01b62ffffff8316612149565b611a5b82611819565b8154611a679082612adc565b90915550565b84336001600160a01b03821614611b67575f8460400151138015611a945750610800861615155b15611af557611aef3386868686604051602401611ab5959493929190614bbe565b60408051601f198184030181529190526020810180516001600160e01b031663259982e560e01b1790526001600160a01b038816906129b0565b50611b67565b5f846040015113158015611b0c5750610200861615155b15611b67576118b13386868686604051602401611b2d959493929190614bbe565b60408051601f198184030181529190526020810180516001600160e01b031663021d0ee760e41b1790526001600160a01b038816906129b0565b505050505050565b80600f81900b8114610a4157610a416393dafdf160e01b6115b3565b6060810151602082015160408301515f9283929091611baa8282612af7565b604080516080810182525f80825260208201819052918101829052606081019190915283600f0b5f14611cef57611be38884865f612b57565b6001600160801b0316602083015215158152611c028883866001612b57565b6001600160801b03166060830152151560408201525f600f85900b12611cb4575f611c52886080015160020b620d89e7198190058102620d89e8829005820203056001016001600160801b030490565b9050806001600160801b031682602001516001600160801b03161115611c8357611c8363b8e3c38560e01b85612057565b806001600160801b031682606001516001600160801b03161115611cb257611cb263b8e3c38560e01b84612057565b505b805115611cd0576080870151611cd09060058a01908590612c11565b806040015115611cef576080870151611cef9060058a01908490612c11565b5f80611cfc8a8686612c63565b8a5160a08c015160408051602681019290925260068083018a9052600383018b9052928252603a600c8301205f838301819052602080850182905293819052908152928f01909152812092945090925080611d59838a8787612d17565b91509150611d85611d69836115bb565b611d72836115bb565b6001600160801b031660809190911b1790565b995050505050505f84600f0b1215611dee57805115611dc157600283810b5f90815260048a016020526040812081815560018101829055909101555b806040015115611dee57600282810b5f90815260048a016020526040812081815560018101829055909101555b5082600f0b5f14611efb5786545f80611e0a8360a01c60020b90565b6001600160a01b038416915091508460020b8260020b1215611e5957611e52611e4c611e47611e3888612dd0565b611e4188612dd0565b8a613088565b611b6f565b60801b90565b9750611ef7565b8360020b8260020b1215611ed257611e90611e7a611e4783611e4188612dd0565b611d72611e47611e8989612dd0565b858b6130c0565b60038b0154909850611eab906001600160801b0316876130ec565b60038b0180546001600160801b0319166001600160801b0392909216919091179055611ef7565b611ef45f611d72611e47611ee589612dd0565b611eee89612dd0565b8b6130c0565b97505b5050505b5050509250929050565b5f608082811d9084901d01600f83810b9085900b01611f2f611f2683611b6f565b611d7283611b6f565b95945050505050565b5f806001600160a01b0388163303611f5457508390505f61204c565b8491505f86604001511315611fe057610400881615611fdb57611fcc338888888888604051602401611f8b96959493929190614c1e565b60408051601f198184030181529190526020810180516001600160e01b0316625a2a8160e81b17905260028a1615155b6001600160a01b038b169190613113565b9050611fd88282613154565b91505b61204c565b61010088161561204c5761203d33888888888860405160240161200896959493929190614c1e565b60408051601f198184030181529190526020810180516001600160e01b03166346d95b2960e11b17905260018a161515611fbb565b90506120498282613154565b91505b965096945050505050565b815f528060020b60045260245ffd5b825f526001600160a01b0382166004526001600160a01b03811660245260445ffd5b5f6080831615801561209c57506008831615155b156120a857505f61070c565b604083161580156120bb57506004831615155b156120c757505f61070c565b61040083161580156120db57506002831615155b156120e757505f61070c565b61010083161580156120fb57506001831615155b1561210757505f61070c565b6001600160a01b0383161561213857613fff831615158061213357506280000062ffffff8316146107b2565b6107b2565b5062ffffff16628000001415919050565b815f526001600160a01b03811660045260245ffd5b5f6280000062ffffff83160361217557505f919050565b6115d78262ffffff16611a2c565b84336001600160a01b03821614611b6757612000861615611b67576118b133868686866040516024016121ba959493929190614c85565b60408051601f198184030181529190526020810180516001600160e01b03166301a206c160e51b1790526001600160a01b038816906129b0565b6002545f9081906001600160a01b031615612321577f00000000000000000000000000000000000000000000000000000000000000005a101561224157612241630f724b8160e11b6115b3565b6002546040517f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0316905f90612283908790602401614cc6565b60408051601f198184030181529190526020810180516001600160e01b031663553bfc3760e01b17815281519192505f918291829190828789f13d60201416955085156122da576040513d5f823e805191505f8152505b8580156122eb57508062ffffff1681145b801561230857506103e9610fff821610623e900062fff000831610165b612313575f80612317565b6001815b9096509450505050505b915091565b83545f906001600160a01b03161561234857612348637983c05160e01b6115b3565b61235184613175565b905061237a826123748561236e6001600160a01b03891686613460565b9061347b565b90612adc565b909455509192915050565b85336001600160a01b038216146118b1576110008716156118b1576118af3387878787876040516024016123be96959493929190614cd4565b60408051601f198184030181529190526020810180516001600160e01b031663a910f80f60e01b1790526001600160a01b038916906129b0565b61240182611819565b8154611a67908261347b565b61242d5f80516020614ec18339815191525c6001600160a01b0316613496565b6118175761181763996caf6560e01b6115b3565b5f6001600160a01b038216612457575047919050565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015612499573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061070c9190614d1d565b6001600160a01b0382165f80516020614ec18339815191525d807f1e0745a7db1623981f0b2a5d4232364c00787266eb75ad546f190e6cebe9bd955d5050565b60208301515f806001600160a01b038816330361251c575f915061260e565b608088161561260e575f61257289338a8a8a8a604051602401612543959493929190614d34565b60408051601f198184030181529190526020810180516001600160e01b03166315d7892d60e21b1790526129b0565b9050805160601461258d5761258d631e048e1d60e01b6115b3565b604088015162ffffff1662800000036125a857606081015191505b600889161561260c57604081015192505f6125c38460801d90565b905080600f0b5f1461260a575f85126125e0600f83900b87614d8d565b9550806125ef575f86126125f3565b5f86135b1561260857612608637d05b8eb60e11b6115b3565b505b505b505b955095509592505050565b5f8080808061262889886134a7565b93509350935093505f831115612656576001600160a01b0386165f9081526001602052604090208054840190555b33887f40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112f6126838760801d90565b61268d88600f0b90565b60408087015160a0880151606089015192516126f2959493908b90600f96870b81529490950b60208501526001600160a01b039290921660408401526001600160801b0316606083015260020b608082015262ffffff9190911660a082015260c00190565b60405180910390a35091979650505050505050565b5f806001600160a01b038916330361272357508490505f61281e565b5f61272e8460801d90565b90505f61273b85600f0b90565b905060408b16156127b5576127a8611e47338c8c8c8c8c60405160240161276796959493929190614db4565b60408051601f198184030181529190526020810180516001600160e01b031663b47b2fb160e01b17905260048e1615156001600160a01b038f169190613113565b6127b29082614e14565b90505b5f81600f0b5f1415806127cb575082600f0b5f14155b1561281657895160208b01515f13901515146127f6576001600160801b038316608083901b17612807565b6001600160801b038216608084901b175b90506128138982613154565b98505b889450925050505b97509795505050505050565b336001600160a01b038416811480159061286957506001600160a01b038085165f9081526003602090815260408083209385168352929052205460ff16155b156128dd576001600160a01b038085165f9081526005602090815260408083209385168352928152828220868352905220545f1981146128db576128ad8382614a1a565b6001600160a01b038087165f9081526005602090815260408083209387168352928152828220888352905220555b505b610881848484613b54565b6001600160a01b038281165f90815290841660205260408120805c9190612913600f85900b84614d8d565b915081815d50935093915050565b5f80516020614f218339815191525c600181039050805f80516020614f218339815191525d50565b5f80516020614f218339815191525c600181019050805f80516020614f218339815191525d50565b3d60405182815260206004820152816024820152815f604483013e602080601f8401040260440191508181fd5b5f5f80516020614ec18339815191525d565b60605f805f8451602086015f885af19050806129d6576129d663fb6a608160e01b612971565b6040519150601f19603f3d011682016040523d82523d5f602084013e602082511080612a24575060208301516001600160e01b031916612a17836020015190565b6001600160e01b03191614155b15612a3957612a39631e048e1d60e01b6115b3565b5092915050565b5f838302815f1985870982811083820303915050808411612a5f575f80fd5b805f03612a71575082900490506107b2565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b60d01b62ffffff60d01b1662ffffff60d01b19919091161790565b8060020b8260020b12612b1657612b1663c4433ed560e01b8383613bbd565b620d89e719600283900b1215612b3757612b3763d5e2f7ab60e01b83612057565b620d89e8600282900b13156111f2576111f263035aeeff60e31b82612057565b600283900b5f908152600485016020526040812080548291906001600160801b0381169060801d612b8882886130ec565b6001600160801b03808216159084168015919091141596509094505f03612bd257885460a01c60020b60020b8860020b13612bd2576001808a0154908401556002808a0154908401555b5f86612be757612be28883614e14565b612bf1565b612bf18883614e41565b90508060801b6001600160801b0386161784555050505094509492505050565b600291820b910b80820715612c3e5760405163d4d8f3e681528260208201528160408201526044601c8201fd5b80820591508160081d5f528260205260405f20600160ff84161b815418815550505050565b600282810b5f81815260048601602052604080822085850b83529082208754929485949293919260a09290921c900b90811215612cb9578160010154836001015403945081600201548360020154039350612d0c565b8560020b8160020b12612ce5578260010154826001015403945082600201548260020154039350612d0c565b81600101548360010154896001015403039450816002015483600201548960020154030393505b505050935093915050565b83545f9081906001600160801b0316600f86900b8203612d5657806001600160801b03165f03612d5157612d51632bbfae4960e21b6115b3565b612d7c565b612d6081876130ec565b87546001600160801b0319166001600160801b03919091161787555b612d9a87600101548603826001600160801b0316600160801b612a40565b9250612dba87600201548503826001600160801b0316600160801b612a40565b6001880195909555505060029094015591929050565b60020b5f60ff82901d80830118620d89e8811115612df957612df96345c3193d60e11b84612057565b7001fffcb933bd6fad37aa2d162d1a5940016001821602600160801b186002821615612e35576ffff97272373d413259a46990580e213a0260801c5b6004821615612e54576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612e73576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612e92576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612eb1576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612ed0576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612eef576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612f0f576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612f2f576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612f4f576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612f6f576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612f8f576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612faf576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612fcf576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612fef576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615613010576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615613030576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561304f576d2216e584f5fa1ea926041bedfe980260801c5b6208000082161561306c576b048a170391f7dc42444e8fa20260801c5b5f841315613078575f19045b63ffffffff0160201c9392505050565b5f8082600f0b126130af576130a86130a38585856001613bda565b613c9d565b5f036115ab565b6115ab6130a38585855f035f613bda565b5f8082600f0b126130db576130a86130a38585856001613cb6565b6115ab6130a38585855f035f613cb6565b6001600160801b038216600f82900b01608081901c1561070c576393dafdf15f526004601cfd5b5f8061311f85856129b0565b90508261312f575f9150506107b2565b805160401461314857613148631e048e1d60e01b6115b3565b60400151949350505050565b5f608082811d9084901d03600f83810b9085900b03611f2f611f2683611b6f565b5f73fffd8963efd1fc6a506488495d951d51639616826401000276a21983016001600160a01b031611156131b4576131b46318521d4960e21b83612149565b640100000000600160c01b03602083901b166001600160801b03811160071b81811c6001600160401b03811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c9790881196179094179092171790911717176080811061324757607f810383901c9150613251565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b1461345157886001600160a01b031661343682612dd0565b6001600160a01b0316111561344b5781613453565b80613453565b815b9998505050505050505050565b60a01b62ffffff60a01b1662ffffff60a01b19919091161790565b60b81b62ffffff60b81b1662ffffff60b81b19919091161790565b5f6001600160a01b0382161561070c565b6040805160c0810182525f80825260208201819052918101829052606081018290526080810182905260a08101829052819081908554602086015160038801546001600160801b03165f8261350457610fff60c485901c1661350e565b610fff60b885901c165b60408a81015187525f60208801526001600160a01b0386169087015260a085901c60020b606087015261ffff1690508261354c578960020154613552565b89600101545b6080868101919091526001600160801b03831660a08701528901515f9062400000166135875760d085901c62ffffff16613599565b6135998a6080015162ffffff16613d02565b905081156135c757620f424062ffffff821661ffff84168181028381061515939004929092019101036135c9565b805b60408b01519097505f13905062ffffff8716620f42401480156135ea575080155b156135ff576135ff634b10312360e11b6115b3565b89604001515f0361361a575f80985098505050505050613b4b565b83156136985760608a01516001600160a01b03868116911610613659576136596001600160a01b0386165b60608c0151637c9c6e8f60e01b9190613d11565b6401000276a36001600160a01b03168a606001516001600160a01b031610156136935760608a015161369390639e4d7cc760e01b90612149565b613709565b60608a01516001600160a01b038681169116116136c1576136c16001600160a01b038616613645565b73fffd8963efd1fc6a506488495d951d5263988d266001600160a01b03168a606001516001600160a01b0316106137095760608a015161370990639e4d7cc760e01b90612149565b6040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c08101919091525b8651158061376957508a606001516001600160a01b031687604001516001600160a01b0316145b613a545760408701516001600160a01b0316815260608701518b516137939160058f019188613d3a565b1515604083015260020b60208201819052620d89e719126137b957620d89e71960208201525b620d89e860020b816020015160020b126137d757620d89e860208201525b6137e48160200151612dd0565b6001600160a01b03908116606083810182905260408a0151908e0151613825939192911680821891811160ff8a1618919091021860a08a01518a518c613e23565b60c085015260a084015260808301526001600160a01b0316604088015281613889576138548160a00151613c9d565b875103875260c08101516080820151613870916130a391614a2d565b876020018181516138819190614e6e565b9052506138c4565b61389c8160c00151826080015101613c9d565b875101875260a08101516138af90613c9d565b876020018181516138c09190614d8d565b9052505b8215613900575f620f4240848360c0015184608001510102816138e9576138e9614e8d565b60c084018051929091049182900390529990990198505b60a08701516001600160801b03161561393f576139338160c00151600160801b8960a001516001600160801b0316612a40565b60808801805190910190525b80606001516001600160a01b031687604001516001600160a01b031603613a1957806040015115613a01575f8086613980578d60010154896080015161398b565b88608001518e600201545b915091505f6139d68f85602001518585600292830b5f90815260049094016020526040909320600181018054909203909155908101805490920390915554600160801b9004600f0b90565b905087156139e1575f035b6139ef8a60a00151826130ec565b6001600160801b031660a08b01525050505b602081015160ff8616900360020b6060880152613742565b805f01516001600160a01b031687604001516001600160a01b031614613a4f57613a468760400151613175565b60020b60608801525b613742565b613a8c8760400151613a7389606001518961346090919063ffffffff16565b6001600160a01b0319166001600160a01b039091161790565b8c5560a08701516001600160801b03858116911614613acc5760a087015160038d0180546001600160801b0319166001600160801b039092169190911790555b84613ae057608087015160028d0155613aeb565b608087015160018d01555b81151585151514613b1f57613b18613b068860200151611b6f565b611d72895f01518e6040015103611b6f565b9950613b44565b613b41613b34885f01518d6040015103611b6f565b611d728960200151611b6f565b99505b5050505050505b92959194509250565b6001600160a01b0383165f90815260046020908152604080832085845290915281208054839290613b86908490614a1a565b9091555050604080513381526020810183905283915f916001600160a01b038716915f80516020614ee183398151915291016117ca565b6040518381528260020b60048201528160020b6024820152604481fd5b5f836001600160a01b0316856001600160a01b03161115613bf9579293925b6001600160a01b038516613c135762bfc9215f526004601cfd5b600160601b600160e01b03606084901b166001600160a01b038686031683613c6657866001600160a01b0316613c538383896001600160a01b0316612a40565b81613c6057613c60614e8d565b04613c92565b613c92613c7d8383896001600160a01b0316613fa9565b886001600160a01b0316808204910615150190565b979650505050505050565b805f811215610a4157610a416393dafdf160e01b6115b3565b5f6001600160a01b038481169086160360ff81901d90810118600160601b6001600160801b038516613ce9818484612a40565b9350845f83858409111684019350505050949350505050565b62bfffff8116610a4181611a2c565b6040518381526001600160a01b03831660048201526001600160a01b0382166024820152604481fd5b5f80600284810b9086900b8181078313919005038315613db557600281900b60081d600181810b5f90815260208a905260409020545f1960ff85168381019390931b01908116801515955085613d9757888360ff16860302613daa565b88613da182613fd9565b840360ff168603025b965050505050613e19565b6001908101600281900b60081d80830b5f90815260208a905260409020545f1960ff841694851b011990811680151595509293919285613dff57888360ff0360ff16860102613e12565b8883613e0a83614069565b0360ff168601025b9650505050505b5094509492505050565b5f80808062ffffff85166001600160a01b03808a16908b1610158288128015613f1c575f613e5c8a5f0385620f424003620f4240612a40565b905082613e7557613e708d8d8d6001613cb6565b613e82565b613e828c8e8d6001613bda565b9650868110613eb6578b9750620f42408414613ead57613ea8878586620f424003613fa9565b613eaf565b865b9450613ef2565b613ec28d8c8386614104565b975082613edb57613ed68d898d6001613cb6565b613ee8565b613ee8888e8d6001613bda565b9650868a5f030394505b82613f0857613f038d898d5f613bda565b613f14565b613f14888e8d5f613cb6565b955050613f9a565b81613f3257613f2d8c8c8c5f613bda565b613f3e565b613f3e8b8d8c5f613cb6565b9450848910613f4f578a9650613f61565b889450613f5e8c8b8785614152565b96505b81613f7857613f738c888c6001613cb6565b613f85565b613f85878d8c6001613bda565b9550613f97868485620f424003613fa9565b93505b50505095509550955095915050565b5f613fb5848484612a40565b90508180613fc557613fc5614e8d565b838509156107b257600101806107b2575f80fd5b5f808211613fe5575f80fd5b507f0706060506020504060203020504030106050205030304010505030400000000601f6f8421084210842108cc6318c6db6d54be831560081b6001600160801b03851160071b1784811c6001600160401b031060061b1784811c63ffffffff1060051b1784811c61ffff1060041b1784811c60ff1060031b1793841c1c161a1790565b5f808211614075575f80fd5b507e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b150316040581196001019091166101e07f804040554300526644320000502061067405302602000010750620017611707760fc7fb6db6db6ddddddddd34d34d349249249210842108c6318c639ce739cffffffff840260f81c161b60f71c1690811c63d76453e004601f169190911a1790565b5f6001600160801b038416156001600160a01b03861615171561412e57634f2461b85f526004601cfd5b81614145576141408585856001614195565b611f2f565b611f2f8585856001614280565b5f6001600160801b038416156001600160a01b03861615171561417c57634f2461b85f526004601cfd5b8161418d576141408585855f614280565b611f2f8585855f5b5f8115614205575f6001600160a01b038411156141c9576141c484600160601b876001600160801b0316612a40565b6141e0565b6141e06001600160801b038616606086901b614ea1565b90506141fd6141f8826001600160a01b038916614a2d565b614362565b9150506115ab565b5f6001600160a01b038411156142325761422d84600160601b876001600160801b0316613fa9565b61424f565b61424f606085901b6001600160801b038716808204910615150190565b9050806001600160a01b0387161161426e57634323a5555f526004601cfd5b6001600160a01b0386160390506115ab565b5f825f0361428f5750836115ab565b600160601b600160e01b03606085901b168215614321576001600160a01b038616848102908582816142c3576142c3614e8d565b04036142f3578181018281106142f1576142e783896001600160a01b031683613fa9565b93505050506115ab565b505b506141fd818561430c6001600160a01b038a1683614ea1565b6143169190614a2d565b808204910615150190565b6001600160a01b0386168481029085820414818311166143485763f5c787f15f526004601cfd5b8082036142e76141f8846001600160a01b038b1684613fa9565b806001600160a01b0381168114610a4157610a416393dafdf160e01b6115b3565b6001600160a01b038116811461183a575f80fd5b5f80604083850312156143a8575f80fd5b82356143b381614383565b946020939093013593505050565b5f602082840312156143d1575f80fd5b81356001600160e01b0319811681146107b2575f80fd5b5f805f606084860312156143fa575f80fd5b833561440581614383565b95602085013595506040909401359392505050565b5f805f6060848603121561442c575f80fd5b833561443781614383565b9250602084013561444781614383565b929592945050506040919091013590565b5f60208284031215614468575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156144a5576144a561446f565b60405290565b604051601f8201601f191681016001600160401b03811182821017156144d3576144d361446f565b604052919050565b803562ffffff81168114610a41575f80fd5b8035600281900b8114610a41575f80fd5b5f60a0828403121561450e575f80fd5b60405160a081016001600160401b03811182821017156145305761453061446f565b604052905080823561454181614383565b8152602083013561455181614383565b6020820152614562604084016144db565b6040820152614573606084016144ed565b6060820152608083013561458681614383565b6080919091015292915050565b5f8083601f8401126145a3575f80fd5b5081356001600160401b038111156145b9575f80fd5b6020830191508360208285010111156145d0575f80fd5b9250929050565b5f805f805f61010086880312156145ec575f80fd5b6145f687876144fe565b945060a0860135935060c0860135925060e08601356001600160401b0381111561461e575f80fd5b61462a88828901614593565b969995985093965092949392505050565b5f6020828403121561464b575f80fd5b81356107b281614383565b5f8060408385031215614667575f80fd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b818110156146ad57835183526020938401939092019160010161468f565b509095945050505050565b5f80602083850312156146c9575f80fd5b82356001600160401b038111156146de575f80fd5b6146ea85828601614593565b90969095509350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060c0838503121561473c575f80fd5b61474684846144fe565b915061475460a084016144db565b90509250929050565b80358015158114610a41575f80fd5b5f806040838503121561477d575f80fd5b823561478881614383565b91506147546020840161475d565b5f805f808486036101408112156147ab575f80fd5b6147b587876144fe565b94506080609f19820112156147c8575f80fd5b506147d1614483565b6147dd60a087016144ed565b81526147eb60c087016144ed565b602082015260e08601356040820152610100860135606082015292506101208501356001600160401b03811115614820575f80fd5b61482c87828801614593565b95989497509550505050565b5f805f8060e0858703121561484b575f80fd5b61485586866144fe565b935060a085013561486581614383565b925060c08501356001600160401b03811115614820575f80fd5b5f8060208385031215614890575f80fd5b82356001600160401b038111156148a5575f80fd5b8301601f810185136148b5575f80fd5b80356001600160401b038111156148ca575f80fd5b8560208260051b84010111156148de575f80fd5b6020919091019590945092505050565b5f80604083850312156148ff575f80fd5b823561490a81614383565b9150602083013561491a81614383565b809150509250929050565b5f805f8084860361012081121561493a575f80fd5b61494487876144fe565b94506060609f1982011215614957575f80fd5b50604051606081016001600160401b038111828210171561497a5761497a61446f565b60405261498960a0870161475d565b815260c0860135602082015260e08601356149a381614383565b604082015292506101008501356001600160401b03811115614820575f80fd5b5f805f80608085870312156149d6575f80fd5b84356149e181614383565b935060208501356149f181614383565b93969395505050506040820135916060013590565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561070c5761070c614a06565b8082018082111561070c5761070c614a06565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f6115ab602083018486614a40565b5f60208284031215614a8b575f80fd5b81516001600160401b03811115614aa0575f80fd5b8201601f81018413614ab0575f80fd5b80516001600160401b03811115614ac957614ac961446f565b614adc601f8201601f19166020016144ab565b818152856020838501011115614af0575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f81600f0b60016001607f1b03198103614b2957614b29614a06565b5f0392915050565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b6001600160a01b0387168152614b8d6020820187614b31565b8460c08201528360e08201526101206101008201525f614bb261012083018486614a40565b98975050505050505050565b6001600160a01b0386168152614bd76020820186614b31565b8351600290810b60c08301526020850151900b60e0820152604084015161010082015260608401516101208201526101606101408201525f613c9261016083018486614a40565b6001600160a01b0387168152614c376020820187614b31565b8451600290810b60c08301526020860151900b60e082015260408501516101008201526060850151610120820152836101408201526101806101608201525f614bb261018083018486614a40565b6001600160a01b0386168152614c9e6020820186614b31565b6001600160a01b03841660c082015261010060e082018190525f90613c929083018486614a40565b60a0810161070c8284614b31565b6001600160a01b0387168152614ced6020820187614b31565b60018060a01b03851660c08201528360020b60e08201526101206101008201525f614bb261012083018486614a40565b5f60208284031215614d2d575f80fd5b5051919050565b6001600160a01b0386168152614d4d6020820186614b31565b8351151560c0820152602084015160e082015260408401516001600160a01b03166101008201526101406101208201525f613c9261014083018486614a40565b8082018281125f831280158216821582161715614dac57614dac614a06565b505092915050565b6001600160a01b0387168152614dcd6020820187614b31565b8451151560c0820152602085015160e082015260408501516001600160a01b0316610100820152836101208201526101606101408201525f614bb261016083018486614a40565b600f81810b9083900b0160016001607f1b03811360016001607f1b03198212171561070c5761070c614a06565b600f82810b9082900b0360016001607f1b0319811260016001607f1b038213171561070c5761070c614a06565b8181035f831280158383131683831282161715612a3957612a39614a06565b634e487b7160e01b5f52601260045260245ffd5b5f82614ebb57634e487b7160e01b5f52601260045260245ffd5b50049056fe27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b91b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac728859c090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab237d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0ba2646970667358221220c720af38850bace8901ec0c414e9cc6b7600fdc66c58c62bb119ab202e9502fe64736f6c634300081a003360a0604052348015600e575f80fd5b506040516116ad3803806116ad833981016040819052602b91603b565b6001600160a01b03166080526066565b5f60208284031215604a575f80fd5b81516001600160a01b0381168114605f575f80fd5b9392505050565b6080516115e46100c95f395f818160790152818160f50152818161022d01528181610294015281816102c501528181610390015281816104fa01528181610550015281816105bf015281816106100152818161077a01526107ad01526115e45ff3fe60806040526004361061003e575f3560e01c80630a5b11e414610042578063481c6a75146100685780635a6bcfda146100b357806391dd7346146100c6575b5f80fd5b610055610050366004611035565b6100f2565b6040519081526020015b60405180910390f35b348015610073575f80fd5b5061009b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161005f565b6100556100c13660046110bb565b61020a565b3480156100d1575f80fd5b506100e56100e0366004611118565b610220565b60405161005f91906111b2565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348c894916040518060c00160405280336001600160a01b03168152602001898152602001888152602001878152602001861515815260200185151581525060405160200161016c919061120e565b6040516020818303038152906040526040518263ffffffff1660e01b815260040161019791906111b2565b5f604051808303815f875af11580156101b2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526101d991908101906112aa565b8060200190518101906101ec919061131e565b9050478015610200576102005f3383610662565b5095945050505050565b5f6102188484845f806100f2565b949350505050565b6060336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610256575f80fd5b5f61026383850185611335565b90505f6102be610278836020015160a0902090565b6040840151805160208201516060909201516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693923092916106fc565b505090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635a6bcfda8460200151856040015186606001516040518463ffffffff1660e01b815260040161031f939291906113fc565b60408051808303815f875af115801561033a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061035e919061144b565b5090505f6103ba610374856020015160a0902090565b6040860151805160208201516060909201516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693923092916106fc565b505090505f6103d485602001515f0151865f015130610753565b925050505f6103ef866020015160200151875f015130610753565b9250505082600f0b86604001516040015186600f0b61040e9190611481565b1461045f5760405162461bcd60e51b815260206004820152601a60248201527f6c6971756964697479206368616e676520696e636f7272656374000000000000604482015260640160405180910390fd5b5f86604001516040015112156104a7575f82138061047c57505f81135b610488576104886114a8565b5f82128061049557505f81125b156104a2576104a26114a8565b6104ea565b5f86604001516040015113156104ea575f8212806104c457505f81125b6104d0576104d06114a8565b5f8213806104dd57505f81135b156104ea576104ea6114a8565b5f821215610540578551610540907f000000000000000000000000000000000000000000000000000000000000000090610523856114bc565b60808a015160208b0151516001600160a01b0316939291906107df565b5f811215610598578551610598907f000000000000000000000000000000000000000000000000000000000000000090610579846114bc565b60808a01516020808c015101516001600160a01b0316939291906107df565b5f8213156105e757855160a08701516020880151516105e7926001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000091908690610aab565b5f81131561063857855160a08701516020808901510151610638926001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000091908590610aab565b60408051602081018690520160405160208183030381529060405296505050505050505b92915050565b5f6001600160a01b038416610695575f805f8085875af1905080610690576106906356cdd02560e11b610b7d565b6106f6565b60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f604082015250806106f6576106f6632745a14f60e21b610b7d565b50505050565b60408051602681018390526006810184905260038101859052858152603a600c8201205f9282018390526020820183905290829052819081906107408a8a83610baa565b919c909b50909950975050505050505050565b5f80806107696001600160a01b03871686610c4d565b925061079e6001600160a01b0387167f0000000000000000000000000000000000000000000000000000000000000000610c4d565b91506107d46001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168588610cdc565b905093509350939050565b801561087457836001600160a01b031663f5298aca8461080e886001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015b5f604051808303815f87803b158015610859575f80fd5b505af115801561086b573d5f803e3d5ffd5b50505050610aa4565b6001600160a01b0385166108eb57836001600160a01b03166311da60b4836040518263ffffffff1660e01b815260040160206040518083038185885af11580156108c0573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906108e5919061131e565b50610aa4565b604051632961046560e21b81526001600160a01b03868116600483015285169063a5841194906024015f604051808303815f87803b15801561092b575f80fd5b505af115801561093d573d5f803e3d5ffd5b505050506001600160a01b03831630146109cf576040516323b872dd60e01b81526001600160a01b0384811660048301528581166024830152604482018490528616906323b872dd906064016020604051808303815f875af11580156109a5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109c991906114d6565b50610a41565b60405163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905286169063a9059cbb906044016020604051808303815f875af1158015610a1b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a3f91906114d6565b505b836001600160a01b03166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610a7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa2919061131e565b505b5050505050565b80610aed57604051630b0d9c0960e01b81526001600160a01b038681166004830152848116602483015260448201849052851690630b0d9c0990606401610842565b836001600160a01b031663156e29f684610b16886001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015f604051808303815f87803b158015610b60575f80fd5b505af1158015610b72573d5f803e3d5ffd5b505050505050505050565b3d60405182815260206004820152816024820152815f604483013e602080601f8401040260440191508181fd5b5f805f80610bb88686610d73565b604051631afeb18d60e11b815260048101829052600360248201529091505f906001600160a01b038916906335fd631a906044015f60405180830381865afa158015610c06573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c2d91908101906114f1565b60208101516040820151606090920151909a919950975095505050505050565b5f6001600160a01b038316610c6d57506001600160a01b0381163161065c565b6040516370a0823160e01b81526001600160a01b0383811660048301528416906370a0823190602401602060405180830381865afa158015610cb1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd5919061131e565b905061065c565b5f806001600160a01b0384165f526001600160a01b03831660205260405f209050846001600160a01b031663f135baaa826040518263ffffffff1660e01b8152600401610d2b91815260200190565b602060405180830381865afa158015610d46573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d6a919061131e565b95945050505050565b5f80610d7e84610dc3565b90505f610d8c60068361159b565b6040805160208101879052908101829052909150606001604051602081830303815290604052805190602001209250505092915050565b6040515f90610de2908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b0381118282101715610e3557610e35610dff565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610e6357610e63610dff565b604052919050565b6001600160a01b0381168114610e7f575f80fd5b50565b8035600281900b8114610e93575f80fd5b919050565b5f60a08284031215610ea8575f80fd5b60405160a081016001600160401b0381118282101715610eca57610eca610dff565b6040529050808235610edb81610e6b565b81526020830135610eeb81610e6b565b6020820152604083013562ffffff81168114610f05575f80fd5b6040820152610f1660608401610e82565b60608201526080830135610f2981610e6b565b6080919091015292915050565b5f60808284031215610f46575f80fd5b604051608081016001600160401b0381118282101715610f6857610f68610dff565b604052905080610f7783610e82565b8152610f8560208401610e82565b602082015260408301356040820152606083013560608201525092915050565b5f6001600160401b03821115610fbd57610fbd610dff565b50601f01601f191660200190565b5f82601f830112610fda575f80fd5b8135610fed610fe882610fa5565b610e3b565b818152846020838601011115611001575f80fd5b816020850160208301375f918101602001919091529392505050565b8015158114610e7f575f80fd5b8035610e938161101d565b5f805f805f610180868803121561104a575f80fd5b6110548787610e98565b94506110638760a08801610f36565b93506101208601356001600160401b0381111561107e575f80fd5b61108a88828901610fcb565b93505061014086013561109c8161101d565b91506101608601356110ad8161101d565b809150509295509295909350565b5f805f61014084860312156110ce575f80fd5b6110d88585610e98565b92506110e78560a08601610f36565b91506101208401356001600160401b03811115611102575f80fd5b61110e86828701610fcb565b9150509250925092565b5f8060208385031215611129575f80fd5b82356001600160401b0381111561113e575f80fd5b8301601f8101851361114e575f80fd5b80356001600160401b03811115611163575f80fd5b856020828401011115611174575f80fd5b6020919091019590945092505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111c46020830184611184565b9392505050565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b602080825282516001600160a01b0316828201528201515f9061123460408401826111cb565b506040838101518051600290810b60e08601526020820151900b610100850152908101516101208401526060908101516101408401528301516101a06101608401526112846101c0840182611184565b90506080840151151561018084015260a084015115156101a08401528091505092915050565b5f602082840312156112ba575f80fd5b81516001600160401b038111156112cf575f80fd5b8201601f810184136112df575f80fd5b80516112ed610fe882610fa5565b818152856020838501011115611301575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f6020828403121561132e575f80fd5b5051919050565b5f60208284031215611345575f80fd5b81356001600160401b0381111561135a575f80fd5b82016101a0818503121561136c575f80fd5b611374610e13565b813561137f81610e6b565b815261138e8560208401610e98565b60208201526113a08560c08401610f36565b60408201526101408201356001600160401b038111156113be575f80fd5b6113ca86828501610fcb565b6060830152506113dd610160830161102a565b60808201526113ef610180830161102a565b60a0820152949350505050565b61140681856111cb565b8251600290810b60a08301526020840151900b60c0820152604083015160e082015260608301516101008201526101406101208201525f610d6a610140830184611184565b5f806040838503121561145c575f80fd5b505080516020909101519092909150565b634e487b7160e01b5f52601160045260245ffd5b8082018281125f8312801582168215821617156114a0576114a061146d565b505092915050565b634e487b7160e01b5f52600160045260245ffd5b5f600160ff1b82016114d0576114d061146d565b505f0390565b5f602082840312156114e6575f80fd5b81516111c48161101d565b5f60208284031215611501575f80fd5b81516001600160401b03811115611516575f80fd5b8201601f81018413611526575f80fd5b80516001600160401b0381111561153f5761153f610dff565b8060051b61154f60208201610e3b565b9182526020818401810192908101908784111561156a575f80fd5b6020850194505b8385101561159057845180835260209586019590935090910190611571565b979650505050505050565b8082018082111561065c5761065c61146d56fea2646970667358221220022bb587431beddd1b3a2d4e57eee388a80ee14cf23bcb0c201ec0029fc9cb7a64736f6c634300081a003360a0604052348015600e575f80fd5b506040516117d43803806117d4833981016040819052602b91603b565b6001600160a01b03166080526066565b5f60208284031215604a575f80fd5b81516001600160a01b0381168114605f575f80fd5b9392505050565b6080516117196100bb5f395f8181606e0152818160d7015281816101ee0152818161030001528181610888015281816108e10152818161095e015281816109b201528181610ac50152610af801526117195ff3fe608060405260043610610033575f3560e01c80632229d0b414610037578063481c6a751461005d57806391dd7346146100a8575b5f80fd5b61004a610045366004611286565b6100d4565b6040519081526020015b60405180910390f35b348015610068575f80fd5b506100907f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610054565b3480156100b3575f80fd5b506100c76100c23660046112f7565b6101e1565b6040516100549190611393565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166348c894916040518060a00160405280336001600160a01b031681526020018681526020018881526020018781526020018581525060405160200161014491906113ef565b6040516020818303038152906040526040518263ffffffff1660e01b815260040161016f9190611393565b5f604051808303815f875af115801561018a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526101b19190810190611480565b8060200190518101906101c491906114f5565b90504780156101d8576101d85f3383610a04565b50949350505050565b6060336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610217575f80fd5b5f6102248385018561150c565b90505f61023c82604001515f0151835f015130610a9e565b925050505f610257836040015160200151845f015130610a9e565b92505050815f146102af5760405162461bcd60e51b815260206004820152601e60248201527f64656c74614265666f726530206973206e6f7420657175616c20746f2030000060448201526064015b60405180910390fd5b80156102fd5760405162461bcd60e51b815260206004820152601e60248201527f64656c74614265666f726531206973206e6f7420657175616c20746f2030000060448201526064016102a6565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f3cd914c8560400151866060015187608001516040518463ffffffff1660e01b815260040161035a939291906115c4565b6020604051808303815f875af1158015610376573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061039a91906114f5565b90505f6103b285604001515f0151865f015130610a9e565b925050505f6103cd866040015160200151875f015130610a9e565b9250505085606001515f01511561062f575f86606001516020015112156105125785606001516020015182121561047c5760405162461bcd60e51b815260206004820152604760248201527f64656c7461416674657230206973206e6f742067726561746572207468616e2060448201527f6f7220657175616c20746f20646174612e706172616d732e616d6f756e7453706064820152661958da599a595960ca1b608482015260a4016102a6565b816104878460801d90565b600f0b146104a75760405162461bcd60e51b81526004016102a69061160c565b5f81121561050d5760405162461bcd60e51b815260206004820152602d60248201527f64656c7461416674657231206973206e6f742067726561746572207468616e2060448201526c06f7220657175616c20746f203609c1b60648201526084016102a6565b610878565b5f8213156105785760405162461bcd60e51b815260206004820152602d60248201527f64656c7461416674657230206973206e6f74206c657373207468616e206f722060448201526c657175616c20746f207a65726f60981b60648201526084016102a6565b8061058384600f0b90565b600f0b146105a35760405162461bcd60e51b81526004016102a690611657565b85606001516020015181131561050d5760405162461bcd60e51b8152602060048201526044602482018190527f64656c7461416674657231206973206e6f74206c657373207468616e206f7220908201527f657175616c20746f20646174612e706172616d732e616d6f756e745370656369606482015263199a595960e21b608482015260a4016102a6565b5f866060015160200151121561075e578560600151602001518112156106cd5760405162461bcd60e51b815260206004820152604760248201527f64656c7461416674657231206973206e6f742067726561746572207468616e2060448201527f6f7220657175616c20746f20646174612e706172616d732e616d6f756e7453706064820152661958da599a595960ca1b608482015260a4016102a6565b806106d884600f0b90565b600f0b146106f85760405162461bcd60e51b81526004016102a690611657565b5f82121561050d5760405162461bcd60e51b815260206004820152602d60248201527f64656c7461416674657230206973206e6f742067726561746572207468616e2060448201526c06f7220657175616c20746f203609c1b60648201526084016102a6565b5f8113156107c15760405162461bcd60e51b815260206004820152602a60248201527f64656c7461416674657231206973206e6f74206c657373207468616e206f72206044820152690657175616c20746f20360b41b60648201526084016102a6565b816107cc8460801d90565b600f0b146107ec5760405162461bcd60e51b81526004016102a69061160c565b8560600151602001518213156108785760405162461bcd60e51b8152602060048201526044602482018190527f64656c7461416674657230206973206e6f74206c657373207468616e206f7220908201527f657175616c20746f20646174612e706172616d732e616d6f756e745370656369606482015263199a595960e21b608482015260a4016102a6565b5f8212156108d15785516108d1907f0000000000000000000000000000000000000000000000000000000000000000906108b1856116a2565b6020808b0151015160408b0151516001600160a01b031693929190610b2a565b5f811215610936578551610936907f00000000000000000000000000000000000000000000000000000000000000009061090a846116a2565b8960200151602001518a60400151602001516001600160a01b0316610b2a90949392919063ffffffff16565b5f821315610986578551602087015151604088015151610986926001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000091908690610df6565b5f8113156109da578551602080880151516040890151909101516109da926001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000091908590610df6565b60408051602081018590520160405160208183030381529060405296505050505050505b92915050565b5f6001600160a01b038416610a37575f805f8085875af1905080610a3257610a326356cdd02560e11b610ec8565b610a98565b60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f60408201525080610a9857610a98632745a14f60e21b610ec8565b50505050565b5f8080610ab46001600160a01b03871686610ef5565b9250610ae96001600160a01b0387167f0000000000000000000000000000000000000000000000000000000000000000610ef5565b9150610b1f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168588610f84565b905093509350939050565b8015610bbf57836001600160a01b031663f5298aca84610b59886001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015b5f604051808303815f87803b158015610ba4575f80fd5b505af1158015610bb6573d5f803e3d5ffd5b50505050610def565b6001600160a01b038516610c3657836001600160a01b03166311da60b4836040518263ffffffff1660e01b815260040160206040518083038185885af1158015610c0b573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610c3091906114f5565b50610def565b604051632961046560e21b81526001600160a01b03868116600483015285169063a5841194906024015f604051808303815f87803b158015610c76575f80fd5b505af1158015610c88573d5f803e3d5ffd5b505050506001600160a01b0383163014610d1a576040516323b872dd60e01b81526001600160a01b0384811660048301528581166024830152604482018490528616906323b872dd906064016020604051808303815f875af1158015610cf0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d1491906116c8565b50610d8c565b60405163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905286169063a9059cbb906044016020604051808303815f875af1158015610d66573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d8a91906116c8565b505b836001600160a01b03166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610dc9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ded91906114f5565b505b5050505050565b80610e3857604051630b0d9c0960e01b81526001600160a01b038681166004830152848116602483015260448201849052851690630b0d9c0990606401610b8d565b836001600160a01b031663156e29f684610e61886001600160a01b03166001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604481018590526064015f604051808303815f87803b158015610eab575f80fd5b505af1158015610ebd573d5f803e3d5ffd5b505050505050505050565b3d60405182815260206004820152816024820152815f604483013e602080601f8401040260440191508181fd5b5f6001600160a01b038316610f1557506001600160a01b038116316109fe565b6040516370a0823160e01b81526001600160a01b0383811660048301528416906370a0823190602401602060405180830381865afa158015610f59573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7d91906114f5565b90506109fe565b5f806001600160a01b0384165f526001600160a01b03831660205260405f209050846001600160a01b031663f135baaa826040518263ffffffff1660e01b8152600401610fd391815260200190565b602060405180830381865afa158015610fee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101291906114f5565b95945050505050565b634e487b7160e01b5f52604160045260245ffd5b60405160a0810167ffffffffffffffff811182821017156110525761105261101b565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156110815761108161101b565b604052919050565b6001600160a01b038116811461109d575f80fd5b50565b80356110ab81611089565b919050565b5f60a082840312156110c0575f80fd5b6110c861102f565b905081356110d581611089565b815260208201356110e581611089565b6020820152604082013562ffffff811681146110ff575f80fd5b60408201526060820135600281900b8114611118575f80fd5b6060820152611129608083016110a0565b608082015292915050565b801515811461109d575f80fd5b5f60608284031215611151575f80fd5b6040516060810167ffffffffffffffff811182821017156111745761117461101b565b604052905080823561118581611134565b815260208381013590820152604083013561119f81611089565b6040919091015292915050565b5f604082840312156111bc575f80fd5b6040805190810167ffffffffffffffff811182821017156111df576111df61101b565b60405290508082356111f081611134565b8152602083013561120081611134565b6020919091015292915050565b5f67ffffffffffffffff8211156112265761122661101b565b50601f01601f191660200190565b5f82601f830112611243575f80fd5b81356112566112518261120d565b611058565b81815284602083860101111561126a575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f80610160858703121561129a575f80fd5b6112a486866110b0565b93506112b38660a08701611141565b92506112c38661010087016111ac565b915061014085013567ffffffffffffffff8111156112df575f80fd5b6112eb87828801611234565b91505092959194509250565b5f8060208385031215611308575f80fd5b823567ffffffffffffffff81111561131e575f80fd5b8301601f8101851361132e575f80fd5b803567ffffffffffffffff811115611344575f80fd5b856020828401011115611355575f80fd5b6020919091019590945092505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6113a56020830184611365565b9392505050565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b602080825282516001600160a01b0316828201528281015180511515604080850191909152910151151560608301528201515f9061143060808401826113ac565b506060830151805115156101208401526020810151610140840152604001516001600160a01b03166101608301526080830151610180808401526114786101a0840182611365565b949350505050565b5f60208284031215611490575f80fd5b815167ffffffffffffffff8111156114a6575f80fd5b8201601f810184136114b6575f80fd5b80516114c46112518261120d565b8181528560208385010111156114d8575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b5f60208284031215611505575f80fd5b5051919050565b5f6020828403121561151c575f80fd5b813567ffffffffffffffff811115611532575f80fd5b82016101808185031215611544575f80fd5b61154c61102f565b813561155781611089565b815261156685602084016111ac565b602082015261157885606084016110b0565b604082015261158b856101008401611141565b606082015261016082013567ffffffffffffffff8111156115aa575f80fd5b6115b686828501611234565b608083015250949350505050565b6115ce81856113ac565b8251151560a0820152602083015160c082015260408301516001600160a01b031660e08201526101206101008201525f611012610120830184611365565b6020808252602b908201527f64656c74612e616d6f756e74302829206973206e6f7420657175616c20746f2060408201526a064656c74614166746572360ac1b606082015260800190565b6020808252602b908201527f64656c74612e616d6f756e74312829206973206e6f7420657175616c20746f2060408201526a64656c746141667465723160a81b606082015260800190565b5f600160ff1b82016116c257634e487b7160e01b5f52601160045260245ffd5b505f0390565b5f602082840312156116d8575f80fd5b81516113a58161113456fea2646970667358221220ab101dfe4b4748d245c1716f79d45f12181b0ade83665d9ec819f86559f0b77264736f6c634300081a00336080604052348015600e575f80fd5b506105a08061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610055575f3560e01c806332c961d91461005957806357eb1da714610081578063769323e314610089578063b08d3fe214610091578063e631bcbf146100d1575b5f80fd5b61006e610067366004610386565b60a0902090565b6040519081526020015b60405180910390f35b61006e600681565b61006e600481565b6100a461009f366004610423565b61011c565b604080516001600160801b039095168552600f9390930b6020850152918301526060820152608001610078565b6100e46100df36600461045e565b6101d2565b604080516001600160a01b03909516855260029390930b602085015262ffffff91821692840192909252166060820152608001610078565b5f805f805f61012b8787610284565b604051631afeb18d60e11b815260048101829052600360248201529091505f906001600160a01b038a16906335fd631a906044015f60405180830381865afa158015610179573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526101a09190810190610488565b602081015160408201516060909201516001600160801b0382169c60809290921d9b5091995090975095505050505050565b5f805f805f6101e0866102d8565b604051631e2eaeaf60e01b8152600481018290529091505f906001600160a01b03891690631e2eaeaf90602401602060405180830381865afa158015610228573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061024c9190610534565b90506001600160a01b03811695508060a01c60020b945062ffffff8160b81c16935062ffffff8160d01c169250505092959194509250565b5f8061028f846102d8565b90505f61029d60048361054b565b60408051600287900b602082015290810182905290915060600160405160208183030381529060405280519060200120925050505b92915050565b6040515f906102f7908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561035157610351610314565b604052919050565b6001600160a01b038116811461036d575f80fd5b50565b8035600281900b8114610381575f80fd5b919050565b5f60a0828403128015610397575f80fd5b5060405160a0810167ffffffffffffffff811182821017156103bb576103bb610314565b60405282356103c981610359565b815260208301356103d981610359565b6020820152604083013562ffffff811681146103f3575f80fd5b604082015261040460608401610370565b6060820152608083013561041781610359565b60808201529392505050565b5f805f60608486031215610435575f80fd5b833561044081610359565b92506020840135915061045560408501610370565b90509250925092565b5f806040838503121561046f575f80fd5b823561047a81610359565b946020939093013593505050565b5f60208284031215610498575f80fd5b815167ffffffffffffffff8111156104ae575f80fd5b8201601f810184136104be575f80fd5b805167ffffffffffffffff8111156104d8576104d8610314565b8060051b6104e860208201610328565b91825260208184018101929081019087841115610503575f80fd5b6020850194505b838510156105295784518083526020958601959093509091019061050a565b979650505050505050565b5f60208284031215610544575f80fd5b5051919050565b808201808211156102d257634e487b7160e01b5f52601160045260245ffdfea26469706673582212200f59ae3b20597ee5b9c8afd86ef4272903aea11220ba5f5248dea7997a9f1cfe64736f6c634300081a003360e060405234801561000f575f80fd5b50604051610eea380380610eea83398101604081905261002e916101a1565b8282825f61003c84826102a2565b50600161004983826102a2565b5060ff81166080524660a05261005d61006c565b60c052506103cd945050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f60405161009c919061035c565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610127575f80fd5b81516001600160401b0381111561014057610140610104565b604051601f8201601f19908116603f011681016001600160401b038111828210171561016e5761016e610104565b604052818152838201602001851015610185575f80fd5b8160208501602083015e5f918101602001919091529392505050565b5f805f606084860312156101b3575f80fd5b83516001600160401b038111156101c8575f80fd5b6101d486828701610118565b602086015190945090506001600160401b038111156101f1575f80fd5b6101fd86828701610118565b925050604084015160ff81168114610213575f80fd5b809150509250925092565b600181811c9082168061023257607f821691505b60208210810361025057634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561029d57805f5260205f20601f840160051c8101602085101561027b5750805b601f840160051c820191505b8181101561029a575f8155600101610287565b50505b505050565b81516001600160401b038111156102bb576102bb610104565b6102cf816102c9845461021e565b84610256565b6020601f821160018114610301575f83156102ea5750848201515b5f19600385901b1c1916600184901b17845561029a565b5f84815260208120601f198516915b828110156103305787850151825560209485019460019092019101610310565b508482101561034d57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f8083546103698161021e565b6001821680156103805760018114610395576103c2565b60ff19831686528115158202860193506103c2565b865f5260205f205f5b838110156103ba5781548882015260019091019060200161039e565b505081860193505b509195945050505050565b60805160a05160c051610af36103f75f395f61044201525f61040d01525f61013f0152610af35ff3fe608060405234801561000f575f80fd5b50600436106100cb575f3560e01c806340c10f191161008857806395d89b411161006357806395d89b41146101cc578063a9059cbb146101d4578063d505accf146101e7578063dd62ed3e146101fc575f80fd5b806340c10f191461017b57806370a082311461018e5780637ecebe00146101ad575f80fd5b806306fdde03146100cf578063095ea7b3146100ed57806318160ddd1461011057806323b872dd14610127578063313ce5671461013a5780633644e51514610173575b5f80fd5b6100d7610226565b6040516100e4919061083f565b60405180910390f35b6101006100fb36600461088f565b6102b1565b60405190151581526020016100e4565b61011960025481565b6040519081526020016100e4565b6101006101353660046108b7565b61031d565b6101617f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020016100e4565b61011961040a565b61010061018936600461088f565b610464565b61011961019c3660046108f1565b60036020525f908152604090205481565b6101196101bb3660046108f1565b60056020525f908152604090205481565b6100d7610478565b6101006101e236600461088f565b610485565b6101fa6101f5366004610911565b6104fb565b005b61011961020a36600461097e565b600460209081525f928352604080842090915290825290205481565b5f8054610232906109af565b80601f016020809104026020016040519081016040528092919081815260200182805461025e906109af565b80156102a95780601f10610280576101008083540402835291602001916102a9565b820191905f5260205f20905b81548152906001019060200180831161028c57829003601f168201915b505050505081565b335f8181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061030b9086815260200190565b60405180910390a35060015b92915050565b6001600160a01b0383165f9081526004602090815260408083203384529091528120545f1981146103765761035283826109fb565b6001600160a01b0386165f9081526004602090815260408083203384529091529020555b6001600160a01b0385165f908152600360205260408120805485929061039d9084906109fb565b90915550506001600160a01b038085165f81815260036020526040908190208054870190555190918716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906103f79087815260200190565b60405180910390a3506001949350505050565b5f7f0000000000000000000000000000000000000000000000000000000000000000461461043f5761043a61073e565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b5f61046f83836107d6565b50600192915050565b60018054610232906109af565b335f908152600360205260408120805483919083906104a59084906109fb565b90915550506001600160a01b0383165f81815260036020526040908190208054850190555133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061030b9086815260200190565b428410156105505760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f4558504952454400000000000000000060448201526064015b60405180910390fd5b5f600161055b61040a565b6001600160a01b038a81165f8181526005602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98184015280840194909452938d166060840152608083018c905260a083019390935260c08083018b90528151808403909101815260e08301909152805192019190912061190160f01b6101008301526101028201929092526101228101919091526101420160408051601f1981840301815282825280516020918201205f84529083018083525260ff871690820152606081018590526080810184905260a0016020604051602081039080840390855afa158015610663573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116158015906106995750876001600160a01b0316816001600160a01b0316145b6106d65760405162461bcd60e51b815260206004820152600e60248201526d24a72b20a624a22fa9a4a3a722a960911b6044820152606401610547565b6001600160a01b039081165f9081526004602090815260408083208a8516808552908352928190208990555188815291928a16917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350505050505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f5f60405161076e9190610a0e565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b8060025f8282546107e79190610aaa565b90915550506001600160a01b0382165f818152600360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b038116811461088a575f80fd5b919050565b5f80604083850312156108a0575f80fd5b6108a983610874565b946020939093013593505050565b5f805f606084860312156108c9575f80fd5b6108d284610874565b92506108e060208501610874565b929592945050506040919091013590565b5f60208284031215610901575f80fd5b61090a82610874565b9392505050565b5f805f805f805f60e0888a031215610927575f80fd5b61093088610874565b965061093e60208901610874565b95506040880135945060608801359350608088013560ff81168114610961575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b5f806040838503121561098f575f80fd5b61099883610874565b91506109a660208401610874565b90509250929050565b600181811c908216806109c357607f821691505b6020821081036109e157634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610317576103176109e7565b5f8083545f8160011c90506001821680610a2957607f821691505b602082108103610a4757634e487b7160e01b5f52602260045260245ffd5b808015610a5b5760018114610a7057610a9e565b60ff1984168752821515830287019450610a9e565b5f888152602090205f5b84811015610a9657815489820152600190910190602001610a7a565b505082870194505b50929695505050505050565b80820180821115610317576103176109e756fea2646970667358221220f4620711d0f8649f80fed98a6eb335b7806c86e0ebaba0b9fa57daf20d6ed2f364736f6c634300081a00336080604052348015600e575f80fd5b50604051610521380380610521833981016040819052602b91607b565b5f80546001600160a01b039485166001600160a01b031991821617909155600180549390941692169190911790915560025560af565b80516001600160a01b03811681146076575f80fd5b919050565b5f805f60608486031215608c575f80fd5b6093846061565b9250609f602085016061565b9150604084015190509250925092565b610465806100bc5f395ff3fe608060405234801561000f575f80fd5b5060043610610055575f3560e01c806358dbbe811461005957806391b7f5ed14610089578063a035b1fe1461009e578063d004f0f7146100b5578063f5992699146100c8575b5f80fd5b60015461006c906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61009c6100973660046103c4565b6100da565b005b6100a760025481565b604051908152602001610080565b61009c6100c33660046103db565b610115565b5f5461006c906001600160a01b031681565b60028190556040518181527ff347ee99503bf19c028bd6b18f3c676e82a9bb5b2bb5225aebe0fd62fd6a0d199060200160405180910390a150565b5f805481906001600160a01b039081169085160361015257506001546002546001600160a01b039091169061014b90849061037e565b91506101c2565b6001546001600160a01b039081169085160361018557505f546002546001600160a01b039091169061014b908490610399565b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b60448201526064015b60405180910390fd5b6040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b038516906323b872dd906064016020604051808303815f875af1158015610212573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102369190610410565b6102745760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016101b9565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0382169063a9059cbb906044016020604051808303815f875af11580156102be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102e29190610410565b6103205760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016101b9565b604080516001600160a01b03808716825283166020820152908101849052606081018390523360808201527fb39c9bc43f811e1a7ce159c5f147458fdb80266bf23c17322013316e27e086d09060a00160405180910390a150505050565b5f6103928383670de0b6b3a76400006103a9565b9392505050565b5f61039283670de0b6b3a7640000845b5f825f1904841183021582026103bd575f80fd5b5091020490565b5f602082840312156103d4575f80fd5b5035919050565b5f80604083850312156103ec575f80fd5b82356001600160a01b0381168114610402575f80fd5b946020939093013593505050565b5f60208284031215610420575f80fd5b81518015158114610392575f80fdfea264697066735822122071f33bd4e906706fab2f1d579ad88e83e4a15cb735911cd69a3275ede2ed3ced64736f6c634300081a0033","sourceMap":"936:5358:53:-:0;;;1756:794;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1843:3;1827:20;;;;;:::i;:::-;508:25:57;;;496:2;481:18;1827:20:53;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1813:34:53;;;;;1866:40;;;;;:::i;:::-;-1:-1:-1;;;;;728:32:57;;;710:51;;698:2;683:18;1866:40:53;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1857:49:53;;;1946:11;;1929:29;;;;;:::i;:::-;-1:-1:-1;;;;;728:32:57;;;710:51;;698:2;683:18;1929:29:53;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1916:42:53;;;1978:13;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1968:23:53;;;2014:37;;2048:2;;2014:37;;;:::i;:::-;1110:2:57;1092:21;;;1149:1;1129:18;;;1122:29;-1:-1:-1;;;1182:3:57;1167:19;;1160:40;1238:3;1231:4;1216:20;;1209:33;;;1279:1;1258:19;;;1251:30;-1:-1:-1;;;1312:3:57;1297:19;;1290:33;1407:4;1395:17;;;-1:-1:-1;1375:18:57;;1368:45;1355:3;1340:19;2014:37:53;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2002:49:53;;;2073:37;;2107:2;;2073:37;;;:::i;:::-;1762:2:57;1744:21;;;1801:1;1781:18;;;1774:29;-1:-1:-1;;;1834:3:57;1819:19;;1812:40;1890:3;1883:4;1868:20;;1861:33;;;1931:1;1910:19;;;1903:30;-1:-1:-1;;;1964:3:57;1949:19;;1942:33;2059:4;2047:17;;;-1:-1:-1;2027:18:57;;2020:45;2007:3;1992:19;2073:37:53;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2061:49:53;;;;;;;2125:9;;:21;;;;2121:99;;;2188:9;;;2199;;;-1:-1:-1;;;;;2162:47:53;;;;;;;;;;2121:99;2263:9;;2283;;2295:12;2236:72;;;;;:::i;:::-;-1:-1:-1;;;;;2296:32:57;;;2278:51;;2365:32;;;;2360:2;2345:18;;2338:60;2429:2;2414:18;;2407:34;2266:2;2251:18;2236:72:53;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2230:78:53;;;;;2327:9;;:51;;-1:-1:-1;;;2327:51:53;;2350:4;2327:51;;;2653::57;2357:20:53;2720:18:57;;;2713:34;2327:14:53;;;;;2626:18:57;;2327:51:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2319:107;;;;-1:-1:-1;;;2319:107:53;;3242:2:57;2319:107:53;;;3224:21:57;3281:2;3261:18;;;3254:30;3320:34;3300:18;;;3293:62;-1:-1:-1;;;3371:18:57;;;3364:41;3422:19;;2319:107:53;;;;;;;;;2444:9;;:51;;-1:-1:-1;;;2444:51:53;;2467:4;2444:51;;;2653::57;2474:20:53;2720:18:57;;;2713:34;-1:-1:-1;;;;;2444:14:53;;;;;;2626:18:57;;2444:51:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2436:107;;;;-1:-1:-1;;;2436:107:53;;3654:2:57;2436:107:53;;;3636:21:57;3693:2;3673:18;;;3666:30;3732:34;3712:18;;;3705:62;-1:-1:-1;;;3783:18:57;;;3776:41;3834:19;;2436:107:53;3452:407:57;2436:107:53;1756:794;;936:5358;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;14:343:57:-;93:6;101;154:2;142:9;133:7;129:23;125:32;122:52;;;170:1;167;160:12;122:52;-1:-1:-1;;215:16:57;;321:2;306:18;;;300:25;215:16;;300:25;;-1:-1:-1;14:343:57:o;2758:277::-;2825:6;2878:2;2866:9;2857:7;2853:23;2849:32;2846:52;;;2894:1;2891;2884:12;2846:52;2926:9;2920:16;2979:5;2972:13;2965:21;2958:5;2955:32;2945:60;;3001:1;2998;2991:12;2945:60;3024:5;2758:277;-1:-1:-1;;;2758:277:57:o;3452:407::-;936:5358:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b50600436106100b1575f3560e01c806357eb1da71161006e57806357eb1da7146101dd5780636af577411461022657806391b7f5ed1461023957806396f5e27c1461024c578063b0f479a11461025f578063c7b8e15d14610285575f80fd5b806301480703146100b557806314ee36771461014f578063182148ef146101645780632ba31c53146101dd578063407bf6d2146101f3578063542524dd14610206575b5f80fd5b6100bd61028d565b604080518251600290810b82526020808501516001600160a01b03908116828501528585015181168486015260608087015181860152608080880151805184168288015293840151831660a0808801919091529684015162ffffff1660c08701529083015190930b60e08501529101518116610100830152919092015116610120820152610140015b60405180910390f35b61016261015d3660046112dd565b610561565b005b5f546001546002805461019d936001600160a01b03908116938082169362ffffff600160a01b83041693600160b81b909204900b911685565b604080516001600160a01b039687168152948616602086015262ffffff9093169284019290925260020b606083015291909116608082015260a001610146565b6101e5600681565b604051908152602001610146565b6101626102013660046113a4565b610b48565b61020e610fba565b6040516001600160a01b039091168152602001610146565b610162610234366004611430565b610fdc565b6101626102473660046112dd565b61113f565b61016261025a3660046114b3565b6111b7565b7f000000000000000000000000000000000000000000000000000000000000000061020e565b61020e611230565b6040805160c0810182525f80825260208083018290528284018290526060808401839052845160a080820187528482529281018490528086018490529081018390526080808201849052840152820181905291516332c961d960e01b815290919081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e631bcbf907f00000000000000000000000000000000000000000000000000000000000000009083906332c961d990610359908790600401611522565b602060405180830381865afa158015610374573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103989190611536565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401608060405180830381865afa1580156103df573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610403919061154d565b5050915091506040518060c001604052808260020b8152602001836001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104db9190611536565b81526040805160a0810182525f546001600160a01b03908116825260015480821660208481019190915262ffffff600160a01b83041684860152600160b81b909104600290810b606085015254821660808401528401919091527f0000000000000000000000000000000000000000000000000000000000000000169101529392505050565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af11580156105ed573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061061191906115a9565b6106625760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637930206661696c656400000060448201526064015b60405180910390fd5b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af11580156106ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061071291906115a9565b61075e5760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637931206661696c65640000006044820152606401610659565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e631bcbf7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166332c961d95f6040518263ffffffff1660e01b81526004016107fb9190611522565b602060405180830381865afa158015610816573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083a9190611536565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401608060405180830381865afa158015610881573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108a5919061154d565b50505090505f6108df826001600160a01b0316670de0b6b3a76400006108cb91906115dc565b836001600160a01b0316600160c01b611240565b90505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a035b1fe6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561093e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109629190611536565b905080821115610a4e5760408051606081018252600180825260208201879052915f919081016109986401000276a36001611612565b6001600160a01b039081169091526040805180820182525f80825260208201819052915163088a742d60e21b8152939450927f000000000000000000000000000000000000000000000000000000000000000090921691632229d0b491610a059186908690600401611631565b6020604051808303815f875af1158015610a21573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a459190611536565b50505050610b42565b80821015610b4257604080516060810182525f80825260208201879052918291908101610a90600173fffd8963efd1fc6a506488495d951d5263988d266115f3565b6001600160a01b039081169091526040805180820182525f80825260208201819052915163088a742d60e21b8152939450927f000000000000000000000000000000000000000000000000000000000000000090921691632229d0b491610afd9186908690600401611631565b6020604051808303815f875af1158015610b19573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3d9190611536565b505050505b50505050565b5f841315610d04576040516340c10f1960e01b8152306004820152602481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906340c10f19906044016020604051808303815f875af1158015610bba573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bde91906115a9565b610c2a5760405162461bcd60e51b815260206004820152601860248201527f4d696e74696e672063757272656e637930206661696c656400000000000000006044820152606401610659565b6040516340c10f1960e01b8152306004820152602481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906340c10f19906044016020604051808303815f875af1158015610c94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cb891906115a9565b610d045760405162461bcd60e51b815260206004820152601860248201527f4d696e74696e672063757272656e637931206661696c656400000000000000006044820152606401610659565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610d90573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610db491906115a9565b610e005760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637930206661696c65640000006044820152606401610659565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f1960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610e8c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eb091906115a9565b610efc5760405162461bcd60e51b815260206004820152601d60248201527f417070726f76616c20666f722063757272656e637931206661696c65640000006044820152606401610659565b60408051608081018252600285810b825284900b60208201528082018690525f606082018190529151632d35e7ed60e11b815290916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691635a6bcfda91610f7291859087906004016116bf565b6020604051808303815f875af1158015610f8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fb29190611536565b505050505050565b610fd9600173fffd8963efd1fc6a506488495d951d5263988d266115f3565b81565b6040805160a0810182527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081168083527f000000000000000000000000000000000000000000000000000000000000000082166020840181905262ffffff8a811685870181905260028b810b60608801528a861660809097018790525f80546001600160a01b03199081169096178155600180546001600160b81b031916909517600160a01b9093029290921762ffffff60b81b1916600160b81b938d16939093029290921790925580549092169093179055915163695c5bf560e01b81527f00000000000000000000000000000000000000000000000000000000000000009092169163695c5bf5916110ff9186908690600401611716565b6020604051808303815f875af115801561111b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fb29190611746565b6040516391b7f5ed60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906391b7f5ed906024015f604051808303815f87803b15801561119e575f80fd5b505af11580156111b0573d5f803e3d5ffd5b5050505050565b60405163d004f0f760e01b81526001600160a01b038381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063d004f0f7906044015f604051808303815f87803b15801561121e575f80fd5b505af1158015610fb2573d5f803e3d5ffd5b610fd96401000276a36001611612565b5f838302815f198587098281108382030391505080841161125f575f80fd5b805f03611271575082900490506112d6565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150505b9392505050565b5f602082840312156112ed575f80fd5b5035919050565b8060020b8114611302575f80fd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611328575f80fd5b813567ffffffffffffffff81111561134257611342611305565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561137157611371611305565b604052818152838201602001851015611388575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f80608085870312156113b7575f80fd5b8435935060208501356113c9816112f4565b925060408501356113d9816112f4565b9150606085013567ffffffffffffffff8111156113f4575f80fd5b61140087828801611319565b91505092959194509250565b62ffffff81168114611302575f80fd5b6001600160a01b0381168114611302575f80fd5b5f805f805f60a08688031215611444575f80fd5b853561144f8161140c565b9450602086013561145f816112f4565b9350604086013561146f8161141c565b9250606086013561147f8161141c565b9150608086013567ffffffffffffffff81111561149a575f80fd5b6114a688828901611319565b9150509295509295909350565b5f80604083850312156114c4575f80fd5b82356114cf8161141c565b946020939093013593505050565b80546001600160a01b0390811683526001820154808216602085015260a081901c62ffffff16604085015260b81c600290810b60608501529091015416608090910152565b60a0810161153082846114dd565b92915050565b5f60208284031215611546575f80fd5b5051919050565b5f805f8060808587031215611560575f80fd5b845161156b8161141c565b602086015190945061157c816112f4565b604086015190935061158d8161140c565b606086015190925061159e8161140c565b939692955090935050565b5f602082840312156115b9575f80fd5b815180151581146112d6575f80fd5b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417611530576115306115c8565b6001600160a01b038281168282160390811115611530576115306115c8565b6001600160a01b038181168382160190811115611530576115306115c8565b61163b81856114dd565b8251151560a082015260208084015160c08301526040909301516001600160a01b031660e082015281511515610100820152910151151561012082015261016061014082018190525f9082015261018001919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6116c981856114dd565b825160020b60a0820152602083015160020b60c0820152604083015160e082015260608301516101008201526101406101208201525f61170d610140830184611691565b95945050505050565b61172081856114dd565b6001600160a01b03831660a082015260e060c082018190525f9061170d90830184611691565b5f60208284031215611756575f80fd5b81516112d6816112f456fea2646970667358221220f2cdea43beb93a284b948a58623de230568d3ac92bf2c85a26a46cfe6f5dcf9764736f6c634300081a0033","sourceMap":"936:5358:53:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2654:422;;;:::i;:::-;;;;352:13:57;;349:1;338:28;;;320:47;;427:4;415:17;;;409:24;-1:-1:-1;;;;;405:50:57;;;383:20;;;376:80;504:17;;;498:24;494:50;;472:20;;;465:80;601:4;589:17;;;583:24;561:20;;;554:54;655:4;643:17;;;637:24;703:19;;699:45;;677:20;;;670:75;792:23;;;786:30;782:56;;443:3;761:19;;;754:85;;;;886:23;;;880:30;912:8;876:45;870:3;855:19;;848:74;979:23;;;973:30;959:45;;;953:3;938:19;;931:74;1052:23;;1046:30;1042:56;;1036:3;1021:19;;1014:85;1136:16;;;;1130:23;80:31;1212:6;1197:22;;68:44;307:3;292:19;2654:422:53;;;;;;;;3275:1674;;;;;;:::i;:::-;;:::i;:::-;;1230:22;;;;;;;;;;-1:-1:-1;;;;;1230:22:53;;;;;;;;;-1:-1:-1;;;1230:22:53;;;;-1:-1:-1;;;1230:22:53;;;;;;;;;;;;;-1:-1:-1;;;;;1807:32:57;;;1789:51;;1876:32;;;1871:2;1856:18;;1849:60;1957:8;1945:21;;;1925:18;;;1918:49;;;;2014:1;2003:21;1998:2;1983:18;;1976:49;2062:32;;;;2056:3;2041:19;;2034:61;1776:3;1761:19;1230:22:53;1461:640:57;1523:44:53;;1566:1;1523:44;;;;;2252:25:57;;;2240:2;2225:18;1523:44:53;2106:177:57;5409:883:53;;;;;;:::i;:::-;;:::i;1385:69::-;;;:::i;:::-;;;-1:-1:-1;;;;;4150:32:57;;;4132:51;;4120:2;4105:18;1385:69:53;3986:203:57;4955:448:53;;;;;;:::i;:::-;;:::i;3082:76::-;;;;;;:::i;:::-;;:::i;3164:105::-;;;;;;:::i;:::-;;:::i;2556:92::-;2634:6;2556:92;;1310:69;;;:::i;2654:422::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2796:21:53;;-1:-1:-1;;;2796:21:53;;-1:-1:-1;;;;;;;;;;2766:7:53;:16;;;;2783:11;;2766:16;;2796:12;;:21;;-1:-1:-1;;2796:21:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2766:52;;-1:-1:-1;;;;;;2766:52:53;;;;;;;-1:-1:-1;;;;;7649:32:57;;;2766:52:53;;;7631:51:57;7698:18;;;7691:34;7604:18;;2766:52:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2727:91;;;;;;2836:233;;;;;;;;2870:4;2836:233;;;;;;2902:12;-1:-1:-1;;;;;2836:233:53;;;;;2945:11;-1:-1:-1;;;;;2836:233:53;;;;;2981:3;-1:-1:-1;;;;;2981:9:53;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2836:233;;;;;;;;;;3012:7;2836:233;-1:-1:-1;;;;;2836:233:53;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2836:233:53;;;;;;;-1:-1:-1;;;2836:233:53;;;;;;;;;;;;;;;;;;;;;;;;3050:7;2836:233;;;;2829:240;2654:422;-1:-1:-1;;;2654:422:53:o;3275:1674::-;3337:57;;-1:-1:-1;;;3337:57:53;;-1:-1:-1;;;;;3363:10:53;7649:32:57;;3337:57:53;;;7631:51:57;-1:-1:-1;;7698:18:57;;;7691:34;3337:9:53;:17;;;;7604:18:57;;3337:57:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3329:99;;;;-1:-1:-1;;;3329:99:53;;9347:2:57;3329:99:53;;;9329:21:57;9386:2;9366:18;;;9359:30;9425:31;9405:18;;;9398:59;9474:18;;3329:99:53;;;;;;;;;3446:57;;-1:-1:-1;;;3446:57:53;;-1:-1:-1;;;;;3472:10:53;7649:32:57;;3446:57:53;;;7631:51:57;-1:-1:-1;;7698:18:57;;;7691:34;3446:9:53;:17;;;;7604:18:57;;3446:57:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3438:99;;;;-1:-1:-1;;;3438:99:53;;9705:2:57;3438:99:53;;;9687:21:57;9744:2;9724:18;;;9717:30;9783:31;9763:18;;;9756:59;9832:18;;3438:99:53;9503:353:57;3438:99:53;3549:20;3576:7;-1:-1:-1;;;;;3576:16:53;;3593:11;3606:7;-1:-1:-1;;;;;3606:12:53;;3619:7;3606:21;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3576:52;;-1:-1:-1;;;;;;3576:52:53;;;;;;;-1:-1:-1;;;;;7649:32:57;;;3576:52:53;;;7631:51:57;7698:18;;;7691:34;7604:18;;3576:52:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3548:80;;;;;3647:20;3670:80;3694:12;-1:-1:-1;;;;;3686:21:53;3710:6;3686:30;;;;:::i;:::-;3726:12;-1:-1:-1;;;;;3718:21:53;-1:-1:-1;;;3670:15:53;:80::i;:::-;3647:103;;3760:16;3779:3;-1:-1:-1;;;;;3779:9:53;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3760:30;;3820:8;3805:12;:23;3801:1142;;;3921:222;;;;;;;;3862:4;3921:222;;;;;;;;;3862:4;3844:15;;3921:222;;;1352:27;1586:10:40;1378:1:53;1352:27;:::i;:::-;-1:-1:-1;;;;;3921:222:53;;;;;;4222:70;;;;;;;;4158:45;4222:70;;;;;;;;;4307:50;;-1:-1:-1;;;4307:50:53;;3881:262;;-1:-1:-1;4222:70:53;4307:10;:15;;;;;;:50;;3881:262;;4222:70;;4307:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3830:539;;;3801:1142;;;4394:8;4379:12;:23;4375:568;;;4496:222;;;;;;;;4418:15;4496:222;;;;;;;;;4418:15;;;4496:222;;;1427:27;1453:1;1766:49:40;1427:27:53;:::i;:::-;-1:-1:-1;;;;;4496:222:53;;;;;;4797:70;;;;;;;;4733:45;4797:70;;;;;;;;;4882:50;;-1:-1:-1;;;4882:50:53;;4456:262;;-1:-1:-1;4797:70:53;4882:10;:15;;;;;;:50;;4456:262;;4797:70;;4882:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4404:539;;;4375:568;3319:1630;;;3275:1674;:::o;5409:883::-;5549:1;5532:14;:18;5528:245;;;5574:54;;-1:-1:-1;;;5574:54:53;;5597:4;5574:54;;;7631:51:57;7698:18;;;7691:34;;;5574:9:53;-1:-1:-1;;;;;5574:14:53;;;;7604:18:57;;5574:54:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5566:91;;;;-1:-1:-1;;;5566:91:53;;11969:2:57;5566:91:53;;;11951:21:57;12008:2;11988:18;;;11981:30;12047:26;12027:18;;;12020:54;12091:18;;5566:91:53;11767:348:57;5566:91:53;5679:54;;-1:-1:-1;;;5679:54:53;;5702:4;5679:54;;;7631:51:57;7698:18;;;7691:34;;;5679:9:53;-1:-1:-1;;;;;5679:14:53;;;;7604:18:57;;5679:54:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5671:91;;;;-1:-1:-1;;;5671:91:53;;12322:2:57;5671:91:53;;;12304:21:57;12361:2;12341:18;;;12334:30;12400:26;12380:18;;;12373:54;12444:18;;5671:91:53;12120:348:57;5671:91:53;5791:53;;-1:-1:-1;;;5791:53:53;;-1:-1:-1;;;;;5817:6:53;7649:32:57;;5791:53:53;;;7631:51:57;-1:-1:-1;;7698:18:57;;;7691:34;5791:9:53;:17;;;;7604:18:57;;5791:53:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5783:95;;;;-1:-1:-1;;;5783:95:53;;9347:2:57;5783:95:53;;;9329:21:57;9386:2;9366:18;;;9359:30;9425:31;9405:18;;;9398:59;9474:18;;5783:95:53;9145:353:57;5783:95:53;5896:53;;-1:-1:-1;;;5896:53:53;;-1:-1:-1;;;;;5922:6:53;7649:32:57;;5896:53:53;;;7631:51:57;-1:-1:-1;;7698:18:57;;;7691:34;5896:9:53;:17;;;;7604:18:57;;5896:53:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5888:95;;;;-1:-1:-1;;;5888:95:53;;9705:2:57;5888:95:53;;;9687:21:57;9744:2;9724:18;;;9717:30;9783:31;9763:18;;;9756:59;9832:18;;5888:95:53;9503:353:57;5888:95:53;6045:180;;;;;;;;;;;;;;;;;;;;;;;;;;;5994:48;6045:180;;;;;;6236:49;;-1:-1:-1;;;6236:49:53;;6045:180;;-1:-1:-1;;;;;6236:6:53;:22;;;;:49;;6045:180;;6276:8;;6236:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5518:774;5409:883;;;;:::o;1385:69::-;1427:27;1453:1;1766:49:40;1427:27:53;:::i;:::-;1385:69;:::o;4955:448::-;5105:225;;;;;;;;5160:9;-1:-1:-1;;;;;5105:225:53;;;;;;5218:9;5105:225;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5095:235:53;;-1:-1:-1;;;;;;5095:235:53;;;;;;;;-1:-1:-1;5095:235:53;;-1:-1:-1;;;;;;5095:235:53;;;;-1:-1:-1;;;5095:235:53;;;;;;;-1:-1:-1;;;;5095:235:53;-1:-1:-1;;;5095:235:53;;;;;;;;;;;;;;;;;;;;;;;;5341:55;;-1:-1:-1;;;5341:55:53;;:11;:22;;;;;;:55;;5373:12;;5387:8;;5341:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3082:76::-;3132:19;;-1:-1:-1;;;3132:19:53;;;;;2252:25:57;;;3132:3:53;-1:-1:-1;;;;;3132:12:53;;;;2225:18:57;;3132:19:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3082:76;:::o;3164:105::-;3235:27;;-1:-1:-1;;;3235:27:53;;-1:-1:-1;;;;;7649:32:57;;;3235:27:53;;;7631:51:57;7698:18;;;7691:34;;;3235:3:53;:8;;;;7604:18:57;;3235:27:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1310:69;1352:27;1586:10:40;1378:1:53;1352:27;:::i;741:4141:25:-;823:14;1212:5;;;823:14;-1:-1:-1;;1216:1:25;1212;1400:20;1473:5;1469:2;1466:13;1458:5;1454:2;1450:14;1446:34;1437:43;;;1633:5;1619:11;:19;1611:28;;;;;;1720:5;1729:1;1720:10;1716:177;;-1:-1:-1;1807:23:25;;;;-1:-1:-1;1865:13:25;;1716:177;2193:17;2293:11;2290:1;2287;2280:25;2701:12;2717:15;;;2716:31;;2869:22;;;;;3776:1;3757;:15;;3756:21;;4019:17;;;4015:21;;4008:28;4081:17;;;4077:21;;4070:28;4144:17;;;4140:21;;4133:28;4207:17;;;4203:21;;4196:28;4270:17;;;4266:21;;4259:28;4334:17;;;4330:21;;;4323:28;3313:12;;;;3309:23;;;3334:1;3305:31;2454:20;;;2443:32;;;3372:12;;;;2501:21;;;;3029:16;;;;3363:21;;;;4827:11;;;;;-1:-1:-1;;741:4141:25;;;;;;:::o;1231:225:57:-;1289:6;1342:2;1330:9;1321:7;1317:23;1313:32;1310:52;;;1358:1;1355;1348:12;1310:52;-1:-1:-1;1403:23:57;;1231:225;-1:-1:-1;1231:225:57:o;2288:118::-;2375:5;2372:1;2361:20;2354:5;2351:31;2341:59;;2396:1;2393;2386:12;2341:59;2288:118;:::o;2411:127::-;2472:10;2467:3;2463:20;2460:1;2453:31;2503:4;2500:1;2493:15;2527:4;2524:1;2517:15;2543:725;2585:5;2638:3;2631:4;2623:6;2619:17;2615:27;2605:55;;2656:1;2653;2646:12;2605:55;2696:6;2683:20;2726:18;2718:6;2715:30;2712:56;;;2748:18;;:::i;:::-;2797:2;2791:9;2889:2;2851:17;;-1:-1:-1;;2847:31:57;;;2880:2;2843:40;2839:54;2827:67;;2924:18;2909:34;;2945:22;;;2906:62;2903:88;;;2971:18;;:::i;:::-;3007:2;3000:22;3031;;;3072:19;;;3093:4;3068:30;3065:39;-1:-1:-1;3062:59:57;;;3117:1;3114;3107:12;3062:59;3181:6;3174:4;3166:6;3162:17;3155:4;3147:6;3143:17;3130:58;3236:1;3208:19;;;3229:4;3204:30;3197:41;;;;3212:6;2543:725;-1:-1:-1;;;2543:725:57:o;3273:708::-;3363:6;3371;3379;3387;3440:3;3428:9;3419:7;3415:23;3411:33;3408:53;;;3457:1;3454;3447:12;3408:53;3502:23;;;-1:-1:-1;3601:2:57;3586:18;;3573:32;3614:31;3573:32;3614:31;:::i;:::-;3664:7;-1:-1:-1;3723:2:57;3708:18;;3695:32;3736:31;3695:32;3736:31;:::i;:::-;3786:7;-1:-1:-1;3844:2:57;3829:18;;3816:32;3871:18;3860:30;;3857:50;;;3903:1;3900;3893:12;3857:50;3926:49;3967:7;3958:6;3947:9;3943:22;3926:49;:::i;:::-;3916:59;;;3273:708;;;;;;;:::o;4376:119::-;4461:8;4454:5;4450:20;4443:5;4440:31;4430:59;;4485:1;4482;4475:12;4500:139;-1:-1:-1;;;;;4583:31:57;;4573:42;;4563:70;;4629:1;4626;4619:12;4644:905;4760:6;4768;4776;4784;4792;4845:3;4833:9;4824:7;4820:23;4816:33;4813:53;;;4862:1;4859;4852:12;4813:53;4901:9;4888:23;4920:30;4944:5;4920:30;:::i;:::-;4969:5;-1:-1:-1;5026:2:57;5011:18;;4998:32;5039:31;4998:32;5039:31;:::i;:::-;5089:7;-1:-1:-1;5148:2:57;5133:18;;5120:32;5161:41;5120:32;5161:41;:::i;:::-;5221:7;-1:-1:-1;5280:2:57;5265:18;;5252:32;5293:41;5252:32;5293:41;:::i;:::-;5353:7;-1:-1:-1;5411:3:57;5396:19;;5383:33;5439:18;5428:30;;5425:50;;;5471:1;5468;5461:12;5425:50;5494:49;5535:7;5526:6;5515:9;5511:22;5494:49;:::i;:::-;5484:59;;;4644:905;;;;;;;;:::o;5785:375::-;5853:6;5861;5914:2;5902:9;5893:7;5889:23;5885:32;5882:52;;;5930:1;5927;5920:12;5882:52;5969:9;5956:23;5988:39;6021:5;5988:39;:::i;:::-;6046:5;6124:2;6109:18;;;;6096:32;;-1:-1:-1;;;5785:375:57:o;6373:555::-;6458:12;;-1:-1:-1;;;;;6454:38:57;;;6442:51;;6489:1;6525:16;;6519:23;6574:35;;;6567:4;6558:14;;6551:59;6480:3;6646:19;;;6667:8;6642:34;6635:4;6626:14;;6619:58;6727:3;6723:19;6720:1;6709:34;;;6702:4;6693:14;;6686:58;6769:13;;;6763:20;6828:28;6881:4;6872:14;;;6865:57;6373:555::o;6933:254::-;7116:3;7101:19;;7129:52;7105:9;7163:6;7129:52;:::i;:::-;6933:254;;;;:::o;7192:212::-;7290:6;7343:2;7331:9;7322:7;7318:23;7314:32;7311:52;;;7359:1;7356;7349:12;7311:52;-1:-1:-1;7382:16:57;;7192:212;-1:-1:-1;7192:212:57:o;7736:654::-;7829:6;7837;7845;7853;7906:3;7894:9;7885:7;7881:23;7877:33;7874:53;;;7923:1;7920;7913:12;7874:53;7955:9;7949:16;7974:39;8007:5;7974:39;:::i;:::-;8082:2;8067:18;;8061:25;8032:5;;-1:-1:-1;8095:31:57;8061:25;8095:31;:::i;:::-;8197:2;8182:18;;8176:25;8145:7;;-1:-1:-1;8210:32:57;8176:25;8210:32;:::i;:::-;8313:2;8298:18;;8292:25;8261:7;;-1:-1:-1;8326:32:57;8292:25;8326:32;:::i;:::-;7736:654;;;;-1:-1:-1;7736:654:57;;-1:-1:-1;;7736:654:57:o;8863:277::-;8930:6;8983:2;8971:9;8962:7;8958:23;8954:32;8951:52;;;8999:1;8996;8989:12;8951:52;9031:9;9025:16;9084:5;9077:13;9070:21;9063:5;9060:32;9050:60;;9106:1;9103;9096:12;9861:127;9922:10;9917:3;9913:20;9910:1;9903:31;9953:4;9950:1;9943:15;9977:4;9974:1;9967:15;9993:168;10066:9;;;10097;;10114:15;;;10108:22;;10094:37;10084:71;;10135:18;;:::i;10166:198::-;-1:-1:-1;;;;;10266:27:57;;;10237;;;10233:61;;10306:29;;10303:55;;;10338:18;;:::i;10369:195::-;-1:-1:-1;;;;;10438:27:57;;;10467;;;10434:61;;10507:28;;10504:54;;;10538:18;;:::i;10569:970::-;11003:52;11045:9;11037:6;11003:52;:::i;:::-;11106:13;;11099:21;11092:29;11086:3;11071:19;;11064:58;11177:4;11165:17;;;11159:24;11153:3;11138:19;;11131:53;11243:4;11231:17;;;11225:24;-1:-1:-1;;;;;11221:50:57;11215:3;11200:19;;11193:79;11323:13;;11316:21;11309:29;11303:3;11288:19;;11281:58;11396:17;;11390:24;11383:32;11376:40;11370:3;11355:19;;11348:69;11454:3;11448;11433:19;;11426:32;;;-1:-1:-1;11474:19:57;;;11467:30;11529:3;11514:19;;10569:970;-1:-1:-1;10569:970:57:o;12473:288::-;12514:3;12552:5;12546:12;12579:6;12574:3;12567:19;12635:6;12628:4;12621:5;12617:16;12610:4;12605:3;12601:14;12595:47;12687:1;12680:4;12671:6;12666:3;12662:16;12658:27;12651:38;12750:4;12743:2;12739:7;12734:2;12726:6;12722:15;12718:29;12713:3;12709:39;12705:50;12698:57;;;12473:288;;;;:::o;12766:740::-;13078:52;13120:9;13112:6;13078:52;:::i;:::-;13187:6;13181:13;13178:1;13167:28;13161:3;13150:9;13146:19;13139:57;13265:4;13257:6;13253:17;13247:24;13244:1;13233:39;13227:3;13216:9;13212:19;13205:68;13328:4;13320:6;13316:17;13310:24;13304:3;13293:9;13289:19;13282:53;13390:4;13382:6;13378:17;13372:24;13366:3;13355:9;13351:19;13344:53;13434:3;13428;13417:9;13413:19;13406:32;13059:4;13455:45;13495:3;13484:9;13480:19;13472:6;13455:45;:::i;:::-;13447:53;12766:740;-1:-1:-1;;;;;12766:740:57:o;13511:465::-;13745:52;13787:9;13779:6;13745:52;:::i;:::-;-1:-1:-1;;;;;13834:32:57;;13854:3;13813:19;;13806:61;13904:3;13898;13883:19;;13876:32;;;-1:-1:-1;;13925:45:57;;13950:19;;13942:6;13925:45;:::i;13981:247::-;14049:6;14102:2;14090:9;14081:7;14077:23;14073:32;14070:52;;;14118:1;14115;14108:12;14070:52;14150:9;14144:16;14169:29;14192:5;14169:29;:::i","linkReferences":{},"immutableReferences":{"11597":[{"start":803,"length":32},{"start":1070,"length":32},{"start":1936,"length":32},{"start":4294,"length":32}],"11600":[{"start":609,"length":32},{"start":3355,"length":32},{"start":3607,"length":32},{"start":3899,"length":32}],"11603":[{"start":1400,"length":32},{"start":1657,"length":32},{"start":2508,"length":32},{"start":2756,"length":32}],"11606":[{"start":1117,"length":32},{"start":2276,"length":32},{"start":4437,"length":32},{"start":4573,"length":32}],"11609":[{"start":762,"length":32},{"start":1335,"length":32},{"start":1889,"length":32},{"start":1969,"length":32}],"11612":[{"start":1447,"length":32},{"start":2924,"length":32},{"start":3402,"length":32},{"start":4072,"length":32}],"11615":[{"start":1704,"length":32},{"start":3142,"length":32},{"start":3654,"length":32},{"start":4119,"length":32}]}},"methodIdentifiers":{"MAX_PRICE_LIMIT()":"542524dd","MIN_PRICE_LIMIT()":"c7b8e15d","POOLS_SLOT()":"57eb1da7","POSITIONS_OFFSET()":"2ba31c53","addLiquidity(int256,int24,int24,bytes)":"407bf6d2","constructSignal()":"01480703","equalizePrice(int256)":"14ee3677","getRouter()":"b0f479a1","poolKey()":"182148ef","setPool(uint24,int24,address,uint160,bytes)":"6af57741","setPrice(uint256)":"91b7f5ed","swapOnLex(address,uint256)":"96f5e27c"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"initialPrice\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"MAX_PRICE_LIMIT\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"\",\"type\":\"uint160\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_PRICE_LIMIT\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"\",\"type\":\"uint160\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOLS_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POSITIONS_OFFSET\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"liquidityDelta\",\"type\":\"int256\"},{\"internalType\":\"int24\",\"name\":\"tickLower\",\"type\":\"int24\"},{\"internalType\":\"int24\",\"name\":\"tickUpper\",\"type\":\"int24\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"addLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"constructSignal\",\"outputs\":[{\"components\":[{\"internalType\":\"int24\",\"name\":\"currentTick\",\"type\":\"int24\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"lexPrice\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"internalType\":\"struct PoolKey\",\"name\":\"pool\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"fetcher\",\"type\":\"address\"}],\"internalType\":\"struct ArenaController.Signal\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"depth\",\"type\":\"int256\"}],\"name\":\"equalizePrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"poolKey\",\"outputs\":[{\"internalType\":\"Currency\",\"name\":\"currency0\",\"type\":\"address\"},{\"internalType\":\"Currency\",\"name\":\"currency1\",\"type\":\"address\"},{\"internalType\":\"uint24\",\"name\":\"fee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint24\",\"name\":\"poolFee\",\"type\":\"uint24\"},{\"internalType\":\"int24\",\"name\":\"tickSpacing\",\"type\":\"int24\"},{\"internalType\":\"contract IHooks\",\"name\":\"hooks\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"sqrtPriceX96\",\"type\":\"uint160\"},{\"internalType\":\"bytes\",\"name\":\"hookData\",\"type\":\"bytes\"}],\"name\":\"setPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"}],\"name\":\"setPrice\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"name\":\"swapOnLex\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/ArenaController.sol\":\"ArenaController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@ensdomains/=lib/v4-core/node_modules/@ensdomains/\",\":@openzeppelin/=lib/v4-core/lib/openzeppelin-contracts/\",\":@openzeppelin/contracts/=lib/v4-core/lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/solmate/lib/ds-test/src/\",\":erc4626-tests/=lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-gas-snapshot/=lib/v4-core/lib/forge-gas-snapshot/src/\",\":forge-std/=lib/forge-std/src/\",\":hardhat/=lib/v4-core/node_modules/hardhat/\",\":openzeppelin-contracts/=lib/v4-core/lib/openzeppelin-contracts/\",\":solmate/=lib/solmate/src/\",\":v4-core/=lib/v4-core/src/\"]},\"sources\":{\"lib/solmate/src/auth/Owned.sol\":{\"keccak256\":\"0xfedb27d14c508342c33eb067c9a02eabcdb0f9dcf93b04ded1001f580d12d0ea\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://1ff52bbee698b9cf9e4574615e6550be0887ccf355f6571e23d6f25b332e79b4\",\"dweb:/ipfs/QmVorA2apojVRStzS7h8aFccR3Uv32G6HVtBtFHZrE7YXx\"]},\"lib/solmate/src/tokens/ERC20.sol\":{\"keccak256\":\"0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35\",\"dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97\"]},\"lib/solmate/src/utils/FixedPointMathLib.sol\":{\"keccak256\":\"0x1b62af9baf5b8e991ed7531bc87f45550ba9d61e8dbff5caf237ccaf3a3fd843\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://b7b38b977c5305b18ceefbeed4c9ceaaaefa419b520de62de6604ea661f8c0a9\",\"dweb:/ipfs/QmecMRzgfMyDVa2pvBqMMDLYBappaj7Aa3qcMoQYEQrhWi\"]},\"lib/v4-core/src/ERC6909.sol\":{\"keccak256\":\"0x22476a1c183be1b547a509b3e6906abaccb6408375f798fce805ff7877aca09f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e85580e1563ea0556705132fb6bd038ca4aa355749039923853ebcb76b7c84e6\",\"dweb:/ipfs/QmVoxPrbagRKpFdRWoaCSKmStYLZrhNFuedcuyGycSGR7q\"]},\"lib/v4-core/src/ERC6909Claims.sol\":{\"keccak256\":\"0xf496ef3a5a9bf4f4aa2eec951dbeff09a01ef058bb9f64b1664cf46c9e85cd49\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2a0a97c359a7a4c526ba9fc4ceb20af8050f9cf7886ea7e1f38c9c10b4a3750c\",\"dweb:/ipfs/QmPy6pCQbvzCdJRqG1thHRSwEZoLBAaLo3KQnueL3wxb8i\"]},\"lib/v4-core/src/Extsload.sol\":{\"keccak256\":\"0x784074bd04a1541c7c6ace074e30245746133fd37c3ba16b025dce394db986ce\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35f1f4fb306bf01e98b7eca012b85f3ab978b39fa5136193363e2519c4435e51\",\"dweb:/ipfs/QmeGrjGMt71dJymVhkEadh5CuCW5GxRqNEZLi5AJxvC5tU\"]},\"lib/v4-core/src/Exttload.sol\":{\"keccak256\":\"0x769ee2733a08112c652274f4b972c45fb56cc46109f233b9a30f81561b15dd54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://dd19e88d50ae77c1ed5581baca1c75b3fb828d0b58cded90188d55c4e336266c\",\"dweb:/ipfs/Qmc8YM6Tfpwwa4qivHHzRxNdhZzdzGiD7VexWsDvkaQTxG\"]},\"lib/v4-core/src/NoDelegateCall.sol\":{\"keccak256\":\"0x5c238701785d16c58a1598daec0f72a2aaf47d5d017b9dd7441cc8093b65b202\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://696cf79b74bc38e7316d94dfd8bdd9579a94f74121e9b65d2613eb59c106ea50\",\"dweb:/ipfs/QmRttHmshQJ5E7EGaeBC7yT4wyzthNXZQJn7sy2nJvb4dB\"]},\"lib/v4-core/src/PoolManager.sol\":{\"keccak256\":\"0xca5369a1683d06842268987fb6f46b05e6364a46cc856f72bb5c603826f47eac\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://5ae5893222abc5dc5fa57bc05af40b60a96a1537bd3c1f3845257d6a3c2b5821\",\"dweb:/ipfs/QmZxQH8M3NVunurxDNJ5EZm2fy6Ws8CHJSezCQaoqzMPoq\"]},\"lib/v4-core/src/ProtocolFees.sol\":{\"keccak256\":\"0x2e7533e46dcab5508ed417ab33c2d0ca8c52a6b5f445dd90daf328173ada4449\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8403de6f2c89a665a3ff3566a917179a5bfb3e0ac9514f0438d82270a7f98c91\",\"dweb:/ipfs/QmTq9cjKTaXeCoSfCywpFwo7sNvuXM4wSMnebwX3hBuiRG\"]},\"lib/v4-core/src/interfaces/IExtsload.sol\":{\"keccak256\":\"0x80b53ca4907d6f0088c3b931f2b72cad1dc4615a95094d96bd0fb8dff8d5ba43\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://375c69148622aab7a3537d5fd37d373a8e9731022c8d87bdaee46233b0a99fe1\",\"dweb:/ipfs/QmXFjdoYRxsA5B1kyuxEXgNf3FBoL1zPvy26Qy8EtpdFRN\"]},\"lib/v4-core/src/interfaces/IExttload.sol\":{\"keccak256\":\"0xc6b68283ebd8d1c789df536756726eed51c589134bb20821b236a0d22a135937\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://294394f72dfc219689209f4130d85601dfd0d63c8d47578050d312db70f9b6c8\",\"dweb:/ipfs/QmTDMQ3oxCGHgEBU48a3Lp4S1rRjc8vVCxkhE5ZNej1bsY\"]},\"lib/v4-core/src/interfaces/IHooks.sol\":{\"keccak256\":\"0xdbaf1db938b70f77eb4ddbad5b8d2a1fc648c7d65ca2a312aba16cc013c85df0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ad2d9c85116a2e51281dd40577c798d6d5968be1f8908f43ba152849809deaa\",\"dweb:/ipfs/QmZP4kk9KJzoxv81EgsTfHnJeU8YUxX3yWZudJHbxQjpa8\"]},\"lib/v4-core/src/interfaces/IPoolManager.sol\":{\"keccak256\":\"0x4e07d93993f6ba033c8b5e5b0a3473659aeffe9af0cf8316a879a55ebd696d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://50add8378d59b89b1dc106ea248641caaedd3ac45d62754babe55c526b87c9ad\",\"dweb:/ipfs/QmQUrvy8ZDDdTRTr17msqynVECP3rQFBVBUmFcpFvjAmQx\"]},\"lib/v4-core/src/interfaces/IProtocolFeeController.sol\":{\"keccak256\":\"0xc2d7f3605da9767e36cf25d4d4fa9b95663a6659e26ce28cf29b8b88acb79a4c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c7a43cda35b8a9254ed3e46cfd8649361f09121d17ef554bd3d190b9a8d57cc6\",\"dweb:/ipfs/QmRBDQoqCWddH5hY1JdxMyYtY8jMZhWAwtuFJBc3r8V31G\"]},\"lib/v4-core/src/interfaces/IProtocolFees.sol\":{\"keccak256\":\"0x68700020df618c5715737e57630876ec22ccde2d31191a5608babb9f140ed297\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://56b7bb6786f48fff8c9d04e9054955b8cf3d9f5bf819ccda7be192ad2004a27f\",\"dweb:/ipfs/QmZKmUvcYnyihEFySD6SY9osMkP8M1Y7a4kPxLQycEyThw\"]},\"lib/v4-core/src/interfaces/callback/IUnlockCallback.sol\":{\"keccak256\":\"0x58c82f2bd9d7c097ed09bd0991fedc403b0ec270eb3d0158bfb095c06a03d719\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91168ca26a10980df2cdc3fbfe8ddf372c002b7ef19e3c59a0c9870d64198f1b\",\"dweb:/ipfs/QmUSpaM825vd1SwvF38esgbdLgYiPwefKaFERTWvUi6uSK\"]},\"lib/v4-core/src/interfaces/external/IERC20Minimal.sol\":{\"keccak256\":\"0xc1c23330c1511ecfd45c67a683962b4e2555b82f1dacd40cc8b46ae5a6e250e7\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5ce10b7970482a65f9e9a365b810eeb154a5d4a8229a26653028d84b9622a410\",\"dweb:/ipfs/QmTSwXxZ2FTkM5duBZgbpFs8SRVDR5NPAnW4YimeDhb1s8\"]},\"lib/v4-core/src/interfaces/external/IERC6909Claims.sol\":{\"keccak256\":\"0xa586f345739e52b0488a0fe40b6e375cce67fdd25758408b0efcb5133ad96a48\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e8c557b7e52abdbbd82e415a1acc27921446a7fd090b7d4877e52be72619547f\",\"dweb:/ipfs/QmXE2KNPbXmGX8BQF3ei6zhzRTnhoTQg39XmqMnkhbr6QK\"]},\"lib/v4-core/src/libraries/BitMath.sol\":{\"keccak256\":\"0x59e18adcff8917b0965a240d88b34d5d800e0efebd5f40c5594ddcf28a15949b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d358beebf8d5079520b6e138d744e5063ecbfbeae355c08af86a3b74afa71b09\",\"dweb:/ipfs/QmUXmAK9aoxnaeykq8MLXoRKP8yGTDyY3jPFMwHnqRxf46\"]},\"lib/v4-core/src/libraries/CurrencyDelta.sol\":{\"keccak256\":\"0xb1eb18c3794b67f4f710229df279d3a630a963194fbbeb51906198ec7145b98e\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://e5ea08b69754250cf04cc544785320f5c8fd8b9a65e5d9e0bc44aadadaa9ea0c\",\"dweb:/ipfs/QmWW1qfqGydoiSeDtVVQ53nV3FphuUgH1PFUC3uGaWzxWR\"]},\"lib/v4-core/src/libraries/CurrencyReserves.sol\":{\"keccak256\":\"0xdeffc5cf2f8f7d3f802998941061392c0c926a32c7105ffd9f902ab84d3a31c6\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://869bd659c5593bc525ce4d44771d85eb8acb74a7f0492802bdcc79d2bfdfcaf7\",\"dweb:/ipfs/QmSrTWzUHrou7ZxcuFXQhvzXmEgbLeCtwAqeS6k9vD22h3\"]},\"lib/v4-core/src/libraries/CustomRevert.sol\":{\"keccak256\":\"0x70a444afeb27564398dbdf7553651ee2cae14c03c923b6f8972040c8f460ebe3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9d7b05390bac9b29188725c8a84edac43cd05571da27b33a0b1e36d9500ecaa6\",\"dweb:/ipfs/QmdYDLwTfFgePDEwFMUqGTj8SNNXXq4JQJnrgomJgcZFvP\"]},\"lib/v4-core/src/libraries/FixedPoint128.sol\":{\"keccak256\":\"0xc7e80dc41f28887d0d915a75c0b2783ae659e5384dd1a3ed1251a42e058d8835\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://2df62bf1d9d4349236fd0bc7a96b3a3be95f4c049603e4a20c8473cca9402b4d\",\"dweb:/ipfs/QmVR5dmMkoypmhaBeBj8cGegHpJycbofUDg59dHm42i9MT\"]},\"lib/v4-core/src/libraries/FixedPoint96.sol\":{\"keccak256\":\"0xf0a545fc5bbc271e8dbd191413dc03e8725d1f003df4d9d36ea7cdb73058c417\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5d1013d8b5c93024526f129b0a9271b35c578da09bcfe6c3240ff4d590ebc196\",\"dweb:/ipfs/QmX1GyF9jJhYGXst6PyK6HJvcfVQ69nNTnuBEBaEiAZPv7\"]},\"lib/v4-core/src/libraries/FullMath.sol\":{\"keccak256\":\"0x4fc73a00817193fd3cac1cc03d8167d21af97d75f1815a070ee31a90c702b4c2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3b2d66d36b1ad56b1ab6e2eb8a816740877b40b461c93f125e88621c8378e52\",\"dweb:/ipfs/QmPGvMZzKQvNiWKd8aRzzdW7oAizwrMgcMtnaworDkVHFC\"]},\"lib/v4-core/src/libraries/Hooks.sol\":{\"keccak256\":\"0xfa031f4efc096e9c93bb094509321e1c08b5eb271f46554f858e74803c43ae66\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7cc33d5eb869ecacfb70d024f7b925d191d98553dbb921bd8188f97d51c9e111\",\"dweb:/ipfs/Qme5VCnaS5mXyqaWV5uiW5xcmTb56uCKBPFrLZp2dq41dQ\"]},\"lib/v4-core/src/libraries/LPFeeLibrary.sol\":{\"keccak256\":\"0xfbebd6766871b795d945a74b6110931f73fc775aeeecc2682d6d6ca841a01ece\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://36fcc7098454971ae16d790ee9aee227c22c5cbbd7ff6e27e58ac29b901d5896\",\"dweb:/ipfs/QmboCGTWtycGpda7E169pD67Fox2H9b1YRsNHcsxBRrhfo\"]},\"lib/v4-core/src/libraries/LiquidityMath.sol\":{\"keccak256\":\"0x4a04b9383e2fb943c2c3ae7d0c9071b58dd97b6dac0a409fe1c79c3ca897bbcf\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0b33cf0ff936f62aa7f3b82922fa0ac52ac24471561e87fbf7ab8372607f6dfc\",\"dweb:/ipfs/Qmcr6omwzJjQPu6HQ8E9vFXaTgrtqfb2KbfxbuQavfUzFa\"]},\"lib/v4-core/src/libraries/Lock.sol\":{\"keccak256\":\"0x9338be4b5695f1da5f3d3f7a3eeaf7a356c1045458289586ac0cbe9cef77c6d5\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://485ec42ed6155469d612a9a0c18068ebfbad74448792a338a435503de3ef1b2c\",\"dweb:/ipfs/QmVnnv5u74MYatfRmBgrcfFYQcsMAJMG9jQ6ju8UiydKNF\"]},\"lib/v4-core/src/libraries/NonZeroDeltaCount.sol\":{\"keccak256\":\"0x6b7e23f470b8352efdbf459a34dd0dcfdbe03e623cb4de67f4ad9be326691586\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://b86af075e2331f7a065b15d91253f2ce6b845dfe09493338f2d7cdab6f9e4cc2\",\"dweb:/ipfs/QmdzHJQapqAS42rMrYPgdvb4Sae7NVy3ESkNc1TuBRcxUC\"]},\"lib/v4-core/src/libraries/ParseBytes.sol\":{\"keccak256\":\"0xf0795198d1e651b0b33fd1708d80a14f501bb2a1486905676d35f364e880f579\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://5aea527fcec51d7274f0c189dc2479a6aa708fc91857187a4d7db46bb1d6c7a8\",\"dweb:/ipfs/QmUTrwTPSZ7EHBaTyfAA78rZVP17iQzmAmvDcQ8GhDRAEf\"]},\"lib/v4-core/src/libraries/Pool.sol\":{\"keccak256\":\"0x7a506727ae59f5b5487a0a16ec1d7038b7c2a4ee5f4a7fa7c444ec7df6ad5a7c\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://befdd15aee06a7b2a3c64cb899220ec03a1ae8470ad17e19050bcca1ac5266a8\",\"dweb:/ipfs/QmWPfBgfp5VKnku9ZtKXwYycyKdAZuCj6778T2HFrfQ61H\"]},\"lib/v4-core/src/libraries/Position.sol\":{\"keccak256\":\"0x0309a650890f1cd93e2b4b1e9a40032d5feb8c6a0ccc24be24373bfd7590ff80\",\"license\":\"BUSL-1.1\",\"urls\":[\"bzz-raw://63aae574b22048f1453da8f9142374e334683bb3a069c2312f73e6b857842bce\",\"dweb:/ipfs/QmcJZK3kU4jsWfJKBpRq2kaouutEDHcytgMX8ZaGeBsbgu\"]},\"lib/v4-core/src/libraries/ProtocolFeeLibrary.sol\":{\"keccak256\":\"0x2739e8f54707c6a0e23f9c61a0783dd18b107c3fc287b2827f1ab4b41f891902\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://2e3b154410bbfcbe8808c6dfb74c4bbbac50a59e228cee59b34e169dbd34ee1a\",\"dweb:/ipfs/QmcRoM6T2F7FTHtGdD5aRiVthCon8oiWur661GCrk5FejP\"]},\"lib/v4-core/src/libraries/SafeCast.sol\":{\"keccak256\":\"0xbccc4f8d5d467d162d7f0ab5a7f22bcccf05ae07577b9728c9e3030c63977e60\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://0003ea7a515ba709a3fdeaa19e7930c1f883b3b4fbdbf389d4f2f85b25eb72b4\",\"dweb:/ipfs/QmYs8uNcYRGuGUbeBfF27fhArNaQ5Y9iMCTMfgic5d39fM\"]},\"lib/v4-core/src/libraries/SqrtPriceMath.sol\":{\"keccak256\":\"0x1a5a8fd4a21cec19c0c253201e9b5534e8d810eb132bceee04af37fd78adb5db\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://afa2a5950c9057fd3c00a6f413fba91c4c7dab06d573f7349aaf8f806c0e1f31\",\"dweb:/ipfs/Qmb2m62xAPRBtxtx3sV7MAFw2vHWNm9m49ctPHmFX5hozt\"]},\"lib/v4-core/src/libraries/StateLibrary.sol\":{\"keccak256\":\"0x67ead4d1ffe7e4fc381cef059c8d4941c7b4d581ef043fc8d3278d0829da414e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0d12edd46a3ff2e19ea9b650507ea22e7714daa335a6b40f4d2f6d29c16431e4\",\"dweb:/ipfs/QmZn6dzXZgR3rGohZAvKzqYMgm5n9qTrpi1VhXizYhiquH\"]},\"lib/v4-core/src/libraries/SwapMath.sol\":{\"keccak256\":\"0xa8cedd0f63b2d8b6faac60455f499c79816f53fbd86f3bb0706fae426b2c231e\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8d926c2df899b21811862d106d5e1d2b5bdf83c76ae6ff4216e7c9ce443d8e75\",\"dweb:/ipfs/QmTTVSCumUXZ4vf3R1GwfqJSTgLFyjueuxZkRH9U6dsTb3\"]},\"lib/v4-core/src/libraries/TickBitmap.sol\":{\"keccak256\":\"0x23abd96aa808657304affd775666d7cc5fb0ab564f87d1b65fbf8dc5877d9cd6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4c7686aefb704a3efe97cc0e8f180ed48f7667f5ae69d3754962f04352c66b79\",\"dweb:/ipfs/QmULiCBW9s2hB6SmnJTi2wiAwgkLXpZJcdVZm9f77zDNuc\"]},\"lib/v4-core/src/libraries/TickMath.sol\":{\"keccak256\":\"0x64c668177d82bb185d902fb2190630ccb67babb6439422979692ac2f8dfb6dcd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://e2714a025df18c22f20b358b7143e8a5c55cffb20c7de292be0376845a5f0408\",\"dweb:/ipfs/QmWaeCkxwkVuReFUSK2nDat1BB5DJ8BUowwGwmVyKpsrME\"]},\"lib/v4-core/src/libraries/TransientStateLibrary.sol\":{\"keccak256\":\"0x1bc28f30c176c7c598522da0d8907a90c4cd8ecce81775bb4deb3a9b78782f86\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb5c05fb51e59ef168ba884c4ea3627525dba9feea0de9ffa0587438f70fd095\",\"dweb:/ipfs/Qmbx3ntPDZ9VeGsAnVNSM5DKmhPg92yobh5ZHbvdGWtHUd\"]},\"lib/v4-core/src/libraries/UnsafeMath.sol\":{\"keccak256\":\"0xe9b87da934af38419d4b5f20cc09943dbb569425448fc23fdc5ec6aebbb63c84\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://29838c28905c34f9602a453759b55f5acc6aff02bf6d7a6afac5d1a245dd5db3\",\"dweb:/ipfs/QmfN5bhLFw1CsnnaJQNZd3bLpLufQcwt9ztaR71LA43UGY\"]},\"lib/v4-core/src/test/PoolModifyLiquidityTest.sol\":{\"keccak256\":\"0x4578759af55db566eee1d19c19a285710b1d301b511e37df4a1072c2d5a47ade\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://aa6588f1f695efe625241fdbad07730611c8bec77d963698c6412775b7dd68a7\",\"dweb:/ipfs/QmeDGAKa9sR6Wk5ibyzt4YGa6tdtjmFPzJafMbBgkWRB9d\"]},\"lib/v4-core/src/test/PoolSwapTest.sol\":{\"keccak256\":\"0x389d2274a70c565c12c8fd7f0f5bdbee7532d842936243141c65cf1477c1a7e8\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://cdaff983aa947444cece280d8485f524a778cf8843c3f8b96f60e4ad137aa8d3\",\"dweb:/ipfs/QmP7qbC3UZz723pTWuJh18qap1vYAHDY5UoJwGtvosWs9k\"]},\"lib/v4-core/src/test/PoolTestBase.sol\":{\"keccak256\":\"0x71db5a5215d858124dd2ccf73c4474421651f248e4c85d33455d95abced0a23c\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://fac0df901621d44a1b98ce4569616940ca6700e7829357bdf18509237b822072\",\"dweb:/ipfs/Qmf9sWokQvzmKfAY6Vd4QzyTyhikqCb8zUowrFPe9DRxs5\"]},\"lib/v4-core/src/types/BalanceDelta.sol\":{\"keccak256\":\"0xa719c8fe51e0a9524280178f19f6851bcc3b3b60e73618f3d60905d35ae5569f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7436928dc9de35c6c7c5c636cb51adaf295cfd590da83b19a004ae33cbec9ef9\",\"dweb:/ipfs/QmRJ9yZkUpzk4433GX3LgVVL8jwpbSYSUwXcucKisf3v4H\"]},\"lib/v4-core/src/types/BeforeSwapDelta.sol\":{\"keccak256\":\"0x2a774312d91285313d569da1a718c909655da5432310417692097a1d4dc83a78\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2c7a0379955cff9c17ab9e61f95e42909aa5947c22740f86ce940d09856f782\",\"dweb:/ipfs/QmaAuo8UBYXsGrVuKh8iRoAAdqwtg1jDq515cW1ZRP5m9K\"]},\"lib/v4-core/src/types/Currency.sol\":{\"keccak256\":\"0xc77e2d4d380be1887078b1d21e2381fe4e9138dce8c7efbf9050aa7d65d75d4c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b85a1edba4be624be660d69badac1e3641d83190893839fa30260eef316d00c8\",\"dweb:/ipfs/QmPaEaeNkhy5F4X9dwzyDzVU3H67P5ZhpeijDS7wscaSd9\"]},\"lib/v4-core/src/types/PoolId.sol\":{\"keccak256\":\"0x6946552d4f78712c769df47a9187aa0add8737bb6d06ef04b63a33a3c0ff59f8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://637851aaa9e06ff59b517e6da17dad3476968c0bc62e141158f76526a8f9c79f\",\"dweb:/ipfs/QmVUxPCRCBE23XQdCrroeUuFqNTtq2LvJaDYmp43QGNsMB\"]},\"lib/v4-core/src/types/PoolKey.sol\":{\"keccak256\":\"0x10a2ff74d87d105f52c6c10f0c6ea0548c12a75dfb979abab8a8b7d647305162\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a0680665f799067c0f0238e864e363c265ff23188dfe6ae1c4738f7d0a281ccf\",\"dweb:/ipfs/QmRCkZhaPknrV9cHkUiU3HVyMYYT3UaD8RfptHi4qB62zY\"]},\"lib/v4-core/src/types/Slot0.sol\":{\"keccak256\":\"0x8b4912fac7e25ea680056748121113f902d56f8b2640f421d5c38d438db11c1b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c19b1ff5b951fb54129268d2be37d82c8bb3ea6e29ac9bc78a8a37794fc082b8\",\"dweb:/ipfs/QmTAQ2mUoiT77hoWJAfn9pyoGy47qaevn45QHrbyovGt2C\"]},\"lib/v4-core/test/utils/CurrencySettler.sol\":{\"keccak256\":\"0xf5d04aa76b3ac6ff75396661e75ec612035ebd73d23eb6f4e207dbd46392688e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://67a67b94a2987309f06003374ddfc30ab8e81d9fec3b1585e93871eec6966d96\",\"dweb:/ipfs/QmYLzboZNfXoNufKX8UYMGhHVChqMK96vwFWjKeoWcfb24\"]},\"src/ArenaController.sol\":{\"keccak256\":\"0x13844620690926230918f4a4b08342189e0efa19d99f5b5c7f1a7f723cd5267c\",\"urls\":[\"bzz-raw://4f6835b850d20212664a044da6ba1a5b5da9861dd047e0d0752c21850e3fa784\",\"dweb:/ipfs/QmYf5o3sxxHqWpV5kr9wapkNEMj2zN7LTYroLpPzk4pTWF\"]},\"src/ArenaToken.sol\":{\"keccak256\":\"0x59ea858a9c33398efbfb770c958c1f544425ad32d73a3cd3991f6834ec04028a\",\"urls\":[\"bzz-raw://242a38f560c8dc312e27a30dad15ddf2fccb4163f4f0692f814b3cfa71180105\",\"dweb:/ipfs/QmZqhSdNeRiVf5rJJYgX48SiUi1dwgpYAvMo6a7XBVRjXF\"]},\"src/Fetcher.sol\":{\"keccak256\":\"0x1895e5c0688650ca60371f208b62d9f64beea29bd7515b2600a1c8d5c73805df\",\"urls\":[\"bzz-raw://f9c904c9d032167f6d8fec1392c9a023f339a4aee9f75f06df6347a495af9d38\",\"dweb:/ipfs/QmYSaPzRawAnh2qD3JY5uvWypEueo5hSTQVyVFfX96msfb\"]},\"src/LiquidExchange.sol\":{\"keccak256\":\"0xc979e540abc8a2d1bc82f2c741beb4ea9037c7e69ab11a5a20ef11ab7b9cee22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e5f08cb7b8685020a78fd9b84d740649dcbf9ba92057cc5914d829f275d396c5\",\"dweb:/ipfs/QmQKVvRCmSumaf2xtbLey6KdUyt9bfTLeq9gPGssisJi17\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"initialPrice","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"stateMutability":"view","type":"function","name":"MAX_PRICE_LIMIT","outputs":[{"internalType":"uint160","name":"","type":"uint160"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"MIN_PRICE_LIMIT","outputs":[{"internalType":"uint160","name":"","type":"uint160"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"POOLS_SLOT","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"POSITIONS_OFFSET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"int256","name":"liquidityDelta","type":"int256"},{"internalType":"int24","name":"tickLower","type":"int24"},{"internalType":"int24","name":"tickUpper","type":"int24"},{"internalType":"bytes","name":"hookData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"addLiquidity"},{"inputs":[],"stateMutability":"view","type":"function","name":"constructSignal","outputs":[{"internalType":"struct ArenaController.Signal","name":"","type":"tuple","components":[{"internalType":"int24","name":"currentTick","type":"int24"},{"internalType":"uint160","name":"sqrtPriceX96","type":"uint160"},{"internalType":"address","name":"manager","type":"address"},{"internalType":"uint256","name":"lexPrice","type":"uint256"},{"internalType":"struct PoolKey","name":"pool","type":"tuple","components":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"internalType":"address","name":"fetcher","type":"address"}]}]},{"inputs":[{"internalType":"int256","name":"depth","type":"int256"}],"stateMutability":"nonpayable","type":"function","name":"equalizePrice"},{"inputs":[],"stateMutability":"view","type":"function","name":"getRouter","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"poolKey","outputs":[{"internalType":"Currency","name":"currency0","type":"address"},{"internalType":"Currency","name":"currency1","type":"address"},{"internalType":"uint24","name":"fee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"}]},{"inputs":[{"internalType":"uint24","name":"poolFee","type":"uint24"},{"internalType":"int24","name":"tickSpacing","type":"int24"},{"internalType":"contract IHooks","name":"hooks","type":"address"},{"internalType":"uint160","name":"sqrtPriceX96","type":"uint160"},{"internalType":"bytes","name":"hookData","type":"bytes"}],"stateMutability":"nonpayable","type":"function","name":"setPool"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setPrice"},{"inputs":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"swapOnLex"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@ensdomains/=lib/v4-core/node_modules/@ensdomains/","@openzeppelin/=lib/v4-core/lib/openzeppelin-contracts/","@openzeppelin/contracts/=lib/v4-core/lib/openzeppelin-contracts/contracts/","ds-test/=lib/solmate/lib/ds-test/src/","erc4626-tests/=lib/v4-core/lib/openzeppelin-contracts/lib/erc4626-tests/","forge-gas-snapshot/=lib/v4-core/lib/forge-gas-snapshot/src/","forge-std/=lib/forge-std/src/","hardhat/=lib/v4-core/node_modules/hardhat/","openzeppelin-contracts/=lib/v4-core/lib/openzeppelin-contracts/","solmate/=lib/solmate/src/","v4-core/=lib/v4-core/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/ArenaController.sol":"ArenaController"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/solmate/src/auth/Owned.sol":{"keccak256":"0xfedb27d14c508342c33eb067c9a02eabcdb0f9dcf93b04ded1001f580d12d0ea","urls":["bzz-raw://1ff52bbee698b9cf9e4574615e6550be0887ccf355f6571e23d6f25b332e79b4","dweb:/ipfs/QmVorA2apojVRStzS7h8aFccR3Uv32G6HVtBtFHZrE7YXx"],"license":"AGPL-3.0-only"},"lib/solmate/src/tokens/ERC20.sol":{"keccak256":"0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10","urls":["bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35","dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97"],"license":"AGPL-3.0-only"},"lib/solmate/src/utils/FixedPointMathLib.sol":{"keccak256":"0x1b62af9baf5b8e991ed7531bc87f45550ba9d61e8dbff5caf237ccaf3a3fd843","urls":["bzz-raw://b7b38b977c5305b18ceefbeed4c9ceaaaefa419b520de62de6604ea661f8c0a9","dweb:/ipfs/QmecMRzgfMyDVa2pvBqMMDLYBappaj7Aa3qcMoQYEQrhWi"],"license":"AGPL-3.0-only"},"lib/v4-core/src/ERC6909.sol":{"keccak256":"0x22476a1c183be1b547a509b3e6906abaccb6408375f798fce805ff7877aca09f","urls":["bzz-raw://e85580e1563ea0556705132fb6bd038ca4aa355749039923853ebcb76b7c84e6","dweb:/ipfs/QmVoxPrbagRKpFdRWoaCSKmStYLZrhNFuedcuyGycSGR7q"],"license":"MIT"},"lib/v4-core/src/ERC6909Claims.sol":{"keccak256":"0xf496ef3a5a9bf4f4aa2eec951dbeff09a01ef058bb9f64b1664cf46c9e85cd49","urls":["bzz-raw://2a0a97c359a7a4c526ba9fc4ceb20af8050f9cf7886ea7e1f38c9c10b4a3750c","dweb:/ipfs/QmPy6pCQbvzCdJRqG1thHRSwEZoLBAaLo3KQnueL3wxb8i"],"license":"MIT"},"lib/v4-core/src/Extsload.sol":{"keccak256":"0x784074bd04a1541c7c6ace074e30245746133fd37c3ba16b025dce394db986ce","urls":["bzz-raw://35f1f4fb306bf01e98b7eca012b85f3ab978b39fa5136193363e2519c4435e51","dweb:/ipfs/QmeGrjGMt71dJymVhkEadh5CuCW5GxRqNEZLi5AJxvC5tU"],"license":"MIT"},"lib/v4-core/src/Exttload.sol":{"keccak256":"0x769ee2733a08112c652274f4b972c45fb56cc46109f233b9a30f81561b15dd54","urls":["bzz-raw://dd19e88d50ae77c1ed5581baca1c75b3fb828d0b58cded90188d55c4e336266c","dweb:/ipfs/Qmc8YM6Tfpwwa4qivHHzRxNdhZzdzGiD7VexWsDvkaQTxG"],"license":"MIT"},"lib/v4-core/src/NoDelegateCall.sol":{"keccak256":"0x5c238701785d16c58a1598daec0f72a2aaf47d5d017b9dd7441cc8093b65b202","urls":["bzz-raw://696cf79b74bc38e7316d94dfd8bdd9579a94f74121e9b65d2613eb59c106ea50","dweb:/ipfs/QmRttHmshQJ5E7EGaeBC7yT4wyzthNXZQJn7sy2nJvb4dB"],"license":"BUSL-1.1"},"lib/v4-core/src/PoolManager.sol":{"keccak256":"0xca5369a1683d06842268987fb6f46b05e6364a46cc856f72bb5c603826f47eac","urls":["bzz-raw://5ae5893222abc5dc5fa57bc05af40b60a96a1537bd3c1f3845257d6a3c2b5821","dweb:/ipfs/QmZxQH8M3NVunurxDNJ5EZm2fy6Ws8CHJSezCQaoqzMPoq"],"license":"BUSL-1.1"},"lib/v4-core/src/ProtocolFees.sol":{"keccak256":"0x2e7533e46dcab5508ed417ab33c2d0ca8c52a6b5f445dd90daf328173ada4449","urls":["bzz-raw://8403de6f2c89a665a3ff3566a917179a5bfb3e0ac9514f0438d82270a7f98c91","dweb:/ipfs/QmTq9cjKTaXeCoSfCywpFwo7sNvuXM4wSMnebwX3hBuiRG"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/interfaces/IExtsload.sol":{"keccak256":"0x80b53ca4907d6f0088c3b931f2b72cad1dc4615a95094d96bd0fb8dff8d5ba43","urls":["bzz-raw://375c69148622aab7a3537d5fd37d373a8e9731022c8d87bdaee46233b0a99fe1","dweb:/ipfs/QmXFjdoYRxsA5B1kyuxEXgNf3FBoL1zPvy26Qy8EtpdFRN"],"license":"MIT"},"lib/v4-core/src/interfaces/IExttload.sol":{"keccak256":"0xc6b68283ebd8d1c789df536756726eed51c589134bb20821b236a0d22a135937","urls":["bzz-raw://294394f72dfc219689209f4130d85601dfd0d63c8d47578050d312db70f9b6c8","dweb:/ipfs/QmTDMQ3oxCGHgEBU48a3Lp4S1rRjc8vVCxkhE5ZNej1bsY"],"license":"MIT"},"lib/v4-core/src/interfaces/IHooks.sol":{"keccak256":"0xdbaf1db938b70f77eb4ddbad5b8d2a1fc648c7d65ca2a312aba16cc013c85df0","urls":["bzz-raw://4ad2d9c85116a2e51281dd40577c798d6d5968be1f8908f43ba152849809deaa","dweb:/ipfs/QmZP4kk9KJzoxv81EgsTfHnJeU8YUxX3yWZudJHbxQjpa8"],"license":"MIT"},"lib/v4-core/src/interfaces/IPoolManager.sol":{"keccak256":"0x4e07d93993f6ba033c8b5e5b0a3473659aeffe9af0cf8316a879a55ebd696d7a","urls":["bzz-raw://50add8378d59b89b1dc106ea248641caaedd3ac45d62754babe55c526b87c9ad","dweb:/ipfs/QmQUrvy8ZDDdTRTr17msqynVECP3rQFBVBUmFcpFvjAmQx"],"license":"MIT"},"lib/v4-core/src/interfaces/IProtocolFeeController.sol":{"keccak256":"0xc2d7f3605da9767e36cf25d4d4fa9b95663a6659e26ce28cf29b8b88acb79a4c","urls":["bzz-raw://c7a43cda35b8a9254ed3e46cfd8649361f09121d17ef554bd3d190b9a8d57cc6","dweb:/ipfs/QmRBDQoqCWddH5hY1JdxMyYtY8jMZhWAwtuFJBc3r8V31G"],"license":"MIT"},"lib/v4-core/src/interfaces/IProtocolFees.sol":{"keccak256":"0x68700020df618c5715737e57630876ec22ccde2d31191a5608babb9f140ed297","urls":["bzz-raw://56b7bb6786f48fff8c9d04e9054955b8cf3d9f5bf819ccda7be192ad2004a27f","dweb:/ipfs/QmZKmUvcYnyihEFySD6SY9osMkP8M1Y7a4kPxLQycEyThw"],"license":"MIT"},"lib/v4-core/src/interfaces/callback/IUnlockCallback.sol":{"keccak256":"0x58c82f2bd9d7c097ed09bd0991fedc403b0ec270eb3d0158bfb095c06a03d719","urls":["bzz-raw://91168ca26a10980df2cdc3fbfe8ddf372c002b7ef19e3c59a0c9870d64198f1b","dweb:/ipfs/QmUSpaM825vd1SwvF38esgbdLgYiPwefKaFERTWvUi6uSK"],"license":"MIT"},"lib/v4-core/src/interfaces/external/IERC20Minimal.sol":{"keccak256":"0xc1c23330c1511ecfd45c67a683962b4e2555b82f1dacd40cc8b46ae5a6e250e7","urls":["bzz-raw://5ce10b7970482a65f9e9a365b810eeb154a5d4a8229a26653028d84b9622a410","dweb:/ipfs/QmTSwXxZ2FTkM5duBZgbpFs8SRVDR5NPAnW4YimeDhb1s8"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/interfaces/external/IERC6909Claims.sol":{"keccak256":"0xa586f345739e52b0488a0fe40b6e375cce67fdd25758408b0efcb5133ad96a48","urls":["bzz-raw://e8c557b7e52abdbbd82e415a1acc27921446a7fd090b7d4877e52be72619547f","dweb:/ipfs/QmXE2KNPbXmGX8BQF3ei6zhzRTnhoTQg39XmqMnkhbr6QK"],"license":"MIT"},"lib/v4-core/src/libraries/BitMath.sol":{"keccak256":"0x59e18adcff8917b0965a240d88b34d5d800e0efebd5f40c5594ddcf28a15949b","urls":["bzz-raw://d358beebf8d5079520b6e138d744e5063ecbfbeae355c08af86a3b74afa71b09","dweb:/ipfs/QmUXmAK9aoxnaeykq8MLXoRKP8yGTDyY3jPFMwHnqRxf46"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/CurrencyDelta.sol":{"keccak256":"0xb1eb18c3794b67f4f710229df279d3a630a963194fbbeb51906198ec7145b98e","urls":["bzz-raw://e5ea08b69754250cf04cc544785320f5c8fd8b9a65e5d9e0bc44aadadaa9ea0c","dweb:/ipfs/QmWW1qfqGydoiSeDtVVQ53nV3FphuUgH1PFUC3uGaWzxWR"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/CurrencyReserves.sol":{"keccak256":"0xdeffc5cf2f8f7d3f802998941061392c0c926a32c7105ffd9f902ab84d3a31c6","urls":["bzz-raw://869bd659c5593bc525ce4d44771d85eb8acb74a7f0492802bdcc79d2bfdfcaf7","dweb:/ipfs/QmSrTWzUHrou7ZxcuFXQhvzXmEgbLeCtwAqeS6k9vD22h3"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/CustomRevert.sol":{"keccak256":"0x70a444afeb27564398dbdf7553651ee2cae14c03c923b6f8972040c8f460ebe3","urls":["bzz-raw://9d7b05390bac9b29188725c8a84edac43cd05571da27b33a0b1e36d9500ecaa6","dweb:/ipfs/QmdYDLwTfFgePDEwFMUqGTj8SNNXXq4JQJnrgomJgcZFvP"],"license":"MIT"},"lib/v4-core/src/libraries/FixedPoint128.sol":{"keccak256":"0xc7e80dc41f28887d0d915a75c0b2783ae659e5384dd1a3ed1251a42e058d8835","urls":["bzz-raw://2df62bf1d9d4349236fd0bc7a96b3a3be95f4c049603e4a20c8473cca9402b4d","dweb:/ipfs/QmVR5dmMkoypmhaBeBj8cGegHpJycbofUDg59dHm42i9MT"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/FixedPoint96.sol":{"keccak256":"0xf0a545fc5bbc271e8dbd191413dc03e8725d1f003df4d9d36ea7cdb73058c417","urls":["bzz-raw://5d1013d8b5c93024526f129b0a9271b35c578da09bcfe6c3240ff4d590ebc196","dweb:/ipfs/QmX1GyF9jJhYGXst6PyK6HJvcfVQ69nNTnuBEBaEiAZPv7"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/FullMath.sol":{"keccak256":"0x4fc73a00817193fd3cac1cc03d8167d21af97d75f1815a070ee31a90c702b4c2","urls":["bzz-raw://c3b2d66d36b1ad56b1ab6e2eb8a816740877b40b461c93f125e88621c8378e52","dweb:/ipfs/QmPGvMZzKQvNiWKd8aRzzdW7oAizwrMgcMtnaworDkVHFC"],"license":"MIT"},"lib/v4-core/src/libraries/Hooks.sol":{"keccak256":"0xfa031f4efc096e9c93bb094509321e1c08b5eb271f46554f858e74803c43ae66","urls":["bzz-raw://7cc33d5eb869ecacfb70d024f7b925d191d98553dbb921bd8188f97d51c9e111","dweb:/ipfs/Qme5VCnaS5mXyqaWV5uiW5xcmTb56uCKBPFrLZp2dq41dQ"],"license":"MIT"},"lib/v4-core/src/libraries/LPFeeLibrary.sol":{"keccak256":"0xfbebd6766871b795d945a74b6110931f73fc775aeeecc2682d6d6ca841a01ece","urls":["bzz-raw://36fcc7098454971ae16d790ee9aee227c22c5cbbd7ff6e27e58ac29b901d5896","dweb:/ipfs/QmboCGTWtycGpda7E169pD67Fox2H9b1YRsNHcsxBRrhfo"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/LiquidityMath.sol":{"keccak256":"0x4a04b9383e2fb943c2c3ae7d0c9071b58dd97b6dac0a409fe1c79c3ca897bbcf","urls":["bzz-raw://0b33cf0ff936f62aa7f3b82922fa0ac52ac24471561e87fbf7ab8372607f6dfc","dweb:/ipfs/Qmcr6omwzJjQPu6HQ8E9vFXaTgrtqfb2KbfxbuQavfUzFa"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/Lock.sol":{"keccak256":"0x9338be4b5695f1da5f3d3f7a3eeaf7a356c1045458289586ac0cbe9cef77c6d5","urls":["bzz-raw://485ec42ed6155469d612a9a0c18068ebfbad74448792a338a435503de3ef1b2c","dweb:/ipfs/QmVnnv5u74MYatfRmBgrcfFYQcsMAJMG9jQ6ju8UiydKNF"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/NonZeroDeltaCount.sol":{"keccak256":"0x6b7e23f470b8352efdbf459a34dd0dcfdbe03e623cb4de67f4ad9be326691586","urls":["bzz-raw://b86af075e2331f7a065b15d91253f2ce6b845dfe09493338f2d7cdab6f9e4cc2","dweb:/ipfs/QmdzHJQapqAS42rMrYPgdvb4Sae7NVy3ESkNc1TuBRcxUC"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/ParseBytes.sol":{"keccak256":"0xf0795198d1e651b0b33fd1708d80a14f501bb2a1486905676d35f364e880f579","urls":["bzz-raw://5aea527fcec51d7274f0c189dc2479a6aa708fc91857187a4d7db46bb1d6c7a8","dweb:/ipfs/QmUTrwTPSZ7EHBaTyfAA78rZVP17iQzmAmvDcQ8GhDRAEf"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/Pool.sol":{"keccak256":"0x7a506727ae59f5b5487a0a16ec1d7038b7c2a4ee5f4a7fa7c444ec7df6ad5a7c","urls":["bzz-raw://befdd15aee06a7b2a3c64cb899220ec03a1ae8470ad17e19050bcca1ac5266a8","dweb:/ipfs/QmWPfBgfp5VKnku9ZtKXwYycyKdAZuCj6778T2HFrfQ61H"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/Position.sol":{"keccak256":"0x0309a650890f1cd93e2b4b1e9a40032d5feb8c6a0ccc24be24373bfd7590ff80","urls":["bzz-raw://63aae574b22048f1453da8f9142374e334683bb3a069c2312f73e6b857842bce","dweb:/ipfs/QmcJZK3kU4jsWfJKBpRq2kaouutEDHcytgMX8ZaGeBsbgu"],"license":"BUSL-1.1"},"lib/v4-core/src/libraries/ProtocolFeeLibrary.sol":{"keccak256":"0x2739e8f54707c6a0e23f9c61a0783dd18b107c3fc287b2827f1ab4b41f891902","urls":["bzz-raw://2e3b154410bbfcbe8808c6dfb74c4bbbac50a59e228cee59b34e169dbd34ee1a","dweb:/ipfs/QmcRoM6T2F7FTHtGdD5aRiVthCon8oiWur661GCrk5FejP"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/SafeCast.sol":{"keccak256":"0xbccc4f8d5d467d162d7f0ab5a7f22bcccf05ae07577b9728c9e3030c63977e60","urls":["bzz-raw://0003ea7a515ba709a3fdeaa19e7930c1f883b3b4fbdbf389d4f2f85b25eb72b4","dweb:/ipfs/QmYs8uNcYRGuGUbeBfF27fhArNaQ5Y9iMCTMfgic5d39fM"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/SqrtPriceMath.sol":{"keccak256":"0x1a5a8fd4a21cec19c0c253201e9b5534e8d810eb132bceee04af37fd78adb5db","urls":["bzz-raw://afa2a5950c9057fd3c00a6f413fba91c4c7dab06d573f7349aaf8f806c0e1f31","dweb:/ipfs/Qmb2m62xAPRBtxtx3sV7MAFw2vHWNm9m49ctPHmFX5hozt"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/StateLibrary.sol":{"keccak256":"0x67ead4d1ffe7e4fc381cef059c8d4941c7b4d581ef043fc8d3278d0829da414e","urls":["bzz-raw://0d12edd46a3ff2e19ea9b650507ea22e7714daa335a6b40f4d2f6d29c16431e4","dweb:/ipfs/QmZn6dzXZgR3rGohZAvKzqYMgm5n9qTrpi1VhXizYhiquH"],"license":"MIT"},"lib/v4-core/src/libraries/SwapMath.sol":{"keccak256":"0xa8cedd0f63b2d8b6faac60455f499c79816f53fbd86f3bb0706fae426b2c231e","urls":["bzz-raw://8d926c2df899b21811862d106d5e1d2b5bdf83c76ae6ff4216e7c9ce443d8e75","dweb:/ipfs/QmTTVSCumUXZ4vf3R1GwfqJSTgLFyjueuxZkRH9U6dsTb3"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/TickBitmap.sol":{"keccak256":"0x23abd96aa808657304affd775666d7cc5fb0ab564f87d1b65fbf8dc5877d9cd6","urls":["bzz-raw://4c7686aefb704a3efe97cc0e8f180ed48f7667f5ae69d3754962f04352c66b79","dweb:/ipfs/QmULiCBW9s2hB6SmnJTi2wiAwgkLXpZJcdVZm9f77zDNuc"],"license":"MIT"},"lib/v4-core/src/libraries/TickMath.sol":{"keccak256":"0x64c668177d82bb185d902fb2190630ccb67babb6439422979692ac2f8dfb6dcd","urls":["bzz-raw://e2714a025df18c22f20b358b7143e8a5c55cffb20c7de292be0376845a5f0408","dweb:/ipfs/QmWaeCkxwkVuReFUSK2nDat1BB5DJ8BUowwGwmVyKpsrME"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/libraries/TransientStateLibrary.sol":{"keccak256":"0x1bc28f30c176c7c598522da0d8907a90c4cd8ecce81775bb4deb3a9b78782f86","urls":["bzz-raw://fb5c05fb51e59ef168ba884c4ea3627525dba9feea0de9ffa0587438f70fd095","dweb:/ipfs/Qmbx3ntPDZ9VeGsAnVNSM5DKmhPg92yobh5ZHbvdGWtHUd"],"license":"MIT"},"lib/v4-core/src/libraries/UnsafeMath.sol":{"keccak256":"0xe9b87da934af38419d4b5f20cc09943dbb569425448fc23fdc5ec6aebbb63c84","urls":["bzz-raw://29838c28905c34f9602a453759b55f5acc6aff02bf6d7a6afac5d1a245dd5db3","dweb:/ipfs/QmfN5bhLFw1CsnnaJQNZd3bLpLufQcwt9ztaR71LA43UGY"],"license":"GPL-2.0-or-later"},"lib/v4-core/src/test/PoolModifyLiquidityTest.sol":{"keccak256":"0x4578759af55db566eee1d19c19a285710b1d301b511e37df4a1072c2d5a47ade","urls":["bzz-raw://aa6588f1f695efe625241fdbad07730611c8bec77d963698c6412775b7dd68a7","dweb:/ipfs/QmeDGAKa9sR6Wk5ibyzt4YGa6tdtjmFPzJafMbBgkWRB9d"],"license":"UNLICENSED"},"lib/v4-core/src/test/PoolSwapTest.sol":{"keccak256":"0x389d2274a70c565c12c8fd7f0f5bdbee7532d842936243141c65cf1477c1a7e8","urls":["bzz-raw://cdaff983aa947444cece280d8485f524a778cf8843c3f8b96f60e4ad137aa8d3","dweb:/ipfs/QmP7qbC3UZz723pTWuJh18qap1vYAHDY5UoJwGtvosWs9k"],"license":"UNLICENSED"},"lib/v4-core/src/test/PoolTestBase.sol":{"keccak256":"0x71db5a5215d858124dd2ccf73c4474421651f248e4c85d33455d95abced0a23c","urls":["bzz-raw://fac0df901621d44a1b98ce4569616940ca6700e7829357bdf18509237b822072","dweb:/ipfs/Qmf9sWokQvzmKfAY6Vd4QzyTyhikqCb8zUowrFPe9DRxs5"],"license":"UNLICENSED"},"lib/v4-core/src/types/BalanceDelta.sol":{"keccak256":"0xa719c8fe51e0a9524280178f19f6851bcc3b3b60e73618f3d60905d35ae5569f","urls":["bzz-raw://7436928dc9de35c6c7c5c636cb51adaf295cfd590da83b19a004ae33cbec9ef9","dweb:/ipfs/QmRJ9yZkUpzk4433GX3LgVVL8jwpbSYSUwXcucKisf3v4H"],"license":"MIT"},"lib/v4-core/src/types/BeforeSwapDelta.sol":{"keccak256":"0x2a774312d91285313d569da1a718c909655da5432310417692097a1d4dc83a78","urls":["bzz-raw://a2c7a0379955cff9c17ab9e61f95e42909aa5947c22740f86ce940d09856f782","dweb:/ipfs/QmaAuo8UBYXsGrVuKh8iRoAAdqwtg1jDq515cW1ZRP5m9K"],"license":"MIT"},"lib/v4-core/src/types/Currency.sol":{"keccak256":"0xc77e2d4d380be1887078b1d21e2381fe4e9138dce8c7efbf9050aa7d65d75d4c","urls":["bzz-raw://b85a1edba4be624be660d69badac1e3641d83190893839fa30260eef316d00c8","dweb:/ipfs/QmPaEaeNkhy5F4X9dwzyDzVU3H67P5ZhpeijDS7wscaSd9"],"license":"MIT"},"lib/v4-core/src/types/PoolId.sol":{"keccak256":"0x6946552d4f78712c769df47a9187aa0add8737bb6d06ef04b63a33a3c0ff59f8","urls":["bzz-raw://637851aaa9e06ff59b517e6da17dad3476968c0bc62e141158f76526a8f9c79f","dweb:/ipfs/QmVUxPCRCBE23XQdCrroeUuFqNTtq2LvJaDYmp43QGNsMB"],"license":"MIT"},"lib/v4-core/src/types/PoolKey.sol":{"keccak256":"0x10a2ff74d87d105f52c6c10f0c6ea0548c12a75dfb979abab8a8b7d647305162","urls":["bzz-raw://a0680665f799067c0f0238e864e363c265ff23188dfe6ae1c4738f7d0a281ccf","dweb:/ipfs/QmRCkZhaPknrV9cHkUiU3HVyMYYT3UaD8RfptHi4qB62zY"],"license":"MIT"},"lib/v4-core/src/types/Slot0.sol":{"keccak256":"0x8b4912fac7e25ea680056748121113f902d56f8b2640f421d5c38d438db11c1b","urls":["bzz-raw://c19b1ff5b951fb54129268d2be37d82c8bb3ea6e29ac9bc78a8a37794fc082b8","dweb:/ipfs/QmTAQ2mUoiT77hoWJAfn9pyoGy47qaevn45QHrbyovGt2C"],"license":"MIT"},"lib/v4-core/test/utils/CurrencySettler.sol":{"keccak256":"0xf5d04aa76b3ac6ff75396661e75ec612035ebd73d23eb6f4e207dbd46392688e","urls":["bzz-raw://67a67b94a2987309f06003374ddfc30ab8e81d9fec3b1585e93871eec6966d96","dweb:/ipfs/QmYLzboZNfXoNufKX8UYMGhHVChqMK96vwFWjKeoWcfb24"],"license":"MIT"},"src/ArenaController.sol":{"keccak256":"0x13844620690926230918f4a4b08342189e0efa19d99f5b5c7f1a7f723cd5267c","urls":["bzz-raw://4f6835b850d20212664a044da6ba1a5b5da9861dd047e0d0752c21850e3fa784","dweb:/ipfs/QmYf5o3sxxHqWpV5kr9wapkNEMj2zN7LTYroLpPzk4pTWF"],"license":null},"src/ArenaToken.sol":{"keccak256":"0x59ea858a9c33398efbfb770c958c1f544425ad32d73a3cd3991f6834ec04028a","urls":["bzz-raw://242a38f560c8dc312e27a30dad15ddf2fccb4163f4f0692f814b3cfa71180105","dweb:/ipfs/QmZqhSdNeRiVf5rJJYgX48SiUi1dwgpYAvMo6a7XBVRjXF"],"license":null},"src/Fetcher.sol":{"keccak256":"0x1895e5c0688650ca60371f208b62d9f64beea29bd7515b2600a1c8d5c73805df","urls":["bzz-raw://f9c904c9d032167f6d8fec1392c9a023f339a4aee9f75f06df6347a495af9d38","dweb:/ipfs/QmYSaPzRawAnh2qD3JY5uvWypEueo5hSTQVyVFfX96msfb"],"license":null},"src/LiquidExchange.sol":{"keccak256":"0xc979e540abc8a2d1bc82f2c741beb4ea9037c7e69ab11a5a20ef11ab7b9cee22","urls":["bzz-raw://e5f08cb7b8685020a78fd9b84d740649dcbf9ba92057cc5914d829f275d396c5","dweb:/ipfs/QmQKVvRCmSumaf2xtbLey6KdUyt9bfTLeq9gPGssisJi17"],"license":"MIT"}},"version":1},"id":53} \ No newline at end of file diff --git a/src/config.rs b/src/config.rs index 756a2d5..6af06d2 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,17 +1,56 @@ use alloy::primitives::U256; +use super::*; + /// Configuration for the simulation. pub struct Config { /// Number of steps to run the simulation for. pub steps: usize, /// Pool manager fee. - pub fee: U256, + pub manager_fee: U256, + + /// Pool tick spacing. + pub tick_spacing: Signed<24, 1>, + + /// Pool hook data. + pub hook_data: Bytes, + + /// Pool sqrt price x96. + pub sqrt_price_x96: Uint<160, 3>, + + /// Pool fee. + pub pool_fee: Uint<24, 1>, + + /// Initial price. + pub initial_price: U256, + + /// Pool hooks. + pub hooks: Address, } impl Config { /// Public constructor function for a new [`Config`]. - pub fn new(fee: U256, steps: usize) -> Self { - Config { steps, fee } + #[allow(clippy::too_many_arguments)] + pub fn new( + steps: usize, + manager_fee: U256, + tick_spacing: Signed<24, 1>, + hook_data: Bytes, + sqrt_price_x96: Uint<160, 3>, + pool_fee: Uint<24, 1>, + initial_price: U256, + hooks: Address, + ) -> Self { + Self { + steps, + manager_fee, + tick_spacing, + hook_data, + sqrt_price_x96, + pool_fee, + initial_price, + hooks, + } } } diff --git a/src/engine/arbitrageur.rs b/src/engine/arbitrageur.rs index 2a5d588..bd19728 100644 --- a/src/engine/arbitrageur.rs +++ b/src/engine/arbitrageur.rs @@ -1,10 +1,7 @@ use async_trait::async_trait; use super::*; -use crate::{ - types::controller::ArenaController, - AnvilProvider, Signal, -}; +use crate::{types::controller::ArenaController, AnvilProvider, Signal}; /// Generic trait allowing user defined arbitrage strategies. #[async_trait] @@ -45,8 +42,6 @@ impl Arbitrageur for FixedArbitrageur { .watch() .await .unwrap(); - - println!("current: {}", signal.current_value); } } diff --git a/src/engine/mod.rs b/src/engine/mod.rs index a1e733e..645c795 100644 --- a/src/engine/mod.rs +++ b/src/engine/mod.rs @@ -4,10 +4,7 @@ use alloy::{ }; use super::*; -use crate::{ - error::ArenaError, - types::controller::ArenaController, -}; +use crate::{error::ArenaError, types::controller::ArenaController}; /// Defines a trait for custom arbitrage strategies. pub mod arbitrageur; @@ -28,12 +25,13 @@ impl Engine { liquidity_delta: I256, tick_lower: Signed<24, 1>, tick_upper: Signed<24, 1>, + hook_data: Bytes, provider: AnvilProvider, ) -> Result<(), ArenaError> { let controller = ArenaController::new(self.controller, provider.clone()); controller - .addLiquidity(liquidity_delta, tick_lower, tick_upper) + .addLiquidity(liquidity_delta, tick_lower, tick_upper, hook_data) .nonce( provider .get_transaction_count(provider.default_signer_address()) diff --git a/src/lib.rs b/src/lib.rs index cf40647..f122217 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -136,9 +136,7 @@ impl Signal { #[cfg(test)] mod tests { - use alloy::{ - primitives::{Signed, Uint, I256}, - }; + use alloy::primitives::{Signed, Uint, I256}; use async_trait::async_trait; use rug::{ops::Pow, Float}; @@ -146,10 +144,7 @@ mod tests { use crate::{ arena::{Arena, ArenaBuilder}, config::Config, - engine::{ - arbitrageur::{FixedArbitrageur}, - inspector::EmptyInspector, - }, + engine::{arbitrageur::FixedArbitrageur, inspector::EmptyInspector}, feed::OrnsteinUhlenbeck, strategy::Strategy, }; @@ -170,6 +165,7 @@ mod tests { I256::try_from(10000000).unwrap(), Signed::try_from(-887272).unwrap(), Signed::try_from(887272).unwrap(), + Bytes::new(), provider, ) .await @@ -178,16 +174,10 @@ mod tests { async fn process( &self, _provider: AnvilProvider, - signal: Signal, + _signal: Signal, _inspector: &mut Box>, _engine: Engine, ) { - let sqrt_price_x96 = - Float::with_val(53, Float::parse(signal.sqrt_price_x96.to_string()).unwrap()); - let q96 = Float::with_val(53, 2).pow(96); - let price = Float::with_val(53, sqrt_price_x96 / q96).pow(2); - - println!("price: {}", price); } } @@ -199,11 +189,22 @@ mod tests { .with_strategy(Box::new(StrategyMock)) .with_feed(Box::new(OrnsteinUhlenbeck::new(1.0, 0.1, 1.0, 0.1, 0.1))) .with_inspector(Box::new(EmptyInspector {})) - .with_arbitrageur(Box::new(FixedArbitrageur { depth: Signed::try_from(10000).unwrap() })) + .with_arbitrageur(Box::new(FixedArbitrageur { + depth: Signed::try_from(10000).unwrap(), + })) .build(); arena - .run(Config::new(Uint::from(5000), 10000)) + .run(Config::new( + 100, + Uint::from(0), + Signed::try_from(2).unwrap(), + Bytes::new(), + Uint::from(79228162514264337593543950336_u128), + Uint::from(0), + Uint::from(1), + Address::ZERO, + )) .await .unwrap(); }