Overview ERC20
PRICE
n/a

ON-CHAIN MARKET CAP n/a

Total Supply:
142,872.24 ORBGUY

Holders:
1,085
Profile Summary
Blockchain:
Taiko (167000)


Decimals:
18
Contract Source Code Verified (Exact Match)
Contract Name:
TokenSlave

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
Yes with 100 runs

Created At:
Thu, 27 Jun 2024 12:55:35 GMT
Ownable.sol
@openzeppelin
contracts
access
Ownable.sol


Contract ABI
[
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_vizingPad",
        "type": "address"
      },
      {
        "internalType": "uint64",
        "name": "_masterChainId",
        "type": "uint64"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [],
    "name": "LandingPadAccessDenied",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NotImplement",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "Approval",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "_sender",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "_native",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "_token",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "_presaleToken",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "_refundNative",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "_feeAddr",
        "type": "address"
      }
    ],
    "name": "Launch",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint64",
        "name": "_srcChainId",
        "type": "uint64"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "_srcAddress",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bytes",
        "name": "_payload",
        "type": "bytes"
      },
      {
        "indexed": false,
        "internalType": "bytes",
        "name": "_reason",
        "type": "bytes"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "_value",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "_callValue",
        "type": "uint256"
      }
    ],
    "name": "MessageFailed",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint64",
        "name": "_srcChainId",
        "type": "uint64"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "_srcAddress",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "bytes",
        "name": "_payload",
        "type": "bytes"
      }
    ],
    "name": "MessageReceived",
    "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": "uint64",
        "name": "_srcChainId",
        "type": "uint64"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "_srcAddress",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint8",
        "name": "_action",
        "type": "uint8"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "_pongFee",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "_expectPongFee",
        "type": "uint256"
      }
    ],
    "name": "PongfeeFailed",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint64",
        "name": "_srcChainId",
        "type": "uint64"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "_srcAddress",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "_payloadHash",
        "type": "bytes32"
      }
    ],
    "name": "RetryMessageSuccess",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount0In",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount1In",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount0Out",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount1Out",
        "type": "uint256"
      }
    ],
    "name": "Swap",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "Transfer",
    "type": "event"
  },
  {
    "inputs": [],
    "name": "LandingPad",
    "outputs": [
      {
        "internalType": "contract IMessageChannel",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "LaunchPad",
    "outputs": [
      {
        "internalType": "contract IMessageChannel",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint64",
        "name": "srcChainId",
        "type": "uint64"
      },
      {
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "internalType": "uint8",
        "name": "action",
        "type": "uint8"
      },
      {
        "internalType": "uint256",
        "name": "pongFee",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "params",
        "type": "bytes"
      }
    ],
    "name": "_nonblockingReceive",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }
    ],
    "name": "allowance",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "pongFee",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "target",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amountIn",
        "type": "uint256"
      }
    ],
    "name": "buyPingEstimateGas",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "pingFee",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "pongFee",
        "type": "uint256"
      }
    ],
    "name": "claim",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "pongFee",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "target",
        "type": "address"
      }
    ],
    "name": "claimPingEstimateGas",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "pingFee",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "claimed",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "decimals",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "subtractedValue",
        "type": "uint256"
      }
    ],
    "name": "decreaseAllowance",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "defaultBridgeMode",
    "outputs": [
      {
        "internalType": "bytes1",
        "name": "",
        "type": "bytes1"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "pongFee",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "deposit",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "pongFee",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "target",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "depositPingEstimateGas",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "pingFee",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "name": "deposited",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      },
      {
        "internalType": "uint64",
        "name": "destChainid",
        "type": "uint64"
      },
      {
        "internalType": "bytes",
        "name": "additionParams",
        "type": "bytes"
      },
      {
        "internalType": "bytes",
        "name": "message",
        "type": "bytes"
      }
    ],
    "name": "estimateVizingGasFee",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "vizingGasFee",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "feeAddress",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      },
      {
        "internalType": "bool",
        "name": "isBuy",
        "type": "bool"
      }
    ],
    "name": "getAmountOut",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "getReserves",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "addedValue",
        "type": "uint256"
      }
    ],
    "name": "increaseAllowance",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "launched",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "masterChainId",
    "outputs": [
      {
        "internalType": "uint64",
        "name": "",
        "type": "uint64"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "masterContract",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "maxArrivalTime",
    "outputs": [
      {
        "internalType": "uint64",
        "name": "",
        "type": "uint64"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "maxGasLimit",
    "outputs": [
      {
        "internalType": "uint24",
        "name": "",
        "type": "uint24"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "messageFailed",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "messageReceived",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "minArrivalTime",
    "outputs": [
      {
        "internalType": "uint64",
        "name": "",
        "type": "uint64"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "minGasLimit",
    "outputs": [
      {
        "internalType": "uint24",
        "name": "",
        "type": "uint24"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "owner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint64",
        "name": "dstChainId",
        "type": "uint64"
      },
      {
        "internalType": "address",
        "name": "dstContract",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "params",
        "type": "bytes"
      }
    ],
    "name": "paramsEstimateGas",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint64",
        "name": "srcChainId",
        "type": "uint64"
      },
      {
        "internalType": "uint256",
        "name": "srcContract",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "message",
        "type": "bytes"
      }
    ],
    "name": "receiveStandardMessage",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "selectedRelayer",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "pongFee",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "target",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amountIn",
        "type": "uint256"
      }
    ],
    "name": "sellPingEstimateGas",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "pingFee",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "addr",
        "type": "address"
      }
    ],
    "name": "setMasterContract",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "pongFee",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "deadline",
        "type": "uint256"
      }
    ],
    "name": "swapExactETHForTokens",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "pongFee",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "amountIn",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "deadline",
        "type": "uint256"
      }
    ],
    "name": "swapExactTokensForETH",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "transfer",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "withdrawFee",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "stateMutability": "payable",
    "type": "receive"
  }
]


