[ { "inputs": [ { "internalType": "uint256", "name": "initialSupply_", "type": "uint256" }, { "internalType": "address", "name": "feeReceiver_", "type": "address" }, { "internalType": "address", "name": "swapRouter_", "type": "address" }, { "components": [ { "internalType": "bool", "name": "feesInToken", "type": "bool" }, { "internalType": "uint16", "name": "buyFees", "type": "uint16" }, { "internalType": "uint16", "name": "sellFees", "type": "uint16" }, { "internalType": "uint16", "name": "transferFees", "type": "uint16" }, { "internalType": "uint16", "name": "burnFeeRatio", "type": "uint16" }, { "internalType": "uint16", "name": "liquidityFeeRatio", "type": "uint16" }, { "internalType": "uint16", "name": "collectorsFeeRatio", "type": "uint16" } ], "internalType": "struct TaxableToken.FeeConfiguration", "name": "feeConfiguration_", "type": "tuple" }, { "internalType": "address[]", "name": "collectors_", "type": "address[]" }, { "internalType": "uint256[]", "name": "shares_", "type": "uint256[]" } ], "stateMutability": "payable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "excluded", "type": "bool" } ], "name": "ExcludedFromFees", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "FeeCollected", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "share", "type": "uint256" } ], "name": "FeeCollectorAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "FeeCollectorRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "oldShare", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newShare", "type": "uint256" } ], "name": "FeeCollectorUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "components": [ { "internalType": "bool", "name": "feesInToken", "type": "bool" }, { "internalType": "uint16", "name": "buyFees", "type": "uint16" }, { "internalType": "uint16", "name": "sellFees", "type": "uint16" }, { "internalType": "uint16", "name": "transferFees", "type": "uint16" }, { "internalType": "uint16", "name": "burnFeeRatio", "type": "uint16" }, { "internalType": "uint16", "name": "liquidityFeeRatio", "type": "uint16" }, { "internalType": "uint16", "name": "collectorsFeeRatio", "type": "uint16" } ], "indexed": false, "internalType": "struct TaxableToken.FeeConfiguration", "name": "configuration", "type": "tuple" } ], "name": "FeeConfigurationUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pairAddress", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "isLp", "type": "bool" } ], "name": "SetLpPool", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "router", "type": "address" }, { "indexed": true, "internalType": "address", "name": "pair", "type": "address" } ], "name": "SwapRouterUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "BURN_ADDRESS", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "FEE_PRECISION", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_FEE", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "share", "type": "uint256" } ], "name": "addFeeCollector", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "autoProcessFees", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bool", "name": "inToken", "type": "bool" } ], "name": "distributeFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "feeCollectorShare", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "startIndex", "type": "uint256" }, { "internalType": "uint256", "name": "count", "type": "uint256" } ], "name": "feeCollectors", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeConfiguration", "outputs": [ { "internalType": "bool", "name": "feesInToken", "type": "bool" }, { "internalType": "uint16", "name": "buyFees", "type": "uint16" }, { "internalType": "uint16", "name": "sellFees", "type": "uint16" }, { "internalType": "uint16", "name": "transferFees", "type": "uint16" }, { "internalType": "uint16", "name": "burnFeeRatio", "type": "uint16" }, { "internalType": "uint16", "name": "liquidityFeeRatio", "type": "uint16" }, { "internalType": "uint16", "name": "collectorsFeeRatio", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isExcludedFromFees", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isFeeCollector", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pairAddress", "type": "address" } ], "name": "isLpPool", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "liquidityOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "numTokensToSwap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "minAmountOut", "type": "uint256" } ], "name": "processFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "removeFeeCollector", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "autoProcess", "type": "bool" } ], "name": "setAutoprocessFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "bool", "name": "feesInToken", "type": "bool" }, { "internalType": "uint16", "name": "buyFees", "type": "uint16" }, { "internalType": "uint16", "name": "sellFees", "type": "uint16" }, { "internalType": "uint16", "name": "transferFees", "type": "uint16" }, { "internalType": "uint16", "name": "burnFeeRatio", "type": "uint16" }, { "internalType": "uint16", "name": "liquidityFeeRatio", "type": "uint16" }, { "internalType": "uint16", "name": "collectorsFeeRatio", "type": "uint16" } ], "internalType": "struct TaxableToken.FeeConfiguration", "name": "configuration", "type": "tuple" } ], "name": "setFeeConfiguration", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bool", "name": "excluded", "type": "bool" } ], "name": "setIsExcludedFromFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pairAddress", "type": "address" }, { "internalType": "bool", "name": "isLp", "type": "bool" } ], "name": "setIsLpPool", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "setLiquidityOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "setNumTokensToSwap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newRouter", "type": "address" } ], "name": "setSwapRouter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "swapPair", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "swapRouter", "outputs": [ { "internalType": "contract IUniswapV2Router02", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalFeeCollectorsShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "share", "type": "uint256" } ], "name": "updateFeeCollectorShare", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60a060405260405161436338038061436383398101604081905261002291611659565b60016100306127108861179d565b85858585336040518060400160405280600c81526020016b2130b9b2b210213ab9ba32b960a11b815250604051806040016040528060048152602001632129aa2960e11b81525060098282816003908161008a9190611849565b5060046100978282611849565b50505060ff1660805250506001600160a01b0381166100d157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6100da816103bb565b50805182511461012c5760405162461bcd60e51b815260206004820152601660248201527f496e76616c69642066656520636f6c6c6563746f72730000000000000000000060448201526064016100c8565b60005b82518110156101825761017a83828151811061014d5761014d611908565b602002602001015183838151811061016757610167611908565b602002602001015161040d60201b60201c565b60010161012f565b505050600d839055600c805460ff60a81b1916600160a81b861515021790556101a83390565b600c80546001600160a01b039283166001600160a01b031991821617909155600a805492851692909116821790556040805163c45a015560e01b815290516102ab929163c45a01559160048083019260209291908290030181865afa158015610215573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610239919061191e565b600a54604080516315ab88c960e31b8152905130926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015610282573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a6919061191e565b610526565b600b80546001600160a01b0319166001600160a01b039290921691821790556000908152601060205260408120805460ff191660019081179091556102f09190610626565b6102fd61dead6001610626565b610308306001610626565b610313336001610626565b61031c816106dc565b50505050600086116103705760405162461bcd60e51b815260206004820152601d60248201527f496e697469616c20737570706c792063616e6e6f74206265207a65726f00000060448201526064016100c8565b6040516001600160a01b038616903480156108fc02916000818181858888f193505050501580156103a5573d6000803e3d6000fd5b506103b033876109c4565b505050505050611a54565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6104186006836109fe565b156104655760405162461bcd60e51b815260206004820152601560248201527f416c72656164792066656520636f6c6c6563746f72000000000000000000000060448201526064016100c8565b600081116104a55760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420736861726560981b60448201526064016100c8565b6104b0600683610a25565b506001600160a01b0382166000908152600860205260408120829055600980548392906104de908490611939565b90915550506040518181526001600160a01b038316907f918584c21fe4a093f5014c0dabaed3e43b642781e27984aef122cae8245fbb23906020015b60405180910390a25050565b6000806000836001600160a01b0316856001600160a01b03161061054b57838561054e565b84845b6040516001600160601b0319606084811b8216602084015283901b16603482015291935091508690604801604051602081830303815290604052805190602001206040516020016106049291907fff00000000000000000000000000000000000000000000000000000000000000815260609290921b6001600160601b031916600183015260158201527f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b6001600160a01b0382166000908152600f602052604090205481151560ff9091161515036106845760405162461bcd60e51b815260206004820152600b60248201526a105b1c9958591e481cd95d60aa1b60448201526064016100c8565b6001600160a01b0382166000818152600f6020908152604091829020805460ff191685151590811790915591519182527f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb910161051a565b6107d061ffff16816020015161ffff16111561072c5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206275792066656560881b60448201526064016100c8565b6107d061ffff16816040015161ffff16111561077d5760405162461bcd60e51b815260206004820152601060248201526f496e76616c69642073656c6c2066656560801b60448201526064016100c8565b6107d061ffff16816060015161ffff1611156107db5760405162461bcd60e51b815260206004820152601460248201527f496e76616c6964207472616e736665722066656500000000000000000000000060448201526064016100c8565b60008160c001518260a0015183608001516107f6919061194c565b610800919061194c565b905061ffff81161580610818575061ffff8116612710145b6108585760405162461bcd60e51b8152602060048201526011602482015270496e76616c69642066656520736861726560781b60448201526064016100c8565b8151600e805460208501516040808701516060880151608089015160a08a015160c08b015161ffff9081166b0100000000000000000000000261ffff60581b1992821669010000000000000000000261ffff60481b19948316670100000000000000029490941663ffffffff60381b19958316650100000000000261ffff60281b199784166301000000029790971666ffffffff00000019939099166101000262ffff00199c15159c909c1662ffffff19909a16999099179a909a1716959095179290921716939093179290921716929092179055517ff34b49a91d91598b7774795175736ebf4db4fa5a4edf72772cf50fb27c135efd906109b8908490600060e082019050825115158252602083015161ffff80821660208501528060408601511660408501528060608601511660608501528060808601511660808501528060a08601511660a08501528060c08601511660c0850152505092915050565b60405180910390a15050565b6001600160a01b0382166109ee5760405163ec442f0560e01b8152600060048201526024016100c8565b6109fa60008383610a3a565b5050565b6001600160a01b038116600090815260018301602052604081205415155b90505b92915050565b6000610a1c836001600160a01b038416610a4a565b610a45838383610a99565b505050565b6000818152600183016020526040812054610a9157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610a1f565b506000610a1f565b60008111610ad95760405162461bcd60e51b815260206004820152600d60248201526c05472616e73666572203c3d203609c1b60448201526064016100c8565b600c546000908190600160a01b900460ff16158015610b015750600c54600160a81b900460ff165b90506000610b27866001600160a01b031660009081526010602052604090205460ff1690565b90506000610b4d866001600160a01b031660009081526010602052604090205460ff1690565b600c54909150600160a01b900460ff16610c4c576001600160a01b038781166000908152600f602052604080822054928916825290205460ff9182169116838015610b96575082155b8015610ba0575080155b8015610bba5750600a546001600160a01b03898116911614155b15610bd257600e54610100900461ffff169550610c49565b828015610bdd575081155b8015610be7575080155b15610c0157600e546301000000900461ffff169550610c49565b83158015610c0d575082155b8015610c275750600a546001600160a01b038a8116911614155b8015610c31575081155b15610c4957600e5465010000000000900461ffff1695505b50505b828015610c595750600084115b8015610c625750805b15610c8d5730600090815260208190526040902054600d548110610c8b57610c8b816000610d49565b505b8315610d35576000612710610ca2868861196e565b610cac919061179d565b90506000610cba8288611985565b600e5490915060009061271090610ce090670100000000000000900461ffff168561196e565b610cea919061179d565b90508015610d0b57610cfc8184611985565b9250610d0b8a61dead83610ec0565b8215610d1c57610d1c8a3085610ec0565b8115610d2d57610d2d8a8a84610ec0565b505050610d40565b610d40878787610ec0565b50505050505050565b600c805460ff60a01b1916600160a01b179055306000908152602081905260408120549050828110610ead57600e54600090610d9690670100000000000000900461ffff16612710611998565b600e5461ffff91821691610db89169010000000000000000009004168661196e565b610dc2919061179d565b90506000610dd160028361179d565b90506000610ddf8387611985565b90506000610ded8385611985565b600e5490915060ff16610e0757610e048282611939565b90505b8015610e7f57600b546001600160a01b0316600090815260208190526040902054600003610e39575050505050610eaf565b47610e448288610fea565b6000610e508247611985565b9050600083610e5f878461196e565b610e69919061179d565b90508015610e7b57610e7b868261113b565b5050505b600e5460ff1615610e9b57610e958260016111ef565b50610ea8565b610ea64760006111ef565b505b505050505b505b5050600c805460ff60a01b19169055565b6001600160a01b038316610eeb578060026000828254610ee09190611939565b90915550610f5d9050565b6001600160a01b03831660009081526020819052604090205481811015610f3e5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016100c8565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610f7957600280548290039055610f98565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610fdd91815260200190565b60405180910390a3505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061101f5761101f611908565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611078573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109c919061191e565b816001815181106110af576110af611908565b6001600160a01b039283166020918202929092010152600a546110d59130911685611343565b600a5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061110d90869086908690309042906004016119b3565b600060405180830381600087803b15801561112757600080fd5b505af1158015610d40573d6000803e3d6000fd5b600a546111539030906001600160a01b031684611343565b600a54600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156111c3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111e89190611a26565b5050505050565b60008260000361120157506000610a1f565b60095460000361121357506000610a1f565b6000806112206006611350565b905060005b8181101561133757600061123a60068361135a565b90506000611249600185611985565b8314611284576009546001600160a01b038316600090815260086020526040902054611275908a61196e565b61127f919061179d565b61128e565b61128e8589611985565b905086156112a6576112a1308383611366565b6112de565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156112dc573d6000803e3d6000fd5b505b816001600160a01b03167f06c5efeff5c320943d265dc4e5f1af95ad523555ce0c1957e367dda5514572df8260405161131991815260200190565b60405180910390a261132b8186611939565b94505050600101611225565b50600195945050505050565b610a4583838360016113c5565b6000610a1f825490565b6000610a1c838361149b565b6001600160a01b03831661139057604051634b637e8f60e11b8152600060048201526024016100c8565b6001600160a01b0382166113ba5760405163ec442f0560e01b8152600060048201526024016100c8565b610a45838383610a3a565b6001600160a01b0384166113ef5760405163e602df0560e01b8152600060048201526024016100c8565b6001600160a01b03831661141957604051634a1406b160e11b8152600060048201526024016100c8565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561149557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161148c91815260200190565b60405180910390a35b50505050565b60008260000182815481106114b2576114b2611908565b9060005260206000200154905092915050565b80516001600160a01b03811681146114dc57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b0381118282101715611519576115196114e1565b60405290565b604051601f8201601f191681016001600160401b0381118282101715611547576115476114e1565b604052919050565b805161ffff811681146114dc57600080fd5b60006001600160401b0382111561157a5761157a6114e1565b5060051b60200190565b600082601f83011261159557600080fd5b815160206115aa6115a583611561565b61151f565b8083825260208201915060208460051b8701019350868411156115cc57600080fd5b602086015b848110156115ef576115e2816114c5565b83529183019183016115d1565b509695505050505050565b600082601f83011261160b57600080fd5b8151602061161b6115a583611561565b8083825260208201915060208460051b87010193508684111561163d57600080fd5b602086015b848110156115ef5780518352918301918301611642565b60008060008060008086880361018081121561167457600080fd5b87519650611684602089016114c5565b9550611692604089016114c5565b945060e0605f19820112156116a657600080fd5b506116af6114f7565b606088015180151581146116c257600080fd5b81526116d06080890161154f565b60208201526116e160a0890161154f565b60408201526116f260c0890161154f565b606082015261170360e0890161154f565b6080820152611715610100890161154f565b60a0820152611727610120890161154f565b60c08201526101408801519093506001600160401b038082111561174a57600080fd5b6117568a838b01611584565b935061016089015191508082111561176d57600080fd5b5061177a89828a016115fa565b9150509295509295509295565b634e487b7160e01b600052601160045260246000fd5b6000826117ba57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806117d357607f821691505b6020821081036117f357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610a45576000816000526020600020601f850160051c810160208610156118225750805b601f850160051c820191505b818110156118415782815560010161182e565b505050505050565b81516001600160401b03811115611862576118626114e1565b6118768161187084546117bf565b846117f9565b602080601f8311600181146118ab57600084156118935750858301515b600019600386901b1c1916600185901b178555611841565b600085815260208120601f198616915b828110156118da578886015182559484019460019091019084016118bb565b50858210156118f85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561193057600080fd5b610a1c826114c5565b80820180821115610a1f57610a1f611787565b61ffff81811683821601908082111561196757611967611787565b5092915050565b8082028115828204841417610a1f57610a1f611787565b81810381811115610a1f57610a1f611787565b61ffff82811682821603908082111561196757611967611787565b600060a08201878352602087602085015260a0604085015281875180845260c08601915060208901935060005b81811015611a055784516001600160a01b0316835293830193918301916001016119e0565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215611a3b57600080fd5b8351925060208401519150604084015190509250925092565b6080516128f4611a6f60003960006103cb01526128f46000f3fe6080604052600436106102345760003560e01c806370a082311161012e578063adf18693116100ab578063e55096b01161006f578063e55096b0146107bc578063e63a391f146107dc578063f2fde38b146107f2578063f4232d2514610812578063fccc28131461083257600080fd5b8063adf18693146106f7578063b3c6e9ee14610717578063bc063e1a1461072d578063c31c9c0714610756578063dd62ed3e1461077657600080fd5b806394b8a703116100f257806394b8a703146105d057806395d89b411461060657806398c47e8c1461061b5780639b61f1d0146106b6578063a9059cbb146106d757600080fd5b806370a0823114610527578063715018a61461055d57806372bc5583146105725780637f5bbb2c146105925780638da5cb5b146105b257600080fd5b80632b46c6a4116101bc578063412736571161018057806341273657146104555780634569c44514610475578063490e5147146104955780634fbee193146104b55780636f741f2a146104ee57600080fd5b80632b46c6a41461038a578063313ce567146103b75780633502628a146103f55780633935ebf9146104155780633b90b9bf1461043557600080fd5b80630f569dad116102035780630f569dad146102dd57806318160ddd146102fd5780631fa67b4d1461031257806323b872dd1461033257806326991cc81461035257600080fd5b806301a6c43b1461024057806306fdde0314610269578063095ea7b31461028b5780630a4e42ef146102bb57600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b50610256600d5481565b6040519081526020015b60405180910390f35b34801561027557600080fd5b5061027e610848565b60405161026091906123c7565b34801561029757600080fd5b506102ab6102a636600461242b565b6108da565b6040519015158152602001610260565b3480156102c757600080fd5b506102db6102d6366004612457565b6108f4565b005b3480156102e957600080fd5b506102db6102f8366004612479565b610960565b34801561030957600080fd5b50600254610256565b34801561031e57600080fd5b506102db61032d366004612492565b61096d565b34801561033e57600080fd5b506102ab61034d3660046124af565b610981565b34801561035e57600080fd5b50600b54610372906001600160a01b031681565b6040516001600160a01b039091168152602001610260565b34801561039657600080fd5b506103aa6103a5366004612457565b6109a5565b6040516102609190612535565b3480156103c357600080fd5b5060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610260565b34801561040157600080fd5b506102db61041036600461242b565b610a7e565b34801561042157600080fd5b50600c54610372906001600160a01b031681565b34801561044157600080fd5b506102ab610450366004612492565b610a90565b34801561046157600080fd5b506102db610470366004612492565b610a9d565b34801561048157600080fd5b506102db61049036600461255d565b610aae565b3480156104a157600080fd5b506102db6104b0366004612589565b610b69565b3480156104c157600080fd5b506102ab6104d0366004612492565b6001600160a01b03166000908152600f602052604090205460ff1690565b3480156104fa57600080fd5b506102ab610509366004612492565b6001600160a01b031660009081526010602052604090205460ff1690565b34801561053357600080fd5b50610256610542366004612492565b6001600160a01b031660009081526020819052604090205490565b34801561056957600080fd5b506102db610b88565b34801561057e57600080fd5b506102db61058d366004612492565b610b9c565b34801561059e57600080fd5b506102db6105ad3660046125a1565b610bc6565b3480156105be57600080fd5b506005546001600160a01b0316610372565b3480156105dc57600080fd5b506102566105eb366004612492565b6001600160a01b031660009081526008602052604090205490565b34801561061257600080fd5b5061027e610c1e565b34801561062757600080fd5b50600e546106749060ff81169061ffff610100820481169163010000008104821691650100000000008204811691600160381b8104821691600160481b8204811691600160581b90041687565b60408051971515885261ffff968716602089015294861694870194909452918416606086015283166080850152821660a08401521660c082015260e001610260565b3480156106c257600080fd5b50600c546102ab90600160a81b900460ff1681565b3480156106e357600080fd5b506102ab6106f236600461242b565b610c2d565b34801561070357600080fd5b506102db6107123660046125bc565b610c3b565b34801561072357600080fd5b5061025660095481565b34801561073957600080fd5b506107436107d081565b60405161ffff9091168152602001610260565b34801561076257600080fd5b50600a54610372906001600160a01b031681565b34801561078257600080fd5b506102566107913660046125e8565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107c857600080fd5b506102db6107d73660046125bc565b610c4d565b3480156107e857600080fd5b5061074361271081565b3480156107fe57600080fd5b506102db61080d366004612492565b610c5f565b34801561081e57600080fd5b506102db61082d36600461242b565b610c9a565b34801561083e57600080fd5b5061037261dead81565b60606003805461085790612621565b80601f016020809104026020016040519081016040528092919081815260200182805461088390612621565b80156108d05780601f106108a5576101008083540402835291602001916108d0565b820191906000526020600020905b8154815290600101906020018083116108b357829003601f168201915b5050505050905090565b6000336108e8818585610cac565b60019150505b92915050565b6108fc610cb9565b306000908152602081905260409020548211156109525760405162461bcd60e51b815260206004820152600f60248201526e082dadeeadce840e8dede40d0d2ced608b1b60448201526064015b60405180910390fd5b61095c8282610ce6565b5050565b610968610cb9565b600d55565b610975610cb9565b61097e81610e53565b50565b60003361098f858285610f1f565b61099a858585610f9d565b506001949350505050565b606081836109b36006610ffc565b6109bd919061266b565b8111156109dc57836109cf6006610ffc565b6109d9919061266b565b90505b60008167ffffffffffffffff8111156109f7576109f761267e565b604051908082528060200260200182016040528015610a20578160200160208202803683370190505b50905060005b82811015610a7557610a43610a3b8288612694565b600690611006565b828281518110610a5557610a556126a7565b6001600160a01b0390921660209283029190910190910152600101610a26565b50949350505050565b610a86610cb9565b61095c8282611019565b60006108ee60068361112a565b610aa5610cb9565b61097e8161114c565b610ab6610cb9565b8015610b155730600090815260208190526040902054821115610b105760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f7567682062616c616e636560701b6044820152606401610949565b610b5a565b81471015610b5a5760405162461bcd60e51b81526020600482015260126024820152714e6f7420656e6f7567682062616c616e636560701b6044820152606401610949565b610b648282611489565b505050565b610b71610cb9565b61097e610b83368390038301836126cf565b6115dd565b610b90610cb9565b610b9a60006118b6565b565b610ba4610cb9565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b610bce610cb9565b801515600c60159054906101000a900460ff16151503610c005760405162461bcd60e51b81526004016109499061278d565b600c8054911515600160a81b0260ff60a81b19909216919091179055565b60606004805461085790612621565b6000336108e8818585610f9d565b610c43610cb9565b61095c8282611908565b610c55610cb9565b61095c82826119a0565b610c67610cb9565b6001600160a01b038116610c9157604051631e4fbdf760e01b815260006004820152602401610949565b61097e816118b6565b610ca2610cb9565b61095c8282611a38565b610b648383836001611b6f565b6005546001600160a01b03163314610b9a5760405163118cdaa760e01b8152336004820152602401610949565b600c805460ff60a01b1916600160a01b179055306000908152602081905260408120549050828110610e4057600e54600090610d2f90600160381b900461ffff166127106127b2565b600e5461ffff91821691610d4b91600160481b900416866127cd565b610d5591906127e4565b90506000610d646002836127e4565b90506000610d72838761266b565b90506000610d80838561266b565b600e5490915060ff16610d9a57610d978282612694565b90505b8015610e1257600b546001600160a01b0316600090815260208190526040902054600003610dcc575050505050610e42565b47610dd78288611c44565b6000610de3824761266b565b9050600083610df287846127cd565b610dfc91906127e4565b90508015610e0e57610e0e8682611d9e565b5050505b600e5460ff1615610e2e57610e28826001611489565b50610e3b565b610e39476000611489565b505b505050505b505b5050600c805460ff60a01b19169055565b610e5e60068261112a565b610e9e5760405162461bcd60e51b81526020600482015260116024820152702737ba103332b29031b7b63632b1ba37b960791b6044820152606401610949565b610ea9600682611e52565b506001600160a01b0381166000908152600860205260408120546009805491929091610ed690849061266b565b90915550506001600160a01b038116600081815260086020526040808220829055517f904316769e154356a5e4aad5d41591b55913c7717fab281d818c1fed7d80e8149190a250565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610f975781811015610f8857604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610949565b610f9784848484036000611b6f565b50505050565b6001600160a01b038316610fc757604051634b637e8f60e11b815260006004820152602401610949565b6001600160a01b038216610ff15760405163ec442f0560e01b815260006004820152602401610949565b610b64838383611e67565b60006108ee825490565b60006110128383611e72565b9392505050565b61102460068361112a565b156110695760405162461bcd60e51b815260206004820152601560248201527420b63932b0b23c903332b29031b7b63632b1ba37b960591b6044820152606401610949565b600081116110a95760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420736861726560981b6044820152606401610949565b6110b4600683611e9c565b506001600160a01b0382166000908152600860205260408120829055600980548392906110e2908490612694565b90915550506040518181526001600160a01b038316907f918584c21fe4a093f5014c0dabaed3e43b642781e27984aef122cae8245fbb23906020015b60405180910390a25050565b6001600160a01b03811660009081526001830160205260408120541515611012565b6001600160a01b0381166111935760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b2103937baba32b960911b6044820152606401610949565b600a80546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa1580156111ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112139190612806565b90506001600160a01b03811661125d5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c696420666163746f727960881b6044820152606401610949565b600a54604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa1580156112a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cb9190612806565b60405163e6a4390560e01b81523060048201526001600160a01b0380831660248301529192509083169063e6a4390590604401602060405180830381865afa15801561131b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133f9190612806565b600b80546001600160a01b0319166001600160a01b039290921691821790556113f5576040516364e329cb60e11b81523060048201526001600160a01b03828116602483015283169063c9c65396906044016020604051808303816000875af11580156113b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d49190612806565b600b80546001600160a01b0319166001600160a01b03929092169190911790555b600b546001600160a01b03166114455760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103830b4b91030b2323932b9b99760591b6044820152606401610949565b600b54600a546040516001600160a01b0392831692909116907fca394f95d8dbf1e8b2e76b9a8da90cacce1da85181a65508dab13212dc1df53b90600090a3505050565b60008260000361149b575060006108ee565b6009546000036114ad575060006108ee565b6000806114ba6006610ffc565b905060005b818110156115d15760006114d4600683611006565b905060006114e360018561266b565b831461151e576009546001600160a01b03831660009081526008602052604090205461150f908a6127cd565b61151991906127e4565b611528565b611528858961266b565b905086156115405761153b308383610f9d565b611578565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611576573d6000803e3d6000fd5b505b816001600160a01b03167f06c5efeff5c320943d265dc4e5f1af95ad523555ce0c1957e367dda5514572df826040516115b391815260200190565b60405180910390a26115c58186612694565b945050506001016114bf565b50600195945050505050565b6107d061ffff16816020015161ffff16111561162d5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206275792066656560881b6044820152606401610949565b6107d061ffff16816040015161ffff16111561167e5760405162461bcd60e51b815260206004820152601060248201526f496e76616c69642073656c6c2066656560801b6044820152606401610949565b6107d061ffff16816060015161ffff1611156116d35760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964207472616e736665722066656560601b6044820152606401610949565b60008160c001518260a0015183608001516116ee9190612823565b6116f89190612823565b905061ffff81161580611710575061ffff8116612710145b6117505760405162461bcd60e51b8152602060048201526011602482015270496e76616c69642066656520736861726560781b6044820152606401610949565b8151600e805460208501516040808701516060880151608089015160a08a015160c08b015161ffff908116600160581b0261ffff60581b19928216600160481b026affff00000000000000000019948316600160381b02949094166affffffff0000000000000019958316650100000000000266ffff0000000000199784166301000000029790971666ffffffff00000019939099166101000262ffff00199c15159c909c1662ffffff19909a16999099179a909a1716959095179290921716939093179290921716929092179055517ff34b49a91d91598b7774795175736ebf4db4fa5a4edf72772cf50fb27c135efd906118aa908490600060e082019050825115158252602083015161ffff80821660208501528060408601511660408501528060608601511660608501528060808601511660808501528060a08601511660a08501528060c08601511660c0850152505092915050565b60405180910390a15050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152600f602052604090205481151560ff9091161515036119485760405162461bcd60e51b81526004016109499061278d565b6001600160a01b0382166000818152600f6020908152604091829020805460ff191685151590811790915591519182527f3499bfcf9673677ba552f3fe2ea274ec7e6246da31c3c87e115b45a9b0db2efb910161111e565b6001600160a01b03821660009081526010602052604090205481151560ff9091161515036119e05760405162461bcd60e51b81526004016109499061278d565b6001600160a01b038216600081815260106020908152604091829020805460ff191685151590811790915591519182527f902b2ea0acdec5a260e398590d055fe29bd61ef5dd41e45db54a4cd98d5569e0910161111e565b611a4360068361112a565b611a835760405162461bcd60e51b81526020600482015260116024820152702737ba103332b29031b7b63632b1ba37b960791b6044820152606401610949565b60008111611ac35760405162461bcd60e51b815260206004820152600d60248201526c496e76616c696420736861726560981b6044820152606401610949565b6001600160a01b0382166000908152600860205260408120546009805491928392611aef90849061266b565b90915550506001600160a01b038316600090815260086020526040812083905560098054849290611b21908490612694565b909155505060408051828152602081018490526001600160a01b038516917fd350c3685bdab1285c0b97ffb6e96d96ed0ad4578a135c38250e771e7cb831aa910160405180910390a2505050565b6001600160a01b038416611b995760405163e602df0560e01b815260006004820152602401610949565b6001600160a01b038316611bc357604051634a1406b160e11b815260006004820152602401610949565b6001600160a01b0380851660009081526001602090815260408083209387168352929052208290558015610f9757826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611c3691815260200190565b60405180910390a350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c7957611c796126a7565b6001600160a01b03928316602091820292909201810191909152600a54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611cd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf69190612806565b81600181518110611d0957611d096126a7565b6001600160a01b039283166020918202929092010152600a54611d2f9130911685610cac565b600a5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611d67908690869086903090429060040161283e565b600060405180830381600087803b158015611d8157600080fd5b505af1158015611d95573d6000803e3d6000fd5b50505050505050565b600a54611db69030906001600160a01b031684610cac565b600a54600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015611e26573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e4b919061287a565b5050505050565b6000611012836001600160a01b038416611eb1565b610b64838383611fab565b6000826000018281548110611e8957611e896126a7565b9060005260206000200154905092915050565b6000611012836001600160a01b03841661224e565b60008181526001830160205260408120548015611f9a576000611ed560018361266b565b8554909150600090611ee99060019061266b565b9050808214611f4e576000866000018281548110611f0957611f096126a7565b9060005260206000200154905080876000018481548110611f2c57611f2c6126a7565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611f5f57611f5f6128a8565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506108ee565b60009150506108ee565b5092915050565b60008111611feb5760405162461bcd60e51b815260206004820152600d60248201526c05472616e73666572203c3d203609c1b6044820152606401610949565b600c546000908190600160a01b900460ff161580156120135750600c54600160a81b900460ff165b90506000612039866001600160a01b031660009081526010602052604090205460ff1690565b9050600061205f866001600160a01b031660009081526010602052604090205460ff1690565b600c54909150600160a01b900460ff1661215e576001600160a01b038781166000908152600f602052604080822054928916825290205460ff91821691168380156120a8575082155b80156120b2575080155b80156120cc5750600a546001600160a01b03898116911614155b156120e457600e54610100900461ffff16955061215b565b8280156120ef575081155b80156120f9575080155b1561211357600e546301000000900461ffff16955061215b565b8315801561211f575082155b80156121395750600a546001600160a01b038a8116911614155b8015612143575081155b1561215b57600e5465010000000000900461ffff1695505b50505b82801561216b5750600084115b80156121745750805b1561219f5730600090815260208190526040902054600d54811061219d5761219d816000610ce6565b505b83156122435760006127106121b486886127cd565b6121be91906127e4565b905060006121cc828861266b565b600e54909150600090612710906121ee90600160381b900461ffff16856127cd565b6121f891906127e4565b905080156122195761220a818461266b565b92506122198a61dead8361229d565b821561222a5761222a8a308561229d565b811561223b5761223b8a8a8461229d565b505050611d95565b611d9587878761229d565b6000818152600183016020526040812054612295575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556108ee565b5060006108ee565b6001600160a01b0383166122c85780600260008282546122bd9190612694565b9091555061233a9050565b6001600160a01b0383166000908152602081905260409020548181101561231b5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610949565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661235657600280548290039055612375565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516123ba91815260200190565b60405180910390a3505050565b60006020808352835180602085015260005b818110156123f5578581018301518582016040015282016123d9565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461097e57600080fd5b6000806040838503121561243e57600080fd5b823561244981612416565b946020939093013593505050565b6000806040838503121561246a57600080fd5b50508035926020909101359150565b60006020828403121561248b57600080fd5b5035919050565b6000602082840312156124a457600080fd5b813561101281612416565b6000806000606084860312156124c457600080fd5b83356124cf81612416565b925060208401356124df81612416565b929592945050506040919091013590565b60008151808452602080850194506020840160005b8381101561252a5781516001600160a01b031687529582019590820190600101612505565b509495945050505050565b60208152600061101260208301846124f0565b8035801515811461255857600080fd5b919050565b6000806040838503121561257057600080fd5b8235915061258060208401612548565b90509250929050565b600060e0828403121561259b57600080fd5b50919050565b6000602082840312156125b357600080fd5b61101282612548565b600080604083850312156125cf57600080fd5b82356125da81612416565b915061258060208401612548565b600080604083850312156125fb57600080fd5b823561260681612416565b9150602083013561261681612416565b809150509250929050565b600181811c9082168061263557607f821691505b60208210810361259b57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156108ee576108ee612655565b634e487b7160e01b600052604160045260246000fd5b808201808211156108ee576108ee612655565b634e487b7160e01b600052603260045260246000fd5b803561ffff8116811461255857600080fd5b600060e082840312156126e157600080fd5b60405160e0810181811067ffffffffffffffff8211171561271257634e487b7160e01b600052604160045260246000fd5b60405261271e83612548565b815261272c602084016126bd565b602082015261273d604084016126bd565b604082015261274e606084016126bd565b606082015261275f608084016126bd565b608082015261277060a084016126bd565b60a082015261278160c084016126bd565b60c08201529392505050565b6020808252600b908201526a105b1c9958591e481cd95d60aa1b604082015260600190565b61ffff828116828216039080821115611fa457611fa4612655565b80820281158282048414176108ee576108ee612655565b60008261280157634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561281857600080fd5b815161101281612416565b61ffff818116838216019080821115611fa457611fa4612655565b85815284602082015260a06040820152600061285d60a08301866124f0565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561288f57600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220097f3e1090441e05b6b3dba676642a6a2a7ffb0c645f8a692f26a4007078355f64736f6c634300081900330000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000b9a487b977373f8bae7eeaaab8e852f011143e660000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad24000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c8000000000000000000000000000000000000000000000000000000000000012c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005dc000000000000000000000000000000000000000000000000000000000000213400000000000000000000000000000000000000000000000000000000000001800000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000000400000000000000000000000002e0d53dc55f219b3b149f2fbd164da0e5f936f800000000000000000000000044a204554964251265c773d3c832691621110f1600000000000000000000000048f7571e0466a55bf462de6cefcbfa9ea23aca0d000000000000000000000000ec9ca79a1587e6bb31b328a40f69887a3a52e8f9000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000016f800000000000000000000000000000000000000000000000000000000000006e1000000000000000000000000000000000000000000000000000000000000049c000000000000000000000000000000000000000000000000000000000000049c