Overview
Total Supply:
0

Profile Summary
Blockchain:
Mantle (5000)


Decimals:
Contract Source Code Verified (Exact Match)
Contract Name:
Router

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Created At:
Tue, 14 Nov 2023 22:36:07 GMT
Router.sol
contracts
Router.sol


Contract ABI
[
  {
    "inputs": [],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint16",
        "name": "chainId",
        "type": "uint16"
      },
      {
        "indexed": false,
        "internalType": "bytes",
        "name": "srcAddress",
        "type": "bytes"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "nonce",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "token",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amountLD",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bytes",
        "name": "payload",
        "type": "bytes"
      },
      {
        "indexed": false,
        "internalType": "bytes",
        "name": "reason",
        "type": "bytes"
      }
    ],
    "name": "CachedSwapSaved",
    "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": "uint16",
        "name": "srcChainId",
        "type": "uint16"
      },
      {
        "indexed": true,
        "internalType": "bytes",
        "name": "srcAddress",
        "type": "bytes"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "nonce",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "srcPoolId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "dstPoolId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amountSD",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "mintAmountSD",
        "type": "uint256"
      }
    ],
    "name": "RedeemLocalCallback",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint8",
        "name": "bridgeFunctionType",
        "type": "uint8"
      },
      {
        "indexed": false,
        "internalType": "uint16",
        "name": "chainId",
        "type": "uint16"
      },
      {
        "indexed": false,
        "internalType": "bytes",
        "name": "srcAddress",
        "type": "bytes"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "nonce",
        "type": "uint256"
      }
    ],
    "name": "Revert",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint16",
        "name": "srcChainId",
        "type": "uint16"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "_srcPoolId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "_dstPoolId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "bytes",
        "name": "to",
        "type": "bytes"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "redeemAmountSD",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "mintAmountSD",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "nonce",
        "type": "uint256"
      },
      {
        "indexed": true,
        "internalType": "bytes",
        "name": "srcAddress",
        "type": "bytes"
      }
    ],
    "name": "RevertRedeemLocal",
    "type": "event"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_poolId",
        "type": "uint256"
      },
      {
        "internalType": "uint16",
        "name": "_dstChainId",
        "type": "uint16"
      },
      {
        "internalType": "uint256",
        "name": "_dstPoolId",
        "type": "uint256"
      }
    ],
    "name": "activateChainPath",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_poolId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_amountLD",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "_to",
        "type": "address"
      }
    ],
    "name": "addLiquidity",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "bridge",
    "outputs": [
      {
        "internalType": "contract Bridge",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "",
        "type": "uint16"
      },
      {
        "internalType": "bytes",
        "name": "",
        "type": "bytes"
      },
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "name": "cachedSwapLookup",
    "outputs": [
      {
        "internalType": "address",
        "name": "token",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amountLD",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "bytes",
        "name": "payload",
        "type": "bytes"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_poolId",
        "type": "uint256"
      },
      {
        "internalType": "bool",
        "name": "_fullMode",
        "type": "bool"
      }
    ],
    "name": "callDelta",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_srcChainId",
        "type": "uint16"
      },
      {
        "internalType": "bytes",
        "name": "_srcAddress",
        "type": "bytes"
      },
      {
        "internalType": "uint256",
        "name": "_nonce",
        "type": "uint256"
      }
    ],
    "name": "clearCachedSwap",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_poolId",
        "type": "uint256"
      },
      {
        "internalType": "uint16",
        "name": "_dstChainId",
        "type": "uint16"
      },
      {
        "internalType": "uint256",
        "name": "_dstPoolId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_weight",
        "type": "uint256"
      }
    ],
    "name": "createChainPath",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_poolId",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "_token",
        "type": "address"
      },
      {
        "internalType": "uint8",
        "name": "_sharedDecimals",
        "type": "uint8"
      },
      {
        "internalType": "uint8",
        "name": "_localDecimals",
        "type": "uint8"
      },
      {
        "internalType": "string",
        "name": "_name",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "_symbol",
        "type": "string"
      }
    ],
    "name": "createPool",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_dstChainId",
        "type": "uint16"
      },
      {
        "internalType": "uint256",
        "name": "_dstPoolId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_srcPoolId",
        "type": "uint256"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "credits",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "idealBalance",
            "type": "uint256"
          }
        ],
        "internalType": "struct Pool.CreditObj",
        "name": "_c",
        "type": "tuple"
      }
    ],
    "name": "creditChainPath",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "factory",
    "outputs": [
      {
        "internalType": "contract Factory",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_srcPoolId",
        "type": "uint16"
      },
      {
        "internalType": "uint256",
        "name": "_amountLP",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "_to",
        "type": "address"
      }
    ],
    "name": "instantRedeemLocal",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "amountSD",
        "type": "uint256"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "mintFeeOwner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "owner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "protocolFeeOwner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_dstChainId",
        "type": "uint16"
      },
      {
        "internalType": "uint8",
        "name": "_functionType",
        "type": "uint8"
      },
      {
        "internalType": "bytes",
        "name": "_toAddress",
        "type": "bytes"
      },
      {
        "internalType": "bytes",
        "name": "_transferAndCallPayload",
        "type": "bytes"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "dstGasForCall",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "dstNativeAmount",
            "type": "uint256"
          },
          {
            "internalType": "bytes",
            "name": "dstNativeAddr",
            "type": "bytes"
          }
        ],
        "internalType": "struct IStargateRouter.lzTxObj",
        "name": "_lzTxParams",
        "type": "tuple"
      }
    ],
    "name": "quoteLayerZeroFee",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_dstChainId",
        "type": "uint16"
      },
      {
        "internalType": "uint256",
        "name": "_srcPoolId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_dstPoolId",
        "type": "uint256"
      },
      {
        "internalType": "address payable",
        "name": "_refundAddress",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_amountLP",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "_to",
        "type": "bytes"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "dstGasForCall",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "dstNativeAmount",
            "type": "uint256"
          },
          {
            "internalType": "bytes",
            "name": "dstNativeAddr",
            "type": "bytes"
          }
        ],
        "internalType": "struct IStargateRouter.lzTxObj",
        "name": "_lzTxParams",
        "type": "tuple"
      }
    ],
    "name": "redeemLocal",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_srcChainId",
        "type": "uint16"
      },
      {
        "internalType": "bytes",
        "name": "_srcAddress",
        "type": "bytes"
      },
      {
        "internalType": "uint256",
        "name": "_nonce",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_srcPoolId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_dstPoolId",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "_to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_amountSD",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_mintAmountSD",
        "type": "uint256"
      }
    ],
    "name": "redeemLocalCallback",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_srcChainId",
        "type": "uint16"
      },
      {
        "internalType": "bytes",
        "name": "_srcAddress",
        "type": "bytes"
      },
      {
        "internalType": "uint256",
        "name": "_nonce",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_srcPoolId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_dstPoolId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_amountSD",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "_to",
        "type": "bytes"
      }
    ],
    "name": "redeemLocalCheckOnRemote",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_dstChainId",
        "type": "uint16"
      },
      {
        "internalType": "uint256",
        "name": "_srcPoolId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_dstPoolId",
        "type": "uint256"
      },
      {
        "internalType": "address payable",
        "name": "_refundAddress",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_amountLP",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_minAmountLD",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "_to",
        "type": "bytes"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "dstGasForCall",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "dstNativeAmount",
            "type": "uint256"
          },
          {
            "internalType": "bytes",
            "name": "dstNativeAddr",
            "type": "bytes"
          }
        ],
        "internalType": "struct IStargateRouter.lzTxObj",
        "name": "_lzTxParams",
        "type": "tuple"
      }
    ],
    "name": "redeemRemote",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_srcChainId",
        "type": "uint16"
      },
      {
        "internalType": "bytes",
        "name": "_srcAddress",
        "type": "bytes"
      },
      {
        "internalType": "uint256",
        "name": "_nonce",
        "type": "uint256"
      }
    ],
    "name": "retryRevert",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "",
        "type": "uint16"
      },
      {
        "internalType": "bytes",
        "name": "",
        "type": "bytes"
      },
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "name": "revertLookup",
    "outputs": [
      {
        "internalType": "bytes",
        "name": "",
        "type": "bytes"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_dstChainId",
        "type": "uint16"
      },
      {
        "internalType": "bytes",
        "name": "_srcAddress",
        "type": "bytes"
      },
      {
        "internalType": "uint256",
        "name": "_nonce",
        "type": "uint256"
      },
      {
        "internalType": "address payable",
        "name": "_refundAddress",
        "type": "address"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "dstGasForCall",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "dstNativeAmount",
            "type": "uint256"
          },
          {
            "internalType": "bytes",
            "name": "dstNativeAddr",
            "type": "bytes"
          }
        ],
        "internalType": "struct IStargateRouter.lzTxObj",
        "name": "_lzTxParams",
        "type": "tuple"
      }
    ],
    "name": "revertRedeemLocal",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_dstChainId",
        "type": "uint16"
      },
      {
        "internalType": "uint256",
        "name": "_srcPoolId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_dstPoolId",
        "type": "uint256"
      },
      {
        "internalType": "address payable",
        "name": "_refundAddress",
        "type": "address"
      }
    ],
    "name": "sendCredits",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "contract Bridge",
        "name": "_bridge",
        "type": "address"
      },
      {
        "internalType": "contract Factory",
        "name": "_factory",
        "type": "address"
      }
    ],
    "name": "setBridgeAndFactory",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_poolId",
        "type": "uint256"
      },
      {
        "internalType": "bool",
        "name": "_batched",
        "type": "bool"
      },
      {
        "internalType": "uint256",
        "name": "_swapDeltaBP",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_lpDeltaBP",
        "type": "uint256"
      },
      {
        "internalType": "bool",
        "name": "_defaultSwapMode",
        "type": "bool"
      },
      {
        "internalType": "bool",
        "name": "_defaultLPMode",
        "type": "bool"
      }
    ],
    "name": "setDeltaParam",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_poolId",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "_feeLibraryAddr",
        "type": "address"
      }
    ],
    "name": "setFeeLibrary",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_poolId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_mintFeeBP",
        "type": "uint256"
      }
    ],
    "name": "setFees",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_owner",
        "type": "address"
      }
    ],
    "name": "setMintFeeOwner",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_owner",
        "type": "address"
      }
    ],
    "name": "setProtocolFeeOwner",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_poolId",
        "type": "uint256"
      },
      {
        "internalType": "bool",
        "name": "_swapStop",
        "type": "bool"
      }
    ],
    "name": "setSwapStop",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_poolId",
        "type": "uint256"
      },
      {
        "internalType": "uint16",
        "name": "_dstChainId",
        "type": "uint16"
      },
      {
        "internalType": "uint256",
        "name": "_dstPoolId",
        "type": "uint256"
      },
      {
        "internalType": "uint16",
        "name": "_weight",
        "type": "uint16"
      }
    ],
    "name": "setWeightForChainPath",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_dstChainId",
        "type": "uint16"
      },
      {
        "internalType": "uint256",
        "name": "_srcPoolId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_dstPoolId",
        "type": "uint256"
      },
      {
        "internalType": "address payable",
        "name": "_refundAddress",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "_amountLD",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_minAmountLD",
        "type": "uint256"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "dstGasForCall",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "dstNativeAmount",
            "type": "uint256"
          },
          {
            "internalType": "bytes",
            "name": "dstNativeAddr",
            "type": "bytes"
          }
        ],
        "internalType": "struct IStargateRouter.lzTxObj",
        "name": "_lzTxParams",
        "type": "tuple"
      },
      {
        "internalType": "bytes",
        "name": "_to",
        "type": "bytes"
      },
      {
        "internalType": "bytes",
        "name": "_payload",
        "type": "bytes"
      }
    ],
    "name": "swap",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint16",
        "name": "_srcChainId",
        "type": "uint16"
      },
      {
        "internalType": "bytes",
        "name": "_srcAddress",
        "type": "bytes"
      },
      {
        "internalType": "uint256",
        "name": "_nonce",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_srcPoolId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_dstPoolId",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_dstGasForCall",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "_to",
        "type": "address"
      },
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "amount",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "eqFee",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "eqReward",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "lpFee",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "protocolFee",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "lkbRemove",
            "type": "uint256"
          }
        ],
        "internalType": "struct Pool.SwapObj",
        "name": "_s",
        "type": "tuple"
      },
      {
        "internalType": "bytes",
        "name": "_payload",
        "type": "bytes"
      }
    ],
    "name": "swapRemote",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_poolId",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "_to",
        "type": "address"
      }
    ],
    "name": "withdrawMintFee",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_poolId",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "_to",
        "type": "address"
      }
    ],
    "name": "withdrawProtocolFee",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  }
]


