[ { "inputs": [ { "internalType": "string", "name": "poolName", "type": "string" }, { "internalType": "string", "name": "poolSymbol", "type": "string" }, { "internalType": "address", "name": "_distributor", "type": "address" }, { "internalType": "uint256", "name": "_epochLength", "type": "uint256" }, { "internalType": "address", "name": "_escrowPool", "type": "address" }, { "internalType": "uint256", "name": "_escrowPortion", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "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": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [ { "internalType": "int256", "name": "value", "type": "int256" } ], "name": "SafeCastOverflowedIntToUint", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "SafeCastOverflowedUintToInt", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "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": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "depositor", "type": "address" } ], "name": "Deposited", "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": false, "internalType": "address", "name": "_user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "_escrowedAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_nonEscrowedAmount", "type": "uint256" } ], "name": "RewardsClaimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "RewardsDistributed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "RewardsWithdrawn", "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" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "depositor", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Withdrawn", "type": "event" }, { "inputs": [], "name": "SCALING_FACTOR", "outputs": [ { "internalType": "uint128", "name": "", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "depositTokenAddress", "type": "address" }, { "internalType": "address", "name": "rewardTokenAddress", "type": "address" } ], "name": "addDepositRewardToken", "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": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract ILiquidityDistributionManager", "name": "_add", "type": "address" } ], "name": "changeDistributor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "claimRewards", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "depositToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "distributeRewards", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "distributor", "outputs": [ { "internalType": "contract ILiquidityDistributionManager", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "epoch", "outputs": [ { "internalType": "uint256", "name": "length", "type": "uint256" }, { "internalType": "uint256", "name": "end", "type": "uint256" }, { "internalType": "uint256", "name": "distributed", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "escrowPool", "outputs": [ { "internalType": "contract IEscrow", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "escrowPortion", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "getCumulativePayouts", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "getRedeemablePayouts", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_account", "type": "address" } ], "name": "getRedeemedPayouts", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "pointsCorrection", "outputs": [ { "internalType": "int256", "name": "", "type": "int256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rewardToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_duration", "type": "uint256" } ], "name": "setEpochTime", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_add", "type": "address" } ], "name": "setFeeReceiver", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_fee", "type": "uint256" } ], "name": "setWithdrawFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "shareBasedPoints", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "stake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": [], "name": "unstake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_escrow", "type": "address" } ], "name": "updateEcrowPool", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "withdrawFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "withdrawnRewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" } ]
60c06040523480156200001157600080fd5b5060405162001ec338038062001ec3833981016040819052620000349162000285565b6200013260201b620009f0176200014d60201b620005d51787873360006001600160a01b0316816001600160a01b0316036200008a57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000958162000153565b50600180556005620000a88382620003b5565b506006620000b78282620003b5565b5050506001600160401b039182166080521660a052600c80546001600160a01b03199081166001600160a01b0396871617909155604080516060810182528581524260208201819052600091909201819052601195909555601255601393909355600f80549093169190931617905560105550620004819050565b6001600160a01b031660009081526002602052604090205490565b60045490565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001cb57600080fd5b81516001600160401b0380821115620001e857620001e8620001a3565b604051601f8301601f19908116603f01168101908282118183101715620002135762000213620001a3565b816040528381526020925086838588010111156200023057600080fd5b600091505b8382101562000254578582018301518183018401529082019062000235565b600093810190920192909252949350505050565b80516001600160a01b03811681146200028057600080fd5b919050565b60008060008060008060c087890312156200029f57600080fd5b86516001600160401b0380821115620002b757600080fd5b620002c58a838b01620001b9565b97506020890151915080821115620002dc57600080fd5b50620002eb89828a01620001b9565b955050620002fc6040880162000268565b935060608701519250620003136080880162000268565b915060a087015190509295509295509295565b600181811c908216806200033b57607f821691505b6020821081036200035c57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003b057600081815260208120601f850160051c810160208610156200038b5750805b601f850160051c820191505b81811015620003ac5782815560010162000397565b5050505b505050565b81516001600160401b03811115620003d157620003d1620001a3565b620003e981620003e2845462000326565b8462000362565b602080601f831160018114620004215760008415620004085750858301515b600019600386901b1c1916600185901b178555620003ac565b600085815260208120601f198616915b82811015620004525788860151825594840194600190910190840162000431565b5085821015620004715787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611a1c620004a7600039600061114801526000610b140152611a1c6000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c8063a694fc3a11610125578063d7e63867116100ad578063e941fa781161007c578063e941fa78146104c1578063ef4cadc5146104ca578063efdcd974146104f0578063f2fde38b14610503578063f7c618c11461051657600080fd5b8063d7e6386714610442578063dd62ed3e14610455578063dd6624e41461048e578063e1b71bdf146104ae57600080fd5b8063b6ac642a116100f4578063b6ac642a146103f7578063bfe109281461040a578063c89039c51461041d578063d03adee914610430578063d1f529831461043957600080fd5b8063a694fc3a14610388578063a9059cbb1461039b578063b178f8cb146103ae578063b182eb91146103d757600080fd5b80636f4a2cd0116101a8578063802cd15f11610177578063802cd15f1461031c578063866536601461032f5780638da5cb5b14610342578063900cf0cf1461035357806395d89b411461038057600080fd5b80636f4a2cd0146102e657806370a08231146102ee578063715018a6146103015780637a26ec281461030957600080fd5b806323b872dd116101ef57806323b872dd146102875780632def66201461029a578063313ce567146102a4578063372500ab146102b357806368570e6a146102bb57600080fd5b806306fdde0314610221578063095ea7b31461023f57806318160ddd1461026257806322e12d4914610274575b600080fd5b610229610529565b6040516102369190611748565b60405180910390f35b61025261024d366004611790565b6105bb565b6040519015158152602001610236565b6004545b604051908152602001610236565b6102666102823660046117bc565b6105db565b6102526102953660046117d9565b610607565b6102a261062d565b005b60405160128152602001610236565b6102a26107b7565b600f546102ce906001600160a01b031681565b6040516001600160a01b039091168152602001610236565b6102a2610907565b6102666102fc3660046117bc565b6109f0565b6102a2610a0b565b6102a261031736600461181a565b610a1d565b6102a261032a3660046117bc565b610a71565b61026661033d3660046117bc565b610ae0565b6000546001600160a01b03166102ce565b60115460125460135461036592919083565b60408051938452602084019290925290820152606001610236565b610229610b61565b6102a261039636600461181a565b610b70565b6102526103a9366004611790565b610c30565b6102666103bc3660046117bc565b6001600160a01b031660009081526009602052604090205490565b6102666103e53660046117bc565b60086020526000908152604090205481565b6102a261040536600461181a565b610c3e565b600c546102ce906001600160a01b031681565b600a546102ce906001600160a01b031681565b61026660075481565b61026660105481565b6102a26104503660046117bc565b610c91565b610266610463366004611833565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b61026661049c3660046117bc565b60096020526000908152604090205481565b6102a26104bc366004611833565b610cfc565b610266600e5481565b6104d86001600160801b0381565b6040516001600160801b039091168152602001610236565b6102a26104fe3660046117bc565b610e79565b6102a26105113660046117bc565b610ee8565b600b546102ce906001600160a01b031681565b6060600580546105389061186c565b80601f01602080910402602001604051908101604052809291908181526020018280546105649061186c565b80156105b15780601f10610586576101008083540402835291602001916105b1565b820191906000526020600020905b81548152906001019060200180831161059457829003601f168201915b5050505050905090565b6000336105c9818585610f23565b60019150505b92915050565b60045490565b6001600160a01b0381166000908152600960205260408120546105fd83610ae0565b6105cf91906118bc565b600033610615858285610f30565b610620858585610fae565b60019150505b9392505050565b61063561100d565b6000610640336109f0565b1161068b5760405162461bcd60e51b815260206004820152601660248201527511195c1bdcda5d08191bd95cc81b9bdd08195e1a5cdd60521b60448201526064015b60405180910390fd5b6000610696336109f0565b90506106a23382611037565b60006064600e54836106b491906118cf565b6106be91906118e6565b9050801561074157600a54600d5460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb906044016020604051808303816000875af115801561071b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073f9190611908565b505b600061074d82846118bc565b905061076633600a546001600160a01b0316908361104d565b7f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d533604080516001600160a01b039092168252602082018690520160405180910390a15050506107b560018055565b565b6107bf610907565b60006107ca336110ac565b90506000670de0b6b3a7640000601054836107e591906118cf565b6107ef91906118e6565b905060006107fd82846118bc565b905081158015906108185750600f546001600160a01b031615155b156108a257600f546001600160a01b0316637ec90e0f336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af115801561087c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a0919061192a565b505b60018111156108c2576108c233600b546001600160a01b0316908361104d565b604080513381526020810184905280820183905290517fdacbdde355ba930696a362ea6738feb9f8bd52dfb3d81947558fd3217e23e3259181900360600190a1505050565b61090f61100d565b60125442106109e75760125460009061092890426118bc565b6011546109359190611943565b6011549091506109459042611943565b601255600c546040516326f4fe0560e01b8152600481018390526000916001600160a01b0316906326f4fe05906024016020604051808303816000875af1158015610994573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b8919061192a565b905080156109e4576109c981611141565b80601160020160008282546109de9190611943565b90915550505b50505b6107b560018055565b6001600160a01b031660009081526002602052604090205490565b610a13611240565b6107b5600061126d565b610a25611240565b60008111610a6c5760405162461bcd60e51b815260206004820152601460248201527365706f63682063616e6e6f74206265207a65726f60601b6044820152606401610682565b601155565b610a79611240565b6001600160a01b038116610abe5760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610682565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381166000908152600860205260408120546001600160801b0390610b5790610b48610b368663ffffffff7f000000000000000000000000000000000000000000000000000000000000000016565b600754610b4391906118cf565b6112bd565b610b529190611956565b6112ee565b6105cf91906118e6565b6060600680546105389061186c565b610b7861100d565b60008111610bc85760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610682565b610be033600a546001600160a01b0316903084611314565b610bea338261134d565b6040805182815233602082015281517f21d3f238b5a9e25ffc48b8320bc1d58882b1d90d0b4fcc7ba9707e3aebfedf16929181900390910190a1610c2d60018055565b50565b6000336105c9818585610fae565b610c46611240565b600a811115610c8c5760405162461bcd60e51b81526020600482015260126024820152711b585e080c4c09481a5cc8185b1b1bddd95960721b6044820152606401610682565b600e55565b610c99611240565b6001600160a01b038116610cda5760405162461bcd60e51b81526020600482015260086024820152671e995c9bc818591960c21b6044820152606401610682565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b610d04611240565b6001600160a01b038216610d5a5760405162461bcd60e51b815260206004820152601960248201527f4465706f73697420746f6b656e206d75737420626520736574000000000000006044820152606401610682565b6001600160a01b038116610db05760405162461bcd60e51b815260206004820152601860248201527f72657761726420746f6b656e206d7573742062652073657400000000000000006044820152606401610682565b600a80546001600160a01b038085166001600160a01b031992831617909255600b8054928416929091168217905515801590610df65750600f546001600160a01b031615155b15610e7557600f5460405163095ea7b360e01b81526001600160a01b03918216600482015260001960248201529082169063095ea7b3906044016020604051808303816000875af1158015610e4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e739190611908565b505b5050565b610e81611240565b6001600160a01b038116610ec65760405162461bcd60e51b815260206004820152600c60248201526b7a65726f206164647265737360a01b6044820152606401610682565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b610ef0611240565b6001600160a01b038116610f1a57604051631e4fbdf760e01b815260006004820152602401610682565b610c2d8161126d565b610e73838383600161136b565b6001600160a01b038381166000908152600360209081526040808320938616835292905220546000198114610fa85781811015610f9957604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610682565b610fa88484848403600061136b565b50505050565b6001600160a01b038316610fd857604051634b637e8f60e11b815260006004820152602401610682565b6001600160a01b0382166110025760405163ec442f0560e01b815260006004820152602401610682565b610e73838383611440565b60026001540361103057604051633ee5aeb560e01b815260040160405180910390fd5b6002600155565b61104382600083611440565b610e75828261156a565b6040516001600160a01b03838116602483015260448201839052610e7391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506115ba565b6000806110b8836105db565b905080156105cf576001600160a01b0383166000908152600960205260409020546110e4908290611943565b6001600160a01b038416600081815260096020526040908190209290925590517f8a43c4352486ec339f487f64af78ca5cbf06cd47833f073d3baf3a193e503161906111339084815260200190565b60405180910390a292915050565b600061116f7f000000000000000000000000000000000000000000000000000000000000000063ffffffff16565b9050600081116111d55760405162461bcd60e51b815260206004820152602b60248201527f4162737472616374526577617264733a20746f74616c2073686172652073757060448201526a706c79206973207a65726f60a81b6064820152608401610682565b8115610e7557806111ed6001600160801b03846118cf565b6111f791906118e6565b6007546112049190611943565b60075560405182815233907fdf29796aad820e4bb192f3a8d631b76519bcd2cbe77cc85af20e9df53cece0869060200160405180910390a25050565b6000546001600160a01b031633146107b55760405163118cdaa760e01b8152336004820152602401610682565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160ff1b038211156112ea5760405163123baf0360e11b815260048101839052602401610682565b5090565b6000808212156112ea57604051635467221960e11b815260048101839052602401610682565b6040516001600160a01b038481166024830152838116604483015260648201839052610fa89186918216906323b872dd9060840161107a565b61135960008383611440565b610e75826113668361197e565b61156a565b6001600160a01b0384166113955760405163e602df0560e01b815260006004820152602401610682565b6001600160a01b0383166113bf57604051634a1406b160e11b815260006004820152602401610682565b6001600160a01b0380851660009081526003602090815260408083209387168352929052208290558015610fa857826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161143291815260200190565b60405180910390a350505050565b6001600160a01b03831661146b5780600460008282546114609190611943565b909155506114dd9050565b6001600160a01b038316600090815260026020526040902054818110156114be5760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610682565b6001600160a01b03841660009081526002602052604090209082900390555b6001600160a01b0382166114f957600480548290039055611518565b6001600160a01b03821660009081526002602052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161155d91815260200190565b60405180910390a3505050565b600754611577908261199a565b6001600160a01b03831660009081526008602052604090205461159a9190611956565b6001600160a01b0390921660009081526008602052604090209190915550565b60006115cf6001600160a01b0384168361161d565b905080516000141580156115f45750808060200190518101906115f29190611908565b155b15610e7357604051635274afe760e01b81526001600160a01b0384166004820152602401610682565b60606106268383600084600080856001600160a01b0316848660405161164391906119ca565b60006040518083038185875af1925050503d8060008114611680576040519150601f19603f3d011682016040523d82523d6000602084013e611685565b606091505b509150915061169586838361169f565b9695505050505050565b6060826116b4576116af826116fb565b610626565b81511580156116cb57506001600160a01b0384163b155b156116f457604051639996b31560e01b81526001600160a01b0385166004820152602401610682565b5080610626565b80511561170b5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60005b8381101561173f578181015183820152602001611727565b50506000910152565b6020815260008251806020840152611767816040850160208701611724565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610c2d57600080fd5b600080604083850312156117a357600080fd5b82356117ae8161177b565b946020939093013593505050565b6000602082840312156117ce57600080fd5b81356106268161177b565b6000806000606084860312156117ee57600080fd5b83356117f98161177b565b925060208401356118098161177b565b929592945050506040919091013590565b60006020828403121561182c57600080fd5b5035919050565b6000806040838503121561184657600080fd5b82356118518161177b565b915060208301356118618161177b565b809150509250929050565b600181811c9082168061188057607f821691505b6020821081036118a057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105cf576105cf6118a6565b80820281158282048414176105cf576105cf6118a6565b60008261190357634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561191a57600080fd5b8151801515811461062657600080fd5b60006020828403121561193c57600080fd5b5051919050565b808201808211156105cf576105cf6118a6565b8082018281126000831280158216821582161715611976576119766118a6565b505092915050565b6000600160ff1b8201611993576119936118a6565b5060000390565b80820260008212600160ff1b841416156119b6576119b66118a6565b81810583148215176105cf576105cf6118a6565b600082516119dc818460208701611724565b919091019291505056fea26469706673582212207bc2fe0489d24d674a37c05af22c2dbf496b4fee9dbeefc72bb05df63eb25b8464736f6c6343000814003300000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000004c7e4b65ae2e30936300e13b7b5688682adda09500000000000000000000000000000000000000000000000000000000000007080000000000000000000000000ef1c026c6ed555432a39ae2b5d8c246e75ef75e00000000000000000000000000000000000000000000000006f05b59d3b200000000000000000000000000000000000000000000000000000000000000000011507974686961204c50205374616b696e67000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a53506879746869614c5000000000000000000000000000000000000000000000