UNPKG

@uniswap/v4-core

Version:

🦄 Core smart contracts of Uniswap v4

1 lines • 186 kB
{"abi":[{"type":"constructor","inputs":[{"name":"delegateManager","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"balance","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"burn","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"clear","inputs":[{"name":"currency","type":"address","internalType":"Currency"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"collectProtocolFees","inputs":[{"name":"recipient","type":"address","internalType":"address"},{"name":"currency","type":"address","internalType":"Currency"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"amountCollected","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"donate","inputs":[{"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":"delta","type":"int256","internalType":"BalanceDelta"}],"stateMutability":"nonpayable"},{"type":"function","name":"extsload","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"extsload","inputs":[{"name":"startSlot","type":"bytes32","internalType":"bytes32"},{"name":"nSlots","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"view"},{"type":"function","name":"extsload","inputs":[{"name":"slots","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"view"},{"type":"function","name":"exttload","inputs":[{"name":"slots","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"","type":"bytes32[]","internalType":"bytes32[]"}],"stateMutability":"view"},{"type":"function","name":"exttload","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"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":"tick","type":"int24","internalType":"int24"}],"stateMutability":"nonpayable"},{"type":"function","name":"isOperator","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"operator","type":"address","internalType":"address"}],"outputs":[{"name":"isOperator","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"mint","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"modifyLiquidity","inputs":[{"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":"callerDelta","type":"int256","internalType":"BalanceDelta"},{"name":"feesAccrued","type":"int256","internalType":"BalanceDelta"}],"stateMutability":"nonpayable"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"protocolFeeController","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"protocolFeesAccrued","inputs":[{"name":"currency","type":"address","internalType":"Currency"}],"outputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"setOperator","inputs":[{"name":"operator","type":"address","internalType":"address"},{"name":"approved","type":"bool","internalType":"bool"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"setProtocolFee","inputs":[{"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":"newProtocolFee","type":"uint24","internalType":"uint24"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setProtocolFeeController","inputs":[{"name":"controller","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"settle","inputs":[],"outputs":[{"name":"paid","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"settleFor","inputs":[{"name":"recipient","type":"address","internalType":"address"}],"outputs":[{"name":"paid","type":"uint256","internalType":"uint256"}],"stateMutability":"payable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"swap","inputs":[{"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":"swapDelta","type":"int256","internalType":"BalanceDelta"}],"stateMutability":"nonpayable"},{"type":"function","name":"sync","inputs":[{"name":"currency","type":"address","internalType":"Currency"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"take","inputs":[{"name":"currency","type":"address","internalType":"Currency"},{"name":"to","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"transfer","inputs":[{"name":"receiver","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"receiver","type":"address","internalType":"address"},{"name":"id","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unlock","inputs":[{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"result","type":"bytes","internalType":"bytes"}],"stateMutability":"nonpayable"},{"type":"function","name":"updateDynamicLPFee","inputs":[{"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":"newDynamicLPFee","type":"uint24","internalType":"uint24"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Donate","inputs":[{"name":"id","type":"bytes32","indexed":true,"internalType":"PoolId"},{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"amount0","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amount1","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialize","inputs":[{"name":"id","type":"bytes32","indexed":true,"internalType":"PoolId"},{"name":"currency0","type":"address","indexed":true,"internalType":"Currency"},{"name":"currency1","type":"address","indexed":true,"internalType":"Currency"},{"name":"fee","type":"uint24","indexed":false,"internalType":"uint24"},{"name":"tickSpacing","type":"int24","indexed":false,"internalType":"int24"},{"name":"hooks","type":"address","indexed":false,"internalType":"contract IHooks"},{"name":"sqrtPriceX96","type":"uint160","indexed":false,"internalType":"uint160"},{"name":"tick","type":"int24","indexed":false,"internalType":"int24"}],"anonymous":false},{"type":"event","name":"ModifyLiquidity","inputs":[{"name":"id","type":"bytes32","indexed":true,"internalType":"PoolId"},{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"tickLower","type":"int24","indexed":false,"internalType":"int24"},{"name":"tickUpper","type":"int24","indexed":false,"internalType":"int24"},{"name":"liquidityDelta","type":"int256","indexed":false,"internalType":"int256"},{"name":"salt","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"OperatorSet","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"operator","type":"address","indexed":true,"internalType":"address"},{"name":"approved","type":"bool","indexed":false,"internalType":"bool"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"user","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ProtocolFeeControllerUpdated","inputs":[{"name":"protocolFeeController","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"ProtocolFeeUpdated","inputs":[{"name":"id","type":"bytes32","indexed":true,"internalType":"PoolId"},{"name":"protocolFee","type":"uint24","indexed":false,"internalType":"uint24"}],"anonymous":false},{"type":"event","name":"Swap","inputs":[{"name":"id","type":"bytes32","indexed":true,"internalType":"PoolId"},{"name":"sender","type":"address","indexed":true,"internalType":"address"},{"name":"amount0","type":"int128","indexed":false,"internalType":"int128"},{"name":"amount1","type":"int128","indexed":false,"internalType":"int128"},{"name":"sqrtPriceX96","type":"uint160","indexed":false,"internalType":"uint160"},{"name":"liquidity","type":"uint128","indexed":false,"internalType":"uint128"},{"name":"tick","type":"int24","indexed":false,"internalType":"int24"},{"name":"fee","type":"uint24","indexed":false,"internalType":"uint24"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"caller","type":"address","indexed":false,"internalType":"address"},{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"id","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"AlreadyUnlocked","inputs":[]},{"type":"error","name":"CurrenciesOutOfOrderOrEqual","inputs":[{"name":"currency0","type":"address","internalType":"address"},{"name":"currency1","type":"address","internalType":"address"}]},{"type":"error","name":"CurrencyNotSettled","inputs":[]},{"type":"error","name":"DelegateCallNotAllowed","inputs":[]},{"type":"error","name":"InvalidCaller","inputs":[]},{"type":"error","name":"ManagerLocked","inputs":[]},{"type":"error","name":"MustClearExactPositiveDelta","inputs":[]},{"type":"error","name":"NonzeroNativeValue","inputs":[]},{"type":"error","name":"PoolNotInitialized","inputs":[]},{"type":"error","name":"ProtocolFeeCurrencySynced","inputs":[]},{"type":"error","name":"ProtocolFeeTooLarge","inputs":[{"name":"fee","type":"uint24","internalType":"uint24"}]},{"type":"error","name":"SwapAmountCannotBeZero","inputs":[]},{"type":"error","name":"TickSpacingTooLarge","inputs":[{"name":"tickSpacing","type":"int24","internalType":"int24"}]},{"type":"error","name":"TickSpacingTooSmall","inputs":[{"name":"tickSpacing","type":"int24","internalType":"int24"}]},{"type":"error","name":"UnauthorizedDynamicLPFeeUpdate","inputs":[]}],"bytecode":{"object":"0x60c0346100b057601f61394f38819003918201601f19168301916001600160401b038311848410176100b4578084926020946040528339810103126100b057516001600160a01b03811681036100b0575f80546001600160a01b03191633908117825560405192917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a33060805260a05261388690816100c98239608051816124f5015260a051816105640152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c8062fdd58e1461022357806301ffc9a71461021e578063095bcdb6146102195780630b0d9c091461021457806311da60b41461020f578063156e29f61461020a5780631e2eaeaf14610205578063234266d7146102005780632d771389146101fb57806335fd631a146101f65780633dd45adb146101f1578063426a8493146101ec57806348c89491146101e757806352759651146101e2578063558a7297146101dd578063598af9e7146101d85780635a6bcfda146101d35780636276cbbe146101ce5780637e87ce7d146101c957806380f0b44c146101c45780638161b874146101bf5780638da5cb5b146101ba57806397e8cd4e146101b55780639bf6645f146101b0578063a5841194146101ab578063b6363cf2146101a6578063dbd035ff146101a1578063f02de3b21461019c578063f135baaa14610197578063f2fde38b14610192578063f3cd914c1461018d578063f5298aca146101885763fe99049a14610183575f80fd5b611e22565b611d7e565b611cbb565b611c0b565b611bd1565b611b80565b611b33565b611a95565b6119c6565b611979565b6118a0565b611850565b6116fe565b61163b565b61152f565b611223565b61114d565b6110a3565b610fae565b610ec1565b610d5a565b610c73565b610bb0565b610b32565b610a83565b61092e565b610732565b610662565b6105b2565b610484565b6103bf565b6102bf565b61024a565b73ffffffffffffffffffffffffffffffffffffffff81160361024657565b5f80fd5b346102465760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102465760043561028581610228565b73ffffffffffffffffffffffffffffffffffffffff60243591165f52600460205260405f20905f52602052602060405f2054604051908152f35b346102465760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610246576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361024657807f01ffc9a70000000000000000000000000000000000000000000000000000000060209214908115610354575b506040519015158152f35b7f0f632fb3000000000000000000000000000000000000000000000000000000009150145f610349565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6060910112610246576004356103b481610228565b906024359060443590565b34610246576103cd3661037e565b9091335f52600460205260405f20835f5260205260405f2090815483810390811161047f5773ffffffffffffffffffffffffffffffffffffffff92551690815f5260046020526104288360405f20905f5260205260405f2090565b6104338282546120b0565b9055604080513380825260208201939093527f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac72885991819081015b0390a460405160018152602090f35b0390f35b612076565b346102465760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610246576004356104bf81610228565b602435906104cc82610228565b6044357fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c1561058a5773ffffffffffffffffffffffffffffffffffffffff610588936105176124de565b81604051947f0b0d9c090000000000000000000000000000000000000000000000000000000060208701521660248501521660448301526064820152606481526105626084826107d6565b7f0000000000000000000000000000000000000000000000000000000000000000612545565b005b7f54e3ca0d000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610246577fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c1561058a5761060a6124de565b6106576106486040517f11da60b4000000000000000000000000000000000000000000000000000000006020820152600481526105626024826107d6565b602080825183010191016120bd565b604051908152602090f35b34610246576106703661037e565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c1561058a5761058892610706610562926106aa6124de565b6040519485937f156e29f60000000000000000000000000000000000000000000000000000000060208601526024850160409194939273ffffffffffffffffffffffffffffffffffffffff606083019616825260208201520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826107d6565b346102465760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024657600435545f5260205ff35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff8211176107b557604052565b61076c565b6060810190811067ffffffffffffffff8211176107b557604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176107b557604052565b60a4359062ffffff8216820361024657565b359062ffffff8216820361024657565b60a435908160020b820361024657565b60c435908160020b820361024657565b35908160020b820361024657565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60a0910112610246576040519060a0820182811067ffffffffffffffff8211176107b557604052816004356108bc81610228565b81526024356108ca81610228565b60208201526108d96044610829565b60408201526108e86064610859565b60608201526080608435916108fc83610228565b0152565b9181601f840112156102465782359167ffffffffffffffff8311610246576020838186019501011161024657565b34610246576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102465761096736610867565b60a43560c43560e43567ffffffffffffffff81116102465761098d903690600401610900565b90917fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c1561058a5761047b9461070661064894610a559461056294610a73986109d56124de565b6040519788967f234266d7000000000000000000000000000000000000000000000000000000006020890152602488019073ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b60c486015260e48501526101006101048501526101248401916120cc565b6040519081529081906020820190565b346102465760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102465773ffffffffffffffffffffffffffffffffffffffff600435610ad381610228565b610ae1825f5416331461210a565b16807fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002557fb4bd8ef53df690b9943d3318996006dbb82a25f54719d8c8035b516a2a5b8acc5f80a2005b346102465760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024657600435602435906040519160408360208152826020820152019060051b8301916001602060408501935b83548152019101908483821015610ba757506020600191610b8b565b60408186030190f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024657600435610be681610228565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c1561058a57610a7361064861047b92610c1f6124de565b73ffffffffffffffffffffffffffffffffffffffff604051917f3dd45adb000000000000000000000000000000000000000000000000000000006020840152166024820152602481526105626044826107d6565b346102465773ffffffffffffffffffffffffffffffffffffffff610c963661037e565b91929092335f526005602052610ccd8160405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b845f526020528260405f205560405192835216907fb3fd5071835887567a0671151121894ddccc2842f1d10bedad13e0d17cace9a760203392a4602060405160018152f35b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b346102465760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102465760043567ffffffffffffffff811161024657610da9903690600401610900565b90610db26124de565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c610e9957610e1a915f91610de661259c565b60405193849283927f91dd73460000000000000000000000000000000000000000000000000000000084526004840161220c565b038183335af1908115610e94575f91610e72575b507f7d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b5c610e6d5761047b90610e616125c2565b60405191829182610d12565b612466565b610e8e91503d805f833e610e8681836107d6565b8101906121a9565b5f610e2e565b612220565b7f5090d6c6000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102465760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024657610ef936610867565b610f01610817565b6280000062ffffff60408401511614801590610f6a575b610f4257610f3d60a061058893610f2e846125e7565b205f52600660205260405f2090565b612624565b7f30d21641000000000000000000000000000000000000000000000000000000005f5260045ffd5b5073ffffffffffffffffffffffffffffffffffffffff8060808401511616331415610f18565b60243590811515820361024657565b60a43590811515820361024657565b346102465760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024657600435610fe981610228565b73ffffffffffffffffffffffffffffffffffffffff611006610f90565b91335f52600360205261103a8160405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b921515927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff851617905560405192835216907fceb576d9f15e4e200fdb5096d64d5dfd667e16def20c1eefd14256d8e3faa26760203392a360405160018152602090f35b346102465760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610246576004356110de81610228565b6111356024356110ed81610228565b73ffffffffffffffffffffffffffffffffffffffff60443593165f52600560205260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b5f918252602090815260409182902054915191825290f35b34610246576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102465761118636610867565b60807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c360112610246576040516111bc81610799565b6111c4610839565b81526111ce610849565b602082015260e4356040820152610104356060820152610124359167ffffffffffffffff831161024657611209611211933690600401610900565b92909161222b565b60408051928352602083019190915290f35b346102465760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102465761125b36610867565b60a43561126781610228565b61126f6124de565b606082019061127f825160020b90565b617fff8160020b1361152a5750815160020b600181126115255750825173ffffffffffffffffffffffffffffffffffffffff169260208101936112d6855173ffffffffffffffffffffffffffffffffffffffff1690565b9073ffffffffffffffffffffffffffffffffffffffff8083169082161015611506575050608081019161131d835173ffffffffffffffffffffffffffffffffffffffff1690565b92604083019361134061133c611336875162ffffff1690565b8361275b565b1590565b6114eb5761047b61143888886113ed7fdd466e674ea557f56295e2d0218a125ea4b4f0f6f3307b95f85e6110838d643873ffffffffffffffffffffffffffffffffffffffff8b6114d38c8c8c61148061146561145d6114536113f26113b06113ab8b5162ffffff1690565b6128df565b6113d8888a6113d38a5173ffffffffffffffffffffffffffffffffffffffff1690565b6128fc565b8760a08a209e8f5f52600660205260405f2090565b6129ea565b9e8f9761141e8989836114198b5173ffffffffffffffffffffffffffffffffffffffff1690565b612dd2565b5173ffffffffffffffffffffffffffffffffffffffff1690565b9d5173ffffffffffffffffffffffffffffffffffffffff1690565b975162ffffff1690565b9a5160020b90565b915173ffffffffffffffffffffffffffffffffffffffff1690565b9086604051978897169b1699869373ffffffffffffffffffffffffffffffffffffffff608094819398979462ffffff60a089019a16885260020b602088015216604086015216606084015260020b910152565b0390a460405160029190910b81529081906020820190565b73ffffffffffffffffffffffffffffffffffffffff16612819565b73ffffffffffffffffffffffffffffffffffffffff918216911661270d565b6126b1565b612683565b346102465760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102465761156736610867565b61156f610817565b9073ffffffffffffffffffffffffffffffffffffffff600254163303611613576103e9610fff831610623e900062fff00084161016156116085761160360a07fe9c42593e71f84403b84352cd168d693e2c9fcd1fdbcc3feb21d92b43e6696f99220926115ed816115e8865f52600660205260405f2090565b612ecd565b60405162ffffff90911681529081906020820190565b0390a2005b62ffffff821661285b565b7f48f5c3ed000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102465760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102465760043561167681610228565b602435907fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c1561058a576105889173ffffffffffffffffffffffffffffffffffffffff604051927f80f0b44c0000000000000000000000000000000000000000000000000000000060208501521660248301526044820152604481526105626064826107d6565b346102465760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102465760043561173981610228565b6024359061174682610228565b60443573ffffffffffffffffffffffffffffffffffffffff6002541633036116135773ffffffffffffffffffffffffffffffffffffffff831615158061180d575b6118085761047b92610a73918061180057506117c18173ffffffffffffffffffffffffffffffffffffffff165f52600160205260405f2090565b549283915b6117ee8173ffffffffffffffffffffffffffffffffffffffff165f52600160205260405f2090565b6117f98482546120a3565b9055612f21565b9283916117c6565b61248e565b5073ffffffffffffffffffffffffffffffffffffffff7f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95c811690841614611787565b34610246575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024657602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346102465760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102465773ffffffffffffffffffffffffffffffffffffffff6004356118f081610228565b165f526001602052602060405f2054604051908152f35b9060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126102465760043567ffffffffffffffff811161024657826023820112156102465780600401359267ffffffffffffffff84116102465760248460051b83010111610246576024019190565b346102465761198736611907565b6040519160408360208152836020820152019160051b8301916020806040850193925b83355c8152019101908483821015610ba75750602080916119aa565b346102465760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024657600435611a0181610228565b73ffffffffffffffffffffffffffffffffffffffff81169081611a455750505f7f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95d005b611a4e90612fee565b907f27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b95d7f1e0745a7db1623981f0b2a5d4232364c00787266eb75ad546f190e6cebe9bd955d005b346102465760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024657602060ff611b27600435611ad781610228565b73ffffffffffffffffffffffffffffffffffffffff60243591611af983610228565b165f526003845260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b54166040519015158152f35b3461024657611b4136611907565b6040519160408360208152836020820152019160051b8301916020806040850193925b8335548152019101908483821015610ba7575060208091611b64565b34610246575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024657602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346102465760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610246576004355c5f5260205ff35b346102465760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610246577fffffffffffffffffffffffff0000000000000000000000000000000000000000600435611c6781610228565b73ffffffffffffffffffffffffffffffffffffffff5f5491611c8c828416331461210a565b1691829116175f55337f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b34610246576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024657611cf436610867565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c36011261024657604051611d2a816107ba565b611d32610f9f565b815260c435602082015260e435611d4881610228565b6040820152610104359067ffffffffffffffff82116102465761047b92611d76610a73933690600401610900565b92909161235a565b3461024657611d8c3661037e565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c1561058a576105889261070661056292611dc66124de565b6040519485937ff5298aca0000000000000000000000000000000000000000000000000000000060208601526024850160409194939273ffffffffffffffffffffffffffffffffffffffff606083019616825260208201520152565b346102465760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024657600435611e5d81610228565b602435611e6981610228565b604435917f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac72885973ffffffffffffffffffffffffffffffffffffffff60643593611ef186611ee4848716968733141580612037575b611f535773ffffffffffffffffffffffffffffffffffffffff165f52600460205260405f2090565b905f5260205260405f2090565b611efc8682546120a3565b9055611f2a86611ee48373ffffffffffffffffffffffffffffffffffffffff165f52600460205260405f2090565b611f358682546120b0565b9055604080513381526020810196909652911693908190810161046c565b611fa683611ee433611f838573ffffffffffffffffffffffffffffffffffffffff165f52600560205260405f2090565b9073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b54897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ff6575b505073ffffffffffffffffffffffffffffffffffffffff165f52600460205260405f2090565b611fff916120a3565b61202f84611ee433611f838673ffffffffffffffffffffffffffffffffffffffff165f52600560205260405f2090565b555f89611fd0565b5061207161133c61206a33611f838573ffffffffffffffffffffffffffffffffffffffff165f52600360205260405f2090565b5460ff1690565b611ebc565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9190820391821161047f57565b9190820180921161047f57565b90816020910312610246575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b1561211157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f554e415554484f52495a454400000000000000000000000000000000000000006044820152fd5b67ffffffffffffffff81116107b557601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b6020818303126102465780519067ffffffffffffffff8211610246570181601f82011215610246578051906121dd8261216f565b926121eb60405194856107d6565b8284526020838301011161024657815f9260208093018386015e8301015290565b91602061221d9381815201916120cc565b90565b6040513d5f823e3d90fd5b929190917fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c1561058a57612340936107066122f393610562936060612331976122736124de565b6040519788967f5a6bcfda000000000000000000000000000000000000000000000000000000006020890152602488019073ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b805160020b60c4870152602081015160020b60e4870152604081015161010487015201516101248501526101406101448501526101648401916120cc565b60208082518301019101612344565b9091565b9190826040910312610246576020825192015190565b929190917fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c1561058a5761221d93610706612436936105629373ffffffffffffffffffffffffffffffffffffffff6040610648986123b76124de565b81519889977ff3cd914c0000000000000000000000000000000000000000000000000000000060208a0152602489019073ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b8051151560c4880152602081015160e48801520151166101048501526101206101248501526101448401916120cc565b7f5212cba1000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fc79e5948000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f1e048e1d000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016300361251d57565b7f0d89438e000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f918291602082519201905af43d15612594573d906125638261216f565b9161257160405193846107d6565b82523d5f602084013e5b156125835790565b8051908161258f575f80fd5b602001fd5b60609061257b565b60017fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235d565b5f7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235d565b62ffffff16620f424081116125f95750565b7f14002113000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9061267f9061263283613097565b8254907cffffff00000000000000000000000000000000000000000000000000009060d01b16907fffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffff161790565b9055565b7fb70024f8000000000000000000000000000000000000000000000000000000005f5260020b60045260245ffd5b7fe9e90588000000000000000000000000000000000000000000000000000000005f5260020b60045260245ffd5b7f8b86327a000000000000000000000000000000000000000000000000000000005f5260020b60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff60449281604051937f6e6c9830000000000000000000000000000000000000000000000000000000008552166004840152166024820152fd5b60808116158061280d575b6127e357604081161580612801575b6127e357610400811615806127f5575b6127e357610100811615806127e9575b6127e35773ffffffffffffffffffffffffffffffffffffffff81166127c3575062ffffff1662800000141590565b613fff1615908115916127d4575090565b62800000915062ffffff161490565b50505f90565b50600181161515612795565b50600281161515612785565b50600481161515612775565b50600881161515612766565b73ffffffffffffffffffffffffffffffffffffffff907fe65af6a0000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff907fa7abe2f7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff907f61487524000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b6280000062ffffff8216146128f75761221d816125e7565b505f90565b73ffffffffffffffffffffffffffffffffffffffff8116330361291e57505050565b612000811661292c57505050565b73ffffffffffffffffffffffffffffffffffffffff6129e7936129cc604051947fdc98354e000000000000000000000000000000000000000000000000000000006020870152336024870152604486019073ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b1660e483015260e482526129e2610104836107d6565b6130dd565b50565b909291815473ffffffffffffffffffffffffffffffffffffffff16612daa5773fffd8963efd1fc6a506488495d951d516396168273ffffffffffffffffffffffffffffffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffd895d86011611612da45773ffffffffffffffffffffffffffffffffffffffff841690612a7e8260201b90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8081612ab2612aac846134a0565b60ff1690565b9260808410612d9757507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8183011c915b0160401b90800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c800280607f1c8160ff1c1c80029081607f1c8260ff1c1c80029283607f1c8460ff1c1c80029485607f1c8660ff1c1c80029687607f1c8860ff1c1c80029889607f1c8a60ff1c1c80029a8b607f1c8c60ff1c1c80029c8d80607f1c9060ff1c1c800260cd1c6604000000000000169d60cc1c6608000000000000169c60cb1c6610000000000000169b60ca1c6620000000000000169a60c91c6640000000000000169960c81c6680000000000000169860c71c670100000000000000169760c61c670200000000000000169660c51c670400000000000000169560c41c670800000000000000169460c31c671000000000000000169360c21c672000000000000000169260c11c674000000000000000169160c01c678000000000000000161717171717171717171717171717693627a301d71055774c8502917ffffffffffffffffffffffffffffffffffd709b7e5480fba5a50fed5e62ffc5568301612c859060801d90565b61267f93612d1b926fdb2df09e81959a81455e260799a0632f90910160801d600290810b92900b90828203612d66575090505b612cd6819773ffffffffffffffffffffffffffffffffffffffff1690565b9076ffffff00000000000000000000000000000000000000009060a01b16907fffffffffffffffffff000000ffffffffffffffffffffffffffffffffffffffff161790565b907cffffff00000000000000000000000000000000000000000000000000009060d01b16907fffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffff161790565b73ffffffffffffffffffffffffffffffffffffffff612d848461352d565b1611612d905750612cb8565b9050612cb8565b905082607f031b91612ae2565b8361289d565b7f7983c051000000000000000000000000000000000000000000000000000000005f5260045ffd5b90919273ffffffffffffffffffffffffffffffffffffffff82163303612df9575b50505050565b611000821615612df35773ffffffffffffffffffffffffffffffffffffffff612ec394612ea3604051957f6fe7e6eb000000000000000000000000000000000000000000000000000000006020880152336024880152604487019073ffffffffffffffffffffffffffffffffffffffff6080809282815116855282602082015116602086015262ffffff6040820151166040860152606081015160020b6060860152015116910152565b1660e484015260020b61010483015261010482526129e2610124836107d6565b505f808080612df3565b90612ed782613097565b79ffffff000000000000000000000000000000000000000000000082549160b81b16907fffffffffffff000000ffffffffffffffffffffffffffffffffffffffffffffff16179055565b90919073ffffffffffffffffffffffffffffffffffffffff8116612f5b57505f808080612f4f94865af11590565b612f565750565b6132fd565b919073ffffffffffffffffffffffffffffffffffffffff604051927fa9059cbb00000000000000000000000000000000000000000000000000000000845216600483015260248201525f604060208260448582885af13d15601f3d11600185511416171692828152826020820152015215612fd35750565b73ffffffffffffffffffffffffffffffffffffffff1661321d565b73ffffffffffffffffffffffffffffffffffffffff811661300e57504790565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152906020908290602490829073ffffffffffffffffffffffffffffffffffffffff165afa908115610e94575f9161306e575090565b61221d915060203d602011613090575b61308881836107d6565b8101906120bd565b503d61307e565b5473ffffffffffffffffffffffffffffffffffffffff16156130b557565b7f486aa307000000000000000000000000000000000000000000000000000000005f5260045ffd5b9190918251925f8060208301958682865af115613180575050604051917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f3d011683016040523d83523d9060208401915f833e602084511091821561314c575b505061314757565b6124b6565b5190517fffffffff000000000000000000000000000000000000000000000000000000009182169116141590505f8061313f565b9091505191517fffffffff00000000000000000000000000000000000000000000000000000000811692600481106131d0575b8373ffffffffffffffffffffffffffffffffffffffff84166133bd565b73ffffffffffffffffffffffffffffffffffffffff929350907fffffffff00000000000000000000000000000000000000000000000000000000809260040360031b1b161691905f6131b3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d011673ffffffffffffffffffffffffffffffffffffffff604051927f90bfb8650000000000000000000000000000000000000000000000000000000084521660048301527fa9059cbb000000000000000000000000000000000000000000000000000000006024830152608060448301528060a00160648301523d60848301523d5f60a484013e7ff27f64e40000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d011673ffffffffffffffffffffffffffffffffffffffff604051927f90bfb8650000000000000000000000000000000000000000000000000000000084521660048301525f6024830152608060448301528060a00160648301523d60848301523d5f60a484013e7ff4b3b1bc0000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b907fffffffff000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f3d01169173ffffffffffffffffffffffffffffffffffffffff604051947f90bfb865000000000000000000000000000000000000000000000000000000008652166004850152166024830152608060448301528060a00160648301523d60848301523d5f60a484013e7fa9e35b2f0000000000000000000000000000000000000000000000000000000060c4828401600460a4820152015260e40190fd5b8015610246577f07060605060205000602030205040001060502050303040105050304000000006f8421084210842108cc6318c6db6d54be826fffffffffffffffffffffffffffffffff1060071b83811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1783811c61ffff1060041b1783811c60ff1060031b1792831c1c601f161a1790565b60020b908160ff1d82810118620d89e881116138735763ffffffff9192600182167001fffcb933bd6fad37aa2d162d1a59400102700100000000000000000000000000000000189160028116613857575b6004811661383b575b6008811661381f575b60108116613803575b602081166137e7575b604081166137cb575b608081166137af575b6101008116613793575b6102008116613777575b610400811661375b575b610800811661373f575b6110008116613723575b6120008116613707575b61400081166136eb575b61800081166136cf575b6201000081166136b3575b620200008116613698575b62040000811661367d575b6208000016613664575b5f1261363d575b0160201c90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04613636565b6b048a170391f7dc42444e8fa290910260801c9061362f565b6d2216e584f5fa1ea926041bedfe9890920260801c91613625565b916e5d6af8dedb81196699c329225ee6040260801c9161361a565b916f09aa508b5b7a84e1c677de54f3e99bc90260801c9161360f565b916f31be135f97d08fd981231505542fcfa60260801c91613604565b916f70d869a156d2a1b890bb3df62baf32f70260801c916135fa565b916fa9f746462d870fdf8a65dc1f90e061e50260801c916135f0565b916fd097f3bdfd2022b8845ad8f792aa58250260801c916135e6565b916fe7159475a2c29b7443b29c7fa6e889d90260801c916135dc565b916ff3392b0822b70005940c7a398e4b70f30260801c916135d2565b916ff987a7253ac413176f2b074cf7815e540260801c916135c8565b916ffcbe86c7900a88aedcffc83b479aa3a40260801c916135be565b916ffe5dee046a99a2a811c461f1969c30530260801c916135b4565b916fff2ea16466c96a3843ec78b326b528610260801c916135ab565b916fff973b41fa98c081472e6896dfb254c00260801c916135a2565b916fffcb9843d60f6159c9db58835c9266440260801c91613599565b916fffe5caca7e10e4e61c3624eaa0941cd00260801c91613590565b916ffff2e50f5f656932ef12357cf3c7fdcc0260801c91613587565b916ffff97272373d413259a46990580e213a0260801c9161357e565b826126df56fea164736f6c634300081a000a","sourceMap":"1460:7651:96:-:0;;;;;;;;;;;;;-1:-1:-1;;1460:7651:96;;;;-1:-1:-1;;;;;1460:7651:96;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1460:7651:96;;;;;;-1:-1:-1;1460:7651:96;;-1:-1:-1;;;;;;1460:7651:96;2102:10;1460:7651;;;;;;;;2102:10;1075:40:24;-1:-1:-1;;1075:40:24;719:4:32;700:24;;2124:34:96;;1460:7651;;;;;;700:24:32;1460:7651:96;;;;;2124:34;1460:7651;;;;;;;-1:-1:-1;1460:7651:96;;;;;;-1:-1:-1;1460:7651:96;;;;;-1:-1:-1;1460:7651:96","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361015610011575f80fd5b5f3560e01c8062fdd58e1461022357806301ffc9a71461021e578063095bcdb6146102195780630b0d9c091461021457806311da60b41461020f578063156e29f61461020a5780631e2eaeaf14610205578063234266d7146102005780632d771389146101fb57806335fd631a146101f65780633dd45adb146101f1578063426a8493146101ec57806348c89491146101e757806352759651146101e2578063558a7297146101dd578063598af9e7146101d85780635a6bcfda146101d35780636276cbbe146101ce5780637e87ce7d146101c957806380f0b44c146101c45780638161b874146101bf5780638da5cb5b146101ba57806397e8cd4e146101b55780639bf6645f146101b0578063a5841194146101ab578063b6363cf2146101a6578063dbd035ff146101a1578063f02de3b21461019c578063f135baaa14610197578063f2fde38b14610192578063f3cd914c1461018d578063f5298aca146101885763fe99049a14610183575f80fd5b611e22565b611d7e565b611cbb565b611c0b565b611bd1565b611b80565b611b33565b611a95565b6119c6565b611979565b6118a0565b611850565b6116fe565b61163b565b61152f565b611223565b61114d565b6110a3565b610fae565b610ec1565b610d5a565b610c73565b610bb0565b610b32565b610a83565b61092e565b610732565b610662565b6105b2565b610484565b6103bf565b6102bf565b61024a565b73ffffffffffffffffffffffffffffffffffffffff81160361024657565b5f80fd5b346102465760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102465760043561028581610228565b73ffffffffffffffffffffffffffffffffffffffff60243591165f52600460205260405f20905f52602052602060405f2054604051908152f35b346102465760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610246576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361024657807f01ffc9a70000000000000000000000000000000000000000000000000000000060209214908115610354575b506040519015158152f35b7f0f632fb3000000000000000000000000000000000000000000000000000000009150145f610349565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6060910112610246576004356103b481610228565b906024359060443590565b34610246576103cd3661037e565b9091335f52600460205260405f20835f5260205260405f2090815483810390811161047f5773ffffffffffffffffffffffffffffffffffffffff92551690815f5260046020526104288360405f20905f5260205260405f2090565b6104338282546120b0565b9055604080513380825260208201939093527f1b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac72885991819081015b0390a460405160018152602090f35b0390f35b612076565b346102465760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610246576004356104bf81610228565b602435906104cc82610228565b6044357fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c1561058a5773ffffffffffffffffffffffffffffffffffffffff610588936105176124de565b81604051947f0b0d9c090000000000000000000000000000000000000000000000000000000060208701521660248501521660448301526064820152606481526105626084826107d6565b7f0000000000000000000000000000000000000000000000000000000000000000612545565b005b7f54e3ca0d000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610246577fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c1561058a5761060a6124de565b6106576106486040517f11da60b4000000000000000000000000000000000000000000000000000000006020820152600481526105626024826107d6565b602080825183010191016120bd565b604051908152602090f35b34610246576106703661037e565b7fc090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab235c1561058a5761058892610706610562926106aa6124de565b6040519485937f156e29f60000000000000000000000000000000000000000000000000000000060208601526024850160409194939273ffffffffffffffffffffffffffffffffffffffff606083019616825260208201520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826107d6565b346102465760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261024657600435545f5260205ff35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff8211176107b557604052565b61076c565b6060810190811067ffffffffffffffff8211176107b557604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176107b557604052565b60a4359062ffffff8216820361024657565b359062ffffff8216820361024657565b60a435908160