diff --git a/abi/contracts/ERC20Safe/ERC20Safe.abi.json b/abi/contracts/ERC20Safe/ERC20Safe.abi.json index 135487b..8d012bd 100644 --- a/abi/contracts/ERC20Safe/ERC20Safe.abi.json +++ b/abi/contracts/ERC20Safe/ERC20Safe.abi.json @@ -81,13 +81,13 @@ { "indexed": false, "internalType": "uint112", - "name": "depositNonce", + "name": "batchId", "type": "uint112" }, { "indexed": false, "internalType": "uint112", - "name": "batchId", + "name": "depositNonce", "type": "uint112" } ], @@ -111,9 +111,9 @@ }, { "indexed": false, - "internalType": "string", + "internalType": "bytes", "name": "callData", - "type": "string" + "type": "bytes" } ], "name": "ERC20SCDeposit", @@ -353,9 +353,9 @@ "type": "bytes32" }, { - "internalType": "string", + "internalType": "bytes", "name": "callData", - "type": "string" + "type": "bytes" } ], "name": "depositWithSCExecution", diff --git a/abi/contracts/ERC20Safe/ERC20Safe.go b/abi/contracts/ERC20Safe/ERC20Safe.go index 51d8ac8..70733b6 100644 --- a/abi/contracts/ERC20Safe/ERC20Safe.go +++ b/abi/contracts/ERC20Safe/ERC20Safe.go @@ -49,7 +49,7 @@ type Deposit struct { // ERC20SafeMetaData contains all meta data concerning the ERC20Safe contract. var ERC20SafeMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"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\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminRoleTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousBridge\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newBridge\",\"type\":\"address\"}],\"name\":\"BridgeTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint112\",\"name\":\"depositNonce\",\"type\":\"uint112\"},{\"indexed\":false,\"internalType\":\"uint112\",\"name\":\"batchId\",\"type\":\"uint112\"}],\"name\":\"ERC20Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint112\",\"name\":\"batchId\",\"type\":\"uint112\"},{\"indexed\":false,\"internalType\":\"uint112\",\"name\":\"depositNonce\",\"type\":\"uint112\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"callData\",\"type\":\"string\"}],\"name\":\"ERC20SCDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isPause\",\"type\":\"bool\"}],\"name\":\"Pause\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchBlockLimit\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"batchDeposits\",\"outputs\":[{\"internalType\":\"uint112\",\"name\":\"nonce\",\"type\":\"uint112\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"depositor\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"recipient\",\"type\":\"bytes32\"},{\"internalType\":\"enumDepositStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchSettleLimit\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchSize\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"batches\",\"outputs\":[{\"internalType\":\"uint112\",\"name\":\"nonce\",\"type\":\"uint112\"},{\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lastUpdatedBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"depositsCount\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchesCount\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"burnBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"recipientAddress\",\"type\":\"bytes32\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"recipientAddress\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"callData\",\"type\":\"string\"}],\"name\":\"depositWithSCExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositsCount\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchNonce\",\"type\":\"uint256\"}],\"name\":\"getBatch\",\"outputs\":[{\"components\":[{\"internalType\":\"uint112\",\"name\":\"nonce\",\"type\":\"uint112\"},{\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lastUpdatedBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"depositsCount\",\"type\":\"uint16\"}],\"internalType\":\"structBatch\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"isBatchFinal\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchNonce\",\"type\":\"uint256\"}],\"name\":\"getDeposits\",\"outputs\":[{\"components\":[{\"internalType\":\"uint112\",\"name\":\"nonce\",\"type\":\"uint112\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"depositor\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"recipient\",\"type\":\"bytes32\"},{\"internalType\":\"enumDepositStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"internalType\":\"structDeposit[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"internalType\":\"bool\",\"name\":\"areDepositsFinal\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenMaxLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenMinLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"initSupply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isAnyBatchInProgress\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isTokenWhitelisted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"mintBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"mintBurnTokens\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"nativeTokens\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"recoverLostFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"removeTokenFromWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"newBatchBlockLimit\",\"type\":\"uint8\"}],\"name\":\"setBatchBlockLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"newBatchSettleLimit\",\"type\":\"uint8\"}],\"name\":\"setBatchSettleLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"newBatchSize\",\"type\":\"uint16\"}],\"name\":\"setBatchSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newBridge\",\"type\":\"address\"}],\"name\":\"setBridge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"setTokenMaxLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"setTokenMinLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"tokenMaxLimits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"tokenMinLimits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"totalBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minimumAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumAmount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"mintBurn\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"native\",\"type\":\"bool\"}],\"name\":\"whitelistToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"whitelistedTokens\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"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\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminRoleTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousBridge\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newBridge\",\"type\":\"address\"}],\"name\":\"BridgeTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint112\",\"name\":\"batchId\",\"type\":\"uint112\"},{\"indexed\":false,\"internalType\":\"uint112\",\"name\":\"depositNonce\",\"type\":\"uint112\"}],\"name\":\"ERC20Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint112\",\"name\":\"batchId\",\"type\":\"uint112\"},{\"indexed\":false,\"internalType\":\"uint112\",\"name\":\"depositNonce\",\"type\":\"uint112\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"ERC20SCDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isPause\",\"type\":\"bool\"}],\"name\":\"Pause\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchBlockLimit\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"batchDeposits\",\"outputs\":[{\"internalType\":\"uint112\",\"name\":\"nonce\",\"type\":\"uint112\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"depositor\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"recipient\",\"type\":\"bytes32\"},{\"internalType\":\"enumDepositStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchSettleLimit\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchSize\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"batches\",\"outputs\":[{\"internalType\":\"uint112\",\"name\":\"nonce\",\"type\":\"uint112\"},{\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lastUpdatedBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"depositsCount\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchesCount\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"burnBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"recipientAddress\",\"type\":\"bytes32\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"recipientAddress\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"}],\"name\":\"depositWithSCExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositsCount\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchNonce\",\"type\":\"uint256\"}],\"name\":\"getBatch\",\"outputs\":[{\"components\":[{\"internalType\":\"uint112\",\"name\":\"nonce\",\"type\":\"uint112\"},{\"internalType\":\"uint64\",\"name\":\"blockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"lastUpdatedBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"depositsCount\",\"type\":\"uint16\"}],\"internalType\":\"structBatch\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"isBatchFinal\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchNonce\",\"type\":\"uint256\"}],\"name\":\"getDeposits\",\"outputs\":[{\"components\":[{\"internalType\":\"uint112\",\"name\":\"nonce\",\"type\":\"uint112\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"depositor\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"recipient\",\"type\":\"bytes32\"},{\"internalType\":\"enumDepositStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"internalType\":\"structDeposit[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"internalType\":\"bool\",\"name\":\"areDepositsFinal\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenMaxLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenMinLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"initSupply\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isAnyBatchInProgress\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isTokenWhitelisted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"mintBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"mintBurnTokens\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"nativeTokens\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"recoverLostFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"removeTokenFromWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"newBatchBlockLimit\",\"type\":\"uint8\"}],\"name\":\"setBatchBlockLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"newBatchSettleLimit\",\"type\":\"uint8\"}],\"name\":\"setBatchSettleLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"newBatchSize\",\"type\":\"uint16\"}],\"name\":\"setBatchSize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newBridge\",\"type\":\"address\"}],\"name\":\"setBridge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"setTokenMaxLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"setTokenMinLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"tokenMaxLimits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"tokenMinLimits\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"totalBalances\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minimumAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumAmount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"mintBurn\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"native\",\"type\":\"bool\"}],\"name\":\"whitelistToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"whitelistedTokens\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", } // ERC20SafeABI is the input ABI used to generate the binding from. @@ -1023,24 +1023,24 @@ func (_ERC20Safe *ERC20SafeTransactorSession) Deposit(tokenAddress common.Addres return _ERC20Safe.Contract.Deposit(&_ERC20Safe.TransactOpts, tokenAddress, amount, recipientAddress) } -// DepositWithSCExecution is a paid mutator transaction binding the contract method 0xcd7271c5. +// DepositWithSCExecution is a paid mutator transaction binding the contract method 0xc859b3fe. // -// Solidity: function depositWithSCExecution(address tokenAddress, uint256 amount, bytes32 recipientAddress, string callData) returns() -func (_ERC20Safe *ERC20SafeTransactor) DepositWithSCExecution(opts *bind.TransactOpts, tokenAddress common.Address, amount *big.Int, recipientAddress [32]byte, callData string) (*types.Transaction, error) { +// Solidity: function depositWithSCExecution(address tokenAddress, uint256 amount, bytes32 recipientAddress, bytes callData) returns() +func (_ERC20Safe *ERC20SafeTransactor) DepositWithSCExecution(opts *bind.TransactOpts, tokenAddress common.Address, amount *big.Int, recipientAddress [32]byte, callData []byte) (*types.Transaction, error) { return _ERC20Safe.contract.Transact(opts, "depositWithSCExecution", tokenAddress, amount, recipientAddress, callData) } -// DepositWithSCExecution is a paid mutator transaction binding the contract method 0xcd7271c5. +// DepositWithSCExecution is a paid mutator transaction binding the contract method 0xc859b3fe. // -// Solidity: function depositWithSCExecution(address tokenAddress, uint256 amount, bytes32 recipientAddress, string callData) returns() -func (_ERC20Safe *ERC20SafeSession) DepositWithSCExecution(tokenAddress common.Address, amount *big.Int, recipientAddress [32]byte, callData string) (*types.Transaction, error) { +// Solidity: function depositWithSCExecution(address tokenAddress, uint256 amount, bytes32 recipientAddress, bytes callData) returns() +func (_ERC20Safe *ERC20SafeSession) DepositWithSCExecution(tokenAddress common.Address, amount *big.Int, recipientAddress [32]byte, callData []byte) (*types.Transaction, error) { return _ERC20Safe.Contract.DepositWithSCExecution(&_ERC20Safe.TransactOpts, tokenAddress, amount, recipientAddress, callData) } -// DepositWithSCExecution is a paid mutator transaction binding the contract method 0xcd7271c5. +// DepositWithSCExecution is a paid mutator transaction binding the contract method 0xc859b3fe. // -// Solidity: function depositWithSCExecution(address tokenAddress, uint256 amount, bytes32 recipientAddress, string callData) returns() -func (_ERC20Safe *ERC20SafeTransactorSession) DepositWithSCExecution(tokenAddress common.Address, amount *big.Int, recipientAddress [32]byte, callData string) (*types.Transaction, error) { +// Solidity: function depositWithSCExecution(address tokenAddress, uint256 amount, bytes32 recipientAddress, bytes callData) returns() +func (_ERC20Safe *ERC20SafeTransactorSession) DepositWithSCExecution(tokenAddress common.Address, amount *big.Int, recipientAddress [32]byte, callData []byte) (*types.Transaction, error) { return _ERC20Safe.Contract.DepositWithSCExecution(&_ERC20Safe.TransactOpts, tokenAddress, amount, recipientAddress, callData) } @@ -1734,14 +1734,14 @@ func (it *ERC20SafeERC20DepositIterator) Close() error { // ERC20SafeERC20Deposit represents a ERC20Deposit event raised by the ERC20Safe contract. type ERC20SafeERC20Deposit struct { - DepositNonce *big.Int BatchId *big.Int + DepositNonce *big.Int Raw types.Log // Blockchain specific contextual infos } // FilterERC20Deposit is a free log retrieval operation binding the contract event 0x6c15ce44793c685a79cde26a0bd5419ef4f3a337991f156be7b365962001b4a7. // -// Solidity: event ERC20Deposit(uint112 depositNonce, uint112 batchId) +// Solidity: event ERC20Deposit(uint112 batchId, uint112 depositNonce) func (_ERC20Safe *ERC20SafeFilterer) FilterERC20Deposit(opts *bind.FilterOpts) (*ERC20SafeERC20DepositIterator, error) { logs, sub, err := _ERC20Safe.contract.FilterLogs(opts, "ERC20Deposit") @@ -1753,7 +1753,7 @@ func (_ERC20Safe *ERC20SafeFilterer) FilterERC20Deposit(opts *bind.FilterOpts) ( // WatchERC20Deposit is a free log subscription operation binding the contract event 0x6c15ce44793c685a79cde26a0bd5419ef4f3a337991f156be7b365962001b4a7. // -// Solidity: event ERC20Deposit(uint112 depositNonce, uint112 batchId) +// Solidity: event ERC20Deposit(uint112 batchId, uint112 depositNonce) func (_ERC20Safe *ERC20SafeFilterer) WatchERC20Deposit(opts *bind.WatchOpts, sink chan<- *ERC20SafeERC20Deposit) (event.Subscription, error) { logs, sub, err := _ERC20Safe.contract.WatchLogs(opts, "ERC20Deposit") @@ -1790,7 +1790,7 @@ func (_ERC20Safe *ERC20SafeFilterer) WatchERC20Deposit(opts *bind.WatchOpts, sin // ParseERC20Deposit is a log parse operation binding the contract event 0x6c15ce44793c685a79cde26a0bd5419ef4f3a337991f156be7b365962001b4a7. // -// Solidity: event ERC20Deposit(uint112 depositNonce, uint112 batchId) +// Solidity: event ERC20Deposit(uint112 batchId, uint112 depositNonce) func (_ERC20Safe *ERC20SafeFilterer) ParseERC20Deposit(log types.Log) (*ERC20SafeERC20Deposit, error) { event := new(ERC20SafeERC20Deposit) if err := _ERC20Safe.contract.UnpackLog(event, "ERC20Deposit", log); err != nil { @@ -1871,13 +1871,13 @@ func (it *ERC20SafeERC20SCDepositIterator) Close() error { type ERC20SafeERC20SCDeposit struct { BatchId *big.Int DepositNonce *big.Int - CallData string + CallData []byte Raw types.Log // Blockchain specific contextual infos } -// FilterERC20SCDeposit is a free log retrieval operation binding the contract event 0x527e633d8513f28e14b16d38843a6e5c1c9db79ecb610ef26e171e836f93d9a2. +// FilterERC20SCDeposit is a free log retrieval operation binding the contract event 0xce848da21487607afba5c5a500c2ad1002d9b8db97ca5512671309df071113b2. // -// Solidity: event ERC20SCDeposit(uint112 indexed batchId, uint112 depositNonce, string callData) +// Solidity: event ERC20SCDeposit(uint112 indexed batchId, uint112 depositNonce, bytes callData) func (_ERC20Safe *ERC20SafeFilterer) FilterERC20SCDeposit(opts *bind.FilterOpts, batchId []*big.Int) (*ERC20SafeERC20SCDepositIterator, error) { var batchIdRule []interface{} @@ -1892,9 +1892,9 @@ func (_ERC20Safe *ERC20SafeFilterer) FilterERC20SCDeposit(opts *bind.FilterOpts, return &ERC20SafeERC20SCDepositIterator{contract: _ERC20Safe.contract, event: "ERC20SCDeposit", logs: logs, sub: sub}, nil } -// WatchERC20SCDeposit is a free log subscription operation binding the contract event 0x527e633d8513f28e14b16d38843a6e5c1c9db79ecb610ef26e171e836f93d9a2. +// WatchERC20SCDeposit is a free log subscription operation binding the contract event 0xce848da21487607afba5c5a500c2ad1002d9b8db97ca5512671309df071113b2. // -// Solidity: event ERC20SCDeposit(uint112 indexed batchId, uint112 depositNonce, string callData) +// Solidity: event ERC20SCDeposit(uint112 indexed batchId, uint112 depositNonce, bytes callData) func (_ERC20Safe *ERC20SafeFilterer) WatchERC20SCDeposit(opts *bind.WatchOpts, sink chan<- *ERC20SafeERC20SCDeposit, batchId []*big.Int) (event.Subscription, error) { var batchIdRule []interface{} @@ -1934,9 +1934,9 @@ func (_ERC20Safe *ERC20SafeFilterer) WatchERC20SCDeposit(opts *bind.WatchOpts, s }), nil } -// ParseERC20SCDeposit is a log parse operation binding the contract event 0x527e633d8513f28e14b16d38843a6e5c1c9db79ecb610ef26e171e836f93d9a2. +// ParseERC20SCDeposit is a log parse operation binding the contract event 0xce848da21487607afba5c5a500c2ad1002d9b8db97ca5512671309df071113b2. // -// Solidity: event ERC20SCDeposit(uint112 indexed batchId, uint112 depositNonce, string callData) +// Solidity: event ERC20SCDeposit(uint112 indexed batchId, uint112 depositNonce, bytes callData) func (_ERC20Safe *ERC20SafeFilterer) ParseERC20SCDeposit(log types.Log) (*ERC20SafeERC20SCDeposit, error) { event := new(ERC20SafeERC20SCDeposit) if err := _ERC20Safe.contract.UnpackLog(event, "ERC20SCDeposit", log); err != nil { diff --git a/abi/contracts/ERC20Safe/ERC20Safe.hex b/abi/contracts/ERC20Safe/ERC20Safe.hex index d7dcd4b..35b8406 100644 --- a/abi/contracts/ERC20Safe/ERC20Safe.hex +++ b/abi/contracts/ERC20Safe/ERC20Safe.hex @@ -1 +1 @@ -0x60806040526002805463ffffffff60401b19166b2828000a000000000000000017905534801561002e57600080fd5b50600080546001600160a01b031916339081178255604051909182917fe379ac64de02d8184ca1a871ac486cb8137de77e485ede140e97057b9c765ffd908290a3506001805460ff60a01b1916600160a01b179055612b04806100926000396000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c80639ab7cfaa11610146578063cd7271c5116100c3578063e78cea9211610087578063e78cea92146106b6578063e8a70ee2146106db578063f2e0ec48146106ee578063f4daaba114610701578063f6246ea114610729578063f851a4401461074957600080fd5b8063cd7271c51461063a578063cf6682a21461064d578063d4673de91461066d578063daf9c21014610680578063dbba0f01146106a357600080fd5b8063b5af090f1161010a578063b5af090f14610582578063bc56602f146105ae578063c639651d146105ce578063c652a0b5146105ee578063c86726f61461061757600080fd5b80639ab7cfaa146104755780639f0ebb9314610489578063a7c3a06f146104c0578063aee9c872146104d3578063b32c4d8d146104f357600080fd5b806375829def116101d457806387ea09611161019857806387ea09611461040a5780638bad0c0a146104245780638dd148021461042c57806390e0cfcb1461043f578063920b03081461046257600080fd5b806375829def146103c1578063770be784146103d45780637d7763ce146103e757806382146138146103fa5780638456cb591461040257600080fd5b80633f4ba83a1161021b5780633f4ba83a146102f55780634013c89c146102fd5780634506e935146103105780635ac442821461033b5780635c975abb146103a357600080fd5b8063085c967f146102585780632325b5f71461028257806326b3293f146102a8578063284c0c44146102bd578063306275be146102e2575b600080fd5b61026b6102663660046125d1565b61075a565b604051610279929190612622565b60405180910390f35b60025461029690600160581b900460ff1681565b60405160ff9091168152602001610279565b6102bb6102b63660046126e8565b6108dd565b005b6102d06102cb36600461271b565b61098d565b6040516102799695949392919061273d565b6102bb6102f036600461278a565b6109fa565b6102bb610a54565b6102bb61030b3660046127a5565b610ad1565b600254610323906001600160401b031681565b6040516001600160401b039091168152602001610279565b61034e6103493660046125d1565b610d09565b6040805183516001600160701b031681526020808501516001600160401b039081169183019190915284830151169181019190915260609283015161ffff16928101929092521515608082015260a001610279565b600154600160a01b900460ff165b6040519015158152602001610279565b6102bb6103cf36600461278a565b610db6565b6102bb6103e236600461278a565b610eb1565b6102bb6103f53660046127a5565b610fc3565b6103b1611018565b6102bb6110f8565b60015461032390600160a81b90046001600160401b031681565b6102bb611174565b6102bb61043a36600461278a565b6111f7565b6103b161044d36600461278a565b60056020526000908152604090205460ff1681565b6102bb6104703660046127a5565b6113bc565b60025461029690600160501b900460ff1681565b6104b261049736600461278a565b6001600160a01b031660009081526007602052604090205490565b604051908152602001610279565b6102bb6104ce3660046127dd565b611411565b6104b26104e136600461278a565b60096020526000908152604090205481565b6105476105013660046125d1565b6003602052600090815260409020546001600160701b038116906001600160401b03600160701b8204811691600160b01b81049091169061ffff600160f01b9091041684565b604080516001600160701b039590951685526001600160401b039384166020860152919092169083015261ffff166060820152608001610279565b6103b161059036600461278a565b6001600160a01b031660009081526004602052604090205460ff1690565b6104b26105bc36600461278a565b600a6020526000908152604090205481565b6104b26105dc36600461278a565b60086020526000908152604090205481565b6104b26105fc36600461278a565b6001600160a01b031660009081526008602052604090205490565b6103b161062536600461278a565b60066020526000908152604090205460ff1681565b6102bb61064836600461283a565b611511565b6104b261065b36600461278a565b600b6020526000908152604090205481565b6102bb61067b3660046128cd565b6115c1565b6103b161068e36600461278a565b60046020526000908152604090205460ff1681565b6103b16106b13660046128f1565b61166c565b6001546001600160a01b03165b6040516001600160a01b039091168152602001610279565b6102bb6106e936600461292d565b611869565b6102bb6106fc36600461292d565b611948565b60025461071690600160401b900461ffff1681565b60405161ffff9091168152602001610279565b6104b261073736600461278a565b60076020526000908152604090205481565b6000546001600160a01b03166106c3565b606060008060038161076d600187612966565b815260208082019290925260409081016000908120825160808101845290546001600160701b0381168252600160701b81046001600160401b0390811695830195909552600160b01b810490941692810192909252600160f01b90920461ffff1660608201529150600c906107e3600187612966565b81526020019081526020016000206107fa82611af6565b81805480602002602001604051908101604052809291908181526020016000905b828210156108cd5760008481526020908190206040805160c0810182526006860290920180546001600160701b0316835260018101546001600160a01b0390811694840194909452600281015491830191909152600381015490921660608201526004808301546080830152600583015491929160a084019160ff909116908111156108a9576108a96125ea565b60048111156108ba576108ba6125ea565b815250508152602001906001019061081b565b5050505091509250925050915091565b600154600160a01b900460ff161561092f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064015b60405180910390fd5b60008061093d858585611b27565b604080516001600160701b038084168252841660208201529294509092507f6c15ce44793c685a79cde26a0bd5419ef4f3a337991f156be7b365962001b4a7910160405180910390a15050505050565b600c60205281600052604060002081815481106109a957600080fd5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160701b0390941696506001600160a01b039283169550909391169160ff1686565b33610a0d6000546001600160a01b031690565b6001600160a01b031614610a335760405162461bcd60e51b815260040161092690612979565b6001600160a01b03166000908152600460205260409020805460ff19169055565b33610a676000546001600160a01b031690565b6001600160a01b031614610a8d5760405162461bcd60e51b815260040161092690612979565b6001805460ff60a01b19169055604051600081527f9422424b175dda897495a07b091ef74a3ef715cf6d866fc972954c1c7f459304906020015b60405180910390a1565b33610ae46000546001600160a01b031690565b6001600160a01b031614610b0a5760405162461bcd60e51b815260040161092690612979565b6001600160a01b03821660009081526004602052604090205460ff16610b665760405162461bcd60e51b81526020600482015260116024820152702ab739bab83837b93a32b2103a37b5b2b760791b6044820152606401610926565b6001600160a01b03821660009081526005602052604090205460ff16610bcf576001600160a01b03821660009081526009602052604081208054839290610bae9084906129bc565b90915550829050610bca6001600160a01b03821633308561215b565b505050565b6001600160a01b03821660009081526006602052604090205460ff16610c75576001600160a01b0382166000908152600b6020526040902054610c139082906129bc565b6001600160a01b0383166000908152600a60205260409020541015610c755760405162461bcd60e51b81526020600482015260186024820152774e6f7420656e6f756768206d696e74656420746f6b656e7360401b6044820152606401610926565b6001600160a01b0382166000908152600b602052604081208054839290610c9d9084906129bc565b909155505060405163079cc67960e41b81523360048201526024810182905282906001600160a01b038216906379cc679090604401600060405180830381600087803b158015610cec57600080fd5b505af1158015610d00573d6000803e3d6000fd5b50505050505050565b60408051608081018252600080825260208201819052918101829052606081018290529080600381610d3c600187612966565b81526020808201929092526040908101600020815160808101835290546001600160701b0381168252600160701b81046001600160401b0390811694830194909452600160b01b810490931691810191909152600160f01b90910461ffff166060820152905080610dac81611af6565b9250925050915091565b33610dc96000546001600160a01b031690565b6001600160a01b031614610def5760405162461bcd60e51b815260040161092690612979565b6001600160a01b038116610e565760405162461bcd60e51b815260206004820152602860248201527f41646d696e526f6c653a206e65772061646d696e20697320746865207a65726f604482015267206164647265737360c01b6064820152608401610926565b600080546040516001600160a01b03808516939216917fe379ac64de02d8184ca1a871ac486cb8137de77e485ede140e97057b9c765ffd91a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b33610ec46000546001600160a01b031690565b6001600160a01b031614610eea5760405162461bcd60e51b815260040161092690612979565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5791906129cf565b6001600160a01b0384166000908152600460205260408120549192509060ff1615610fa6576001600160a01b038416600090815260096020526040902054610f9f9083612966565b9050610fa9565b50805b610fbd6001600160a01b03841633836121c2565b50505050565b33610fd66000546001600160a01b031690565b6001600160a01b031614610ffc5760405162461bcd60e51b815260040161092690612979565b6001600160a01b03909116600090815260086020526040902055565b600154600090600160a81b90046001600160401b0316810361103a5750600090565b60018054600091600391839161105f91600160a81b90046001600160401b03166129e8565b6001600160401b0390811682526020808301939093526040918201600020825160808101845290546001600160701b0381168252600160701b8104831694820194909452600160b01b840490911691810191909152600160f01b90910461ffff16606082015290506110cf6121f3565b6110db57600191505090565b6110e481611af6565b6110f057600191505090565b600091505090565b3361110b6000546001600160a01b031690565b6001600160a01b0316146111315760405162461bcd60e51b815260040161092690612979565b6001805460ff60a01b1916600160a01b1781556040519081527f9422424b175dda897495a07b091ef74a3ef715cf6d866fc972954c1c7f45930490602001610ac7565b336111876000546001600160a01b031690565b6001600160a01b0316146111ad5760405162461bcd60e51b815260040161092690612979565b600080546040516001600160a01b03909116907fe379ac64de02d8184ca1a871ac486cb8137de77e485ede140e97057b9c765ffd908390a3600080546001600160a01b0319169055565b3361120a6000546001600160a01b031690565b6001600160a01b0316146112305760405162461bcd60e51b815260040161092690612979565b6001600160a01b0381166112995760405162461bcd60e51b815260206004820152602a60248201527f427269646765526f6c653a206e65772062726964676520697320746865207a65604482015269726f206164647265737360b01b6064820152608401610926565b6001546001600160a01b03908116908216036112f75760405162461bcd60e51b815260206004820152601860248201527f427269646765526f6c653a2073616d65206164647265737300000000000000006044820152606401610926565b6001600160a01b0381163b6113605760405162461bcd60e51b815260206004820152602960248201527f427269646765526f6c653a206e657720627269646765206d75737420626520616044820152680818dbdb9d1c9858dd60ba1b6064820152608401610926565b6001546040516001600160a01b038084169216907fcca5fddab921a878ddbd4edb737a2cf3ac6df70864f108606647d1b37a5e07a090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b336113cf6000546001600160a01b031690565b6001600160a01b0316146113f55760405162461bcd60e51b815260040161092690612979565b6001600160a01b03909116600090815260076020526040902055565b336114246000546001600160a01b031690565b6001600160a01b03161461144a5760405162461bcd60e51b815260040161092690612979565b816114a657806114a65760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206e617469766520746f6b656e732063616e2062652073746f7265646044820152602160f81b6064820152608401610926565b6001600160a01b039490941660009081526004602090815260408083208054600160ff19918216179091556005835281842080548216951515959095179094556006825280832080549094169615159690961790925560078252848120939093556008905291902055565b600154600160a01b900460ff161561155e5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610926565b60008061156c878787611b27565b60405191935091506001600160701b038316907f527e633d8513f28e14b16d38843a6e5c1c9db79ecb610ef26e171e836f93d9a2906115b090849088908890612a0f565b60405180910390a250505050505050565b336115d46000546001600160a01b031690565b6001600160a01b0316146115fa5760405162461bcd60e51b815260040161092690612979565b606461ffff821611156116455760405162461bcd60e51b8152602060048201526013602482015272084c2e8c6d040e6d2f4ca40e8dede40d0d2ced606b1b6044820152606401610926565b6002805461ffff909216600160401b0269ffff000000000000000019909216919091179055565b6000336116816001546001600160a01b031690565b6001600160a01b0316146116e35760405162461bcd60e51b8152602060048201526024808201527f41636365737320436f6e74726f6c3a2073656e646572206973206e6f742042726044820152636964676560e01b6064820152608401610926565b6001600160a01b03841660009081526005602052604090205460ff166117655783600061171a6001600160a01b03831685876122d2565b90508061172c57600092505050611862565b6001600160a01b03861660009081526009602052604081208054879290611754908490612966565b909155506001935061186292505050565b6001600160a01b03841660009081526006602052604090205460ff1615611811576001600160a01b0384166000908152600a60205260409020546117aa9084906129bc565b6001600160a01b0385166000908152600b602052604090205410156118115760405162461bcd60e51b815260206004820152601860248201527f4e6f7420656e6f756768206275726e656420746f6b656e7300000000000000006044820152606401610926565b600061181e8584866123b9565b90508061182f576000915050611862565b6001600160a01b0385166000908152600a6020526040812080548692906118579084906129bc565b909155506001925050505b9392505050565b3361187c6000546001600160a01b031690565b6001600160a01b0316146118a25760405162461bcd60e51b815260040161092690612979565b60025460ff600160581b909104811690821611156119285760405162461bcd60e51b815260206004820152603760248201527f43616e6e6f7420696e63726561736520626174636820626c6f636b206c696d6960448201527f74206f76657220736574746c656d656e74206c696d69740000000000000000006064820152608401610926565b6002805460ff909216600160501b0260ff60501b19909216919091179055565b3361195b6000546001600160a01b031690565b6001600160a01b0316146119815760405162461bcd60e51b815260040161092690612979565b600154600160a01b900460ff166119d15760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610926565b6119d9611018565b15611a425760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f74206368616e6765206261746368536574746c654c696d697420776044820152726974682070656e64696e67206261746368657360681b6064820152608401610926565b60025460ff600160501b90910481169082161015611ad65760405162461bcd60e51b815260206004820152604560248201527f43616e6e6f74206465637265617365206261746368536574746c654c696d697460448201527f20756e646572207468652076616c7565206f6620626174636820626c6f636b206064820152641b1a5b5a5d60da1b608482015260a401610926565b6002805460ff909216600160581b0260ff60581b19909216919091179055565b60025460408201516000914391611b1791600160581b900460ff1690612a4e565b6001600160401b03161092915050565b6001600160a01b038316600090815260046020526040812054819060ff16611b855760405162461bcd60e51b81526020600482015260116024820152702ab739bab83837b93a32b2103a37b5b2b760791b6044820152606401610926565b6001600160a01b038516600090815260076020526040902054841015611c135760405162461bcd60e51b815260206004820152603c60248201527f547269656420746f206465706f73697420616e20616d6f756e742062656c6f7760448201527f20746865206d696e696d756d20737065636966696564206c696d6974000000006064820152608401610926565b6001600160a01b038516600090815260086020526040902054841115611ca15760405162461bcd60e51b815260206004820152603c60248201527f547269656420746f206465706f73697420616e20616d6f756e742061626f766560448201527f20746865206d6178696d756d20737065636966696564206c696d6974000000006064820152608401610926565b436000611cac6121f3565b15611d49575060018054600160a81b90046001600160401b0316600081815260036020526040902091611cdf9190612a4e565b81546001600160401b039182166001600160b01b031990911617600160701b8483160217825560018054600160a81b9004909116906015611d1f83612a6e565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050611d87565b60018054600391600091611d6d9190600160a81b90046001600160401b03166129e8565b6001600160401b0316815260200190815260200160002090505b600254600090611da1906001600160401b03166001612a4e565b6001600160401b03169050600c600060018060159054906101000a90046001600160401b0316611dd191906129e8565b6001600160401b031681526020019081526020016000206040518060c00160405280836001600160701b031681526020018a6001600160a01b03168152602001898152602001336001600160a01b0316815260200188815260200160016004811115611e3f57611e3f6125ea565b90528154600181810184556000938452602093849020835160069093020180546001600160701b039093166dffffffffffffffffffffffffffff199093169290921782559282015181840180546001600160a01b039283166001600160a01b031991821617909155604084015160028401556060840151600384018054919093169116179055608082015160048083019190915560a0830151600583018054949593949193909260ff19909216918490811115611efe57611efe6125ea565b021790555050825467ffffffffffffffff60b01b1916600160b01b6001600160401b0386160217808455600160f01b900461ffff16905082601e611f4183612a94565b825461ffff9182166101009390930a928302919092021990911617905550600280546001600160401b0316906000611f7883612a6e565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050611fbf886001600160a01b031660009081526005602052604090205460ff1690565b61200d576001600160a01b03881660009081526009602052604081208054899290611feb9084906129bc565b909155508890506120076001600160a01b03821633308b61215b565b50612144565b6001600160a01b03881660009081526006602052604090205460ff166120b3576001600160a01b0388166000908152600b60205260409020546120519088906129bc565b6001600160a01b0389166000908152600a602052604090205410156120b35760405162461bcd60e51b81526020600482015260186024820152774e6f7420656e6f756768206d696e74656420746f6b656e7360401b6044820152606401610926565b6001600160a01b0388166000908152600b6020526040812080548992906120db9084906129bc565b909155505060405163079cc67960e41b81523360048201526024810188905288906001600160a01b038216906379cc679090604401600060405180830381600087803b15801561212a57600080fd5b505af115801561213e573d6000803e3d6000fd5b50505050505b90546001600160701b031697909650945050505050565b6040516001600160a01b038481166024830152838116604483015260648201839052610fbd9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612431565b6040516001600160a01b03838116602483015260448201839052610bca91859182169063a9059cbb90606401612190565b600154600090600160a81b90046001600160401b031681036122155750600190565b60018054600091600391839161223a91600160a81b90046001600160401b03166129e8565b6001600160401b0390811682526020808301939093526040918201600020825160808101845290546001600160701b0381168252600160701b81048316948201859052600160b01b810490921692810192909252600160f01b900461ffff16606082018190529092506122ac91612494565b806122cc5750600254606082015161ffff600160401b9092048216911610155b91505090565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283928392918816916123309190612aab565b6000604051808303816000865af19150503d806000811461236d576040519150601f19603f3d011682016040523d82523d6000602084013e612372565b606091505b50915091508161238757600092505050611862565b805160000361239b57600192505050611862565b808060200190518101906123af9190612ada565b9695505050505050565b6040516340c10f1960e01b81526001600160a01b0383811660048301526024820183905260009185918216906340c10f1990604401600060405180830381600087803b15801561240857600080fd5b505af1925050508015612419575060015b612427576000915050611862565b6001915050611862565b60006124466001600160a01b038416836124d6565b9050805160001415801561246b5750808060200190518101906124699190612ada565b155b15610bca57604051635274afe760e01b81526001600160a01b0384166004820152602401610926565b60008261ffff166000036124aa575060006124d0565b60025443906124c390600160501b900460ff1684612a4e565b6001600160401b03161090505b92915050565b60606118628383600084600080856001600160a01b031684866040516124fc9190612aab565b60006040518083038185875af1925050503d8060008114612539576040519150601f19603f3d011682016040523d82523d6000602084013e61253e565b606091505b50915091506123af86838360608261255e57612559826125a5565b611862565b815115801561257557506001600160a01b0384163b155b1561259e57604051639996b31560e01b81526001600160a01b0385166004820152602401610926565b5080611862565b8051156125b55780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6000602082840312156125e357600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6005811061261e57634e487b7160e01b600052602160045260246000fd5b9052565b6040808252835182820181905260009190606090818501906020808901865b838110156126ae57815180516001600160701b03168652838101516001600160a01b039081168588015288820151898801528782015116878701526080808201519087015260a0908101519061269981880183612600565b505060c0949094019390820190600101612641565b50508295506126c08188018915159052565b50505050509392505050565b80356001600160a01b03811681146126e357600080fd5b919050565b6000806000606084860312156126fd57600080fd5b612706846126cc565b95602085013595506040909401359392505050565b6000806040838503121561272e57600080fd5b50508035926020909101359150565b6001600160701b03871681526001600160a01b03868116602083015260408201869052841660608201526080810183905260c0810161277f60a0830184612600565b979650505050505050565b60006020828403121561279c57600080fd5b611862826126cc565b600080604083850312156127b857600080fd5b6127c1836126cc565b946020939093013593505050565b80151581146125ce57600080fd5b600080600080600060a086880312156127f557600080fd5b6127fe866126cc565b94506020860135935060408601359250606086013561281c816127cf565b9150608086013561282c816127cf565b809150509295509295909350565b60008060008060006080868803121561285257600080fd5b61285b866126cc565b9450602086013593506040860135925060608601356001600160401b038082111561288557600080fd5b818801915088601f83011261289957600080fd5b8135818111156128a857600080fd5b8960208285010111156128ba57600080fd5b9699959850939650602001949392505050565b6000602082840312156128df57600080fd5b813561ffff8116811461186257600080fd5b60008060006060848603121561290657600080fd5b61290f846126cc565b925060208401359150612924604085016126cc565b90509250925092565b60006020828403121561293f57600080fd5b813560ff8116811461186257600080fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156124d0576124d0612950565b60208082526023908201527f41636365737320436f6e74726f6c3a2073656e646572206973206e6f7420416460408201526236b4b760e91b606082015260800190565b808201808211156124d0576124d0612950565b6000602082840312156129e157600080fd5b5051919050565b6001600160401b03828116828216039080821115612a0857612a08612950565b5092915050565b6001600160701b038416815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6001600160401b03818116838216019080821115612a0857612a08612950565b60006001600160401b03808316818103612a8a57612a8a612950565b6001019392505050565b600061ffff808316818103612a8a57612a8a612950565b6000825160005b81811015612acc5760208186018101518583015201612ab2565b506000920191825250919050565b600060208284031215612aec57600080fd5b8151611862816127cf56fea164736f6c6343000814000a +0x60806040526002805463ffffffff60401b19166b2828000a000000000000000017905534801561002e57600080fd5b50600080546001600160a01b031916339081178255604051909182917fe379ac64de02d8184ca1a871ac486cb8137de77e485ede140e97057b9c765ffd908290a3506001805460ff60a01b1916600160a01b179055612b04806100926000396000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c80639ab7cfaa11610146578063c86726f6116100c3578063e78cea9211610087578063e78cea92146106b6578063e8a70ee2146106db578063f2e0ec48146106ee578063f4daaba114610701578063f6246ea114610729578063f851a4401461074957600080fd5b8063c86726f61461062a578063cf6682a21461064d578063d4673de91461066d578063daf9c21014610680578063dbba0f01146106a357600080fd5b8063b5af090f1161010a578063b5af090f14610582578063bc56602f146105ae578063c639651d146105ce578063c652a0b5146105ee578063c859b3fe1461061757600080fd5b80639ab7cfaa146104755780639f0ebb9314610489578063a7c3a06f146104c0578063aee9c872146104d3578063b32c4d8d146104f357600080fd5b806375829def116101d457806387ea09611161019857806387ea09611461040a5780638bad0c0a146104245780638dd148021461042c57806390e0cfcb1461043f578063920b03081461046257600080fd5b806375829def146103c1578063770be784146103d45780637d7763ce146103e757806382146138146103fa5780638456cb591461040257600080fd5b80633f4ba83a1161021b5780633f4ba83a146102f55780634013c89c146102fd5780634506e935146103105780635ac442821461033b5780635c975abb146103a357600080fd5b8063085c967f146102585780632325b5f71461028257806326b3293f146102a8578063284c0c44146102bd578063306275be146102e2575b600080fd5b61026b6102663660046125d1565b61075a565b604051610279929190612622565b60405180910390f35b60025461029690600160581b900460ff1681565b60405160ff9091168152602001610279565b6102bb6102b63660046126e8565b6108dd565b005b6102d06102cb36600461271b565b61098d565b6040516102799695949392919061273d565b6102bb6102f036600461278a565b6109fa565b6102bb610a54565b6102bb61030b3660046127a5565b610ad1565b600254610323906001600160401b031681565b6040516001600160401b039091168152602001610279565b61034e6103493660046125d1565b610d09565b6040805183516001600160701b031681526020808501516001600160401b039081169183019190915284830151169181019190915260609283015161ffff16928101929092521515608082015260a001610279565b600154600160a01b900460ff165b6040519015158152602001610279565b6102bb6103cf36600461278a565b610db6565b6102bb6103e236600461278a565b610eb1565b6102bb6103f53660046127a5565b610fc3565b6103b1611018565b6102bb6110f8565b60015461032390600160a81b90046001600160401b031681565b6102bb611174565b6102bb61043a36600461278a565b6111f7565b6103b161044d36600461278a565b60056020526000908152604090205460ff1681565b6102bb6104703660046127a5565b6113bc565b60025461029690600160501b900460ff1681565b6104b261049736600461278a565b6001600160a01b031660009081526007602052604090205490565b604051908152602001610279565b6102bb6104ce3660046127dd565b611411565b6104b26104e136600461278a565b60096020526000908152604090205481565b6105476105013660046125d1565b6003602052600090815260409020546001600160701b038116906001600160401b03600160701b8204811691600160b01b81049091169061ffff600160f01b9091041684565b604080516001600160701b039590951685526001600160401b039384166020860152919092169083015261ffff166060820152608001610279565b6103b161059036600461278a565b6001600160a01b031660009081526004602052604090205460ff1690565b6104b26105bc36600461278a565b600a6020526000908152604090205481565b6104b26105dc36600461278a565b60086020526000908152604090205481565b6104b26105fc36600461278a565b6001600160a01b031660009081526008602052604090205490565b6102bb61062536600461283a565b611511565b6103b161063836600461278a565b60066020526000908152604090205460ff1681565b6104b261065b36600461278a565b600b6020526000908152604090205481565b6102bb61067b3660046128cd565b6115c1565b6103b161068e36600461278a565b60046020526000908152604090205460ff1681565b6103b16106b13660046128f1565b61166c565b6001546001600160a01b03165b6040516001600160a01b039091168152602001610279565b6102bb6106e936600461292d565b611869565b6102bb6106fc36600461292d565b611948565b60025461071690600160401b900461ffff1681565b60405161ffff9091168152602001610279565b6104b261073736600461278a565b60076020526000908152604090205481565b6000546001600160a01b03166106c3565b606060008060038161076d600187612966565b815260208082019290925260409081016000908120825160808101845290546001600160701b0381168252600160701b81046001600160401b0390811695830195909552600160b01b810490941692810192909252600160f01b90920461ffff1660608201529150600c906107e3600187612966565b81526020019081526020016000206107fa82611af6565b81805480602002602001604051908101604052809291908181526020016000905b828210156108cd5760008481526020908190206040805160c0810182526006860290920180546001600160701b0316835260018101546001600160a01b0390811694840194909452600281015491830191909152600381015490921660608201526004808301546080830152600583015491929160a084019160ff909116908111156108a9576108a96125ea565b60048111156108ba576108ba6125ea565b815250508152602001906001019061081b565b5050505091509250925050915091565b600154600160a01b900460ff161561092f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064015b60405180910390fd5b60008061093d858585611b27565b604080516001600160701b038084168252841660208201529294509092507f6c15ce44793c685a79cde26a0bd5419ef4f3a337991f156be7b365962001b4a7910160405180910390a15050505050565b600c60205281600052604060002081815481106109a957600080fd5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160701b0390941696506001600160a01b039283169550909391169160ff1686565b33610a0d6000546001600160a01b031690565b6001600160a01b031614610a335760405162461bcd60e51b815260040161092690612979565b6001600160a01b03166000908152600460205260409020805460ff19169055565b33610a676000546001600160a01b031690565b6001600160a01b031614610a8d5760405162461bcd60e51b815260040161092690612979565b6001805460ff60a01b19169055604051600081527f9422424b175dda897495a07b091ef74a3ef715cf6d866fc972954c1c7f459304906020015b60405180910390a1565b33610ae46000546001600160a01b031690565b6001600160a01b031614610b0a5760405162461bcd60e51b815260040161092690612979565b6001600160a01b03821660009081526004602052604090205460ff16610b665760405162461bcd60e51b81526020600482015260116024820152702ab739bab83837b93a32b2103a37b5b2b760791b6044820152606401610926565b6001600160a01b03821660009081526005602052604090205460ff16610bcf576001600160a01b03821660009081526009602052604081208054839290610bae9084906129bc565b90915550829050610bca6001600160a01b03821633308561215b565b505050565b6001600160a01b03821660009081526006602052604090205460ff16610c75576001600160a01b0382166000908152600b6020526040902054610c139082906129bc565b6001600160a01b0383166000908152600a60205260409020541015610c755760405162461bcd60e51b81526020600482015260186024820152774e6f7420656e6f756768206d696e74656420746f6b656e7360401b6044820152606401610926565b6001600160a01b0382166000908152600b602052604081208054839290610c9d9084906129bc565b909155505060405163079cc67960e41b81523360048201526024810182905282906001600160a01b038216906379cc679090604401600060405180830381600087803b158015610cec57600080fd5b505af1158015610d00573d6000803e3d6000fd5b50505050505050565b60408051608081018252600080825260208201819052918101829052606081018290529080600381610d3c600187612966565b81526020808201929092526040908101600020815160808101835290546001600160701b0381168252600160701b81046001600160401b0390811694830194909452600160b01b810490931691810191909152600160f01b90910461ffff166060820152905080610dac81611af6565b9250925050915091565b33610dc96000546001600160a01b031690565b6001600160a01b031614610def5760405162461bcd60e51b815260040161092690612979565b6001600160a01b038116610e565760405162461bcd60e51b815260206004820152602860248201527f41646d696e526f6c653a206e65772061646d696e20697320746865207a65726f604482015267206164647265737360c01b6064820152608401610926565b600080546040516001600160a01b03808516939216917fe379ac64de02d8184ca1a871ac486cb8137de77e485ede140e97057b9c765ffd91a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b33610ec46000546001600160a01b031690565b6001600160a01b031614610eea5760405162461bcd60e51b815260040161092690612979565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5791906129cf565b6001600160a01b0384166000908152600460205260408120549192509060ff1615610fa6576001600160a01b038416600090815260096020526040902054610f9f9083612966565b9050610fa9565b50805b610fbd6001600160a01b03841633836121c2565b50505050565b33610fd66000546001600160a01b031690565b6001600160a01b031614610ffc5760405162461bcd60e51b815260040161092690612979565b6001600160a01b03909116600090815260086020526040902055565b600154600090600160a81b90046001600160401b0316810361103a5750600090565b60018054600091600391839161105f91600160a81b90046001600160401b03166129e8565b6001600160401b0390811682526020808301939093526040918201600020825160808101845290546001600160701b0381168252600160701b8104831694820194909452600160b01b840490911691810191909152600160f01b90910461ffff16606082015290506110cf6121f3565b6110db57600191505090565b6110e481611af6565b6110f057600191505090565b600091505090565b3361110b6000546001600160a01b031690565b6001600160a01b0316146111315760405162461bcd60e51b815260040161092690612979565b6001805460ff60a01b1916600160a01b1781556040519081527f9422424b175dda897495a07b091ef74a3ef715cf6d866fc972954c1c7f45930490602001610ac7565b336111876000546001600160a01b031690565b6001600160a01b0316146111ad5760405162461bcd60e51b815260040161092690612979565b600080546040516001600160a01b03909116907fe379ac64de02d8184ca1a871ac486cb8137de77e485ede140e97057b9c765ffd908390a3600080546001600160a01b0319169055565b3361120a6000546001600160a01b031690565b6001600160a01b0316146112305760405162461bcd60e51b815260040161092690612979565b6001600160a01b0381166112995760405162461bcd60e51b815260206004820152602a60248201527f427269646765526f6c653a206e65772062726964676520697320746865207a65604482015269726f206164647265737360b01b6064820152608401610926565b6001546001600160a01b03908116908216036112f75760405162461bcd60e51b815260206004820152601860248201527f427269646765526f6c653a2073616d65206164647265737300000000000000006044820152606401610926565b6001600160a01b0381163b6113605760405162461bcd60e51b815260206004820152602960248201527f427269646765526f6c653a206e657720627269646765206d75737420626520616044820152680818dbdb9d1c9858dd60ba1b6064820152608401610926565b6001546040516001600160a01b038084169216907fcca5fddab921a878ddbd4edb737a2cf3ac6df70864f108606647d1b37a5e07a090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b336113cf6000546001600160a01b031690565b6001600160a01b0316146113f55760405162461bcd60e51b815260040161092690612979565b6001600160a01b03909116600090815260076020526040902055565b336114246000546001600160a01b031690565b6001600160a01b03161461144a5760405162461bcd60e51b815260040161092690612979565b816114a657806114a65760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206e617469766520746f6b656e732063616e2062652073746f7265646044820152602160f81b6064820152608401610926565b6001600160a01b039490941660009081526004602090815260408083208054600160ff19918216179091556005835281842080548216951515959095179094556006825280832080549094169615159690961790925560078252848120939093556008905291902055565b600154600160a01b900460ff161561155e5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610926565b60008061156c878787611b27565b60405191935091506001600160701b038316907fce848da21487607afba5c5a500c2ad1002d9b8db97ca5512671309df071113b2906115b090849088908890612a0f565b60405180910390a250505050505050565b336115d46000546001600160a01b031690565b6001600160a01b0316146115fa5760405162461bcd60e51b815260040161092690612979565b606461ffff821611156116455760405162461bcd60e51b8152602060048201526013602482015272084c2e8c6d040e6d2f4ca40e8dede40d0d2ced606b1b6044820152606401610926565b6002805461ffff909216600160401b0269ffff000000000000000019909216919091179055565b6000336116816001546001600160a01b031690565b6001600160a01b0316146116e35760405162461bcd60e51b8152602060048201526024808201527f41636365737320436f6e74726f6c3a2073656e646572206973206e6f742042726044820152636964676560e01b6064820152608401610926565b6001600160a01b03841660009081526005602052604090205460ff166117655783600061171a6001600160a01b03831685876122d2565b90508061172c57600092505050611862565b6001600160a01b03861660009081526009602052604081208054879290611754908490612966565b909155506001935061186292505050565b6001600160a01b03841660009081526006602052604090205460ff1615611811576001600160a01b0384166000908152600a60205260409020546117aa9084906129bc565b6001600160a01b0385166000908152600b602052604090205410156118115760405162461bcd60e51b815260206004820152601860248201527f4e6f7420656e6f756768206275726e656420746f6b656e7300000000000000006044820152606401610926565b600061181e8584866123b9565b90508061182f576000915050611862565b6001600160a01b0385166000908152600a6020526040812080548692906118579084906129bc565b909155506001925050505b9392505050565b3361187c6000546001600160a01b031690565b6001600160a01b0316146118a25760405162461bcd60e51b815260040161092690612979565b60025460ff600160581b909104811690821611156119285760405162461bcd60e51b815260206004820152603760248201527f43616e6e6f7420696e63726561736520626174636820626c6f636b206c696d6960448201527f74206f76657220736574746c656d656e74206c696d69740000000000000000006064820152608401610926565b6002805460ff909216600160501b0260ff60501b19909216919091179055565b3361195b6000546001600160a01b031690565b6001600160a01b0316146119815760405162461bcd60e51b815260040161092690612979565b600154600160a01b900460ff166119d15760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610926565b6119d9611018565b15611a425760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f74206368616e6765206261746368536574746c654c696d697420776044820152726974682070656e64696e67206261746368657360681b6064820152608401610926565b60025460ff600160501b90910481169082161015611ad65760405162461bcd60e51b815260206004820152604560248201527f43616e6e6f74206465637265617365206261746368536574746c654c696d697460448201527f20756e646572207468652076616c7565206f6620626174636820626c6f636b206064820152641b1a5b5a5d60da1b608482015260a401610926565b6002805460ff909216600160581b0260ff60581b19909216919091179055565b60025460408201516000914391611b1791600160581b900460ff1690612a4e565b6001600160401b03161092915050565b6001600160a01b038316600090815260046020526040812054819060ff16611b855760405162461bcd60e51b81526020600482015260116024820152702ab739bab83837b93a32b2103a37b5b2b760791b6044820152606401610926565b6001600160a01b038516600090815260076020526040902054841015611c135760405162461bcd60e51b815260206004820152603c60248201527f547269656420746f206465706f73697420616e20616d6f756e742062656c6f7760448201527f20746865206d696e696d756d20737065636966696564206c696d6974000000006064820152608401610926565b6001600160a01b038516600090815260086020526040902054841115611ca15760405162461bcd60e51b815260206004820152603c60248201527f547269656420746f206465706f73697420616e20616d6f756e742061626f766560448201527f20746865206d6178696d756d20737065636966696564206c696d6974000000006064820152608401610926565b436000611cac6121f3565b15611d49575060018054600160a81b90046001600160401b0316600081815260036020526040902091611cdf9190612a4e565b81546001600160401b039182166001600160b01b031990911617600160701b8483160217825560018054600160a81b9004909116906015611d1f83612a6e565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050611d87565b60018054600391600091611d6d9190600160a81b90046001600160401b03166129e8565b6001600160401b0316815260200190815260200160002090505b600254600090611da1906001600160401b03166001612a4e565b6001600160401b03169050600c600060018060159054906101000a90046001600160401b0316611dd191906129e8565b6001600160401b031681526020019081526020016000206040518060c00160405280836001600160701b031681526020018a6001600160a01b03168152602001898152602001336001600160a01b0316815260200188815260200160016004811115611e3f57611e3f6125ea565b90528154600181810184556000938452602093849020835160069093020180546001600160701b039093166dffffffffffffffffffffffffffff199093169290921782559282015181840180546001600160a01b039283166001600160a01b031991821617909155604084015160028401556060840151600384018054919093169116179055608082015160048083019190915560a0830151600583018054949593949193909260ff19909216918490811115611efe57611efe6125ea565b021790555050825467ffffffffffffffff60b01b1916600160b01b6001600160401b0386160217808455600160f01b900461ffff16905082601e611f4183612a94565b825461ffff9182166101009390930a928302919092021990911617905550600280546001600160401b0316906000611f7883612a6e565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050611fbf886001600160a01b031660009081526005602052604090205460ff1690565b61200d576001600160a01b03881660009081526009602052604081208054899290611feb9084906129bc565b909155508890506120076001600160a01b03821633308b61215b565b50612144565b6001600160a01b03881660009081526006602052604090205460ff166120b3576001600160a01b0388166000908152600b60205260409020546120519088906129bc565b6001600160a01b0389166000908152600a602052604090205410156120b35760405162461bcd60e51b81526020600482015260186024820152774e6f7420656e6f756768206d696e74656420746f6b656e7360401b6044820152606401610926565b6001600160a01b0388166000908152600b6020526040812080548992906120db9084906129bc565b909155505060405163079cc67960e41b81523360048201526024810188905288906001600160a01b038216906379cc679090604401600060405180830381600087803b15801561212a57600080fd5b505af115801561213e573d6000803e3d6000fd5b50505050505b90546001600160701b031697909650945050505050565b6040516001600160a01b038481166024830152838116604483015260648201839052610fbd9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612431565b6040516001600160a01b03838116602483015260448201839052610bca91859182169063a9059cbb90606401612190565b600154600090600160a81b90046001600160401b031681036122155750600190565b60018054600091600391839161223a91600160a81b90046001600160401b03166129e8565b6001600160401b0390811682526020808301939093526040918201600020825160808101845290546001600160701b0381168252600160701b81048316948201859052600160b01b810490921692810192909252600160f01b900461ffff16606082018190529092506122ac91612494565b806122cc5750600254606082015161ffff600160401b9092048216911610155b91505090565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283928392918816916123309190612aab565b6000604051808303816000865af19150503d806000811461236d576040519150601f19603f3d011682016040523d82523d6000602084013e612372565b606091505b50915091508161238757600092505050611862565b805160000361239b57600192505050611862565b808060200190518101906123af9190612ada565b9695505050505050565b6040516340c10f1960e01b81526001600160a01b0383811660048301526024820183905260009185918216906340c10f1990604401600060405180830381600087803b15801561240857600080fd5b505af1925050508015612419575060015b612427576000915050611862565b6001915050611862565b60006124466001600160a01b038416836124d6565b9050805160001415801561246b5750808060200190518101906124699190612ada565b155b15610bca57604051635274afe760e01b81526001600160a01b0384166004820152602401610926565b60008261ffff166000036124aa575060006124d0565b60025443906124c390600160501b900460ff1684612a4e565b6001600160401b03161090505b92915050565b60606118628383600084600080856001600160a01b031684866040516124fc9190612aab565b60006040518083038185875af1925050503d8060008114612539576040519150601f19603f3d011682016040523d82523d6000602084013e61253e565b606091505b50915091506123af86838360608261255e57612559826125a5565b611862565b815115801561257557506001600160a01b0384163b155b1561259e57604051639996b31560e01b81526001600160a01b0385166004820152602401610926565b5080611862565b8051156125b55780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6000602082840312156125e357600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6005811061261e57634e487b7160e01b600052602160045260246000fd5b9052565b6040808252835182820181905260009190606090818501906020808901865b838110156126ae57815180516001600160701b03168652838101516001600160a01b039081168588015288820151898801528782015116878701526080808201519087015260a0908101519061269981880183612600565b505060c0949094019390820190600101612641565b50508295506126c08188018915159052565b50505050509392505050565b80356001600160a01b03811681146126e357600080fd5b919050565b6000806000606084860312156126fd57600080fd5b612706846126cc565b95602085013595506040909401359392505050565b6000806040838503121561272e57600080fd5b50508035926020909101359150565b6001600160701b03871681526001600160a01b03868116602083015260408201869052841660608201526080810183905260c0810161277f60a0830184612600565b979650505050505050565b60006020828403121561279c57600080fd5b611862826126cc565b600080604083850312156127b857600080fd5b6127c1836126cc565b946020939093013593505050565b80151581146125ce57600080fd5b600080600080600060a086880312156127f557600080fd5b6127fe866126cc565b94506020860135935060408601359250606086013561281c816127cf565b9150608086013561282c816127cf565b809150509295509295909350565b60008060008060006080868803121561285257600080fd5b61285b866126cc565b9450602086013593506040860135925060608601356001600160401b038082111561288557600080fd5b818801915088601f83011261289957600080fd5b8135818111156128a857600080fd5b8960208285010111156128ba57600080fd5b9699959850939650602001949392505050565b6000602082840312156128df57600080fd5b813561ffff8116811461186257600080fd5b60008060006060848603121561290657600080fd5b61290f846126cc565b925060208401359150612924604085016126cc565b90509250925092565b60006020828403121561293f57600080fd5b813560ff8116811461186257600080fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156124d0576124d0612950565b60208082526023908201527f41636365737320436f6e74726f6c3a2073656e646572206973206e6f7420416460408201526236b4b760e91b606082015260800190565b808201808211156124d0576124d0612950565b6000602082840312156129e157600080fd5b5051919050565b6001600160401b03828116828216039080821115612a0857612a08612950565b5092915050565b6001600160701b038416815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6001600160401b03818116838216019080821115612a0857612a08612950565b60006001600160401b03808316818103612a8a57612a8a612950565b6001019392505050565b600061ffff808316818103612a8a57612a8a612950565b6000825160005b81811015612acc5760208186018101518583015201612ab2565b506000920191825250919050565b600060208284031215612aec57600080fd5b8151611862816127cf56fea164736f6c6343000814000a diff --git a/abi/contracts/ERC20Safe/ERC20Safe.json b/abi/contracts/ERC20Safe/ERC20Safe.json index aa50543..f3a8bc6 100644 --- a/abi/contracts/ERC20Safe/ERC20Safe.json +++ b/abi/contracts/ERC20Safe/ERC20Safe.json @@ -85,13 +85,13 @@ { "indexed": false, "internalType": "uint112", - "name": "depositNonce", + "name": "batchId", "type": "uint112" }, { "indexed": false, "internalType": "uint112", - "name": "batchId", + "name": "depositNonce", "type": "uint112" } ], @@ -115,9 +115,9 @@ }, { "indexed": false, - "internalType": "string", + "internalType": "bytes", "name": "callData", - "type": "string" + "type": "bytes" } ], "name": "ERC20SCDeposit", @@ -357,9 +357,9 @@ "type": "bytes32" }, { - "internalType": "string", + "internalType": "bytes", "name": "callData", - "type": "string" + "type": "bytes" } ], "name": "depositWithSCExecution", @@ -927,8 +927,8 @@ "type": "function" } ], - "bytecode": "0x60806040526002805463ffffffff60401b19166b2828000a000000000000000017905534801561002e57600080fd5b50600080546001600160a01b031916339081178255604051909182917fe379ac64de02d8184ca1a871ac486cb8137de77e485ede140e97057b9c765ffd908290a3506001805460ff60a01b1916600160a01b179055612b04806100926000396000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c80639ab7cfaa11610146578063cd7271c5116100c3578063e78cea9211610087578063e78cea92146106b6578063e8a70ee2146106db578063f2e0ec48146106ee578063f4daaba114610701578063f6246ea114610729578063f851a4401461074957600080fd5b8063cd7271c51461063a578063cf6682a21461064d578063d4673de91461066d578063daf9c21014610680578063dbba0f01146106a357600080fd5b8063b5af090f1161010a578063b5af090f14610582578063bc56602f146105ae578063c639651d146105ce578063c652a0b5146105ee578063c86726f61461061757600080fd5b80639ab7cfaa146104755780639f0ebb9314610489578063a7c3a06f146104c0578063aee9c872146104d3578063b32c4d8d146104f357600080fd5b806375829def116101d457806387ea09611161019857806387ea09611461040a5780638bad0c0a146104245780638dd148021461042c57806390e0cfcb1461043f578063920b03081461046257600080fd5b806375829def146103c1578063770be784146103d45780637d7763ce146103e757806382146138146103fa5780638456cb591461040257600080fd5b80633f4ba83a1161021b5780633f4ba83a146102f55780634013c89c146102fd5780634506e935146103105780635ac442821461033b5780635c975abb146103a357600080fd5b8063085c967f146102585780632325b5f71461028257806326b3293f146102a8578063284c0c44146102bd578063306275be146102e2575b600080fd5b61026b6102663660046125d1565b61075a565b604051610279929190612622565b60405180910390f35b60025461029690600160581b900460ff1681565b60405160ff9091168152602001610279565b6102bb6102b63660046126e8565b6108dd565b005b6102d06102cb36600461271b565b61098d565b6040516102799695949392919061273d565b6102bb6102f036600461278a565b6109fa565b6102bb610a54565b6102bb61030b3660046127a5565b610ad1565b600254610323906001600160401b031681565b6040516001600160401b039091168152602001610279565b61034e6103493660046125d1565b610d09565b6040805183516001600160701b031681526020808501516001600160401b039081169183019190915284830151169181019190915260609283015161ffff16928101929092521515608082015260a001610279565b600154600160a01b900460ff165b6040519015158152602001610279565b6102bb6103cf36600461278a565b610db6565b6102bb6103e236600461278a565b610eb1565b6102bb6103f53660046127a5565b610fc3565b6103b1611018565b6102bb6110f8565b60015461032390600160a81b90046001600160401b031681565b6102bb611174565b6102bb61043a36600461278a565b6111f7565b6103b161044d36600461278a565b60056020526000908152604090205460ff1681565b6102bb6104703660046127a5565b6113bc565b60025461029690600160501b900460ff1681565b6104b261049736600461278a565b6001600160a01b031660009081526007602052604090205490565b604051908152602001610279565b6102bb6104ce3660046127dd565b611411565b6104b26104e136600461278a565b60096020526000908152604090205481565b6105476105013660046125d1565b6003602052600090815260409020546001600160701b038116906001600160401b03600160701b8204811691600160b01b81049091169061ffff600160f01b9091041684565b604080516001600160701b039590951685526001600160401b039384166020860152919092169083015261ffff166060820152608001610279565b6103b161059036600461278a565b6001600160a01b031660009081526004602052604090205460ff1690565b6104b26105bc36600461278a565b600a6020526000908152604090205481565b6104b26105dc36600461278a565b60086020526000908152604090205481565b6104b26105fc36600461278a565b6001600160a01b031660009081526008602052604090205490565b6103b161062536600461278a565b60066020526000908152604090205460ff1681565b6102bb61064836600461283a565b611511565b6104b261065b36600461278a565b600b6020526000908152604090205481565b6102bb61067b3660046128cd565b6115c1565b6103b161068e36600461278a565b60046020526000908152604090205460ff1681565b6103b16106b13660046128f1565b61166c565b6001546001600160a01b03165b6040516001600160a01b039091168152602001610279565b6102bb6106e936600461292d565b611869565b6102bb6106fc36600461292d565b611948565b60025461071690600160401b900461ffff1681565b60405161ffff9091168152602001610279565b6104b261073736600461278a565b60076020526000908152604090205481565b6000546001600160a01b03166106c3565b606060008060038161076d600187612966565b815260208082019290925260409081016000908120825160808101845290546001600160701b0381168252600160701b81046001600160401b0390811695830195909552600160b01b810490941692810192909252600160f01b90920461ffff1660608201529150600c906107e3600187612966565b81526020019081526020016000206107fa82611af6565b81805480602002602001604051908101604052809291908181526020016000905b828210156108cd5760008481526020908190206040805160c0810182526006860290920180546001600160701b0316835260018101546001600160a01b0390811694840194909452600281015491830191909152600381015490921660608201526004808301546080830152600583015491929160a084019160ff909116908111156108a9576108a96125ea565b60048111156108ba576108ba6125ea565b815250508152602001906001019061081b565b5050505091509250925050915091565b600154600160a01b900460ff161561092f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064015b60405180910390fd5b60008061093d858585611b27565b604080516001600160701b038084168252841660208201529294509092507f6c15ce44793c685a79cde26a0bd5419ef4f3a337991f156be7b365962001b4a7910160405180910390a15050505050565b600c60205281600052604060002081815481106109a957600080fd5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160701b0390941696506001600160a01b039283169550909391169160ff1686565b33610a0d6000546001600160a01b031690565b6001600160a01b031614610a335760405162461bcd60e51b815260040161092690612979565b6001600160a01b03166000908152600460205260409020805460ff19169055565b33610a676000546001600160a01b031690565b6001600160a01b031614610a8d5760405162461bcd60e51b815260040161092690612979565b6001805460ff60a01b19169055604051600081527f9422424b175dda897495a07b091ef74a3ef715cf6d866fc972954c1c7f459304906020015b60405180910390a1565b33610ae46000546001600160a01b031690565b6001600160a01b031614610b0a5760405162461bcd60e51b815260040161092690612979565b6001600160a01b03821660009081526004602052604090205460ff16610b665760405162461bcd60e51b81526020600482015260116024820152702ab739bab83837b93a32b2103a37b5b2b760791b6044820152606401610926565b6001600160a01b03821660009081526005602052604090205460ff16610bcf576001600160a01b03821660009081526009602052604081208054839290610bae9084906129bc565b90915550829050610bca6001600160a01b03821633308561215b565b505050565b6001600160a01b03821660009081526006602052604090205460ff16610c75576001600160a01b0382166000908152600b6020526040902054610c139082906129bc565b6001600160a01b0383166000908152600a60205260409020541015610c755760405162461bcd60e51b81526020600482015260186024820152774e6f7420656e6f756768206d696e74656420746f6b656e7360401b6044820152606401610926565b6001600160a01b0382166000908152600b602052604081208054839290610c9d9084906129bc565b909155505060405163079cc67960e41b81523360048201526024810182905282906001600160a01b038216906379cc679090604401600060405180830381600087803b158015610cec57600080fd5b505af1158015610d00573d6000803e3d6000fd5b50505050505050565b60408051608081018252600080825260208201819052918101829052606081018290529080600381610d3c600187612966565b81526020808201929092526040908101600020815160808101835290546001600160701b0381168252600160701b81046001600160401b0390811694830194909452600160b01b810490931691810191909152600160f01b90910461ffff166060820152905080610dac81611af6565b9250925050915091565b33610dc96000546001600160a01b031690565b6001600160a01b031614610def5760405162461bcd60e51b815260040161092690612979565b6001600160a01b038116610e565760405162461bcd60e51b815260206004820152602860248201527f41646d696e526f6c653a206e65772061646d696e20697320746865207a65726f604482015267206164647265737360c01b6064820152608401610926565b600080546040516001600160a01b03808516939216917fe379ac64de02d8184ca1a871ac486cb8137de77e485ede140e97057b9c765ffd91a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b33610ec46000546001600160a01b031690565b6001600160a01b031614610eea5760405162461bcd60e51b815260040161092690612979565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5791906129cf565b6001600160a01b0384166000908152600460205260408120549192509060ff1615610fa6576001600160a01b038416600090815260096020526040902054610f9f9083612966565b9050610fa9565b50805b610fbd6001600160a01b03841633836121c2565b50505050565b33610fd66000546001600160a01b031690565b6001600160a01b031614610ffc5760405162461bcd60e51b815260040161092690612979565b6001600160a01b03909116600090815260086020526040902055565b600154600090600160a81b90046001600160401b0316810361103a5750600090565b60018054600091600391839161105f91600160a81b90046001600160401b03166129e8565b6001600160401b0390811682526020808301939093526040918201600020825160808101845290546001600160701b0381168252600160701b8104831694820194909452600160b01b840490911691810191909152600160f01b90910461ffff16606082015290506110cf6121f3565b6110db57600191505090565b6110e481611af6565b6110f057600191505090565b600091505090565b3361110b6000546001600160a01b031690565b6001600160a01b0316146111315760405162461bcd60e51b815260040161092690612979565b6001805460ff60a01b1916600160a01b1781556040519081527f9422424b175dda897495a07b091ef74a3ef715cf6d866fc972954c1c7f45930490602001610ac7565b336111876000546001600160a01b031690565b6001600160a01b0316146111ad5760405162461bcd60e51b815260040161092690612979565b600080546040516001600160a01b03909116907fe379ac64de02d8184ca1a871ac486cb8137de77e485ede140e97057b9c765ffd908390a3600080546001600160a01b0319169055565b3361120a6000546001600160a01b031690565b6001600160a01b0316146112305760405162461bcd60e51b815260040161092690612979565b6001600160a01b0381166112995760405162461bcd60e51b815260206004820152602a60248201527f427269646765526f6c653a206e65772062726964676520697320746865207a65604482015269726f206164647265737360b01b6064820152608401610926565b6001546001600160a01b03908116908216036112f75760405162461bcd60e51b815260206004820152601860248201527f427269646765526f6c653a2073616d65206164647265737300000000000000006044820152606401610926565b6001600160a01b0381163b6113605760405162461bcd60e51b815260206004820152602960248201527f427269646765526f6c653a206e657720627269646765206d75737420626520616044820152680818dbdb9d1c9858dd60ba1b6064820152608401610926565b6001546040516001600160a01b038084169216907fcca5fddab921a878ddbd4edb737a2cf3ac6df70864f108606647d1b37a5e07a090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b336113cf6000546001600160a01b031690565b6001600160a01b0316146113f55760405162461bcd60e51b815260040161092690612979565b6001600160a01b03909116600090815260076020526040902055565b336114246000546001600160a01b031690565b6001600160a01b03161461144a5760405162461bcd60e51b815260040161092690612979565b816114a657806114a65760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206e617469766520746f6b656e732063616e2062652073746f7265646044820152602160f81b6064820152608401610926565b6001600160a01b039490941660009081526004602090815260408083208054600160ff19918216179091556005835281842080548216951515959095179094556006825280832080549094169615159690961790925560078252848120939093556008905291902055565b600154600160a01b900460ff161561155e5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610926565b60008061156c878787611b27565b60405191935091506001600160701b038316907f527e633d8513f28e14b16d38843a6e5c1c9db79ecb610ef26e171e836f93d9a2906115b090849088908890612a0f565b60405180910390a250505050505050565b336115d46000546001600160a01b031690565b6001600160a01b0316146115fa5760405162461bcd60e51b815260040161092690612979565b606461ffff821611156116455760405162461bcd60e51b8152602060048201526013602482015272084c2e8c6d040e6d2f4ca40e8dede40d0d2ced606b1b6044820152606401610926565b6002805461ffff909216600160401b0269ffff000000000000000019909216919091179055565b6000336116816001546001600160a01b031690565b6001600160a01b0316146116e35760405162461bcd60e51b8152602060048201526024808201527f41636365737320436f6e74726f6c3a2073656e646572206973206e6f742042726044820152636964676560e01b6064820152608401610926565b6001600160a01b03841660009081526005602052604090205460ff166117655783600061171a6001600160a01b03831685876122d2565b90508061172c57600092505050611862565b6001600160a01b03861660009081526009602052604081208054879290611754908490612966565b909155506001935061186292505050565b6001600160a01b03841660009081526006602052604090205460ff1615611811576001600160a01b0384166000908152600a60205260409020546117aa9084906129bc565b6001600160a01b0385166000908152600b602052604090205410156118115760405162461bcd60e51b815260206004820152601860248201527f4e6f7420656e6f756768206275726e656420746f6b656e7300000000000000006044820152606401610926565b600061181e8584866123b9565b90508061182f576000915050611862565b6001600160a01b0385166000908152600a6020526040812080548692906118579084906129bc565b909155506001925050505b9392505050565b3361187c6000546001600160a01b031690565b6001600160a01b0316146118a25760405162461bcd60e51b815260040161092690612979565b60025460ff600160581b909104811690821611156119285760405162461bcd60e51b815260206004820152603760248201527f43616e6e6f7420696e63726561736520626174636820626c6f636b206c696d6960448201527f74206f76657220736574746c656d656e74206c696d69740000000000000000006064820152608401610926565b6002805460ff909216600160501b0260ff60501b19909216919091179055565b3361195b6000546001600160a01b031690565b6001600160a01b0316146119815760405162461bcd60e51b815260040161092690612979565b600154600160a01b900460ff166119d15760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610926565b6119d9611018565b15611a425760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f74206368616e6765206261746368536574746c654c696d697420776044820152726974682070656e64696e67206261746368657360681b6064820152608401610926565b60025460ff600160501b90910481169082161015611ad65760405162461bcd60e51b815260206004820152604560248201527f43616e6e6f74206465637265617365206261746368536574746c654c696d697460448201527f20756e646572207468652076616c7565206f6620626174636820626c6f636b206064820152641b1a5b5a5d60da1b608482015260a401610926565b6002805460ff909216600160581b0260ff60581b19909216919091179055565b60025460408201516000914391611b1791600160581b900460ff1690612a4e565b6001600160401b03161092915050565b6001600160a01b038316600090815260046020526040812054819060ff16611b855760405162461bcd60e51b81526020600482015260116024820152702ab739bab83837b93a32b2103a37b5b2b760791b6044820152606401610926565b6001600160a01b038516600090815260076020526040902054841015611c135760405162461bcd60e51b815260206004820152603c60248201527f547269656420746f206465706f73697420616e20616d6f756e742062656c6f7760448201527f20746865206d696e696d756d20737065636966696564206c696d6974000000006064820152608401610926565b6001600160a01b038516600090815260086020526040902054841115611ca15760405162461bcd60e51b815260206004820152603c60248201527f547269656420746f206465706f73697420616e20616d6f756e742061626f766560448201527f20746865206d6178696d756d20737065636966696564206c696d6974000000006064820152608401610926565b436000611cac6121f3565b15611d49575060018054600160a81b90046001600160401b0316600081815260036020526040902091611cdf9190612a4e565b81546001600160401b039182166001600160b01b031990911617600160701b8483160217825560018054600160a81b9004909116906015611d1f83612a6e565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050611d87565b60018054600391600091611d6d9190600160a81b90046001600160401b03166129e8565b6001600160401b0316815260200190815260200160002090505b600254600090611da1906001600160401b03166001612a4e565b6001600160401b03169050600c600060018060159054906101000a90046001600160401b0316611dd191906129e8565b6001600160401b031681526020019081526020016000206040518060c00160405280836001600160701b031681526020018a6001600160a01b03168152602001898152602001336001600160a01b0316815260200188815260200160016004811115611e3f57611e3f6125ea565b90528154600181810184556000938452602093849020835160069093020180546001600160701b039093166dffffffffffffffffffffffffffff199093169290921782559282015181840180546001600160a01b039283166001600160a01b031991821617909155604084015160028401556060840151600384018054919093169116179055608082015160048083019190915560a0830151600583018054949593949193909260ff19909216918490811115611efe57611efe6125ea565b021790555050825467ffffffffffffffff60b01b1916600160b01b6001600160401b0386160217808455600160f01b900461ffff16905082601e611f4183612a94565b825461ffff9182166101009390930a928302919092021990911617905550600280546001600160401b0316906000611f7883612a6e565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050611fbf886001600160a01b031660009081526005602052604090205460ff1690565b61200d576001600160a01b03881660009081526009602052604081208054899290611feb9084906129bc565b909155508890506120076001600160a01b03821633308b61215b565b50612144565b6001600160a01b03881660009081526006602052604090205460ff166120b3576001600160a01b0388166000908152600b60205260409020546120519088906129bc565b6001600160a01b0389166000908152600a602052604090205410156120b35760405162461bcd60e51b81526020600482015260186024820152774e6f7420656e6f756768206d696e74656420746f6b656e7360401b6044820152606401610926565b6001600160a01b0388166000908152600b6020526040812080548992906120db9084906129bc565b909155505060405163079cc67960e41b81523360048201526024810188905288906001600160a01b038216906379cc679090604401600060405180830381600087803b15801561212a57600080fd5b505af115801561213e573d6000803e3d6000fd5b50505050505b90546001600160701b031697909650945050505050565b6040516001600160a01b038481166024830152838116604483015260648201839052610fbd9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612431565b6040516001600160a01b03838116602483015260448201839052610bca91859182169063a9059cbb90606401612190565b600154600090600160a81b90046001600160401b031681036122155750600190565b60018054600091600391839161223a91600160a81b90046001600160401b03166129e8565b6001600160401b0390811682526020808301939093526040918201600020825160808101845290546001600160701b0381168252600160701b81048316948201859052600160b01b810490921692810192909252600160f01b900461ffff16606082018190529092506122ac91612494565b806122cc5750600254606082015161ffff600160401b9092048216911610155b91505090565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283928392918816916123309190612aab565b6000604051808303816000865af19150503d806000811461236d576040519150601f19603f3d011682016040523d82523d6000602084013e612372565b606091505b50915091508161238757600092505050611862565b805160000361239b57600192505050611862565b808060200190518101906123af9190612ada565b9695505050505050565b6040516340c10f1960e01b81526001600160a01b0383811660048301526024820183905260009185918216906340c10f1990604401600060405180830381600087803b15801561240857600080fd5b505af1925050508015612419575060015b612427576000915050611862565b6001915050611862565b60006124466001600160a01b038416836124d6565b9050805160001415801561246b5750808060200190518101906124699190612ada565b155b15610bca57604051635274afe760e01b81526001600160a01b0384166004820152602401610926565b60008261ffff166000036124aa575060006124d0565b60025443906124c390600160501b900460ff1684612a4e565b6001600160401b03161090505b92915050565b60606118628383600084600080856001600160a01b031684866040516124fc9190612aab565b60006040518083038185875af1925050503d8060008114612539576040519150601f19603f3d011682016040523d82523d6000602084013e61253e565b606091505b50915091506123af86838360608261255e57612559826125a5565b611862565b815115801561257557506001600160a01b0384163b155b1561259e57604051639996b31560e01b81526001600160a01b0385166004820152602401610926565b5080611862565b8051156125b55780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6000602082840312156125e357600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6005811061261e57634e487b7160e01b600052602160045260246000fd5b9052565b6040808252835182820181905260009190606090818501906020808901865b838110156126ae57815180516001600160701b03168652838101516001600160a01b039081168588015288820151898801528782015116878701526080808201519087015260a0908101519061269981880183612600565b505060c0949094019390820190600101612641565b50508295506126c08188018915159052565b50505050509392505050565b80356001600160a01b03811681146126e357600080fd5b919050565b6000806000606084860312156126fd57600080fd5b612706846126cc565b95602085013595506040909401359392505050565b6000806040838503121561272e57600080fd5b50508035926020909101359150565b6001600160701b03871681526001600160a01b03868116602083015260408201869052841660608201526080810183905260c0810161277f60a0830184612600565b979650505050505050565b60006020828403121561279c57600080fd5b611862826126cc565b600080604083850312156127b857600080fd5b6127c1836126cc565b946020939093013593505050565b80151581146125ce57600080fd5b600080600080600060a086880312156127f557600080fd5b6127fe866126cc565b94506020860135935060408601359250606086013561281c816127cf565b9150608086013561282c816127cf565b809150509295509295909350565b60008060008060006080868803121561285257600080fd5b61285b866126cc565b9450602086013593506040860135925060608601356001600160401b038082111561288557600080fd5b818801915088601f83011261289957600080fd5b8135818111156128a857600080fd5b8960208285010111156128ba57600080fd5b9699959850939650602001949392505050565b6000602082840312156128df57600080fd5b813561ffff8116811461186257600080fd5b60008060006060848603121561290657600080fd5b61290f846126cc565b925060208401359150612924604085016126cc565b90509250925092565b60006020828403121561293f57600080fd5b813560ff8116811461186257600080fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156124d0576124d0612950565b60208082526023908201527f41636365737320436f6e74726f6c3a2073656e646572206973206e6f7420416460408201526236b4b760e91b606082015260800190565b808201808211156124d0576124d0612950565b6000602082840312156129e157600080fd5b5051919050565b6001600160401b03828116828216039080821115612a0857612a08612950565b5092915050565b6001600160701b038416815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6001600160401b03818116838216019080821115612a0857612a08612950565b60006001600160401b03808316818103612a8a57612a8a612950565b6001019392505050565b600061ffff808316818103612a8a57612a8a612950565b6000825160005b81811015612acc5760208186018101518583015201612ab2565b506000920191825250919050565b600060208284031215612aec57600080fd5b8151611862816127cf56fea164736f6c6343000814000a", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102535760003560e01c80639ab7cfaa11610146578063cd7271c5116100c3578063e78cea9211610087578063e78cea92146106b6578063e8a70ee2146106db578063f2e0ec48146106ee578063f4daaba114610701578063f6246ea114610729578063f851a4401461074957600080fd5b8063cd7271c51461063a578063cf6682a21461064d578063d4673de91461066d578063daf9c21014610680578063dbba0f01146106a357600080fd5b8063b5af090f1161010a578063b5af090f14610582578063bc56602f146105ae578063c639651d146105ce578063c652a0b5146105ee578063c86726f61461061757600080fd5b80639ab7cfaa146104755780639f0ebb9314610489578063a7c3a06f146104c0578063aee9c872146104d3578063b32c4d8d146104f357600080fd5b806375829def116101d457806387ea09611161019857806387ea09611461040a5780638bad0c0a146104245780638dd148021461042c57806390e0cfcb1461043f578063920b03081461046257600080fd5b806375829def146103c1578063770be784146103d45780637d7763ce146103e757806382146138146103fa5780638456cb591461040257600080fd5b80633f4ba83a1161021b5780633f4ba83a146102f55780634013c89c146102fd5780634506e935146103105780635ac442821461033b5780635c975abb146103a357600080fd5b8063085c967f146102585780632325b5f71461028257806326b3293f146102a8578063284c0c44146102bd578063306275be146102e2575b600080fd5b61026b6102663660046125d1565b61075a565b604051610279929190612622565b60405180910390f35b60025461029690600160581b900460ff1681565b60405160ff9091168152602001610279565b6102bb6102b63660046126e8565b6108dd565b005b6102d06102cb36600461271b565b61098d565b6040516102799695949392919061273d565b6102bb6102f036600461278a565b6109fa565b6102bb610a54565b6102bb61030b3660046127a5565b610ad1565b600254610323906001600160401b031681565b6040516001600160401b039091168152602001610279565b61034e6103493660046125d1565b610d09565b6040805183516001600160701b031681526020808501516001600160401b039081169183019190915284830151169181019190915260609283015161ffff16928101929092521515608082015260a001610279565b600154600160a01b900460ff165b6040519015158152602001610279565b6102bb6103cf36600461278a565b610db6565b6102bb6103e236600461278a565b610eb1565b6102bb6103f53660046127a5565b610fc3565b6103b1611018565b6102bb6110f8565b60015461032390600160a81b90046001600160401b031681565b6102bb611174565b6102bb61043a36600461278a565b6111f7565b6103b161044d36600461278a565b60056020526000908152604090205460ff1681565b6102bb6104703660046127a5565b6113bc565b60025461029690600160501b900460ff1681565b6104b261049736600461278a565b6001600160a01b031660009081526007602052604090205490565b604051908152602001610279565b6102bb6104ce3660046127dd565b611411565b6104b26104e136600461278a565b60096020526000908152604090205481565b6105476105013660046125d1565b6003602052600090815260409020546001600160701b038116906001600160401b03600160701b8204811691600160b01b81049091169061ffff600160f01b9091041684565b604080516001600160701b039590951685526001600160401b039384166020860152919092169083015261ffff166060820152608001610279565b6103b161059036600461278a565b6001600160a01b031660009081526004602052604090205460ff1690565b6104b26105bc36600461278a565b600a6020526000908152604090205481565b6104b26105dc36600461278a565b60086020526000908152604090205481565b6104b26105fc36600461278a565b6001600160a01b031660009081526008602052604090205490565b6103b161062536600461278a565b60066020526000908152604090205460ff1681565b6102bb61064836600461283a565b611511565b6104b261065b36600461278a565b600b6020526000908152604090205481565b6102bb61067b3660046128cd565b6115c1565b6103b161068e36600461278a565b60046020526000908152604090205460ff1681565b6103b16106b13660046128f1565b61166c565b6001546001600160a01b03165b6040516001600160a01b039091168152602001610279565b6102bb6106e936600461292d565b611869565b6102bb6106fc36600461292d565b611948565b60025461071690600160401b900461ffff1681565b60405161ffff9091168152602001610279565b6104b261073736600461278a565b60076020526000908152604090205481565b6000546001600160a01b03166106c3565b606060008060038161076d600187612966565b815260208082019290925260409081016000908120825160808101845290546001600160701b0381168252600160701b81046001600160401b0390811695830195909552600160b01b810490941692810192909252600160f01b90920461ffff1660608201529150600c906107e3600187612966565b81526020019081526020016000206107fa82611af6565b81805480602002602001604051908101604052809291908181526020016000905b828210156108cd5760008481526020908190206040805160c0810182526006860290920180546001600160701b0316835260018101546001600160a01b0390811694840194909452600281015491830191909152600381015490921660608201526004808301546080830152600583015491929160a084019160ff909116908111156108a9576108a96125ea565b60048111156108ba576108ba6125ea565b815250508152602001906001019061081b565b5050505091509250925050915091565b600154600160a01b900460ff161561092f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064015b60405180910390fd5b60008061093d858585611b27565b604080516001600160701b038084168252841660208201529294509092507f6c15ce44793c685a79cde26a0bd5419ef4f3a337991f156be7b365962001b4a7910160405180910390a15050505050565b600c60205281600052604060002081815481106109a957600080fd5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160701b0390941696506001600160a01b039283169550909391169160ff1686565b33610a0d6000546001600160a01b031690565b6001600160a01b031614610a335760405162461bcd60e51b815260040161092690612979565b6001600160a01b03166000908152600460205260409020805460ff19169055565b33610a676000546001600160a01b031690565b6001600160a01b031614610a8d5760405162461bcd60e51b815260040161092690612979565b6001805460ff60a01b19169055604051600081527f9422424b175dda897495a07b091ef74a3ef715cf6d866fc972954c1c7f459304906020015b60405180910390a1565b33610ae46000546001600160a01b031690565b6001600160a01b031614610b0a5760405162461bcd60e51b815260040161092690612979565b6001600160a01b03821660009081526004602052604090205460ff16610b665760405162461bcd60e51b81526020600482015260116024820152702ab739bab83837b93a32b2103a37b5b2b760791b6044820152606401610926565b6001600160a01b03821660009081526005602052604090205460ff16610bcf576001600160a01b03821660009081526009602052604081208054839290610bae9084906129bc565b90915550829050610bca6001600160a01b03821633308561215b565b505050565b6001600160a01b03821660009081526006602052604090205460ff16610c75576001600160a01b0382166000908152600b6020526040902054610c139082906129bc565b6001600160a01b0383166000908152600a60205260409020541015610c755760405162461bcd60e51b81526020600482015260186024820152774e6f7420656e6f756768206d696e74656420746f6b656e7360401b6044820152606401610926565b6001600160a01b0382166000908152600b602052604081208054839290610c9d9084906129bc565b909155505060405163079cc67960e41b81523360048201526024810182905282906001600160a01b038216906379cc679090604401600060405180830381600087803b158015610cec57600080fd5b505af1158015610d00573d6000803e3d6000fd5b50505050505050565b60408051608081018252600080825260208201819052918101829052606081018290529080600381610d3c600187612966565b81526020808201929092526040908101600020815160808101835290546001600160701b0381168252600160701b81046001600160401b0390811694830194909452600160b01b810490931691810191909152600160f01b90910461ffff166060820152905080610dac81611af6565b9250925050915091565b33610dc96000546001600160a01b031690565b6001600160a01b031614610def5760405162461bcd60e51b815260040161092690612979565b6001600160a01b038116610e565760405162461bcd60e51b815260206004820152602860248201527f41646d696e526f6c653a206e65772061646d696e20697320746865207a65726f604482015267206164647265737360c01b6064820152608401610926565b600080546040516001600160a01b03808516939216917fe379ac64de02d8184ca1a871ac486cb8137de77e485ede140e97057b9c765ffd91a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b33610ec46000546001600160a01b031690565b6001600160a01b031614610eea5760405162461bcd60e51b815260040161092690612979565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5791906129cf565b6001600160a01b0384166000908152600460205260408120549192509060ff1615610fa6576001600160a01b038416600090815260096020526040902054610f9f9083612966565b9050610fa9565b50805b610fbd6001600160a01b03841633836121c2565b50505050565b33610fd66000546001600160a01b031690565b6001600160a01b031614610ffc5760405162461bcd60e51b815260040161092690612979565b6001600160a01b03909116600090815260086020526040902055565b600154600090600160a81b90046001600160401b0316810361103a5750600090565b60018054600091600391839161105f91600160a81b90046001600160401b03166129e8565b6001600160401b0390811682526020808301939093526040918201600020825160808101845290546001600160701b0381168252600160701b8104831694820194909452600160b01b840490911691810191909152600160f01b90910461ffff16606082015290506110cf6121f3565b6110db57600191505090565b6110e481611af6565b6110f057600191505090565b600091505090565b3361110b6000546001600160a01b031690565b6001600160a01b0316146111315760405162461bcd60e51b815260040161092690612979565b6001805460ff60a01b1916600160a01b1781556040519081527f9422424b175dda897495a07b091ef74a3ef715cf6d866fc972954c1c7f45930490602001610ac7565b336111876000546001600160a01b031690565b6001600160a01b0316146111ad5760405162461bcd60e51b815260040161092690612979565b600080546040516001600160a01b03909116907fe379ac64de02d8184ca1a871ac486cb8137de77e485ede140e97057b9c765ffd908390a3600080546001600160a01b0319169055565b3361120a6000546001600160a01b031690565b6001600160a01b0316146112305760405162461bcd60e51b815260040161092690612979565b6001600160a01b0381166112995760405162461bcd60e51b815260206004820152602a60248201527f427269646765526f6c653a206e65772062726964676520697320746865207a65604482015269726f206164647265737360b01b6064820152608401610926565b6001546001600160a01b03908116908216036112f75760405162461bcd60e51b815260206004820152601860248201527f427269646765526f6c653a2073616d65206164647265737300000000000000006044820152606401610926565b6001600160a01b0381163b6113605760405162461bcd60e51b815260206004820152602960248201527f427269646765526f6c653a206e657720627269646765206d75737420626520616044820152680818dbdb9d1c9858dd60ba1b6064820152608401610926565b6001546040516001600160a01b038084169216907fcca5fddab921a878ddbd4edb737a2cf3ac6df70864f108606647d1b37a5e07a090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b336113cf6000546001600160a01b031690565b6001600160a01b0316146113f55760405162461bcd60e51b815260040161092690612979565b6001600160a01b03909116600090815260076020526040902055565b336114246000546001600160a01b031690565b6001600160a01b03161461144a5760405162461bcd60e51b815260040161092690612979565b816114a657806114a65760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206e617469766520746f6b656e732063616e2062652073746f7265646044820152602160f81b6064820152608401610926565b6001600160a01b039490941660009081526004602090815260408083208054600160ff19918216179091556005835281842080548216951515959095179094556006825280832080549094169615159690961790925560078252848120939093556008905291902055565b600154600160a01b900460ff161561155e5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610926565b60008061156c878787611b27565b60405191935091506001600160701b038316907f527e633d8513f28e14b16d38843a6e5c1c9db79ecb610ef26e171e836f93d9a2906115b090849088908890612a0f565b60405180910390a250505050505050565b336115d46000546001600160a01b031690565b6001600160a01b0316146115fa5760405162461bcd60e51b815260040161092690612979565b606461ffff821611156116455760405162461bcd60e51b8152602060048201526013602482015272084c2e8c6d040e6d2f4ca40e8dede40d0d2ced606b1b6044820152606401610926565b6002805461ffff909216600160401b0269ffff000000000000000019909216919091179055565b6000336116816001546001600160a01b031690565b6001600160a01b0316146116e35760405162461bcd60e51b8152602060048201526024808201527f41636365737320436f6e74726f6c3a2073656e646572206973206e6f742042726044820152636964676560e01b6064820152608401610926565b6001600160a01b03841660009081526005602052604090205460ff166117655783600061171a6001600160a01b03831685876122d2565b90508061172c57600092505050611862565b6001600160a01b03861660009081526009602052604081208054879290611754908490612966565b909155506001935061186292505050565b6001600160a01b03841660009081526006602052604090205460ff1615611811576001600160a01b0384166000908152600a60205260409020546117aa9084906129bc565b6001600160a01b0385166000908152600b602052604090205410156118115760405162461bcd60e51b815260206004820152601860248201527f4e6f7420656e6f756768206275726e656420746f6b656e7300000000000000006044820152606401610926565b600061181e8584866123b9565b90508061182f576000915050611862565b6001600160a01b0385166000908152600a6020526040812080548692906118579084906129bc565b909155506001925050505b9392505050565b3361187c6000546001600160a01b031690565b6001600160a01b0316146118a25760405162461bcd60e51b815260040161092690612979565b60025460ff600160581b909104811690821611156119285760405162461bcd60e51b815260206004820152603760248201527f43616e6e6f7420696e63726561736520626174636820626c6f636b206c696d6960448201527f74206f76657220736574746c656d656e74206c696d69740000000000000000006064820152608401610926565b6002805460ff909216600160501b0260ff60501b19909216919091179055565b3361195b6000546001600160a01b031690565b6001600160a01b0316146119815760405162461bcd60e51b815260040161092690612979565b600154600160a01b900460ff166119d15760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610926565b6119d9611018565b15611a425760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f74206368616e6765206261746368536574746c654c696d697420776044820152726974682070656e64696e67206261746368657360681b6064820152608401610926565b60025460ff600160501b90910481169082161015611ad65760405162461bcd60e51b815260206004820152604560248201527f43616e6e6f74206465637265617365206261746368536574746c654c696d697460448201527f20756e646572207468652076616c7565206f6620626174636820626c6f636b206064820152641b1a5b5a5d60da1b608482015260a401610926565b6002805460ff909216600160581b0260ff60581b19909216919091179055565b60025460408201516000914391611b1791600160581b900460ff1690612a4e565b6001600160401b03161092915050565b6001600160a01b038316600090815260046020526040812054819060ff16611b855760405162461bcd60e51b81526020600482015260116024820152702ab739bab83837b93a32b2103a37b5b2b760791b6044820152606401610926565b6001600160a01b038516600090815260076020526040902054841015611c135760405162461bcd60e51b815260206004820152603c60248201527f547269656420746f206465706f73697420616e20616d6f756e742062656c6f7760448201527f20746865206d696e696d756d20737065636966696564206c696d6974000000006064820152608401610926565b6001600160a01b038516600090815260086020526040902054841115611ca15760405162461bcd60e51b815260206004820152603c60248201527f547269656420746f206465706f73697420616e20616d6f756e742061626f766560448201527f20746865206d6178696d756d20737065636966696564206c696d6974000000006064820152608401610926565b436000611cac6121f3565b15611d49575060018054600160a81b90046001600160401b0316600081815260036020526040902091611cdf9190612a4e565b81546001600160401b039182166001600160b01b031990911617600160701b8483160217825560018054600160a81b9004909116906015611d1f83612a6e565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050611d87565b60018054600391600091611d6d9190600160a81b90046001600160401b03166129e8565b6001600160401b0316815260200190815260200160002090505b600254600090611da1906001600160401b03166001612a4e565b6001600160401b03169050600c600060018060159054906101000a90046001600160401b0316611dd191906129e8565b6001600160401b031681526020019081526020016000206040518060c00160405280836001600160701b031681526020018a6001600160a01b03168152602001898152602001336001600160a01b0316815260200188815260200160016004811115611e3f57611e3f6125ea565b90528154600181810184556000938452602093849020835160069093020180546001600160701b039093166dffffffffffffffffffffffffffff199093169290921782559282015181840180546001600160a01b039283166001600160a01b031991821617909155604084015160028401556060840151600384018054919093169116179055608082015160048083019190915560a0830151600583018054949593949193909260ff19909216918490811115611efe57611efe6125ea565b021790555050825467ffffffffffffffff60b01b1916600160b01b6001600160401b0386160217808455600160f01b900461ffff16905082601e611f4183612a94565b825461ffff9182166101009390930a928302919092021990911617905550600280546001600160401b0316906000611f7883612a6e565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050611fbf886001600160a01b031660009081526005602052604090205460ff1690565b61200d576001600160a01b03881660009081526009602052604081208054899290611feb9084906129bc565b909155508890506120076001600160a01b03821633308b61215b565b50612144565b6001600160a01b03881660009081526006602052604090205460ff166120b3576001600160a01b0388166000908152600b60205260409020546120519088906129bc565b6001600160a01b0389166000908152600a602052604090205410156120b35760405162461bcd60e51b81526020600482015260186024820152774e6f7420656e6f756768206d696e74656420746f6b656e7360401b6044820152606401610926565b6001600160a01b0388166000908152600b6020526040812080548992906120db9084906129bc565b909155505060405163079cc67960e41b81523360048201526024810188905288906001600160a01b038216906379cc679090604401600060405180830381600087803b15801561212a57600080fd5b505af115801561213e573d6000803e3d6000fd5b50505050505b90546001600160701b031697909650945050505050565b6040516001600160a01b038481166024830152838116604483015260648201839052610fbd9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612431565b6040516001600160a01b03838116602483015260448201839052610bca91859182169063a9059cbb90606401612190565b600154600090600160a81b90046001600160401b031681036122155750600190565b60018054600091600391839161223a91600160a81b90046001600160401b03166129e8565b6001600160401b0390811682526020808301939093526040918201600020825160808101845290546001600160701b0381168252600160701b81048316948201859052600160b01b810490921692810192909252600160f01b900461ffff16606082018190529092506122ac91612494565b806122cc5750600254606082015161ffff600160401b9092048216911610155b91505090565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283928392918816916123309190612aab565b6000604051808303816000865af19150503d806000811461236d576040519150601f19603f3d011682016040523d82523d6000602084013e612372565b606091505b50915091508161238757600092505050611862565b805160000361239b57600192505050611862565b808060200190518101906123af9190612ada565b9695505050505050565b6040516340c10f1960e01b81526001600160a01b0383811660048301526024820183905260009185918216906340c10f1990604401600060405180830381600087803b15801561240857600080fd5b505af1925050508015612419575060015b612427576000915050611862565b6001915050611862565b60006124466001600160a01b038416836124d6565b9050805160001415801561246b5750808060200190518101906124699190612ada565b155b15610bca57604051635274afe760e01b81526001600160a01b0384166004820152602401610926565b60008261ffff166000036124aa575060006124d0565b60025443906124c390600160501b900460ff1684612a4e565b6001600160401b03161090505b92915050565b60606118628383600084600080856001600160a01b031684866040516124fc9190612aab565b60006040518083038185875af1925050503d8060008114612539576040519150601f19603f3d011682016040523d82523d6000602084013e61253e565b606091505b50915091506123af86838360608261255e57612559826125a5565b611862565b815115801561257557506001600160a01b0384163b155b1561259e57604051639996b31560e01b81526001600160a01b0385166004820152602401610926565b5080611862565b8051156125b55780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6000602082840312156125e357600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6005811061261e57634e487b7160e01b600052602160045260246000fd5b9052565b6040808252835182820181905260009190606090818501906020808901865b838110156126ae57815180516001600160701b03168652838101516001600160a01b039081168588015288820151898801528782015116878701526080808201519087015260a0908101519061269981880183612600565b505060c0949094019390820190600101612641565b50508295506126c08188018915159052565b50505050509392505050565b80356001600160a01b03811681146126e357600080fd5b919050565b6000806000606084860312156126fd57600080fd5b612706846126cc565b95602085013595506040909401359392505050565b6000806040838503121561272e57600080fd5b50508035926020909101359150565b6001600160701b03871681526001600160a01b03868116602083015260408201869052841660608201526080810183905260c0810161277f60a0830184612600565b979650505050505050565b60006020828403121561279c57600080fd5b611862826126cc565b600080604083850312156127b857600080fd5b6127c1836126cc565b946020939093013593505050565b80151581146125ce57600080fd5b600080600080600060a086880312156127f557600080fd5b6127fe866126cc565b94506020860135935060408601359250606086013561281c816127cf565b9150608086013561282c816127cf565b809150509295509295909350565b60008060008060006080868803121561285257600080fd5b61285b866126cc565b9450602086013593506040860135925060608601356001600160401b038082111561288557600080fd5b818801915088601f83011261289957600080fd5b8135818111156128a857600080fd5b8960208285010111156128ba57600080fd5b9699959850939650602001949392505050565b6000602082840312156128df57600080fd5b813561ffff8116811461186257600080fd5b60008060006060848603121561290657600080fd5b61290f846126cc565b925060208401359150612924604085016126cc565b90509250925092565b60006020828403121561293f57600080fd5b813560ff8116811461186257600080fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156124d0576124d0612950565b60208082526023908201527f41636365737320436f6e74726f6c3a2073656e646572206973206e6f7420416460408201526236b4b760e91b606082015260800190565b808201808211156124d0576124d0612950565b6000602082840312156129e157600080fd5b5051919050565b6001600160401b03828116828216039080821115612a0857612a08612950565b5092915050565b6001600160701b038416815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6001600160401b03818116838216019080821115612a0857612a08612950565b60006001600160401b03808316818103612a8a57612a8a612950565b6001019392505050565b600061ffff808316818103612a8a57612a8a612950565b6000825160005b81811015612acc5760208186018101518583015201612ab2565b506000920191825250919050565b600060208284031215612aec57600080fd5b8151611862816127cf56fea164736f6c6343000814000a", + "bytecode": "0x60806040526002805463ffffffff60401b19166b2828000a000000000000000017905534801561002e57600080fd5b50600080546001600160a01b031916339081178255604051909182917fe379ac64de02d8184ca1a871ac486cb8137de77e485ede140e97057b9c765ffd908290a3506001805460ff60a01b1916600160a01b179055612b04806100926000396000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c80639ab7cfaa11610146578063c86726f6116100c3578063e78cea9211610087578063e78cea92146106b6578063e8a70ee2146106db578063f2e0ec48146106ee578063f4daaba114610701578063f6246ea114610729578063f851a4401461074957600080fd5b8063c86726f61461062a578063cf6682a21461064d578063d4673de91461066d578063daf9c21014610680578063dbba0f01146106a357600080fd5b8063b5af090f1161010a578063b5af090f14610582578063bc56602f146105ae578063c639651d146105ce578063c652a0b5146105ee578063c859b3fe1461061757600080fd5b80639ab7cfaa146104755780639f0ebb9314610489578063a7c3a06f146104c0578063aee9c872146104d3578063b32c4d8d146104f357600080fd5b806375829def116101d457806387ea09611161019857806387ea09611461040a5780638bad0c0a146104245780638dd148021461042c57806390e0cfcb1461043f578063920b03081461046257600080fd5b806375829def146103c1578063770be784146103d45780637d7763ce146103e757806382146138146103fa5780638456cb591461040257600080fd5b80633f4ba83a1161021b5780633f4ba83a146102f55780634013c89c146102fd5780634506e935146103105780635ac442821461033b5780635c975abb146103a357600080fd5b8063085c967f146102585780632325b5f71461028257806326b3293f146102a8578063284c0c44146102bd578063306275be146102e2575b600080fd5b61026b6102663660046125d1565b61075a565b604051610279929190612622565b60405180910390f35b60025461029690600160581b900460ff1681565b60405160ff9091168152602001610279565b6102bb6102b63660046126e8565b6108dd565b005b6102d06102cb36600461271b565b61098d565b6040516102799695949392919061273d565b6102bb6102f036600461278a565b6109fa565b6102bb610a54565b6102bb61030b3660046127a5565b610ad1565b600254610323906001600160401b031681565b6040516001600160401b039091168152602001610279565b61034e6103493660046125d1565b610d09565b6040805183516001600160701b031681526020808501516001600160401b039081169183019190915284830151169181019190915260609283015161ffff16928101929092521515608082015260a001610279565b600154600160a01b900460ff165b6040519015158152602001610279565b6102bb6103cf36600461278a565b610db6565b6102bb6103e236600461278a565b610eb1565b6102bb6103f53660046127a5565b610fc3565b6103b1611018565b6102bb6110f8565b60015461032390600160a81b90046001600160401b031681565b6102bb611174565b6102bb61043a36600461278a565b6111f7565b6103b161044d36600461278a565b60056020526000908152604090205460ff1681565b6102bb6104703660046127a5565b6113bc565b60025461029690600160501b900460ff1681565b6104b261049736600461278a565b6001600160a01b031660009081526007602052604090205490565b604051908152602001610279565b6102bb6104ce3660046127dd565b611411565b6104b26104e136600461278a565b60096020526000908152604090205481565b6105476105013660046125d1565b6003602052600090815260409020546001600160701b038116906001600160401b03600160701b8204811691600160b01b81049091169061ffff600160f01b9091041684565b604080516001600160701b039590951685526001600160401b039384166020860152919092169083015261ffff166060820152608001610279565b6103b161059036600461278a565b6001600160a01b031660009081526004602052604090205460ff1690565b6104b26105bc36600461278a565b600a6020526000908152604090205481565b6104b26105dc36600461278a565b60086020526000908152604090205481565b6104b26105fc36600461278a565b6001600160a01b031660009081526008602052604090205490565b6102bb61062536600461283a565b611511565b6103b161063836600461278a565b60066020526000908152604090205460ff1681565b6104b261065b36600461278a565b600b6020526000908152604090205481565b6102bb61067b3660046128cd565b6115c1565b6103b161068e36600461278a565b60046020526000908152604090205460ff1681565b6103b16106b13660046128f1565b61166c565b6001546001600160a01b03165b6040516001600160a01b039091168152602001610279565b6102bb6106e936600461292d565b611869565b6102bb6106fc36600461292d565b611948565b60025461071690600160401b900461ffff1681565b60405161ffff9091168152602001610279565b6104b261073736600461278a565b60076020526000908152604090205481565b6000546001600160a01b03166106c3565b606060008060038161076d600187612966565b815260208082019290925260409081016000908120825160808101845290546001600160701b0381168252600160701b81046001600160401b0390811695830195909552600160b01b810490941692810192909252600160f01b90920461ffff1660608201529150600c906107e3600187612966565b81526020019081526020016000206107fa82611af6565b81805480602002602001604051908101604052809291908181526020016000905b828210156108cd5760008481526020908190206040805160c0810182526006860290920180546001600160701b0316835260018101546001600160a01b0390811694840194909452600281015491830191909152600381015490921660608201526004808301546080830152600583015491929160a084019160ff909116908111156108a9576108a96125ea565b60048111156108ba576108ba6125ea565b815250508152602001906001019061081b565b5050505091509250925050915091565b600154600160a01b900460ff161561092f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064015b60405180910390fd5b60008061093d858585611b27565b604080516001600160701b038084168252841660208201529294509092507f6c15ce44793c685a79cde26a0bd5419ef4f3a337991f156be7b365962001b4a7910160405180910390a15050505050565b600c60205281600052604060002081815481106109a957600080fd5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160701b0390941696506001600160a01b039283169550909391169160ff1686565b33610a0d6000546001600160a01b031690565b6001600160a01b031614610a335760405162461bcd60e51b815260040161092690612979565b6001600160a01b03166000908152600460205260409020805460ff19169055565b33610a676000546001600160a01b031690565b6001600160a01b031614610a8d5760405162461bcd60e51b815260040161092690612979565b6001805460ff60a01b19169055604051600081527f9422424b175dda897495a07b091ef74a3ef715cf6d866fc972954c1c7f459304906020015b60405180910390a1565b33610ae46000546001600160a01b031690565b6001600160a01b031614610b0a5760405162461bcd60e51b815260040161092690612979565b6001600160a01b03821660009081526004602052604090205460ff16610b665760405162461bcd60e51b81526020600482015260116024820152702ab739bab83837b93a32b2103a37b5b2b760791b6044820152606401610926565b6001600160a01b03821660009081526005602052604090205460ff16610bcf576001600160a01b03821660009081526009602052604081208054839290610bae9084906129bc565b90915550829050610bca6001600160a01b03821633308561215b565b505050565b6001600160a01b03821660009081526006602052604090205460ff16610c75576001600160a01b0382166000908152600b6020526040902054610c139082906129bc565b6001600160a01b0383166000908152600a60205260409020541015610c755760405162461bcd60e51b81526020600482015260186024820152774e6f7420656e6f756768206d696e74656420746f6b656e7360401b6044820152606401610926565b6001600160a01b0382166000908152600b602052604081208054839290610c9d9084906129bc565b909155505060405163079cc67960e41b81523360048201526024810182905282906001600160a01b038216906379cc679090604401600060405180830381600087803b158015610cec57600080fd5b505af1158015610d00573d6000803e3d6000fd5b50505050505050565b60408051608081018252600080825260208201819052918101829052606081018290529080600381610d3c600187612966565b81526020808201929092526040908101600020815160808101835290546001600160701b0381168252600160701b81046001600160401b0390811694830194909452600160b01b810490931691810191909152600160f01b90910461ffff166060820152905080610dac81611af6565b9250925050915091565b33610dc96000546001600160a01b031690565b6001600160a01b031614610def5760405162461bcd60e51b815260040161092690612979565b6001600160a01b038116610e565760405162461bcd60e51b815260206004820152602860248201527f41646d696e526f6c653a206e65772061646d696e20697320746865207a65726f604482015267206164647265737360c01b6064820152608401610926565b600080546040516001600160a01b03808516939216917fe379ac64de02d8184ca1a871ac486cb8137de77e485ede140e97057b9c765ffd91a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b33610ec46000546001600160a01b031690565b6001600160a01b031614610eea5760405162461bcd60e51b815260040161092690612979565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5791906129cf565b6001600160a01b0384166000908152600460205260408120549192509060ff1615610fa6576001600160a01b038416600090815260096020526040902054610f9f9083612966565b9050610fa9565b50805b610fbd6001600160a01b03841633836121c2565b50505050565b33610fd66000546001600160a01b031690565b6001600160a01b031614610ffc5760405162461bcd60e51b815260040161092690612979565b6001600160a01b03909116600090815260086020526040902055565b600154600090600160a81b90046001600160401b0316810361103a5750600090565b60018054600091600391839161105f91600160a81b90046001600160401b03166129e8565b6001600160401b0390811682526020808301939093526040918201600020825160808101845290546001600160701b0381168252600160701b8104831694820194909452600160b01b840490911691810191909152600160f01b90910461ffff16606082015290506110cf6121f3565b6110db57600191505090565b6110e481611af6565b6110f057600191505090565b600091505090565b3361110b6000546001600160a01b031690565b6001600160a01b0316146111315760405162461bcd60e51b815260040161092690612979565b6001805460ff60a01b1916600160a01b1781556040519081527f9422424b175dda897495a07b091ef74a3ef715cf6d866fc972954c1c7f45930490602001610ac7565b336111876000546001600160a01b031690565b6001600160a01b0316146111ad5760405162461bcd60e51b815260040161092690612979565b600080546040516001600160a01b03909116907fe379ac64de02d8184ca1a871ac486cb8137de77e485ede140e97057b9c765ffd908390a3600080546001600160a01b0319169055565b3361120a6000546001600160a01b031690565b6001600160a01b0316146112305760405162461bcd60e51b815260040161092690612979565b6001600160a01b0381166112995760405162461bcd60e51b815260206004820152602a60248201527f427269646765526f6c653a206e65772062726964676520697320746865207a65604482015269726f206164647265737360b01b6064820152608401610926565b6001546001600160a01b03908116908216036112f75760405162461bcd60e51b815260206004820152601860248201527f427269646765526f6c653a2073616d65206164647265737300000000000000006044820152606401610926565b6001600160a01b0381163b6113605760405162461bcd60e51b815260206004820152602960248201527f427269646765526f6c653a206e657720627269646765206d75737420626520616044820152680818dbdb9d1c9858dd60ba1b6064820152608401610926565b6001546040516001600160a01b038084169216907fcca5fddab921a878ddbd4edb737a2cf3ac6df70864f108606647d1b37a5e07a090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b336113cf6000546001600160a01b031690565b6001600160a01b0316146113f55760405162461bcd60e51b815260040161092690612979565b6001600160a01b03909116600090815260076020526040902055565b336114246000546001600160a01b031690565b6001600160a01b03161461144a5760405162461bcd60e51b815260040161092690612979565b816114a657806114a65760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206e617469766520746f6b656e732063616e2062652073746f7265646044820152602160f81b6064820152608401610926565b6001600160a01b039490941660009081526004602090815260408083208054600160ff19918216179091556005835281842080548216951515959095179094556006825280832080549094169615159690961790925560078252848120939093556008905291902055565b600154600160a01b900460ff161561155e5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610926565b60008061156c878787611b27565b60405191935091506001600160701b038316907fce848da21487607afba5c5a500c2ad1002d9b8db97ca5512671309df071113b2906115b090849088908890612a0f565b60405180910390a250505050505050565b336115d46000546001600160a01b031690565b6001600160a01b0316146115fa5760405162461bcd60e51b815260040161092690612979565b606461ffff821611156116455760405162461bcd60e51b8152602060048201526013602482015272084c2e8c6d040e6d2f4ca40e8dede40d0d2ced606b1b6044820152606401610926565b6002805461ffff909216600160401b0269ffff000000000000000019909216919091179055565b6000336116816001546001600160a01b031690565b6001600160a01b0316146116e35760405162461bcd60e51b8152602060048201526024808201527f41636365737320436f6e74726f6c3a2073656e646572206973206e6f742042726044820152636964676560e01b6064820152608401610926565b6001600160a01b03841660009081526005602052604090205460ff166117655783600061171a6001600160a01b03831685876122d2565b90508061172c57600092505050611862565b6001600160a01b03861660009081526009602052604081208054879290611754908490612966565b909155506001935061186292505050565b6001600160a01b03841660009081526006602052604090205460ff1615611811576001600160a01b0384166000908152600a60205260409020546117aa9084906129bc565b6001600160a01b0385166000908152600b602052604090205410156118115760405162461bcd60e51b815260206004820152601860248201527f4e6f7420656e6f756768206275726e656420746f6b656e7300000000000000006044820152606401610926565b600061181e8584866123b9565b90508061182f576000915050611862565b6001600160a01b0385166000908152600a6020526040812080548692906118579084906129bc565b909155506001925050505b9392505050565b3361187c6000546001600160a01b031690565b6001600160a01b0316146118a25760405162461bcd60e51b815260040161092690612979565b60025460ff600160581b909104811690821611156119285760405162461bcd60e51b815260206004820152603760248201527f43616e6e6f7420696e63726561736520626174636820626c6f636b206c696d6960448201527f74206f76657220736574746c656d656e74206c696d69740000000000000000006064820152608401610926565b6002805460ff909216600160501b0260ff60501b19909216919091179055565b3361195b6000546001600160a01b031690565b6001600160a01b0316146119815760405162461bcd60e51b815260040161092690612979565b600154600160a01b900460ff166119d15760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610926565b6119d9611018565b15611a425760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f74206368616e6765206261746368536574746c654c696d697420776044820152726974682070656e64696e67206261746368657360681b6064820152608401610926565b60025460ff600160501b90910481169082161015611ad65760405162461bcd60e51b815260206004820152604560248201527f43616e6e6f74206465637265617365206261746368536574746c654c696d697460448201527f20756e646572207468652076616c7565206f6620626174636820626c6f636b206064820152641b1a5b5a5d60da1b608482015260a401610926565b6002805460ff909216600160581b0260ff60581b19909216919091179055565b60025460408201516000914391611b1791600160581b900460ff1690612a4e565b6001600160401b03161092915050565b6001600160a01b038316600090815260046020526040812054819060ff16611b855760405162461bcd60e51b81526020600482015260116024820152702ab739bab83837b93a32b2103a37b5b2b760791b6044820152606401610926565b6001600160a01b038516600090815260076020526040902054841015611c135760405162461bcd60e51b815260206004820152603c60248201527f547269656420746f206465706f73697420616e20616d6f756e742062656c6f7760448201527f20746865206d696e696d756d20737065636966696564206c696d6974000000006064820152608401610926565b6001600160a01b038516600090815260086020526040902054841115611ca15760405162461bcd60e51b815260206004820152603c60248201527f547269656420746f206465706f73697420616e20616d6f756e742061626f766560448201527f20746865206d6178696d756d20737065636966696564206c696d6974000000006064820152608401610926565b436000611cac6121f3565b15611d49575060018054600160a81b90046001600160401b0316600081815260036020526040902091611cdf9190612a4e565b81546001600160401b039182166001600160b01b031990911617600160701b8483160217825560018054600160a81b9004909116906015611d1f83612a6e565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050611d87565b60018054600391600091611d6d9190600160a81b90046001600160401b03166129e8565b6001600160401b0316815260200190815260200160002090505b600254600090611da1906001600160401b03166001612a4e565b6001600160401b03169050600c600060018060159054906101000a90046001600160401b0316611dd191906129e8565b6001600160401b031681526020019081526020016000206040518060c00160405280836001600160701b031681526020018a6001600160a01b03168152602001898152602001336001600160a01b0316815260200188815260200160016004811115611e3f57611e3f6125ea565b90528154600181810184556000938452602093849020835160069093020180546001600160701b039093166dffffffffffffffffffffffffffff199093169290921782559282015181840180546001600160a01b039283166001600160a01b031991821617909155604084015160028401556060840151600384018054919093169116179055608082015160048083019190915560a0830151600583018054949593949193909260ff19909216918490811115611efe57611efe6125ea565b021790555050825467ffffffffffffffff60b01b1916600160b01b6001600160401b0386160217808455600160f01b900461ffff16905082601e611f4183612a94565b825461ffff9182166101009390930a928302919092021990911617905550600280546001600160401b0316906000611f7883612a6e565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050611fbf886001600160a01b031660009081526005602052604090205460ff1690565b61200d576001600160a01b03881660009081526009602052604081208054899290611feb9084906129bc565b909155508890506120076001600160a01b03821633308b61215b565b50612144565b6001600160a01b03881660009081526006602052604090205460ff166120b3576001600160a01b0388166000908152600b60205260409020546120519088906129bc565b6001600160a01b0389166000908152600a602052604090205410156120b35760405162461bcd60e51b81526020600482015260186024820152774e6f7420656e6f756768206d696e74656420746f6b656e7360401b6044820152606401610926565b6001600160a01b0388166000908152600b6020526040812080548992906120db9084906129bc565b909155505060405163079cc67960e41b81523360048201526024810188905288906001600160a01b038216906379cc679090604401600060405180830381600087803b15801561212a57600080fd5b505af115801561213e573d6000803e3d6000fd5b50505050505b90546001600160701b031697909650945050505050565b6040516001600160a01b038481166024830152838116604483015260648201839052610fbd9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612431565b6040516001600160a01b03838116602483015260448201839052610bca91859182169063a9059cbb90606401612190565b600154600090600160a81b90046001600160401b031681036122155750600190565b60018054600091600391839161223a91600160a81b90046001600160401b03166129e8565b6001600160401b0390811682526020808301939093526040918201600020825160808101845290546001600160701b0381168252600160701b81048316948201859052600160b01b810490921692810192909252600160f01b900461ffff16606082018190529092506122ac91612494565b806122cc5750600254606082015161ffff600160401b9092048216911610155b91505090565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283928392918816916123309190612aab565b6000604051808303816000865af19150503d806000811461236d576040519150601f19603f3d011682016040523d82523d6000602084013e612372565b606091505b50915091508161238757600092505050611862565b805160000361239b57600192505050611862565b808060200190518101906123af9190612ada565b9695505050505050565b6040516340c10f1960e01b81526001600160a01b0383811660048301526024820183905260009185918216906340c10f1990604401600060405180830381600087803b15801561240857600080fd5b505af1925050508015612419575060015b612427576000915050611862565b6001915050611862565b60006124466001600160a01b038416836124d6565b9050805160001415801561246b5750808060200190518101906124699190612ada565b155b15610bca57604051635274afe760e01b81526001600160a01b0384166004820152602401610926565b60008261ffff166000036124aa575060006124d0565b60025443906124c390600160501b900460ff1684612a4e565b6001600160401b03161090505b92915050565b60606118628383600084600080856001600160a01b031684866040516124fc9190612aab565b60006040518083038185875af1925050503d8060008114612539576040519150601f19603f3d011682016040523d82523d6000602084013e61253e565b606091505b50915091506123af86838360608261255e57612559826125a5565b611862565b815115801561257557506001600160a01b0384163b155b1561259e57604051639996b31560e01b81526001600160a01b0385166004820152602401610926565b5080611862565b8051156125b55780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6000602082840312156125e357600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6005811061261e57634e487b7160e01b600052602160045260246000fd5b9052565b6040808252835182820181905260009190606090818501906020808901865b838110156126ae57815180516001600160701b03168652838101516001600160a01b039081168588015288820151898801528782015116878701526080808201519087015260a0908101519061269981880183612600565b505060c0949094019390820190600101612641565b50508295506126c08188018915159052565b50505050509392505050565b80356001600160a01b03811681146126e357600080fd5b919050565b6000806000606084860312156126fd57600080fd5b612706846126cc565b95602085013595506040909401359392505050565b6000806040838503121561272e57600080fd5b50508035926020909101359150565b6001600160701b03871681526001600160a01b03868116602083015260408201869052841660608201526080810183905260c0810161277f60a0830184612600565b979650505050505050565b60006020828403121561279c57600080fd5b611862826126cc565b600080604083850312156127b857600080fd5b6127c1836126cc565b946020939093013593505050565b80151581146125ce57600080fd5b600080600080600060a086880312156127f557600080fd5b6127fe866126cc565b94506020860135935060408601359250606086013561281c816127cf565b9150608086013561282c816127cf565b809150509295509295909350565b60008060008060006080868803121561285257600080fd5b61285b866126cc565b9450602086013593506040860135925060608601356001600160401b038082111561288557600080fd5b818801915088601f83011261289957600080fd5b8135818111156128a857600080fd5b8960208285010111156128ba57600080fd5b9699959850939650602001949392505050565b6000602082840312156128df57600080fd5b813561ffff8116811461186257600080fd5b60008060006060848603121561290657600080fd5b61290f846126cc565b925060208401359150612924604085016126cc565b90509250925092565b60006020828403121561293f57600080fd5b813560ff8116811461186257600080fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156124d0576124d0612950565b60208082526023908201527f41636365737320436f6e74726f6c3a2073656e646572206973206e6f7420416460408201526236b4b760e91b606082015260800190565b808201808211156124d0576124d0612950565b6000602082840312156129e157600080fd5b5051919050565b6001600160401b03828116828216039080821115612a0857612a08612950565b5092915050565b6001600160701b038416815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6001600160401b03818116838216019080821115612a0857612a08612950565b60006001600160401b03808316818103612a8a57612a8a612950565b6001019392505050565b600061ffff808316818103612a8a57612a8a612950565b6000825160005b81811015612acc5760208186018101518583015201612ab2565b506000920191825250919050565b600060208284031215612aec57600080fd5b8151611862816127cf56fea164736f6c6343000814000a", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102535760003560e01c80639ab7cfaa11610146578063c86726f6116100c3578063e78cea9211610087578063e78cea92146106b6578063e8a70ee2146106db578063f2e0ec48146106ee578063f4daaba114610701578063f6246ea114610729578063f851a4401461074957600080fd5b8063c86726f61461062a578063cf6682a21461064d578063d4673de91461066d578063daf9c21014610680578063dbba0f01146106a357600080fd5b8063b5af090f1161010a578063b5af090f14610582578063bc56602f146105ae578063c639651d146105ce578063c652a0b5146105ee578063c859b3fe1461061757600080fd5b80639ab7cfaa146104755780639f0ebb9314610489578063a7c3a06f146104c0578063aee9c872146104d3578063b32c4d8d146104f357600080fd5b806375829def116101d457806387ea09611161019857806387ea09611461040a5780638bad0c0a146104245780638dd148021461042c57806390e0cfcb1461043f578063920b03081461046257600080fd5b806375829def146103c1578063770be784146103d45780637d7763ce146103e757806382146138146103fa5780638456cb591461040257600080fd5b80633f4ba83a1161021b5780633f4ba83a146102f55780634013c89c146102fd5780634506e935146103105780635ac442821461033b5780635c975abb146103a357600080fd5b8063085c967f146102585780632325b5f71461028257806326b3293f146102a8578063284c0c44146102bd578063306275be146102e2575b600080fd5b61026b6102663660046125d1565b61075a565b604051610279929190612622565b60405180910390f35b60025461029690600160581b900460ff1681565b60405160ff9091168152602001610279565b6102bb6102b63660046126e8565b6108dd565b005b6102d06102cb36600461271b565b61098d565b6040516102799695949392919061273d565b6102bb6102f036600461278a565b6109fa565b6102bb610a54565b6102bb61030b3660046127a5565b610ad1565b600254610323906001600160401b031681565b6040516001600160401b039091168152602001610279565b61034e6103493660046125d1565b610d09565b6040805183516001600160701b031681526020808501516001600160401b039081169183019190915284830151169181019190915260609283015161ffff16928101929092521515608082015260a001610279565b600154600160a01b900460ff165b6040519015158152602001610279565b6102bb6103cf36600461278a565b610db6565b6102bb6103e236600461278a565b610eb1565b6102bb6103f53660046127a5565b610fc3565b6103b1611018565b6102bb6110f8565b60015461032390600160a81b90046001600160401b031681565b6102bb611174565b6102bb61043a36600461278a565b6111f7565b6103b161044d36600461278a565b60056020526000908152604090205460ff1681565b6102bb6104703660046127a5565b6113bc565b60025461029690600160501b900460ff1681565b6104b261049736600461278a565b6001600160a01b031660009081526007602052604090205490565b604051908152602001610279565b6102bb6104ce3660046127dd565b611411565b6104b26104e136600461278a565b60096020526000908152604090205481565b6105476105013660046125d1565b6003602052600090815260409020546001600160701b038116906001600160401b03600160701b8204811691600160b01b81049091169061ffff600160f01b9091041684565b604080516001600160701b039590951685526001600160401b039384166020860152919092169083015261ffff166060820152608001610279565b6103b161059036600461278a565b6001600160a01b031660009081526004602052604090205460ff1690565b6104b26105bc36600461278a565b600a6020526000908152604090205481565b6104b26105dc36600461278a565b60086020526000908152604090205481565b6104b26105fc36600461278a565b6001600160a01b031660009081526008602052604090205490565b6102bb61062536600461283a565b611511565b6103b161063836600461278a565b60066020526000908152604090205460ff1681565b6104b261065b36600461278a565b600b6020526000908152604090205481565b6102bb61067b3660046128cd565b6115c1565b6103b161068e36600461278a565b60046020526000908152604090205460ff1681565b6103b16106b13660046128f1565b61166c565b6001546001600160a01b03165b6040516001600160a01b039091168152602001610279565b6102bb6106e936600461292d565b611869565b6102bb6106fc36600461292d565b611948565b60025461071690600160401b900461ffff1681565b60405161ffff9091168152602001610279565b6104b261073736600461278a565b60076020526000908152604090205481565b6000546001600160a01b03166106c3565b606060008060038161076d600187612966565b815260208082019290925260409081016000908120825160808101845290546001600160701b0381168252600160701b81046001600160401b0390811695830195909552600160b01b810490941692810192909252600160f01b90920461ffff1660608201529150600c906107e3600187612966565b81526020019081526020016000206107fa82611af6565b81805480602002602001604051908101604052809291908181526020016000905b828210156108cd5760008481526020908190206040805160c0810182526006860290920180546001600160701b0316835260018101546001600160a01b0390811694840194909452600281015491830191909152600381015490921660608201526004808301546080830152600583015491929160a084019160ff909116908111156108a9576108a96125ea565b60048111156108ba576108ba6125ea565b815250508152602001906001019061081b565b5050505091509250925050915091565b600154600160a01b900460ff161561092f5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064015b60405180910390fd5b60008061093d858585611b27565b604080516001600160701b038084168252841660208201529294509092507f6c15ce44793c685a79cde26a0bd5419ef4f3a337991f156be7b365962001b4a7910160405180910390a15050505050565b600c60205281600052604060002081815481106109a957600080fd5b60009182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160701b0390941696506001600160a01b039283169550909391169160ff1686565b33610a0d6000546001600160a01b031690565b6001600160a01b031614610a335760405162461bcd60e51b815260040161092690612979565b6001600160a01b03166000908152600460205260409020805460ff19169055565b33610a676000546001600160a01b031690565b6001600160a01b031614610a8d5760405162461bcd60e51b815260040161092690612979565b6001805460ff60a01b19169055604051600081527f9422424b175dda897495a07b091ef74a3ef715cf6d866fc972954c1c7f459304906020015b60405180910390a1565b33610ae46000546001600160a01b031690565b6001600160a01b031614610b0a5760405162461bcd60e51b815260040161092690612979565b6001600160a01b03821660009081526004602052604090205460ff16610b665760405162461bcd60e51b81526020600482015260116024820152702ab739bab83837b93a32b2103a37b5b2b760791b6044820152606401610926565b6001600160a01b03821660009081526005602052604090205460ff16610bcf576001600160a01b03821660009081526009602052604081208054839290610bae9084906129bc565b90915550829050610bca6001600160a01b03821633308561215b565b505050565b6001600160a01b03821660009081526006602052604090205460ff16610c75576001600160a01b0382166000908152600b6020526040902054610c139082906129bc565b6001600160a01b0383166000908152600a60205260409020541015610c755760405162461bcd60e51b81526020600482015260186024820152774e6f7420656e6f756768206d696e74656420746f6b656e7360401b6044820152606401610926565b6001600160a01b0382166000908152600b602052604081208054839290610c9d9084906129bc565b909155505060405163079cc67960e41b81523360048201526024810182905282906001600160a01b038216906379cc679090604401600060405180830381600087803b158015610cec57600080fd5b505af1158015610d00573d6000803e3d6000fd5b50505050505050565b60408051608081018252600080825260208201819052918101829052606081018290529080600381610d3c600187612966565b81526020808201929092526040908101600020815160808101835290546001600160701b0381168252600160701b81046001600160401b0390811694830194909452600160b01b810490931691810191909152600160f01b90910461ffff166060820152905080610dac81611af6565b9250925050915091565b33610dc96000546001600160a01b031690565b6001600160a01b031614610def5760405162461bcd60e51b815260040161092690612979565b6001600160a01b038116610e565760405162461bcd60e51b815260206004820152602860248201527f41646d696e526f6c653a206e65772061646d696e20697320746865207a65726f604482015267206164647265737360c01b6064820152608401610926565b600080546040516001600160a01b03808516939216917fe379ac64de02d8184ca1a871ac486cb8137de77e485ede140e97057b9c765ffd91a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b33610ec46000546001600160a01b031690565b6001600160a01b031614610eea5760405162461bcd60e51b815260040161092690612979565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5791906129cf565b6001600160a01b0384166000908152600460205260408120549192509060ff1615610fa6576001600160a01b038416600090815260096020526040902054610f9f9083612966565b9050610fa9565b50805b610fbd6001600160a01b03841633836121c2565b50505050565b33610fd66000546001600160a01b031690565b6001600160a01b031614610ffc5760405162461bcd60e51b815260040161092690612979565b6001600160a01b03909116600090815260086020526040902055565b600154600090600160a81b90046001600160401b0316810361103a5750600090565b60018054600091600391839161105f91600160a81b90046001600160401b03166129e8565b6001600160401b0390811682526020808301939093526040918201600020825160808101845290546001600160701b0381168252600160701b8104831694820194909452600160b01b840490911691810191909152600160f01b90910461ffff16606082015290506110cf6121f3565b6110db57600191505090565b6110e481611af6565b6110f057600191505090565b600091505090565b3361110b6000546001600160a01b031690565b6001600160a01b0316146111315760405162461bcd60e51b815260040161092690612979565b6001805460ff60a01b1916600160a01b1781556040519081527f9422424b175dda897495a07b091ef74a3ef715cf6d866fc972954c1c7f45930490602001610ac7565b336111876000546001600160a01b031690565b6001600160a01b0316146111ad5760405162461bcd60e51b815260040161092690612979565b600080546040516001600160a01b03909116907fe379ac64de02d8184ca1a871ac486cb8137de77e485ede140e97057b9c765ffd908390a3600080546001600160a01b0319169055565b3361120a6000546001600160a01b031690565b6001600160a01b0316146112305760405162461bcd60e51b815260040161092690612979565b6001600160a01b0381166112995760405162461bcd60e51b815260206004820152602a60248201527f427269646765526f6c653a206e65772062726964676520697320746865207a65604482015269726f206164647265737360b01b6064820152608401610926565b6001546001600160a01b03908116908216036112f75760405162461bcd60e51b815260206004820152601860248201527f427269646765526f6c653a2073616d65206164647265737300000000000000006044820152606401610926565b6001600160a01b0381163b6113605760405162461bcd60e51b815260206004820152602960248201527f427269646765526f6c653a206e657720627269646765206d75737420626520616044820152680818dbdb9d1c9858dd60ba1b6064820152608401610926565b6001546040516001600160a01b038084169216907fcca5fddab921a878ddbd4edb737a2cf3ac6df70864f108606647d1b37a5e07a090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b336113cf6000546001600160a01b031690565b6001600160a01b0316146113f55760405162461bcd60e51b815260040161092690612979565b6001600160a01b03909116600090815260076020526040902055565b336114246000546001600160a01b031690565b6001600160a01b03161461144a5760405162461bcd60e51b815260040161092690612979565b816114a657806114a65760405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206e617469766520746f6b656e732063616e2062652073746f7265646044820152602160f81b6064820152608401610926565b6001600160a01b039490941660009081526004602090815260408083208054600160ff19918216179091556005835281842080548216951515959095179094556006825280832080549094169615159690961790925560078252848120939093556008905291902055565b600154600160a01b900460ff161561155e5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610926565b60008061156c878787611b27565b60405191935091506001600160701b038316907fce848da21487607afba5c5a500c2ad1002d9b8db97ca5512671309df071113b2906115b090849088908890612a0f565b60405180910390a250505050505050565b336115d46000546001600160a01b031690565b6001600160a01b0316146115fa5760405162461bcd60e51b815260040161092690612979565b606461ffff821611156116455760405162461bcd60e51b8152602060048201526013602482015272084c2e8c6d040e6d2f4ca40e8dede40d0d2ced606b1b6044820152606401610926565b6002805461ffff909216600160401b0269ffff000000000000000019909216919091179055565b6000336116816001546001600160a01b031690565b6001600160a01b0316146116e35760405162461bcd60e51b8152602060048201526024808201527f41636365737320436f6e74726f6c3a2073656e646572206973206e6f742042726044820152636964676560e01b6064820152608401610926565b6001600160a01b03841660009081526005602052604090205460ff166117655783600061171a6001600160a01b03831685876122d2565b90508061172c57600092505050611862565b6001600160a01b03861660009081526009602052604081208054879290611754908490612966565b909155506001935061186292505050565b6001600160a01b03841660009081526006602052604090205460ff1615611811576001600160a01b0384166000908152600a60205260409020546117aa9084906129bc565b6001600160a01b0385166000908152600b602052604090205410156118115760405162461bcd60e51b815260206004820152601860248201527f4e6f7420656e6f756768206275726e656420746f6b656e7300000000000000006044820152606401610926565b600061181e8584866123b9565b90508061182f576000915050611862565b6001600160a01b0385166000908152600a6020526040812080548692906118579084906129bc565b909155506001925050505b9392505050565b3361187c6000546001600160a01b031690565b6001600160a01b0316146118a25760405162461bcd60e51b815260040161092690612979565b60025460ff600160581b909104811690821611156119285760405162461bcd60e51b815260206004820152603760248201527f43616e6e6f7420696e63726561736520626174636820626c6f636b206c696d6960448201527f74206f76657220736574746c656d656e74206c696d69740000000000000000006064820152608401610926565b6002805460ff909216600160501b0260ff60501b19909216919091179055565b3361195b6000546001600160a01b031690565b6001600160a01b0316146119815760405162461bcd60e51b815260040161092690612979565b600154600160a01b900460ff166119d15760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610926565b6119d9611018565b15611a425760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f74206368616e6765206261746368536574746c654c696d697420776044820152726974682070656e64696e67206261746368657360681b6064820152608401610926565b60025460ff600160501b90910481169082161015611ad65760405162461bcd60e51b815260206004820152604560248201527f43616e6e6f74206465637265617365206261746368536574746c654c696d697460448201527f20756e646572207468652076616c7565206f6620626174636820626c6f636b206064820152641b1a5b5a5d60da1b608482015260a401610926565b6002805460ff909216600160581b0260ff60581b19909216919091179055565b60025460408201516000914391611b1791600160581b900460ff1690612a4e565b6001600160401b03161092915050565b6001600160a01b038316600090815260046020526040812054819060ff16611b855760405162461bcd60e51b81526020600482015260116024820152702ab739bab83837b93a32b2103a37b5b2b760791b6044820152606401610926565b6001600160a01b038516600090815260076020526040902054841015611c135760405162461bcd60e51b815260206004820152603c60248201527f547269656420746f206465706f73697420616e20616d6f756e742062656c6f7760448201527f20746865206d696e696d756d20737065636966696564206c696d6974000000006064820152608401610926565b6001600160a01b038516600090815260086020526040902054841115611ca15760405162461bcd60e51b815260206004820152603c60248201527f547269656420746f206465706f73697420616e20616d6f756e742061626f766560448201527f20746865206d6178696d756d20737065636966696564206c696d6974000000006064820152608401610926565b436000611cac6121f3565b15611d49575060018054600160a81b90046001600160401b0316600081815260036020526040902091611cdf9190612a4e565b81546001600160401b039182166001600160b01b031990911617600160701b8483160217825560018054600160a81b9004909116906015611d1f83612a6e565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050611d87565b60018054600391600091611d6d9190600160a81b90046001600160401b03166129e8565b6001600160401b0316815260200190815260200160002090505b600254600090611da1906001600160401b03166001612a4e565b6001600160401b03169050600c600060018060159054906101000a90046001600160401b0316611dd191906129e8565b6001600160401b031681526020019081526020016000206040518060c00160405280836001600160701b031681526020018a6001600160a01b03168152602001898152602001336001600160a01b0316815260200188815260200160016004811115611e3f57611e3f6125ea565b90528154600181810184556000938452602093849020835160069093020180546001600160701b039093166dffffffffffffffffffffffffffff199093169290921782559282015181840180546001600160a01b039283166001600160a01b031991821617909155604084015160028401556060840151600384018054919093169116179055608082015160048083019190915560a0830151600583018054949593949193909260ff19909216918490811115611efe57611efe6125ea565b021790555050825467ffffffffffffffff60b01b1916600160b01b6001600160401b0386160217808455600160f01b900461ffff16905082601e611f4183612a94565b825461ffff9182166101009390930a928302919092021990911617905550600280546001600160401b0316906000611f7883612a6e565b91906101000a8154816001600160401b0302191690836001600160401b0316021790555050611fbf886001600160a01b031660009081526005602052604090205460ff1690565b61200d576001600160a01b03881660009081526009602052604081208054899290611feb9084906129bc565b909155508890506120076001600160a01b03821633308b61215b565b50612144565b6001600160a01b03881660009081526006602052604090205460ff166120b3576001600160a01b0388166000908152600b60205260409020546120519088906129bc565b6001600160a01b0389166000908152600a602052604090205410156120b35760405162461bcd60e51b81526020600482015260186024820152774e6f7420656e6f756768206d696e74656420746f6b656e7360401b6044820152606401610926565b6001600160a01b0388166000908152600b6020526040812080548992906120db9084906129bc565b909155505060405163079cc67960e41b81523360048201526024810188905288906001600160a01b038216906379cc679090604401600060405180830381600087803b15801561212a57600080fd5b505af115801561213e573d6000803e3d6000fd5b50505050505b90546001600160701b031697909650945050505050565b6040516001600160a01b038481166024830152838116604483015260648201839052610fbd9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612431565b6040516001600160a01b03838116602483015260448201839052610bca91859182169063a9059cbb90606401612190565b600154600090600160a81b90046001600160401b031681036122155750600190565b60018054600091600391839161223a91600160a81b90046001600160401b03166129e8565b6001600160401b0390811682526020808301939093526040918201600020825160808101845290546001600160701b0381168252600160701b81048316948201859052600160b01b810490921692810192909252600160f01b900461ffff16606082018190529092506122ac91612494565b806122cc5750600254606082015161ffff600160401b9092048216911610155b91505090565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283928392918816916123309190612aab565b6000604051808303816000865af19150503d806000811461236d576040519150601f19603f3d011682016040523d82523d6000602084013e612372565b606091505b50915091508161238757600092505050611862565b805160000361239b57600192505050611862565b808060200190518101906123af9190612ada565b9695505050505050565b6040516340c10f1960e01b81526001600160a01b0383811660048301526024820183905260009185918216906340c10f1990604401600060405180830381600087803b15801561240857600080fd5b505af1925050508015612419575060015b612427576000915050611862565b6001915050611862565b60006124466001600160a01b038416836124d6565b9050805160001415801561246b5750808060200190518101906124699190612ada565b155b15610bca57604051635274afe760e01b81526001600160a01b0384166004820152602401610926565b60008261ffff166000036124aa575060006124d0565b60025443906124c390600160501b900460ff1684612a4e565b6001600160401b03161090505b92915050565b60606118628383600084600080856001600160a01b031684866040516124fc9190612aab565b60006040518083038185875af1925050503d8060008114612539576040519150601f19603f3d011682016040523d82523d6000602084013e61253e565b606091505b50915091506123af86838360608261255e57612559826125a5565b611862565b815115801561257557506001600160a01b0384163b155b1561259e57604051639996b31560e01b81526001600160a01b0385166004820152602401610926565b5080611862565b8051156125b55780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50565b6000602082840312156125e357600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6005811061261e57634e487b7160e01b600052602160045260246000fd5b9052565b6040808252835182820181905260009190606090818501906020808901865b838110156126ae57815180516001600160701b03168652838101516001600160a01b039081168588015288820151898801528782015116878701526080808201519087015260a0908101519061269981880183612600565b505060c0949094019390820190600101612641565b50508295506126c08188018915159052565b50505050509392505050565b80356001600160a01b03811681146126e357600080fd5b919050565b6000806000606084860312156126fd57600080fd5b612706846126cc565b95602085013595506040909401359392505050565b6000806040838503121561272e57600080fd5b50508035926020909101359150565b6001600160701b03871681526001600160a01b03868116602083015260408201869052841660608201526080810183905260c0810161277f60a0830184612600565b979650505050505050565b60006020828403121561279c57600080fd5b611862826126cc565b600080604083850312156127b857600080fd5b6127c1836126cc565b946020939093013593505050565b80151581146125ce57600080fd5b600080600080600060a086880312156127f557600080fd5b6127fe866126cc565b94506020860135935060408601359250606086013561281c816127cf565b9150608086013561282c816127cf565b809150509295509295909350565b60008060008060006080868803121561285257600080fd5b61285b866126cc565b9450602086013593506040860135925060608601356001600160401b038082111561288557600080fd5b818801915088601f83011261289957600080fd5b8135818111156128a857600080fd5b8960208285010111156128ba57600080fd5b9699959850939650602001949392505050565b6000602082840312156128df57600080fd5b813561ffff8116811461186257600080fd5b60008060006060848603121561290657600080fd5b61290f846126cc565b925060208401359150612924604085016126cc565b90509250925092565b60006020828403121561293f57600080fd5b813560ff8116811461186257600080fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156124d0576124d0612950565b60208082526023908201527f41636365737320436f6e74726f6c3a2073656e646572206973206e6f7420416460408201526236b4b760e91b606082015260800190565b808201808211156124d0576124d0612950565b6000602082840312156129e157600080fd5b5051919050565b6001600160401b03828116828216039080821115612a0857612a08612950565b5092915050565b6001600160701b038416815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6001600160401b03818116838216019080821115612a0857612a08612950565b60006001600160401b03808316818103612a8a57612a8a612950565b6001019392505050565b600061ffff808316818103612a8a57612a8a612950565b6000825160005b81811015612acc5760208186018101518583015201612ab2565b506000920191825250919050565b600060208284031215612aec57600080fd5b8151611862816127cf56fea164736f6c6343000814000a", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/contracts/ERC20Safe.sol b/contracts/ERC20Safe.sol index ef9ffe5..b9879b8 100644 --- a/contracts/ERC20Safe.sol +++ b/contracts/ERC20Safe.sol @@ -50,8 +50,8 @@ contract ERC20Safe is Initializable, BridgeRole, Pausable { mapping(address => uint256) public burnBalances; mapping(uint256 => Deposit[]) public batchDeposits; - event ERC20Deposit(uint112 depositNonce, uint112 batchId); - event ERC20SCDeposit(uint112 indexed batchId, uint112 depositNonce, string callData); + event ERC20Deposit(uint112 batchId, uint112 depositNonce); + event ERC20SCDeposit(uint112 indexed batchId, uint112 depositNonce, bytes callData); function initialize() public initializer { __BridgeRole_init(); @@ -184,11 +184,14 @@ contract ERC20Safe is Initializable, BridgeRole, Pausable { * @param amount The amount of tokens to deposit. * @param recipientAddress The address on the target chain to receive the tokens. * @param callData The encoded data specifying the cross-chain call details. The expected format is: - * 0x01 + endpoint_name_length (4 bytes) + endpoint_name + gas_limit (8 bytes) + - * num_arguments_length (4 bytes) + [argument_length (4 bytes) + argument]... + * 0x + endpoint_name_length (4 bytes) + endpoint_name + gas_limit (8 bytes) + + * 01 (ArgumentsPresentProtocolMarker) + num_arguments_length (4 bytes) + [argument_length (4 bytes) + argument]... * This payload includes the endpoint name, gas limit for the execution, and the arguments for the call. + * In case of no arguments, only the ArgumentsMissingProtocolMarker should be included. The expected format is: + * 0x + endpoint_name_length (4 bytes) + endpoint_name + gas_limit (8 bytes) + + * 00 (ArgumentsPresentProtocolMarker) */ - function depositWithSCExecution(address tokenAddress, uint256 amount, bytes32 recipientAddress, string calldata callData) public whenNotPaused { + function depositWithSCExecution(address tokenAddress, uint256 amount, bytes32 recipientAddress, bytes calldata callData) public whenNotPaused { uint112 batchNonce; uint112 depositNonce; (batchNonce, depositNonce) = _deposit_common(tokenAddress, amount, recipientAddress); diff --git a/hardhat.config.ts b/hardhat.config.ts index 9dd6405..50599d2 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -29,7 +29,7 @@ import "./tasks/deploy/mint-burn-tokens"; import "./tasks/quorum"; import "./tasks/get-statuses-after-execution"; import "./tasks/depositSC"; - +import "./tasks/set-batch-settle-limit-on-safe" import "./tasks/deploy"; import { resolve } from "path"; diff --git a/package.json b/package.json index 7d266f2..108b537 100644 --- a/package.json +++ b/package.json @@ -94,7 +94,7 @@ "size": "cross-env TS_NODE_TRANSPILE_ONLY=true hardhat compile; hardhat size-contracts" }, "dependencies": { - "@multiversx/sdk-js-bridge": "^0.2.0", + "@multiversx/sdk-js-bridge": "^0.2.3", "yarn": "^1.22.18" }, "packageManager": "yarn@1.22.22" diff --git a/tasks/approve.ts b/tasks/approve.ts index 5c62427..0782053 100644 --- a/tasks/approve.ts +++ b/tasks/approve.ts @@ -1,4 +1,3 @@ -import { ethers } from "ethers"; import { task } from "hardhat/config"; import { getDeployOptions } from "./args/deployOptions"; @@ -11,7 +10,6 @@ task("approve", "Approve token") const filename = "setup.config.json"; let config = JSON.parse(fs.readFileSync(filename, "utf8")); const safeAddress = config["erc20Safe"]; - const scExecAddress = config["execProxy"]; const address = taskArgs.address; const signersCount = taskArgs.signers ?? 1; const signers = await hre.ethers.getSigners(); @@ -23,10 +21,5 @@ task("approve", "Approve token") "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", getDeployOptions(taskArgs), ); - await tokenContract.approve( - scExecAddress, - "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - getDeployOptions(taskArgs), - ); } }); diff --git a/tasks/deploy/mint-burn-tokens.ts b/tasks/deploy/mint-burn-tokens.ts index 8a37666..18625ee 100644 --- a/tasks/deploy/mint-burn-tokens.ts +++ b/tasks/deploy/mint-burn-tokens.ts @@ -3,6 +3,7 @@ import { task } from "hardhat/config"; task("deploy-mint-burn-tokens", "Deploys MintBurnERC20 contracts to use to the bridge") .addParam("name", "Name of the token to deploy") .addParam("symbol", "Symbol of the token to deploy") + .addParam("decimals", "Num of decimals of the token to deploy") .setAction(async (taskArgs, hre) => { const fs = require("fs"); const filename = "setup.config.json"; @@ -17,8 +18,9 @@ task("deploy-mint-burn-tokens", "Deploys MintBurnERC20 contracts to use to the b const tokenName = taskArgs.name; const tokenSymbol = taskArgs.symbol; + const decimals = taskArgs.decimals; - const usdcContract = await mintBurnERC20Factory.deploy(tokenName, tokenSymbol); + const usdcContract = await mintBurnERC20Factory.deploy(tokenName, tokenSymbol, decimals); await usdcContract.deployed(); console.log("MintBurn token deployed to:", usdcContract.address); diff --git a/tasks/deploy/test-tokens.ts b/tasks/deploy/test-tokens.ts index 7e78267..d60aaa1 100644 --- a/tasks/deploy/test-tokens.ts +++ b/tasks/deploy/test-tokens.ts @@ -3,6 +3,7 @@ import { task } from "hardhat/config"; task("deploy-test-tokens", "Deploys ERC20 contracts to use to test the bridge") .addParam("name", "Name of the token to deploy") .addParam("symbol", "Symbol of the token to deploy") + .addParam("decimals", "Num of decimals of the token to deploy") .setAction(async (taskArgs, hre) => { const fs = require("fs"); const filename = "setup.config.json"; @@ -17,8 +18,9 @@ task("deploy-test-tokens", "Deploys ERC20 contracts to use to test the bridge") const tokenName = taskArgs.name; const tokenSymbol = taskArgs.symbol; + const decimals = taskArgs.decimals; - const usdcContract = await genericERC20Factory.deploy(tokenName, tokenSymbol); + const usdcContract = await genericERC20Factory.deploy(tokenName, tokenSymbol, decimals); await usdcContract.deployed(); console.log("Token deployed to:", usdcContract.address); }); diff --git a/tasks/depositSC.ts b/tasks/depositSC.ts index ed5ce7c..6b4e406 100644 --- a/tasks/depositSC.ts +++ b/tasks/depositSC.ts @@ -1,28 +1,32 @@ import { task } from "hardhat/config"; import { getDeployOptions } from "./args/deployOptions"; - +import { encodeCallData } from "@multiversx/sdk-js-bridge"; task("deposit-sc", "Deposits token and sends to safe") .addParam("address", "Address of the token to be sent") .addParam("amount", "Amount we want to deposit (full value, with decimals)") - .addParam("receiversc", "MultiversX address hex encoded of the receiver") - .addParam("callData", "data field for MVX SC execution") - .addParam("mvxGasLimit", "data field for MVX SC execution") + .addParam("sc", "MultiversX address hex encoded of the receiver") + .addParam("endpoint", "data field for MVX SC execution") + .addParam("gaslimit", "data field for MVX SC execution") + .addParam("args", "data field for MVX SC execution") .addOptionalParam("price", "Gas price in gwei for this transaction", undefined) .setAction(async (taskArgs, hre) => { const fs = require("fs"); const filename = "setup.config.json"; let config = JSON.parse(fs.readFileSync(filename, "utf8")); const [adminWallet] = await hre.ethers.getSigners(); - const scExecProxy = config["execProxy"]; - const scExecContactFactory = await hre.ethers.getContractFactory("SCExecProxy"); - const scExecContract = scExecContactFactory.attach(scExecProxy).connect(adminWallet); + const safeAddress = config["erc20Safe"]; + const safeContractFactory = await hre.ethers.getContractFactory("ERC20Safe"); + const safe = safeContractFactory.attach(safeAddress).connect(adminWallet); const address = taskArgs.address; const amount = taskArgs.amount; - const receiver = taskArgs.receiversc; - const callData = taskArgs.callData; + const receiver = taskArgs.sc; + const endpoint = taskArgs.endpoint; + const gaslimit = taskArgs.gaslimit; + const args = JSON.parse(taskArgs.args); - await scExecContract.deposit( + const callData = encodeCallData(endpoint, gaslimit, args); + await safe.depositWithSCExecution( address, amount, Buffer.from(receiver, "hex"), diff --git a/tasks/mint-test-tokens.ts b/tasks/mint-test-tokens.ts index 69a9335..7aa761c 100644 --- a/tasks/mint-test-tokens.ts +++ b/tasks/mint-test-tokens.ts @@ -11,7 +11,7 @@ task("mint-test-tokens", "Mints tests tokens and sends them to the recipientAddr for (let token of config["tokens"]) { console.log("minting tokens for contract: ", token); const tokenContract = (await hre.ethers.getContractFactory("GenericERC20")).attach(token); - await tokenContract.mint(address, 100000000000000); + await tokenContract.mint(address, "1000000000000000000000000000"); console.log("minted tokens for contract: ", token, address); } }); diff --git a/tasks/set-batch-settle-limit-on-safe.ts b/tasks/set-batch-settle-limit-on-safe.ts index 7e19d7c..458986b 100644 --- a/tasks/set-batch-settle-limit-on-safe.ts +++ b/tasks/set-batch-settle-limit-on-safe.ts @@ -1,4 +1,5 @@ import { task } from "hardhat/config"; +import { getDeployOptions } from "./args/deployOptions"; task("set-batch-settle-limit-on-safe", "Sets a new batch settle limit") .addParam("blocks", "new batch settle limit") @@ -12,11 +13,8 @@ task("set-batch-settle-limit-on-safe", "Sets a new batch settle limit") const safeContractFactory = await hre.ethers.getContractFactory("ERC20Safe"); const safe = safeContractFactory.attach(safeAddress).connect(adminWallet); - if (taskArgs.price) { - await safe.setBatchBlockLimit(taskArgs.blocks, { gasPrice: taskArgs.price * 1000000000 }); - } else { - await safe.setBatchBlockLimit(taskArgs.blocks); - } + await safe.setBatchSettleLimit(taskArgs.blocks, getDeployOptions(taskArgs)); + config.batchBlockLimit = taskArgs.blocks; fs.writeFileSync(filename, JSON.stringify(config)); }); diff --git a/yarn.lock b/yarn.lock index 3969cf0..9c5adf5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -766,10 +766,10 @@ json-bigint "1.0.0" keccak "3.0.2" -"@multiversx/sdk-js-bridge@^0.2.0": - version "0.2.0" - resolved "https://registry.npmjs.org/@multiversx/sdk-js-bridge/-/sdk-js-bridge-0.2.0.tgz" - integrity sha512-RtYHD78ZChWkLGeB3NsvckJrL6kvtwUV5+e1NxGAJZGQsvQ7Dn5xH81TA+mKAuGaRPy+KpHy/hFvE8PYqwGx7w== +"@multiversx/sdk-js-bridge@^0.2.3": + version "0.2.3" + resolved "https://registry.npmjs.org/@multiversx/sdk-js-bridge/-/sdk-js-bridge-0.2.3.tgz" + integrity sha512-iiJsTPZk97IYawLGvSs6X7ukaawIEhkL4cZHqHUkdNz/ioNlYsbYpsvTmk+khSLM2neN4WgUD8E7TDPPTV0InA== dependencies: bignumber.js "^9.1.2"