@uniswap/v4-periphery
Version:
🦄 Peripheral smart contracts for interacting with Uniswap v4
1 lines • 134 kB
JSON
{"abi":[{"type":"constructor","inputs":[{"name":"_poolManager","type":"address","internalType":"contract IPoolManager"},{"name":"_wstETH","type":"address","internalType":"contract IWstETH"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterAddLiquidity","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","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":"params","type":"tuple","internalType":"struct ModifyLiquidityParams","components":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}]},{"name":"delta","type":"int256","internalType":"BalanceDelta"},{"name":"feesAccrued","type":"int256","internalType":"BalanceDelta"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"},{"name":"","type":"int256","internalType":"BalanceDelta"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterDonate","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","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":"amount0","type":"uint256","internalType":"uint256"},{"name":"amount1","type":"uint256","internalType":"uint256"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterInitialize","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","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":"sqrtPriceX96","type":"uint160","internalType":"uint160"},{"name":"tick","type":"int24","internalType":"int24"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterRemoveLiquidity","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","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":"params","type":"tuple","internalType":"struct ModifyLiquidityParams","components":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}]},{"name":"delta","type":"int256","internalType":"BalanceDelta"},{"name":"feesAccrued","type":"int256","internalType":"BalanceDelta"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"},{"name":"","type":"int256","internalType":"BalanceDelta"}],"stateMutability":"nonpayable"},{"type":"function","name":"afterSwap","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","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":"params","type":"tuple","internalType":"struct SwapParams","components":[{"name":"zeroForOne","type":"bool","internalType":"bool"},{"name":"amountSpecified","type":"int256","internalType":"int256"},{"name":"sqrtPriceLimitX96","type":"uint160","internalType":"uint160"}]},{"name":"delta","type":"int256","internalType":"BalanceDelta"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"},{"name":"","type":"int128","internalType":"int128"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeAddLiquidity","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","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":"params","type":"tuple","internalType":"struct ModifyLiquidityParams","components":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}]},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeDonate","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","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":"amount0","type":"uint256","internalType":"uint256"},{"name":"amount1","type":"uint256","internalType":"uint256"},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeInitialize","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","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":"sqrtPriceX96","type":"uint160","internalType":"uint160"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeRemoveLiquidity","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","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":"params","type":"tuple","internalType":"struct ModifyLiquidityParams","components":[{"name":"tickLower","type":"int24","internalType":"int24"},{"name":"tickUpper","type":"int24","internalType":"int24"},{"name":"liquidityDelta","type":"int256","internalType":"int256"},{"name":"salt","type":"bytes32","internalType":"bytes32"}]},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"}],"stateMutability":"nonpayable"},{"type":"function","name":"beforeSwap","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"key","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":"params","type":"tuple","internalType":"struct SwapParams","components":[{"name":"zeroForOne","type":"bool","internalType":"bool"},{"name":"amountSpecified","type":"int256","internalType":"int256"},{"name":"sqrtPriceLimitX96","type":"uint160","internalType":"uint160"}]},{"name":"hookData","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes4","internalType":"bytes4"},{"name":"","type":"int256","internalType":"BeforeSwapDelta"},{"name":"","type":"uint24","internalType":"uint24"}],"stateMutability":"nonpayable"},{"type":"function","name":"getHookPermissions","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct Hooks.Permissions","components":[{"name":"beforeInitialize","type":"bool","internalType":"bool"},{"name":"afterInitialize","type":"bool","internalType":"bool"},{"name":"beforeAddLiquidity","type":"bool","internalType":"bool"},{"name":"afterAddLiquidity","type":"bool","internalType":"bool"},{"name":"beforeRemoveLiquidity","type":"bool","internalType":"bool"},{"name":"afterRemoveLiquidity","type":"bool","internalType":"bool"},{"name":"beforeSwap","type":"bool","internalType":"bool"},{"name":"afterSwap","type":"bool","internalType":"bool"},{"name":"beforeDonate","type":"bool","internalType":"bool"},{"name":"afterDonate","type":"bool","internalType":"bool"},{"name":"beforeSwapReturnDelta","type":"bool","internalType":"bool"},{"name":"afterSwapReturnDelta","type":"bool","internalType":"bool"},{"name":"afterAddLiquidityReturnDelta","type":"bool","internalType":"bool"},{"name":"afterRemoveLiquidityReturnDelta","type":"bool","internalType":"bool"}]}],"stateMutability":"pure"},{"type":"function","name":"poolManager","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IPoolManager"}],"stateMutability":"view"},{"type":"function","name":"underlyingCurrency","inputs":[],"outputs":[{"name":"","type":"address","internalType":"Currency"}],"stateMutability":"view"},{"type":"function","name":"wrapZeroForOne","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"wrapperCurrency","inputs":[],"outputs":[{"name":"","type":"address","internalType":"Currency"}],"stateMutability":"view"},{"type":"function","name":"wstETH","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IWstETH"}],"stateMutability":"view"},{"type":"error","name":"DeltaNotNegative","inputs":[{"name":"currency","type":"address","internalType":"Currency"}]},{"type":"error","name":"DeltaNotPositive","inputs":[{"name":"currency","type":"address","internalType":"Currency"}]},{"type":"error","name":"ExactInputNotSupported","inputs":[]},{"type":"error","name":"ExactOutputNotSupported","inputs":[]},{"type":"error","name":"HookNotImplemented","inputs":[]},{"type":"error","name":"InsufficientBalance","inputs":[]},{"type":"error","name":"InvalidPoolFee","inputs":[]},{"type":"error","name":"InvalidPoolToken","inputs":[]},{"type":"error","name":"LiquidityNotAllowed","inputs":[]},{"type":"error","name":"NotPoolManager","inputs":[]}],"bytecode":{"object":"0x610120604052348015610010575f80fd5b506040516123b93803806123b983398101604081905261002f916103d9565b81818181826001600160a01b031663c1fe3e486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561006f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100939190610411565b6001600160a01b038316608052826100aa306100e7565b506001600160a01b0391821660a081905290821660c081905290811060e0529083166101008190526100de92505f196101da565b50505050610433565b6101d7816101d2604080516101c0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081019190915250604080516101c08101825260018082525f60208301819052928201819052606082018390526080820183905260a0820183905260c0820181905260e0820183905261010082018390526101208201839052610140820152610160810182905261018081018290526101a081019190915290565b610260565b50565b5f60405163095ea7b360e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f51141617169150508061025a5760405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b604482015260640160405180910390fd5b50505050565b80511515612000831615151415806102845750602081015115156110008316151514155b8061029b5750604081015115156108008316151514155b806102b25750606081015115156104008316151514155b806102c95750608081015115156102008316151514155b806102e0575060a081015115156101008316151514155b806102f6575060c0810151151560808316151514155b8061030c575060e0810151151560408316151514155b806103235750610100810151151560208316151514155b8061033a5750610120810151151560108316151514155b806103515750610140810151151560088316151514155b806103685750610160810151151560048316151514155b8061037f5750610180810151151560028316151514155b8061039657506101a0810151151560018316151514155b156103ac576103ac630732d7b560e51b836103b0565b5050565b815f526001600160a01b03811660045260245ffd5b6001600160a01b03811681146101d7575f80fd5b5f80604083850312156103ea575f80fd5b82516103f5816103c5565b6020840151909250610406816103c5565b809150509250929050565b5f60208284031215610421575f80fd5b815161042c816103c5565b9392505050565b60805160a05160c05160e05161010051611e856105345f395f81816101ac01528181610d1801528181610f270152818161104b015261112a01525f8181610229015281816109b70152610b6901525f818161010401528181610bf701528181610de30152818161121301528181611283015261131001525f818161041301528181610b9e01526110d001525f818161043a015281816104880152818161050f0152818161058e0152818161061d015281816106ac01528181610732015281816107bf01528181610848015281816111e6015281816112e601528181611414015281816114c101528181611535015281816115d601526116c50152611e855ff3fe608060405234801561000f575f80fd5b50600436106100fb575f3560e01c80639f063efc11610093578063d52f63cf11610063578063d52f63cf1461040e578063dc4c90d314610435578063dc98354e1461045c578063e1b4af6914610307575f80fd5b80639f063efc1461025b578063b47b2fb1146102b9578063b6a8b0fa14610307578063c4e833ce1461031a575f80fd5b8063575e24b4116100ce578063575e24b4146101ce5780635d5711a5146102245780636c2bbe7e1461025b5780636fe7e6eb146102a6575f80fd5b80630bc6bffc146100ff57806321d0ee7014610150578063259982e5146101945780634aa07e64146101a7575b5f80fd5b6101267f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016361015e366004611945565b61046f565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610147565b6101636101a2366004611945565b6104f6565b6101267f000000000000000000000000000000000000000000000000000000000000000081565b6101e16101dc3660046119cc565b610573565b604080517fffffffff000000000000000000000000000000000000000000000000000000009094168452602084019290925262ffffff1690820152606001610147565b61024b7f000000000000000000000000000000000000000000000000000000000000000081565b6040519015158152602001610147565b61026e610269366004611a26565b610603565b604080517fffffffff000000000000000000000000000000000000000000000000000000009093168352602083019190915201610147565b6101636102b4366004611ab1565b610693565b6102cc6102c7366004611b10565b610718565b604080517fffffffff000000000000000000000000000000000000000000000000000000009093168352600f9190910b602083015201610147565b610163610315366004611b91565b6107a6565b610401604080516101c0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081019190915250604080516101c08101825260018082525f60208301819052928201819052606082018390526080820183905260a0820183905260c0820181905260e0820183905261010082018390526101208201839052610140820152610160810182905261018081018290526101a081019190915290565b6040516101479190611beb565b6101267f000000000000000000000000000000000000000000000000000000000000000081565b6101267f000000000000000000000000000000000000000000000000000000000000000081565b61016361046a366004611d0c565b61082f565b5f3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146104df576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104ec86868686866108b2565b9695505050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610566576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104ec86868686866108e5565b5f80803373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146105e5576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105f28888888888610918565b925092509250955095509592505050565b5f803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610674576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61068389898989898989610b31565b9150915097509795505050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610703576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61070f858585856108b2565b95945050505050565b5f803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610789576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610797888888888888610b31565b91509150965096945050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610816576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108248787878787876108b2565b979650505050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461089f576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108aa848484610b65565b949350505050565b5f6040517f0a85dc2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6040517f78895c1300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80806020860135811380801561092c57505f5b15610963576040517f0ace433b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8015801561096f575060015b156109a6576040517f21b865b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b36020880188611d53565b15157f0000000000000000000000000000000000000000000000000000000000000000151503610a84575f816109f5576109f08860200135610d12565b610a02565b610a026020890135611d9f565b90505f80610a0f83610db0565b915091505f84610a2f57610a2a610a2584610fae565b610fe5565b610a44565b610a3b610a2583610fae565b610a4490611dd5565b9050610a79610a568c60200135610fe5565b610a5f90611dd5565b60801b6fffffffffffffffffffffffffffffffff83161790565b965050505050610aff565b5f81610a9c57610a97886020013561101a565b610aa9565b610aa96020890135611d9f565b90505f80610ab6836110c9565b915091505f84610ad157610acc610a2584610fae565b610ae6565b610add610a2583610fae565b610ae690611dd5565b9050610af8610a568c60200135610fe5565b9650505050505b507f575e24b40000000000000000000000000000000000000000000000000000000092505f9050955095509592505050565b5f806040517f0a85dc2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f807f0000000000000000000000000000000000000000000000000000000000000000610c3957610bdb610b9c6020860186611e11565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b8015610c345750610c34610bf56040860160208701611e11565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b610c63565b610c49610bf56020860186611e11565b8015610c635750610c63610b9c6040860160208701611e11565b905080610c9c576040517fdcdedda900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cac6060850160408601611e2c565b62ffffff1615610ce8576040517f1213a0ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b507fdc98354e00000000000000000000000000000000000000000000000000000000949350505050565b5f610daa7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639576a0c86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da39190611e4e565b8390611391565b92915050565b6040517f19208451000000000000000000000000000000000000000000000000000000008152600481018290525f9081907f000000000000000000000000000000000000000000000000000000000000000090829073ffffffffffffffffffffffffffffffffffffffff831690631920845190602401602060405180830381865afa158015610e41573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e659190611e4e565b6040517f7a28fb880000000000000000000000000000000000000000000000000000000081526004810182905290915073ffffffffffffffffffffffffffffffffffffffff831690637a28fb8890602401602060405180830381865afa158015610ed1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ef59190611e4e565b6040517fb0e38900000000000000000000000000000000000000000000000000000000008152600481018290529094507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b0e3890090602401602060405180830381865afa158015610f81573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fa59190611e4e565b92505050915091565b805f811215610fe057610fe07f93dafdf1000000000000000000000000000000000000000000000000000000006113ac565b919050565b80600f81900b8114610fe057610fe07f93dafdf1000000000000000000000000000000000000000000000000000000006113ac565b6040517fb0e38900000000000000000000000000000000000000000000000000000000008152600481018290525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b0e3890090602401602060405180830381865afa1580156110a5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610daa9190611e4e565b5f806110f67f000000000000000000000000000000000000000000000000000000000000000030856113b4565b6040517fde0e9a3e000000000000000000000000000000000000000000000000000000008152600481018490528392505f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063de0e9a3e906024016020604051808303815f875af1158015611185573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111a99190611e4e565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192505f917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611258573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061127c9190611e4e565b90506112a97f00000000000000000000000000000000000000000000000000000000000000003084611470565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301525f917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015611357573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061137b9190611e4e565b90506113878282611e65565b9350505050915091565b5f6113a583670de0b6b3a764000084611667565b9392505050565b805f5260045ffd5b805f036113c057505050565b6040517f0b0d9c0900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152604482018390527f00000000000000000000000000000000000000000000000000000000000000001690630b0d9c09906064015f604051808303815f87803b158015611455575f80fd5b505af1158015611467573d5f803e3d5ffd5b50505050505050565b805f0361147c57505050565b6040517fa584119400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a5841194906024015f604051808303815f87803b158015611502575f80fd5b505af1158015611514573d5f803e3d5ffd5b5050505073ffffffffffffffffffffffffffffffffffffffff83166115c9577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166311da60b4826040518263ffffffff1660e01b815260040160206040518083038185885af115801561159e573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906115c39190611e4e565b50505050565b6115d48383836116a9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af115801561163e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115c39190611e4e565b505050565b5f827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048411830215820261169a575f80fd5b50910281810615159190040190565b61166273ffffffffffffffffffffffffffffffffffffffff84167f0000000000000000000000000000000000000000000000000000000000000000835f8361172a575f805f8085875af190508061172557611725835f7ff4b3b1bc000000000000000000000000000000000000000000000000000000006117e8565b6115c3565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f604082015250806115c3576115c3847fa9059cbb000000000000000000000000000000000000000000000000000000007ff27f64e4000000000000000000000000000000000000000000000000000000005b6040517f90bfb8650000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff851660048301527fffffffff0000000000000000000000000000000000000000000000000000000084166024830152608060448301526020601f3d018190040260a0810160648401523d608484015290913d5f60a483013e60048260a4018201527fffffffff0000000000000000000000000000000000000000000000000000000084168260c4018201528160e40181fd5b73ffffffffffffffffffffffffffffffffffffffff811681146118d7575f80fd5b50565b5f60a082840312156118ea575f80fd5b50919050565b5f608082840312156118ea575f80fd5b5f8083601f840112611910575f80fd5b50813567ffffffffffffffff811115611927575f80fd5b60208301915083602082850101111561193e575f80fd5b9250929050565b5f805f805f610160868803121561195a575f80fd5b8535611965816118b6565b945061197487602088016118da565b93506119838760c088016118f0565b925061014086013567ffffffffffffffff81111561199f575f80fd5b6119ab88828901611900565b969995985093965092949392505050565b5f606082840312156118ea575f80fd5b5f805f805f61014086880312156119e1575f80fd5b85356119ec816118b6565b94506119fb87602088016118da565b9350611a0a8760c088016119bc565b925061012086013567ffffffffffffffff81111561199f575f80fd5b5f805f805f805f6101a0888a031215611a3d575f80fd5b8735611a48816118b6565b9650611a578960208a016118da565b9550611a668960c08a016118f0565b94506101408801359350610160880135925061018088013567ffffffffffffffff811115611a92575f80fd5b611a9e8a828b01611900565b989b979a50959850939692959293505050565b5f805f806101008587031215611ac5575f80fd5b8435611ad0816118b6565b9350611adf86602087016118da565b925060c0850135611aef816118b6565b915060e0850135600281900b8114611b05575f80fd5b939692955090935050565b5f805f805f806101608789031215611b26575f80fd5b8635611b31816118b6565b9550611b4088602089016118da565b9450611b4f8860c089016119bc565b9350610120870135925061014087013567ffffffffffffffff811115611b73575f80fd5b611b7f89828a01611900565b979a9699509497509295939492505050565b5f805f805f806101208789031215611ba7575f80fd5b8635611bb2816118b6565b9550611bc188602089016118da565b945060c0870135935060e0870135925061010087013567ffffffffffffffff811115611b73575f80fd5b8151151581526101c081016020830151611c09602084018215159052565b506040830151611c1d604084018215159052565b506060830151611c31606084018215159052565b506080830151611c45608084018215159052565b5060a0830151611c5960a084018215159052565b5060c0830151611c6d60c084018215159052565b5060e0830151611c8160e084018215159052565b50610100830151611c9761010084018215159052565b50610120830151611cad61012084018215159052565b50610140830151611cc361014084018215159052565b50610160830151611cd961016084018215159052565b50610180830151611cef61018084018215159052565b506101a0830151611d056101a084018215159052565b5092915050565b5f805f60e08486031215611d1e575f80fd5b8335611d29816118b6565b9250611d3885602086016118da565b915060c0840135611d48816118b6565b809150509250925092565b5f60208284031215611d63575f80fd5b813580151581146113a5575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f7f80000000000000000000000000000000000000000000000000000000000000008203611dcf57611dcf611d72565b505f0390565b5f81600f0b7fffffffffffffffffffffffffffffffff800000000000000000000000000000008103611e0957611e09611d72565b5f0392915050565b5f60208284031215611e21575f80fd5b81356113a5816118b6565b5f60208284031215611e3c575f80fd5b813562ffffff811681146113a5575f80fd5b5f60208284031215611e5e575f80fd5b5051919050565b81810381811115610daa57610daa611d7256fea164736f6c634300081a000a","sourceMap":"887:1423:153:-:0;;;934:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1001:12;1015:7;1424:8:152;1468:7;1532;-1:-1:-1;;;;;1532:13:152;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;782:26:144;;;;3175:8:150;879:25:189::1;899:4;879:19;:25::i;:::-;-1:-1:-1::0;;;;;;3195:26:150;;::::1;;::::0;;;3231:32;;::::1;;::::0;;;734:50:120;;;3273:39:150::1;::::0;1602:16:152;;::::1;;::::0;;;1628:90:::1;::::0;-1:-1:-1;;;1628:54:152::1;:90::i;:::-;1330:395:::0;;934:92:153;;887:1423;;1555:142:189;1632:58;1662:5;1669:20;887:1423:153;;;;;;;;-1:-1:-1;887:1423:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3457:568:150;;;;;;;;3507:4;3457:568;;;-1:-1:-1;3457:568:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3354:678;1669:20:189;1632:29;:58::i;:::-;1555:142;:::o;4729:1605:66:-;4840:12;5010:4;5004:11;-1:-1:-1;;;5133:17:66;5126:93;-1:-1:-1;;;;;5270:2:66;5266:51;5262:1;5243:17;5239:25;5232:86;5404:6;5399:2;5380:17;5376:26;5369:42;6256:2;6253:1;6249:2;6230:17;6227:1;6220:5;6213;6208:51;5777:16;5770:24;5764:2;5746:16;5743:24;5739:1;5735;5729:8;5726:15;5722:46;5719:76;5519:754;5508:765;;;6301:7;6293:34;;;;-1:-1:-1;;;6293:34:66;;1093:2:262;6293:34:66;;;1075:21:262;1132:2;1112:18;;;1105:30;-1:-1:-1;;;1151:18:262;;;1144:44;1205:18;;6293:34:66;;;;;;;;4830:1504;4729:1605;;;:::o;3610:1599:89:-;3729:28;;:74;;1397:7;16467:29;;:34;;3729:74;;;:166;;-1:-1:-1;3823:27:89;;;;:72;;1460:7;16467:29;;:34;;3823:72;;3729:166;:265;;;-1:-1:-1;3915:30:89;;;;:79;;1528:7;16467:29;;:34;;3915:79;;3729:265;:362;;;-1:-1:-1;4014:29:89;;;;:77;;1594:7;16467:29;;:34;;4014:77;;3729:362;:467;;;-1:-1:-1;4111:33:89;;;;:85;;1665:6;16467:29;;:34;;4111:85;;3729:467;:570;;;-1:-1:-1;4216:32:89;;;;:83;;1733:6;16467:29;;:34;;4216:83;;3729:570;:652;;;-1:-1:-1;4319:22:89;;;;:62;;1791:6;16467:29;;:34;;4319:62;;3729:652;:732;;;-1:-1:-1;4401:21:89;;;;:60;;1847:6;16467:29;;:34;;4401:60;;3729:732;:818;;;-1:-1:-1;4481:24:89;;;;:66;;1907:6;16467:29;;:34;;4481:66;;3729:818;:902;;;-1:-1:-1;4567:23:89;;;;:64;;1965:6;16467:29;;:34;;4567:64;;3729:902;:1009;;;-1:-1:-1;4651:33:89;;;;:87;;2037:6;16467:29;;:34;;4651:87;;3729:1009;:1114;;;-1:-1:-1;4758:32:89;;;;:85;;2107:6;16467:29;;:34;;4758:85;;3729:1114;:1236;;;-1:-1:-1;4863:40:89;;;;:102;;2186:6;16467:29;;:34;;4863:102;;3729:1236;:1384;;;-1:-1:-1;4985:43:89;;;;:128;;2268:6;16467:29;;:34;;4985:128;;3729:1384;3712:1491;;;5138:54;-1:-1:-1;;;5186:4:89;5138:39;:54::i;:::-;3610:1599;;:::o;1009:257:85:-;1133:8;1130:1;1123:19;-1:-1:-1;;;;;1172:4:85;1168:53;1162:4;1155:67;1245:4;1242:1;1235:15;14:145:262;-1:-1:-1;;;;;103:31:262;;93:42;;83:70;;149:1;146;139:12;164:452;282:6;290;343:2;331:9;322:7;318:23;314:32;311:52;;;359:1;356;349:12;311:52;391:9;385:16;410:45;449:5;410:45;:::i;:::-;524:2;509:18;;503:25;474:5;;-1:-1:-1;537:47:262;503:25;537:47;:::i;:::-;603:7;593:17;;;164:452;;;;;:::o;621:265::-;691:6;744:2;732:9;723:7;719:23;715:32;712:52;;;760:1;757;750:12;712:52;792:9;786:16;811:45;850:5;811:45;:::i;:::-;875:5;621:265;-1:-1:-1;;;621:265:262:o;891:338::-;887:1423:153;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b50600436106100fb575f3560e01c80639f063efc11610093578063d52f63cf11610063578063d52f63cf1461040e578063dc4c90d314610435578063dc98354e1461045c578063e1b4af6914610307575f80fd5b80639f063efc1461025b578063b47b2fb1146102b9578063b6a8b0fa14610307578063c4e833ce1461031a575f80fd5b8063575e24b4116100ce578063575e24b4146101ce5780635d5711a5146102245780636c2bbe7e1461025b5780636fe7e6eb146102a6575f80fd5b80630bc6bffc146100ff57806321d0ee7014610150578063259982e5146101945780634aa07e64146101a7575b5f80fd5b6101267f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61016361015e366004611945565b61046f565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610147565b6101636101a2366004611945565b6104f6565b6101267f000000000000000000000000000000000000000000000000000000000000000081565b6101e16101dc3660046119cc565b610573565b604080517fffffffff000000000000000000000000000000000000000000000000000000009094168452602084019290925262ffffff1690820152606001610147565b61024b7f000000000000000000000000000000000000000000000000000000000000000081565b6040519015158152602001610147565b61026e610269366004611a26565b610603565b604080517fffffffff000000000000000000000000000000000000000000000000000000009093168352602083019190915201610147565b6101636102b4366004611ab1565b610693565b6102cc6102c7366004611b10565b610718565b604080517fffffffff000000000000000000000000000000000000000000000000000000009093168352600f9190910b602083015201610147565b610163610315366004611b91565b6107a6565b610401604080516101c0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081019190915250604080516101c08101825260018082525f60208301819052928201819052606082018390526080820183905260a0820183905260c0820181905260e0820183905261010082018390526101208201839052610140820152610160810182905261018081018290526101a081019190915290565b6040516101479190611beb565b6101267f000000000000000000000000000000000000000000000000000000000000000081565b6101267f000000000000000000000000000000000000000000000000000000000000000081565b61016361046a366004611d0c565b61082f565b5f3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146104df576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104ec86868686866108b2565b9695505050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610566576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104ec86868686866108e5565b5f80803373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146105e5576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105f28888888888610918565b925092509250955095509592505050565b5f803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610674576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61068389898989898989610b31565b9150915097509795505050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610703576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61070f858585856108b2565b95945050505050565b5f803373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610789576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610797888888888888610b31565b91509150965096945050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610816576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108248787878787876108b2565b979650505050505050565b5f3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461089f576040517fae18210a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108aa848484610b65565b949350505050565b5f6040517f0a85dc2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6040517f78895c1300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80806020860135811380801561092c57505f5b15610963576040517f0ace433b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8015801561096f575060015b156109a6576040517f21b865b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b36020880188611d53565b15157f0000000000000000000000000000000000000000000000000000000000000000151503610a84575f816109f5576109f08860200135610d12565b610a02565b610a026020890135611d9f565b90505f80610a0f83610db0565b915091505f84610a2f57610a2a610a2584610fae565b610fe5565b610a44565b610a3b610a2583610fae565b610a4490611dd5565b9050610a79610a568c60200135610fe5565b610a5f90611dd5565b60801b6fffffffffffffffffffffffffffffffff83161790565b965050505050610aff565b5f81610a9c57610a97886020013561101a565b610aa9565b610aa96020890135611d9f565b90505f80610ab6836110c9565b915091505f84610ad157610acc610a2584610fae565b610ae6565b610add610a2583610fae565b610ae690611dd5565b9050610af8610a568c60200135610fe5565b9650505050505b507f575e24b40000000000000000000000000000000000000000000000000000000092505f9050955095509592505050565b5f806040517f0a85dc2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f807f0000000000000000000000000000000000000000000000000000000000000000610c3957610bdb610b9c6020860186611e11565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b8015610c345750610c34610bf56040860160208701611e11565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b610c63565b610c49610bf56020860186611e11565b8015610c635750610c63610b9c6040860160208701611e11565b905080610c9c576040517fdcdedda900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cac6060850160408601611e2c565b62ffffff1615610ce8576040517f1213a0ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b507fdc98354e00000000000000000000000000000000000000000000000000000000949350505050565b5f610daa7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639576a0c86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d7f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610da39190611e4e565b8390611391565b92915050565b6040517f19208451000000000000000000000000000000000000000000000000000000008152600481018290525f9081907f000000000000000000000000000000000000000000000000000000000000000090829073ffffffffffffffffffffffffffffffffffffffff831690631920845190602401602060405180830381865afa158015610e41573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e659190611e4e565b6040517f7a28fb880000000000000000000000000000000000000000000000000000000081526004810182905290915073ffffffffffffffffffffffffffffffffffffffff831690637a28fb8890602401602060405180830381865afa158015610ed1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ef59190611e4e565b6040517fb0e38900000000000000000000000000000000000000000000000000000000008152600481018290529094507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b0e3890090602401602060405180830381865afa158015610f81573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fa59190611e4e565b92505050915091565b805f811215610fe057610fe07f93dafdf1000000000000000000000000000000000000000000000000000000006113ac565b919050565b80600f81900b8114610fe057610fe07f93dafdf1000000000000000000000000000000000000000000000000000000006113ac565b6040517fb0e38900000000000000000000000000000000000000000000000000000000008152600481018290525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b0e3890090602401602060405180830381865afa1580156110a5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610daa9190611e4e565b5f806110f67f000000000000000000000000000000000000000000000000000000000000000030856113b4565b6040517fde0e9a3e000000000000000000000000000000000000000000000000000000008152600481018490528392505f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063de0e9a3e906024016020604051808303815f875af1158015611185573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111a99190611e4e565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192505f917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611258573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061127c9190611e4e565b90506112a97f00000000000000000000000000000000000000000000000000000000000000003084611470565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301525f917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015611357573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061137b9190611e4e565b90506113878282611e65565b9350505050915091565b5f6113a583670de0b6b3a764000084611667565b9392505050565b805f5260045ffd5b805f036113c057505050565b6040517f0b0d9c0900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301528381166024830152604482018390527f00000000000000000000000000000000000000000000000000000000000000001690630b0d9c09906064015f604051808303815f87803b158015611455575f80fd5b505af1158015611467573d5f803e3d5ffd5b50505050505050565b805f0361147c57505050565b6040517fa584119400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063a5841194906024015f604051808303815f87803b158015611502575f80fd5b505af1158015611514573d5f803e3d5ffd5b5050505073ffffffffffffffffffffffffffffffffffffffff83166115c9577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166311da60b4826040518263ffffffff1660e01b815260040160206040518083038185885af115801561159e573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906115c39190611e4e565b50505050565b6115d48383836116a9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166311da60b46040518163ffffffff1660e01b81526004016020604051808303815f875af115801561163e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115c39190611e4e565b505050565b5f827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048411830215820261169a575f80fd5b50910281810615159190040190565b61166273ffffffffffffffffffffffffffffffffffffffff84167f0000000000000000000000000000000000000000000000000000000000000000835f8361172a575f805f8085875af190508061172557611725835f7ff4b3b1bc000000000000000000000000000000000000000000000000000000006117e8565b6115c3565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f604082015250806115c3576115c3847fa9059cbb000000000000000000000000000000000000000000000000000000007ff27f64e4000000000000000000000000000000000000000000000000000000005b6040517f90bfb8650000000000000000000000000000000000000000000000000000000080825273ffffffffffffffffffffffffffffffffffffffff851660048301527fffffffff0000000000000000000000000000000000000000000000000000000084166024830152608060448301526020601f3d018190040260a0810160648401523d608484015290913d5f60a483013e60048260a4018201527fffffffff0000000000000000000000000000000000000000000000000000000084168260c4018201528160e40181fd5b73ffffffffffffffffffffffffffffffffffffffff811681146118d7575f80fd5b50565b5f60a082840312156118ea575f80fd5b50919050565b5f608082840312156118ea575f80fd5b5f8083601f840112611910575f80fd5b50813567ffffffffffffffff811115611927575f80fd5b60208301915083602082850101111561193e575f80fd5b9250929050565b5f805f805f610160868803121561195a575f80fd5b8535611965816118b6565b945061197487602088016118da565b93506119838760c088016118f0565b925061014086013567ffffffffffffffff81111561199f575f80fd5b6119ab88828901611900565b969995985093965092949392505050565b5f606082840312156118ea575f80fd5b5f805f805f61014086880312156119e1575f80fd5b85356119ec816118b6565b94506119fb87602088016118da565b9350611a0a8760c088016119bc565b925061012086013567ffffffffffffffff81111561199f575f80fd5b5f805f805f805f6101a0888a031215611a3d575f80fd5b8735611a48816118b6565b9650611a578960208a016118da565b9550611a668960c08a016118f0565b94506101408801359350610160880135925061018088013567ffffffffffffffff811115611a92575f80fd5b611a9e8a828b01611900565b989b979a50959850939692959293505050565b5f805f806101008587031215611ac5575f80fd5b8435611ad0816118b6565b9350611adf86602087016118da565b925060c0850135611aef816118b6565b915060e0850135600281900b8114611b05575f80fd5b939692955090935050565b5f805f805f806101608789031215611b26575f80fd5b8635611b31816118b6565b9550611b4088602089016118da565b9450611b4f8860c089016119bc565b9350610120870135925061014087013567ffffffffffffffff811115611b73575f80fd5b611b7f89828a01611900565b979a9699509497509295939492505050565b5f805f805f806101208789031215611ba7575f80fd5b8635611bb2816118b6565b9550611bc188602089016118da565b945060c0870135935060e0870135925061010087013567ffffffffffffffff811115611b73575f80fd5b8151151581526101c081016020830151611c09602084018215159052565b506040830151611c1d604084018215159052565b506060830151611c31606084018215159052565b506080830151611c45608084018215159052565b5060a0830151611c5960a084018215159052565b5060c0830151611c6d60c084018215159052565b5060e0830151611c8160e084018215159052565b50610100830151611c9761010084018215159052565b50610120830151611cad61012084018215159052565b50610140830151611cc361014084018215159052565b50610160830151611cd961016084018215159052565b50610180830151611cef61018084018215159052565b506101a0830151611d056101a084018215159052565b5092915050565b5f805f60e08486031215611d1e575f80fd5b8335611d29816118b6565b9250611d3885602086016118da565b915060c0840135611d48816118b6565b809150509250925092565b5f60208284031215611d63575f80fd5b813580151581146113a5575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f7f80000000000000000000000000000000000000000000000000000000000000008203611dcf57611dcf611d72565b505f0390565b5f81600f0b7fffffffffffffffffffffffffffffffff800000000000000000000000000000008103611e0957611e09611d72565b5f0392915050565b5f60208284031215611e21575f80fd5b81356113a5816118b6565b5f60208284031215611e3c575f80fd5b813562ffffff811681146113a5575f80fd5b5f60208284031215611e5e575f80fd5b5051919050565b81810381811115610daa57610daa611d7256fea164736f6c634300081a000a","sourceMap":"887:1423:153:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2302:44:150;;;;;;;;220:42:262;208:55;;;190:74;;178:2;163:18;2302:44:150;;;;;;;;3093:290:189;;;;;;:::i;:::-;;:::i;:::-;;;2130:66:262;2118:79;;;2100:98;;2088:2;2073:18;3093:290:189;1956:248:262;2560:284:189;;;;;;:::i;:::-;;:::i;1055:31:152:-;;;;;5032:272:189;;;;;;:::i;:::-;;:::i;:::-;;;;3696:66:262;3684:79;;;3666:98;;3795:2;3780:18;;3773:34;;;;3855:8;3843:21;3823:18;;;3816:49;3654:2;3639:18;5032:272:189;