Overview ERC721
Total Supply:
1,263 Phi-Wawa

Holders:
863
Profile Summary
Blockchain:
Ethereum (1)

Contract Source Code Verified (Partial Match)
Contract Name:
WawaNFT

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 10000 runs

Created At:
Fri, 08 Sep 2023 04:55:47 GMT
WawaNFT.sol
src
WawaNFT.sol


Contract ABI
[
  {
    "inputs": [
      {
        "internalType": "address payable",
        "name": "_treasuryAddress",
        "type": "address"
      }
    ],
    "stateMutability": "nonpayable",
    "type": "constructor"
  },
  {
    "inputs": [],
    "name": "FailedPaymentToTreasury",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidOwner",
    "type": "error"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "value",
        "type": "uint256"
      }
    ],
    "name": "InvalidSecondaryRoyalityFee",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "InvalidTokenID",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "PaymentBalanceZero",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "SentAmountDoesNotMatch",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "TokenURIAlreadyUsed",
    "type": "error"
  },
  {
    "inputs": [],
    "name": "ZeroAddressNotAllowed",
    "type": "error"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "approved",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "Approval",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "indexed": false,
        "internalType": "bool",
        "name": "approved",
        "type": "bool"
      }
    ],
    "name": "ApprovalForAll",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "sender",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "user",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "enum Faction",
        "name": "faction",
        "type": "uint8"
      },
      {
        "indexed": false,
        "internalType": "uint8",
        "name": "petId",
        "type": "uint8"
      },
      {
        "components": [
          {
            "internalType": "uint8",
            "name": "headwear",
            "type": "uint8"
          },
          {
            "internalType": "uint8",
            "name": "eyes",
            "type": "uint8"
          },
          {
            "internalType": "uint8",
            "name": "chest",
            "type": "uint8"
          },
          {
            "internalType": "uint8",
            "name": "legs",
            "type": "uint8"
          }
        ],
        "indexed": false,
        "internalType": "struct Trait",
        "name": "trait",
        "type": "tuple"
      },
      {
        "indexed": false,
        "internalType": "string",
        "name": "tokenURI",
        "type": "string"
      },
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "gene",
        "type": "bytes32"
      },
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "timestamp",
        "type": "uint256"
      }
    ],
    "name": "LogGetWawa",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "target",
        "type": "address"
      }
    ],
    "name": "OwnershipGranted",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "target",
        "type": "address"
      }
    ],
    "name": "OwnershipRemoved",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "PaymentReceivedOwner",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "amount",
        "type": "uint256"
      }
    ],
    "name": "PaymentWithdrawnOwner",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "enum Faction",
        "name": "faction",
        "type": "uint8"
      }
    ],
    "name": "SetFaction",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "bytes32",
        "name": "gene",
        "type": "bytes32"
      }
    ],
    "name": "SetGene",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "uint8",
        "name": "petId",
        "type": "uint8"
      }
    ],
    "name": "SetPetId",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": false,
        "internalType": "uint256",
        "name": "secondaryRoyalty",
        "type": "uint256"
      }
    ],
    "name": "SetSecondaryRoyalityFee",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "indexed": false,
        "internalType": "string",
        "name": "uri",
        "type": "string"
      }
    ],
    "name": "SetTokenURI",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "components": [
          {
            "internalType": "uint8",
            "name": "headwear",
            "type": "uint8"
          },
          {
            "internalType": "uint8",
            "name": "eyes",
            "type": "uint8"
          },
          {
            "internalType": "uint8",
            "name": "chest",
            "type": "uint8"
          },
          {
            "internalType": "uint8",
            "name": "legs",
            "type": "uint8"
          }
        ],
        "indexed": false,
        "internalType": "struct Trait",
        "name": "trait",
        "type": "tuple"
      }
    ],
    "name": "SetTrait",
    "type": "event"
  },
  {
    "anonymous": false,
    "inputs": [
      {
        "indexed": true,
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "indexed": true,
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "Transfer",
    "type": "event"
  },
  {
    "inputs": [],
    "name": "PRICE",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "approve",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      }
    ],
    "name": "balanceOf",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "created",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "getApproved",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "getFaction",
    "outputs": [
      {
        "internalType": "enum Faction",
        "name": "",
        "type": "uint8"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "enum Faction",
        "name": "faction",
        "type": "uint8"
      }
    ],
    "name": "getFactionCount",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint8",
        "name": "petId",
        "type": "uint8"
      }
    ],
    "name": "getPetCount",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "getTokenURI",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "internalType": "string",
        "name": "_tokenURI",
        "type": "string"
      },
      {
        "internalType": "enum Faction",
        "name": "faction",
        "type": "uint8"
      },
      {
        "components": [
          {
            "internalType": "uint8",
            "name": "headwear",
            "type": "uint8"
          },
          {
            "internalType": "uint8",
            "name": "eyes",
            "type": "uint8"
          },
          {
            "internalType": "uint8",
            "name": "chest",
            "type": "uint8"
          },
          {
            "internalType": "uint8",
            "name": "legs",
            "type": "uint8"
          }
        ],
        "internalType": "struct Trait",
        "name": "trait",
        "type": "tuple"
      },
      {
        "internalType": "uint8",
        "name": "petId",
        "type": "uint8"
      },
      {
        "internalType": "bytes32",
        "name": "gene",
        "type": "bytes32"
      }
    ],
    "name": "getWawa",
    "outputs": [],
    "stateMutability": "payable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "getWawaInfo",
    "outputs": [
      {
        "components": [
          {
            "components": [
              {
                "internalType": "uint8",
                "name": "headwear",
                "type": "uint8"
              },
              {
                "internalType": "uint8",
                "name": "eyes",
                "type": "uint8"
              },
              {
                "internalType": "uint8",
                "name": "chest",
                "type": "uint8"
              },
              {
                "internalType": "uint8",
                "name": "legs",
                "type": "uint8"
              }
            ],
            "internalType": "struct Trait",
            "name": "trait",
            "type": "tuple"
          },
          {
            "internalType": "string",
            "name": "tokenURI",
            "type": "string"
          },
          {
            "internalType": "enum Faction",
            "name": "faction",
            "type": "uint8"
          },
          {
            "internalType": "uint8",
            "name": "petId",
            "type": "uint8"
          },
          {
            "internalType": "bytes32",
            "name": "gene",
            "type": "bytes32"
          }
        ],
        "internalType": "struct Wawa",
        "name": "",
        "type": "tuple"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      }
    ],
    "name": "isApprovedForAll",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "name",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "targetAddress",
        "type": "address"
      }
    ],
    "name": "ownerCheck",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "ownerOf",
    "outputs": [
      {
        "internalType": "address",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "paymentBalanceOwner",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "oldOwner",
        "type": "address"
      }
    ],
    "name": "removeOwner",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      },
      {
        "internalType": "uint256",
        "name": "salePrice",
        "type": "uint256"
      }
    ],
    "name": "royaltyInfo",
    "outputs": [
      {
        "internalType": "address",
        "name": "receiver",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "royaltyAmount",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "safeTransferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "internalType": "bytes",
        "name": "data",
        "type": "bytes"
      }
    ],
    "name": "safeTransferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "secondaryRoyalty",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "operator",
        "type": "address"
      },
      {
        "internalType": "bool",
        "name": "approved",
        "type": "bool"
      }
    ],
    "name": "setApprovalForAll",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "internalType": "enum Faction",
        "name": "faction",
        "type": "uint8"
      }
    ],
    "name": "setFaction",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "internalType": "bytes32",
        "name": "gene",
        "type": "bytes32"
      }
    ],
    "name": "setGene",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "newOwner",
        "type": "address"
      }
    ],
    "name": "setOwner",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "internalType": "uint8",
        "name": "petId",
        "type": "uint8"
      }
    ],
    "name": "setPet",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "newSecondaryRoyalty",
        "type": "uint256"
      }
    ],
    "name": "setSecondaryRoyalityFee",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "internalType": "string",
        "name": "_tokenURI",
        "type": "string"
      }
    ],
    "name": "setTokenURI",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      },
      {
        "components": [
          {
            "internalType": "uint8",
            "name": "headwear",
            "type": "uint8"
          },
          {
            "internalType": "uint8",
            "name": "eyes",
            "type": "uint8"
          },
          {
            "internalType": "uint8",
            "name": "chest",
            "type": "uint8"
          },
          {
            "internalType": "uint8",
            "name": "legs",
            "type": "uint8"
          }
        ],
        "internalType": "struct Trait",
        "name": "trait",
        "type": "tuple"
      }
    ],
    "name": "setTrait",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "bytes4",
        "name": "interfaceId",
        "type": "bytes4"
      }
    ],
    "name": "supportsInterface",
    "outputs": [
      {
        "internalType": "bool",
        "name": "",
        "type": "bool"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "symbol",
    "outputs": [
      {
        "internalType": "string",
        "name": "",
        "type": "string"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "index",
        "type": "uint256"
      }
    ],
    "name": "tokenByIndex",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "owner",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "index",
        "type": "uint256"
      }
    ],
    "name": "tokenOfOwnerByIndex",
    "outputs": [
      {
        "internalType": "uint256",
        "name": "",
        "type": "uint256"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "tokenURI",
    "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": "from",
        "type": "address"
      },
      {
        "internalType": "address",
        "name": "to",
        "type": "address"
      },
      {
        "internalType": "uint256",
        "name": "tokenId",
        "type": "uint256"
      }
    ],
    "name": "transferFrom",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "inputs": [],
    "name": "treasuryAddress",
    "outputs": [
      {
        "internalType": "address payable",
        "name": "",
        "type": "address"
      }
    ],
    "stateMutability": "view",
    "type": "function"
  },
  {
    "inputs": [
      {
        "internalType": "address",
        "name": "withdrawTo",
        "type": "address"
      }
    ],
    "name": "withdrawOwnerBalance",
    "outputs": [],
    "stateMutability": "nonpayable",
    "type": "function"
  },
  {
    "stateMutability": "payable",
    "type": "receive"
  }
]


