{
  "_format": "hh-sol-artifact-1",
  "contractName": "MessagePassingBridge",
  "sourceName": "contracts/messagePassingBridge/MessagePassingBridge.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "axlGateway",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "axlGasReceiver",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "lzEndpoint",
          "type": "address"
        },
        {
          "internalType": "uint32",
          "name": "homeChainId",
          "type": "uint32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "requestId",
          "type": "uint256"
        }
      ],
      "name": "ALREADY_EXECUTED",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AlreadyInitialized",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "name": "BRIDGE_LIMITS",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "lzEndpoint",
          "type": "address"
        }
      ],
      "name": "INVALID_ENDPOINT",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        }
      ],
      "name": "INVALID_SENDER",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        }
      ],
      "name": "INVALID_TARGET_OR_CHAINID",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidAddressString",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "required",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "sent",
          "type": "uint256"
        }
      ],
      "name": "LZ_FEE",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MISSING_FEE",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "NOT_GUARDIAN",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotApprovedByGateway",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TRANSFER",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "TRANSFER_FROM",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        }
      ],
      "name": "UNSUPPORTED_CHAIN",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "WRONG_TOKEN",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "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": "targetChainId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "normalizedAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "enum IMessagePassingBridge.BridgeService",
          "name": "bridge",
          "type": "uint8"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "BridgeRequest",
      "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": "normalizedAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fee",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "sourceChainId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "enum IMessagePassingBridge.BridgeService",
          "name": "bridge",
          "type": "uint8"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "ExecutedTransfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "sourceChainId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "sourceAddress",
          "type": "address"
        }
      ],
      "name": "FalseSender",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "_srcChainId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "_nonce",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_payload",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_reason",
          "type": "bytes"
        }
      ],
      "name": "MessageFailed",
      "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": false,
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "_nonce",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "_payloadHash",
          "type": "bytes32"
        }
      ],
      "name": "RetryMessageSuccess",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "_dstChainId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "_type",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_minDstGas",
          "type": "uint256"
        }
      ],
      "name": "SetMinDstGas",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "precrime",
          "type": "address"
        }
      ],
      "name": "SetPrecrime",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "_remoteChainId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_path",
          "type": "bytes"
        }
      ],
      "name": "SetTrustedRemote",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "_remoteChainId",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "_remoteAddress",
          "type": "bytes"
        }
      ],
      "name": "SetTrustedRemoteAddress",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_PAYLOAD_SIZE_LIMIT",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "HOME_CHAIN_ID",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "accountsDailyLimit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "lastTransferReset",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "bridged24Hours",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "lzChainId",
          "type": "uint16"
        },
        {
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "remote",
          "type": "address"
        }
      ],
      "name": "addLzChainSupport",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "approveRequest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "approvedRequests",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "avatar",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "bridgeDailyLimit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "lastTransferReset",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "bridged24Hours",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "bridgeFees",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "minFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "fee",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "bridgeLimits",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "dailyLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "txLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "accountDailyLimit",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "minAmount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "onlyWhitelisted",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "targetChainId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "enum IMessagePassingBridge.BridgeService",
          "name": "bridge",
          "type": "uint8"
        }
      ],
      "name": "bridgeTo",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "targetChainId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "gasRefundAddress",
          "type": "address"
        }
      ],
      "name": "bridgeToWithAxelar",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "targetChainId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "adapterParams",
          "type": "bytes"
        }
      ],
      "name": "bridgeToWithLz",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "canBridge",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isWithinLimit",
          "type": "bool"
        },
        {
          "internalType": "string",
          "name": "error",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currentId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "dao",
      "outputs": [
        {
          "internalType": "contract Controller",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "disabledSourceBridges",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_dstChainId",
          "type": "uint16"
        },
        {
          "internalType": "address",
          "name": "_fromAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_toAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_normalizedAmount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "_useZro",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "_adapterParams",
          "type": "bytes"
        }
      ],
      "name": "estimateSendFee",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "nativeFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "zroFee",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "commandId",
          "type": "bytes32"
        },
        {
          "internalType": "string",
          "name": "sourceChain",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "sourceAddress",
          "type": "string"
        },
        {
          "internalType": "bytes",
          "name": "payload",
          "type": "bytes"
        }
      ],
      "name": "execute",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "commandId",
          "type": "bytes32"
        },
        {
          "internalType": "string",
          "name": "sourceChain",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "sourceAddress",
          "type": "string"
        },
        {
          "internalType": "bytes",
          "name": "payload",
          "type": "bytes"
        },
        {
          "internalType": "string",
          "name": "tokenSymbol",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "executeWithToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "executedRequests",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        },
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "name": "failedMessages",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "faucet",
      "outputs": [
        {
          "internalType": "contract IFaucet",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "feeRecipient",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_srcChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        }
      ],
      "name": "forceResumeReceive",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "axlChainId",
          "type": "string"
        }
      ],
      "name": "fromAxelarChainId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "lzChainId",
          "type": "uint16"
        }
      ],
      "name": "fromLzChainId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "gasService",
      "outputs": [
        {
          "internalType": "contract IAxelarGasService",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "gateway",
      "outputs": [
        {
          "internalType": "contract IAxelarGateway",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_version",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "_chainId",
          "type": "uint16"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_configType",
          "type": "uint256"
        }
      ],
      "name": "getConfig",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_remoteChainId",
          "type": "uint16"
        }
      ],
      "name": "getTrustedRemoteAddress",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "guardian",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract INameService",
          "name": "nameService",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "dailyLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "txLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "accountDailyLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minAmount",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "onlyWhitelisted",
              "type": "bool"
            }
          ],
          "internalType": "struct IMessagePassingBridge.BridgeLimits",
          "name": "limits",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "minFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "fee",
              "type": "uint256"
            }
          ],
          "internalType": "struct IMessagePassingBridge.BridgeFees",
          "name": "fees",
          "type": "tuple"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "isClosed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_srcChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        }
      ],
      "name": "isTrustedRemote",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "lzChainIdsMapping",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "name": "lzChainToIdsMapping",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lzEndpoint",
      "outputs": [
        {
          "internalType": "contract ILayerZeroEndpointUpgradeable",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lzEndpoint_",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_srcChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        },
        {
          "internalType": "uint64",
          "name": "_nonce",
          "type": "uint64"
        },
        {
          "internalType": "bytes",
          "name": "_payload",
          "type": "bytes"
        }
      ],
      "name": "lzReceive",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "name": "minDstGasLookup",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nameService",
      "outputs": [
        {
          "internalType": "contract INameService",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nativeToken",
      "outputs": [
        {
          "internalType": "contract IGoodDollar",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_srcChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        },
        {
          "internalType": "uint64",
          "name": "_nonce",
          "type": "uint64"
        },
        {
          "internalType": "bytes",
          "name": "_payload",
          "type": "bytes"
        }
      ],
      "name": "nonblockingLzReceive",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "isPaused",
          "type": "bool"
        }
      ],
      "name": "pauseBridge",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "name": "payloadSizeLimitLookup",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "precrime",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "preventRequest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_srcChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_srcAddress",
          "type": "bytes"
        },
        {
          "internalType": "uint64",
          "name": "_nonce",
          "type": "uint64"
        },
        {
          "internalType": "bytes",
          "name": "_payload",
          "type": "bytes"
        }
      ],
      "name": "retryMessage",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "minFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxFee",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "fee",
              "type": "uint256"
            }
          ],
          "internalType": "struct IMessagePassingBridge.BridgeFees",
          "name": "fees",
          "type": "tuple"
        }
      ],
      "name": "setBridgeFees",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "dailyLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "txLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "accountDailyLimit",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minAmount",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "onlyWhitelisted",
              "type": "bool"
            }
          ],
          "internalType": "struct IMessagePassingBridge.BridgeLimits",
          "name": "limits",
          "type": "tuple"
        }
      ],
      "name": "setBridgeLimits",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_version",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "_chainId",
          "type": "uint16"
        },
        {
          "internalType": "uint256",
          "name": "_configType",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_config",
          "type": "bytes"
        }
      ],
      "name": "setConfig",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32[]",
          "name": "bridgeKeys",
          "type": "bytes32[]"
        },
        {
          "internalType": "bool[]",
          "name": "disabled",
          "type": "bool[]"
        }
      ],
      "name": "setDisabledBridges",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_faucet",
          "type": "address"
        }
      ],
      "name": "setFaucet",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "setFeeRecipient",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_guardian",
          "type": "address"
        }
      ],
      "name": "setGuardian",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_dstChainId",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "_packetType",
          "type": "uint16"
        },
        {
          "internalType": "uint256",
          "name": "_minGas",
          "type": "uint256"
        }
      ],
      "name": "setMinDstGas",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_dstChainId",
          "type": "uint16"
        },
        {
          "internalType": "uint256",
          "name": "_size",
          "type": "uint256"
        }
      ],
      "name": "setPayloadSizeLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_precrime",
          "type": "address"
        }
      ],
      "name": "setPrecrime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_version",
          "type": "uint16"
        }
      ],
      "name": "setReceiveVersion",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_version",
          "type": "uint16"
        }
      ],
      "name": "setSendVersion",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_srcChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_path",
          "type": "bytes"
        }
      ],
      "name": "setTrustedRemote",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_remoteChainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes",
          "name": "_remoteAddress",
          "type": "bytes"
        }
      ],
      "name": "setTrustedRemoteAddress",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        }
      ],
      "name": "toAxelarChainId",
      "outputs": [
        {
          "internalType": "string",
          "name": "axlChainId",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        }
      ],
      "name": "toLzChainId",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "lzChainId",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "name": "trustedRemoteLookup",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updateAvatar",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "upgrade",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        }
      ],
      "name": "upgradeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x610120604052306080523480156200001657600080fd5b5060405162005d5138038062005d518339810160408190526200003991620000b0565b8383816001600160a01b038116620000645760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b0390811660a05290811660c0529290921660e05263ffffffff16610100525062000117915050565b80516001600160a01b0381168114620000ab57600080fd5b919050565b60008060008060808587031215620000c757600080fd5b620000d28562000093565b9350620000e26020860162000093565b9250620000f26040860162000093565b9150606085015163ffffffff811681146200010c57600080fd5b939692955090935050565b60805160a05160c05160e05161010051615baf620001a260003960006109d5015260008181610384015261266a015260008181610866015261341c0152600081816104a4015281816110b901528181611616015281816134b5015261376d0152600081816113c801528181611408015281816116d80152818161171801526117940152615baf6000f3fe60806040526004361061034b5760003560e01c80621d356714610350578063020051cf1461037257806305fead15146103bc57806307e0db17146103f15780630dce292e146104115780630df374831461045257806310ddb13714610472578063116191b61461049257806316ad5512146104c65780631a394795146104f45780631a98b2e0146105145780631b3c90a8146105345780631fec5c5c1461054957806329b708721461055c5780633095634a1461057c5780633659cfe6146105aa5780633d8b38f6146105ca5780633e6326fc146105ea5780633f1f4fa41461060a57806340a00aaf146106385780634162169f1461064b578063425cfb531461066b57806342d65a8d1461069c578063452a9320146106bc57806346904840146106dd57806349160658146106fe5780634f1ef2861461071e57806352d1902d1461073157806356026f37146107465780635aef7de6146107665780635b23a990146107865780635b8c41e6146107b357806366ad5c8a1461080357806369c20d36146108235780636a22d8cc14610854578063715018a61461088857806373800fc41461089d5780637533d788146108cb5780637b0240c0146108f857806382dc737d146109355780638a0dac4a146109555780638cfd8f5c146109755780638da5cb5b146109ae5780638f65be85146109c3578063950c8a7414610a0c5780639a9ee08114610a2d5780639f38369a14610a4d578063a6c3d16514610a6d578063b2f7667f14610a8d578063b353aaa714610aaa578063b5569f1814610aca578063baf3292d14610afc578063c01c812314610b1c578063c2b6b58c14610b3c578063c446183414610b57578063c56bbdd914610b6d578063c612f9ea14610b80578063c6dd812f14610ba0578063c78ab88214610bf9578063cbed8b9c14610c19578063d1deba1f14610c39578063d422794714610c4c578063d55ec69714610c81578063d7d1bbdb14610c96578063d8b31c7714610cb6578063de5f72fd14610cd6578063df2a5b3b14610cf7578063e00dd16114610d17578063e1758bd814610d2e578063e74b981b14610d43578063eb8d72b714610d63578063f2fde38b14610d83578063f3fef3a314610da3578063f5ecbdbc14610dc3578063fad16abe14610de3575b600080fd5b34801561035c57600080fd5b5061037061036b3660046146de565b610e03565b005b34801561037e57600080fd5b506103a67f000000000000000000000000000000000000000000000000000000000000000081565b6040516103b3919061477e565b60405180910390f35b3480156103c857600080fd5b506103dc6103d7366004614880565b610ec0565b604080519283526020830191909152016103b3565b3480156103fd57600080fd5b5061037061040c36600461490d565b610f90565b34801561041d57600080fd5b5061044261042c366004614928565b6101d86020526000908152604090205460ff1681565b60405190151581526020016103b3565b34801561045e57600080fd5b5061037061046d366004614941565b610ffd565b34801561047e57600080fd5b5061037061048d36600461490d565b61101d565b34801561049e57600080fd5b506103a67f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d257600080fd5b506104e66104e136600461490d565b611055565b6040519081526020016103b3565b34801561050057600080fd5b5061037061050f36600461496b565b61106c565b34801561052057600080fd5b5061037061052f366004614988565b611088565b34801561054057600080fd5b5061037061116b565b610370610557366004614a61565b611292565b34801561056857600080fd5b50610370610577366004614b28565b6112b7565b34801561058857600080fd5b5061059c610597366004614b44565b6112f8565b6040516103b3929190614bba565b3480156105b657600080fd5b506103706105c5366004614bdd565b6113bd565b3480156105d657600080fd5b506104426105e5366004614bfa565b611486565b3480156105f657600080fd5b506067546103a6906001600160a01b031681565b34801561061657600080fd5b506104e661062536600461490d565b6101016020526000908152604090205481565b610370610646366004614c4c565b611553565b34801561065757600080fd5b506065546103a6906001600160a01b031681565b34801561067757600080fd5b50610442610686366004614928565b6101c66020526000908152604090205460ff1681565b3480156106a857600080fd5b506103706106b7366004614bfa565b611572565b3480156106c857600080fd5b506101c5546103a6906001600160a01b031681565b3480156106e957600080fd5b506101d7546103a6906001600160a01b031681565b34801561070a57600080fd5b50610370610719366004614c8b565b6115e5565b61037061072c366004614d2e565b6116cd565b34801561073d57600080fd5b506104e6611787565b34801561075257600080fd5b506104e6610761366004614d7d565b611835565b34801561077257600080fd5b506066546103a6906001600160a01b031681565b34801561079257600080fd5b506107a66107a1366004614928565b6118d9565b6040516103b39190614dc5565b3480156107bf57600080fd5b506104e66107ce366004614dd4565b610130602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205481565b34801561080f57600080fd5b5061037061081e3660046146de565b6118f0565b34801561082f57600080fd5b5061044261083e366004614928565b6101c76020526000908152604090205460ff1681565b34801561086057600080fd5b506103a67f000000000000000000000000000000000000000000000000000000000000000081565b34801561089457600080fd5b506103706119c4565b3480156108a957600080fd5b506104e66108b836600461490d565b6101d96020526000908152604090205481565b3480156108d757600080fd5b506108eb6108e636600461490d565b6119d8565b6040516103b39190614e31565b34801561090457600080fd5b506101c9546101ca546101cb5461091a92919083565b604080519384526020840192909252908201526060016103b3565b34801561094157600080fd5b50610370610950366004614e9f565b611a72565b34801561096157600080fd5b50610370610970366004614bdd565b611a93565b34801561098157600080fd5b506104e6610990366004614ebb565b61010060209081526000928352604080842090915290825290205481565b3480156109ba57600080fd5b506103a6611abe565b3480156109cf57600080fd5b506109f77f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016103b3565b348015610a1857600080fd5b50610102546103a6906001600160a01b031681565b348015610a3957600080fd5b506108eb610a48366004614928565b611acd565b348015610a5957600080fd5b506108eb610a6836600461490d565b611b84565b348015610a7957600080fd5b50610370610a88366004614bfa565b611c94565b348015610a9957600080fd5b506101d1546101d2546103dc919082565b348015610ab657600080fd5b5060fe546103a6906001600160a01b031681565b348015610ad657600080fd5b506107a6610ae5366004614928565b6101d66020526000908152604090205461ffff1681565b348015610b0857600080fd5b50610370610b17366004614bdd565b611d27565b348015610b2857600080fd5b50610370610b37366004614eee565b611d86565b348015610b4857600080fd5b506101c8546104429060ff1681565b348015610b6357600080fd5b506104e661271081565b610370610b7b366004614f2e565b611d9e565b348015610b8c57600080fd5b50610370610b9b366004614928565b611de3565b348015610bac57600080fd5b506101cc546101cd546101ce546101cf546101d054610bcf949392919060ff1685565b6040805195865260208601949094529284019190915260608301521515608082015260a0016103b3565b348015610c0557600080fd5b50610370610c14366004615029565b611e07565b348015610c2557600080fd5b50610370610c343660046150d7565b611e8c565b610370610c473660046146de565b611f05565b348015610c5857600080fd5b506103dc610c67366004614bdd565b6101d3602052600090815260409020805460019091015482565b348015610c8d57600080fd5b5061037061211d565b348015610ca257600080fd5b50610370610cb1366004614928565b6121d1565b348015610cc257600080fd5b50610370610cd1366004614bdd565b6121f5565b348015610ce257600080fd5b506101d4546103a6906001600160a01b031681565b348015610d0357600080fd5b50610370610d12366004615128565b612220565b348015610d2357600080fd5b506104e66101d55481565b348015610d3a57600080fd5b506103a66122d3565b348015610d4f57600080fd5b50610370610d5e366004614bdd565b612360565b348015610d6f57600080fd5b50610370610d7e366004614bfa565b61238b565b348015610d8f57600080fd5b50610370610d9e366004614bdd565b6123e5565b348015610daf57600080fd5b50610370610dbe366004614b44565b61245b565b348015610dcf57600080fd5b506108eb610dde366004615164565b612549565b348015610def57600080fd5b50610370610dfe3660046151b1565b6125dc565b60fe546001600160a01b0316336001600160a01b031614610e425733604051634a43969960e11b8152600401610e39919061477e565b60405180910390fd5b610eb88686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f89018190048102820181019092528781528993509150879087908190840183828082843760009201919091525061282b92505050565b505050505050565b604080516001600160a01b0387811660208301528681168284015260608201869052600060808084018290528451808503909101815260a084019485905260fe5463040a7bb160e41b90955290938493919216906340a7bb1090610f30908c90309086908b908b9060a4016151f0565b6040805180830381865afa925050508015610f68575060408051601f3d908101601f19168201909252610f6591810190615244565b60015b610f79576000809250925050610f85565b9093509150610f859050565b965096945050505050565b610f986128a4565b60fe546040516307e0db1760e01b81526001600160a01b03909116906307e0db1790610fc8908490600401614dc5565b600060405180830381600087803b158015610fe257600080fd5b505af1158015610ff6573d6000803e3d6000fd5b5050505050565b6110056128a4565b61ffff90911660009081526101016020526040902055565b6110256128a4565b60fe546040516310ddb13760e01b81526001600160a01b03909116906310ddb13790610fc8908490600401614dc5565b61ffff1660009081526101d9602052604090205490565b611074612903565b6101c8805460ff1916911515919091179055565b6000858560405161109a929190615268565b604051908190038120631876eed960e01b825291506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631876eed9906110fe908e908e908e908e908e9089908d908d908d906004016152a1565b6020604051808303816000875af115801561111d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111419190615300565b61115e57604051631403112d60e21b815260040160405180910390fd5b5050505050505050505050565b60675460405163bf40fac160e01b815260206004820152600a60248201526921a7a72a2927a62622a960b11b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa1580156111ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f2919061531d565b606580546001600160a01b0319166001600160a01b0392909216918217905560408051632d77bef360e11b81529051635aef7de6916004808201926020929091908290030181865afa15801561124c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611270919061531d565b606680546001600160a01b0319166001600160a01b0392909216919091179055565b6112b13385858585604051806020016040528060008152506000612960565b50505050565b6112bf612903565b80516101cc5560208101516101cd5560408101516101ce5560608101516101cf55608001516101d0805460ff1916911515919091179055565b6001600160a01b0380831660009081526101d360205260408082206067546101c8549251633de4799760e11b8152939460609473__$a63bfe16b493dd64599c9f3a1d32f7e383$__94637bc8f32e9461136c946101cc9491936101d193919092169160ff909116908c908c9060040161533a565b600060405180830381865af4158015611389573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113b191908101906153fa565b915091505b9250929050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156114065760405162461bcd60e51b8152600401610e3990615454565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611438612d47565b6001600160a01b03161461145e5760405162461bcd60e51b8152600401610e399061548e565b61146781612d63565b6040805160008082526020820190925261148391839190612d6b565b50565b61ffff8316600090815260ff6020526040812080548291906114a7906154c8565b80601f01602080910402602001604051908101604052809291908181526020018280546114d3906154c8565b80156115205780601f106114f557610100808354040283529160200191611520565b820191906000526020600020905b81548152906001019060200180831161150357829003601f168201915b505050505090508383604051611537929190615268565b60405180910390208180519060200120149150505b9392505050565b6112b13385858560006040518060200160405280600081525087612960565b61157a6128a4565b60fe546040516342d65a8d60e01b81526001600160a01b03909116906342d65a8d906115ae908690869086906004016154fd565b600060405180830381600087803b1580156115c857600080fd5b505af11580156115dc573d6000803e3d6000fd5b50505050505050565b600082826040516115f7929190615268565b604051908190038120635f6970c360e01b825291506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635f6970c390611655908b908b908b908b908b90899060040161551b565b6020604051808303816000875af1158015611674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116989190615300565b6116b557604051631403112d60e21b815260040160405180910390fd5b6116c3878787878787612ed6565b5050505050505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156117165760405162461bcd60e51b8152600401610e3990615454565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611748612d47565b6001600160a01b03161461176e5760405162461bcd60e51b8152600401610e399061548e565b61177782612d63565b61178382826001612d6b565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146118225760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610e39565b50600080516020615b1383398151915290565b805160208201206000907f564ccaf7594d66b1eaaea24fe01f0585bf52ee70852af4eac0cc4b04711cd0e28114156118705750600192915050565b7f43ab905ae53adfdd46d0850022d385a6c09c15bfde5206c98fa0fc8dc340c3f88114156118a15750600592915050565b7f2ab2bf4c5cabc3000e2502e33470a863db2755809d7561237424a0eb373154c28114156118d3575061a4ec92915050565b50919050565b60009081526101d6602052604090205461ffff1690565b33301461194e5760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d7573742062656044820152650204c7a4170760d41b6064820152608401610e39565b610eb88686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f890181900481028201810190925287815289935091508790879081908401838280828437600092019190915250612f7892505050565b6119cc6128a4565b6119d66000612fb0565b565b60ff60205260009081526040902080546119f1906154c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611a1d906154c8565b8015611a6a5780601f10611a3f57610100808354040283529160200191611a6a565b820191906000526020600020905b815481529060010190602001808311611a4d57829003601f168201915b505050505081565b611a7a612903565b80516101c95560208101516101ca55604001516101cb55565b611a9b612903565b6101c580546001600160a01b0319166001600160a01b0392909216919091179055565b60cc546001600160a01b031690565b60608160011415611afc575050604080518082019091526008815267457468657265756d60c01b602082015290565b8160051415611b2b57505060408051808201909152600a81526932ba3432b932bab6969960b11b602082015290565b8161a4ec1415611b5557505060408051808201909152600481526363656c6f60e01b602082015290565b8161aef31415611b7f57505060408051808201909152600481526363656c6f60e01b602082015290565b919050565b61ffff8116600090815260ff6020526040812080546060929190611ba7906154c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd3906154c8565b8015611c205780601f10611bf557610100808354040283529160200191611c20565b820191906000526020600020905b815481529060010190602001808311611c0357829003601f168201915b50505050509050805160001415611c795760405162461bcd60e51b815260206004820152601d60248201527f4c7a4170703a206e6f20747275737465642070617468207265636f72640000006044820152606401610e39565b61154c600060148351611c8c9190615572565b839190613002565b611c9c6128a4565b818130604051602001611cb193929190615589565b60408051601f1981840301815291815261ffff8516600090815260ff60209081529190208251611ce693919290910190614567565b507f8c0400cfe2d1199b1a725c78960bcc2a344d869b80590d0f2bd005db15a572ce838383604051611d1a939291906154fd565b60405180910390a1505050565b611d2f6128a4565b61010280546001600160a01b0319166001600160a01b0383161790556040517f5db758e995a17ec1ad84bdef7e8c3293a0bd6179bcce400dff5d4c3d87db726b90611d7b90839061477e565b60405180910390a150565b611d8e612903565b611d9983838361310f565b505050565b610ff633868686600187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250612960915050565b611deb612903565b60009081526101c660205260409020805460ff19166001179055565b611e0f612903565b60005b8251811015611d9957818181518110611e2d57611e2d6155aa565b60200260200101516101c76000858481518110611e4c57611e4c6155aa565b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611e84906155c0565b915050611e12565b611e946128a4565b60fe546040516332fb62e760e21b81526001600160a01b039091169063cbed8b9c90611ecc90889088908890889088906004016155db565b600060405180830381600087803b158015611ee657600080fd5b505af1158015611efa573d6000803e3d6000fd5b505050505050505050565b61ffff8616600090815261013060205260408082209051611f299088908890615268565b90815260408051602092819003830190206001600160401b03871660009081529252902054905080611fa95760405162461bcd60e51b815260206004820152602360248201527f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737360448201526261676560e81b6064820152608401610e39565b808383604051611fba929190615268565b6040518091039020146120195760405162461bcd60e51b815260206004820152602160248201527f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f616044820152601960fa1b6064820152608401610e39565b61ffff871660009081526101306020526040808220905161203d9089908990615268565b90815260408051602092819003830181206001600160401b038916600090815290845282902093909355601f880182900482028301820190528682526120d5918991899089908190840183828082843760009201919091525050604080516020601f8a018190048102820181019092528881528a935091508890889081908401838280828437600092019190915250612f7892505050565b7fc264d91f3adc5588250e1551f547752ca0cfa8f6b530d243b9f9f4cab10ea8e5878787878560405161210c959493929190615614565b60405180910390a150505050505050565b600054600290610100900460ff1615801561213f575060005460ff8083169116105b61215b5760405162461bcd60e51b8152600401610e399061564f565b6000805461ffff191660ff83161761010017905561217c606560013061310f565b61218a607d61a4ec3061310f565b612197608a607a3061310f565b6121a561016d60323061310f565b6000805461ff001916905560405160ff82168152600080516020615b3383398151915290602001611d7b565b6121d9612903565b60009081526101d860205260409020805460ff19166001179055565b6121fd612903565b6101d480546001600160a01b0319166001600160a01b0392909216919091179055565b6122286128a4565b600081116122705760405162461bcd60e51b81526020600482015260156024820152744c7a4170703a20696e76616c6964206d696e47617360581b6044820152606401610e39565b61ffff8381166000818152610100602090815260408083209487168084529482529182902085905581519283528201929092529081018290527f9d5c7c0b934da8fefa9c7760c98383778a12dfbfc0c3b3106518f43fb9508ac090606001611d1a565b60675460405163bf40fac160e01b815260206004820152600a60248201526923a7a7a22227a62620a960b11b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015612337573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235b919061531d565b905090565b612368612903565b6101d780546001600160a01b0319166001600160a01b0392909216919091179055565b6123936128a4565b61ffff8316600090815260ff602052604090206123b19083836145eb565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab838383604051611d1a939291906154fd565b6123ed6128a4565b6001600160a01b0381166124525760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e39565b61148381612fb0565b6124636131b8565b806124d8576040516370a0823160e01b81526001600160a01b038316906370a082319061249490309060040161477e565b602060405180830381865afa1580156124b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d5919061569d565b90505b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb9061250690339085906004016156b6565b6020604051808303816000875af1158015612525573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d999190615300565b60fe54604051633d7b2f6f60e21b815261ffff808716600483015285166024820152306044820152606481018390526060916001600160a01b03169063f5ecbdbc90608401600060405180830381865afa1580156125ab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125d391908101906156cf565b95945050505050565b600054610100900460ff16158080156125fc5750600054600160ff909116105b8061261d575061260b3061327b565b15801561261d575060005460ff166001145b6126395760405162461bcd60e51b8152600401610e399061564f565b6000805460ff19166001179055801561265c576000805461ff0019166101001790555b6126658461328a565b61268e7f00000000000000000000000000000000000000000000000000000000000000006132ad565b6101c58054336001600160a01b031990911617905582516101cc556020808401516101cd556040808501516101ce5560608501516101cf5560808501516101d0805460ff191691151591909117905583516101c955838201516101ca55838101516101cb555163bf40fac160e01b815260048101919091526009602482015268554249534348454d4560b81b60448201526001600160a01b0385169063bf40fac190606401602060405180830381865afa158015612750573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612774919061531d565b6101d780546001600160a01b0319166001600160a01b039290921691821790556127bc576066546101d780546001600160a01b0319166001600160a01b039092169190911790555b6127c96065600130611d86565b6127d7607d61a4ec30611d86565b6127e4608a607a30611d86565b6127f261016d603230611d86565b80156112b1576000805461ff001916905560405160018152600080516020615b338339815191529060200160405180910390a150505050565b60008061288e5a60966366ad5c8a60e01b898989896040516024016128539493929190615717565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152309291906132e5565b9150915081610eb857610eb8868686868561336f565b336128ad611abe565b6001600160a01b0316146119d65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e39565b6101c5546001600160a01b031633148061292757506066546001600160a01b031633145b80612941575033612936611abe565b6001600160a01b0316145b6119d6573360405163b63b5ad960e01b8152600401610e39919061477e565b6101c85460ff161561299e5760405163c5426f8d60e01b815260206004820152600660248201526518db1bdcd95960d21b6044820152606401610e39565b6129a66122d3565b6001600160a01b03166379cc679088866040518363ffffffff1660e01b81526004016129d39291906156b6565b600060405180830381600087803b1580156129ed57600080fd5b505af1158015612a01573d6000803e3d6000fd5b50505050600073__$a63bfe16b493dd64599c9f3a1d32f7e383$__63aac673c386612a2a6122d3565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8b9190615755565b6040516001600160e01b031960e085901b168152600481019290925260ff166024820152604401602060405180830381865af4158015612acf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af3919061569d565b905034612b1357604051630ba4e53360e21b815260040160405180910390fd5b600030466101d58054906000612b28836155c0565b90915550604080516001600160a01b039094166020850152830191909152606082015260800160408051808303601f1901815282825280516020918201206001600160a01b03808e1692850192909252908b16918301919091526060820184905260808201819052915060009060a00160408051601f1981840301815291905290506000866001811115612bbe57612bbe615778565b1415612c1d576000612bcf89611acd565b9050805160001415612bf75760405163068a505360e01b8152600481018a9052602401610e39565b612c1782826001600160a01b03881615612c11578761340d565b3361340d565b50612ce9565b6001866001811115612c3157612c31615778565b1415612ce9578451612c6857604051600160f01b602082015262061a80602282015260420160405160208183030381529060405294505b6000612c73896118d9565b905061ffff8116612c9a5760405163068a505360e01b8152600481018a9052602401610e39565b6000612cab828d8d8860008c610ec0565b50905034811115612cd8576040516324a89fab60e21b815260048101829052346024820152604401610e39565b612ce683838e60008b61351f565b50505b81896001600160a01b03168b6001600160a01b03167fabeeb7182c7294cd8efcd40e9ff952c1b759c2165b3634aac589429de5d55ad08b87428c604051612d3394939291906157b0565b60405180910390a450505050505050505050565b600080516020615b13833981519152546001600160a01b031690565b6114836128a4565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612d9e57611d998361352d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612df8575060408051601f3d908101601f19168201909252612df59181019061569d565b60015b612e5b5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610e39565b600080516020615b138339815191528114612eca5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610e39565b50611d998383836135c7565b6000612f1785858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506135ec92505050565b90506000808080612f2a868801886157d2565b935093509350935061115e8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250899250889150879050868661376b565b60008060008084806020019051810190612f929190615818565b60148b015193975091955093509150611efa898289888888886137fc565b60cc80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60608161301081601f615860565b101561304f5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610e39565b6130598284615860565b8451101561309d5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610e39565b6060821580156130bc5760405191506000825260208201604052613106565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156130f55780518352602092830192016130dd565b5050858452601f01601f1916604052505b50949350505050565b61ffff831660009081526101d96020526040902054156131415760405162dc149f60e41b815260040160405180910390fd5b61ffff831660008181526101d9602090815260408083208690558583526101d6825291829020805461ffff191690931790925551613183918391309101615878565b60408051601f1981840301815291815261ffff8516600090815260ff602090815291902082516112b193919290910190614567565b60655460408051632d77bef360e11b8152905133926001600160a01b031691635aef7de69160048083019260209291908290030181865afa158015613201573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613225919061531d565b6001600160a01b0316146119d65760405162461bcd60e51b815260206004820181905260248201527f6f6e6c79206176617461722063616e2063616c6c2074686973206d6574686f646044820152606401610e39565b6001600160a01b03163b151590565b606780546001600160a01b0319166001600160a01b03831617905561148361116b565b600054610100900460ff166132d45760405162461bcd60e51b8152600401610e399061589a565b6132dc613819565b61148381613849565b6000606060008060008661ffff166001600160401b0381111561330a5761330a6147b5565b6040519080825280601f01601f191660200182016040528015613334576020820181803683370190505b50905060008087516020890160008d8df191503d925086831115613356578692505b828152826000602083013e909890975095505050505050565b818051906020012061013060008761ffff1661ffff168152602001908152602001600020856040516133a191906158e5565b9081526040805191829003602090810183206001600160401b0388166000908152915220919091557fe183f33de2837795525b4792ca4cd60535bd77c53b7e7030060bfcf5734d6b0c906133fe9087908790879087908790615901565b60405180910390a15050505050565b600061341830613892565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630c93e3bb3430868589886040518763ffffffff1660e01b815260040161346f959493929190615953565b6000604051808303818588803b15801561348857600080fd5b505af115801561349c573d6000803e3d6000fd5b5050604051631c92115f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169350631c92115f92506134f191508690859089906004016159b1565b600060405180830381600087803b15801561350b57600080fd5b505af11580156116c3573d6000803e3d6000fd5b610ff6848685858534613ad7565b6135368161327b565b6135985760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610e39565b600080516020615b1383398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6135d083613c61565b6000825111806135dd5750805b15611d99576112b18383613ca1565b6000808290506000808251602a14158061362c575082600081518110613614576136146155aa565b6020910101516001600160f81b031916600360fc1b14155b8061365d575082600181518110613645576136456155aa565b6020910101516001600160f81b031916600f60fb1b14155b1561367b57604051636fa478cf60e11b815260040160405180910390fd5b60025b602a81101561376157838181518110613699576136996155aa565b016020015160f81c9150606182108015906136b8575060668260ff1611155b156136cf576136c86057836159f4565b9150613738565b60418260ff16101580156136e7575060468260ff1611155b156136f7576136c86037836159f4565b60308260ff161015801561370f575060398260ff1611155b1561371f576136c86030836159f4565b604051636fa478cf60e11b815260040160405180910390fd5b6002613745826029615572565b60ff8416911b1b929092179161375a816155c0565b905061367e565b5090949350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316600114156137df5760405163c5426f8d60e01b8152602060048201526016602482015275185e195b185c8819d85d195dd85e481b9bdd081cd95d60521b6044820152606401610e39565b60006137ea87611835565b90506115dc858585848a876000613d8a565b600061380788611055565b90506116c3858585848b876001613d8a565b600054610100900460ff166138405760405162461bcd60e51b8152600401610e399061589a565b6119d633612fb0565b600054610100900460ff166138705760405162461bcd60e51b8152600401610e399061589a565b60fe80546001600160a01b0319166001600160a01b0392909216919091179055565b604051606082811b6001600160601b03191660208301529060009060340160408051601f198184030181528282528051838301909252601083526f181899199a1a9b1b9c1cb0b131b232b360811b602084015280519093509091906000906138fb906002615a17565b613906906002615860565b6001600160401b0381111561391d5761391d6147b5565b6040519080825280601f01601f191660200182016040528015613947576020820181803683370190505b509050600360fc1b81600081518110613962576139626155aa565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613991576139916155aa565b60200101906001600160f81b031916908160001a90535060005b83811015613acd578260048683815181106139c8576139c86155aa565b016020015182516001600160f81b031990911690911c60f81c9081106139f0576139f06155aa565b01602001516001600160f81b03191682613a0b836002615a17565b613a16906002615860565b81518110613a2657613a266155aa565b60200101906001600160f81b031916908160001a90535082858281518110613a5057613a506155aa565b602091010151815160f89190911c600f16908110613a7057613a706155aa565b01602001516001600160f81b03191682613a8b836002615a17565b613a96906003615860565b81518110613aa657613aa66155aa565b60200101906001600160f81b031916908160001a905350613ac6816155c0565b90506139ab565b5095945050505050565b61ffff8616600090815260ff602052604081208054613af5906154c8565b80601f0160208091040260200160405190810160405280929190818152602001828054613b21906154c8565b8015613b6e5780601f10613b4357610100808354040283529160200191613b6e565b820191906000526020600020905b815481529060010190602001808311613b5157829003601f168201915b50505050509050805160001415613be05760405162461bcd60e51b815260206004820152603060248201527f4c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742060448201526f61207472757374656420736f7572636560801b6064820152608401610e39565b613beb878751614273565b60fe5460405162c5803160e81b81526001600160a01b039091169063c5803100908490613c26908b9086908c908c908c908c90600401615a36565b6000604051808303818588803b158015613c3f57600080fd5b505af1158015613c53573d6000803e3d6000fd5b505050505050505050505050565b613c6a8161352d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060613cac8361327b565b613d075760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610e39565b600080846001600160a01b031684604051613d2291906158e5565b600060405180830381855af49150503d8060008114613d5d576040519150601f19603f3d011682016040523d82523d6000602084013e613d62565b606091505b50915091506125d38282604051806060016040528060278152602001615b53602791396142e2565b613d93846118d9565b61ffff16613db75760405163068a505360e01b815260048101859052602401610e39565b6101c760008583604051602001613dcf929190615a9d565b60408051601f198184030181529181528151602092830120835290820192909252016000205460ff1615613e385760405163c5426f8d60e01b815260206004820152600f60248201526e1cdbdd5c98d948191a5cd8589b1959608a1b6044820152606401610e39565b60008281526101c6602052604090205460ff1615613e6c57604051636e91c2f160e11b815260048101839052602401610e39565b600060ff6000613e7b876118d9565b61ffff1661ffff1681526020019081526020016000208054613e9c906154c8565b80601f0160208091040260200160405190810160405280929190818152602001828054613ec8906154c8565b8015613f155780601f10613eea57610100808354040283529160200191613f15565b820191906000526020600020905b815481529060010190602001808311613ef857829003601f168201915b5050505050905060008430604051602001613f31929190615878565b604051602081830303815290604052905081518151141580613f5257508151155b80613f6b57508180519060200120818051906020012014155b15613fb857604080518781526001600160a01b03871660208201527f1eafb58197ea0dc76b9278ccad47f61a239f00b017d89a19081a89321cce213d910160405180910390a150506115dc565b60008481526101d8602052604090205460ff16613fdb57613fdb898989466142fb565b600073__$a63bfe16b493dd64599c9f3a1d32f7e383$__63e62381b6896140006122d3565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561403d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140619190615755565b6040516001600160e01b031960e085901b168152600481019290925260ff166024820152604401602060405180830381865af41580156140a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140c9919061569d565b905060006140d682614428565b60008781526101c660205260409020805460ff1916600117905590506140fb8a61444d565b6065546001600160a01b0316636407e4326141168385615572565b6066546040516001600160e01b031960e085901b16815261414892918f916001600160a01b0390911690600401615ab1565b6020604051808303816000875af1158015614167573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061418b9190615300565b508015614214576065546101d754606654604051633203f21960e11b81526001600160a01b0393841693636407e432936141cf938793918316921690600401615ab1565b6020604051808303816000875af11580156141ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142129190615300565b505b858a6001600160a01b03168c6001600160a01b03167f6cf712ce908185c8c38a073b7315f79687e7440fb057d9d1ca76a2509a1282ee8c858d8b60405161425e94939291906157b0565b60405180910390a45050505050505050505050565b61ffff8216600090815261010160205260409020548061429257506127105b80821115611d995760405162461bcd60e51b815260206004820181905260248201527f4c7a4170703a207061796c6f61642073697a6520697320746f6f206c617267656044820152606401610e39565b606083156142f157508161154c565b61154c838361453d565b6001600160a01b038316158061430f575080155b156143315782816040516314b2a5c360e31b8152600401610e399291906156b6565b61433e6201518042615572565b6101d154101561435457426101d15560006101d2555b6143616201518042615572565b6001600160a01b03851660009081526101d3602052604090205410156143a2576001600160a01b03841660009081526101d360205260408120428155600101555b6000806143af86856112f8565b9092509050816143d4578060405163c5426f8d60e01b8152600401610e399190614e31565b836101d160010160008282546143ea9190615860565b90915550506001600160a01b03861660009081526101d360205260408120600101805486929061441b908490615860565b9091555050505050505050565b6101cb546000906127109061443d9084615a17565b6144479190615ad0565b92915050565b6101d4546001600160a01b0316158015906144d557506101d4546040516374bf77e960e11b81526001600160a01b039091169063e97eefd29061449490849060040161477e565b602060405180830381865afa1580156144b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144d59190615300565b15611483576101d4546040516306ee3b9f60e31b81526001600160a01b0390911690633771dcf89061450b90849060040161477e565b600060405180830381600087803b15801561452557600080fd5b505af1925050508015614536575060015b6114835750565b81511561454d5781518083602001fd5b8060405162461bcd60e51b8152600401610e399190614e31565b828054614573906154c8565b90600052602060002090601f01602090048101928261459557600085556145db565b82601f106145ae57805160ff19168380011785556145db565b828001600101855582156145db579182015b828111156145db5782518255916020019190600101906145c0565b506145e792915061465f565b5090565b8280546145f7906154c8565b90600052602060002090601f01602090048101928261461957600085556145db565b82601f106146325782800160ff198235161785556145db565b828001600101855582156145db579182015b828111156145db578235825591602001919060010190614644565b5b808211156145e75760008155600101614660565b803561ffff81168114611b7f57600080fd5b60008083601f84011261469857600080fd5b5081356001600160401b038111156146af57600080fd5b6020830191508360208285010111156113b657600080fd5b80356001600160401b0381168114611b7f57600080fd5b600080600080600080608087890312156146f757600080fd5b61470087614674565b955060208701356001600160401b038082111561471c57600080fd5b6147288a838b01614686565b909750955085915061473c60408a016146c7565b9450606089013591508082111561475257600080fd5b5061475f89828a01614686565b979a9699509497509295939492505050565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461148357600080fd5b801515811461148357600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156147f3576147f36147b5565b604052919050565b60006001600160401b03821115614814576148146147b5565b50601f01601f191660200190565b6000614835614830846147fb565b6147cb565b905082815283838301111561484957600080fd5b828260208301376000602084830101529392505050565b600082601f83011261487157600080fd5b61154c83833560208501614822565b60008060008060008060c0878903121561489957600080fd5b6148a287614674565b955060208701356148b281614792565b945060408701356148c281614792565b93506060870135925060808701356148d9816147a7565b915060a08701356001600160401b038111156148f457600080fd5b61490089828a01614860565b9150509295509295509295565b60006020828403121561491f57600080fd5b61154c82614674565b60006020828403121561493a57600080fd5b5035919050565b6000806040838503121561495457600080fd5b61495d83614674565b946020939093013593505050565b60006020828403121561497d57600080fd5b813561154c816147a7565b60008060008060008060008060008060c08b8d0312156149a757600080fd5b8a35995060208b01356001600160401b03808211156149c557600080fd5b6149d18e838f01614686565b909b50995060408d01359150808211156149ea57600080fd5b6149f68e838f01614686565b909950975060608d0135915080821115614a0f57600080fd5b614a1b8e838f01614686565b909750955060808d0135915080821115614a3457600080fd5b50614a418d828e01614686565b9150809450508092505060a08b013590509295989b9194979a5092959850565b60008060008060808587031215614a7757600080fd5b8435614a8281614792565b93506020850135925060408501359150606085013560028110614aa457600080fd5b939692955090935050565b600060a08284031215614ac157600080fd5b60405160a081016001600160401b0381118282101715614ae357614ae36147b5565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201526080830135614b1b816147a7565b6080919091015292915050565b600060a08284031215614b3a57600080fd5b61154c8383614aaf565b60008060408385031215614b5757600080fd5b823561495d81614792565b60005b83811015614b7d578181015183820152602001614b65565b838111156112b15750506000910152565b60008151808452614ba6816020860160208601614b62565b601f01601f19169290920160200192915050565b8215158152604060208201526000614bd56040830184614b8e565b949350505050565b600060208284031215614bef57600080fd5b813561154c81614792565b600080600060408486031215614c0f57600080fd5b614c1884614674565b925060208401356001600160401b03811115614c3357600080fd5b614c3f86828701614686565b9497909650939450505050565b60008060008060808587031215614c6257600080fd5b8435614c6d81614792565b935060208501359250604085013591506060850135614aa481614792565b60008060008060008060006080888a031215614ca657600080fd5b8735965060208801356001600160401b0380821115614cc457600080fd5b614cd08b838c01614686565b909850965060408a0135915080821115614ce957600080fd5b614cf58b838c01614686565b909650945060608a0135915080821115614d0e57600080fd5b50614d1b8a828b01614686565b989b979a50959850939692959293505050565b60008060408385031215614d4157600080fd5b8235614d4c81614792565b915060208301356001600160401b03811115614d6757600080fd5b614d7385828601614860565b9150509250929050565b600060208284031215614d8f57600080fd5b81356001600160401b03811115614da557600080fd5b8201601f81018413614db657600080fd5b614bd584823560208401614822565b61ffff91909116815260200190565b600080600060608486031215614de957600080fd5b614df284614674565b925060208401356001600160401b03811115614e0d57600080fd5b614e1986828701614860565b925050614e28604085016146c7565b90509250925092565b60208152600061154c6020830184614b8e565b600060608284031215614e5657600080fd5b604051606081016001600160401b0381118282101715614e7857614e786147b5565b80604052508091508235815260208301356020820152604083013560408201525092915050565b600060608284031215614eb157600080fd5b61154c8383614e44565b60008060408385031215614ece57600080fd5b614ed783614674565b9150614ee560208401614674565b90509250929050565b600080600060608486031215614f0357600080fd5b614f0c84614674565b9250602084013591506040840135614f2381614792565b809150509250925092565b600080600080600060808688031215614f4657600080fd5b8535614f5181614792565b9450602086013593506040860135925060608601356001600160401b03811115614f7a57600080fd5b614f8688828901614686565b969995985093965092949392505050565b60006001600160401b03821115614fb057614fb06147b5565b5060051b60200190565b600082601f830112614fcb57600080fd5b81356020614fdb61483083614f97565b82815260059290921b84018101918181019086841115614ffa57600080fd5b8286015b8481101561501e578035615011816147a7565b8352918301918301614ffe565b509695505050505050565b6000806040838503121561503c57600080fd5b82356001600160401b038082111561505357600080fd5b818501915085601f83011261506757600080fd5b8135602061507761483083614f97565b82815260059290921b8401810191818101908984111561509657600080fd5b948201945b838610156150b45785358252948201949082019061509b565b965050860135925050808211156150ca57600080fd5b50614d7385828601614fba565b6000806000806000608086880312156150ef57600080fd5b6150f886614674565b945061510660208701614674565b93506040860135925060608601356001600160401b03811115614f7a57600080fd5b60008060006060848603121561513d57600080fd5b61514684614674565b925061515460208501614674565b9150604084013590509250925092565b6000806000806080858703121561517a57600080fd5b61518385614674565b935061519160208601614674565b925060408501356151a181614792565b9396929550929360600135925050565b600080600061012084860312156151c757600080fd5b83356151d281614792565b92506151e18560208601614aaf565b9150614e288560c08601614e44565b61ffff861681526001600160a01b038516602082015260a06040820181905260009061521e90830186614b8e565b841515606084015282810360808401526152388185614b8e565b98975050505050505050565b6000806040838503121561525757600080fd5b505080516020909101519092909150565b8183823760009101908152919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b89815260c0602082015260006152bb60c083018a8c615278565b82810360408401526152ce81898b615278565b905086606084015282810360808401526152e9818688615278565b9150508260a08301529a9950505050505050505050565b60006020828403121561531257600080fd5b815161154c816147a7565b60006020828403121561532f57600080fd5b815161154c81614792565b8754815260018089015460208301526002890154604083015260038901546060830152600489015460ff1615156080830152875460a083015287015460c08201526101a08101865460e083015260018701546101008301526153a0610120830187614771565b8415156101408301526153b7610160830185614771565b8261018083015298975050505050505050565b60006153d8614830846147fb565b90508281528383830111156153ec57600080fd5b61154c836020830184614b62565b6000806040838503121561540d57600080fd5b8251615418816147a7565b60208401519092506001600160401b0381111561543457600080fd5b8301601f8101851361544557600080fd5b614d73858251602084016153ca565b6020808252602c90820152600080516020615af383398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c90820152600080516020615af383398151915260408201526b6163746976652070726f787960a01b606082015260800190565b600181811c908216806154dc57607f821691505b602082108114156118d357634e487b7160e01b600052602260045260246000fd5b61ffff841681526040602082015260006125d3604083018486615278565b868152608060208201526000615535608083018789615278565b8281036040840152615548818688615278565b915050826060830152979650505050505050565b634e487b7160e01b600052601160045260246000fd5b6000828210156155845761558461555c565b500390565b8284823760609190911b6001600160601b0319169101908152601401919050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156155d4576155d461555c565b5060010190565b600061ffff808816835280871660208401525084604083015260806060830152615609608083018486615278565b979650505050505050565b61ffff86168152608060208201526000615632608083018688615278565b6001600160401b0394909416604083015250606001529392505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000602082840312156156af57600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b6000602082840312156156e157600080fd5b81516001600160401b038111156156f757600080fd5b8201601f8101841361570857600080fd5b614bd5848251602084016153ca565b61ffff851681526080602082015260006157346080830186614b8e565b6001600160401b038516604084015282810360608401526156098185614b8e565b60006020828403121561576757600080fd5b815160ff8116811461154c57600080fd5b634e487b7160e01b600052602160045260246000fd5b600281106157ac57634e487b7160e01b600052602160045260246000fd5b9052565b8481526020810184905260408101839052608081016125d3606083018461578e565b600080600080608085870312156157e857600080fd5b84356157f381614792565b9350602085013561580381614792565b93969395505050506040820135916060013590565b6000806000806080858703121561582e57600080fd5b845161583981614792565b602086015190945061584a81614792565b6040860151606090960151949790965092505050565b600082198211156158735761587361555c565b500190565b6001600160601b0319606093841b811682529190921b16601482015260280190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600082516158f7818460208701614b62565b9190910192915050565b61ffff8616815260a06020820152600061591e60a0830187614b8e565b6001600160401b0386166040840152828103606084015261593f8186614b8e565b905082810360808401526152388185614b8e565b600060018060a01b03808816835260a0602084015261597560a0840188614b8e565b83810360408501526159878188614b8e565b9050838103606085015261599b8187614b8e565b9250508084166080840152509695505050505050565b6060815260006159c46060830186614b8e565b82810360208401526159d68186614b8e565b905082810360408401526159ea8185614b8e565b9695505050505050565b600060ff821660ff841680821015615a0e57615a0e61555c565b90039392505050565b6000816000190483118215151615615a3157615a3161555c565b500290565b61ffff8716815260c060208201526000615a5360c0830188614b8e565b8281036040840152615a658188614b8e565b6001600160a01b0387811660608601528616608085015283810360a08501529050615a908185614b8e565b9998505050505050505050565b8281526040810161154c602083018461578e565b9283526001600160a01b03918216602084015216604082015260600190565b600082615aed57634e487b7160e01b600052601260045260246000fd5b50049056fe46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220074469714023f1f6a6733f055ecc495de1be7fc1b548740e175f36f3a0764c4864736f6c634300080a0033",
  "deployedBytecode": "0x60806040526004361061034b5760003560e01c80621d356714610350578063020051cf1461037257806305fead15146103bc57806307e0db17146103f15780630dce292e146104115780630df374831461045257806310ddb13714610472578063116191b61461049257806316ad5512146104c65780631a394795146104f45780631a98b2e0146105145780631b3c90a8146105345780631fec5c5c1461054957806329b708721461055c5780633095634a1461057c5780633659cfe6146105aa5780633d8b38f6146105ca5780633e6326fc146105ea5780633f1f4fa41461060a57806340a00aaf146106385780634162169f1461064b578063425cfb531461066b57806342d65a8d1461069c578063452a9320146106bc57806346904840146106dd57806349160658146106fe5780634f1ef2861461071e57806352d1902d1461073157806356026f37146107465780635aef7de6146107665780635b23a990146107865780635b8c41e6146107b357806366ad5c8a1461080357806369c20d36146108235780636a22d8cc14610854578063715018a61461088857806373800fc41461089d5780637533d788146108cb5780637b0240c0146108f857806382dc737d146109355780638a0dac4a146109555780638cfd8f5c146109755780638da5cb5b146109ae5780638f65be85146109c3578063950c8a7414610a0c5780639a9ee08114610a2d5780639f38369a14610a4d578063a6c3d16514610a6d578063b2f7667f14610a8d578063b353aaa714610aaa578063b5569f1814610aca578063baf3292d14610afc578063c01c812314610b1c578063c2b6b58c14610b3c578063c446183414610b57578063c56bbdd914610b6d578063c612f9ea14610b80578063c6dd812f14610ba0578063c78ab88214610bf9578063cbed8b9c14610c19578063d1deba1f14610c39578063d422794714610c4c578063d55ec69714610c81578063d7d1bbdb14610c96578063d8b31c7714610cb6578063de5f72fd14610cd6578063df2a5b3b14610cf7578063e00dd16114610d17578063e1758bd814610d2e578063e74b981b14610d43578063eb8d72b714610d63578063f2fde38b14610d83578063f3fef3a314610da3578063f5ecbdbc14610dc3578063fad16abe14610de3575b600080fd5b34801561035c57600080fd5b5061037061036b3660046146de565b610e03565b005b34801561037e57600080fd5b506103a67f000000000000000000000000000000000000000000000000000000000000000081565b6040516103b3919061477e565b60405180910390f35b3480156103c857600080fd5b506103dc6103d7366004614880565b610ec0565b604080519283526020830191909152016103b3565b3480156103fd57600080fd5b5061037061040c36600461490d565b610f90565b34801561041d57600080fd5b5061044261042c366004614928565b6101d86020526000908152604090205460ff1681565b60405190151581526020016103b3565b34801561045e57600080fd5b5061037061046d366004614941565b610ffd565b34801561047e57600080fd5b5061037061048d36600461490d565b61101d565b34801561049e57600080fd5b506103a67f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d257600080fd5b506104e66104e136600461490d565b611055565b6040519081526020016103b3565b34801561050057600080fd5b5061037061050f36600461496b565b61106c565b34801561052057600080fd5b5061037061052f366004614988565b611088565b34801561054057600080fd5b5061037061116b565b610370610557366004614a61565b611292565b34801561056857600080fd5b50610370610577366004614b28565b6112b7565b34801561058857600080fd5b5061059c610597366004614b44565b6112f8565b6040516103b3929190614bba565b3480156105b657600080fd5b506103706105c5366004614bdd565b6113bd565b3480156105d657600080fd5b506104426105e5366004614bfa565b611486565b3480156105f657600080fd5b506067546103a6906001600160a01b031681565b34801561061657600080fd5b506104e661062536600461490d565b6101016020526000908152604090205481565b610370610646366004614c4c565b611553565b34801561065757600080fd5b506065546103a6906001600160a01b031681565b34801561067757600080fd5b50610442610686366004614928565b6101c66020526000908152604090205460ff1681565b3480156106a857600080fd5b506103706106b7366004614bfa565b611572565b3480156106c857600080fd5b506101c5546103a6906001600160a01b031681565b3480156106e957600080fd5b506101d7546103a6906001600160a01b031681565b34801561070a57600080fd5b50610370610719366004614c8b565b6115e5565b61037061072c366004614d2e565b6116cd565b34801561073d57600080fd5b506104e6611787565b34801561075257600080fd5b506104e6610761366004614d7d565b611835565b34801561077257600080fd5b506066546103a6906001600160a01b031681565b34801561079257600080fd5b506107a66107a1366004614928565b6118d9565b6040516103b39190614dc5565b3480156107bf57600080fd5b506104e66107ce366004614dd4565b610130602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205481565b34801561080f57600080fd5b5061037061081e3660046146de565b6118f0565b34801561082f57600080fd5b5061044261083e366004614928565b6101c76020526000908152604090205460ff1681565b34801561086057600080fd5b506103a67f000000000000000000000000000000000000000000000000000000000000000081565b34801561089457600080fd5b506103706119c4565b3480156108a957600080fd5b506104e66108b836600461490d565b6101d96020526000908152604090205481565b3480156108d757600080fd5b506108eb6108e636600461490d565b6119d8565b6040516103b39190614e31565b34801561090457600080fd5b506101c9546101ca546101cb5461091a92919083565b604080519384526020840192909252908201526060016103b3565b34801561094157600080fd5b50610370610950366004614e9f565b611a72565b34801561096157600080fd5b50610370610970366004614bdd565b611a93565b34801561098157600080fd5b506104e6610990366004614ebb565b61010060209081526000928352604080842090915290825290205481565b3480156109ba57600080fd5b506103a6611abe565b3480156109cf57600080fd5b506109f77f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016103b3565b348015610a1857600080fd5b50610102546103a6906001600160a01b031681565b348015610a3957600080fd5b506108eb610a48366004614928565b611acd565b348015610a5957600080fd5b506108eb610a6836600461490d565b611b84565b348015610a7957600080fd5b50610370610a88366004614bfa565b611c94565b348015610a9957600080fd5b506101d1546101d2546103dc919082565b348015610ab657600080fd5b5060fe546103a6906001600160a01b031681565b348015610ad657600080fd5b506107a6610ae5366004614928565b6101d66020526000908152604090205461ffff1681565b348015610b0857600080fd5b50610370610b17366004614bdd565b611d27565b348015610b2857600080fd5b50610370610b37366004614eee565b611d86565b348015610b4857600080fd5b506101c8546104429060ff1681565b348015610b6357600080fd5b506104e661271081565b610370610b7b366004614f2e565b611d9e565b348015610b8c57600080fd5b50610370610b9b366004614928565b611de3565b348015610bac57600080fd5b506101cc546101cd546101ce546101cf546101d054610bcf949392919060ff1685565b6040805195865260208601949094529284019190915260608301521515608082015260a0016103b3565b348015610c0557600080fd5b50610370610c14366004615029565b611e07565b348015610c2557600080fd5b50610370610c343660046150d7565b611e8c565b610370610c473660046146de565b611f05565b348015610c5857600080fd5b506103dc610c67366004614bdd565b6101d3602052600090815260409020805460019091015482565b348015610c8d57600080fd5b5061037061211d565b348015610ca257600080fd5b50610370610cb1366004614928565b6121d1565b348015610cc257600080fd5b50610370610cd1366004614bdd565b6121f5565b348015610ce257600080fd5b506101d4546103a6906001600160a01b031681565b348015610d0357600080fd5b50610370610d12366004615128565b612220565b348015610d2357600080fd5b506104e66101d55481565b348015610d3a57600080fd5b506103a66122d3565b348015610d4f57600080fd5b50610370610d5e366004614bdd565b612360565b348015610d6f57600080fd5b50610370610d7e366004614bfa565b61238b565b348015610d8f57600080fd5b50610370610d9e366004614bdd565b6123e5565b348015610daf57600080fd5b50610370610dbe366004614b44565b61245b565b348015610dcf57600080fd5b506108eb610dde366004615164565b612549565b348015610def57600080fd5b50610370610dfe3660046151b1565b6125dc565b60fe546001600160a01b0316336001600160a01b031614610e425733604051634a43969960e11b8152600401610e39919061477e565b60405180910390fd5b610eb88686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f89018190048102820181019092528781528993509150879087908190840183828082843760009201919091525061282b92505050565b505050505050565b604080516001600160a01b0387811660208301528681168284015260608201869052600060808084018290528451808503909101815260a084019485905260fe5463040a7bb160e41b90955290938493919216906340a7bb1090610f30908c90309086908b908b9060a4016151f0565b6040805180830381865afa925050508015610f68575060408051601f3d908101601f19168201909252610f6591810190615244565b60015b610f79576000809250925050610f85565b9093509150610f859050565b965096945050505050565b610f986128a4565b60fe546040516307e0db1760e01b81526001600160a01b03909116906307e0db1790610fc8908490600401614dc5565b600060405180830381600087803b158015610fe257600080fd5b505af1158015610ff6573d6000803e3d6000fd5b5050505050565b6110056128a4565b61ffff90911660009081526101016020526040902055565b6110256128a4565b60fe546040516310ddb13760e01b81526001600160a01b03909116906310ddb13790610fc8908490600401614dc5565b61ffff1660009081526101d9602052604090205490565b611074612903565b6101c8805460ff1916911515919091179055565b6000858560405161109a929190615268565b604051908190038120631876eed960e01b825291506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631876eed9906110fe908e908e908e908e908e9089908d908d908d906004016152a1565b6020604051808303816000875af115801561111d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111419190615300565b61115e57604051631403112d60e21b815260040160405180910390fd5b5050505050505050505050565b60675460405163bf40fac160e01b815260206004820152600a60248201526921a7a72a2927a62622a960b11b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa1580156111ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f2919061531d565b606580546001600160a01b0319166001600160a01b0392909216918217905560408051632d77bef360e11b81529051635aef7de6916004808201926020929091908290030181865afa15801561124c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611270919061531d565b606680546001600160a01b0319166001600160a01b0392909216919091179055565b6112b13385858585604051806020016040528060008152506000612960565b50505050565b6112bf612903565b80516101cc5560208101516101cd5560408101516101ce5560608101516101cf55608001516101d0805460ff1916911515919091179055565b6001600160a01b0380831660009081526101d360205260408082206067546101c8549251633de4799760e11b8152939460609473__$a63bfe16b493dd64599c9f3a1d32f7e383$__94637bc8f32e9461136c946101cc9491936101d193919092169160ff909116908c908c9060040161533a565b600060405180830381865af4158015611389573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113b191908101906153fa565b915091505b9250929050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156114065760405162461bcd60e51b8152600401610e3990615454565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611438612d47565b6001600160a01b03161461145e5760405162461bcd60e51b8152600401610e399061548e565b61146781612d63565b6040805160008082526020820190925261148391839190612d6b565b50565b61ffff8316600090815260ff6020526040812080548291906114a7906154c8565b80601f01602080910402602001604051908101604052809291908181526020018280546114d3906154c8565b80156115205780601f106114f557610100808354040283529160200191611520565b820191906000526020600020905b81548152906001019060200180831161150357829003601f168201915b505050505090508383604051611537929190615268565b60405180910390208180519060200120149150505b9392505050565b6112b13385858560006040518060200160405280600081525087612960565b61157a6128a4565b60fe546040516342d65a8d60e01b81526001600160a01b03909116906342d65a8d906115ae908690869086906004016154fd565b600060405180830381600087803b1580156115c857600080fd5b505af11580156115dc573d6000803e3d6000fd5b50505050505050565b600082826040516115f7929190615268565b604051908190038120635f6970c360e01b825291506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635f6970c390611655908b908b908b908b908b90899060040161551b565b6020604051808303816000875af1158015611674573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116989190615300565b6116b557604051631403112d60e21b815260040160405180910390fd5b6116c3878787878787612ed6565b5050505050505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156117165760405162461bcd60e51b8152600401610e3990615454565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611748612d47565b6001600160a01b03161461176e5760405162461bcd60e51b8152600401610e399061548e565b61177782612d63565b61178382826001612d6b565b5050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146118225760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610e39565b50600080516020615b1383398151915290565b805160208201206000907f564ccaf7594d66b1eaaea24fe01f0585bf52ee70852af4eac0cc4b04711cd0e28114156118705750600192915050565b7f43ab905ae53adfdd46d0850022d385a6c09c15bfde5206c98fa0fc8dc340c3f88114156118a15750600592915050565b7f2ab2bf4c5cabc3000e2502e33470a863db2755809d7561237424a0eb373154c28114156118d3575061a4ec92915050565b50919050565b60009081526101d6602052604090205461ffff1690565b33301461194e5760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d7573742062656044820152650204c7a4170760d41b6064820152608401610e39565b610eb88686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f890181900481028201810190925287815289935091508790879081908401838280828437600092019190915250612f7892505050565b6119cc6128a4565b6119d66000612fb0565b565b60ff60205260009081526040902080546119f1906154c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611a1d906154c8565b8015611a6a5780601f10611a3f57610100808354040283529160200191611a6a565b820191906000526020600020905b815481529060010190602001808311611a4d57829003601f168201915b505050505081565b611a7a612903565b80516101c95560208101516101ca55604001516101cb55565b611a9b612903565b6101c580546001600160a01b0319166001600160a01b0392909216919091179055565b60cc546001600160a01b031690565b60608160011415611afc575050604080518082019091526008815267457468657265756d60c01b602082015290565b8160051415611b2b57505060408051808201909152600a81526932ba3432b932bab6969960b11b602082015290565b8161a4ec1415611b5557505060408051808201909152600481526363656c6f60e01b602082015290565b8161aef31415611b7f57505060408051808201909152600481526363656c6f60e01b602082015290565b919050565b61ffff8116600090815260ff6020526040812080546060929190611ba7906154c8565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd3906154c8565b8015611c205780601f10611bf557610100808354040283529160200191611c20565b820191906000526020600020905b815481529060010190602001808311611c0357829003601f168201915b50505050509050805160001415611c795760405162461bcd60e51b815260206004820152601d60248201527f4c7a4170703a206e6f20747275737465642070617468207265636f72640000006044820152606401610e39565b61154c600060148351611c8c9190615572565b839190613002565b611c9c6128a4565b818130604051602001611cb193929190615589565b60408051601f1981840301815291815261ffff8516600090815260ff60209081529190208251611ce693919290910190614567565b507f8c0400cfe2d1199b1a725c78960bcc2a344d869b80590d0f2bd005db15a572ce838383604051611d1a939291906154fd565b60405180910390a1505050565b611d2f6128a4565b61010280546001600160a01b0319166001600160a01b0383161790556040517f5db758e995a17ec1ad84bdef7e8c3293a0bd6179bcce400dff5d4c3d87db726b90611d7b90839061477e565b60405180910390a150565b611d8e612903565b611d9983838361310f565b505050565b610ff633868686600187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250612960915050565b611deb612903565b60009081526101c660205260409020805460ff19166001179055565b611e0f612903565b60005b8251811015611d9957818181518110611e2d57611e2d6155aa565b60200260200101516101c76000858481518110611e4c57611e4c6155aa565b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611e84906155c0565b915050611e12565b611e946128a4565b60fe546040516332fb62e760e21b81526001600160a01b039091169063cbed8b9c90611ecc90889088908890889088906004016155db565b600060405180830381600087803b158015611ee657600080fd5b505af1158015611efa573d6000803e3d6000fd5b505050505050505050565b61ffff8616600090815261013060205260408082209051611f299088908890615268565b90815260408051602092819003830190206001600160401b03871660009081529252902054905080611fa95760405162461bcd60e51b815260206004820152602360248201527f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737360448201526261676560e81b6064820152608401610e39565b808383604051611fba929190615268565b6040518091039020146120195760405162461bcd60e51b815260206004820152602160248201527f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f616044820152601960fa1b6064820152608401610e39565b61ffff871660009081526101306020526040808220905161203d9089908990615268565b90815260408051602092819003830181206001600160401b038916600090815290845282902093909355601f880182900482028301820190528682526120d5918991899089908190840183828082843760009201919091525050604080516020601f8a018190048102820181019092528881528a935091508890889081908401838280828437600092019190915250612f7892505050565b7fc264d91f3adc5588250e1551f547752ca0cfa8f6b530d243b9f9f4cab10ea8e5878787878560405161210c959493929190615614565b60405180910390a150505050505050565b600054600290610100900460ff1615801561213f575060005460ff8083169116105b61215b5760405162461bcd60e51b8152600401610e399061564f565b6000805461ffff191660ff83161761010017905561217c606560013061310f565b61218a607d61a4ec3061310f565b612197608a607a3061310f565b6121a561016d60323061310f565b6000805461ff001916905560405160ff82168152600080516020615b3383398151915290602001611d7b565b6121d9612903565b60009081526101d860205260409020805460ff19166001179055565b6121fd612903565b6101d480546001600160a01b0319166001600160a01b0392909216919091179055565b6122286128a4565b600081116122705760405162461bcd60e51b81526020600482015260156024820152744c7a4170703a20696e76616c6964206d696e47617360581b6044820152606401610e39565b61ffff8381166000818152610100602090815260408083209487168084529482529182902085905581519283528201929092529081018290527f9d5c7c0b934da8fefa9c7760c98383778a12dfbfc0c3b3106518f43fb9508ac090606001611d1a565b60675460405163bf40fac160e01b815260206004820152600a60248201526923a7a7a22227a62620a960b11b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015612337573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235b919061531d565b905090565b612368612903565b6101d780546001600160a01b0319166001600160a01b0392909216919091179055565b6123936128a4565b61ffff8316600090815260ff602052604090206123b19083836145eb565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab838383604051611d1a939291906154fd565b6123ed6128a4565b6001600160a01b0381166124525760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e39565b61148381612fb0565b6124636131b8565b806124d8576040516370a0823160e01b81526001600160a01b038316906370a082319061249490309060040161477e565b602060405180830381865afa1580156124b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d5919061569d565b90505b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb9061250690339085906004016156b6565b6020604051808303816000875af1158015612525573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d999190615300565b60fe54604051633d7b2f6f60e21b815261ffff808716600483015285166024820152306044820152606481018390526060916001600160a01b03169063f5ecbdbc90608401600060405180830381865afa1580156125ab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125d391908101906156cf565b95945050505050565b600054610100900460ff16158080156125fc5750600054600160ff909116105b8061261d575061260b3061327b565b15801561261d575060005460ff166001145b6126395760405162461bcd60e51b8152600401610e399061564f565b6000805460ff19166001179055801561265c576000805461ff0019166101001790555b6126658461328a565b61268e7f00000000000000000000000000000000000000000000000000000000000000006132ad565b6101c58054336001600160a01b031990911617905582516101cc556020808401516101cd556040808501516101ce5560608501516101cf5560808501516101d0805460ff191691151591909117905583516101c955838201516101ca55838101516101cb555163bf40fac160e01b815260048101919091526009602482015268554249534348454d4560b81b60448201526001600160a01b0385169063bf40fac190606401602060405180830381865afa158015612750573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612774919061531d565b6101d780546001600160a01b0319166001600160a01b039290921691821790556127bc576066546101d780546001600160a01b0319166001600160a01b039092169190911790555b6127c96065600130611d86565b6127d7607d61a4ec30611d86565b6127e4608a607a30611d86565b6127f261016d603230611d86565b80156112b1576000805461ff001916905560405160018152600080516020615b338339815191529060200160405180910390a150505050565b60008061288e5a60966366ad5c8a60e01b898989896040516024016128539493929190615717565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152309291906132e5565b9150915081610eb857610eb8868686868561336f565b336128ad611abe565b6001600160a01b0316146119d65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e39565b6101c5546001600160a01b031633148061292757506066546001600160a01b031633145b80612941575033612936611abe565b6001600160a01b0316145b6119d6573360405163b63b5ad960e01b8152600401610e39919061477e565b6101c85460ff161561299e5760405163c5426f8d60e01b815260206004820152600660248201526518db1bdcd95960d21b6044820152606401610e39565b6129a66122d3565b6001600160a01b03166379cc679088866040518363ffffffff1660e01b81526004016129d39291906156b6565b600060405180830381600087803b1580156129ed57600080fd5b505af1158015612a01573d6000803e3d6000fd5b50505050600073__$a63bfe16b493dd64599c9f3a1d32f7e383$__63aac673c386612a2a6122d3565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a8b9190615755565b6040516001600160e01b031960e085901b168152600481019290925260ff166024820152604401602060405180830381865af4158015612acf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612af3919061569d565b905034612b1357604051630ba4e53360e21b815260040160405180910390fd5b600030466101d58054906000612b28836155c0565b90915550604080516001600160a01b039094166020850152830191909152606082015260800160408051808303601f1901815282825280516020918201206001600160a01b03808e1692850192909252908b16918301919091526060820184905260808201819052915060009060a00160408051601f1981840301815291905290506000866001811115612bbe57612bbe615778565b1415612c1d576000612bcf89611acd565b9050805160001415612bf75760405163068a505360e01b8152600481018a9052602401610e39565b612c1782826001600160a01b03881615612c11578761340d565b3361340d565b50612ce9565b6001866001811115612c3157612c31615778565b1415612ce9578451612c6857604051600160f01b602082015262061a80602282015260420160405160208183030381529060405294505b6000612c73896118d9565b905061ffff8116612c9a5760405163068a505360e01b8152600481018a9052602401610e39565b6000612cab828d8d8860008c610ec0565b50905034811115612cd8576040516324a89fab60e21b815260048101829052346024820152604401610e39565b612ce683838e60008b61351f565b50505b81896001600160a01b03168b6001600160a01b03167fabeeb7182c7294cd8efcd40e9ff952c1b759c2165b3634aac589429de5d55ad08b87428c604051612d3394939291906157b0565b60405180910390a450505050505050505050565b600080516020615b13833981519152546001600160a01b031690565b6114836128a4565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612d9e57611d998361352d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612df8575060408051601f3d908101601f19168201909252612df59181019061569d565b60015b612e5b5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610e39565b600080516020615b138339815191528114612eca5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610e39565b50611d998383836135c7565b6000612f1785858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506135ec92505050565b90506000808080612f2a868801886157d2565b935093509350935061115e8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250899250889150879050868661376b565b60008060008084806020019051810190612f929190615818565b60148b015193975091955093509150611efa898289888888886137fc565b60cc80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60608161301081601f615860565b101561304f5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610e39565b6130598284615860565b8451101561309d5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610e39565b6060821580156130bc5760405191506000825260208201604052613106565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156130f55780518352602092830192016130dd565b5050858452601f01601f1916604052505b50949350505050565b61ffff831660009081526101d96020526040902054156131415760405162dc149f60e41b815260040160405180910390fd5b61ffff831660008181526101d9602090815260408083208690558583526101d6825291829020805461ffff191690931790925551613183918391309101615878565b60408051601f1981840301815291815261ffff8516600090815260ff602090815291902082516112b193919290910190614567565b60655460408051632d77bef360e11b8152905133926001600160a01b031691635aef7de69160048083019260209291908290030181865afa158015613201573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613225919061531d565b6001600160a01b0316146119d65760405162461bcd60e51b815260206004820181905260248201527f6f6e6c79206176617461722063616e2063616c6c2074686973206d6574686f646044820152606401610e39565b6001600160a01b03163b151590565b606780546001600160a01b0319166001600160a01b03831617905561148361116b565b600054610100900460ff166132d45760405162461bcd60e51b8152600401610e399061589a565b6132dc613819565b61148381613849565b6000606060008060008661ffff166001600160401b0381111561330a5761330a6147b5565b6040519080825280601f01601f191660200182016040528015613334576020820181803683370190505b50905060008087516020890160008d8df191503d925086831115613356578692505b828152826000602083013e909890975095505050505050565b818051906020012061013060008761ffff1661ffff168152602001908152602001600020856040516133a191906158e5565b9081526040805191829003602090810183206001600160401b0388166000908152915220919091557fe183f33de2837795525b4792ca4cd60535bd77c53b7e7030060bfcf5734d6b0c906133fe9087908790879087908790615901565b60405180910390a15050505050565b600061341830613892565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630c93e3bb3430868589886040518763ffffffff1660e01b815260040161346f959493929190615953565b6000604051808303818588803b15801561348857600080fd5b505af115801561349c573d6000803e3d6000fd5b5050604051631c92115f60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169350631c92115f92506134f191508690859089906004016159b1565b600060405180830381600087803b15801561350b57600080fd5b505af11580156116c3573d6000803e3d6000fd5b610ff6848685858534613ad7565b6135368161327b565b6135985760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610e39565b600080516020615b1383398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6135d083613c61565b6000825111806135dd5750805b15611d99576112b18383613ca1565b6000808290506000808251602a14158061362c575082600081518110613614576136146155aa565b6020910101516001600160f81b031916600360fc1b14155b8061365d575082600181518110613645576136456155aa565b6020910101516001600160f81b031916600f60fb1b14155b1561367b57604051636fa478cf60e11b815260040160405180910390fd5b60025b602a81101561376157838181518110613699576136996155aa565b016020015160f81c9150606182108015906136b8575060668260ff1611155b156136cf576136c86057836159f4565b9150613738565b60418260ff16101580156136e7575060468260ff1611155b156136f7576136c86037836159f4565b60308260ff161015801561370f575060398260ff1611155b1561371f576136c86030836159f4565b604051636fa478cf60e11b815260040160405180910390fd5b6002613745826029615572565b60ff8416911b1b929092179161375a816155c0565b905061367e565b5090949350505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316600114156137df5760405163c5426f8d60e01b8152602060048201526016602482015275185e195b185c8819d85d195dd85e481b9bdd081cd95d60521b6044820152606401610e39565b60006137ea87611835565b90506115dc858585848a876000613d8a565b600061380788611055565b90506116c3858585848b876001613d8a565b600054610100900460ff166138405760405162461bcd60e51b8152600401610e399061589a565b6119d633612fb0565b600054610100900460ff166138705760405162461bcd60e51b8152600401610e399061589a565b60fe80546001600160a01b0319166001600160a01b0392909216919091179055565b604051606082811b6001600160601b03191660208301529060009060340160408051601f198184030181528282528051838301909252601083526f181899199a1a9b1b9c1cb0b131b232b360811b602084015280519093509091906000906138fb906002615a17565b613906906002615860565b6001600160401b0381111561391d5761391d6147b5565b6040519080825280601f01601f191660200182016040528015613947576020820181803683370190505b509050600360fc1b81600081518110613962576139626155aa565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613991576139916155aa565b60200101906001600160f81b031916908160001a90535060005b83811015613acd578260048683815181106139c8576139c86155aa565b016020015182516001600160f81b031990911690911c60f81c9081106139f0576139f06155aa565b01602001516001600160f81b03191682613a0b836002615a17565b613a16906002615860565b81518110613a2657613a266155aa565b60200101906001600160f81b031916908160001a90535082858281518110613a5057613a506155aa565b602091010151815160f89190911c600f16908110613a7057613a706155aa565b01602001516001600160f81b03191682613a8b836002615a17565b613a96906003615860565b81518110613aa657613aa66155aa565b60200101906001600160f81b031916908160001a905350613ac6816155c0565b90506139ab565b5095945050505050565b61ffff8616600090815260ff602052604081208054613af5906154c8565b80601f0160208091040260200160405190810160405280929190818152602001828054613b21906154c8565b8015613b6e5780601f10613b4357610100808354040283529160200191613b6e565b820191906000526020600020905b815481529060010190602001808311613b5157829003601f168201915b50505050509050805160001415613be05760405162461bcd60e51b815260206004820152603060248201527f4c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742060448201526f61207472757374656420736f7572636560801b6064820152608401610e39565b613beb878751614273565b60fe5460405162c5803160e81b81526001600160a01b039091169063c5803100908490613c26908b9086908c908c908c908c90600401615a36565b6000604051808303818588803b158015613c3f57600080fd5b505af1158015613c53573d6000803e3d6000fd5b505050505050505050505050565b613c6a8161352d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060613cac8361327b565b613d075760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610e39565b600080846001600160a01b031684604051613d2291906158e5565b600060405180830381855af49150503d8060008114613d5d576040519150601f19603f3d011682016040523d82523d6000602084013e613d62565b606091505b50915091506125d38282604051806060016040528060278152602001615b53602791396142e2565b613d93846118d9565b61ffff16613db75760405163068a505360e01b815260048101859052602401610e39565b6101c760008583604051602001613dcf929190615a9d565b60408051601f198184030181529181528151602092830120835290820192909252016000205460ff1615613e385760405163c5426f8d60e01b815260206004820152600f60248201526e1cdbdd5c98d948191a5cd8589b1959608a1b6044820152606401610e39565b60008281526101c6602052604090205460ff1615613e6c57604051636e91c2f160e11b815260048101839052602401610e39565b600060ff6000613e7b876118d9565b61ffff1661ffff1681526020019081526020016000208054613e9c906154c8565b80601f0160208091040260200160405190810160405280929190818152602001828054613ec8906154c8565b8015613f155780601f10613eea57610100808354040283529160200191613f15565b820191906000526020600020905b815481529060010190602001808311613ef857829003601f168201915b5050505050905060008430604051602001613f31929190615878565b604051602081830303815290604052905081518151141580613f5257508151155b80613f6b57508180519060200120818051906020012014155b15613fb857604080518781526001600160a01b03871660208201527f1eafb58197ea0dc76b9278ccad47f61a239f00b017d89a19081a89321cce213d910160405180910390a150506115dc565b60008481526101d8602052604090205460ff16613fdb57613fdb898989466142fb565b600073__$a63bfe16b493dd64599c9f3a1d32f7e383$__63e62381b6896140006122d3565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561403d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140619190615755565b6040516001600160e01b031960e085901b168152600481019290925260ff166024820152604401602060405180830381865af41580156140a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140c9919061569d565b905060006140d682614428565b60008781526101c660205260409020805460ff1916600117905590506140fb8a61444d565b6065546001600160a01b0316636407e4326141168385615572565b6066546040516001600160e01b031960e085901b16815261414892918f916001600160a01b0390911690600401615ab1565b6020604051808303816000875af1158015614167573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061418b9190615300565b508015614214576065546101d754606654604051633203f21960e11b81526001600160a01b0393841693636407e432936141cf938793918316921690600401615ab1565b6020604051808303816000875af11580156141ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142129190615300565b505b858a6001600160a01b03168c6001600160a01b03167f6cf712ce908185c8c38a073b7315f79687e7440fb057d9d1ca76a2509a1282ee8c858d8b60405161425e94939291906157b0565b60405180910390a45050505050505050505050565b61ffff8216600090815261010160205260409020548061429257506127105b80821115611d995760405162461bcd60e51b815260206004820181905260248201527f4c7a4170703a207061796c6f61642073697a6520697320746f6f206c617267656044820152606401610e39565b606083156142f157508161154c565b61154c838361453d565b6001600160a01b038316158061430f575080155b156143315782816040516314b2a5c360e31b8152600401610e399291906156b6565b61433e6201518042615572565b6101d154101561435457426101d15560006101d2555b6143616201518042615572565b6001600160a01b03851660009081526101d3602052604090205410156143a2576001600160a01b03841660009081526101d360205260408120428155600101555b6000806143af86856112f8565b9092509050816143d4578060405163c5426f8d60e01b8152600401610e399190614e31565b836101d160010160008282546143ea9190615860565b90915550506001600160a01b03861660009081526101d360205260408120600101805486929061441b908490615860565b9091555050505050505050565b6101cb546000906127109061443d9084615a17565b6144479190615ad0565b92915050565b6101d4546001600160a01b0316158015906144d557506101d4546040516374bf77e960e11b81526001600160a01b039091169063e97eefd29061449490849060040161477e565b602060405180830381865afa1580156144b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144d59190615300565b15611483576101d4546040516306ee3b9f60e31b81526001600160a01b0390911690633771dcf89061450b90849060040161477e565b600060405180830381600087803b15801561452557600080fd5b505af1925050508015614536575060015b6114835750565b81511561454d5781518083602001fd5b8060405162461bcd60e51b8152600401610e399190614e31565b828054614573906154c8565b90600052602060002090601f01602090048101928261459557600085556145db565b82601f106145ae57805160ff19168380011785556145db565b828001600101855582156145db579182015b828111156145db5782518255916020019190600101906145c0565b506145e792915061465f565b5090565b8280546145f7906154c8565b90600052602060002090601f01602090048101928261461957600085556145db565b82601f106146325782800160ff198235161785556145db565b828001600101855582156145db579182015b828111156145db578235825591602001919060010190614644565b5b808211156145e75760008155600101614660565b803561ffff81168114611b7f57600080fd5b60008083601f84011261469857600080fd5b5081356001600160401b038111156146af57600080fd5b6020830191508360208285010111156113b657600080fd5b80356001600160401b0381168114611b7f57600080fd5b600080600080600080608087890312156146f757600080fd5b61470087614674565b955060208701356001600160401b038082111561471c57600080fd5b6147288a838b01614686565b909750955085915061473c60408a016146c7565b9450606089013591508082111561475257600080fd5b5061475f89828a01614686565b979a9699509497509295939492505050565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461148357600080fd5b801515811461148357600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156147f3576147f36147b5565b604052919050565b60006001600160401b03821115614814576148146147b5565b50601f01601f191660200190565b6000614835614830846147fb565b6147cb565b905082815283838301111561484957600080fd5b828260208301376000602084830101529392505050565b600082601f83011261487157600080fd5b61154c83833560208501614822565b60008060008060008060c0878903121561489957600080fd5b6148a287614674565b955060208701356148b281614792565b945060408701356148c281614792565b93506060870135925060808701356148d9816147a7565b915060a08701356001600160401b038111156148f457600080fd5b61490089828a01614860565b9150509295509295509295565b60006020828403121561491f57600080fd5b61154c82614674565b60006020828403121561493a57600080fd5b5035919050565b6000806040838503121561495457600080fd5b61495d83614674565b946020939093013593505050565b60006020828403121561497d57600080fd5b813561154c816147a7565b60008060008060008060008060008060c08b8d0312156149a757600080fd5b8a35995060208b01356001600160401b03808211156149c557600080fd5b6149d18e838f01614686565b909b50995060408d01359150808211156149ea57600080fd5b6149f68e838f01614686565b909950975060608d0135915080821115614a0f57600080fd5b614a1b8e838f01614686565b909750955060808d0135915080821115614a3457600080fd5b50614a418d828e01614686565b9150809450508092505060a08b013590509295989b9194979a5092959850565b60008060008060808587031215614a7757600080fd5b8435614a8281614792565b93506020850135925060408501359150606085013560028110614aa457600080fd5b939692955090935050565b600060a08284031215614ac157600080fd5b60405160a081016001600160401b0381118282101715614ae357614ae36147b5565b8060405250809150823581526020830135602082015260408301356040820152606083013560608201526080830135614b1b816147a7565b6080919091015292915050565b600060a08284031215614b3a57600080fd5b61154c8383614aaf565b60008060408385031215614b5757600080fd5b823561495d81614792565b60005b83811015614b7d578181015183820152602001614b65565b838111156112b15750506000910152565b60008151808452614ba6816020860160208601614b62565b601f01601f19169290920160200192915050565b8215158152604060208201526000614bd56040830184614b8e565b949350505050565b600060208284031215614bef57600080fd5b813561154c81614792565b600080600060408486031215614c0f57600080fd5b614c1884614674565b925060208401356001600160401b03811115614c3357600080fd5b614c3f86828701614686565b9497909650939450505050565b60008060008060808587031215614c6257600080fd5b8435614c6d81614792565b935060208501359250604085013591506060850135614aa481614792565b60008060008060008060006080888a031215614ca657600080fd5b8735965060208801356001600160401b0380821115614cc457600080fd5b614cd08b838c01614686565b909850965060408a0135915080821115614ce957600080fd5b614cf58b838c01614686565b909650945060608a0135915080821115614d0e57600080fd5b50614d1b8a828b01614686565b989b979a50959850939692959293505050565b60008060408385031215614d4157600080fd5b8235614d4c81614792565b915060208301356001600160401b03811115614d6757600080fd5b614d7385828601614860565b9150509250929050565b600060208284031215614d8f57600080fd5b81356001600160401b03811115614da557600080fd5b8201601f81018413614db657600080fd5b614bd584823560208401614822565b61ffff91909116815260200190565b600080600060608486031215614de957600080fd5b614df284614674565b925060208401356001600160401b03811115614e0d57600080fd5b614e1986828701614860565b925050614e28604085016146c7565b90509250925092565b60208152600061154c6020830184614b8e565b600060608284031215614e5657600080fd5b604051606081016001600160401b0381118282101715614e7857614e786147b5565b80604052508091508235815260208301356020820152604083013560408201525092915050565b600060608284031215614eb157600080fd5b61154c8383614e44565b60008060408385031215614ece57600080fd5b614ed783614674565b9150614ee560208401614674565b90509250929050565b600080600060608486031215614f0357600080fd5b614f0c84614674565b9250602084013591506040840135614f2381614792565b809150509250925092565b600080600080600060808688031215614f4657600080fd5b8535614f5181614792565b9450602086013593506040860135925060608601356001600160401b03811115614f7a57600080fd5b614f8688828901614686565b969995985093965092949392505050565b60006001600160401b03821115614fb057614fb06147b5565b5060051b60200190565b600082601f830112614fcb57600080fd5b81356020614fdb61483083614f97565b82815260059290921b84018101918181019086841115614ffa57600080fd5b8286015b8481101561501e578035615011816147a7565b8352918301918301614ffe565b509695505050505050565b6000806040838503121561503c57600080fd5b82356001600160401b038082111561505357600080fd5b818501915085601f83011261506757600080fd5b8135602061507761483083614f97565b82815260059290921b8401810191818101908984111561509657600080fd5b948201945b838610156150b45785358252948201949082019061509b565b965050860135925050808211156150ca57600080fd5b50614d7385828601614fba565b6000806000806000608086880312156150ef57600080fd5b6150f886614674565b945061510660208701614674565b93506040860135925060608601356001600160401b03811115614f7a57600080fd5b60008060006060848603121561513d57600080fd5b61514684614674565b925061515460208501614674565b9150604084013590509250925092565b6000806000806080858703121561517a57600080fd5b61518385614674565b935061519160208601614674565b925060408501356151a181614792565b9396929550929360600135925050565b600080600061012084860312156151c757600080fd5b83356151d281614792565b92506151e18560208601614aaf565b9150614e288560c08601614e44565b61ffff861681526001600160a01b038516602082015260a06040820181905260009061521e90830186614b8e565b841515606084015282810360808401526152388185614b8e565b98975050505050505050565b6000806040838503121561525757600080fd5b505080516020909101519092909150565b8183823760009101908152919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b89815260c0602082015260006152bb60c083018a8c615278565b82810360408401526152ce81898b615278565b905086606084015282810360808401526152e9818688615278565b9150508260a08301529a9950505050505050505050565b60006020828403121561531257600080fd5b815161154c816147a7565b60006020828403121561532f57600080fd5b815161154c81614792565b8754815260018089015460208301526002890154604083015260038901546060830152600489015460ff1615156080830152875460a083015287015460c08201526101a08101865460e083015260018701546101008301526153a0610120830187614771565b8415156101408301526153b7610160830185614771565b8261018083015298975050505050505050565b60006153d8614830846147fb565b90508281528383830111156153ec57600080fd5b61154c836020830184614b62565b6000806040838503121561540d57600080fd5b8251615418816147a7565b60208401519092506001600160401b0381111561543457600080fd5b8301601f8101851361544557600080fd5b614d73858251602084016153ca565b6020808252602c90820152600080516020615af383398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c90820152600080516020615af383398151915260408201526b6163746976652070726f787960a01b606082015260800190565b600181811c908216806154dc57607f821691505b602082108114156118d357634e487b7160e01b600052602260045260246000fd5b61ffff841681526040602082015260006125d3604083018486615278565b868152608060208201526000615535608083018789615278565b8281036040840152615548818688615278565b915050826060830152979650505050505050565b634e487b7160e01b600052601160045260246000fd5b6000828210156155845761558461555c565b500390565b8284823760609190911b6001600160601b0319169101908152601401919050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156155d4576155d461555c565b5060010190565b600061ffff808816835280871660208401525084604083015260806060830152615609608083018486615278565b979650505050505050565b61ffff86168152608060208201526000615632608083018688615278565b6001600160401b0394909416604083015250606001529392505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6000602082840312156156af57600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b6000602082840312156156e157600080fd5b81516001600160401b038111156156f757600080fd5b8201601f8101841361570857600080fd5b614bd5848251602084016153ca565b61ffff851681526080602082015260006157346080830186614b8e565b6001600160401b038516604084015282810360608401526156098185614b8e565b60006020828403121561576757600080fd5b815160ff8116811461154c57600080fd5b634e487b7160e01b600052602160045260246000fd5b600281106157ac57634e487b7160e01b600052602160045260246000fd5b9052565b8481526020810184905260408101839052608081016125d3606083018461578e565b600080600080608085870312156157e857600080fd5b84356157f381614792565b9350602085013561580381614792565b93969395505050506040820135916060013590565b6000806000806080858703121561582e57600080fd5b845161583981614792565b602086015190945061584a81614792565b6040860151606090960151949790965092505050565b600082198211156158735761587361555c565b500190565b6001600160601b0319606093841b811682529190921b16601482015260280190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b600082516158f7818460208701614b62565b9190910192915050565b61ffff8616815260a06020820152600061591e60a0830187614b8e565b6001600160401b0386166040840152828103606084015261593f8186614b8e565b905082810360808401526152388185614b8e565b600060018060a01b03808816835260a0602084015261597560a0840188614b8e565b83810360408501526159878188614b8e565b9050838103606085015261599b8187614b8e565b9250508084166080840152509695505050505050565b6060815260006159c46060830186614b8e565b82810360208401526159d68186614b8e565b905082810360408401526159ea8185614b8e565b9695505050505050565b600060ff821660ff841680821015615a0e57615a0e61555c565b90039392505050565b6000816000190483118215151615615a3157615a3161555c565b500290565b61ffff8716815260c060208201526000615a5360c0830188614b8e565b8281036040840152615a658188614b8e565b6001600160a01b0387811660608601528616608085015283810360a08501529050615a908185614b8e565b9998505050505050505050565b8281526040810161154c602083018461578e565b9283526001600160a01b03918216602084015216604082015260600190565b600082615aed57634e487b7160e01b600052601260045260246000fd5b50049056fe46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220074469714023f1f6a6733f055ecc495de1be7fc1b548740e175f36f3a0764c4864736f6c634300080a0033",
  "linkReferences": {
    "contracts/messagePassingBridge/BridgeHelperLibrary.sol": {
      "BridgeHelperLibrary": [
        {
          "length": 20,
          "start": 5327
        },
        {
          "length": 20,
          "start": 11179
        },
        {
          "length": 20,
          "start": 16769
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "contracts/messagePassingBridge/BridgeHelperLibrary.sol": {
      "BridgeHelperLibrary": [
        {
          "length": 20,
          "start": 4909
        },
        {
          "length": 20,
          "start": 10761
        },
        {
          "length": 20,
          "start": 16351
        }
      ]
    }
  }
}
