@settlemint/ssolidity-token-erc721-generative-art
Version:
Smart contract set to build an ERC721 token with generated art in SettleMint
1,283 lines (1,281 loc) • 88.9 kB
TypeScript
// This file was autogenerated by hardhat-viem, do not edit it.
// prettier-ignore
// tslint:disable
// eslint-disable
import type { Address } from "viem";
import type { AbiParameterToPrimitiveType, GetContractReturnType } from "@nomicfoundation/hardhat-viem/types";
import "@nomicfoundation/hardhat-viem/types";
export interface MetaDog$Type {
"_format": "hh-sol-artifact-1",
"contractName": "MetaDog",
"sourceName": "contracts/MetaDog.sol",
"abi": [
{
"inputs": [
{
"internalType": "string",
"name": "name_",
"type": "string"
},
{
"internalType": "string",
"name": "symbol_",
"type": "string"
},
{
"internalType": "string",
"name": "baseTokenURI_",
"type": "string"
},
{
"internalType": "address",
"name": "proxyRegistryAddress_",
"type": "address"
},
{
"internalType": "address payable",
"name": "wallet_",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "numerator",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "denominator",
"type": "uint256"
}
],
"name": "ERC2981InvalidDefaultRoyalty",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "ERC2981InvalidDefaultRoyaltyReceiver",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "numerator",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "denominator",
"type": "uint256"
}
],
"name": "ERC2981InvalidTokenRoyalty",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "ERC2981InvalidTokenRoyaltyReceiver",
"type": "error"
},
{
"inputs": [],
"name": "ERC721EnumerableForbiddenBatchMint",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "ERC721IncorrectOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ERC721InsufficientApproval",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "approver",
"type": "address"
}
],
"name": "ERC721InvalidApprover",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "ERC721InvalidOperator",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "ERC721InvalidOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
}
],
"name": "ERC721InvalidReceiver",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "ERC721InvalidSender",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ERC721NonexistentToken",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "ERC721OutOfBoundsIndex",
"type": "error"
},
{
"inputs": [],
"name": "EnforcedPause",
"type": "error"
},
{
"inputs": [],
"name": "ExpectedPause",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "OwnableInvalidOwner",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "OwnableUnauthorizedAccount",
"type": "error"
},
{
"inputs": [],
"name": "ReentrancyGuardReentrantCall",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"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": false,
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "MintPaused",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "MintUnpaused",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "Paused",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "_value",
"type": "string"
},
{
"indexed": true,
"internalType": "uint256",
"name": "_id",
"type": "uint256"
}
],
"name": "PermanentURI",
"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"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "Unpaused",
"type": "event"
},
{
"inputs": [],
"name": "MAX_PER_TX",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "MAX_SUPPLY",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "PRICE_IN_WEI_PUBLIC",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "PRICE_IN_WEI_WHITELIST",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "RESERVES",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "ROYALTIES_IN_BASIS_POINTS",
"outputs": [
{
"internalType": "uint96",
"name": "",
"type": "uint96"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "_proxyRegistryAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "_whitelistMerkleRoot",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"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": "address",
"name": "_from",
"type": "address"
},
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "_tokenIds",
"type": "uint256[]"
},
{
"internalType": "bytes",
"name": "data_",
"type": "bytes"
}
],
"name": "batchSafeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "_tokenIds",
"type": "uint256[]"
}
],
"name": "batchTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "burn",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "collectReserves",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "disableWhitelistMerkleRoot",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "freeze",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "freezeAllTokens",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "freezeToken",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "frozen",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "allowance",
"type": "string"
},
{
"internalType": "bytes32[]",
"name": "proof",
"type": "bytes32[]"
}
],
"name": "getAllowance",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"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": "address[]",
"name": "recipients_",
"type": "address[]"
}
],
"name": "gift",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint128",
"name": "value",
"type": "uint128"
}
],
"name": "increaseBalance",
"outputs": [],
"stateMutability": "nonpayable",
"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": "mintPaused",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ownerOf",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "pause",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "pauseMint",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "paused",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "count",
"type": "uint256"
}
],
"name": "publicMint",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "salePrice",
"type": "uint256"
}
],
"name": "royaltyInfo",
"outputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"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": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "setApprovalForAll",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "baseTokenURI_",
"type": "string"
}
],
"name": "setBaseURI",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "proxyRegistryAddress_",
"type": "address"
}
],
"name": "setProxyRegistryAddress",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "whitelistMerkleRoot_",
"type": "bytes32"
}
],
"name": "setWhitelistMerkleRoot",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "startPublicSale",
"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": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "unpause",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "unpauseMint",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "address",
"name": "auth",
"type": "address"
}
],
"name": "update",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "wallet",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "count",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "allowance",
"type": "uint256"
},
{
"internalType": "bytes32[]",
"name": "proof",
"type": "bytes32[]"
}
],
"name": "whitelistMint",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "withdraw",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x604060a08152346200057e5762003ce8803803806200001e8162000583565b92833981019060a0818303126200057e5780516001600160401b0391908281116200057e578362000051918301620005a9565b90602091828201518481116200057e57856200006f918401620005a9565b9486830151908582116200057e576200008a918401620005a9565b6060830151956001600160a01b039384881688036200057e576080015193808516978886036200057e57845191888311620002a457600254926001968785811c9516801562000573575b8a86101462000397578190601f958681116200051c575b508a90868311600114620004b057600092620004a4575b5050600019600383901b1c191690871b176002555b8351898111620002a4576003948554908882811c9216801562000499575b8b8310146200039757818684931162000443575b508a90868311600114620003dc57600092620003d0575b505060001982871b1c191690871b1784555b600c805460ff19908116909155600e80546001600160b01b03191660109490941b62010000600160b01b0316939093179092553315620003b857600f8054336001600160a01b0319821681179092559091167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a38460105560145416601455825192878411620002a4576012548581811c91168015620003ad575b8882101462000397578281116200034b575b5086918411600114620002de57938394918492600095620002d2575b50501b92600019911b1c1916176012555b8315620002ba57608052835180850192831181841017620002a4579184528282526101f4910152607d60a21b17600055516136cc90816200061c823960805181818161110d015281816116fa0152611e300152f35b634e487b7160e01b600052604160045260246000fd5b84516302a042e760e11b815260048101859052602490fd5b0151935038806200023e565b9190601f19841692601260005284886000209460005b8a8983831062000333575050501062000318575b50505050811b016012556200024f565b01519060f884600019921b161c191690553880808062000308565b868601518955909701969485019488935001620002f4565b6012600052876000208380870160051c8201928a88106200038d575b0160051c019086905b8281106200038057505062000222565b6000815501869062000370565b9250819262000367565b634e487b7160e01b600052602260045260246000fd5b90607f169062000210565b8a51631e4fbdf760e01b815260006004820152602490fd5b01519050388062000160565b60008881528c81208b9550929190601f198516908e5b8282106200042b575050841162000412575b505050811b01845562000172565b015160001983891b60f8161c1916905538808062000404565b8385015186558d979095019493840193018e620003f2565b909150866000528a6000208680850160051c8201928d86106200048f575b918b91869594930160051c01915b8281106200047f57505062000149565b600081558594508b91016200046f565b9250819262000461565b91607f169162000135565b01519050388062000102565b90899350601f1983169160026000528c600020928d6000905b828210620005045750508411620004ea575b505050811b0160025562000117565b015160001960f88460031b161c19169055388080620004db565b8385015186558d979095019493840193018e620004c9565b90915060026000528a6000208680850160051c8201928d861062000569575b918b91869594930160051c01915b82811062000559575050620000eb565b600081558594508b910162000549565b925081926200053b565b94607f1694620000d4565b600080fd5b6040519190601f01601f191682016001600160401b03811183821017620002a457604052565b919080601f840112156200057e5782516001600160401b038111620002a457602090620005df601f8201601f1916830162000583565b928184528282870101116200057e5760005b8181106200060757508260009394955001015290565b8581018301518482018401528201620005f156fe608060408181526004918236101561001657600080fd5b600092833560e01c91826301ffc9a714611edd57508163029877b614611e08578163054f7d9c14611de457816306fdde0314611d31578163081812fc14611ce95781630922f9c5146102a6578163095ea7b314611bd45781630c1c972a14611ba7578163163e1e6114611abb57816318160ddd14611a9c5781631a8bd2da146119df57816323b872dd146119c75781632a55205a146119045781632db11544146118095781632f745c591461175457816332cb6b0c146117385781633ccfd60b146116bc5781633f4ba83a1461163957816342842e0e1461161057816342966c68146111ef5781634f6ccce714611181578163501a516214611131578163521eb273146110e057816355f804b314610f445781635a4fee3014610ebb5781635c975abb14610e9757816362a5af3b14610e615781636352211e14610e2457816366fddfa914610ce557816370a0823114610cb8578163715018a614610c385781637ad7614d14610c165781637e4831d314610bef5781638456cb5914610b9457816389cd503a14610b5c5781638da5cb5b14610b2757816395d89b4114610a3d578163a0b3039014610a1e578163a22cb4651461095a578163b44029791461093a578163b6854f96146108e3578163b88d4fde14610890578163bd32fb661461086e578163c4be5b5914610693578163c87b56dd1461065b578163cd85cdb5146105c1578163d0babf38146105a4578163d26ea6c014610539578163d283e3cc146104a7578163d2bc37f814610423578163e985e9c5146103ec578163f2fde38b14610321578163f3993d11146102ab57508063f43a22dc146102a65763fbd9b92d1461028257600080fd5b346102a257816003193601126102a25760209051669536c7089100008152f35b5080fd5b612182565b833461031e57606060031936011261031e576102c56121a3565b916102ce6121c6565b9060443567ffffffffffffffff811161031a576102ed9136910161232c565b825b8151811015610316578061031061030860019385612667565b518588612443565b016102ef565b8380f35b8380fd5b80fd5b9050346103e85760206003193601126103e85761033c6121a3565b90610345612b0d565b73ffffffffffffffffffffffffffffffffffffffff8092169283156103b9575050600f54827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b908460249251917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352820152fd5b8280fd5b5050346102a257806003193601126102a25760209061041a61040c6121a3565b6104146121c6565b90612f84565b90519015158152f35b5050346102a257816003193601126102a25761044360ff600e5416612727565b600a549060015b82811115610456578380f35b80807fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b5565720761049a6104886104a29561296c565b8651918291602080845283019061215d565b0390a261238c565b61044a565b919050346103e857806003193601126103e8576104c26121a3565b602435926fffffffffffffffffffffffffffffffff8416809403610535578361050e575073ffffffffffffffffffffffffffffffffffffffff1683526005602052822090815401905580f35b82517f59171fc1000000000000000000000000000000000000000000000000000000008152fd5b8480fd5b833461031e57602060031936011261031e576105536121a3565b61055b612b0d565b7fffffffffffffffffffff0000000000000000000000000000000000000000ffff75ffffffffffffffffffffffffffffffffffffffff0000600e549260101b16911617600e5580f35b5050346102a257816003193601126102a257602090516101f48152f35b9050346103e857826003193601126103e8576105db612b0d565b600e549160ff8360081c1661061857836101007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff851617600e5580f35b906020606492519162461bcd60e51b8352820152601f60248201527f4552433732314d696e745061757361626c653a204d696e7420706175736564006044820152fd5b82843461031e57602060031936011261031e575061067c61068f923561296c565b905191829160208352602083019061215d565b0390f35b905060606003193601126103e8578035916044359160243567ffffffffffffffff841161086a576106ca61072094369084016121e9565b94906106d4612efa565b6011956106fa606f6106f38a6011546106ee8115156123eb565b612436565b1115612539565b61071b61070f61070986613521565b33612f35565b92600d5492369161267b565b613494565b1561080157338652601360205261073a8584882054612436565b116107bf576618838370f34000908185029185830414851517156107ac5750610764903414612584565b33845260136020528320610779838254612436565b9055825b82811061078d5783600160105580f35b6001906107a661079d845461238c565b80855533612b5e565b0161077d565b856011602492634e487b7160e01b835252fd5b6020606492519162461bcd60e51b8352820152601b60248201527f457863656564732077686974656c69737420616c6c6f77616e636500000000006044820152fd5b506020608492519162461bcd60e51b8352820152602260248201527f496e76616c6964204d65726b6c6520547265652070726f6f6620737570706c6960448201527f65640000000000000000000000000000000000000000000000000000000000006064820152fd5b8580fd5b8390346102a25760206003193601126102a257610889612b0d565b35600d5580f35b8390346102a25760806003193601126102a2576108ab6121a3565b6108b36121c6565b9060643567ffffffffffffffff8111610535576108e0936108d6913691016122cd565b9160443591612798565b80f35b9050346103e85760206003193601126103e8576109347fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b5565720791359261092b60ff600e5416612727565b61067c8461296c565b0390a280f35b833461031e578060031936011261031e57610953612b0d565b80600d5580f35b919050346103e857806003193601126103e8576109756121a3565b90602435918215158093036105355773ffffffffffffffffffffffffffffffffffffffff169283156109f05750338452600760205280842083855260205280842060ff1981541660ff8416179055519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a380f35b8360249251917f5b08ba18000000000000000000000000000000000000000000000000000000008352820152fd5b5050346102a257816003193601126102a257602090600d549051908152f35b82843461031e578060031936011261031e578151918282600354610a60816123b1565b9081845260209560019187600182169182600014610b00575050600114610aa4575b50505061068f9291610a9591038561228e565b5192828493845283019061215d565b9190869350600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b828410610ae85750505082010181610a9561068f610a82565b8054848a018601528895508794909301928101610acf565b60ff19168782015293151560051b86019093019350849250610a95915061068f9050610a82565b5050346102a257816003193601126102a25760209073ffffffffffffffffffffffffffffffffffffffff600f54169051908152f35b5050346102a257816003193601126102a25760209073ffffffffffffffffffffffffffffffffffffffff600e5460101c169051908152f35b5050346102a257816003193601126102a25760207f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25891610bd2612b0d565b610bda6134eb565b600160ff19600c541617600c5551338152a180f35b5050346102a257816003193601126102a25760209060ff600e5460081c1690519015158152f35b5050346102a257816003193601126102a257602090516618838370f340008152f35b833461031e578060031936011261031e57610c51612b0d565b8073ffffffffffffffffffffffffffffffffffffffff600f547fffffffffffffffffffffffff00000000000000000000000000000000000000008116600f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b5050346102a25760206003193601126102a257602090610cde610cd96121a3565b6126c9565b9051908152f35b839150346102a257826003193601126102a25767ffffffffffffffff813581811161031a57610d1790369084016122cd565b9260243591821161031e5750610d33610d4791369084016121e9565b9190610d3f8533612f35565b92369161267b565b600d54908115610de15790610d5c9291613494565b15610d78575061068f915191829160208352602083019061215d565b608490602084519162461bcd60e51b8352820152602360248201527f496e76616c6964204d65726b6c6520547265652070726f6f6620737570706c6960448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152fd5b606484602088519162461bcd60e51b8352820152601d60248201527f57686974656c697374206d65726b6c6520726f6f74206e6f74207365740000006044820152fd5b82843461031e57602060031936011261031e575073ffffffffffffffffffffffffffffffffffffffff610e5960209335612e99565b915191168152f35b833461031e578060031936011261031e57610e7a612b0d565b600160ff19600e54610e8f60ff82161561261c565b1617600e5580f35b5050346102a257816003193601126102a25760209060ff600c541690519015158152f35b833461031e57608060031936011261031e57610ed56121a3565b610edd6121c6565b67ffffffffffffffff9360443585811161053557610efe903690830161232c565b9460643590811161053557610f15913691016122cd565b93835b8151811015610f405780610f3a87610f3260019486612667565b518688612798565b01610f18565b8480f35b833461031e576020806003193601126102a25767ffffffffffffffff90833582811161031a57610f7790369086016122cd565b93610f80612b0d565b610f8f60ff600e54161561261c565b84519283116110cd5750610fa46012546123b1565b601f811161106a575b50602090601f8311600114610fe957508293829392610fde575b50506000198260011b9260031b1c19161760125580f35b015190508380610fc7565b90601f19831694601285527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34449285905b878210611052575050836001959610611039575b505050811b0160125580f35b015160001960f88460031b161c1916905583808061102d565b80600185968294968601518155019501930190611019565b601284527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444601f840160051c810191602085106110c3575b601f0160051c01905b8181106110b85750610fad565b8481556001016110ab565b90915081906110a2565b836041602492634e487b7160e01b835252fd5b5050346102a257816003193601126102a2576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5050346102a25760606003193601126102a25761114c6121a3565b916044359273ffffffffffffffffffffffffffffffffffffffff91828516850361031e5750602093610e599160243590613079565b9050346103e85760206003193601126103e857803592600a548410156111bb576020836111ad866125cf565b91905490519160031b1c8152f35b604493919251927fa57d13dc0000000000000000000000000000000000000000000000000000000084528301526024820152fd5b919050346103e8576020908160031936011261031a57823560ff600e5416806115bf575b5061121c6134eb565b80855283835273ffffffffffffffffffffffffffffffffffffffff908183872054169133151590816114f9575b505081159182158093816114a9575b8389528787528589207fffffffffffffffffffffffff000000000000000000000000000000000000000081541690558389847fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a415611439575050600a54818752600b8552808488205568010000000000000000811015611426576113006112e9826001859401600a556125cf565b81939154906000199060031b92831b921b19161790565b90555b600a54906000199182810190811161141357818852600b865261132985892054916125cf565b90549060031b1c8061133d6112e9846125cf565b90558852600b86528488205586528583812055600a54801561140057810190611365826125cf565b909182549160031b1b19169055600a5560ff600e5460081c16159081156113f8575b5015611391578380f35b60849350519162461bcd60e51b8352820152602760248201527f4552433732314d696e745061757361626c653a204d696e74696e67206973206460448201527f697361626c6564000000000000000000000000000000000000000000000000006064820152fd5b905038611387565b602487603188634e487b7160e01b835252fd5b602488601189634e487b7160e01b835252fd5b602487604188634e487b7160e01b835252fd5b611444575b50611303565b61144d816126c9565b82885260098652848820549188526008865284882091818103611487575b508288526009865287858120558752845285838120553861143e565b81895282875285892054818a5280878b2055895260098752858920553861146b565b6114e284600052600660205260406000207fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055565b828952600587528589206000198154019055611258565b8161157d575b501561150c573880611249565b939250611541579160249251917f7e273289000000000000000000000000000000000000000000000000000000008352820152fd5b517f177e802f00000000000000000000000000000000000000000000000000000000815233918101918252602082019290925281906040010390fd5b338414915081156115ad575b8115611597575b50386114ff565b8288526006865284882054163314905038611590565b90506115b93384612f84565b90611589565b6115c890612727565b807fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b556572076116076115f68361296c565b85519182918883528883019061215d565b0390a238611213565b5050346102a2576108e0906116243661221a565b919251926116318461225c565b858452612798565b9050346103e857826003193601126103e857611653612b0d565b600c549060ff82161561169557507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9160ff1960209216600c5551338152a180f35b82517f8dfc202b000000000000000000000000000000000000000000000000000000008152fd5b5050346102a257816003193601126102a2576116d6612b0d565b818080804781811561172f575b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690f115611725575080f35b51903d90823e3d90fd5b506108fc6116e3565b5050346102a257816003193601126102a25760209051606f8152f35b82843461031e578160031936011261031e5761176e6121a3565b926024359061177c856126c9565b8210156117b7575090829173ffffffffffffffffffffffffffffffffffffffff60209516825260088552828220908252845220549051908152f35b92517fa57d13dc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90941692840192835260208301525081906040010390fd5b91905060206003193601126103e857813591611823612efa565b61182f600d54156124ee565b61183d60ff601454166124ee565b601191611857606f6106f3866011546106ee8115156123eb565b60058410156118c15750669536c708910000908184029184830414841517156118ae5750611886903414612584565b825b8281106118985783600160105580f35b6001906118a861079d845461238c565b01611888565b846011602492634e487b7160e01b835252fd5b906020606492519162461bcd60e51b8352820152601b60248201527f45786365656473206d617820706572207472616e73616374696f6e00000000006044820152fd5b82843461031e578160031936011261031e5760243591833582526001602052808220549173ffffffffffffffffffffffffffffffffffffffff8084169360a01c9084156119a9575b506bffffffffffffffffffffffff169384810294818604149015171561199657815173ffffffffffffffffffffffffffffffffffffffff8416815261271085046020820152604090f35b80601186634e487b7160e01b6024945252fd5b8254908116945060a01c90506bffffffffffffffffffffffff61194c565b833461031e576108e06119d93661221a565b91612443565b9050346103e857826003193601126103e8576119f9612b0d565b600e549160ff8360081c1615611a3357837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff8416600e5580f35b906020608492519162461bcd60e51b8352820152602360248201527f4552433732314d696e745061757361626c653a204d696e74206e6f742070617560448201527f73656400000000000000000000000000000000000000000000000000000000006064820152fd5b5050346102a257816003193601126102a257602090600a549051908152f35b9050346103e85760206003193601126103e857803567ffffffffffffffff811161031a57611aec90369083016121e9565b91611af5612b0d565b601193606f611b0c856011546106ee8115156123eb565b11611b64575050835b828110611b20578480f35b8060051b8201359073ffffffffffffffffffffffffffffffffffffffff8216820361086a57611b5e600192611b55875461238c565b90818855612b5e565b01611b15565b906020606492519162461bcd60e51b8352820152601260248201527f45786365646573206d617820737570706c7900000000000000000000000000006044820152fd5b833461031e578060031936011261031e57611bc0612b0d565b80600d55600160ff19601454161760145580f35b919050346103e857806003193601126103e857611bef6121a3565b9160243590611bfd82612e99565b9033151580611cc9575b80611cb8575b611c885750819073ffffffffffffffffffffffffffffffffffffffff809516948591167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258780a4835260066020528220907fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905580f35b6024908451907fa9fbf51f0000000000000000000000000000000000000000000000000000000082523390820152fd5b50611cc33383612f84565b15611c0d565b503373ffffffffffffffffffffffffffffffffffffffff83161415611c07565b9050346103e85760206003193601126103e8578160209373ffffffffffffffffffffffffffffffffffffffff9235611d2081612e99565b508152600685522054169051908152f35b82843461031e578060031936011261031e578151918282600254611d54816123b1565b9081845260209560019187600182169182600014610b00575050600114611d885750505061068f9291610a9591038561228e565b9190869350600283527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5b828410611dcc5750505082010181610a9561068f610a82565b8054848a018601528895508794909301928101611db3565b5050346102a257816003193601126102a25760209060ff600e541690519015158152f35b9050346103e857826003193601126103e857611e22612b0d565b601191601154611e9a5750507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169060015b6005811115611e76578380f35b611e9590611e90611e87845461238c565b80855585612b5e565b61238c565b611e69565b906020606492519162461bcd60e51b8352820152601a60248201527f526573657276657320616c726561647920636f6c6c65637465640000000000006044820152fd5b8491346103e85760206003193601126103e857357fffffffff0000000000000000000000000000000000000000000000000000000081168091036103e857602092507f0e083076000000000000000000000000000000000000000000000000000000008114908115612110575b81156120e6575b81156120bc575b8115612092575b8115612068575b8115611f74575b5015158152f35b7f780e9d6300000000000000000000000000000000000000000000000000000000811491508115611fa7575b5083611f6d565b7f80ac58cd0000000000000000000000000000000000000000000000000000000081149150811561203e575b8115611fe1575b5083611fa0565b7f2a55205a00000000000000000000000000000000000000000000000000000000811491508115612014575b5083611fda565b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150148361200d565b7f5b5e139f0000000000000000000000000000000000000000000000000000000081149150611fd3565b7f7e4831d30000000000000000000000000000000000000000000000000000000081149150611f66565b7f617605f20000000000000000000000000000000000000000000000000000000081149150611f5f565b7fc64edc390000000000000000000000000000000000000000000000000000000081149150611f58565b7f79f154c40000000000000000000000000000000000000000000000000000000081149150611f51565b7f42966c680000000000000000000000000000000000000000000000000000000081149150611f4a565b60005b83811061214d5750506000910152565b818101518382015260200161213d565b90601f19601f60209361217b8151809281875287808801910161213a565b0116010190565b3461219e57600060031936011261219e57602060405160058152f35b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361219e57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361219e57565b9181601f8401121561219e5782359167ffffffffffffffff831161219e576020808501948460051b01011161219e57565b600319606091011261219e5773ffffffffffffffffffffffffffffffffffffffff90600435828116810361219e5791602435908116810361219e579060443590565b6020810190811067ffffffffffffffff82111761227857604052565b634e487b7160e01b600052604160045260246000fd5b90601f601f19910116810190811067ffffffffffffffff82111761227857604052565b67ffffffffffffffff811161227857601f01601f191660200190565b81601f8201121561219e578035906122e4826122b1565b926122f2604051948561228e565b8284526020838301011161219e57816000926020809301838601378301015290565b67ffffffffffffffff81116122785760051b60200190565b9080601f8301121561219e57602090823561234681612314565b93612354604051958661228e565b81855260208086019260051b82010192831161219e57602001905b82821061237d575050505090565b8135815290830190830161236f565b600019811461239b5760010190565b634e487b7160e01b600052601160045260246000fd5b90600182811c921680156123e1575b60208310146123cb57565b634e487b7160e01b600052602260045260246000fd5b91607f16916123c0565b156123f257565b606460405162461bcd60e51b815260206004820152601660248201527f5265736572766573206e6f742074616b656e20796574000000000000000000006044820152fd5b9190820180921161239b57565b919073ffffffffffffffffffffffffffffffffffffffff90818116156124bd576124708291843391613079565b931692169082820361248157505050565b60649350604051927f64283d7b000000000000000000000000000000000000000000000000000000008452600484015260248301526044820152fd5b60246040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260006004820152fd5b156124f557565b606460405162461bcd60e51b815260206004820152601660248201527f5075626c69632073616c65206e6f7420616374697665000000000000000000006044820152fd5b1561254057565b606460405162461bcd60e51b815260206004820152601260248201527f45786365656473206d617820737570706c7900000000000000000000000000006044820152fd5b1561258b57565b606460405162461bcd60e51b815260206004820152601660248201527f496e76616c69642066756e64732070726f7669646564000000000000000000006044820152fd5b600a5481101561260657600a6000527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80190600090565b634e487b7160e01b600052603260045260246000fd5b1561262357565b606460405162461bcd60e51b815260206004820152601e60248201527f455243373231467265657a61626c653a205552492069732066726f7a656e00006044820152fd5b80518210156126065760209160051b010190565b929161268682612314565b91612694604051938461228e565b829481845260208094019160051b810192831161219e57905b8282106126ba5750505050565b813581529083019083016126ad565b73ffffffffffffffffffffffffffffffffffffffff1680156126f657600052600560205260406000205490565b60246040517f89c62b6400000000000000000000000000000000000000000000000000000000815260006004820152fd5b1561272e57565b608460405162461bcd60e51b815260206004820152602260248201527f455243373231467265657a61626c653a20555249206973206e6f742066726f7a60448201527f656e0000000000000000000000000000000000000000000000000000000000006064820152f