[ { "inputs": [ { "internalType": "address", "name": "_admin", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "type": "error" }, { "inputs": [], "name": "MintERC2309QuantityExceedsLimit", "type": "error" }, { "inputs": [], "name": "MintToZeroAddress", "type": "error" }, { "inputs": [], "name": "MintZeroQuantity", "type": "error" }, { "inputs": [], "name": "NotCompatibleWithSpotMints", "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": "OwnerQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "OwnershipNotInitializedForExtraData", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [], "name": "SequentialMintExceedsLimit", "type": "error" }, { "inputs": [], "name": "SequentialUpToTooSmall", "type": "error" }, { "inputs": [], "name": "SpotMintTokenIdTooSmall", "type": "error" }, { "inputs": [], "name": "TokenAlreadyExists", "type": "error" }, { "inputs": [], "name": "TransferCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "TransferFromIncorrectOwner", "type": "error" }, { "inputs": [], "name": "TransferToNonERC721ReceiverImplementer", "type": "error" }, { "inputs": [], "name": "TransferToZeroAddress", "type": "error" }, { "inputs": [], "name": "URIQueryForNonexistentToken", "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": "uint256", "name": "fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "toTokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "ConsecutiveTransfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "buyer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "HeraldryFreeMint", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "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": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_baseUri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "payable", "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": "", "type": "uint256" } ], "name": "belongingRealm", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "enabled", "type": "bool" } ], "name": "enableMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "getUserTokens", "outputs": [ { "internalType": "uint256[]", "name": "tokens", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "heraldrySupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "heraldrySupplyGap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": [ { "internalType": "uint256", "name": "realmId", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "mintEnabled", "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": "nftMaxAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "callerConfirmation", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "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": "payable", "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": "payable", "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": "uri", "type": "string" } ], "name": "setBaseUri", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_heraldrySupplyGap", "type": "uint256" } ], "name": "setHeraldrySupplyGap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_nftMaxAmount", "type": "uint256" } ], "name": "setSuuply", "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": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "result", "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": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "usersHeraldryCollection", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "withdrawerAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
611388600c556005600d5561012060405260726080818152906200225560a039600f906200002e9082620002d3565b503480156200003b575f80fd5b50604051620022c7380380620022c78339810160408190526200005e916200039b565b604080518082018252600c8082526b2422a920a622292c9918a12560a11b602080840182905284518086019095529184529083015290826001600160a01b038116620000c357604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000ce8162000134565b506003620000dd8382620002d3565b506004620000ec8282620002d3565b50506001808055600a5550620001035f8262000183565b50600e80546001600160a01b0319166001600160a01b03929092169190911790556010805460ff19169055620003ca565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f828152600b602090815260408083206001600160a01b038516845290915281205460ff166200022a575f838152600b602090815260408083206001600160a01b03861684529091529020805460ff19166001179055620001e13390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016200022d565b505f5b92915050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200025c57607f821691505b6020821081036200027b57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620002ce575f81815260208120601f850160051c81016020861015620002a95750805b601f850160051c820191505b81811015620002ca57828155600101620002b5565b5050505b505050565b81516001600160401b03811115620002ef57620002ef62000233565b620003078162000300845462000247565b8462000281565b602080601f8311600181146200033d575f8415620003255750858301515b5f19600386901b1c1916600185901b178555620002ca565b5f85815260208120601f198616915b828110156200036d578886015182559484019460019091019084016200034c565b50858210156200038b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60208284031215620003ac575f80fd5b81516001600160a01b0381168114620003c3575f80fd5b9392505050565b611e7d80620003d85f395ff3fe608060405260043610610220575f3560e01c80638da5cb5b1161011e578063b88d4fde116100a8578063d547741f1161006d578063d547741f14610618578063df708a3714610637578063e985e9c514610656578063f2fde38b1461069d578063f832b084146106bc575f80fd5b8063b88d4fde1461058f578063bd6ff975146105a2578063c68b3305146105c1578063c87b56dd146105e0578063d1239730146105ff575f80fd5b8063a0bcfc7f116100ee578063a0bcfc7f146104dd578063a217fddf146104fc578063a22cb4651461050f578063a23843521461052e578063b2f7a09414610564575f80fd5b80638da5cb5b1461047b57806391d148541461049757806395d89b41146104b6578063a0712d68146104ca575f80fd5b806336568abe116101aa578063519dc8d21161016f578063519dc8d2146103e85780636352211e1461041457806370a0823114610433578063715018a6146104525780637cc8bfb414610466575f80fd5b806336568abe146103795780633ccfd60b146103985780633e63eb2a146103ac57806342842e0e146103c05780634fff6ae5146103d3575f80fd5b806317142968116101f057806317142968146102cc57806318160ddd1461030557806323b872dd14610319578063248a9ca31461032c5780632f2ff15d1461035a575f80fd5b806301ffc9a71461022b57806306fdde031461025f578063081812fc14610280578063095ea7b3146102b7575f80fd5b3661022757005b5f80fd5b348015610236575f80fd5b5061024a6102453660046118a6565b6106db565b60405190151581526020015b60405180910390f35b34801561026a575f80fd5b506102736106eb565b6040516102569190611915565b34801561028b575f80fd5b5061029f61029a366004611927565b61077b565b6040516001600160a01b039091168152602001610256565b6102ca6102c5366004611954565b6107b4565b005b3480156102d7575f80fd5b506102f76102e6366004611927565b60126020525f908152604090205481565b604051908152602001610256565b348015610310575f80fd5b506102f76107c4565b6102ca61032736600461197c565b6107d1565b348015610337575f80fd5b506102f7610346366004611927565b5f908152600b602052604090206001015490565b348015610365575f80fd5b506102ca6103743660046119b5565b61092c565b348015610384575f80fd5b506102ca6103933660046119b5565b610956565b3480156103a3575f80fd5b506102ca61098e565b3480156103b7575f80fd5b506102736109ce565b6102ca6103ce36600461197c565b610a5a565b3480156103de575f80fd5b506102f7600c5481565b3480156103f3575f80fd5b506104076104023660046119df565b610a74565b60405161025691906119f8565b34801561041f575f80fd5b5061029f61042e366004611927565b610b3e565b34801561043e575f80fd5b506102f761044d3660046119df565b610b48565b34801561045d575f80fd5b506102ca610b8c565b348015610471575f80fd5b506102f7600d5481565b348015610486575f80fd5b505f546001600160a01b031661029f565b3480156104a2575f80fd5b5061024a6104b13660046119b5565b610b9f565b3480156104c1575f80fd5b50610273610bc9565b6102ca6104d8366004611927565b610bd8565b3480156104e8575f80fd5b506102ca6104f7366004611ac2565b610e7a565b348015610507575f80fd5b506102f75f81565b34801561051a575f80fd5b506102ca610529366004611b16565b610e90565b348015610539575f80fd5b506102f7610548366004611954565b601360209081525f928352604080842090915290825290205481565b34801561056f575f80fd5b506102f761057e366004611927565b60116020525f908152604090205481565b6102ca61059d366004611b3e565b610efb565b3480156105ad575f80fd5b506102ca6105bc366004611927565b610f36565b3480156105cc575f80fd5b506102ca6105db366004611bb5565b610f46565b3480156105eb575f80fd5b506102736105fa366004611927565b610f64565b34801561060a575f80fd5b5060105461024a9060ff1681565b348015610623575f80fd5b506102ca6106323660046119b5565b611019565b348015610642575f80fd5b50600e5461029f906001600160a01b031681565b348015610661575f80fd5b5061024a610670366004611bce565b6001600160a01b039182165f90815260086020908152604080832093909416825291909152205460ff1690565b3480156106a8575f80fd5b506102ca6106b73660046119df565b61103d565b3480156106c7575f80fd5b506102ca6106d6366004611927565b611077565b5f6106e5826110f2565b92915050565b6060600380546106fa90611bf6565b80601f016020809104026020016040519081016040528092919081815260200182805461072690611bf6565b80156107715780601f1061074857610100808354040283529160200191610771565b820191905f5260205f20905b81548152906001019060200180831161075457829003601f168201915b5050505050905090565b5f61078582611126565b610799576107996333d1c03960e21b611171565b505f908152600760205260409020546001600160a01b031690565b6107c082826001611179565b5050565b600254600154035f190190565b5f6107db8261121a565b6001600160a01b0394851694909150811684146108015761080162a1148160e81b611171565b5f8281526007602052604090208054338082146001600160a01b03881690911417610844576108308633610670565b61084457610844632ce44b5f60e11b611171565b801561084e575f82555b6001600160a01b038681165f9081526006602052604080822080545f19019055918716808252919020805460010190554260a01b17600160e11b175f85815260056020526040812091909155600160e11b841690036108db57600184015f8181526005602052604081205490036108d95760015481146108d9575f8181526005602052604090208490555b505b6001600160a01b0385168481887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4805f0361092357610923633a954ecd60e21b611171565b50505050505050565b5f828152600b6020526040902060010154610946816112b4565b61095083836112be565b50505050565b6001600160a01b038116331461097f5760405163334bd91960e11b815260040160405180910390fd5b610989828261134f565b505050565b5f610998816112b4565b600e546040516001600160a01b03909116904780156108fc02915f818181858888f193505050501580156107c0573d5f803e3d5ffd5b600f80546109db90611bf6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0790611bf6565b8015610a525780601f10610a2957610100808354040283529160200191610a52565b820191905f5260205f20905b815481529060010190602001808311610a3557829003601f168201915b505050505081565b61098983838360405180602001604052805f815250610efb565b60605f610a8083610b48565b90505f8167ffffffffffffffff811115610a9c57610a9c611a3b565b604051908082528060200260200182016040528015610ac5578160200160208202803683370190505b50905060015b610ad36107c4565b8111610b3657846001600160a01b0316610aec82610b3e565b6001600160a01b031603610b24578082610b07600183611c42565b81518110610b1757610b17611c55565b6020026020010181815250505b610b2f600182611c69565b9050610acb565b509392505050565b5f6106e58261121a565b5f6001600160a01b038216610b6757610b676323d3ad8160e21b611171565b506001600160a01b03165f9081526006602052604090205467ffffffffffffffff1690565b610b946113ba565b610b9d5f6113e6565b565b5f918252600b602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600480546106fa90611bf6565b610be0611435565b60018110158015610bf2575060048111155b610c435760405162461bcd60e51b815260206004820181905260248201527f5265616c6d204944206d757374206265206265747765656e203120616e64203460448201526064015b60405180910390fd5b60105460ff16610c8b5760405162461bcd60e51b8152602060048201526013602482015272135a5b9d081a5cc81b9bdd08195b98589b1959606a1b6044820152606401610c3a565b600c54610c966107c4565b10610cef5760405162461bcd60e51b8152602060048201526024808201527f4e66747320666f72207468697320706861736520617265206f7574206f662073604482015263746f636b60e01b6064820152608401610c3a565b335f90815260136020908152604080832084845290915290205415610d655760405162461bcd60e51b815260206004820152602660248201527f557365722072656163686564206d617820616d6f756e7420666f722074686973604482015265207265616c6d60d01b6064820152608401610c3a565b610d6e8161145f565b610dba5760405162461bcd60e51b815260206004820152601b60248201527f486572616c64727920737570706c7920676170206e6f74206d657400000000006044820152606401610c3a565b610dc53360016114cd565b7f4d716488b70a15b44134b43cf703df673ebe71d21c3bc172a515230e1795199433610def6107c4565b604080516001600160a01b03909316835260208301919091520160405180910390a18060115f610e1d6107c4565b815260208082019290925260409081015f90812093909355338352601382528083208484528252808320600190819055601290925290912054610e5f91611c69565b5f82815260126020526040902055610e776001600a55565b50565b5f610e84816112b4565b600f6109898382611cc9565b335f8181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610f068484846107d1565b6001600160a01b0383163b1561095057610f22848484846114e6565b610950576109506368d2bf6b60e11b611171565b5f610f40816112b4565b50600d55565b5f610f50816112b4565b506010805460ff1916911515919091179055565b6060610f6f82611126565b610fd35760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610c3a565b610fdb6115c5565b5f83815260116020526040902054610ff2906115d4565b604051602001611003929190611d85565b6040516020818303038152906040529050919050565b5f828152600b6020526040902060010154611033816112b4565b610950838361134f565b6110456113ba565b6001600160a01b03811661106e57604051631e4fbdf760e01b81525f6004820152602401610c3a565b610e77816113e6565b5f611081816112b4565b8161108a6107c4565b11156110ec5760405162461bcd60e51b815260206004820152602b60248201527f4e6577206d617820737570706c79206d7573742062652067726561746572207460448201526a1a185b8818dd5c9c9958dd60aa1b6064820152608401610c3a565b50600c55565b5f6001600160e01b03198216637965db0b60e01b14806106e557506301ffc9a760e01b6001600160e01b03198316146106e5565b5f8160011161116c5760015482101561116c575f5b505f82815260056020526040812054908190036111625761115b83611dc3565b925061113b565b600160e01b161590505b919050565b805f5260045ffd5b5f61118383610b3e565b905081801561119b5750336001600160a01b03821614155b156111be576111aa8133610670565b6111be576111be6367d9dca160e11b611171565b5f8381526007602052604080822080546001600160a01b0319166001600160a01b0388811691821790925591518693918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a450505050565b5f816001116112a457505f81815260056020526040902054805f0361129257600154821061125257611252636f96cda160e11b611171565b5b505f19015f81815260056020526040902054801561125357600160e01b81165f0361127d57919050565b61128d636f96cda160e11b611171565b611253565b600160e01b81165f036112a457919050565b61116c636f96cda160e11b611171565b610e778133611664565b5f6112c98383610b9f565b611348575f838152600b602090815260408083206001600160a01b03861684529091529020805460ff191660011790556113003390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016106e5565b505f6106e5565b5f61135a8383610b9f565b15611348575f838152600b602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016106e5565b5f546001600160a01b03163314610b9d5760405163118cdaa760e01b8152336004820152602401610c3a565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6002600a540361145857604051633ee5aeb560e01b815260040160405180910390fd5b6002600a55565b5f81815260126020526040812054808360015b600481116114b5575f818152601260205260409020548411156114a3575f8181526012602052604090205492509050805b806114ad81611dd8565b915050611472565b50600d546114c38385611c42565b1095945050505050565b6107c0828260405180602001604052805f81525061169d565b604051630a85bd0160e11b81525f906001600160a01b0385169063150b7a029061151a903390899088908890600401611df0565b6020604051808303815f875af1925050508015611554575060408051601f3d908101601f1916820190925261155191810190611e2c565b60015b6115a7573d808015611581576040519150601f19603f3d011682016040523d82523d5f602084013e611586565b606091505b5080515f0361159f5761159f6368d2bf6b60e11b611171565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600f80546106fa90611bf6565b60605f6115e0836116ff565b60010190505f8167ffffffffffffffff8111156115ff576115ff611a3b565b6040519080825280601f01601f191660200182016040528015611629576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461163357509392505050565b61166e8282610b9f565b6107c05760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610c3a565b6116a783836117d6565b6001600160a01b0383163b15610989576001548281035b6116d05f8683806001019450866114e6565b6116e4576116e46368d2bf6b60e11b611171565b8181106116be5781600154146116f8575f80fd5b5050505050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061173d5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611769576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061178757662386f26fc10000830492506010015b6305f5e100831061179f576305f5e100830492506008015b61271083106117b357612710830492506004015b606483106117c5576064830492506002015b600a83106106e55760010192915050565b6001545f8290036117f1576117f163b562e8dd60e01b611171565b5f8181526005602090815260408083206001600160a01b0387164260a01b6001881460e11b1781179091558084526006909252822080546801000000000000000186020190559081900361184e5761184e622e076360e81b611171565b818301825b80835f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef5f80a4818160010191508103611853575060015550505050565b6001600160e01b031981168114610e77575f80fd5b5f602082840312156118b6575f80fd5b81356118c181611891565b9392505050565b5f5b838110156118e25781810151838201526020016118ca565b50505f910152565b5f81518084526119018160208601602086016118c8565b601f01601f19169290920160200192915050565b602081525f6118c160208301846118ea565b5f60208284031215611937575f80fd5b5035919050565b80356001600160a01b038116811461116c575f80fd5b5f8060408385031215611965575f80fd5b61196e8361193e565b946020939093013593505050565b5f805f6060848603121561198e575f80fd5b6119978461193e565b92506119a56020850161193e565b9150604084013590509250925092565b5f80604083850312156119c6575f80fd5b823591506119d66020840161193e565b90509250929050565b5f602082840312156119ef575f80fd5b6118c18261193e565b602080825282518282018190525f9190848201906040850190845b81811015611a2f57835183529284019291840191600101611a13565b50909695505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f67ffffffffffffffff80841115611a6957611a69611a3b565b604051601f8501601f19908116603f01168101908282118183101715611a9157611a91611a3b565b81604052809350858152868686011115611aa9575f80fd5b858560208301375f602087830101525050509392505050565b5f60208284031215611ad2575f80fd5b813567ffffffffffffffff811115611ae8575f80fd5b8201601f81018413611af8575f80fd5b6115bd84823560208401611a4f565b8035801515811461116c575f80fd5b5f8060408385031215611b27575f80fd5b611b308361193e565b91506119d660208401611b07565b5f805f8060808587031215611b51575f80fd5b611b5a8561193e565b9350611b686020860161193e565b925060408501359150606085013567ffffffffffffffff811115611b8a575f80fd5b8501601f81018713611b9a575f80fd5b611ba987823560208401611a4f565b91505092959194509250565b5f60208284031215611bc5575f80fd5b6118c182611b07565b5f8060408385031215611bdf575f80fd5b611be88361193e565b91506119d66020840161193e565b600181811c90821680611c0a57607f821691505b602082108103611c2857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106e5576106e5611c2e565b634e487b7160e01b5f52603260045260245ffd5b808201808211156106e5576106e5611c2e565b601f821115610989575f81815260208120601f850160051c81016020861015611ca25750805b601f850160051c820191505b81811015611cc157828155600101611cae565b505050505050565b815167ffffffffffffffff811115611ce357611ce3611a3b565b611cf781611cf18454611bf6565b84611c7c565b602080601f831160018114611d2a575f8415611d135750858301515b5f19600386901b1c1916600185901b178555611cc1565b5f85815260208120601f198616915b82811015611d5857888601518255948401946001909101908401611d39565b5085821015611d7557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f8351611d968184602088016118c8565b835190830190611daa8183602088016118c8565b64173539b7b760d91b9101908152600501949350505050565b5f81611dd157611dd1611c2e565b505f190190565b5f60018201611de957611de9611c2e565b5060010190565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90611e22908301846118ea565b9695505050505050565b5f60208284031215611e3c575f80fd5b81516118c18161189156fea2646970667358221220568c4a6888d791b079e20dc96ffbb4242944f675f515ace2d9621d2248b3df1a64736f6c6343000814003368747470733a2f2f77686974652d61636365707465642d6d61726c696e2d3838352e6d7970696e6174612e636c6f75642f697066732f6261667962656965747a6735707a746d34336276706862726963356c6b32326f7636696163647269616871343633716f72636536736c3774726e692f000000000000000000000000c1ff4ac7ca4c6d959a453811534b7d3963d00b81