Contract Overview
Balance:
0 AVAX
More Info
Tag:
Not Available. Update?

Contract Creator:

Token Tracker:
Contract Source Code Verified (Partial Match)
Contract Name:
AI_MARKET

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Created At:
Sat, 17 Feb 2024 15:08:30 GMT
AutomationBase.sol
@chainlink
contracts
src
v0.8
automation
AutomationBase.sol


Contract ABI
[
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "_oracle",
        "type": "address"
      },
      {
        "internalType": "contract IUnlockV12",
        "name": "_unlockContract",
        "type": "address"
      },
      {
        "internalType": "bytes32",
        "name": "_donID",
        "type": "bytes32"
      },
      {
        "internalType": "uint64",
        "name": "_subscriptionId",
        "type": "uint64"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [],
    "name": "EmptySource",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "NoInlineSecrets",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "OnlyRouterCanFulfill",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "Approval",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "previousOwner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "OwnershipTransferred",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "bytes32",
        "name": "id",
        "type": "bytes32"
      }
    ],
    "name": "RequestFulfilled",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "bytes32",
        "name": "id",
        "type": "bytes32"
      }
    ],
    "name": "RequestSent",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "requestId",
        "type": "bytes32"
      },
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "sourceID",
        "type": "bytes32"
      },
      {
        "indexed": false,
        "internalType": "uint32[]",
        "name": "topkAgents",
        "type": "uint32[]"
      },
      {
        "indexed": false,
        "internalType": "address[]",
        "name": "topkUsers",
        "type": "address[]"
      }
    ],
    "name": "RoundRewardsDistributed",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "requestId",
        "type": "bytes32"
      },
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "sourceID",
        "type": "bytes32"
      },
      {
        "indexed": false,
        "internalType": "bytes",
        "name": "response",
        "type": "bytes"
      }
    ],
    "name": "RoundWinners",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "Transfer",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "string",
        "name": "agentName",
        "type": "string"
      },
      {
        "indexed": false,
        "internalType": "string",
        "name": "baseTokenURI",
        "type": "string"
      },
      {
        "indexed": false,
        "internalType": "uint32",
        "name": "agentID",
        "type": "uint32"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "creator",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "unlockSubscriptionContract",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "keyPrice",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "basisPoint",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "string",
        "name": "rewardCategory",
        "type": "string"
      },
      {
        "indexed": false,
        "internalType": "string",
        "name": "actualCategory",
        "type": "string"
      },
      {
        "indexed": false,
        "internalType": "bool",
        "name": "isOpenForContributions",
        "type": "bool"
      }
    ],
    "name": "agentRegistered",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint32",
        "name": "agentID",
        "type": "uint32"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "string",
        "name": "threadID",
        "type": "string"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "agentCreator",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "subscriber",
        "type": "address"
      }
    ],
    "name": "agentSubscriptionPurchased",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint32",
        "name": "agentID",
        "type": "uint32"
      },
      {
        "indexed": false,
        "internalType": "string",
        "name": "agentVersionName",
        "type": "string"
      },
      {
        "indexed": false,
        "internalType": "uint32",
        "name": "agentVersionID",
        "type": "uint32"
      },
      {
        "indexed": false,
        "internalType": "address",
        "name": "creator",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "string",
        "name": "agentMetadataCID",
        "type": "string"
      }
    ],
    "name": "agentVersionRegistered",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "string",
        "name": "sourceName",
        "type": "string"
      },
      {
        "indexed": false,
        "internalType": "string",
        "name": "sourceCode",
        "type": "string"
      },
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "sourceID",
        "type": "bytes32"
      },
      {
        "indexed": false,
        "internalType": "uint256[]",
        "name": "rewardDistributions",
        "type": "uint256[]"
      }
    ],
    "name": "rewardMechanismRegistered",
    "type": "event"
  },
  {
    "inputs": [
      {
        "internalType": "string",
        "name": "_sourceName",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "_sourceCode",
        "type": "string"
      },
      {
        "internalType": "address",
        "name": "_functionForwader",
        "type": "address"
      },
      {
        "internalType": "uint256[]",
        "name": "_rewardDistributions",
        "type": "uint256[]"
      }
    ],
    "name": "addRewardMechanism",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }
    ],
    "name": "agentVersions",
    "outputs": [
      {
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint32",
        "name": "",
        "type": "uint32"
      }
    ],
    "name": "agents",
    "outputs": [
      {
        "internalType": "address",
        "name": "creator",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "lockAddress",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "isOpenForContributions",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      }
    ],
    "name": "allowance",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "account",
        "type": "address"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "uint256",
            "name": "index",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "timestamp",
            "type": "uint256"
          },
          {
            "internalType": "bytes32",
            "name": "txHash",
            "type": "bytes32"
          },
          {
            "internalType": "uint256",
            "name": "blockNumber",
            "type": "uint256"
          },
          {
            "internalType": "bytes32",
            "name": "blockHash",
            "type": "bytes32"
          },
          {
            "internalType": "address",
            "name": "source",
            "type": "address"
          },
          {
            "internalType": "bytes32[]",
            "name": "topics",
            "type": "bytes32[]"
          },
          {
            "internalType": "bytes",
            "name": "data",
            "type": "bytes"
          }
        ],
        "internalType": "struct ILogAutomation.Log",
        "name": "log",
        "type": "tuple"
      },
      {
        "internalType": "bytes",
        "name": "",
        "type": "bytes"
      }
    ],
    "name": "checkLog",
    "outputs": [
      {
        "internalType": "bool",
        "name": "upkeepNeeded",
        "type": "bool"
      },
      {
        "internalType": "bytes",
        "name": "performData",
        "type": "bytes"
      }
    ],
    "stateMutability": "pure",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "decimals",
    "outputs": [
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "subtractedValue",
        "type": "uint256"
      }
    ],
    "name": "decreaseAllowance",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "_value",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "_tokenId",
        "type": "uint256"
      },
      {
        "internalType": "uint32",
        "name": "_agentID",
        "type": "uint32"
      }
    ],
    "name": "extendSubscription",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "name": "functionData",
    "outputs": [
      {
        "internalType": "address",
        "name": "functionForwarder",
        "type": "address"
      },
      {
        "internalType": "uint8",
        "name": "numberOfWinners",
        "type": "uint8"
      },
      {
        "internalType": "bool",
        "name": "usersOrAgents",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "requestId",
        "type": "bytes32"
      },
      {
        "internalType": "bytes",
        "name": "response",
        "type": "bytes"
      },
      {
        "internalType": "bytes",
        "name": "err",
        "type": "bytes"
      }
    ],
    "name": "handleOracleFulfillment",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "spender",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "addedValue",
        "type": "uint256"
      }
    ],
    "name": "increaseAllowance",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      },
      {
        "internalType": "bytes",
        "name": "",
        "type": "bytes"
      }
    ],
    "name": "keyPurchasePrice",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "minKeyPrice",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      },
      {
        "internalType": "bytes",
        "name": "",
        "type": "bytes"
      },
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "name": "onKeyPurchase",
    "outputs": [],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "owner",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes",
        "name": "performData",
        "type": "bytes"
      }
    ],
    "name": "performUpkeep",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint32",
        "name": "_agentID",
        "type": "uint32"
      },
      {
        "internalType": "uint256",
        "name": "_value",
        "type": "uint256"
      },
      {
        "internalType": "string",
        "name": "_threadID",
        "type": "string"
      }
    ],
    "name": "purchaseSubscription",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "components": [
          {
            "internalType": "string",
            "name": "agentName",
            "type": "string"
          },
          {
            "internalType": "uint32",
            "name": "agentID",
            "type": "uint32"
          },
          {
            "internalType": "uint256",
            "name": "subscriptionExpirationDuration",
            "type": "uint256"
          },
          {
            "internalType": "address",
            "name": "tokenAddress",
            "type": "address"
          },
          {
            "internalType": "uint256",
            "name": "keyPrice",
            "type": "uint256"
          },
          {
            "internalType": "uint256",
            "name": "basisPoint",
            "type": "uint256"
          },
          {
            "internalType": "string",
            "name": "lockName",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "lockSymbol",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "baseTokenURI",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "rewardCategory",
            "type": "string"
          },
          {
            "internalType": "string",
            "name": "actualCategory",
            "type": "string"
          },
          {
            "internalType": "bool",
            "name": "isOpenForContributions",
            "type": "bool"
          }
        ],
        "internalType": "struct AI_MARKET.AgentInitConfig",
        "name": "agentConfig",
        "type": "tuple"
      }
    ],
    "name": "registerAgent",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint32",
        "name": "_agentID",
        "type": "uint32"
      },
      {
        "internalType": "uint32",
        "name": "_agentVersionID",
        "type": "uint32"
      },
      {
        "internalType": "string",
        "name": "_agentVersionName",
        "type": "string"
      },
      {
        "internalType": "string",
        "name": "_agentMetadataCID",
        "type": "string"
      }
    ],
    "name": "registerAgentVersion",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "renounceOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "name": "requestData",
    "outputs": [
      {
        "internalType": "bool",
        "name": "executed",
        "type": "bool"
      },
      {
        "internalType": "bytes32",
        "name": "sourceID",
        "type": "bytes32"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      },
      {
        "internalType": "uint8",
        "name": "",
        "type": "uint8"
      }
    ],
    "name": "rewardDistributions",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "_requestID",
        "type": "bytes32"
      }
    ],
    "name": "rewardsDistribution",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "name": "roundWinners",
    "outputs": [
      {
        "internalType": "bytes",
        "name": "",
        "type": "bytes"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "sourceID",
        "type": "bytes32"
      }
    ],
    "name": "sendRequest",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes32",
        "name": "",
        "type": "bytes32"
      }
    ],
    "name": "sources",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "totalSupply",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "transfer",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "transferOwnership",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "tokenAddress",
        "type": "address"
      }
    ],
    "name": "withdraw",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint32",
        "name": "_agentID",
        "type": "uint32"
      }
    ],
    "name": "withdraw",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "stateMutability": "payable",
    "type": "receive"
  }
]