Contract Creation Code
60806040523480156200001157600080fd5b5060006200001e62000072565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001805562000076565b3390565b6151c980620000866000396000f3fe60806040526004361061021a5760003560e01c806387b21efc11610123578063c45a0155116100ab578063cefbdde21161006f578063cefbdde2146105dd578063da133a06146105fd578063e78cea921461062a578063f2fde38b1461063f578063fba6e2801461065f5761021a565b8063c45a01551461053b578063c4de93a514610550578063c6a276241461057d578063c7d968e31461059d578063c8adf12d146105bd5761021a565b80639ba3aa74116100f25780639ba3aa74146104cb5780639fbf10fc146104de578063a18fa804146104f1578063a96fbed414610511578063af640d82146105265761021a565b806387b21efc146104635780638da5cb5b146104835780638f2e1d181461049857806398e391a1146104ab5761021a565b806343a30630116101a6578063715018a611610175578063715018a6146103ce5780637af935a1146103e35780637b84d287146104105780637f7212981461043057806384d0dba3146104505761021a565b806343a30630146103685780635500585c1461038857806360a3b95c146103a85780636a7982da146103bb5761021a565b806323fd4647116101ed57806323fd4647146102b85780632f925555146102e857806334aba41014610308578063403a9f7a14610328578063424c9119146103485761021a565b80630403bce51461021f5780630a512369146102415780630b78f9c01461027857806316fb60f514610298575b600080fd5b34801561022b57600080fd5b5061023f61023a366004613b12565b61067f565b005b34801561024d57600080fd5b5061026161025c366004613ed5565b6108eb565b60405161026f929190614f2c565b60405180910390f35b34801561028457600080fd5b5061023f610293366004614193565b61098b565b3480156102a457600080fd5b5061023f6102b3366004614159565b610a5e565b3480156102c457600080fd5b506102d86102d336600461390f565b610b2c565b60405161026f94939291906144e3565b3480156102f457600080fd5b5061023f6103033660046139f1565b610c0b565b34801561031457600080fd5b5061023f610323366004613737565b610c46565b34801561033457600080fd5b5061023f610343366004613825565b610cf0565b34801561035457600080fd5b5061023f61036336600461378b565b610f23565b34801561037457600080fd5b5061023f61038336600461407a565b61103d565b34801561039457600080fd5b5061023f6103a3366004613f9f565b61111c565b61023f6103b6366004613825565b611180565b61023f6103c936600461387c565b6113fd565b3480156103da57600080fd5b5061023f6116ae565b3480156103ef57600080fd5b506104036103fe366004613fc3565b61175a565b60405161026f919061442b565b34801561041c57600080fd5b5061023f61042b366004614114565b61187d565b34801561043c57600080fd5b5061023f61044b366004613963565b61191d565b61023f61045e366004613cda565b611961565b34801561046f57600080fd5b5061023f61047e3660046141d7565b611c96565b34801561048f57600080fd5b50610403611e81565b61023f6104a6366004613c35565b611e90565b3480156104b757600080fd5b5061023f6104c6366004614056565b6120b1565b61023f6104d9366004613bee565b61214d565b61023f6104ec366004613d79565b6122c5565b3480156104fd57600080fd5b5061023f61050c366004613e59565b61261a565b34801561051d57600080fd5b50610403612682565b34801561053257600080fd5b50610403612691565b34801561054757600080fd5b506104036126a0565b34801561055c57600080fd5b5061057061056b366004613baf565b6126af565b60405161026f9190614ed6565b34801561058957600080fd5b5061023f610598366004613f9f565b6127ba565b3480156105a957600080fd5b5061023f6105b83660046140e0565b612856565b3480156105c957600080fd5b5061023f6105d8366004613f9f565b612922565b3480156105e957600080fd5b5061023f6105f8366004613737565b612986565b34801561060957600080fd5b5061061d61061836600461390f565b612a30565b60405161026f919061454a565b34801561063657600080fd5b50610403612aed565b34801561064b57600080fd5b5061023f61065a366004613737565b612afc565b34801561066b57600080fd5b5061023f61067a366004614056565b612bfe565b6005546001600160a01b031633146106b25760405162461bcd60e51b81526004016106a99061462b565b60405180910390fd5b60006106bd85612c38565b604051637544f15560e11b81529091506001600160a01b0382169063ea89e2aa906106f0908c908a908990600401614c2c565b6040805180830381600087803b15801561070957600080fd5b505af1925050508015610739575060408051601f3d908101601f19168201909252610736918101906141b4565b60015b6108025760018686600087878760405160200161075c9796959493929190614fa7565b60408051601f1981840301815282825261ffff8c166000908152600660205291909120909161078c908b9061440f565b9081526020016040518091039020600089815260200190815260200160002090805190602001906107be9291906134af565b507fa5d2ba6de30cc2f2e91c5a29ba66b148c27826954217e2f67cb8983541da21cf60018a8a8a6040516107f59493929190614f3a565b60405180910390a16108e0565b6001888884848989604051602001610820979695949392919061502e565b60408051601f1981840301815282825261ffff8e1660009081526006602052919091209091610850908d9061440f565b908152602001604051809103902060008b815260200190815260200160002090805190602001906108829291906134af565b5089604051610891919061440f565b6040518091039020897f6ace246fa15cf1d5decabf654b1e8581a4422e0fcf4c1ed4bf83f41687caec198d8b8b8a8a89896040516108d59796959493929190614e48565b60405180910390a350505b505050505050505050565b600554604051630a51236960e01b815260009182916001600160a01b0390911690630a5123699061092c908c908c908c908c908c908c908c90600401614e88565b604080518083038186803b15801561094357600080fd5b505afa158015610957573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097b91906141b4565b9150915097509795505050505050565b610993612ce6565b6001600160a01b03166109a4611e81565b6001600160a01b0316146109ed576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b60006109f883612c38565b6040516369fe0e2d60e01b81529091506001600160a01b038216906369fe0e2d90610a27908590600401614ed6565b600060405180830381600087803b158015610a4157600080fd5b505af1158015610a55573d6000803e3d6000fd5b50505050505050565b610a66612ce6565b6001600160a01b0316610a77611e81565b6001600160a01b031614610ac0576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b6000610acb85612c38565b6040516320d6bc7560e01b81529091506001600160a01b038216906320d6bc7590610afe90879087908790600401614c2c565b600060405180830381600087803b158015610b1857600080fd5b505af11580156108e0573d6000803e3d6000fd5b600760209081526000938452604080852084518086018401805192815290840195840195909520945292815290835291819020805460018083015460028085015460038601805488516101009682161596909602600019011692909204601f81018990048902850189019097528684526001600160a01b03948516979296941694939091830182828015610c015780601f10610bd657610100808354040283529160200191610c01565b820191906000526020600020905b815481529060010190602001808311610be457829003601f168201915b5050505050905084565b6005546001600160a01b03163314610c355760405162461bcd60e51b81526004016106a99061462b565b6108e0898989898989898989612cea565b610c4e612ce6565b6001600160a01b0316610c5f611e81565b6001600160a01b031614610ca8576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b6001600160a01b038116610cce5760405162461bcd60e51b81526004016106a99061483c565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b61ffff84166000908152600760205260408082209051610d1390869086906143ff565b9081526040805160209281900383018120600086815290845282902060808201835280546001600160a01b039081168352600180830154868501526002808401549092168486015260038301805486516101009382161593909302600019011692909204601f810187900487028201870190955284815292949193606086019392830182828015610de55780601f10610dba57610100808354040283529160200191610de5565b820191906000526020600020905b815481529060010190602001808311610dc857829003601f168201915b5050509190925250505060408101519091506001600160a01b0316610e1c5760405162461bcd60e51b81526004016106a990614873565b604080516080810182526000808252602080830182905282840182905283518082018552828152606084015261ffff89168252600790528290209151909190610e6890879087906143ff565b90815260408051602092819003830190206000868152908352819020835181546001600160a01b03199081166001600160a01b0392831617835585850151600184015592850151600283018054909416911617909155606083015180519192610ed9926003850192909101906134af565b505050604080820151825160208401516060850151935163ab8236f360e01b81526001600160a01b039093169363ab8236f393610afe938b938b938b938b939291906004016149e0565b610f2b612ce6565b6001600160a01b0316610f3c611e81565b6001600160a01b031614610f85576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b6005546001600160a01b0316158015610fa757506002546001600160a01b0316155b610fc35760405162461bcd60e51b81526004016106a99061455d565b6001600160a01b038216610fe95760405162461bcd60e51b81526004016106a990614775565b6001600160a01b03811661100f5760405162461bcd60e51b81526004016106a990614707565b600580546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055565b611045612ce6565b6001600160a01b0316611056611e81565b6001600160a01b03161461109f576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b60006110aa87612c38565b60405163e065608b60e01b81529091506001600160a01b0382169063e065608b906110e19089908990899089908990600401614521565b600060405180830381600087803b1580156110fb57600080fd5b505af115801561110f573d6000803e3d6000fd5b5050505050505050505050565b6004546001600160a01b031633146111465760405162461bcd60e51b81526004016106a990614662565b600061115183612c38565b60405163011dbbf960e61b81529091506001600160a01b0382169063476efe4090610a2790859060040161442b565b61ffff841660009081526006602052604080822090516111a390869086906143ff565b90815260408051602092819003830181206000868152908452829020805460026001821615610100026000190190911604601f8101859004850283018501909352828252909290919083018282801561123d5780601f106112125761010080835404028352916020019161123d565b820191906000526020600020905b81548152906001019060200180831161122057829003601f168201915b5050505050905060008151116112655760405162461bcd60e51b81526004016106a990614699565b6040805160208082018352600080835261ffff891681526006909152829020915190919061129690879087906143ff565b9081526020016040518091039020600084815260200190815260200160002090805190602001906112c89291906134af565b50602081015160ff811660021415611353576000806000806000868060200190518101906112f69190614204565b95509550955095509550506113498b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d92508a9150899050888888613166565b50505050506113f5565b60ff8116600314156113dd576000806000806000808780602001905181019061137c9190614263565b965096509650965096509650506113d28c8c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508e92508b91508a905089898989612cea565b5050505050506113f5565b60405162461bcd60e51b81526004016106a9906148e1565b505050505050565b6001600160a01b0382166114235760405162461bcd60e51b81526004016106a99061494f565b61ffff8616600090815260066020526040808220905161144690889088906143ff565b90815260408051602092819003830181206000888152908452829020805460026001821615610100026000190190911604601f810185900485028301850190935282825290929091908301828280156114e05780601f106114b5576101008083540402835291602001916114e0565b820191906000526020600020905b8154815290600101906020018083116114c357829003601f168201915b5050505050905060008151116115085760405162461bcd60e51b81526004016106a990614699565b602081015160ff81166001146115305760405162461bcd60e51b81526004016106a9906148e1565b506040805160208082018352600080835261ffff8b1681526006909152829020915190919061156290899089906143ff565b9081526020016040518091039020600086815260200190815260200160002090805190602001906115949291906134af565b50604081015160608201516115a761353b565b60006115b283612c38565b604051630474ec6160e11b81529091506001600160a01b038216906308e9d8c2906115e3908e908890600401614b0e565b6040805180830381600087803b1580156115fc57600080fd5b505af1158015611610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163491906137c3565b6005546040516396aae4af60e01b81529193506001600160a01b031691506396aae4af903490611670908e908b9087908c908c90600401614995565b6000604051808303818588803b15801561168957600080fd5b505af115801561169d573d6000803e3d6000fd5b505050505050505050505050505050565b6116b6612ce6565b6001600160a01b03166116c7611e81565b6001600160a01b031614611710576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000611764612ce6565b6001600160a01b0316611775611e81565b6001600160a01b0316146117be576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b6001600160a01b0386166117e45760405162461bcd60e51b81526004016106a9906145ad565b600254604051637af935a160e01b81526001600160a01b0390911690637af935a19061181e908a908a908a908a908a908a90600401614edf565b602060405180830381600087803b15801561183857600080fd5b505af115801561184c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118709190613753565b90505b9695505050505050565b611885612ce6565b6001600160a01b0316611896611e81565b6001600160a01b0316146118df576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b60006118ea85612c38565b60405163a985565f60e01b81529091506001600160a01b0382169063a985565f90610afe90879087908790600401614c0e565b6005546001600160a01b031633146119475760405162461bcd60e51b81526004016106a99061462b565b6119578888888888888888613166565b5050505050505050565b600260015414156119a7576040805162461bcd60e51b815260206004820152601f602482015260008051602061510d833981519152604482015290519081900360640190fd5b60026001556001600160a01b0386166119d25760405162461bcd60e51b81526004016106a99061494f565b600085116119f25760405162461bcd60e51b81526004016106a9906145e4565b6119fa613555565b611a0261353b565b6000611a0d8b612c38565b90506000816001600160a01b031663f6cd35ee8a6040518263ffffffff1660e01b8152600401611a3d9190614ed6565b60206040518083038186803b158015611a5557600080fd5b505afa158015611a69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8d9190613f87565b9050816001600160a01b0316631b7319b68e8d33858d60006040518763ffffffff1660e01b8152600401611ac696959493929190614b4c565b60c060405180830381600087803b158015611ae057600080fd5b505af1158015611af4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b18919061380a565b9350816001600160a01b0316637298a5dc8e8d338d6040518563ffffffff1660e01b8152600401611b4c9493929190614b22565b600060405180830381600087803b158015611b6657600080fd5b505af1158015611b7a573d6000803e3d6000fd5b50505050816001600160a01b03166308e9d8c28e8d6040518363ffffffff1660e01b8152600401611bac929190614b0e565b6040805180830381600087803b158015611bc557600080fd5b505af1158015611bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfd91906137c3565b92505050600560009054906101000a90046001600160a01b03166001600160a01b03166351156e73348d8d8d8d87898b8e8e6040518b63ffffffff1660e01b8152600401611c5399989796959493929190614d11565b6000604051808303818588803b158015611c6c57600080fd5b505af1158015611c80573d6000803e3d6000fd5b5050600180555050505050505050505050505050565b60026001541415611cdc576040805162461bcd60e51b815260206004820152601f602482015260008051602061510d833981519152604482015290519081900360640190fd5b60026001556000611cec84612c38565b90506000816001600160a01b031663feb56b156040518163ffffffff1660e01b815260040160206040518083038186803b158015611d2957600080fd5b505afa158015611d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d619190613f87565b9050611d7781611d7186826132f8565b90613361565b9350611df5826001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b158015611db557600080fd5b505afa158015611dc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ded9190613753565b3384876133c1565b6040516340c10f1960e01b81526001600160a01b038316906340c10f1990611e2390869088906004016144ca565b602060405180830381600087803b158015611e3d57600080fd5b505af1158015611e51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e759190613f87565b50506001805550505050565b6000546001600160a01b031690565b60026001541415611ed6576040805162461bcd60e51b815260206004820152601f602482015260008051602061510d833981519152604482015290519081900360640190fd5b60026001556001600160a01b038516611f015760405162461bcd60e51b81526004016106a99061494f565b6000611f0c88612c38565b905060008511611f2e5760405162461bcd60e51b81526004016106a9906147ac565b604051632c3eac2f60e21b81526000906001600160a01b0383169063b0fab0bc90611f679033908a908f908e908c908c90600401614462565b602060405180830381600087803b158015611f8157600080fd5b505af1158015611f95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb99190613f87565b905060008111611fdb5760405162461bcd60e51b81526004016106a9906147ed565b604051630474ec6160e11b81526000906001600160a01b038416906308e9d8c29061200c908e908d90600401614b0e565b6040805180830381600087803b15801561202557600080fd5b505af1158015612039573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205d91906137c3565b9050600560009054906101000a90046001600160a01b03166001600160a01b0316633cef94b9348d8d8d8d87898e8e8e6040518b63ffffffff1660e01b8152600401611c5399989796959493929190614d9d565b6120b9612ce6565b6001600160a01b03166120ca611e81565b6001600160a01b031614612113576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b600061211e83612c38565b60405163ac2cc36b60e01b81529091506001600160a01b0382169063ac2cc36b90610a27908590600401614516565b60026001541415612193576040805162461bcd60e51b815260206004820152601f602482015260008051602061510d833981519152604482015290519081900360640190fd5b60026001556001600160a01b0381166121be5760405162461bcd60e51b81526004016106a99061494f565b60006121c984612c38565b90506000816001600160a01b03166308e9d8c287866040518363ffffffff1660e01b81526004016121fb929190614b0e565b6040805180830381600087803b15801561221457600080fd5b505af1158015612228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224c91906137c3565b600554604051632fa7502b60e21b81529192506001600160a01b03169063be9d40ac903490612287908a908a908a908a908990600401614c48565b6000604051808303818588803b1580156122a057600080fd5b505af11580156122b4573d6000803e3d6000fd5b505060018055505050505050505050565b6002600154141561230b576040805162461bcd60e51b815260206004820152601f602482015260008051602061510d833981519152604482015290519081900360640190fd5b60026001558661232d5760405162461bcd60e51b81526004016106a9906148aa565b6001600160a01b0388166123535760405162461bcd60e51b81526004016106a99061494f565b61235b613555565b61236361353b565b600061236e8d612c38565b90506000816001600160a01b031663feb56b156040518163ffffffff1660e01b815260040160206040518083038186803b1580156123ab57600080fd5b505afa1580156123bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e39190613f87565b90506123f381611d718d826132f8565b9a5050806001600160a01b0316631b7319b68f8e338e8e60016040518763ffffffff1660e01b815260040161242d96959493929190614b4c565b60c060405180830381600087803b15801561244757600080fd5b505af115801561245b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247f919061380a565b92506124fd816001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156124bd57600080fd5b505afa1580156124d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f59190613753565b33838d6133c1565b806001600160a01b03166308e9d8c28f8e6040518363ffffffff1660e01b815260040161252b929190614b0e565b6040805180830381600087803b15801561254457600080fd5b505af1158015612558573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061257c91906137c3565b915050600560009054906101000a90046001600160a01b03166001600160a01b03166351156e73348f8f8f8f87898f8f8f8f8f6040518d63ffffffff1660e01b81526004016125d59b9a99989796959493929190614c7d565b6000604051808303818588803b1580156125ee57600080fd5b505af1158015612602573d6000803e3d6000fd5b50506001805550505050505050505050505050505050565b6005546001600160a01b031633146126445760405162461bcd60e51b81526004016106a99061462b565b600061264f83612c38565b60405163b6addec760e01b81529091506001600160a01b0382169063b6addec790610afe90889088908790600401614bef565b6003546001600160a01b031681565b6004546001600160a01b031681565b6002546001600160a01b031681565b6000600260015414156126f7576040805162461bcd60e51b815260206004820152601f602482015260008051602061510d833981519152604482015290519081900360640190fd5b6002600155826127195760405162461bcd60e51b81526004016106a9906147ac565b60006127288561ffff16612c38565b6040516304c35b0d60e11b81529091506001600160a01b03821690630986b61a9061275b9033908890889060040161443f565b602060405180830381600087803b15801561277557600080fd5b505af1158015612789573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ad9190613f87565b6001805595945050505050565b6127c2612ce6565b6001600160a01b03166127d3611e81565b6001600160a01b03161461281c576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b600061282783612c38565b6040516312d72b2f60e21b81529091506001600160a01b03821690634b5cacbc90610a2790859060040161442b565b61285e612ce6565b6001600160a01b031661286f611e81565b6001600160a01b0316146128b8576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b60006128c384612c38565b6040516345ec368560e11b81529091506001600160a01b03821690638bd86d0a906128f49086908690600401614b0e565b600060405180830381600087803b15801561290e57600080fd5b505af1158015611957573d6000803e3d6000fd5b6003546001600160a01b0316331461294c5760405162461bcd60e51b81526004016106a99061473e565b600061295783612c38565b604051632f8c40a560e21b81529091506001600160a01b0382169063be31029490610a2790859060040161442b565b61298e612ce6565b6001600160a01b031661299f611e81565b6001600160a01b0316146129e8576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b6001600160a01b038116612a0e5760405162461bcd60e51b81526004016106a99061483c565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6006602090815260009384526040808520845180860184018051928152908401958401959095209452928152908352918190208054825160026001831615610100026000190190921691909104601f810185900485028201850190935282815292909190830182828015612ae55780601f10612aba57610100808354040283529160200191612ae5565b820191906000526020600020905b815481529060010190602001808311612ac857829003601f168201915b505050505081565b6005546001600160a01b031681565b612b04612ce6565b6001600160a01b0316612b15611e81565b6001600160a01b031614612b5e576040805162461bcd60e51b81526020600482018190526024820152600080516020615174833981519152604482015290519081900360640190fd5b6001600160a01b038116612ba35760405162461bcd60e51b815260040180806020018281038252602681526020018061512d6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000612c0983612c38565b604051637fb6526560e01b81529091506001600160a01b03821690637fb6526590610a27908590600401614516565b60025460405163068bcd8d60e01b81526000916001600160a01b03169063068bcd8d90612c69908590600401614ed6565b60206040518083038186803b158015612c8157600080fd5b505afa158015612c95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb99190613753565b90506001600160a01b038116612ce15760405162461bcd60e51b81526004016106a990614918565b919050565b3390565b6000612cf586612c38565b60405163902b8ab760e01b81529091506001600160a01b0382169063902b8ab790612d2a908d908b9089908990600401614b85565b602060405180830381600087803b158015612d4457600080fd5b505af1925050508015612d74575060408051601f3d908101601f19168201909252612d7191810190613f87565b60015b612e3c576003878787878787604051602001612d969796959493929190614fdf565b60408051601f1981840301815282825261ffff8d1660009081526006602052919091209091612dc6908c9061440f565b908152602001604051809103902060008a81526020019081526020016000209080519060200190612df89291906134af565b507fa5d2ba6de30cc2f2e91c5a29ba66b148c27826954217e2f67cb8983541da21cf60038b8b8b604051612e2f9493929190614f3a565b60405180910390a161315a565b612e45856134a9565b8015612e52575060008351115b1561110f57846001600160a01b031663ab8236f3878d8d8d876001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b158015612ea357600080fd5b505afa158015612eb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edb9190613753565b878a6040518863ffffffff1660e01b8152600401612efe96959493929190614ab5565b600060405180830381600088803b158015612f1857600080fd5b5087f193505050508015612f2a575060015b61110f573d808015612f58576040519150601f19603f3d011682016040523d82523d6000602084013e612f5d565b606091505b506040518060800160405280846001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b158015612fa257600080fd5b505afa158015612fb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fda9190613753565b6001600160a01b03168152602001838152602001876001600160a01b0316815260200185815250600760008e61ffff1661ffff1681526020019081526020016000208c60405161302a919061440f565b908152604080516020928190038301902060008e8152908352819020835181546001600160a01b03199081166001600160a01b039283161783558585015160018401559285015160028301805490941691161790915560608301518051919261309b926003850192909101906134af565b509050507f8186389e97ff190cd5e17304ed8188a4a98a6c8add46e6df94462ac7f7e8dd348c8c8c866001600160a01b031663fc0c546a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156130fc57600080fd5b505afa158015613110573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131349190613753565b868b8a8860405161314c989796959493929190614a3b565b60405180910390a15061110f565b50505050505050505050565b600061317185612c38565b604051632cc36bab60e21b81529091506001600160a01b0382169063b30daeac906131a8908c908a90899089908990600401614bbd565b600060405180830381600087803b1580156131c257600080fd5b505af19250505080156131d3575060015b61329557600286868686866040516020016131f396959493929190614f71565b60408051601f1981840301815282825261ffff8c1660009081526006602052919091209091613223908b9061440f565b9081526020016040518091039020600089815260200190815260200160002090805190602001906132559291906134af565b507fa5d2ba6de30cc2f2e91c5a29ba66b148c27826954217e2f67cb8983541da21cf60028a8a8a60405161328c9493929190614f3a565b60405180910390a15b86886040516132a4919061440f565b60405180910390207fc7379a02e530fbd0a46ea1ce6fd91987e96535798231a796bdc0e1a688a508738b89898989896040516132e596959493929190614e11565b60405180910390a3505050505050505050565b600080821161334e576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161335757fe5b0490505b92915050565b6000826133705750600061335b565b8282028284828161337d57fe5b04146133ba5760405162461bcd60e51b81526004018080602001828103825260218152602001806151536021913960400191505060405180910390fd5b9392505050565b600080856001600160a01b03166323b872dd8686866040516024016133e8939291906144a6565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051613421919061440f565b6000604051808303816000865af19150503d806000811461345e576040519150601f19603f3d011682016040523d82523d6000602084013e613463565b606091505b509150915081801561348d57508051158061348d57508080602001905181019061348d919061376f565b6113f55760405162461bcd60e51b81526004016106a9906146d0565b3b151590565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826134e5576000855561352b565b82601f106134fe57805160ff191683800117855561352b565b8280016001018555821561352b579182015b8281111561352b578251825591602001919060010190613510565b5061353792915061358b565b5090565b604051806040016040528060008152602001600081525090565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b5b80821115613537576000815560010161358c565b8035612ce1816150d7565b60008083601f8401126135bc578182fd5b5081356001600160401b038111156135d2578182fd5b6020830191508360208285010111156135ea57600080fd5b9250929050565b600082601f830112613601578081fd5b813561361461360f82615086565b615063565b818152846020838601011115613628578283fd5b816020850160208301379081016020019190915292915050565b600060c08284031215613653578081fd5b60405160c081018181106001600160401b038211171561366f57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201525092915050565b6000606082840312156136c5578081fd5b604051606081016001600160401b0382821081831117156136e257fe5b816040528293508435835260208501356020840152604085013591508082111561370b57600080fd5b50613718858286016135f1565b6040830152505092915050565b803561ffff81168114612ce157600080fd5b600060208284031215613748578081fd5b81356133ba816150d7565b600060208284031215613764578081fd5b81516133ba816150d7565b600060208284031215613780578081fd5b81516133ba816150ef565b6000806040838503121561379d578081fd5b82356137a8816150d7565b915060208301356137b8816150d7565b809150509250929050565b6000604082840312156137d4578081fd5b604051604081018181106001600160401b03821117156137f057fe5b604052825181526020928301519281019290925250919050565b600060c0828403121561381b578081fd5b6133ba8383613642565b6000806000806060858703121561383a578182fd5b61384385613725565b935060208501356001600160401b0381111561385d578283fd5b613869878288016135ab565b9598909750949560400135949350505050565b60008060008060008060a08789031215613894578384fd5b61389d87613725565b955060208701356001600160401b03808211156138b8578586fd5b6138c48a838b016135ab565b909750955060408901359450606089013591506138e0826150d7565b909250608088013590808211156138f5578283fd5b5061390289828a016136b4565b9150509295509295509295565b600080600060608486031215613923578081fd5b61392c84613725565b925060208401356001600160401b03811115613946578182fd5b613952868287016135f1565b925050604084013590509250925092565b600080600080600080600080610100898b03121561397f578586fd5b61398889613725565b975060208901356001600160401b038111156139a2578687fd5b6139ae8b828c016135f1565b97505060408901359550606089013594506080890135935060a08901356139d4816150d7565b979a969950949793969295929450505060c08201359160e0013590565b6000806000806000806000806000898b036101c0811215613a10578384fd5b613a198b613725565b995060208b01356001600160401b0380821115613a34578586fd5b613a408e838f016135f1565b9a5060408d0135995060608d0135985060808d0135975060a08d0135965060c08d01359150613a6e826150d7565b81955060c060df1984011215613a82578384fd5b604051925060c0830191508282108183111715613a9b57fe5b8160405260e08d013583526101008d013560208401526101208d013560408401526101408d013560608401526101608d013560808401526101808d013560a08401528294506101a08d0135925080831115613af4578384fd5b5050613b028c828d016135f1565b9150509295985092959850929598565b60008060008060008060008060e0898b031215613b2d578182fd5b613b3689613725565b975060208901356001600160401b0380821115613b51578384fd5b613b5d8c838d016135f1565b985060408b0135975060608b0135965060808b0135955060a08b0135945060c08b0135915080821115613b8e578384fd5b50613b9b8b828c016135ab565b999c989b5096995094979396929594505050565b600080600060608486031215613bc3578081fd5b613bcc84613725565b9250602084013591506040840135613be3816150d7565b809150509250925092565b60008060008060808587031215613c03578182fd5b613c0c85613725565b935060208501359250604085013591506060850135613c2a816150d7565b939692955090935050565b60008060008060008060008060e0898b031215613c50578182fd5b613c5989613725565b975060208901359650604089013595506060890135613c77816150d7565b94506080890135935060a08901356001600160401b0380821115613c99578384fd5b613ca58c838d016135ab565b909550935060c08b0135915080821115613cbd578283fd5b50613cca8b828c016136b4565b9150509295985092959890939650565b60008060008060008060008060006101008a8c031215613cf8578283fd5b613d018a613725565b985060208a0135975060408a0135965060608a0135613d1f816150d7565b955060808a0135945060a08a0135935060c08a01356001600160401b0380821115613d48578485fd5b613d548d838e016135ab565b909550935060e08c0135915080821115613d6c578283fd5b50613b028c828d016136b4565b60008060008060008060008060008060006101208c8e031215613d9a578485fd5b613da38c613725565b9a5060208c0135995060408c01359850613dbf60608d016135a0565b975060808c0135965060a08c013595506001600160401b038060c08e01351115613de7578586fd5b613df78e60c08f01358f016136b4565b95508060e08e01351115613e09578283fd5b613e198e60e08f01358f016135ab565b90955093506101008d0135811015613e2f578283fd5b50613e418d6101008e01358e016135ab565b81935080925050509295989b509295989b9093969950565b60008060008084860360a0811215613e6f578283fd5b613e7886613725565b9450602086013593506040808701359350605f1982011215613e98578182fd5b50604051604081018181106001600160401b0382111715613eb557fe5b604052606086013581526080909501356020860152509194909350909190565b600080600080600080600060a0888a031215613eef578081fd5b613ef888613725565b96506020880135613f08816150fd565b955060408801356001600160401b0380821115613f23578283fd5b613f2f8b838c016135ab565b909750955060608a0135915080821115613f47578283fd5b613f538b838c016135ab565b909550935060808a0135915080821115613f6b578283fd5b50613f788a828b016136b4565b91505092959891949750929550565b600060208284031215613f98578081fd5b5051919050565b60008060408385031215613fb1578182fd5b8235915060208301356137b8816150d7565b60008060008060008060c08789031215613fdb578384fd5b863595506020870135613fed816150d7565b94506040870135613ffd816150fd565b9350606087013561400d816150fd565b925060808701356001600160401b0380821115614028578384fd5b6140348a838b016135f1565b935060a0890135915080821115614049578283fd5b5061390289828a016135f1565b60008060408385031215614068578182fd5b8235915060208301356137b8816150ef565b60008060008060008060c08789031215614092578384fd5b8635955060208701356140a4816150ef565b9450604087013593506060870135925060808701356140c2816150ef565b915060a08701356140d2816150ef565b809150509295509295509295565b6000806000606084860312156140f4578081fd5b8335925061410460208501613725565b9150604084013590509250925092565b60008060008060808587031215614129578182fd5b8435935061413960208601613725565b92506040850135915061414e60608601613725565b905092959194509250565b6000806000806080858703121561416e578182fd5b8435935061417e60208601613725565b93969395505050506040820135916060013590565b600080604083850312156141a5578182fd5b50508035926020909101359150565b600080604083850312156141c6578182fd5b505080516020909101519092909150565b6000806000606084860312156141eb578081fd5b83359250602084013591506040840135613be3816150d7565b60008060008060008060c0878903121561421c578384fd5b8651614227816150fd565b8096505060208701519450604087015193506060870151614247816150d7565b809350506080870151915060a087015190509295509295509295565b6000806000806000806000610180888a03121561427e578081fd5b8751614289816150fd565b8097505060208801519550604088015194506060880151935060808801516142b0816150d7565b92506142bf8960a08a01613642565b91506101608801516001600160401b038111156142da578182fd5b8801601f81018a136142ea578182fd5b80516142f861360f82615086565b8181528b602083850101111561430c578384fd5b61431d8260208301602086016150a7565b80935050505092959891949750929550565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b600081518084526143718160208601602086016150a7565b601f01601f19169290920160200192915050565b80518252602090810151910152565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a08301525050565b600081518352602082015160208401526040820151606060408501526143f76060850182614359565b949350505050565b6000828483379101908152919050565b600082516144218184602087016150a7565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0393841681526020810192909252909116604082015260600190565b600060018060a01b038816825286602083015261ffff8616604083015284606083015260a0608083015261449a60a08301848661432f565b98975050505050505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b038581168252602082018590528316604082015260806060820181905260009061187390830184614359565b901515815260200190565b941515855260208501939093526040840191909152151560608301521515608082015260a00190565b6000602082526133ba6020830184614359565b60208082526030908201527f53746172676174653a2062726964676520616e6420666163746f727920616c7260408201526f1958591e481a5b9a5d1a585b1a5e995960821b606082015260800190565b6020808252601e908201527f53746172676174653a205f746f6b656e2063616e6e6f74206265203078300000604082015260600190565b60208082526027908201527f53746172676174653a206e6f7420656e6f756768206c7020746f2072656465656040820152666d52656d6f746560c81b606082015260800190565b6020808252601e908201527f4272696467653a2063616c6c6572206d757374206265204272696467652e0000604082015260600190565b6020808252601b908201527f53746172676174653a206f6e6c79206d696e744665654f776e65720000000000604082015260600190565b60208082526019908201527f53746172676174653a206e6f2072657472792072657665727400000000000000604082015260600190565b6020808252601e908201527f53746172676174653a205452414e534645525f46524f4d5f4641494c45440000604082015260600190565b6020808252601d908201527f53746172676174653a20666163746f72792063616e7420626520307830000000604082015260600190565b6020808252601f908201527f53746172676174653a206f6e6c792070726f746f636f6c4665654f776e657200604082015260600190565b6020808252601c908201527f53746172676174653a206272696467652063616e742062652030783000000000604082015260600190565b60208082526021908201527f53746172676174653a206e6f7420656e6f756768206c7020746f2072656465656040820152606d60f81b606082015260800190565b6020808252602f908201527f53746172676174653a206e6f7420656e6f756768206c7020746f20726564656560408201526e1b481dda5d1a08185b5bdd5b9d14d1608a1b606082015260800190565b6020808252601e908201527f53746172676174653a205f6f776e65722063616e6e6f74206265203078300000604082015260600190565b6020808252601f908201527f53746172676174653a20636163686520616c726561647920636c656172656400604082015260600190565b60208082526017908201527f53746172676174653a2063616e6e6f7420737761702030000000000000000000604082015260600190565b6020808252601f908201527f53746172676174653a20696e76616c69642066756e6374696f6e207479706500604082015260600190565b6020808252601d908201527f53746172676174653a20506f6f6c20646f6573206e6f74206578697374000000604082015260600190565b60208082526026908201527f53746172676174653a205f726566756e64416464726573732063616e6e6f742060408201526506265203078360d41b606082015260800190565b61ffff861681526001600160a01b038516602082015260006149ba6040830186614385565b60c060808301526149ce60c08301856143ce565b82810360a084015261449a8185614359565b600061ffff8916825260c060208301526149fe60c08301888a61432f565b604083018790526001600160a01b03861660608401526080830185905282810360a0840152614a2d8185614359565b9a9950505050505050505050565b600061010061ffff8b168352806020840152614a598184018b614359565b604084018a90526001600160a01b03898116606086015260808501899052871660a085015283810360c08501529050614a928186614359565b905082810360e0840152614aa68185614359565b9b9a5050505050505050505050565b600061ffff8816825260c06020830152614ad260c0830188614359565b604083018790526001600160a01b03861660608401526080830185905282810360a0840152614b018185614359565b9998505050505050505050565b61ffff929092168252602082015260400190565b61ffff94909416845260208401929092526001600160a01b03166040830152606082015260800190565b61ffff96909616865260208601949094526001600160a01b0392909216604085015260608401526080830152151560a082015260c00190565b61ffff85168152602081018490526001600160a01b03831660408201526101208101614bb46060830184614394565b95945050505050565b61ffff95909516855260208501939093526001600160a01b039190911660408401526060830152608082015260a00190565b61ffff8416815260208101839052608081016143f76040830184614385565b61ffff93841681526020810192909252909116604082015260600190565b61ffff9390931683526020830191909152604082015260600190565b61ffff8616815260208101859052604081018490526001600160a01b038316606082015260c081016118736080830184614385565b61ffff8c168152602081018b9052604081018a90526001600160a01b038916606082015260006101e0614cb3608084018b614385565b614cc060c084018a614394565b80610180840152614cd3818401896143ce565b90508281036101a0840152614ce981878961432f565b90508281036101c0840152614cff81858761432f565b9e9d5050505050505050505050505050565b61ffff8a16815260208101899052604081018890526001600160a01b038716606082015260006101e0614d476080840189614385565b614d5460c0840188614394565b80610180840152614d67818401876143ce565b90508281036101a0840152614d7d81858761432f565b8381036101c0909401939093525081526020019998505050505050505050565b61ffff8a16815260208101899052604081018890526001600160a01b03871660608201526000610120614dd36080840189614385565b8660c08401528060e0840152614dec818401868861432f565b9050828103610100840152614e0181856143ce565b9c9b505050505050505050505050565b61ffff969096168652602086019490945260408501929092526001600160a01b03166060840152608083015260a082015260c00190565b600061ffff8916825287602083015286604083015260c06060830152614e7260c08301868861432f565b60808301949094525060a0015295945050505050565b600061ffff8916825260ff8816602083015260a06040830152614eaf60a08301878961432f565b8281036060840152614ec281868861432f565b90508281036080840152614a2d81856143ce565b90815260200190565b8681526001600160a01b038616602082015260ff85811660408301528416606082015260c060808201819052600090614f1a90830185614359565b82810360a0840152614b018185614359565b918252602082015260400190565b600060ff8616825261ffff8516602083015260806040830152614f606080830185614359565b905082606083015295945050505050565b60ff969096168652602086019490945260408501929092526001600160a01b03166060840152608083015260a082015260c00190565b600060ff8916825287602083015286604083015260ff8616606083015284608083015260c060a0830152614b0160c08301848661432f565b60ff881681526020810187905260408101869052606081018590526001600160a01b0384166080820152600061018061501b60a0840186614394565b80610160840152614a2d81840185614359565b600060ff8916825287602083015286604083015285606083015284608083015260c060a0830152614b0160c08301848661432f565b6040518181016001600160401b038111828210171561507e57fe5b604052919050565b60006001600160401b0382111561509957fe5b50601f01601f191660200190565b60005b838110156150c25781810151838201526020016150aa565b838111156150d1576000848401525b50505050565b6001600160a01b03811681146150ec57600080fd5b50565b80151581146150ec57600080fd5b60ff811681146150ec57600080fdfe5265656e7472616e637947756172643a207265656e7472616e742063616c6c004f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220b89436695caad3985f272b448f782edff88be8a5379e9cecc029bae8ee505ddc64736f6c63430007060033