Contract Creation Code
60a06040523480156200001157600080fd5b50604051620037f1380380620037f18339810160408190526200003491620000ea565b60408051808201825260048152635761776160e01b6020808301919091528251808401845260088152675068692d5761776160c01b8183015233600090815291829052929020805460ff191660019081179091558055906002620000998382620001c1565b506003620000a88282620001c1565b5050506001600160a01b038116620000d3576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b03166080526000600c556200028d565b600060208284031215620000fd57600080fd5b81516001600160a01b03811681146200011557600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200014757607f821691505b6020821081036200016857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001bc57600081815260208120601f850160051c81016020861015620001975750805b601f850160051c820191505b81811015620001b857828155600101620001a3565b5050505b505050565b81516001600160401b03811115620001dd57620001dd6200011c565b620001f581620001ee845462000132565b846200016e565b602080601f8311600181146200022d5760008415620002145750858301515b600019600386901b1c1916600185901b178555620001b8565b600085815260208120601f198616915b828110156200025e578886015182559484019460019091019084016200023d565b50858210156200027d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051613541620002b06000396000818161077f0152611b3601526135416000f3fe6080604052600436106102895760003560e01c80636352211e1161015357806395d89b41116100cb578063b88d4fde1161007f578063c87b56dd11610064578063c87b56dd146107a1578063dc2c7e95146107c1578063e985e9c5146107d457600080fd5b8063b88d4fde1461074d578063c5f956af1461076d57600080fd5b8063a2d28bab116100b0578063a2d28bab146106c0578063a8a150b8146106ed578063ad1c1d0c1461072d57600080fd5b806395d89b411461068b578063a22cb465146106a057600080fd5b806371dce28c1161012257806382cb6b721161010757806382cb6b721461062a5780638d859f3e1461065a5780639291671a1461067557600080fd5b806371dce28c146105ea5780637f16d5871461060a57600080fd5b80636352211e1461056a57806367478a351461058a5780637061d486146105aa57806370a08231146105ca57600080fd5b80631e4c78871161020157806336a0410a116101b557806342842e0e1161019a57806342842e0e1461050a5780634f6ccce71461052a578063554ae6761461054a57600080fd5b806336a0410a146104ba5780633bb3a24d146104ea57600080fd5b806323bf2f67116101e657806323bf2f67146104225780632a55205a1461045b5780632f745c591461049a57600080fd5b80631e4c7887146103ec57806323b872dd1461040257600080fd5b80630a57e0b311610258578063162094c41161023d578063162094c41461038d578063173825d9146103ad57806318160ddd146103cd57600080fd5b80630a57e0b31461034d57806313af40351461036d57600080fd5b806301ffc9a71461029e57806306fdde03146102d3578063081812fc146102f5578063095ea7b31461032d57600080fd5b36610299576102973461081d565b005b600080fd5b3480156102aa57600080fd5b506102be6102b93660046129dc565b61086b565b60405190151581526020015b60405180910390f35b3480156102df57600080fd5b506102e86108c7565b6040516102ca9190612a6e565b34801561030157600080fd5b50610315610310366004612a81565b610959565b6040516001600160a01b0390911681526020016102ca565b34801561033957600080fd5b50610297610348366004612ab6565b610980565b34801561035957600080fd5b50610297610368366004612af1565b610ab6565b34801561037957600080fd5b50610297610388366004612b14565b610bf7565b34801561039957600080fd5b506102976103a8366004612bf2565b610c8d565b3480156103b957600080fd5b506102976103c8366004612b14565b610db8565b3480156103d957600080fd5b50600a545b6040519081526020016102ca565b3480156103f857600080fd5b506103de600d5481565b34801561040e57600080fd5b5061029761041d366004612c4d565b610e4b565b34801561042e57600080fd5b506102be61043d366004612b14565b6001600160a01b031660009081526020819052604090205460ff1690565b34801561046757600080fd5b5061047b610476366004612c89565b610ed2565b604080516001600160a01b0390931683526020830191909152016102ca565b3480156104a657600080fd5b506103de6104b5366004612ab6565b610efb565b3480156104c657600080fd5b506103de6104d5366004612cab565b60ff1660009081526011602052604090205490565b3480156104f657600080fd5b506102e8610505366004612a81565b610fa3565b34801561051657600080fd5b50610297610525366004612c4d565b611048565b34801561053657600080fd5b506103de610545366004612a81565b611063565b34801561055657600080fd5b50610297610565366004612d46565b611107565b34801561057657600080fd5b50610315610585366004612a81565b611238565b34801561059657600080fd5b506102976105a5366004612b14565b61129d565b3480156105b657600080fd5b506102976105c5366004612a81565b611440565b3480156105d657600080fd5b506103de6105e5366004612b14565b6114fd565b3480156105f657600080fd5b50610297610605366004612d79565b611597565b34801561061657600080fd5b50610297610625366004612c89565b611643565b34801561063657600080fd5b506102be610645366004612a81565b600e6020526000908152604090205460ff1681565b34801561066657600080fd5b506103de66b1a2bc2ec5000081565b34801561068157600080fd5b506103de600c5481565b34801561069757600080fd5b506102e86116d4565b3480156106ac57600080fd5b506102976106bb366004612d9c565b6116e3565b3480156106cc57600080fd5b506106e06106db366004612a81565b6116f2565b6040516102ca9190612e42565b3480156106f957600080fd5b50610720610708366004612a81565b6000908152600f602052604090206002015460ff1690565b6040516102ca9190612ed4565b34801561073957600080fd5b506103de610748366004612ee2565b61187e565b34801561075957600080fd5b50610297610768366004612efd565b6118bd565b34801561077957600080fd5b506103157f000000000000000000000000000000000000000000000000000000000000000081565b3480156107ad57600080fd5b506102e86107bc366004612a81565b61194b565b6102976107cf366004612f91565b61199f565b3480156107e057600080fd5b506102be6107ef36600461305d565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b80600d600082825461082f91906130b6565b90915550506040518181527faab58724194bfb12b018298382453c333764e73d19ec73cb98d26f8dd10d29cc906020015b60405180910390a150565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d630000000000000000000000000000000000000000000000000000000014806108c157506108c182611c67565b92915050565b6060600280546108d6906130c9565b80601f0160208091040260200160405190810160405280929190818152602001828054610902906130c9565b801561094f5780601f106109245761010080835404028352916020019161094f565b820191906000526020600020905b81548152906001019060200180831161093257829003601f168201915b5050505050905090565b600061096482611d4a565b506000908152600660205260409020546001600160a01b031690565b600061098b82611238565b9050806001600160a01b0316836001600160a01b031603610a195760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b0382161480610a355750610a3581336107ef565b610aa75760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610a10565b610ab18383611dae565b505050565b3360009081526020819052604090205460ff16610aff576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600f602052604090206002015460ff61010090910481169082168114610b775760ff811615610b525760ff811660009081526011602052604081208054909190610b4d90613116565b909155505b60ff821660009081526011602052604081208054909190610b729061314b565b909155505b6000838152600f602090815260409182902060020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010060ff871690810291909117909155915191825284917e4c5e1c84ee1e8e8c68bb3923b5bac01d414e523428cd17c97071fe708bb3d2910160405180910390a2505050565b3360009081526020819052604090205460ff16610c40576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116600081815260208190526040808220805460ff191660011790555133917f619792ba07bec101df538ab277befa333e4cf1c0274f11de7be2a9507b9c9a0691a350565b3360009081526020819052604090205460ff16610cd6576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601281604051610ce69190613183565b9081526040519081900360200190205460ff1615610d30576040517fdf7b9b1900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001601282604051610d429190613183565b9081526040805160209281900383019020805460ff1916931515939093179092556000848152600f90915220600101610d7b82826131ed565b50817fd2d827dddfc9c9a02afc5fc68d3251684b36e213a7999ebd90a861f25df4077e82604051610dac9190612a6e565b60405180910390a25050565b3360009081526020819052604090205460ff16610e01576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116600081815260208190526040808220805460ff191690555133917fc191551a88c5609788f3532bd94c06479b61b0040eec65f9cd985428ffea643091a350565b610e553382611e34565b610ec75760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610a10565b610ab1838383611eb3565b600c54309060009061271090610ee89085613307565b610ef2919061331e565b90509250929050565b6000610f06836114fd565b8210610f7a5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610a10565b506001600160a01b03919091166000908152600860209081526040808320938352929052205490565b6000818152600f60205260409020600101805460609190610fc3906130c9565b80601f0160208091040260200160405190810160405280929190818152602001828054610fef906130c9565b801561103c5780601f106110115761010080835404028352916020019161103c565b820191906000526020600020905b81548152906001019060200180831161101f57829003601f168201915b50505050509050919050565b610ab1838383604051806020016040528060008152506118bd565b600061106e600a5490565b82106110e25760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610a10565b600a82815481106110f5576110f5613359565b90600052602060002001549050919050565b3360009081526020819052604090205460ff16611150576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600f6020908152604091829020835181549285015184860151606087015160ff9081166301000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff9282166201000002929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffff938216610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000090971691909416179490941716179190911790555182907f244abc17bb16e23a3ee639d6073482c75e12e4558e63315297d943a5069a4c2790610dac908490613388565b6000818152600460205260408120546001600160a01b0316806108c15760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610a10565b3360009081526020819052604090205460ff166112e6576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112ee61211f565b6001600160a01b03811661132e576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d5460000361136a576040517f5e6202b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600d80546000918290556040519091906001600160a01b0384169083908381818185875af1925050503d80600081146113bf576040519150601f19603f3d011682016040523d82523d6000602084013e6113c4565b606091505b50509050806113ff576040517f5e6202b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518281527f2d5923adf91dd211e633a33f2e27918338e6a33e3b3f386e9d466d1bc52eba799060200160405180910390a1505061143d60018055565b50565b3360009081526020819052604090205460ff16611489576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127108111156114c8576040517fd334f32100000000000000000000000000000000000000000000000000000000815260048101829052602401610a10565b600c8190556040518181527fb69fdb7c7f7b0e17f64074ea1590642f14193039b234aae7a3c68b26ed055adf90602001610860565b60006001600160a01b03821661157b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610a10565b506001600160a01b031660009081526005602052604090205490565b3360009081526020819052604090205460ff166115e0576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600f60205260409020600201805482919060ff1916600183600381111561160e5761160e612dd8565b0217905550817f26b503995a8d5efb729ffb72be7bf3e8e617971c5bd2b5aa607f69ce07d36cd382604051610dac9190612ed4565b3360009081526020819052604090205460ff1661168c576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600f6020526040908190206003018290555182907fcaac45fba4e23f90b030fd084aae37534807ef6a7a5cc175509dc8783e4965b290610dac9084815260200190565b6060600380546108d6906130c9565b6116ee338383612178565b5050565b6040805161012081018252600060a0820181815260c0830182905260e083018290526101008301829052825260606020830181905292820181905291810182905260808101919091526000828152600f602090815260409182902082516101208101909352805460ff80821660a08601908152610100808404831660c0880152620100008404831660e0880152630100000090930490911691850191909152835260018101805491928401916117a7906130c9565b80601f01602080910402602001604051908101604052809291908181526020018280546117d3906130c9565b80156118205780601f106117f557610100808354040283529160200191611820565b820191906000526020600020905b81548152906001019060200180831161180357829003601f168201915b5050509183525050600282015460209091019060ff16600381111561184757611847612dd8565b600381111561185857611858612dd8565b81526002820154610100900460ff16602082015260039091015460409091015292915050565b60006010600083600381111561189657611896612dd8565b60038111156118a7576118a7612dd8565b8152602001908152602001600020549050919050565b6118c73383611e34565b6119395760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610a10565b61194584848484612246565b50505050565b6000818152600e602052604090205460609060ff16611996576040517f6aa2a93700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108c182610fa3565b6119a761211f565b3360009081526020819052604090205460ff166119f0576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038816611a30576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b66b1a2bc2ec500003414611a6f576040517e96b42600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611aaf8787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c8d92505050565b611ac287610565368690038601866133c3565b611acc8783610ab6565b611ad68782611643565b611ae08785611597565b60106000856003811115611af657611af6612dd8565b6003811115611b0757611b07612dd8565b815260200190815260200160002060008154611b229061314b565b909155506040516000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169066b1a2bc2ec50000908381818185875af1925050503d8060008114611b98576040519150601f19603f3d011682016040523d82523d6000602084013e611b9d565b606091505b5050905080611bd8576040517f1a77b59600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000888152600e60205260409020805460ff19166001179055611bfb89896122cf565b87896001600160a01b0316336001600160a01b03167f619630faf26950690a64f88f2d01969f89952fbba16c9ee97e88d9c1073d7eba8887898d8d8a42604051611c4b97969594939291906133df565b60405180910390a450611c5d60018055565b5050505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480611cfa57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806108c157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146108c1565b6000818152600460205260409020546001600160a01b031661143d5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610a10565b600081815260066020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091558190611dfb82611238565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611e4083611238565b9050806001600160a01b0316846001600160a01b03161480611e8757506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b80611eab5750836001600160a01b0316611ea084610959565b6001600160a01b0316145b949350505050565b826001600160a01b0316611ec682611238565b6001600160a01b031614611f425760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610a10565b6001600160a01b038216611fbd5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610a10565b611fca83838360016122e9565b826001600160a01b0316611fdd82611238565b6001600160a01b0316146120595760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610a10565b600081815260066020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169091556001600160a01b038781168086526005855283862080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01905590871680865283862080546001019055868652600490945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6002600154036121715760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610a10565b6002600155565b816001600160a01b0316836001600160a01b0316036121d95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a10565b6001600160a01b03838116600081815260076020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612251848484611eb3565b61225d84848484612425565b6119455760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610a10565b6116ee8282604051806020016040528060008152506125e4565b60018111156123605760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e736563757469766520747260448201527f616e7366657273206e6f7420737570706f7274656400000000000000000000006064820152608401610a10565b816001600160a01b0385166123bc576123b781600a80546000838152600b60205260408120829055600182018355919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80155565b6123df565b836001600160a01b0316856001600160a01b0316146123df576123df858261266d565b6001600160a01b0384166123fb576123f68161270a565b61241e565b846001600160a01b0316846001600160a01b03161461241e5761241e84826127b9565b5050505050565b60006001600160a01b0384163b156125d9576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a02906124829033908990889088906004016134a6565b6020604051808303816000875af19250505080156124db575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526124d8918101906134e2565b60015b61258e573d808015612509576040519150601f19603f3d011682016040523d82523d6000602084013e61250e565b606091505b5080516000036125865760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610a10565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611eab565b506001949350505050565b6125ee83836127fd565b6125fb6000848484612425565b610ab15760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610a10565b6000600161267a846114fd565b61268491906134ff565b6000838152600960205260409020549091508082146126d7576001600160a01b03841660009081526008602090815260408083208584528252808320548484528184208190558352600990915290208190555b5060009182526009602090815260408084208490556001600160a01b039094168352600881528383209183525290812055565b600a5460009061271c906001906134ff565b6000838152600b6020526040812054600a805493945090928490811061274457612744613359565b9060005260206000200154905080600a838154811061276557612765613359565b6000918252602080832090910192909255828152600b9091526040808220849055858252812055600a80548061279d5761279d613512565b6001900381819060005260206000200160009055905550505050565b60006127c4836114fd565b6001600160a01b039093166000908152600860209081526040808320868452825280832085905593825260099052919091209190915550565b6001600160a01b0382166128535760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a10565b6000818152600460205260409020546001600160a01b0316156128b85760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a10565b6128c66000838360016122e9565b6000818152600460205260409020546001600160a01b03161561292b5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a10565b6001600160a01b038216600081815260056020908152604080832080546001019055848352600490915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461143d57600080fd5b6000602082840312156129ee57600080fd5b81356129f9816129ae565b9392505050565b60005b83811015612a1b578181015183820152602001612a03565b50506000910152565b60008151808452612a3c816020860160208601612a00565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129f96020830184612a24565b600060208284031215612a9357600080fd5b5035919050565b80356001600160a01b0381168114612ab157600080fd5b919050565b60008060408385031215612ac957600080fd5b612ad283612a9a565b946020939093013593505050565b803560ff81168114612ab157600080fd5b60008060408385031215612b0457600080fd5b82359150610ef260208401612ae0565b600060208284031215612b2657600080fd5b6129f982612a9a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff80841115612b7957612b79612b2f565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715612bbf57612bbf612b2f565b81604052809350858152868686011115612bd857600080fd5b858560208301376000602087830101525050509392505050565b60008060408385031215612c0557600080fd5b82359150602083013567ffffffffffffffff811115612c2357600080fd5b8301601f81018513612c3457600080fd5b612c4385823560208401612b5e565b9150509250929050565b600080600060608486031215612c6257600080fd5b612c6b84612a9a565b9250612c7960208501612a9a565b9150604084013590509250925092565b60008060408385031215612c9c57600080fd5b50508035926020909101359150565b600060208284031215612cbd57600080fd5b6129f982612ae0565b600060808284031215612cd857600080fd5b6040516080810181811067ffffffffffffffff82111715612cfb57612cfb612b2f565b604052905080612d0a83612ae0565b8152612d1860208401612ae0565b6020820152612d2960408401612ae0565b6040820152612d3a60608401612ae0565b60608201525092915050565b60008060a08385031215612d5957600080fd5b82359150610ef28460208501612cc6565b803560048110612ab157600080fd5b60008060408385031215612d8c57600080fd5b82359150610ef260208401612d6a565b60008060408385031215612daf57600080fd5b612db883612a9a565b915060208301358015158114612dcd57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110612e3e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b60208152612e8160208201835160ff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525050565b600060208301516101008060a0850152612e9f610120850183612a24565b91506040850151612eb360c0860182612e07565b50606085015160ff1660e08501526080909401519390920192909252919050565b602081016108c18284612e07565b600060208284031215612ef457600080fd5b6129f982612d6a565b60008060008060808587031215612f1357600080fd5b612f1c85612a9a565b9350612f2a60208601612a9a565b925060408501359150606085013567ffffffffffffffff811115612f4d57600080fd5b8501601f81018713612f5e57600080fd5b612f6d87823560208401612b5e565b91505092959194509250565b600060808284031215612f8b57600080fd5b50919050565b600080600080600080600080610140898b031215612fae57600080fd5b612fb789612a9a565b975060208901359650604089013567ffffffffffffffff80821115612fdb57600080fd5b818b0191508b601f830112612fef57600080fd5b813581811115612ffe57600080fd5b8c602082850101111561301057600080fd5b60208301985080975050505061302860608a01612d6a565b93506130378a60808b01612f79565b92506130466101008a01612ae0565b915061012089013590509295985092959890939650565b6000806040838503121561307057600080fd5b61307983612a9a565b9150610ef260208401612a9a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156108c1576108c1613087565b600181811c908216806130dd57607f821691505b602082108103612f8b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008161312557613125613087565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361317c5761317c613087565b5060010190565b60008251613195818460208701612a00565b9190910192915050565b601f821115610ab157600081815260208120601f850160051c810160208610156131c65750805b601f850160051c820191505b818110156131e5578281556001016131d2565b505050505050565b815167ffffffffffffffff81111561320757613207612b2f565b61321b8161321584546130c9565b8461319f565b602080601f83116001811461326e57600084156132385750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556131e5565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156132bb5788860151825594840194600190910190840161329c565b50858210156132f757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b80820281158282048414176108c1576108c1613087565b600082613354577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b608081016108c1828460ff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301525050565b6000608082840312156133d557600080fd5b6129f98383612cc6565b60006101206133ee838b612e07565b60ff8916602084015260ff61340289612ae0565b16604084015260ff61341660208a01612ae0565b16606084015260ff61342a60408a01612ae0565b16608084015260ff61343e60608a01612ae0565b1660a08401528060c0840152858184015250610140858782850137600083870182015260e083019490945250610100810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910101949350505050565b60006001600160a01b038087168352808616602084015250836040830152608060608301526134d86080830184612a24565b9695505050505050565b6000602082840312156134f457600080fd5b81516129f9816129ae565b818103818111156108c1576108c1613087565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd000000000000000000000000da6b83796cfb3958e709b96282c4f45e861d6e85