Contract Creation Code
60a034620003fb57601f906001600160401b0390601f1962004b9538819003858101831684019190858311858410176200040057808592608094604052833981010312620003fb5781516001600160a01b03938482169291839003620003fb576020908185015196868816809803620003fb576060604087015196015194828616809603620003fb576200009262000416565b936009855268105257d3505492d15560ba1b81860152620000b262000416565b91600383526241494d60e81b82840152608052600090815460018060a01b03199a338c83161784553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08480a3855196858811620003e7576004978854976001988981811c91168015620003dc575b85821014620003c95790818884931162000376575b5084908883116001146200031557869262000309575b5050600019600383901b1c191690881b1788555b8351958611620002f6576005978854908882811c92168015620002eb575b84831014620002d8575085811162000292575b50819486116001146200022c5750509183949184939462000220575b50501b916000199060031b1c19161790555b61249f60a51b63ffffffff60a01b1960085416176008556000196009556228de80600a5560018060401b03196006541617600655600b55601354161760135560405161475e90816200043782396080518181816106170152612f170152f35b015192503880620001af565b8783528183209493928692918316915b888383106200027757505050106200025d575b505050811b019055620001c1565b015160001960f88460031b161c191690553880806200024f565b8587015188559096019594850194879350908101906200023c565b888452828420868089018b1c820192858a10620002ce575b018a1c019088905b828110620002c257505062000193565b858155018890620002b2565b92508192620002aa565b634e487b7160e01b855260229052602484fd5b91607f169162000180565b634e487b7160e01b835260418852602483fd5b0151905038806200014e565b90848b9416918c885286882092885b888282106200035f575050841162000345575b505050811b01885562000162565b015160001960f88460031b161c1916905538808062000337565b8385015186558e9790950194938401930162000324565b9091508a86528486208880850160051c820192878610620003bf575b918c91869594930160051c01915b828110620003b057505062000138565b8881558594508c9101620003a0565b9250819262000392565b634e487b7160e01b865260228b52602486fd5b90607f169062000123565b634e487b7160e01b83526041600452602483fd5b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620004005760405256fe6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c806306fdde031461024b57806307e3290414610246578063095ea7b3146102415780630c92ecf71461023c5780630ca761751461023757806318160ddd14610232578063221c1fd11461022d57806323b872dd14610228578063313ce567146102235780633661346b1461021e578063395093511461021957806340691db4146102145780634585e33b1461020f57806351cff8d91461020a578063584992de146102055780635e895f29146102005780635f1d78ae146101fb57806362e16bd3146101f657806370a08231146101f1578063715018a6146101ec57806381bb4250146101e75780638c3d86b4146101e25780638da5cb5b146101dd57806395d89b41146101d85780639d58754f146101d35780639f1ea81b146101ce578063a457c2d7146101c9578063a9059cbb146101c4578063a9cf7519146101bf578063aa9224cd146101ba578063ba30621e146101b5578063dd62ed3e146101b0578063e9239117146101ab578063f2fde38b146101a65763fe5f49ac0361000e57611fcd565b611f06565b611b7d565b611b1a565b611abb565b611959565b611716565b6116ec565b61163a565b611604565b6115b7565b611510565b6114e7565b6113ff565b61108e565b611033565b610ff6565b610e52565b610e01565b610cad565b610c70565b610b72565b610b2a565b610a67565b6109f3565b6109b9565b61099d565b6108ca565b61080b565b6107c0565b6105c8565b6104fd565b6103c6565b610399565b6102b4565b600091031261025b57565b600080fd5b919082519283825260005b84811061028c575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161026b565b9060206102b1928181520190610260565b90565b3461025b576000806003193601126103965760405190806004546102d781610d14565b8085529160019180831690811561036c5750600114610311575b61030d8561030181870382610444565b604051918291826102a0565b0390f35b9250600483527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8284106103545750505081016020016103018261030d6102f1565b80546020858701810191909152909301928101610339565b86955061030d9693506020925061030194915060ff191682840152151560051b82010192936102f1565b80fd5b3461025b57602036600319011261025b57610019600435613e17565b6001600160a01b0381160361025b57565b3461025b57604036600319011261025b576103f06004356103e6816103b5565b6024359033612284565b602060405160018152f35b634e487b7160e01b600052604160045260246000fd5b6001600160401b03811161042457604052565b6103fb565b604081019081106001600160401b0382111761042457604052565b90601f801991011681019081106001600160401b0382111761042457604052565b60405190606082018281106001600160401b0382111761042457604052565b6001600160401b03811161042457601f01601f191660200190565b81601f8201121561025b578035906104b682610484565b926104c46040519485610444565b8284526020838301011161025b57816000926020809301838601378301015290565b6001600160401b0381116104245760051b60200190565b3461025b57608036600319011261025b576001600160401b0360043581811161025b5761052e90369060040161049f565b9060243581811161025b5761054790369060040161049f565b60443590610554826103b5565b60643592831161025b573660238401121561025b57826004013593610578856104e6565b936105866040519586610444565b85855260209560248787019160051b8301019136831161025b57602401905b8282106105b9575050506100199450612ba0565b813581529087019087016105a5565b3461025b57606036600319011261025b576001600160401b0360043560243582811161025b576105fc90369060040161049f565b60443583811161025b5761061490369060040161049f565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036107ae57600092828452602090600e825260408520918351918211610424576106748261066e8554610d14565b85612d50565b80601f831160011461071f575090807f873142285a75d241914f10e28387168bc800ee523453237b118e63b0fba46f379493928791610714575b508160011b916000199060031b1c19161790555b60016106d8846000526012602052604060002090565b01546106ea6040519283928684613d5b565b0390a17f85e1543bf2f84fe80c6badbce3648c8539ad1df4d2b3d822938ca0538be727e68280a280f35b9050830151386106ae565b90601f19831661073485600052602060002090565b9288905b8282106107965750509183917f873142285a75d241914f10e28387168bc800ee523453237b118e63b0fba46f379695946001941061077d575b5050811b0190556106c2565b85015160001960f88460031b161c191690553880610771565b80600185968294968b01518155019501930190610738565b60405163c6829f8360e01b8152600490fd5b3461025b57600036600319011261025b576020600354604051908152f35b9181601f8401121561025b578235916001600160401b03831161025b576020838186019501011161025b57565b3461025b57608036600319011261025b576108276004356103b5565b6108326024356103b5565b61083d6044356103b5565b6064356001600160401b03811161025b5761085c9036906004016107de565b50506040516310e5697360e01b8152602081600481335afa80156108c55761030d91600091610897575b506040519081529081906020820190565b6108b8915060203d81116108be575b6108b08183610444565b810190612780565b38610886565b503d6108a6565b6124ab565b3461025b57606036600319011261025b576004356108e7816103b5565b6024356108f3816103b5565b6001600160a01b03821660009081526002602090815260408083203384529091529020604435919054926001840161093c575b610930935061216a565b60405160018152602090f35b828410610958576109538361093095033383612284565b610926565b60405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606490fd5b3461025b57600036600319011261025b57602060405160128152f35b3461025b57602036600319011261025b576004356000526012602052604080600020600160ff825416910154825191151582526020820152f35b3461025b57604036600319011261025b57600435610a10816103b5565b3360009081526002602090815260408083206001600160a01b03851684529091529020546024358101809111610a4a576103f09133612284565b61206a565b9060406102b192600181528160208201520190610260565b3461025b5760031960403682011261025b576001600160401b039060043582811161025b576101008136039283011261025b5760243583811161025b57610ab290369060040161049f565b5060c4810135916022190182121561025b570190600482013590811161025b578060051b3603602483011361025b5760011015610b25576044610b1961030d92610b0b6040519384920135602083019190602083019252565b03601f198101835282610444565b60405191829182610a4f565b612749565b3461025b57602036600319011261025b576004356001600160401b03811161025b57610b5c60209136906004016107de565b908092918101031261025b576100199035613e17565b3461025b5760208060031936011261025b57600435610b90816103b5565b610b98612012565b6001600160a01b031680610bb25750506100194733612a99565b6040516370a0823160e01b81523060048201528281602481855afa9081156108c5576000928492610c0f928591610c45575b5060405163a9059cbb60e01b8152336004820152602481019190915293849283919082906044820190565b03925af180156108c557610c1f57005b8161001992903d10610c3e575b610c368183610444565b810190612924565b503d610c2c565b610c5c9150843d86116108be576108b08183610444565b38610be4565b63ffffffff81160361025b57565b3461025b57602036600319011261025b576020600435610c8f81610c62565b63ffffffff809116600052600d825260406000205416604051908152f35b3461025b5760e036600319011261025b57602435610cca816103b5565b610cd56044356103b5565b610ce06064356103b5565b6084356001600160401b03811161025b57610cff9036906004016107de565b5050306001600160a01b039091160361025b57005b90600182811c92168015610d44575b6020831014610d2e57565b634e487b7160e01b600052602260045260246000fd5b91607f1691610d23565b9060009291805491610d5f83610d14565b918282526001938481169081600014610dc15750600114610d81575b50505050565b90919394506000526020928360002092846000945b838610610dad575050505001019038808080610d7b565b805485870183015294019385908201610d96565b9294505050602093945060ff191683830152151560051b01019038808080610d7b565b90610dff610df89260405193848092610d4e565b0383610444565b565b3461025b57602036600319011261025b57600435600052600f60205261030d610e37610e3e604060002060405192838092610d4e565b0382610444565b604051918291602083526020830190610260565b3461025b57608036600319011261025b57600435610e6f81610c62565b60243590610e7c82610c62565b6001600160401b039160443583811161025b57610e9d90369060040161049f565b9060643593841161025b577f57bff0a79faaabef73281bdf7021d3758548f9c97bfc303a2be1a4c6406a3520610fe192610ede61001996369060040161049f565b9063ffffffff8616600052600c602052610f0560ff60016040600020015460a01c166125e2565b610f4060018060a01b03610f39610f2c8763ffffffff16600052600c602052604060002090565b546001600160a01b031690565b16156123b9565b610fb5610f706001610f628963ffffffff16600052600c602052604060002090565b01546001600160a01b031690565b610f8f610f7b610465565b338152916001600160a01b03166020830152565b60006040820152610fb08663ffffffff16600052600c602052604060002090565b612505565b610fc86040519283928633918a8661263a565b0390a163ffffffff16600052600d602052604060002090565b9063ffffffff1663ffffffff19825416179055565b3461025b57602036600319011261025b57600435611013816103b5565b60018060a01b031660005260016020526020604060002054604051908152f35b3461025b576000806003193601126103965761104d612012565b80546001600160a01b03198116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b606036600319011261025b5760048035906110a882610c62565b6044356001600160401b03811161025b576110c6903690830161049f565b9060018060a01b03926110f8846110f0610f2c8463ffffffff16600052600c602052604060002090565b161515612684565b6111006126c8565b936111096126c8565b6111116126c8565b6111196126c8565b611121612714565b9561112a6126c8565b508461114b6001610f628963ffffffff16600052600c602052604060002090565b61117c611178600161116d8b63ffffffff16600052600c602052604060002090565b015460a01c60ff1690565b1590565b6113d1575b60243561118d8561275f565b526111aa3361119b8861275f565b6001600160a01b039091169052565b169260409788516313aedd4b60e31b8152602097888286818a5afa9182156108c5576000926113a2575b508a516310e5697360e01b815291898387818b5afa9283156108c557600093611383575b501690811561131c578a516323b872dd60e01b81523381870190815230602082015260408101929092529493929189918691908290600090829060600103925af19182156108c557600098899561126a946112fe575b50508a51633381899760e01b81529c8d98899788968701612879565b03925af19081156108c5576112ac6112d8927fb13fba94df0630efb53e320abed1d27b8117a85ac9090a9e5cc3edd534b22bd1966000916112dd575b5061275f565b51926112cb610f2c8363ffffffff16600052600c602052604060002090565b9051948594339386612939565b0390a1005b6112f8913d8091833e6112f08183610444565b81019061278f565b386112a6565b8161131492903d10610c3e57610c368183610444565b50388061124e565b5050600096506113409189519b8c9788968796633381899760e01b88528701612879565b039134905af19081156108c5576112ac6112d8927fb13fba94df0630efb53e320abed1d27b8117a85ac9090a9e5cc3edd534b22bd1966000916112dd575061275f565b61139b9193508a3d8c116108be576108b08183610444565b91386111f8565b6113c3919250893d8b116113ca575b6113bb8183610444565b810190612438565b90386111d4565b503d6113b1565b6113fa6113f1610f2c8a63ffffffff16600052600c602052604060002090565b61119b8d61275f565b611181565b3461025b57602036600319011261025b576004356000818152601160205260409020546001600160a01b0316330361025b5760405160e081018181106001600160401b03821117610424576114d36114b16001936114e39360405260008152600060208201526000604082015260608082015260606080820152606060a0820152606060c08201526114ac6114a66114a188600052600f602052604060002090565b610de4565b826132aa565b6130d7565b6006546001600160401b031660085460a01c63ffffffff1690600b5492612ebf565b6000526012602052604060002090565b0155005b3461025b57600036600319011261025b576000546040516001600160a01b039091168152602090f35b3461025b5760008060031936011261039657604051908060055461153381610d14565b8085529160019180831690811561036c575060011461155c5761030d8561030181870382610444565b9250600583527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b82841061159f5750505081016020016103018261030d6102f1565b80546020858701810191909152909301928101611584565b3461025b57602036600319011261025b576004356000526011602052606060406000205460ff6040519160018060a01b0381168352818160a01c16602084015260a81c1615156040820152f35b3461025b57602036600319011261025b57600435600052600e60205261030d610e37610e3e604060002060405192838092610d4e565b3461025b57604036600319011261025b57600435611657816103b5565b602435903360005260026020526116848160406000209060018060a01b0316600052602052604060002090565b54918083106116995761093092039033612284565b60405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608490fd5b3461025b57604036600319011261025b576103f060043561170c816103b5565b602435903361216a565b606036600319011261025b57600480359060243560443561173681610c62565b60018060a01b039361175f856110f0610f2c8563ffffffff16600052600c602052604060002090565b6000946117936117876117876001610f628763ffffffff16600052600c602052604060002090565b6001600160a01b031690565b92604051916313aedd4b60e31b835260209283818981895afa9081156108c557899161193c575b506040516310e5697360e01b81529284848a818a5afa9384156108c5578a9461191d575b50611801611178600161116d8463ffffffff16600052600c602052604060002090565b6118f6575b501680156118b957604080516323b872dd60e01b81523389820190815230602082015291820193909352839183918290600090829060600103925af180156108c55761189b575b5050813b1561025b57600080946118786040519788968795869463d813cc1960e01b8652850161297b565b03925af180156108c55761188857005b8061189561001992610411565b80610250565b816118b192903d10610c3e57610c368183610444565b50388061184d565b505050813b1561025b576000936118e46040519687958694859463d813cc1960e01b8652850161297b565b039134905af180156108c55761188857005b611916919950610f2c9063ffffffff16600052600c602052604060002090565b9738611806565b611935919450853d87116108be576108b08183610444565b92386117de565b6119539150843d86116113ca576113bb8183610444565b386117ba565b3461025b5760208060031936011261025b5761199861199360043561197d81610c62565b63ffffffff16600052600c602052604060002090565b6129dd565b818101516001600160a01b03908116929083316119b7600a8204612a24565b93604051956313aedd4b60e31b87528487600481845afa9687156108c557600097611a9c575b50803b1561025b57604051636ce5768960e11b81526001600160a01b038816600482015230602482015260448101939093526000908390606490829084905af19081156108c557611a3f9261178792611a89575b50516001600160a01b031690565b931680611a5157505061001991612a99565b60405163a9059cbb60e01b81526001600160a01b03909416600485015260248401929092529190829082908160008160448101610c0f565b80611895611a9692610411565b38611a31565b611ab4919750853d87116113ca576113bb8183610444565b95386119dd565b3461025b57602036600319011261025b5763ffffffff600435611add81610c62565b16600052600c6020526060604060002060ff60018060a01b03600181845416930154906040519384528116602084015260a01c1615156040820152f35b3461025b57604036600319011261025b576020611b74600435611b3c816103b5565b60243590611b49826103b5565b60018060a01b03166000526002835260406000209060018060a01b0316600052602052604060002090565b54604051908152f35b3461025b5760031960203682011261025b57600480356001600160401b03811161025b5761018081830193823603011261025b5760248101906001600160a01b0390611bd282610f39610f2c61197d876123af565b601354611be7906001600160a01b0316611787565b94600a5490611bf8606484016123fc565b91608484013596879560206009549560c4880194611c36611c198789612406565b9060409a8b519d8e96879663216c908360e11b88528b880161246e565b03816000809e5af19687156108c5578a97611ee2575b50611c5a9087169284612406565b95908a611c6a60e4840187612406565b989092610104850199611c7d8b8a612406565b90893b15611ede57611ca2928c51978896879663d1b8759b60e01b88528c88016124b7565b038183885af180156108c557611ecb575b5060a48101359182611e73575b833b15611e6f5785516374cac47d60e01b81523082820190815260006020820181905260408201819052606082018190526080820181905260a0820181905260c08201529091908c908390819060e001038183895af19182156108c5578c92611e5c575b50600a549460095495813b15611e5857838793611d658b51998a968795869463282478df60e01b865285016040919493926060820195825260208201520152565b03925af19182156108c5577f60959c5b991214a9f145caa42f648174a46bd41e2f7f92d206d2b2d07e8e26f599611e0998611e3f98611e3297611df08a610fb08f61197d90611dc79c6101449c611e45575b50611deb6101648c019d8e6124fb565b611dcf610465565b338152956001600160a01b038b16602088015286019015159052565b6123af565b611e11611e2a611e008380612406565b9e909484612406565b92909f6123af565b92611e206101248a0182612406565b9a90990190612406565b9a90996124fb565b9a519d8e9d33948f612561565b0390a180f35b80611895611e5292610411565b38611db7565b8380fd5b80611895611e6992610411565b38611d24565b8a80fd5b833b15611e6f57855163debe2b0d60e01b81528b8180611ea187868301919060206040840193600081520152565b038183895af180156108c557611eb8575b50611cc0565b80611895611ec592610411565b38611eb2565b80611895611ed892610411565b38611cb3565b8580fd5b611c5a919750611eff9060203d81116113ca576113bb8183610444565b9690611c4c565b3461025b57602036600319011261025b57600435611f23816103b5565b611f2b612012565b6001600160a01b039081168015611f7957600080546001600160a01b03198116831782559092167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b3461025b57604036600319011261025b5760243560ff8116810361025b57611b746020916004356000526010835260406000209060ff16600052602052604060002090565b6000546001600160a01b0316330361202657565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b634e487b7160e01b600052601160045260246000fd5b9060208201809211610a4a57565b9060028201809211610a4a57565b9060018201809211610a4a57565b91908201809211610a4a57565b156120be57565b60405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608490fd5b1561211657565b60405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608490fd5b916001600160a01b03808416929091831561223157612216827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9461222c9416966121b68815156120b7565b6001600160a01b03811660009081526001602052604090206121fb908590546121e18282101561210f565b039160018060a01b03166000526001602052604060002090565b556001600160a01b0316600090815260016020526040902090565b8054820190556040519081529081906020820190565b0390a3565b60405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608490fd5b6001600160a01b03808216929190831561235e57821693841561230e57806122fd7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925946122e661222c9560018060a01b03166000526002602052604060002090565b9060018060a01b0316600052602052604060002090565b556040519081529081906020820190565b60405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b356102b181610c62565b156123c057565b60405162461bcd60e51b81526020600482015260146024820152736167656e7420616c72656164792065786973747360601b6044820152606490fd5b356102b1816103b5565b903590601e198136030182121561025b57018035906001600160401b03821161025b5760200191813603831361025b57565b9081602091031261025b57516102b1816103b5565b908060209392818452848401376000828201840152601f01601f1916010190565b969590936124a6936000969360a0968a52600180881b031660208a01526040890152606088015260c0608088015260c087019161244d565b930152565b6040513d6000823e3d90fd5b949290936124d56102b197956124e39460608952606089019161244d565b91868303602088015261244d565b92604081850391015261244d565b8015150361025b57565b356102b1816124f1565b815181546001600160a01b03199081166001600160a01b039283161783556020840151600190930180549390921692169190911781559061255d9060400151825460ff60a01b191690151560a01b60ff60a01b161790565b9055565b9d9e9d604063ffffffff829f9b966101209f9d989a94966125da9f9a96916124d56125cb9e9961259994610140808a5289019161244d565b99169101526001600160a01b0391821660608e01521660808c015260a08b015260c08a015288830360e08a015261244d565b9185830361010087015261244d565b931515910152565b156125e957565b60405162461bcd60e51b815260206004820152602360248201527f6167656e74206973206e6f74206f70656e20666f7220636f6e747269627574696044820152626f6e7360e81b6064820152608490fd5b91906126616102b19694959263ffffffff809316855260a0602086015260a0850190610260565b941660408301526001600160a01b03166060820152808303608090910152610260565b1561268b57565b60405162461bcd60e51b81526020600482015260156024820152746167656e7420646f6573206e6f742065786973747360581b6044820152606490fd5b604051906126d582610429565b6001825260203681840137565b906126ec826104e6565b6126f96040519182610444565b828152809261270a601f19916104e6565b0190602036910137565b60405161272081610429565b600181528060005b60208082101561274357906060602092828501015201612728565b50505090565b634e487b7160e01b600052603260045260246000fd5b805115610b255760200190565b8051821015610b255760209160051b010190565b9081602091031261025b575190565b602090818184031261025b578051906001600160401b03821161025b57019180601f8401121561025b5782516127c4816104e6565b936127d26040519586610444565b818552838086019260051b82010192831161025b578301905b8282106127f9575050505090565b815181529083019083016127eb565b90815180825260208080930193019160005b828110612828575050505090565b83518552938101939281019260010161281a565b90815180825260208080930193019160005b82811061285c575050505090565b83516001600160a01b03168552938101939281019260010161284e565b93906128c392936128a76128986128b59360a0895260a0890190612808565b602096888203888a015261283c565b90868203604088015261283c565b90848203606086015261283c565b9160808184039101528251908183528083019281808460051b8301019501936000915b8483106128f65750505050505090565b9091929394958480612914600193601f198682030187528a51610260565b98019301930191949392906128e6565b9081602091031261025b57516102b1816124f1565b93919260809363ffffffff61296493989798168652602086015260a0604086015260a0850190610260565b6001600160a01b0391821660608501529416910152565b9193929082526020938483015260018060a01b03166040820152608080606083015260605190818184015260005b8281106129cb57505060a09293506000838284010152601f8019910116010190565b8181015184820160a0015285016129a9565b90604051606081018181106001600160401b0382111761042457604052604060ff82946001808060a01b03918281541686520154908116602085015260a01c161515910152565b90600782029180830460071490151715610a4a57565b908160011b9180830460021490151715610a4a57565b90670de0b6b3a764000091828102928184041490151715610a4a57565b908160021b9180830460041490151715610a4a57565b90601482029180830460141490151715610a4a57565b814710612b54576000918291829182916001600160a01b03165af13d15612b4f573d612ac481610484565b90612ad26040519283610444565b8152600060203d92013e5b15612ae457565b60405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608490fd5b612add565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606490fd5b1561025b57565b92909193612bac612012565b612bb584614149565b92612beb604051612bc581610429565b601481527375736572735265776172644d656368616e69736d60601b6020820152614149565b8414612d21575b612c6d612c03849796975160ff1690565b95612c3a87612c1c886000526011602052604060002090565b8054909160ff60a01b1990911660a09190911b60ff60a01b16179055565b612c4e866000526011602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b612c8a81612c8586600052600f602052604060002090565b612da4565b60ff9485169560005b86811688811015612ce25790612cac612cdd928761276c565b51612cd782612cc58a6000526010602052604060002090565b9060ff16600052602052604060002090565b55612e72565b612c93565b5050929093612d1c9296507f75667fad75521b835344aca3b0eea672769f8704aa6bebba7ed3d59ae740f07a955060405194859485612e83565b0390a1565b612d4b612d38856000526011602052604060002090565b805460ff60a81b1916600160a81b179055565b612bf2565b90601f8111612d5e57505050565b600091825260208220906020601f850160051c83019410612d9a575b601f0160051c01915b828110612d8f57505050565b818155600101612d83565b9092508290612d7a565b91909182516001600160401b03811161042457612dcb81612dc58454610d14565b84612d50565b602080601f8311600114612e07575081929394600092612dfc575b50508160011b916000199060031b1c1916179055565b015190503880612de6565b90601f19831695612e1d85600052602060002090565b926000905b888210612e5a57505083600195969710612e41575b505050811b019055565b015160001960f88460031b161c19169055388080612e37565b80600185968294968601518155019501930190612e22565b60ff1660ff8114610a4a5760010190565b906102b19492612e9e612eac92608085526080850190610260565b908382036020850152610260565b9260408201526060818403910152612808565b92906020926001600160401b039263ffffffff612efe604051978896879663230e93b160e11b885216600487015260a0602487015260a4860190610260565b60016044860152921660648401526084830152038160007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19081156108c557600091612f7a575b50807f1131472297a800fee664d1d89cfa8f7676ff07189ecc53f80bbb5f4969099db8600080a290565b612f92915060203d81116108be576108b08183610444565b38612f50565b60405190612fa582610429565b600c82526b31b7b232a637b1b0ba34b7b760a11b6020830152565b634e487b7160e01b600052602160045260246000fd5b60031115612fe057565b612fc0565b60405190612ff282610429565b60088252676c616e677561676560c01b6020830152565b60011115612fe057565b6040519061302082610429565b6006825265736f7572636560d01b6020830152565b6040519061304282610429565b60048252636172677360e01b6020830152565b6000198114610a4a5760010190565b6040519061307182610429565b600f82526e39b2b1b932ba39a637b1b0ba34b7b760891b6020830152565b6040519061309c82610429565b60078252667365637265747360c81b6020830152565b604051906130bf82610429565b600982526862797465734172677360b81b6020830152565b6130df6132ed565b906130f16130eb612f98565b83613a1c565b61310e81516130ff81612fd6565b61310881612fd6565b836133ad565b6131196130eb612fe5565b613133604082015161312a81613009565b61310881613009565b61313e6130eb613013565b61314c606082015183613a1c565b60a08101805151613251575b5060808101908151516131d1575b60c0915001805151613179575b50515190565b916131856130eb6130b2565b61318e82613aa0565b60005b835180518210156131be57906131b46131ad826131b99461276c565b5185613967565b613055565b613191565b505091506131cb81613b2c565b38613173565b6020810180516131e081612fd6565b6131e981612fd6565b1561323f5760c09261322261323a92613209613203613064565b88613a1c565b5161321381612fd6565b61321c81612fd6565b866133ad565b61323361322d61308f565b86613a1c565b5184613967565b613166565b60405163a80d31f760e01b8152600490fd5b9261326361325d613035565b84613a1c565b61326c83613aa0565b60005b8451805182101561329757906131b461328b826132929461276c565b5186613a1c565b61326f565b505092506132a482613b2c565b38613158565b8151156132c1576000808252604082015260600152565b6040516322ce3edd60e01b8152600490fd5b604051906132e082610429565b6000602083606081520152565b6040516132f981610429565b6133016132d3565b80825260208201600081526133146132d3565b50610100602083015260405180925260008252610120820191821061025b576000916040525290565b601f19810191908211610a4a57565b600119810191908211610a4a57565b906133646132d3565b50601f811680613393575b508060208301526040519081835260008252810160200190811061025b5760405290565b60200360208111610a4a578101809111610a4a573861336f565b908151916133b96132d3565b508251516001810190818111610a4a576020850151811015613412575b60c26020610dff965192830101538051821161340a575b50506040519160208301526020825261340582610429565b613967565b5238806133ed565b8160011b9482860460021483151715610a4a57602081613444610dff9861343d60c29551918461335b565b50826138b6565b50965050506133d6565b6134566132d3565b508051516001810190818111610a4a57602083015181101561348f575b605b6020845192830101538051821161348b57505090565b5290565b8160011b82810460021483151715610a4a576134b8906134b18551918661335b565b50846138b6565b50613473565b6134c66132d3565b508051516001810190818111610a4a5760208301518110156134fb575b605a6020845192830101538051821161348b57505090565b8160011b82810460021483151715610a4a5761351d906134b18551918661335b565b506134e3565b61352b6132d3565b508051516001810190818111610a4a576020830151811015613560575b60596020845192830101538051821161348b57505090565b8160011b82810460021483151715610a4a57613582906134b18551918661335b565b50613548565b6135906132d3565b508051516001810190818111610a4a5760208301518110156135c5575b60586020845192830101538051821161348b57505090565b8160011b82810460021483151715610a4a576135e7906134b18551918661335b565b506135ad565b6135f56132d3565b508051516001810190818111610a4a57602083015181101561362a575b607b6020845192830101538051821161348b57505090565b8160011b82810460021483151715610a4a5761364c906134b18551918661335b565b50613612565b61365a6132d3565b508051516001810190818111610a4a57602083015181101561368f575b607a6020845192830101538051821161348b57505090565b8160011b82810460021483151715610a4a576136b1906134b18551918661335b565b50613677565b6136bf6132d3565b508051516001810190818111610a4a5760208301518110156136f4575b60796020845192830101538051821161348b57505090565b8160011b82810460021483151715610a4a57613716906134b18551918661335b565b506136dc565b6137246132d3565b508051516001810190818111610a4a576020830151811015613759575b60786020845192830101538051821161348b57505090565b8160011b82810460021483151715610a4a5761377b906134b18551918661335b565b50613741565b9061378a6132d3565b508151516001810191828211610a4a5760208401518210156137bd575b6020845192830101538051821161348b57505090565b8260011b83810460021484151715610a4a576137e6906137df8651918761335b565b50856138b6565b506137a7565b906137f98251918361335b565b506138026132d3565b5080519061380e6132d3565b5061381c8151831115612b99565b8251519261382a83856120aa565b91602092828480940151821161389f575b5183815197820101968211613897575b505001915b818110156138715760001991036101000a0190811990511690825116179052565b919261388c6138866138929286518152612080565b94612080565b9261333d565b613850565b52388061384b565b6138b16138ab83612a3a565b826137ec565b61383b565b906138bf6132d3565b5080516138ca6132d3565b506138d88251821115612b99565b825151916138e682846120aa565b6020918291828701518111613950575b865183815197820101968211613948575b505001915b8181101561392e5760001991036101000a019081199051169082511617905290565b919261388c6138866139439286518152612080565b61390c565b523880613907565b61396261395c82612a3a565b886137ec565b6138f6565b815161399e9291906001600160401b03811690601782116139a1576139969150604060ff845192161790613781565b505b516138b6565b50565b5060ff81116139c6576139c0906139b88351613588565b508251613cf5565b50613998565b61ffff81116139e5576139c0906139dd8351613523565b508251613c8e565b63ffffffff8111613a06576139c0906139fe83516134be565b508251613c25565b6139c090613a14835161344e565b508251613bb9565b815161399e9291906001600160401b0381169060178211613a4b576139969150606060ff845192161790613781565b5060ff8111613a62576139c0906139b8835161371c565b61ffff8111613a79576139c0906139dd83516136b7565b63ffffffff8111613a92576139c0906139fe8351613652565b6139c090613a1483516135ed565b805190613aab6132d3565b508151516001810190818111610a4a576020840151811015613af9575b609f6020809551928301015380518211613af1575b50500180519060018201809211610a4a5752565b523880613add565b8160011b9382850460021483151715610a4a57602081613b22829761343d609f9551918461335b565b5095505050613ac8565b805190613b376132d3565b508151516001810190818111610a4a576020840151811015613b86575b60ff6020809551928301015380518211613b7e575b5050018051600019810191908211610a4a5752565b523880613b69565b8160011b9382850460021483151715610a4a57602081613baf829761343d60ff9551918461335b565b5095505050613b54565b90613bc26132d3565b50815151806008019182600811610a4a5760208401518311613c04575b6008845192830101906001600160401b03198251161790528051821161348b57505090565b8260011b83810460021484151715610a4a57613c2090856137ec565b613bdf565b90613c2e6132d3565b50815151806004019182600411610a4a5760208401518311613c6d575b60048451928301019063ffffffff198251161790528051821161348b57505090565b8260011b83810460021484151715610a4a57613c8990856137ec565b613c4b565b90613c976132d3565b50815151806002019182600211610a4a5760208401518311613cd4575b60028451928301019061ffff198251161790528051821161348b57505090565b8260011b83810460021484151715610a4a57613cf090856137ec565b613cb4565b90613cfe6132d3565b50815151806001019182600111610a4a5760208401518311613d3a575b60018451928301019060ff198251161790528051821161348b57505090565b8260011b83810460021484151715610a4a57613d5690856137ec565b613d1b565b6102b19392606092825260208201528160408201520190610260565b15613d7e57565b60405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48195e1958dd5d195960821b6044820152606490fd5b909493919460808201908252602095868301526080604083015283518091528560a0830194019060005b818110613dfd575050506102b1939450606081840391015261283c565b825163ffffffff1686529487019491870191600101613de0565b90613e3f613e39613e32846000526012602052604060002090565b5460ff1690565b15613d77565b613e63613e56836000526012602052604060002090565b805460ff19166001179055565b60019182613e7b826000526012602052604060002090565b015490613e9f613e95836000526011602052604060002090565b5460a01c60ff1690565b613ec0613eb6846000526011602052604060002090565b5460a81c60ff1690565b15613f995793613ece6126c8565b9080613eef613eea6114a186600052600e602052604060002090565b61462d565b96600060ff809216925b613f35575b505050507f20b6c14dda6c40c205794d98587c7cce19676f970b5bc3d8e0badf35dcf50b579394612d1c9160405194859485613db6565b81811683811015613f935790613f88613f61613f54613f8d948d61276c565b516001600160a01b031690565b613f82613f7c84612cc58d6000526010602052604060002090565b54612a50565b9061408f565b612e72565b83613ef9565b50613efe565b613fba613fb56114a1849794600052600e602052604060002090565b61416c565b90613fc860ff8092166126e2565b926000815b614009575b5050507f20b6c14dda6c40c205794d98587c7cce19676f970b5bc3d8e0badf35dcf50b57939491612d1c9160405194859485613db6565b614029614023613e95886000526011602052604060002090565b60ff1690565b838216908110156140895790613f8861119b6140688461405f610f2c61197d614055614083998d61276c565b5163ffffffff1690565b9283918b61276c565b613f82613f7c84612cc58c6000526010602052604060002090565b81613fcd565b50613fd2565b6001600160a01b038116919082156141045760035490828201809211610a4a576000926140f56020927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9460035560018060a01b03166000526001602052604060002090565b818154019055604051908152a3565b60405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606490fd5b60405161416681610b0b6020820194602086526040830190610260565b51902090565b6141759061439f565b60038151166141d65761419161418c825160021c90565b6126e2565b9060005b82518110156141d157806131b46141b76141b16141cc94612a6d565b856145d7565b6141c1838761276c565b9063ffffffff169052565b614195565b505090565b60405162461bcd60e51b815260206004820152602360248201527f44617461206c656e677468206d7573742062652061206d756c7469706c65206f60448201526219880d60ea1b6064820152608490fd5b1561422e57565b60405162461bcd60e51b815260206004820152602560248201527f536f7572636520737472696e67206e6f742070726f7065726c7920666f726d616044820152643a3a32b21760d91b6064820152608490fd5b805160011015610b255760210190565b908151811015610b25570160200190565b156142a957565b60405162461bcd60e51b815260206004820152602360248201527f536f7572636520737472696e67206d75737420737461727420776974682027306044820152623c139760e91b6064820152608490fd5b604051602081018181106001600160401b038211176104245760405260008152906000368137565b6040519061432f82610429565b6014825260203681840137565b9061434682610484565b6143536040519182610444565b828152809261270a601f1991610484565b60041b90610ff060f0831692168203610a4a57565b60ff600a9116019060ff8211610a4a57565b9060ff8091169116019060ff8211610a4a57565b906143ae600283511015614227565b6143e96001600160f81b0319600360fc1b816143da6143cc8761275f565b516001600160f81b03191690565b161490816144a2575b506142a2565b60028251146144985761440d614408614402845161334c565b60011c90565b61433c565b60025b8351811015614493578061446e61445e61444061443b6144366143cc61448e978b614291565b61451b565b614364565b6144586144366143cc6144528761209c565b8b614291565b9061438b565b60f81b6001600160f81b03191690565b61448861447d6144028461334c565b9160001a9185614291565b5361208e565b614410565b509150565b90506102b16142fa565b9050600f60fb1b816144b66143cc87614281565b16149081156144c7575b50386143e3565b600b60fb1b91506144da6143cc86614281565b1614386144c0565b60ff602f199116019060ff8211610a4a57565b60ff6060199116019060ff8211610a4a57565b60ff6040199116019060ff8211610a4a57565b60f81c6030811015806145cc575b6145c3576061811015806145b8575b6145ac576041811015806145a1575b6145905760405162461bcd60e51b815260206004820152601b60248201527f496e76616c69642063686172616374657220696e20737472696e6700000000006044820152606490fd5b61459c6102b191614508565b614379565b506046811115614547565b61459c6102b1916144f5565b506066811115614538565b6102b1906144e2565b506039811115614529565b9060048101808211610a4a578251106145f257016004015190565b60405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b6044820152606490fd5b6146369061439f565b6014808251066146d05781516014900490614650826126e2565b92600090815b84811061466557505050505090565b8361466e614322565b845b828110614692575061468d92916131b491015161119b838a61276c565b614656565b6146c89192506146b66143cc6146b0836146ab88612a83565b6120aa565b87614291565b861a6146c28285614291565b53613055565b908591614670565b60405162461bcd60e51b815260206004820152602a60248201527f44617461206c656e677468206d7573742062652061206d756c7469706c65206f6044820152696620323020627974657360b01b6064820152608490fdfea2646970667358221220c8a6c646741f0e233ff95e4035c708d2182a1986c927fd7ae85cb1d7221535f964736f6c63430008140033000000000000000000000000a9d587a00a31a52ed70d6026794a8fc5e2f5dcb0000000000000000000000000a9740b9e359a2c017140a4cdd838db02ca3f372b66756e2d6176616c616e6368652d66756a692d310000000000000000000000000000000000000000000000000000000000000000000000000000000000000feb