[ { "inputs": [ { "internalType": "address", "name": "initialAuthority", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "address", "name": "stoneVaultAddress", "type": "address" }, { "internalType": "address", "name": "stoneTokenAddress", "type": "address" }, { "internalType": "uint256", "name": "_maxStakeLimit", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "authority", "type": "address" } ], "name": "AccessManagedInvalidAuthority", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" }, { "internalType": "uint32", "name": "delay", "type": "uint32" } ], "name": "AccessManagedRequiredDelay", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "caller", "type": "address" } ], "name": "AccessManagedUnauthorized", "type": "error" }, { "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": "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": "address", "name": "authority", "type": "address" } ], "name": "AuthorityUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "stoneAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "round", "type": "uint256" } ], "name": "CancelUnstake", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "beneficiary", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "EmergencyWithdrawEther", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "address", "name": "beneficiary", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "EmergencyWithdrawToken", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newLimit", "type": "uint256" } ], "name": "MaxStakeLimitUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "ethAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "stoneAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "round", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "referralCode", "type": "string" } ], "name": "Staked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "StoneTokensRedeemed", "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": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "stoneAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "round", "type": "uint256" } ], "name": "UnstakeRequested", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "withdrawnETHAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "ethAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "stoneAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "round", "type": "uint256" } ], "name": "Unstaked", "type": "event" }, { "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": "approveStoneTokenSpending", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "authority", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "stoneAmount", "type": "uint256" } ], "name": "cancelUnstake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "beneficiary", "type": "address" }, { "internalType": "address", "name": "token", "type": "address" } ], "name": "emergencyWithdrawToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "estimatedTotalValueLockedInETH", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "estimatedUserStoneValueInETH", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "ethBalances", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getCurrentPricePerStone", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getCurrentRound", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "round", "type": "uint256" } ], "name": "getHistoricalPricePerStone", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "ethAmount", "type": "uint256" }, { "internalType": "uint256", "name": "stoneAmount", "type": "uint256" } ], "name": "instantUnstake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "isConsumingScheduledOp", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "round", "type": "uint256" } ], "name": "isRoundCompleted", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxStakeLimit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "redeemStoneTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "stoneAmount", "type": "uint256" } ], "name": "requestUnstake", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "requestedUnstakes", "outputs": [ { "internalType": "uint256", "name": "stoneAmount", "type": "uint256" }, { "internalType": "uint256", "name": "round", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newAuthority", "type": "address" } ], "name": "setAuthority", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newLimit", "type": "uint256" } ], "name": "setMaxStakeLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "settleRequestedUnstakeIfNeeded", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "referralCode", "type": "string" } ], "name": "stake", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "stoneToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "stoneVault", "outputs": [ { "internalType": "contract IStoneVault", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "totalStakedETH", "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": "", "type": "address" } ], "name": "totalUnstakedETH", "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": [], "name": "unstakeFeeRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60806040523480156200001157600080fd5b506040516200295a3803806200295a833981016040819052620000349162000273565b8585856003620000458382620003af565b506004620000548282620003af565b5050506200006881620000b460201b60201c565b50600680546001600160a01b038086166001600160a01b03199283161790925560078054928516929091169190911790556008819055620000a862000108565b505050505050620004a6565b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad9060200160405180910390a150565b60075460065460405163095ea7b360e01b81526001600160a01b0391821660048201526000196024820181905292919091169063095ea7b3906044016020604051808303816000875af115801562000164573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018a91906200047b565b5050565b80516001600160a01b0381168114620001a657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001d357600080fd5b81516001600160401b0380821115620001f057620001f0620001ab565b604051601f8301601f19908116603f011681019082821181831017156200021b576200021b620001ab565b81604052838152602092508660208588010111156200023957600080fd5b600091505b838210156200025d57858201830151818301840152908201906200023e565b6000602085830101528094505050505092915050565b60008060008060008060c087890312156200028d57600080fd5b62000298876200018e565b60208801519096506001600160401b0380821115620002b657600080fd5b620002c48a838b01620001c1565b96506040890151915080821115620002db57600080fd5b50620002ea89828a01620001c1565b945050620002fb606088016200018e565b92506200030b608088016200018e565b915060a087015190509295509295509295565b600181811c908216806200033357607f821691505b6020821081036200035457634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003aa576000816000526020600020601f850160051c81016020861015620003855750805b601f850160051c820191505b81811015620003a65782815560010162000391565b5050505b505050565b81516001600160401b03811115620003cb57620003cb620001ab565b620003e381620003dc84546200031e565b846200035a565b602080601f8311600181146200041b5760008415620004025750858301515b600019600386901b1c1916600185901b178555620003a6565b600085815260208120601f198616915b828110156200044c578886015182559484019460019091019084016200042b565b50858210156200046b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200048e57600080fd5b815180151581146200049f57600080fd5b9392505050565b6124a480620004b66000396000f3fe6080604052600436106102075760003560e01c806359c596c811610118578063ba93ec29116100a0578063dd62ed3e1161006f578063dd62ed3e146105f1578063e369c8ae14610637578063e8d17d5914610664578063eecf620f146106ad578063f3f961ca146106c257600080fd5b8063ba93ec291461057d578063bd0461aa1461059d578063bf7e214f146105bd578063cd968c93146105db57600080fd5b80637a9e5e4b116100e75780637a9e5e4b146104e55780638fb360371461050557806395d89b4114610533578063a32bf59714610548578063a9059cbb1461055d57600080fd5b806359c596c81461045a578063682458bd1461047a5780636ae288331461049a57806370a08231146104af57600080fd5b80632a042f401161019b578063329be03a1161016a578063329be03a146103c5578063369f39e0146103e55780633cfba0e314610405578063432e39cd1461043257806346f45b8d1461044757600080fd5b80632a042f40146103315780632b187b2b146103695780632ef61d8b14610389578063313ce567146103a957600080fd5b806318160ddd116101d757806318160ddd146102ba57806323095721146102cf57806323b872dd146102f157806324d339dd1461031157600080fd5b80620ce32d1461021357806306fdde031461023b578063095ea7b31461025d57806311e943631461028d57600080fd5b3661020e57005b600080fd5b34801561021f57600080fd5b506102286106e2565b6040519081526020015b60405180910390f35b34801561024757600080fd5b506102506107f6565b6040516102329190612024565b34801561026957600080fd5b5061027d610278366004612053565b610888565b6040519015158152602001610232565b34801561029957600080fd5b506102286102a836600461207d565b600c6020526000908152604090205481565b3480156102c657600080fd5b50600254610228565b3480156102db57600080fd5b506102ef6102ea366004612098565b6108a2565b005b3480156102fd57600080fd5b5061027d61030c3660046120b1565b610a46565b34801561031d57600080fd5b5061022861032c36600461207d565b610a6c565b34801561033d57600080fd5b50600754610351906001600160a01b031681565b6040516001600160a01b039091168152602001610232565b34801561037557600080fd5b506102ef610384366004612098565b610b27565b34801561039557600080fd5b506102ef6103a4366004612098565b610c84565b3480156103b557600080fd5b5060405160128152602001610232565b3480156103d157600080fd5b506102ef6103e036600461207d565b610e27565b3480156103f157600080fd5b5061027d610400366004612098565b610f4f565b34801561041157600080fd5b5061022861042036600461207d565b60096020526000908152604090205481565b34801561043e57600080fd5b50610228610fd0565b6102ef610455366004612103565b611044565b34801561046657600080fd5b506102ef610475366004612098565b611217565b34801561048657600080fd5b506102ef6104953660046121b4565b61125c565b3480156104a657600080fd5b506102286112df565b3480156104bb57600080fd5b506102286104ca36600461207d565b6001600160a01b031660009081526020819052604090205490565b3480156104f157600080fd5b506102ef61050036600461207d565b611329565b34801561051157600080fd5b5061051a61139f565b6040516001600160e01b03199091168152602001610232565b34801561053f57600080fd5b506102506113c5565b34801561055457600080fd5b506102286113d4565b34801561056957600080fd5b5061027d610578366004612053565b61141e565b34801561058957600080fd5b50600654610351906001600160a01b031681565b3480156105a957600080fd5b506102ef6105b83660046121e7565b61142c565b3480156105c957600080fd5b506005546001600160a01b0316610351565b3480156105e757600080fd5b5061022860085481565b3480156105fd57600080fd5b5061022861060c3660046121b4565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561064357600080fd5b5061022861065236600461207d565b600b6020526000908152604090205481565b34801561067057600080fd5b5061069861067f36600461207d565b600a602052600090815260409020805460019091015482565b60408051928352602083019190915201610232565b3480156106b957600080fd5b506102ef611618565b3480156106ce57600080fd5b506102286106dd366004612098565b611697565b6007546040516370a0823160e01b815230600482015260009182916001600160a01b03909116906370a0823190602401602060405180830381865afa15801561072f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107539190612209565b90506000600660009054906101000a90046001600160a01b03166001600160a01b03166328a795766040518163ffffffff1660e01b81526004016020604051808303816000875af11580156107ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d09190612209565b9050670de0b6b3a76400006107e58284612238565b6107ef919061224f565b9250505090565b60606003805461080590612271565b80601f016020809104026020016040519081016040528092919081815260200182805461083190612271565b801561087e5780601f106108535761010080835404028352916020019161087e565b820191906000526020600020905b81548152906001019060200180831161086157829003601f168201915b5050505050905090565b600033610896818585611705565b60019150505b92915050565b6108af335b600036611717565b806108b9336104ca565b101561091c5760405162461bcd60e51b815260206004820152602760248201527f59617953746f6e65546f6b656e3a20496e73756666696369656e74205953542060448201526662616c616e636560c81b60648201526084015b60405180910390fd5b61092533610e27565b610930335b82611817565b60065460405163745400c960e01b8152600481018390526001600160a01b039091169063745400c990602401600060405180830381600087803b15801561097657600080fd5b505af115801561098a573d6000803e3d6000fd5b50505050600081600a600061099c3390565b6001600160a01b031681526020810191909152604001600020546109c091906122ab565b905060405180604001604052808281526020016109db6113d4565b9052336000818152600a60209081526040909120835181559201516001909201919091557f57e41df54512c76148b5ba9b643d149752b0d35e493b969bd017d0a3fe5228cf83610a296113d4565b604080519283526020830191909152015b60405180910390a25050565b600033610a5485828561184d565b610a5f8585856118cb565b60019150505b9392505050565b6001600160a01b0381166000908152602081905260408120546000600660009054906101000a90046001600160a01b03166001600160a01b03166328a795766040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b009190612209565b9050670de0b6b3a7640000610b158284612238565b610b1f919061224f565b949350505050565b610b3033610e27565b336000908152600a6020526040902054811115610bac5760405162461bcd60e51b815260206004820152603460248201527f59617953746f6e65546f6b656e3a20496e73756666696369656e742072657175604482015273195cdd1959081d5b9cdd185ad948185b5bdd5b9d60621b6064820152608401610913565b336000908152600a602052604081208054839290610bcb9084906122be565b9091555050600654604051634f80fbdd60e11b8152600481018390526001600160a01b0390911690639f01f7ba90602401600060405180830381600087803b158015610c1657600080fd5b505af1158015610c2a573d6000803e3d6000fd5b50505050610c3e610c383390565b8261192a565b337fe68319117b9cc0b77fab7aad87173e1661b5b23319fd32500222e3bbed7f1f0282610c696113d4565b6040805192835260208301919091520160405180910390a250565b610c8d336108a7565b60008111610cf55760405162461bcd60e51b815260206004820152602f60248201527f59617953746f6e65546f6b656e3a20416d6f756e74206d75737420626520677260448201526e6561746572207468616e207a65726f60881b6064820152608401610913565b6000610d00336104ca565b905081811015610d675760405162461bcd60e51b815260206004820152602c60248201527f59617953746f6e65546f6b656e3a20496e73756666696369656e74205961795360448201526b746f6e652062616c616e636560a01b6064820152608401610913565b610d713383611817565b6007546001600160a01b031663a9059cbb336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018590526044016020604051808303816000875af1158015610dd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df491906122e1565b5060405182815233907f78cc3f1b524ee1f4a955ca9e55b1ff42dfa6545b39e742941c069a476b95f4f190602001610a3a565b6001600160a01b0381166000908152600a60205260409020805415801590610e575750610e578160010154610f4f565b15610f4b5760065460018201546040516387153eb160e01b815260048101919091526000916001600160a01b0316906387153eb190602401602060405180830381865afa158015610eac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed09190612209565b90506000670de0b6b3a7640000828460000154610eed9190612238565b610ef7919061224f565b6001600160a01b038516600090815260096020526040812080549293508392909190610f249084906122ab565b9091555050506001600160a01b0383166000908152600a6020526040812081815560010155505b5050565b600081600660009054906101000a90046001600160a01b03166001600160a01b031663f76339dc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc99190612209565b1192915050565b60065460408051631453cabb60e11b815290516000926001600160a01b0316916328a79576916004808301926020929190829003018187875af115801561101b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103f9190612209565b905090565b600034116110a95760405162461bcd60e51b815260206004820152602c60248201527f59617953746f6e65546f6b656e3a20416d6f756e74206d75737420626520677260448201526b06561746572207468616e20360a41b6064820152608401610913565b6000346110b46106e2565b6110be91906122ab565b90506008548111156111215760405162461bcd60e51b815260206004820152602660248201527f59617953746f6e65546f6b656e3a2045786365656473206d6178207374616b65604482015265081b1a5b5a5d60d21b6064820152608401610913565b6000600660009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b815260040160206040518083038185885af1158015611178573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061119d9190612209565b90506111a833610c38565b336000908152600b6020526040812080543492906111c79084906122ab565b909155503390507fd99bd338b277023efe466d3738ae8fae5db3fc172017ef86430fc9bc8988f1da34836111f96113d4565b8760405161120a94939291906122fc565b60405180910390a2505050565b611220336108a7565b60088190556040518181527f1bb889c4bd0d0669d0702649c7c7fafab675399437fb55b8edfcbd8513436714906020015b60405180910390a150565b611265336108a7565b6007546001600160a01b03908116908216036112d55760405162461bcd60e51b815260206004820152602960248201527f59617953746f6e65546f6b656e3a2043616e6e6f7420776974686472617720536044820152683a37b732aa37b5b2b760b91b6064820152608401610913565b610f4b8282611960565b6006546040805163ea99e68960e01b815290516000926001600160a01b03169163ea99e6899160048083019260209291908290030181865afa15801561101b573d6000803e3d6000fd5b60055433906001600160a01b031681146113605760405162d1953b60e31b81526001600160a01b0382166004820152602401610913565b816001600160a01b03163b600003611396576040516361798f2f60e11b81526001600160a01b0383166004820152602401610913565b610f4b82611a31565b600554600090600160a01b900460ff166113b95750600090565b50638fb3603760e01b90565b60606004805461080590612271565b60065460408051633dd8ce7760e21b815290516000926001600160a01b03169163f76339dc9160048083019260209291908290030181865afa15801561101b573d6000803e3d6000fd5b6000336108968185856118cb565b80611436336104ca565b10156114406113c5565b6040516020016114509190612321565b6040516020818303038152906040529061147d5760405162461bcd60e51b81526004016109139190612024565b5061148733610e27565b336000908152600960205260409020548211156114f65760405162461bcd60e51b815260206004820152602760248201527f59617953746f6e65546f6b656e3a20496e73756666696369656e74204554482060448201526662616c616e636560c81b6064820152608401610913565b6114ff3361092a565b336000908152600960205260408120805484929061151e9084906122be565b909155505060065460405163b18f2e9160e01b815260048101849052602481018390526000916001600160a01b03169063b18f2e91906044016020604051808303816000875af1158015611576573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159a9190612209565b90506115a63382611a7f565b336000908152600c6020526040812080548392906115c59084906122ab565b909155503390507fdcfd2b4017d03f7e541021db793b2f9b31e4acdee005f789e52853c390e3e9628285856115f86113d4565b60408051948552602085019390935291830152606082015260800161120a565b60075460065460405163095ea7b360e01b81526001600160a01b0391821660048201526000196024820181905292919091169063095ea7b3906044016020604051808303816000875af1158015611673573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4b91906122e1565b6006546040516387153eb160e01b8152600481018390526000916001600160a01b0316906387153eb190602401602060405180830381865afa1580156116e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089c9190612209565b6117128383836001611b16565b505050565b60008061174d61172f6005546001600160a01b031690565b863061173f60046000898b612378565b611748916123a2565b611beb565b91509150816118105763ffffffff8116156117ed576005805460ff60a01b198116600160a01b17909155604051634a63ebf760e11b81526001600160a01b03909116906394c7d7ee906117a8908890889088906004016123d2565b600060405180830381600087803b1580156117c257600080fd5b505af11580156117d6573d6000803e3d6000fd5b50506005805460ff60a01b19169055506118109050565b60405162d1953b60e31b81526001600160a01b0386166004820152602401610913565b5050505050565b6001600160a01b03821661184157604051634b637e8f60e11b815260006004820152602401610913565b610f4b82600083611cf7565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146118c557818110156118b657604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610913565b6118c584848484036000611b16565b50505050565b6001600160a01b0383166118f557604051634b637e8f60e11b815260006004820152602401610913565b6001600160a01b03821661191f5760405163ec442f0560e01b815260006004820152602401610913565b611712838383611cf7565b6001600160a01b0382166119545760405163ec442f0560e01b815260006004820152602401610913565b610f4b60008383611cf7565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156119a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cb9190612209565b90506119e16001600160a01b0383168483611e21565b604080516001600160a01b038085168252851660208201529081018290527fda0612d7ca9ff90ca7143a6021ba8938994f8d045b2834ae585fd07b27ea697c9060600160405180910390a1505050565b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad90602001611251565b80471015611aa25760405163cd78605960e01b8152306004820152602401610913565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611aef576040519150601f19603f3d011682016040523d82523d6000602084013e611af4565b606091505b505090508061171257604051630a12f52160e11b815260040160405180910390fd5b6001600160a01b038416611b405760405163e602df0560e01b815260006004820152602401610913565b6001600160a01b038316611b6a57604051634a1406b160e11b815260006004820152602401610913565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156118c557826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611bdd91815260200190565b60405180910390a350505050565b6040516001600160a01b03848116602483015283811660448301526001600160e01b03198316606483015260009182918291829189169060840160408051601f198184030181529181526020820180516001600160e01b031663b700961360e01b17905251611c5a9190612412565b600060405180830381855afa9150503d8060008114611c95576040519150601f19603f3d011682016040523d82523d6000602084013e611c9a565b606091505b50915091508115611cec576040815110611ccc5780806020019051810190611cc2919061242e565b9094509250611cec565b6020815110611cec5780806020019051810190611ce991906122e1565b93505b505094509492505050565b6001600160a01b038316611d22578060026000828254611d1791906122ab565b90915550611d949050565b6001600160a01b03831660009081526020819052604090205481811015611d755760405163391434e360e21b81526001600160a01b03851660048201526024810182905260448101839052606401610913565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216611db057600280548290039055611dcf565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e1491815260200190565b60405180910390a3505050565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092019092526020810180516001600160e01b031663a9059cbb60e01b17905261171291859190600090611e7f90841683611ecd565b90508051600014158015611ea4575080806020019051810190611ea291906122e1565b155b1561171257604051635274afe760e01b81526001600160a01b0384166004820152602401610913565b6060610a658383600084600080856001600160a01b03168486604051611ef39190612412565b60006040518083038185875af1925050503d8060008114611f30576040519150601f19603f3d011682016040523d82523d6000602084013e611f35565b606091505b5091509150611f45868383611f4f565b9695505050505050565b606082611f6457611f5f82611fab565b610a65565b8151158015611f7b57506001600160a01b0384163b155b15611fa457604051639996b31560e01b81526001600160a01b0385166004820152602401610913565b5080610a65565b805115611fbb5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60005b83811015611fef578181015183820152602001611fd7565b50506000910152565b60008151808452612010816020860160208601611fd4565b601f01601f19169290920160200192915050565b602081526000610a656020830184611ff8565b80356001600160a01b038116811461204e57600080fd5b919050565b6000806040838503121561206657600080fd5b61206f83612037565b946020939093013593505050565b60006020828403121561208f57600080fd5b610a6582612037565b6000602082840312156120aa57600080fd5b5035919050565b6000806000606084860312156120c657600080fd5b6120cf84612037565b92506120dd60208501612037565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561211557600080fd5b813567ffffffffffffffff8082111561212d57600080fd5b818401915084601f83011261214157600080fd5b813581811115612153576121536120ed565b604051601f8201601f19908116603f0116810190838211818310171561217b5761217b6120ed565b8160405282815287602084870101111561219457600080fd5b826020860160208301376000928101602001929092525095945050505050565b600080604083850312156121c757600080fd5b6121d083612037565b91506121de60208401612037565b90509250929050565b600080604083850312156121fa57600080fd5b50508035926020909101359150565b60006020828403121561221b57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761089c5761089c612222565b60008261226c57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061228557607f821691505b6020821081036122a557634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111561089c5761089c612222565b8181038181111561089c5761089c612222565b8051801515811461204e57600080fd5b6000602082840312156122f357600080fd5b610a65826122d1565b848152836020820152826040820152608060608201526000611f456080830184611ff8565b7f59617953746f6e65546f6b656e3a20496e73756666696369656e74200000000081526000825161235981601c850160208701611fd4565b672062616c616e636560c01b601c939091019283015250602401919050565b6000808585111561238857600080fd5b8386111561239557600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156123ca5780818660040360031b1b83161692505b505092915050565b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b60008251612424818460208701611fd4565b9190910192915050565b6000806040838503121561244157600080fd5b61244a836122d1565b9150602083015163ffffffff8116811461246357600080fd5b80915050925092905056fea2646970667358221220777c6cdd77f582fc92049a540b949efd7a89ab61e3fd73afd9caa1d736c85bf464736f6c6343000817003300000000000000000000000054e86315c03217b76a7466c302245fd10ebef25a00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000a62f9c5af106feee069f38de51098d9d81b905720000000000000000000000007122985656e38bdc0302db86685bb972b145bd3c00000000000000000000000000000000000000000000003635c9adc5dea000000000000000000000000000000000000000000000000000000000000000000014596179205374616b6553746f6e65204574686572000000000000000000000000000000000000000000000000000000000000000000000000000000000000000879617953544f4e45000000000000000000000000000000000000000000000000