[ { "inputs": [ { "components": [ { "internalType": "address", "name": "defaultAdmin", "type": "address" }, { "internalType": "address", "name": "supplyRecipient", "type": "address" }, { "internalType": "uint256", "name": "totalSupply", "type": "uint256" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" } ], "internalType": "struct WaifuToken.BaseParameters", "name": "baseParams", "type": "tuple" }, { "components": [ { "internalType": "uint256", "name": "projectBuyTaxBasisPoints", "type": "uint256" }, { "internalType": "uint256", "name": "projectSellTaxBasisPoints", "type": "uint256" }, { "internalType": "address", "name": "projectTaxRecipient", "type": "address" } ], "internalType": "struct WaifuToken.ERC20TaxParameters", "name": "taxParams", "type": "tuple" }, { "components": [ { "internalType": "address", "name": "BlastPointsAddress", "type": "address" }, { "internalType": "address", "name": "_pointsOperator", "type": "address" } ], "internalType": "struct WaifuToken.BlastPointParams", "name": "blastParams", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "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": [], "name": "CannotWithdrawThisToken", "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": [], "name": "LiquidityPoolCannotBeAddressZero", "type": "error" }, { "inputs": [], "name": "LiquidityPoolMustBeAContractAddress", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [], "name": "TransferAmountExceedsBalance", "type": "error" }, { "inputs": [], "name": "TransferFailed", "type": "error" }, { "inputs": [], "name": "TransferFromZeroAddress", "type": "error" }, { "inputs": [], "name": "TransferToZeroAddress", "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": "addedPool", "type": "address" } ], "name": "LiquidityPoolAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "removedPool", "type": "address" } ], "name": "LiquidityPoolRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldBuyBasisPoints", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newBuyBasisPoints", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "oldSellBasisPoints", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newSellBasisPoints", "type": "uint256" } ], "name": "ProjectTaxBasisPointsChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "treasury", "type": "address" } ], "name": "ProjectTaxRecipientUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "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" }, { "stateMutability": "nonpayable", "type": "fallback" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newLiquidityPool_", "type": "address" } ], "name": "addLiquidityPool", "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": "uint256", "name": "value", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "distributeTaxTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "queryAddress_", "type": "address" } ], "name": "isLiquidityPool", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "projectBuyTaxBasisPoints", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "projectSellTaxBasisPoints", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "projectTaxPendingSwap", "outputs": [ { "internalType": "uint128", "name": "", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "projectTaxRecipient", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "removedLiquidityPool_", "type": "address" } ], "name": "removeLiquidityPool", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "callerConfirmation", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "newProjectBuyTaxBasisPoints_", "type": "uint16" }, { "internalType": "uint16", "name": "newProjectSellTaxBasisPoints_", "type": "uint16" } ], "name": "setProjectTaxRates", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "projectTaxRecipient_", "type": "address" } ], "name": "setProjectTaxRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalBuyTaxBasisPoints", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSellTaxBasisPoints", "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": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token_", "type": "address" }, { "internalType": "uint256", "name": "amount_", "type": "uint256" } ], "name": "withdrawERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b5060405162002099380380620020998339810160408190526200003491620005c6565b6060830151608084015160036200004c838262000749565b5060046200005b828262000749565b50505060208301516200008d90620000766012600a62000928565b856040015162000087919062000940565b62000151565b82516200009d9060009062000193565b50620000a98262000246565b6008805460408581015164ffffffff01600160c81b0319909216931515600160281b600160c81b03191693909317650100000000006001600160a01b0392831602179091558251602084015192516336b91f2b60e01b8152928216600484015216906336b91f2b90602401600060405180830381600087803b1580156200012f57600080fd5b505af115801562000144573d6000803e3d6000fd5b5050505050505062000970565b6001600160a01b038216620001815760405163ec442f0560e01b8152600060048201526024015b60405180910390fd5b6200018f60008383620002ad565b5050565b60008281526005602090815260408083206001600160a01b038516845290915281205460ff166200023c5760008381526005602090815260408083206001600160a01b03861684529091529020805460ff19166001179055620001f33390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000240565b5060005b92915050565b80516000901580156200025b57506020820151155b156200026957506000919050565b5080516008805460209093015161ffff90811663010000000264ffff0000001991909316610100021664ffffffff001990931692909217179055600190565b919050565b6001600160a01b038316620002dc578060026000828254620002d091906200095a565b90915550620003509050565b6001600160a01b03831660009081526020819052604090205481811015620003315760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640162000178565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166200036e576002805482900390556200038d565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003d391815260200190565b60405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156200041b576200041b620003e0565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200044c576200044c620003e0565b604052919050565b80516001600160a01b0381168114620002a857600080fd5b600082601f8301126200047e57600080fd5b81516001600160401b038111156200049a576200049a620003e0565b6020620004b0601f8301601f1916820162000421565b8281528582848701011115620004c557600080fd5b60005b83811015620004e5578581018301518282018401528201620004c8565b506000928101909101919091529392505050565b6000606082840312156200050c57600080fd5b604051606081016001600160401b0381118282101715620005315762000531620003e0565b80604052508091508251815260208301516020820152620005556040840162000454565b60408201525092915050565b6000604082840312156200057457600080fd5b604080519081016001600160401b0381118282101715620005995762000599620003e0565b604052905080620005aa8362000454565b8152620005ba6020840162000454565b60208201525092915050565b600080600060c08486031215620005dc57600080fd5b83516001600160401b0380821115620005f457600080fd5b9085019060a082880312156200060957600080fd5b62000613620003f6565b6200061e8362000454565b81526200062e6020840162000454565b6020820152604083015160408201526060830151828111156200065057600080fd5b6200065e898286016200046c565b6060830152506080830151828111156200067757600080fd5b62000685898286016200046c565b608083015250809550505050620006a08560208601620004f9565b9150620006b1856080860162000561565b90509250925092565b600181811c90821680620006cf57607f821691505b602082108103620006f057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200074457600081815260208120601f850160051c810160208610156200071f5750805b601f850160051c820191505b8181101562000740578281556001016200072b565b5050505b505050565b81516001600160401b03811115620007655762000765620003e0565b6200077d81620007768454620006ba565b84620006f6565b602080601f831160018114620007b557600084156200079c5750858301515b600019600386901b1c1916600185901b17855562000740565b600085815260208120601f198616915b82811015620007e657888601518255948401946001909101908401620007c5565b5085821015620008055787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200086c57816000190482111562000850576200085062000815565b808516156200085e57918102915b93841c939080029062000830565b509250929050565b600082620008855750600162000240565b81620008945750600062000240565b8160018114620008ad5760028114620008b857620008d8565b600191505062000240565b60ff841115620008cc57620008cc62000815565b50506001821b62000240565b5060208310610133831016604e8410600b8410161715620008fd575081810a62000240565b6200090983836200082b565b806000190482111562000920576200092062000815565b029392505050565b60006200093960ff84168362000874565b9392505050565b808202811582820484141762000240576200024062000815565b8082018082111562000240576200024062000815565b61171980620009806000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806395d89b4111610104578063b0d75097116100a2578063e85455d711610071578063e85455d714610471578063ea8b242414610484578063ee6a934c146104b8578063eeae0f97146104cb576101da565b8063b0d75097146103e5578063b2c5c9eb14610410578063d547741f14610425578063dd62ed3e14610438576101da565b8063a217fddf116100de578063a217fddf14610391578063a45cae0214610399578063a9059cbb146103bf578063ae22107f146103d2576101da565b806395d89b41146103635780639808751d1461036b578063a1db97821461037e576101da565b80632ead09551161017c57806342966c681161014b57806342966c681461030157806370a082311461031457806391d148541461033d578063936b293414610350576101da565b80632ead0955146102c25780632f2ff15d146102cc578063313ce567146102df57806336568abe146102ee576101da565b8063095ea7b3116101b8578063095ea7b31461027157806318160ddd1461028457806323b872dd1461028c578063248a9ca31461029f576101da565b806301ffc9a714610217578063038272b61461023f57806306fdde031461025c575b60405162461bcd60e51b815260206004820152600d60248201526c139bdd081cdd5c1c1bdc9d1959609a1b60448201526064015b60405180910390fd5b61022a61022536600461143a565b6104dc565b60405190151581526020015b60405180910390f35b6008546301000000900461ffff165b604051908152602001610236565b610264610513565b6040516102369190611488565b61022a61027f3660046114d7565b6105a5565b60025461024e565b61022a61029a366004611501565b6105bd565b61024e6102ad36600461153d565b60009081526005602052604090206001015490565b6102ca6105fb565b005b6102ca6102da366004611556565b610651565b60405160128152602001610236565b6102ca6102fc366004611556565b61067c565b6102ca61030f36600461153d565b6106b4565b61024e610322366004611582565b6001600160a01b031660009081526020819052604090205490565b61022a61034b366004611556565b6106be565b6102ca61035e3660046115af565b6106e9565b61026461088c565b6102ca610379366004611582565b61089b565b6102ca61038c3660046114d7565b61090c565b61024e600081565b6008546103ac90610100900461ffff1681565b60405161ffff9091168152602001610236565b61022a6103cd3660046114d7565b61094b565b6102ca6103e0366004611582565b61095d565b6009546103f8906001600160801b031681565b6040516001600160801b039091168152602001610236565b6008546103ac906301000000900461ffff1681565b6102ca610433366004611556565b6109ad565b61024e6104463660046115d9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61022a61047f366004611582565b6109d2565b6008546104a0906501000000000090046001600160a01b031681565b6040516001600160a01b039091168152602001610236565b6102ca6104c6366004611582565b6109df565b600854610100900461ffff1661024e565b60006001600160e01b03198216637965db0b60e01b148061050d57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606003805461052290611603565b80601f016020809104026020016040519081016040528092919081815260200182805461054e90611603565b801561059b5780601f106105705761010080835404028352916020019161059b565b820191906000526020600020905b81548152906001019060200180831161057e57829003601f168201915b5050505050905090565b6000336105b3818585610a6f565b5060019392505050565b6000336105cb858285610a7c565b6105ee8585856105da896109d2565b806105e957506105e9886109d2565b610af4565b60019150505b9392505050565b6009546001600160801b03161561064f57600980546001600160801b031981169091556008546001600160801b039091169061064d9030906501000000000090046001600160a01b0316836000610af4565b505b565b60008281526005602052604090206001015461066c81610bb0565b6106768383610bba565b50505050565b6001600160a01b03811633146106a55760405163334bd91960e11b815260040160405180910390fd5b6106af8282610c4e565b505050565b61064d3382610cbb565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006106f481610bb0565b6127108361ffff161061075e5760405162461bcd60e51b815260206004820152602c60248201527f4275792074617820626173697320706f696e7473206d757374206265206c657360448201526b073207468616e2031303030360a41b606482015260840161020e565b6127108261ffff16106107c95760405162461bcd60e51b815260206004820152602d60248201527f53656c6c2074617820626173697320706f696e7473206d757374206265206c6560448201526c07373207468616e20313030303609c1b606482015260840161020e565b60085461ffff61010082048116916301000000900481169085161515806107f4575060008461ffff16115b6008805462ffffff191691151562ffff0019169190911761010061ffff8881169182029290921764ffff000000191663010000008884169081029190911790935560408051868416815260208101929092529184169181019190915260608101919091527f8da1f77a22734510b762a9625e69e737d7c0cc48984e810e5802fb341eb80a3e9060800160405180910390a15050505050565b60606004805461052290611603565b60006108a681610bb0565b6008805465010000000000600160c81b031916650100000000006001600160a01b038516908102919091179091556040519081527fa4eea51cd2f21eac6612ba054a363ae2fd59698fc258ab414313cd73f69f2b85906020015b60405180910390a15050565b600061091781610bb0565b306001600160a01b038416036109375761093763992501b360e01b610cf5565b6106af6001600160a01b0384163384610cff565b6000336105b38185856105da836109d2565b600061096881610bb0565b610973600683610d51565b506040516001600160a01b03831681527f59c3fbcae88f30e9b0e35c132a7f68c53231dffa4722f197c7ecb0ee013eee6090602001610900565b6000828152600560205260409020600101546109c881610bb0565b6106768383610c4e565b600061050d600683610d66565b60006109ea81610bb0565b6001600160a01b038216610a0857610a0863b47cdee560e01b610cf5565b816001600160a01b03163b600003610a2a57610a2a630f9da0c760e41b610cf5565b610a35600683610d88565b506040516001600160a01b03831681527fb893f883ef734b712208a877459424ee509832c57e0461fb1ac99ed4d42f2d8990602001610900565b6106af8383836001610d9d565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146106765781811015610ae557604051637dc7a0d960e11b81526001600160a01b0384166004820152602481018290526044810183905260640161020e565b61067684848484036000610d9d565b6000610b01858585610e72565b90506000610b1183868887610ee2565b9050610b3d86610b218685611653565b6001600160a01b03909116600090815260208190526040902055565b6001600160a01b0385166000908152602081905260409020805482019055846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ba091815260200190565b60405180910390a3505050505050565b61064d8133611033565b6000610bc683836106be565b610c465760008381526005602090815260408083206001600160a01b03861684529091529020805460ff19166001179055610bfe3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161050d565b50600061050d565b6000610c5a83836106be565b15610c465760008381526005602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161050d565b6001600160a01b038216610ce557604051634b637e8f60e11b81526000600482015260240161020e565b610cf18260008361106c565b5050565b8060005260046000fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526106af908490611196565b60006105f4836001600160a01b0384166111f9565b6001600160a01b038116600090815260018301602052604081205415156105f4565b60006105f4836001600160a01b0384166112ec565b6001600160a01b038416610dc75760405163e602df0560e01b81526000600482015260240161020e565b6001600160a01b038316610df157604051634a1406b160e11b81526000600482015260240161020e565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561067657826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610e6491815260200190565b60405180910390a350505050565b60006001600160a01b038416610e9257610e92630b07e54560e11b610cf5565b6001600160a01b038316610eb057610eb0633a954ecd60e21b610cf5565b506001600160a01b038316600090815260208190526040902054818110156105f4576105f4635dd58b8b60e01b610cf5565b600854819060ff168015610ef35750845b1561102b576000610f03856109d2565b8015610f1d57506008546000906301000000900461ffff16115b15610f6557600854600980546001600160801b0380821661271061ffff630100000090960495909516880294909404938401166001600160801b031990911617905501610fc8565b610f6e846109d2565b8015610f865750600854600090610100900461ffff16115b15610fc857600854600980546001600160801b0380821661271061ffff61010090960495909516880294909404938401166001600160801b0319909116179055015b80156110295730600090815260208190526040902080548201905560405181815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a380820391505b505b949350505050565b61103d82826106be565b610cf15760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161020e565b6001600160a01b03831661109757806002600082825461108c9190611666565b909155506111099050565b6001600160a01b038316600090815260208190526040902054818110156110ea5760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161020e565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661112557600280548290039055611144565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161118991815260200190565b60405180910390a3505050565b60006111ab6001600160a01b03841683611333565b905080516000141580156111d05750808060200190518101906111ce9190611679565b155b156106af57604051635274afe760e01b81526001600160a01b038416600482015260240161020e565b600081815260018301602052604081205480156112e257600061121d600183611653565b855490915060009061123190600190611653565b90508082146112965760008660000182815481106112515761125161169b565b90600052602060002001549050808760000184815481106112745761127461169b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806112a7576112a76116b1565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061050d565b600091505061050d565b6000818152600183016020526040812054610c465750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561050d565b60606105f48383600084600080856001600160a01b0316848660405161135991906116c7565b60006040518083038185875af1925050503d8060008114611396576040519150601f19603f3d011682016040523d82523d6000602084013e61139b565b606091505b50915091506113ab8683836113b5565b9695505050505050565b6060826113ca576113c582611411565b6105f4565b81511580156113e157506001600160a01b0384163b155b1561140a57604051639996b31560e01b81526001600160a01b038516600482015260240161020e565b50806105f4565b8051156114215780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60006020828403121561144c57600080fd5b81356001600160e01b0319811681146105f457600080fd5b60005b8381101561147f578181015183820152602001611467565b50506000910152565b60208152600082518060208401526114a7816040850160208701611464565b601f01601f19169190910160400192915050565b80356001600160a01b03811681146114d257600080fd5b919050565b600080604083850312156114ea57600080fd5b6114f3836114bb565b946020939093013593505050565b60008060006060848603121561151657600080fd5b61151f846114bb565b925061152d602085016114bb565b9150604084013590509250925092565b60006020828403121561154f57600080fd5b5035919050565b6000806040838503121561156957600080fd5b82359150611579602084016114bb565b90509250929050565b60006020828403121561159457600080fd5b6105f4826114bb565b803561ffff811681146114d257600080fd5b600080604083850312156115c257600080fd5b6115cb8361159d565b91506115796020840161159d565b600080604083850312156115ec57600080fd5b6115f5836114bb565b9150611579602084016114bb565b600181811c9082168061161757607f821691505b60208210810361163757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561050d5761050d61163d565b8082018082111561050d5761050d61163d565b60006020828403121561168b57600080fd5b815180151581146105f457600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600082516116d9818460208701611464565b919091019291505056fea26469706673582212206d64771297c7ad8aab902a760c6d8e8ef4eeab5a6244a50b2fc28808739ab65864736f6c6343000814003300000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001f400000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000dba4be816a4037ab2ead2c8cfdd3085d3e68aecb0000000000000000000000002fc95838c71e76ec69ff817983bff17c710f34e000000000000000000000000024a7d47af3f4c31e171103ea8a8744a41c30723800000000000000000000000021aa4886231c83b1b6d88864b39ac2840d5651a7000000000000000000000000dba4be816a4037ab2ead2c8cfdd3085d3e68aecb000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000005574149465500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000062457414946550000000000000000000000000000000000000000000000000000