Contract Creation Code
610140604052600019600f553480156200001857600080fd5b5060405162003208380380620032088339810160408190526200003b91620001b9565b604051806040016040528060098152602001684f726269742047757960b81b815250604051806040016040528060068152602001654f524247555960d01b8152508360008484848483818081868681600390816200009a9190620002b5565b506004620000a98282620002b5565b505050620000c6620000c06200016360201b60201c565b62000167565b6001600655600780546001600160a01b0319166001600160a01b03831617905550600880546001600160a01b0319166001600160a01b0383161790555050600a80546001600160481b0319166001600160401b039092169190911790555050600160f81b610100525050603c6080526201518060a052620186a060c052620f424060e0526001600160a01b03166101205250620003819350505050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008060408385031215620001cd57600080fd5b82516001600160a01b0381168114620001e557600080fd5b60208401519092506001600160401b03811681146200020357600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200023957607f821691505b6020821081036200025a57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002b0576000816000526020600020601f850160051c810160208610156200028b5750805b601f850160051c820191505b81811015620002ac5782815560010162000297565b5050505b505050565b81516001600160401b03811115620002d157620002d16200020e565b620002e981620002e2845462000224565b8462000260565b602080601f831160018114620003215760008415620003085750858301515b600019600386901b1c1916600185901b178555620002ac565b600085815260208120601f198616915b82811015620003525788860151825594840194600190910190840162000331565b5085821015620003715787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516101005161012051612e14620003f46000396000818161077501526117e00152600081816104ba01528181610a2f015261172d0152600081816105ec01528181610a51015261174f01526000610591015260006108590152600061055d0152612e146000f3fe6080604052600436106102805760003560e01c80636715f7091161014f578063b0cfd4d2116100c1578063de8aeda01161007a578063de8aeda014610847578063e0b838e91461087b578063e2bbb1581461089b578063f2fde38b146108ae578063fd9be522146108ce578063ffee770f146108ee57600080fd5b8063b0cfd4d214610763578063c884ef8314610797578063cb13cddb146107c7578063cd446e22146107f4578063dd62ed3e14610814578063de2a60f71461083457600080fd5b80638091f3bf116101135780638091f3bf146106af5780638da5cb5b146106d057806395d89b41146106ee57806397945d2d14610703578063a457c2d714610723578063a9059cbb1461074357600080fd5b80636715f7091461060e57806370a082311461062e578063715018a61461066457806376c8131214610679578063786627ce1461069957600080fd5b8063313ce567116101f35780634c2c8370116101ac5780634c2c837014610515578063575580d7146105355780635ad3ad061461054b5780635aeb4d771461057f5780635c7e072b146105c75780635e45da23146105da57600080fd5b8063313ce56714610439578063379607f5146104555780633950935114610468578063412753581461048857806345636279146104a857806346093c1b146104f557600080fd5b806310c3cf061161024557806310c3cf061461035e57806311106ee21461039657806318160ddd146103c45780631b6fa94a146103d957806323b872dd146103f95780632a3a236f1461041957600080fd5b806273b5551461028c57806306fdde03146102a15780630902f1ac146102cc578063095ea7b3146102f65780630e82845d1461032657600080fd5b3661028757005b600080fd5b61029f61029a366004612421565b610901565b005b3480156102ad57600080fd5b506102b661093e565b6040516102c391906124cc565b60405180910390f35b3480156102d857600080fd5b506102e16109d0565b604080519283526020830191909152016102c3565b34801561030257600080fd5b506103166103113660046124f4565b6109ef565b60405190151581526020016102c3565b34801561033257600080fd5b50600854610346906001600160a01b031681565b6040516001600160a01b0390911681526020016102c3565b34801561036a57600080fd5b50600a5461037e906001600160401b031681565b6040516001600160401b0390911681526020016102c3565b3480156103a257600080fd5b506103b66103b1366004612520565b610a09565b6040519081526020016102c3565b3480156103d057600080fd5b506002546103b6565b3480156103e557600080fd5b506103b66103f4366004612618565b610a27565b34801561040557600080fd5b50610316610414366004612683565b610b2f565b34801561042557600080fd5b5061029f6104343660046126c4565b610b53565b34801561044557600080fd5b50604051601281526020016102c3565b61029f6104633660046126e1565b610b7d565b34801561047457600080fd5b506103166104833660046124f4565b610c78565b34801561049457600080fd5b50600c54610346906001600160a01b031681565b3480156104b457600080fd5b506104dc7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160f81b031990911681526020016102c3565b34801561050157600080fd5b506103b66105103660046126fa565b610c9a565b34801561052157600080fd5b506103b661053036600461271f565b610cce565b34801561054157600080fd5b506103b660095481565b34801561055757600080fd5b5061037e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561058b57600080fd5b506105b37f000000000000000000000000000000000000000000000000000000000000000081565b60405162ffffff90911681526020016102c3565b61029f6105d5366004612746565b610d04565b3480156105e657600080fd5b506105b37f000000000000000000000000000000000000000000000000000000000000000081565b34801561061a57600080fd5b506103b661062936600461271f565b610d23565b34801561063a57600080fd5b506103b66106493660046126c4565b6001600160a01b031660009081526020819052604090205490565b34801561067057600080fd5b5061029f610d51565b34801561068557600080fd5b506103b6610694366004612785565b610d65565b3480156106a557600080fd5b506103b6600b5481565b3480156106bb57600080fd5b50600a5461031690600160401b900460ff1681565b3480156106dc57600080fd5b506005546001600160a01b0316610346565b3480156106fa57600080fd5b506102b6610de7565b34801561070f57600080fd5b506103b661071e36600461271f565b610df6565b34801561072f57600080fd5b5061031661073e3660046124f4565b610e2d565b34801561074f57600080fd5b5061031661075e3660046124f4565b610ea8565b34801561076f57600080fd5b506103467f000000000000000000000000000000000000000000000000000000000000000081565b3480156107a357600080fd5b506103166107b23660046126c4565b600e6020526000908152604090205460ff1681565b3480156107d357600080fd5b506103b66107e23660046126c4565b600d6020526000908152604090205481565b34801561080057600080fd5b50601054610346906001600160a01b031681565b34801561082057600080fd5b506103b661082f366004612810565b610eb6565b61029f61084236600461284d565b610ee1565b34801561085357600080fd5b5061037e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561088757600080fd5b50600754610346906001600160a01b031681565b61029f6108a93660046128bf565b610fe5565b3480156108ba57600080fd5b5061029f6108c93660046126c4565b6110ba565b3480156108da57600080fd5b5061029f6108e93660046124f4565b611130565b61029f6108fc36600461271f565b611173565b6008546001600160a01b0316331461092c57604051637d92a0f560e11b815260040160405180910390fd5b61093884848484611190565b50505050565b60606003805461094d906128e1565b80601f0160208091040260200160405190810160405280929190818152602001828054610979906128e1565b80156109c65780601f1061099b576101008083540402835291602001916109c6565b820191906000526020600020905b8154815290600101906020018083116109a957829003601f168201915b5050505050905090565b60008060405160016235f76760e11b0319815260040160405180910390fd5b6000336109fd818585611304565b60019150505b92915050565b600060405160016235f76760e11b0319815260040160405180910390fd5b600080610aa17f0000000000000000000000000000000000000000000000000000000000000000867f0000000000000000000000000000000000000000000000000000000000000000610a7a898b611428565b3388604051602001610a8d92919061291b565b604051602081830303815290604052611511565b600754604080516000815260208101918290526342feeaa160e11b9091529192506001600160a01b0316906385fdd54290610ae49087908a90866024820161293f565b602060405180830381865afa158015610b01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b259190612979565b9695505050505050565b600033610b3d85828561154f565b610b488585856115c3565b506001949350505050565b610b5b611621565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b610b8561167b565b600a54600160401b900460ff16610bb75760405162461bcd60e51b8152600401610bae90612992565b60405180910390fd5b336000908152600e602052604090205460ff1615610c015760405162461bcd60e51b815260206004820152600760248201526618db185a5b595960ca1b6044820152606401610bae565b6000610c0d8233610c9a565b9050610c1982826129cc565b341015610c385760405162461bcd60e51b8152600401610bae906129df565b600a54601054610c6a9183916001600160401b03909116906001600160a01b031685610c6433886116d4565b33611726565b50610c756001600655565b50565b6000336109fd818585610c8b8383610eb6565b610c9591906129cc565b611304565b600a54601054600091610cc7916001600160401b03909116906001600160a01b0316856103f486826116d4565b9392505050565b600a54601054600091610cfc916001600160401b03909116906001600160a01b0316866103f487828861188e565b949350505050565b610d0c61167b565b610d1984338486856118e3565b6109386001600655565b600a54601054600091610cfc916001600160401b03909116906001600160a01b0316866103f4878288611a2d565b610d59611621565b610d636000611a36565b565b6000610ddc878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8b018190048102820181019092528981529250899150889081908401838280828437600092019190915250611a8892505050565b979650505050505050565b60606004805461094d906128e1565b600a54601054600091610cfc916001600160401b03909116906001600160a01b0316610e2287866129cc565b6103f4878988611b09565b60003381610e3b8286610eb6565b905083811015610e9b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bae565b610b488286868403611304565b6000336109fd8185856115c3565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b333014610f3c5760405162461bcd60e51b815260206004820152602360248201527f455243333134506c7573436f72653a2063616c6c6572206d757374206265207360448201526232b63360e91b6064820152608401610bae565b600a546001600160401b0390811690871603610f9a57610f958686868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b1292505050565b610fdd565b610fdd8686868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4492505050565b505050505050565b610fed61167b565b600a54600160401b900460ff16156110325760405162461bcd60e51b81526020600482015260086024820152671b185d5b98da195960c21b6044820152606401610bae565b600061103f833384610df6565b90508261104c82846129cc565b61105691906129cc565b3410156110755760405162461bcd60e51b8152600401610bae906129df565b600a546010546110ab9183916001600160401b03909116906001600160a01b03166110a087876129cc565b610c64338989611b09565b506110b66001600655565b5050565b6110c2611621565b6001600160a01b0381166111275760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bae565b610c7581611a36565b611138611621565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561116e573d6000803e3d6000fd5b505050565b61117b61167b565b611186838383611cf0565b61116e6001600655565b61119a8484611dbf565b6111d65760405162461bcd60e51b815260206004820152600d60248201526c3ab730baba3437b934bd32b21760991b6044820152606401610bae565b6000806111e583850185612a0e565b915091506001600b60008282546111fc91906129cc565b90915550506040517ff496afe4c96f98ccadfe979e32fee625d67b649ab3b164a018eedbaecdcb7b2a90611237908890859034908690612a5d565b60405180910390a16000806000838060200190518101906112589190612a93565b92509250925060008061126d858c8686611df4565b909250905060008161127f84876129cc565b6112899190612b28565b905081156112cd57600c546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156112cb573d6000803e3d6000fd5b505b6000806112de8e8b8a8a878b611e0e565b91509150816112f4576112f48e8b8b8487611e85565b5050505050505050505050505050565b6001600160a01b0383166113665760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bae565b6001600160a01b0382166113c75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bae565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6007546040805163425e3ad360e11b815290516000926001600160a01b0316916384bc75a69160048083019260209291908290030181865afa158015611472573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114969190612b3b565b604051632aee183f60e21b81526001600160a01b0385811660048301526001600160401b0385166024830152919091169063abb860fc90604401602060405180830381865afa1580156114ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc79190612b58565b606085856001600160a01b0316858585604051602001611535959493929190612b75565b604051602081830303815290604052905095945050505050565b600061155b8484610eb6565b9050600019811461093857818110156115b65760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610bae565b6109388484848403611304565b3330148015906115db57506001600160a01b03821630145b156116165760405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606401610bae565b61116e838383611ee6565b6005546001600160a01b03163314610d635760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bae565b6002600654036116cd5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610bae565b6002600655565b604080516001600160a01b038416602082015260609160029184910160408051601f198184030181529082905261170f939291602001612bd8565b604051602081830303815290604052905092915050565b60006117787f0000000000000000000000000000000000000000000000000000000000000000867f0000000000000000000000000000000000000000000000000000000000000000610a7a898b611428565b9050600061178688866129cc565b9050803410156117c95760405162461bcd60e51b815260206004820152600e60248201526d313934b233b2a332b29032b9391760911b6044820152606401610bae565b6007546001600160a01b031663209afe56826000807f0000000000000000000000000000000000000000000000000000000000000000888b8e846040519080825280601f01601f19166020018201604052801561182d576020820181803683370190505b508b6040518a63ffffffff1660e01b8152600401611852989796959493929190612bfa565b6000604051808303818588803b15801561186b57600080fd5b505af115801561187f573d6000803e3d6000fd5b50505050505050505050505050565b606060045b604080516001600160a01b0387166020820152808201859052815180820383018152606082019092526118cb92918691608001612bd8565b60405160208183030381529060405290509392505050565b600a54600160401b900460ff1661190c5760405162461bcd60e51b8152600401610bae90612992565b6000821161192c5760405162461bcd60e51b8152600401610bae90612c70565b80158061193857504281115b6119545760405162461bcd60e51b8152600401610bae90612c98565b81611974856001600160a01b031660009081526020819052604090205490565b10156119c25760405162461bcd60e51b815260206004820152601b60248201527f73656c6c20616d6f756e7420657863656564732062616c616e636500000000006044820152606401610bae565b60006119cf868585610d23565b90506119db86826129cc565b3410156119fa5760405162461bcd60e51b8152600401610bae906129df565b611a048584612078565b600a54601054610fdd9183916001600160401b03909116906001600160a01b031689610c6489828a5b60606006611893565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6007546040516342feeaa160e11b81526000916001600160a01b0316906385fdd54290611abf90889088908890889060040161293f565b602060405180830381865afa158015611adc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b009190612979565b95945050505050565b60606000611893565b60ff8316611b485760008082806020019051810190611b319190612cbf565b91509150611b4187878484612198565b5050611c3d565b60021960ff841601611b8857600080600083806020019051810190611b6d9190612ced565b925092509250611b8088888585856121cb565b505050611c3d565b60041960ff841601611bc057600080600083806020019051810190611bad9190612ced565b925092509250611b808888858585612241565b60061960ff841601611bf857600080600083806020019051810190611be59190612ced565b925092509250611b808888858486612241565b60001960ff841601611c2157611c1c600a805460ff60401b1916600160401b179055565b611c3d565b60405160016235f76760e11b0319815260040160405180910390fd5b5050505050565b60ff8316611c745760008082806020019051810190611c639190612cbf565b91509150611b418488888585611c21565b60011960ff841601611caa57600081806020019051810190611c969190612b3b565b9050611ca483878784611c21565b50611c3d565b60031960ff841601611ccd5760008082806020019051810190611c639190612cbf565b60051960ff841601611c215760008082806020019051810190611c639190612cbf565b600a54600160401b900460ff16611d195760405162461bcd60e51b8152600401610bae90612992565b801580611d2557504281115b611d415760405162461bcd60e51b8152600401610bae90612c98565b6000611d4e848434610cce565b9050600084611d5d8334612b28565b611d679190612b28565b905060008111611d895760405162461bcd60e51b8152600401610bae90612c70565b600a54601054611c3d9184916001600160401b03909116906001600160a01b0316611db489866129cc565b610c64898b8861188e565b6010546000906001600160a01b038381169116148015610cc75750600a546001600160401b0390811690841614905092915050565b600080611e018434612b28565b9660009650945050505050565b60006060611e765a85609663de2a60f760e01b8c8c8c8c8b604051602401611e3a959493929190612d24565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152309392919061228d565b90999098509650505050505050565b600160096000828254611e9891906129cc565b90915550506040517ff0b808371c16e9cdc7de5c17ebb6bc3166c06a15d8112e2b44164fde17efadfe90611ed790879087908790879034908890612d63565b60405180910390a15050505050565b6001600160a01b038316611f4a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bae565b6001600160a01b038216611fac5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bae565b6001600160a01b038316600090815260208190526040902054818110156120245760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bae565b6001600160a01b0384811660008181526020818152604080832087870390559387168083529184902080548701905592518581529092600080516020612dbf833981519152910160405180910390a3610938565b6001600160a01b0382166120d85760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610bae565b6001600160a01b0382166000908152602081905260409020548181101561214c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610bae565b6001600160a01b038316600081815260208181526040808320868603905560028054879003905551858152919291600080516020612dbf833981519152910160405180910390a3505050565b6001600160a01b0382166000908152600d6020526040812080548392906121c09084906129cc565b909155505050505050565b80156121db576121db8382612317565b8115612219576040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015612217573d6000803e3d6000fd5b505b50506001600160a01b03166000908152600e60205260409020805460ff191660011790555050565b8015612251576122518382612317565b8115611c3d576040516001600160a01b0384169083156108fc029084906000818181858888f19350505050158015610fdd573d6000803e3d6000fd5b6000606060008060008661ffff166001600160401b038111156122b2576122b2612555565b6040519080825280601f01601f1916602001820160405280156122dc576020820181803683370190505b5090506000808751602089018b8e8ef191503d9250868311156122fd578692505b828152826000602083013e90999098509650505050505050565b6001600160a01b03821661236d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610bae565b806002600082825461237f91906129cc565b90915550506001600160a01b03821660008181526020818152604080832080548601905551848152600080516020612dbf833981519152910160405180910390a35050565b6001600160401b0381168114610c7557600080fd5b60008083601f8401126123eb57600080fd5b5081356001600160401b0381111561240257600080fd5b60208301915083602082850101111561241a57600080fd5b9250929050565b6000806000806060858703121561243757600080fd5b8435612442816123c4565b93506020850135925060408501356001600160401b0381111561246457600080fd5b612470878288016123d9565b95989497509550505050565b60005b8381101561249757818101518382015260200161247f565b50506000910152565b600081518084526124b881602086016020860161247c565b601f01601f19169290920160200192915050565b602081526000610cc760208301846124a0565b6001600160a01b0381168114610c7557600080fd5b6000806040838503121561250757600080fd5b8235612512816124df565b946020939093013593505050565b6000806040838503121561253357600080fd5b823591506020830135801515811461254a57600080fd5b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561259357612593612555565b604052919050565b60006001600160401b038211156125b4576125b4612555565b50601f01601f191660200190565b600082601f8301126125d357600080fd5b81356125e66125e18261259b565b61256b565b8181528460208386010111156125fb57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561262e57600080fd5b8435612639816123c4565b93506020850135612649816124df565b92506040850135915060608501356001600160401b0381111561266b57600080fd5b612677878288016125c2565b91505092959194509250565b60008060006060848603121561269857600080fd5b83356126a3816124df565b925060208401356126b3816124df565b929592945050506040919091013590565b6000602082840312156126d657600080fd5b8135610cc7816124df565b6000602082840312156126f357600080fd5b5035919050565b6000806040838503121561270d57600080fd5b82359150602083013561254a816124df565b60008060006060848603121561273457600080fd5b8335925060208401356126b3816124df565b6000806000806080858703121561275c57600080fd5b84359350602085013592506040850135612775816124df565b9396929550929360600135925050565b6000806000806000806080878903121561279e57600080fd5b8635955060208701356127b0816123c4565b945060408701356001600160401b03808211156127cc57600080fd5b6127d88a838b016123d9565b909650945060608901359150808211156127f157600080fd5b506127fe89828a016123d9565b979a9699509497509295939492505050565b6000806040838503121561282357600080fd5b823561282e816124df565b9150602083013561254a816124df565b60ff81168114610c7557600080fd5b60008060008060008060a0878903121561286657600080fd5b8635612871816123c4565b95506020870135612881816124df565b945060408701356128918161283e565b93506060870135925060808701356001600160401b038111156128b357600080fd5b6127fe89828a016123d9565b600080604083850312156128d257600080fd5b50508035926020909101359150565b600181811c908216806128f557607f821691505b60208210810361291557634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b0383168152604060208201819052600090610cfc908301846124a0565b8481526001600160401b038416602082015260806040820152600061296760808301856124a0565b8281036060840152610ddc81856124a0565b60006020828403121561298b57600080fd5b5051919050565b6020808252600a90820152691d5b9b185d5b98da195960b21b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a0357610a036129b6565b6020808252601590820152740c4e4d2c8ceca40cccaca40dcdee840cadcdeeaced605b1b604082015260600190565b60008060408385031215612a2157600080fd5b8235612a2c816124df565b915060208301356001600160401b03811115612a4757600080fd5b612a53858286016125c2565b9150509250929050565b6001600160401b038516815260018060a01b0384166020820152826040820152608060608201526000610b2560808301846124a0565b600080600060608486031215612aa857600080fd5b8351612ab38161283e565b6020850151604086015191945092506001600160401b03811115612ad657600080fd5b8401601f81018613612ae757600080fd5b8051612af56125e18261259b565b818152876020838501011115612b0a57600080fd5b612b1b82602083016020860161247c565b8093505050509250925092565b81810381811115610a0357610a036129b6565b600060208284031215612b4d57600080fd5b8151610cc7816124df565b600060208284031215612b6a57600080fd5b8151610cc7816123c4565b6001600160f81b0319861681526001810185905260e884901b6001600160e81b031916602182015260c083901b6001600160c01b03191660248201528151600090612bc781602c85016020870161247c565b91909101602c019695505050505050565b60ff84168152826020820152606060408201526000611b0060608301846124a0565b6001600160401b03898116825288811660208301526001600160a01b0388811660408401528716606083015260808201869052841660a082015261010060c08201819052600090612c4d838201866124a0565b905082810360e0840152612c6181856124a0565b9b9a5050505050505050505050565b6020808252600e908201526d30b6b7bab73a1034b71032b9391760911b604082015260600190565b6020808252600d908201526c3232b0b23634b7329032b9391760991b604082015260600190565b60008060408385031215612cd257600080fd5b8251612cdd816124df565b6020939093015192949293505050565b600080600060608486031215612d0257600080fd5b8351612d0d816124df565b602085015160409095015190969495509392505050565b6001600160401b038616815260018060a01b038516602082015260ff8416604082015282606082015260a060808201526000610ddc60a08301846124a0565b6001600160401b03871681526001600160a01b038616602082015260c060408201819052600090612d96908301876124a0565b8281036060840152612da881876124a0565b6080840195909552505060a0015294935050505056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212205a20a60bc5be31e800754b06ab07766fb9bba526cd437093679c7b6307a55ae264736f6c63430008170033000000000000000000000000176baa4c563985209c159f3ecc7d9f09d3914de00000000000000000000000000000000000000000000000000000000000006f66