@functionx_io/contracts
Version:
Smart Contract library for Solidity
1,450 lines • 112 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "FxBridgeMigrateLogicETH",
"sourceName": "contracts/migrate/FxBridgeMigrateLogicETH.sol",
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_tokenContract",
"type": "address"
},
{
"indexed": false,
"internalType": "string",
"name": "_name",
"type": "string"
},
{
"indexed": false,
"internalType": "string",
"name": "_symbol",
"type": "string"
},
{
"indexed": false,
"internalType": "uint8",
"name": "_decimals",
"type": "uint8"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_eventNonce",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "_memo",
"type": "bytes32"
}
],
"name": "AddBridgeTokenEvent",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_sender",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_refund",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "_txOrigin",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_eventNonce",
"type": "uint256"
},
{
"indexed": false,
"internalType": "string",
"name": "_dstChain",
"type": "string"
},
{
"indexed": false,
"internalType": "address[]",
"name": "_tokens",
"type": "address[]"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "_amounts",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "bytes",
"name": "_data",
"type": "bytes"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_quoteId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_gasLimit",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes",
"name": "_memo",
"type": "bytes"
}
],
"name": "BridgeCallEvent",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "_newOracleSetNonce",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_eventNonce",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address[]",
"name": "_oracles",
"type": "address[]"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "_powers",
"type": "uint256[]"
}
],
"name": "OracleSetUpdatedEvent",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "Paused",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_tokenContract",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_sender",
"type": "address"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "_destination",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "bytes32",
"name": "_targetIBC",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_eventNonce",
"type": "uint256"
}
],
"name": "SendToFxEvent",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_txOrigin",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_nonce",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_eventNonce",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bool",
"name": "_success",
"type": "bool"
},
{
"indexed": false,
"internalType": "bytes",
"name": "_cause",
"type": "bytes"
}
],
"name": "SubmitBridgeCallEvent",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "_batchNonce",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "_token",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_eventNonce",
"type": "uint256"
}
],
"name": "TransactionBatchExecutedEvent",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "_token",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "_newOwner",
"type": "address"
}
],
"name": "TransferOwnerEvent",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "Unpaused",
"type": "event"
},
{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "address",
"name": "refund",
"type": "address"
},
{
"internalType": "address[]",
"name": "tokens",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "memo",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "timeout",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "gasLimit",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "eventNonce",
"type": "uint256"
}
],
"internalType": "struct FxBridgeBase.BridgeCallData",
"name": "_input",
"type": "tuple"
}
],
"name": "_onBridgeCall",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_tokenAddr",
"type": "address"
}
],
"name": "activeBridgeToken",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_tokenAddr",
"type": "address"
},
{
"internalType": "bytes32",
"name": "_memo",
"type": "bytes32"
},
{
"internalType": "bool",
"name": "_isOriginated",
"type": "bool"
}
],
"name": "addBridgeToken",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "_dstChain",
"type": "string"
},
{
"internalType": "address",
"name": "_refund",
"type": "address"
},
{
"internalType": "address[]",
"name": "_tokens",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "_amounts",
"type": "uint256[]"
},
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "bytes",
"name": "_data",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "_quoteId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_gasLimit",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "_memo",
"type": "bytes"
}
],
"name": "bridgeCall",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_fxBridgeId",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "_methodName",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "_nonce",
"type": "uint256"
},
{
"components": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "address",
"name": "refund",
"type": "address"
},
{
"internalType": "address[]",
"name": "tokens",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "memo",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "timeout",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "gasLimit",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "eventNonce",
"type": "uint256"
}
],
"internalType": "struct FxBridgeBase.BridgeCallData",
"name": "_input",
"type": "tuple"
}
],
"name": "bridgeCallCheckpoint",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "bridgeTokens",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_tokenAddr",
"type": "address"
}
],
"name": "checkAssetStatus",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "convert_decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "getBridgeTokenList",
"outputs": [
{
"components": [
{
"internalType": "address",
"name": "addr",
"type": "address"
},
{
"internalType": "string",
"name": "name",
"type": "string"
},
{
"internalType": "string",
"name": "symbol",
"type": "string"
},
{
"internalType": "uint8",
"name": "decimals",
"type": "uint8"
}
],
"internalType": "struct FxBridgeBase.BridgeToken[]",
"name": "",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_tokenAddr",
"type": "address"
}
],
"name": "getTokenStatus",
"outputs": [
{
"components": [
{
"internalType": "bool",
"name": "isOriginated",
"type": "bool"
},
{
"internalType": "bool",
"name": "isActive",
"type": "bool"
},
{
"internalType": "bool",
"name": "isExist",
"type": "bool"
}
],
"internalType": "struct FxBridgeBase.TokenStatus",
"name": "",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_fxBridgeId",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "_powerThreshold",
"type": "uint256"
},
{
"internalType": "address[]",
"name": "_oracles",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "_powers",
"type": "uint256[]"
}
],
"name": "init",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_erc20Address",
"type": "address"
}
],
"name": "lastBatchNonce",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_fxBridgeId",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "_powerThreshold",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_lastEventNonce",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "_lastOracleSetCheckpoint",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "_lastOracleSetNonce",
"type": "uint256"
},
{
"internalType": "address[]",
"name": "_bridgeTokens",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "_lastBatchNonces",
"type": "uint256[]"
},
{
"components": [
{
"internalType": "bool",
"name": "isOriginated",
"type": "bool"
},
{
"internalType": "bool",
"name": "isActive",
"type": "bool"
},
{
"internalType": "bool",
"name": "isExist",
"type": "bool"
}
],
"internalType": "struct FxBridgeBase.TokenStatus[]",
"name": "_tokenStatuses",
"type": "tuple[]"
}
],
"name": "migrateInit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_fxBridgeId",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "_methodName",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "_oracleSetNonce",
"type": "uint256"
},
{
"internalType": "address[]",
"name": "_oracles",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "_powers",
"type": "uint256[]"
}
],
"name": "oracleSetCheckpoint",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "pause",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_tokenAddr",
"type": "address"
}
],
"name": "pauseBridgeToken",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "paused",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_tokenContract",
"type": "address"
},
{
"internalType": "bytes32",
"name": "_destination",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "_targetIBC",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "sendToFx",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "state_fxBridgeId",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "state_fxOriginatedToken",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "state_lastBatchNonces",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "state_lastBridgeCallNonces",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "state_lastEventNonce",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "state_lastOracleSetCheckpoint",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "state_lastOracleSetNonce",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "state_powerThreshold",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "_currentOracles",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "_currentPowers",
"type": "uint256[]"
},
{
"internalType": "uint8[]",
"name": "_v",
"type": "uint8[]"
},
{
"internalType": "bytes32[]",
"name": "_r",
"type": "bytes32[]"
},
{
"internalType": "bytes32[]",
"name": "_s",
"type": "bytes32[]"
},
{
"internalType": "uint256[]",
"name": "_amounts",
"type": "uint256[]"
},
{
"internalType": "address[]",
"name": "_destinations",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "_fees",
"type": "uint256[]"
},
{
"internalType": "uint256[2]",
"name": "_nonceArray",
"type": "uint256[2]"
},
{
"internalType": "address",
"name": "_tokenContract",
"type": "address"
},
{
"internalType": "uint256",
"name": "_batchTimeout",
"type": "uint256"
},
{
"internalType": "address",
"name": "_feeReceive",
"type": "address"
}
],
"name": "submitBatch",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "_fxBridgeId",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "_methodName",
"type": "bytes32"
},
{
"internalType": "uint256[]",
"name": "_amounts",
"type": "uint256[]"
},
{
"internalType": "address[]",
"name": "_destinations",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "_fees",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "_batchNonce",
"type": "uint256"
},
{
"internalType": "address",
"name": "_tokenContract",
"type": "address"
},
{
"internalType": "uint256",
"name": "_batchTimeout",
"type": "uint256"
},
{
"internalType": "address",
"name": "_feeReceive",
"type": "address"
}
],
"name": "submitBatchCheckpoint",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "address[]",
"name": "oracles",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "powers",
"type": "uint256[]"
},
{
"internalType": "bytes32[]",
"name": "r",
"type": "bytes32[]"
},
{
"internalType": "bytes32[]",
"name": "s",
"type": "bytes32[]"
},
{
"internalType": "uint8[]",
"name": "v",
"type": "uint8[]"
}
],
"internalType": "struct FxBridgeBase.OracleSignatures",
"name": "_curOracleSigns",
"type": "tuple"
},
{
"internalType": "uint256[2]",
"name": "_nonceArray",
"type": "uint256[2]"
},
{
"components": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "address",
"name": "refund",
"type": "address"
},
{
"internalType": "address[]",
"name": "tokens",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "memo",
"type": "bytes"
},
{
"internalType": "uint256",
"name": "timeout",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "gasLimit",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "eventNonce",
"type": "uint256"
}
],
"internalType": "struct FxBridgeBase.BridgeCallData",
"name": "_input",
"type": "tuple"
}
],
"name": "submitBridgeCall",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "tokenStatus",
"outputs": [
{
"internalType": "bool",
"name": "isOriginated",
"type": "bool"
},
{
"internalType": "bool",
"name": "isActive",
"type": "bool"
},
{
"internalType": "bool",
"name": "isExist",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_token",
"type": "address"
},
{
"internalType": "address",
"name": "_newOwner",
"type": "address"
}
],
"name": "transferOwner",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "unpause",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "_newOracles",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "_newPowers",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "_newOracleSetNonce",
"type": "uint256"
},
{
"internalType": "address[]",
"name": "_currentOracles",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "_currentPowers",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "_currentOracleSetNonce",
"type": "uint256"
},
{
"internalType": "uint8[]",
"name": "_v",
"type": "uint8[]"
},
{
"internalType": "bytes32[]",
"name": "_r",
"type": "bytes32[]"
},
{
"internalType": "bytes32[]",
"name": "_s",
"type": "bytes32[]"
}
],
"name": "updateOracleSet",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "version",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x608060405234801561001057600080fd5b50614cec806100206000396000f3fe60806040526004361061021a5760003560e01c80637d9a8ea611610123578063dde65aea116100ab578063ed51dacf1161006f578063ed51dacf1461071d578063f1099f611461074d578063f2fde38b1461076d578063f92367fd1461078d578063fd9791bb146107a357600080fd5b8063dde65aea14610687578063df97174b146106a7578063e55bedc1146106d4578063e5a2b5d2146106f4578063e6d69ede1461070a57600080fd5b8063a36a4ab0116100f2578063a36a4ab014610569578063a3ff31b514610589578063a955665f14610631578063aa63a89414610651578063bb83bf961461067157600080fd5b80637d9a8ea6146104e45780638456cb59146105165780638da5cb5b1461052b5780639a5aa0441461054957600080fd5b8063474d561c116101a65780636189d107116101755780636189d1071461044b57806370a0eb941461046b57806370e5a89814610481578063715018a6146104b957806373b20547146104ce57600080fd5b8063474d561c146103b357806354fd4d50146103f1578063561aa97d146104135780635c975abb1461043357600080fd5b806331678cf6116101ed57806331678cf61461030c578063332caa1f1461033c5780633a08e2991461035e5780633d1e51f91461037e5780633f4ba83a1461039e57600080fd5b8063011b21741461021f5780630acac942146102685780631cb8b55b146102ca578063283040b4146102ea575b600080fd5b34801561022b57600080fd5b5061025561023a3660046135b4565b6001600160a01b0316600090815260cf602052604090205490565b6040519081526020015b60405180910390f35b34801561027457600080fd5b506102ab6102833660046135b4565b60d16020526000908152604090205460ff808216916101008104821691620100009091041683565b604080519315158452911515602084015215159082015260600161025f565b3480156102d657600080fd5b506102556102e53660046135e2565b6107c3565b3480156102f657600080fd5b506102ff6107fd565b60405161025f9190613693565b34801561031857600080fd5b5061032c61032736600461373d565b610a71565b604051901515815260200161025f565b34801561034857600080fd5b5061035c6103573660046139ed565b610b23565b005b34801561036a57600080fd5b5061035c610379366004613ba0565b611037565b34801561038a57600080fd5b50610255610399366004613cce565b6111ba565b3480156103aa57600080fd5b5061035c611203565b3480156103bf57600080fd5b5061032c6103ce3660046135b4565b6001600160a01b0316600090815260d16020526040902054610100900460ff1690565b3480156103fd57600080fd5b5061040661121d565b60405161025f9190613d9e565b34801561041f57600080fd5b5061035c61042e366004613db1565b6112ab565b34801561043f57600080fd5b5060975460ff1661032c565b34801561045757600080fd5b5061035c610466366004613de5565b6114f5565b34801561047757600080fd5b5061025560cd5481565b34801561048d57600080fd5b506104a161049c366004613e1e565b611733565b6040516001600160a01b03909116815260200161025f565b3480156104c557600080fd5b5061035c61175d565b3480156104da57600080fd5b5061025560cc5481565b3480156104f057600080fd5b506105046104ff3660046135b4565b61176f565b60405160ff909116815260200161025f565b34801561052257600080fd5b5061035c6117ac565b34801561053757600080fd5b506065546001600160a01b03166104a1565b34801561055557600080fd5b5061035c610564366004613e37565b6117c4565b34801561057557600080fd5b5061032c6105843660046135b4565b611929565b34801561059557600080fd5b506106096105a43660046135b4565b6040805160608082018352600080835260208084018290529284018190526001600160a01b0394909416845260d1825292829020825193840183525460ff80821615158552610100820481161515928501929092526201000090041615159082015290565b604080518251151581526020808401511515908201529181015115159082015260600161025f565b34801561063d57600080fd5b5061025561064c366004613eb9565b611a43565b34801561065d57600080fd5b5061035c61066c366004613f39565b611a7f565b34801561067d57600080fd5b5061025560ce5481565b34801561069357600080fd5b5061032c6106a23660046135b4565b611cb1565b3480156106b357600080fd5b506102556106c23660046135b4565b60cf6020526000908152604090205481565b3480156106e057600080fd5b5061035c6106ef36600461405f565b611dc6565b34801561070057600080fd5b5061025560ca5481565b61025561071836600461419a565b6120bf565b34801561072957600080fd5b5061032c610738366004613e1e565b60d36020526000908152604090205460ff1681565b34801561075957600080fd5b5061032c610768366004614290565b6121fc565b34801561077957600080fd5b5061035c6107883660046135b4565b612505565b34801561079957600080fd5b5061025560c95481565b3480156107af57600080fd5b5060cb546104a1906001600160a01b031681565b6000848484846040516020016107dc9493929190614516565b6040516020818303038152906040528051906020012090505b949350505050565b60d0546060906000906001600160401b0381111561081d5761081d613770565b60405190808252806020026020018201604052801561088557816020015b610872604051806080016040528060006001600160a01b031681526020016060815260200160608152602001600060ff1681525090565b81526020019060019003908161083b5790505b50905060005b60d054811015610a6b57600060d082815481106108aa576108aa614545565b9060005260206000200160009054906101000a90046001600160a01b031690506000816001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561090a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610932919081019061455b565b90506000826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610974573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261099c919081019061455b565b90506000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0291906145d2565b905060006040518060800160405280866001600160a01b031681526020018581526020018481526020018360ff16815250905080878781518110610a4857610a48614545565b602002602001018190525050505050508080610a6390614605565b91505061088b565b50919050565b6000610a7b61257b565b60405163f2fde38b60e01b81526001600160a01b03838116600483015284169063f2fde38b90602401600060405180830381600087803b158015610abe57600080fd5b505af1158015610ad2573d6000803e3d6000fd5b5050604080516001600160a01b038088168252861660208201527fb0f1bf050fff9d249d22389b0f2673295260c8deca341a2755d95318f9fbc699935001905060405180910390a150600192915050565b610b2b6125d5565b610b3361262f565b6001600160a01b038316600090815260d160209081526040918290208251606081018452905460ff8082161515835261010082048116151593830193909352620100009004909116151591810182905290610bd15760405162461bcd60e51b8152602060048201526019602482015278556e737570706f7274656420746f6b656e206164647265737360381b60448201526064015b60405180910390fd5b8060200151610c155760405162461bcd60e51b815260206004820152601060248201526f151bdad95b881dd85cc81c185d5cd95960821b6044820152606401610bc8565b6020808601516001600160a01b038616600090815260cf90925260409091205410610ca85760405162461bcd60e51b815260206004820152603760248201527f4e6577206261746368206e6f6e6365206d75737420626520677265617465722060448201527f7468616e207468652063757272656e74206e6f6e63652e0000000000000000006064820152608401610bc8565b824310610d1d5760405162461bcd60e51b815260206004820152603c60248201527f42617463682074696d656f7574206d757374206265206772656174657220746860448201527f616e207468652063757272656e7420626c6f636b206865696768742e000000006064820152608401610bc8565b86518851148015610d2f575085518851145b610d7b5760405162461bcd60e51b815260206004820181905260248201527f4d616c666f726d6564206261746368206f66207472616e73616374696f6e732e6044820152606401610bc8565b6040805160a0810182528e8152602081018e90529081018b9052606081018a9052608081018c90528551610daf9082612675565b60c954610de8908290610de3906f0e8e4c2dce6c2c6e8d2dedc84c2e8c6d60831b8d8d8d8d600160200201518d8d8d6111ba565b6127ab565b6020808701516001600160a01b038716600090815260cf9092526040822055805b8a51811015610f3d57610e3e898281518110610e2757610e27614545565b60200260200101518361291c90919063ffffffff16565b8451909250151560011415610edb57866001600160a01b03166340c10f19308d8481518110610e6f57610e6f614545565b60200260200101516040518363ffffffff1660e01b8152600401610ea89291906001600160a01b03929092168252602082015260400190565b600060405180830381600087803b158015610ec257600080fd5b505af1158015610ed6573d6000803e3d6000fd5b505050505b610f2b8a8281518110610ef057610ef0614545565b60200260200101518c8381518110610f0a57610f0a614545565b6020026020010151896001600160a01b031661292f9092919063ffffffff16565b80610f3581614605565b915050610e09565b508251151560011415610fab576040516340c10f1960e01b8152306004820152602481018290526001600160a01b038716906340c10f1990604401600060405180830381600087803b158015610f9257600080fd5b505af1158015610fa6573d6000803e3d6000fd5b505050505b610fbf6001600160a01b038716858361292f565b505060cc54610fd09150600161291c565b60cc556001600160a01b03831684600160200201517f02c7e81975f8edb86e2a0c038b7b86a49c744236abf0f6177ff5afc6986ab70860cc5460405161101891815260200190565b60405180910390a361102960018055565b505050505050505050505050565b61103f61262f565b8387116110b45760405162461bcd60e51b815260206004820152603c60248201527f4e6577206f7261636c6520736574206e6f6e6365206d7573742062652067726560448201527f61746572207468616e207468652063757272656e74206e6f6e63652e000000006064820152608401610bc8565b87518951146111055760405162461bcd60e51b815260206004820152601960248201527f4d616c666f726d6564206e6577206f7261636c65207365742e000000000000006044820152606401610bc8565b60006040518060a0016040528088815260200187815260200184815260200183815260200185815250905061113a8582612675565b6000611147898c8c612998565b905061115382826127ab565b60cd81905560ce89905560cc5461116b90600161291c565b60cc8190556040518a917f36c6022aad02313069de85ca9645431c7dd5e8e7a21685586461c4b25e2374b3916111a591908f908f90614689565b60405180910390a25050505050505050505050565b60008989898989898989896040516020016111dd999897969594939291906146b4565b6040516020818303038152906040528051906020012090505b9998505050505050505050565b61120b61257b565b6112136129b9565b61121b612a02565b565b60d2805461122a90614731565b80601f016020809104026020016040519081016040528092919081815260200182805461125690614731565b80156112a35780601f10611278576101008083540402835291602001916112a3565b820191906000526020600020905b81548152906001019060200180831161128657829003601f168201915b505050505081565b3033146112fa5760405162461bcd60e51b815260206004820181905260248201527f53656c6661626c653a2063616c6c6572206973206e6f74207468652073656c666044820152606401610bc8565b60006113096040830183614766565b905011156113a8576113a83061132560a08401608085016135b4565b6113326040850185614766565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611371925050506060860186614766565b80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612a5492505050565b6113ca6113bb60a08301608084016135b4565b6001600160a01b03163b151590565b156114f2576101208101351561145e576113ea60a08201608083016135b4565b6001600160a01b03166332e1e16e61012083013561140b60a08501856147af565b6040518463ffffffff1660e01b8152600401611429939291906147f5565b600060405180830381600087803b15801561144357600080fd5b505af1158015611457573d6000803e3d6000fd5b5050505050565b61146e60a08201608083016135b4565b6001600160a01b03166357ffc09261148960208401846135b4565b61149960408501602086016135b4565b6114a66040860186614766565b6114b36060880188614766565b6114c060a08a018a6147af565b6114cd60c08c018c6147af565b6040518b63ffffffff1660e01b81526004016114299a99989796959493929190614818565b50565b6114fd6125d5565b61150561262f565b600081116115615760405162461bcd60e51b815260206004820152602360248201527f416d6f756e742073686f756c642062652067726561746572207468616e207a6560448201526239379760e91b6064820152608401610bc8565b6001600160a01b038416600090815260d160209081526040918290208251606081018452905460ff80821615158352610100820481161515938301939093526201000090049091161515918101829052906115fe5760405162461bcd60e51b815260206004820152601a60248201527f556e737570706f7274656420746f6b656e20616464726573732e0000000000006044820152606401610bc8565b80602001516116435760405162461bcd60e51b81526020600482015260116024820152702a37b5b2b7103bb0b9903830bab9b2b21760791b6044820152606401610bc8565b6116586001600160a01b038616333085612edf565b80511515600114156116bf57604051630852cd8d60e31b8152600481018390526001600160a01b038616906342966c6890602401600060405180830381600087803b1580156116a657600080fd5b505af11580156116ba573d6000803e3d6000fd5b505050505b60cc546116cd90600161291c565b60cc819055604080518581526020810185905290810191909152849033906001600160a01b038816907f034c5b22dd525a50d0a6b15549df0a6ac83b833a6c3da57ea16890832c72507c9060600160405180910390a45061172d60018055565b50505050565b60d0818154811061174357600080fd5b6000918252602090912001546001600160a01b0316905081565b61176561257b565b61121b6000612f17565b60405162461bcd60e51b815260206004820152600f60248201526e139bdd081a5b5c1b195b595b9d1959608a1b6044820152600090606401610bc8565b6117b461257b565b6117bc61262f565b61121b612f69565b6117cc6125d5565b6117d461262f565b6117df838383612fa6565b602082810135600090815260d382526040808220805460ff1916600117905580518281529283019081905263561aa97d60e01b9052903063561aa97d6118288560248501614893565b600060405180830381600087803b15801561184257600080fd5b505af1925050508015611853575060015b6118bf5761185f6148a6565b806308c379a0141561188657506118746148c2565b8061187f5750611888565b90506118c4565b505b3d8080156118b2576040519150601f19603f3d011682016040523d82523d6000602084013e6118b7565b606091505b5090506118c4565b600191505b60cc546118d290600161291c565b60cc81905560405132917fa274e2655558a3663f90b9ff4d5409974a0e79ba5f0fb41ec4d582d58ba7058091611911916020890135918790879061494b565b60405180910390a2505061192460018055565b505050565b600061193361257b565b6001600160a01b038216600090815260d1602052604090205462010000900460ff1615156001146119a65760405162461bcd60e51b815260206004820152601b60248201527f42726964676520746f6b656e20646f65736e27742065786973747300000000006044820152606401610bc8565b6001600160a01b038216600090815260d1602052604090205460ff610100909104161515600114611a195760405162461bcd60e51b815260206004820152601b60248201527f42726964676520746f6b656e20616c72656164792070617573656400000000006044820152606401610bc8565b506001600160a01b038116600090815260d160205260409020805461ff001916905560015b919050565b60008585858585604051602001611a5e959493929190614972565b60405160208183030381529060405280519060200120905095945050505050565b600054610100900460ff1615808015611a9f5750600054600160ff909116105b80611ab95750303b158015611ab9575060005460ff166001145b611ad55760405162461bcd60e51b8152600401610bc8906149b5565b6000805460ff191660011790558015611af8576000805461ff0019166101001790555b611b00613138565b611b08613167565b611b10613196565b8151835114611b615760405162461bcd60e51b815260206004820152601d60248201527f4d616c666f726d65642063757272656e74206f7261636c65207365742e0000006044820152606401610bc8565b6000805b8351811015611bb457838181518110611b8057611b80614545565b602002602001015182611b939190614a03565b915085821115611ba257611bb4565b80611bac81614605565b915050611b65565b50848111611bd45760405162461bcd60e51b8152600401610bc890614a1b565b60c9869055611be560008585612998565b60cd5560ca859055600060ce55600160cc55604080518082019091526005808252640312e302e360dc1b6020909201918252611c239160d291613504565b5060ce547f36c6022aad02313069de85ca9645431c7dd5e8e7a21685586461c4b25e2374b360cc548686604051611c5c93929190614689565b60405180910390a2508015611457576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6000611cbb61257b565b6001600160a01b038216600090815260d1602052604090205462010000900460ff161515600114611d2e5760405162461bcd60e51b815260206004820152601c60248201527f42726964676520746f6b656e20646f65736e2774206578697374732e000000006044820152606401610bc8565b6001600160a01b038216600090815260d16020526040902054610100900460ff1615611d9c5760405162461bcd60e51b815260206004820152601f60248201527f42726964676520746f6b656e20616c7265616479206163746976617465642e006044820152606401610bc8565b506001600160a01b0316600090815260d160205260409020805461ff001916610100179055600190565b600054610100900460ff1615808015611de65750600054600160ff909116105b80611e005750303b158015611e00575060005460ff166001145b611e1c5760405162461bcd60e51b8152600401610bc8906149b5565b6000805460ff191660011790558015611e3f576000805461ff0019166101001790555b611e47613138565b611e4f613167565b611e57613196565b83518351148015611e69575081518451145b611ec55760405162461bcd60e51b815260206004820152602760248201527f4d616c666f726d6564206c61737420626174636820746f6b656e20696e666f7260448201526636b0ba34b7b71760c91b6064820152608401610bc8565b60c989905560ca88905560cc87905560cd86905560ce85905560005b84518110156120405760d0858281518110611efe57611efe614545565b60209081029190910181015182546001810184556000938452919092200180546001600160a01b0319166001600160a01b039092169190911790558351849082908110611f4d57611f4d614545565b602002602001015160cf6000878481518110611f6b57611f6b614545565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550828181518110611fa957611fa9614545565b602002602001015160d16000878481518110611fc757611fc7614545565b6020908102919091018101516001600160a01b03168252818101929092526040908101600020835181549385015194909201511515620100000262ff0000199415156101000261ff00199315159390931661ffff199094169390931791909117929092161790558061203881614605565b915050611ee1565b50604080518082019091526005808252640312e302e360dc1b602090920191825261206d9160d291613504565b5080156120b4576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b60006120c96125d5565b6120d161262f565b8951156121145760405162461bcd60e51b815260206004820152601160248201527024b73b30b634b2103239ba21b430b4b71760791b6044820152606401610bc8565b875115612171576001600160a01b0389166121715760405162461bcd60e51b815260206004820152601860248201527f526566756e64206164647265737320697320656d7074792