[ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "AdminApproved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "AdminRevoked", "type": "event" }, { "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": "extension", "type": "address" } ], "name": "ApproveTransferUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address payable[]", "name": "receivers", "type": "address[]" }, { "indexed": false, "internalType": "uint256[]", "name": "basisPoints", "type": "uint256[]" } ], "name": "DefaultRoyaltiesUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "extension", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "enabled", "type": "bool" } ], "name": "ExtensionApproveTransferUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "extension", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "ExtensionBlacklisted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "extension", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "ExtensionRegistered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "extension", "type": "address" }, { "indexed": false, "internalType": "address payable[]", "name": "receivers", "type": "address[]" }, { "indexed": false, "internalType": "uint256[]", "name": "basisPoints", "type": "uint256[]" } ], "name": "ExtensionRoyaltiesUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "extension", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "ExtensionUnregistered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "extension", "type": "address" }, { "indexed": true, "internalType": "address", "name": "permissions", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "MintPermissionsUpdated", "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": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "address payable[]", "name": "receivers", "type": "address[]" }, { "indexed": false, "internalType": "uint256[]", "name": "basisPoints", "type": "uint256[]" } ], "name": "RoyaltiesUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldTotalSupply", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newTotalSupply", "type": "uint256" } ], "name": "TotalSupplyUpdated", "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": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "UserApproved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "UserRevoked", "type": "event" }, { "inputs": [], "name": "VERSION", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_getInitializedVersion", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "_isInitializing", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": "admin", "type": "address" } ], "name": "approveAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "approveUser", "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": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getAdmins", "outputs": [ { "internalType": "address[]", "name": "admins", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getApproveTransfer", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getExtensions", "outputs": [ { "internalType": "address[]", "name": "extensions", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getFeeBps", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getFeeRecipients", "outputs": [ { "internalType": "address payable[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getFees", "outputs": [ { "internalType": "address payable[]", "name": "", "type": "address[]" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getRoyalties", "outputs": [ { "internalType": "address payable[]", "name": "", "type": "address[]" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getUsers", "outputs": [ { "internalType": "address[]", "name": "users", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "uint256", "name": "_totalsupply", "type": "uint256" }, { "internalType": "bool", "name": "_UserRestrictions", "type": "bool" }, { "internalType": "address[]", "name": "_allowedUsers", "type": "address[]" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "admin", "type": "address" } ], "name": "isAdmin", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": "address", "name": "user", "type": "address" } ], "name": "isUser", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isUserRestricted", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "mintBase", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "mintBase", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "mintBaseBatch", "outputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint16", "name": "count", "type": "uint16" } ], "name": "mintBaseBatch", "outputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "mintExtension", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint80", "name": "data", "type": "uint80" } ], "name": "mintExtension", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "mintExtension", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "mintExtensionBatch", "outputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint80[]", "name": "data", "type": "uint80[]" } ], "name": "mintExtensionBatch", "outputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint16", "name": "count", "type": "uint16" } ], "name": "mintExtensionBatch", "outputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "stateMutability": "nonpayable", "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": [ { "internalType": "address", "name": "extension", "type": "address" }, { "internalType": "string", "name": "baseURI", "type": "string" } ], "name": "registerExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "extension", "type": "address" }, { "internalType": "string", "name": "baseURI", "type": "string" }, { "internalType": "bool", "name": "baseURIIdentical", "type": "bool" } ], "name": "registerExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "admin", "type": "address" } ], "name": "revokeAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "revokeUser", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "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": "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": "address", "name": "extension", "type": "address" } ], "name": "setApproveTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "enabled", "type": "bool" } ], "name": "setApproveTransferExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setBaseTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setBaseTokenURIExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" }, { "internalType": "bool", "name": "identical", "type": "bool" } ], "name": "setBaseTokenURIExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "extension", "type": "address" }, { "internalType": "address", "name": "permissions", "type": "address" } ], "name": "setMintPermissions", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address payable[]", "name": "receivers", "type": "address[]" }, { "internalType": "uint256[]", "name": "basisPoints", "type": "uint256[]" } ], "name": "setRoyalties", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address payable[]", "name": "receivers", "type": "address[]" }, { "internalType": "uint256[]", "name": "basisPoints", "type": "uint256[]" } ], "name": "setRoyalties", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "setTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "setTokenURIExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setTokenURIExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "prefix", "type": "string" } ], "name": "setTokenURIPrefix", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "prefix", "type": "string" } ], "name": "setTokenURIPrefixExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "restricted", "type": "bool" } ], "name": "setUserRestriction", "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": "tokenData", "outputs": [ { "internalType": "uint80", "name": "", "type": "uint80" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenExtension", "outputs": [ { "internalType": "address", "name": "extension", "type": "address" } ], "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": [ { "internalType": "address", "name": "extension", "type": "address" } ], "name": "unregisterExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_newTotalSupply", "type": "uint256" } ], "name": "updateTotalSupply", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
6080604052600060715560006082553480156200001b57600080fd5b5060016065556200002b62000031565b620000f2565b600054610100900460ff16156200009e5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000f0576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b615bd580620001026000396000f3fe608060405234801561001057600080fd5b50600436106104065760003560e01c806369dc069311610220578063b4b5b48f11610130578063e00aab4b116100b8578063f0cdc49911610087578063f0cdc4991461093a578063f2fde38b1461094d578063f6708fc714610960578063fe2e1f5814610973578063ffa1ad741461098657600080fd5b8063e00aab4b146108ee578063e92a89f614610901578063e985e9c514610914578063ef097fc41461092757600080fd5b8063c87b56dd116100ff578063c87b56dd146108a2578063ce8aee9d146108b5578063d3973719146108c8578063d5a06d4c14610881578063d624fdb6146108db57600080fd5b8063b4b5b48f146107fd578063b88d4fde1461084e578063b9c4d9fb14610861578063bb3bafd61461088157600080fd5b806383b7db63116101b357806399e0dd7c1161018257806399e0dd7c1461079e578063a22cb465146107b1578063aafb2d44146107c4578063ac0c8cfa146107d7578063ad2d0ddd146107ea57600080fd5b806383b7db631461076d5780638da5cb5b146107755780638f44d3b01461078657806395d89b411461079657600080fd5b806372ff03d3116101ef57806372ff03d3146107215780637884af44146107345780637aa15f161461074757806382dcc0c81461075a57600080fd5b806369dc0693146106de5780636d73e669146106f357806370a0823114610706578063715018a61461071957600080fd5b80633071a0f91161031b57806342842e0e116102ae5780636352211e1161027d5780636352211e1461068757806364d240251461069a57806366d1e9d0146106ad57806366d49bab146106c0578063694692eb146106d357600080fd5b806342842e0e1461063b57806342966c681461064e578063596798ad1461066157806361e5bc6b1461067457600080fd5b80633e6134b8116102ea5780633e6134b8146105ef5780633f0f37f6146106025780634209fff1146106155780634278330e1461062857600080fd5b80633071a0f9146105ae57806331ae450b146105c1578063332dd1ae146105c957806338e52e78146105dc57600080fd5b806320e4afe21161039e57806324d7806c1161036d57806324d7806c146105305780632928ca58146105435780632a55205a146105565780632d3456701461058857806330176e131461059b57600080fd5b806320e4afe2146104e657806322f374d0146104f9578063239be3171461050a57806323b872dd1461051d57600080fd5b8063095ea7b3116103da578063095ea7b31461048c5780630ebd4c7f146104a1578063162094c4146104c157806318160ddd146104d457600080fd5b8062ce8e3e1461040b57806301ffc9a71461042957806306fdde031461044c578063081812fc14610461575b600080fd5b61041361098e565b6040516104209190614a4f565b60405180910390f35b61043c610437366004614ab2565b610a3c565b6040519015158152602001610420565b610454610a6b565b6040516104209190614b1f565b61047461046f366004614b32565b610afd565b6040516001600160a01b039091168152602001610420565b61049f61049a366004614b60565b610b24565b005b6104b46104af366004614b32565b610b6b565b6040516104209190614bc7565b61049f6104cf366004614c1b565b610b9b565b6082545b604051908152602001610420565b61049f6104f4366004614caa565b610bf5565b6072546001600160a01b0316610474565b610474610518366004614b32565b610c78565b61049f61052b366004614d23565b610d26565b61043c61053e366004614d64565b610d57565b6104d8610551366004614d64565b610d90565b610569610564366004614d81565b610dca565b604080516001600160a01b039093168352602083019190915201610420565b61049f610596366004614d64565b610e08565b61049f6105a9366004614da3565b610e64565b61049f6105bc366004614de4565b610eb8565b610413610f18565b61049f6105d7366004614e1f565b610fc2565b6104b46105ea366004614e8a565b611020565b61049f6105fd366004614da3565b611154565b61049f610610366004614edf565b611168565b61043c610623366004614d64565b6111c7565b6104b4610636366004614e8a565b6111d4565b61049f610649366004614d23565b6112cd565b61049f61065c366004614b32565b6112e8565b61049f61066f366004614d64565b611380565b61049f610682366004614e1f565b6113d3565b610474610695366004614b32565b611452565b61049f6106a8366004615011565b6114b2565b61049f6106bb366004614da3565b6115e3565b61049f6106ce366004614b32565b6115f5565b606a5460ff1661043c565b60005460405160ff9091168152602001610420565b61049f610701366004614d64565b61171e565b6104d8610714366004614d64565b611776565b61049f6117fc565b6104d861072f366004614d64565b611810565b6104d8610742366004614de4565b61187f565b6104b4610755366004614e8a565b61191f565b61049f6107683660046150bd565b611a83565b610413611a96565b6033546001600160a01b0316610474565b600054610100900460ff1661043c565b610454611b36565b61049f6107ac366004614da3565b611b45565b61049f6107bf366004615113565b611b99565b61049f6107d2366004614e1f565b611bd3565b61049f6107e536600461514c565b611c94565b6104b46107f8366004615169565b611ca6565b61083361080b366004614b32565b6000908152606d6020526040902054600160a01b900460101c69ffffffffffffffffffff1690565b60405169ffffffffffffffffffff9091168152602001610420565b61049f61085c36600461519e565b611dd1565b61087461086f366004614b32565b611e03565b6040516104209190615256565b61089461088f366004614b32565b611e33565b604051610420929190615269565b6104546108b0366004614b32565b611e6d565b61049f6108c3366004614d64565b611e9d565b6104d86108d63660046152b1565b611ef0565b61049f6108e9366004614d64565b611f2a565b6104b46108fc366004615169565b611ff5565b61049f61090f366004614c1b565b6120d4565b61043c6109223660046152e6565b6120e7565b61049f610935366004614d64565b612115565b61049f6109483660046152e6565b6121e1565b61049f61095b366004614d64565b612235565b61049f61096e36600461514c565b6122ab565b6104d8610981366004614de4565b612339565b6104d8600381565b606061099a606861238d565b6001600160401b038111156109b1576109b1614f46565b6040519080825280602002602001820160405280156109da578160200160208202803683370190505b50905060005b6109ea606861238d565b811015610a38576109fc606882612397565b828281518110610a0e57610a0e615314565b6001600160a01b039092166020928302919091019091015280610a3081615340565b9150506109e0565b5090565b6000610a47826123a3565b80610a565750610a56826123e3565b80610a655750610a6582612423565b92915050565b6060606b8054610a7a90615359565b80601f0160208091040260200160405190810160405280929190818152602001828054610aa690615359565b8015610af35780601f10610ac857610100808354040283529160200191610af3565b820191906000526020600020905b815481529060010190602001808311610ad657829003601f168201915b5050505050905090565b6000610b0882612458565b506000908152606f60205260409020546001600160a01b031690565b606a5460ff1615610b5d57610b38826111c7565b610b5d5760405162461bcd60e51b8152600401610b549061538d565b60405180910390fd5b610b6782826124a8565b5050565b6060610b76826125b8565b610b925760405162461bcd60e51b8152600401610b54906153d9565b610a65826125d5565b33610bae6033546001600160a01b031690565b6001600160a01b03161480610bc95750610bc96066336125e0565b610be55760405162461bcd60e51b8152600401610b5490615404565b610bf0838383612602565b505050565b33610c086033546001600160a01b031690565b6001600160a01b03161480610c235750610c236066336125e0565b610c3f5760405162461bcd60e51b8152600401610b5490615404565b610c48856125b8565b610c645760405162461bcd60e51b8152600401610b54906153d9565b610c718585858585612686565b5050505050565b6000610c83826125b8565b610c9f5760405162461bcd60e51b8152600401610b54906153d9565b610ca88261270d565b90506001600160a01b038116610cf95760405162461bcd60e51b815260206004820152601660248201527527379032bc3a32b739b4b7b7103337b9103a37b5b2b760511b6044820152606401610b54565b610d046075826125e0565b15610d215760405162461bcd60e51b8152600401610b5490615448565b919050565b610d303382612763565b610d4c5760405162461bcd60e51b8152600401610b5490615477565b610bf08383836127c2565b6000816001600160a01b0316610d756033546001600160a01b031690565b6001600160a01b03161480610a655750610a656066836125e0565b6000610d9a612961565b610da26129ba565b610dbe8260405180602001604052806000815250600080612a11565b9050610d216001606555565b600080610dd6846125b8565b610df25760405162461bcd60e51b8152600401610b54906153d9565b610dfc8484612ae5565b915091505b9250929050565b610e10612bbc565b610e1b6066826125e0565b15610e615760405133906001600160a01b038316907f7c0c3c84c67c85fcac635147348bfe374c24a1a93d0366d1cfe9d8853cbf89d590600090a3610b67606682612c16565b50565b33610e776033546001600160a01b031690565b6001600160a01b03161480610e925750610e926066336125e0565b610eae5760405162461bcd60e51b8152600401610b5490615404565b610b678282612c2b565b33610ecb6033546001600160a01b031690565b6001600160a01b03161480610ee65750610ee66066336125e0565b610f025760405162461bcd60e51b8152600401610b5490615404565b610f0b83612c60565b610bf08383836000612c88565b6060610f24606661238d565b6001600160401b03811115610f3b57610f3b614f46565b604051908082528060200260200182016040528015610f64578160200160208202803683370190505b50905060005b610f74606661238d565b811015610a3857610f86606682612397565b828281518110610f9857610f98615314565b6001600160a01b039092166020928302919091019091015280610fba81615340565b915050610f6a565b33610fd56033546001600160a01b031690565b6001600160a01b03161480610ff05750610ff06066336125e0565b61100c5760405162461bcd60e51b8152600401610b5490615404565b61101a600085858585612d85565b50505050565b606061102a612961565b6110326129ba565b816001600160401b0381111561104a5761104a614f46565b604051908082528060200260200182016040528015611073578160200160208202803683370190505b5090506000607154600161108791906154c4565b9050838390506071600082825461109e91906154c4565b90915550600090505b838110156111415761111c868686848181106110c5576110c5615314565b90506020028101906110d791906154d7565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092506111179150869050876154c4565b612a11565b83828151811061112e5761112e615314565b60209081029190910101526001016110a7565b505061114d6001606555565b9392505050565b61115c6129ba565b610b6782826000612e72565b3361117b6033546001600160a01b031690565b6001600160a01b0316148061119657506111966066336125e0565b6111b25760405162461bcd60e51b8152600401610b5490615404565b6111bb84612c60565b61101a84848484612c88565b6000610a656068836125e0565b60606111de612961565b6111e66129ba565b816001600160401b038111156111fe576111fe614f46565b604051908082528060200260200182016040528015611227578160200160208202803683370190505b5090506000607154600161123b91906154c4565b9050838390506071600082825461125291906154c4565b90915550600090505b83811015611141576112a8866040518060200160405280600081525087878581811061128957611289615314565b905060200201602081019061129e919061551d565b61111785876154c4565b8382815181106112ba576112ba615314565b602090810291909101015260010161125b565b610bf083838360405180602001604052806000815250611dd1565b6112f0612961565b6112fa3382612763565b6113465760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206973206e6f74206f776e6572206f7220617070726f766564006044820152606401610b54565b600061135182611452565b9050600061135e8361270d565b905061136983612eaf565b611374828483612f69565b5050610e616001606555565b336113936033546001600160a01b031690565b6001600160a01b031614806113ae57506113ae6066336125e0565b6113ca5760405162461bcd60e51b8152600401610b5490615404565b610e6181613028565b6113db6129ba565b8281146113fa5760405162461bcd60e51b8152600401610b5490615538565b60005b83811015610c715761144a85858381811061141a5761141a615314565b9050602002013584848481811061143357611433615314565b905060200281019061144591906154d7565b61307c565b6001016113fd565b6000818152606d60205260408120546001600160a01b031680610a655760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610b54565b600054610100900460ff16158080156114d25750600054600160ff909116105b806114ec5750303b1580156114ec575060005460ff166001145b61154f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610b54565b6000805460ff191660011790558015611572576000805461ff0019166101001790555b61157c8787613086565b6115846130b7565b61158f8484846130e6565b608285905580156115da576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6115eb6129ba565b610b67828261314f565b336116086033546001600160a01b031690565b6001600160a01b03161461166d5760405162461bcd60e51b815260206004820152602660248201527f6f6e6c79206f776e65722063616e207570646174652074686520746f74616c20604482015265737570706c7960d01b6064820152608401610b54565b6071548110156116dd5760405162461bcd60e51b815260206004820152603560248201527f746f74616c20737570706c792073686f756c64206e6f74206265206c6573736560448201527472207468616e2063757272656e7420737570706c7960581b6064820152608401610b54565b60825460408051918252602082018390527fd847752640337969f783ba291f56251d6165ba92dd3d27984ad0f81995aef0b6910160405180910390a1608255565b611726612bbc565b6117316066826125e0565b610e615760405133906001600160a01b038316907f7e1a1a08d52e4ba0e21554733d66165fd5151f99460116223d9e3a608eec5cb190600090a3610b67606682613169565b60006001600160a01b0382166117e05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610b54565b506001600160a01b03166000908152606e602052604090205490565b611804612bbc565b61180e600061317e565b565b600061181a612961565b3361182d6033546001600160a01b031690565b6001600160a01b0316148061184857506118486066336125e0565b6118645760405162461bcd60e51b8152600401610b5490615404565b610dbe826040518060200160405280600081525060006131d0565b6000611889612961565b3361189c6033546001600160a01b031690565b6001600160a01b031614806118b757506118b76066336125e0565b6118d35760405162461bcd60e51b8152600401610b5490615404565b6119138484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092506131d0915050565b905061114d6001606555565b6060611929612961565b3361193c6033546001600160a01b031690565b6001600160a01b0316148061195757506119576066336125e0565b6119735760405162461bcd60e51b8152600401610b5490615404565b816001600160401b0381111561198b5761198b614f46565b6040519080825280602002602001820160405280156119b4578160200160208202803683370190505b509050600060715460016119c891906154c4565b905083839050607160008282546119df91906154c4565b90915550600090505b8381101561114157611a5e86868684818110611a0657611a06615314565b9050602002810190611a1891906154d7565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a5992508691508790506154c4565b6131d0565b838281518110611a7057611a70615314565b60209081029190910101526001016119e8565b611a8b6129ba565b610bf0838383612e72565b6060611aa2607361238d565b6001600160401b03811115611ab957611ab9614f46565b604051908082528060200260200182016040528015611ae2578160200160208202803683370190505b50905060005b611af2607361238d565b811015610a3857611b04607382612397565b828281518110611b1657611b16615314565b6001600160a01b0390921660209283029190910190910152600101611ae8565b6060606c8054610a7a90615359565b33611b586033546001600160a01b031690565b6001600160a01b03161480611b735750611b736066336125e0565b611b8f5760405162461bcd60e51b8152600401610b5490615404565b610b678282613272565b606a5460ff1615611bc957611bad826111c7565b611bc95760405162461bcd60e51b8152600401610b549061538d565b610b6782826132a7565b33611be66033546001600160a01b031690565b6001600160a01b03161480611c015750611c016066336125e0565b611c1d5760405162461bcd60e51b8152600401610b5490615404565b828114611c3c5760405162461bcd60e51b8152600401610b5490615538565b60005b83811015610c7157611c8c858583818110611c5c57611c5c615314565b90506020020135848484818110611c7557611c75615314565b9050602002810190611c8791906154d7565b612602565b600101611c3f565b611c9c6129ba565b610e6133826132b2565b6060611cb0612961565b33611cc36033546001600160a01b031690565b6001600160a01b03161480611cde5750611cde6066336125e0565b611cfa5760405162461bcd60e51b8152600401610b5490615404565b8161ffff166001600160401b03811115611d1657611d16614f46565b604051908082528060200260200182016040528015611d3f578160200160208202803683370190505b50905060006071546001611d5391906154c4565b90508261ffff1660716000828254611d6b91906154c4565b90915550600090505b8361ffff16811015611dc557611da085604051806020016040528060008152508385611a5991906154c4565b838281518110611db257611db2615314565b6020908102919091010152600101611d74565b5050610a656001606555565b611ddb3383612763565b611df75760405162461bcd60e51b8152600401610b5490615477565b61101a84848484613327565b6060611e0e826125b8565b611e2a5760405162461bcd60e51b8152600401610b54906153d9565b610a658261335a565b606080611e3f836125b8565b611e5b5760405162461bcd60e51b8152600401610b54906153d9565b611e6483613361565b91509150915091565b6060611e78826125b8565b611e945760405162461bcd60e51b8152600401610b54906153d9565b610a658261370f565b33611eb06033546001600160a01b031690565b6001600160a01b03161480611ecb5750611ecb6066336125e0565b611ee75760405162461bcd60e51b8152600401610b5490615404565b610e6181613a8f565b6000611efa612961565b611f026129ba565b611f1e8360405180602001604052806000815250846000612a11565b9050610a656001606555565b604051630935e01b60e21b815233600482015230906324d7806c90602401602060405180830381865afa158015611f65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f89919061555f565b611fa55760405162461bcd60e51b8152600401610b5490615404565b611fb06068826125e0565b610e615760405133906001600160a01b038316907fd9c01e75f7ea24b510e0bd9bb517232a8f86e1fc7ab85e4675748e30553b30a090600090a3610b67606882613169565b6060611fff612961565b6120076129ba565b8161ffff166001600160401b0381111561202357612023614f46565b60405190808252806020026020018201604052801561204c578160200160208202803683370190505b5090506000607154600161206091906154c4565b90508261ffff166071600082825461207891906154c4565b90915550600090505b8361ffff16811015611dc5576120af85604051806020016040528060008152506000848661111791906154c4565b8382815181106120c1576120c1615314565b6020908102919091010152600101612081565b6120dc6129ba565b610bf083838361307c565b6001600160a01b03918216600090815260706020908152604080832093909416825291909152205460ff1690565b604051630935e01b60e21b815233600482015230906324d7806c90602401602060405180830381865afa158015612150573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612174919061555f565b6121905760405162461bcd60e51b8152600401610b5490615404565b61219b6068826125e0565b15610e615760405133906001600160a01b038316907f3e5fce8f3e84209fe92cc4d656399f08889d1e6b8ca2cf1ff08baed74cd5af3f90600090a3610b67606882612c16565b336121f46033546001600160a01b031690565b6001600160a01b0316148061220f575061220f6066336125e0565b61222b5760405162461bcd60e51b8152600401610b5490615404565b610b678282613ad0565b61223d612bbc565b6001600160a01b0381166122a25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b54565b610e618161317e565b604051630935e01b60e21b815233600482015230906324d7806c90602401602060405180830381865afa1580156122e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230a919061555f565b6123265760405162461bcd60e51b8152600401610b5490615404565b606a805460ff1916911515919091179055565b6000612343612961565b61234b6129ba565b6119138484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250829150612a119050565b6000610a65825490565b600061114d8383613c05565b60006001600160e01b0319821663b5d2729f60e01b14806123d457506001600160e01b03198216639088c20760e01b145b80610a655750610a6582613c2f565b60006001600160e01b031982166380ac58cd60e01b148061241457506001600160e01b03198216635b5e139f60e01b145b80610a655750610a6582613ce0565b60006001600160e01b03198216632a9f3abf60e11b1480610a6557506301ffc9a760e01b6001600160e01b0319831614610a65565b612461816125b8565b610e615760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610b54565b60006124b382611452565b9050806001600160a01b0316836001600160a01b0316036125205760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610b54565b336001600160a01b038216148061253c575061253c81336120e7565b6125ae5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610b54565b610bf08383613d05565b6000908152606d60205260409020546001600160a01b0316151590565b606061114d82613361565b6001600160a01b0381166000908152600183016020526040812054151561114d565b60008311801561261457506071548311155b8015612631575060006126268461270d565b6001600160a01b0316145b61266d5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606401610b54565b6000838152607a6020526040902061101a8284836155c2565b61269284848484613d73565b6000858152607c602052604081206126a9916149c3565b6126c884848484607c60008b8152602001908152602001600020613e1e565b847fabb46fe0761d77584bde75697647804ffd8113abd4d8d06bc664150395eccdee858585856040516126fe9493929190615681565b60405180910390a25050505050565b6000818152606d6020526040812054600160a01b90046001600160601b0381169061ffff1682036127415750600092915050565b61ffff166000908152608160205260409020546001600160a01b031692915050565b60008061276f83611452565b9050806001600160a01b0316846001600160a01b03161480612796575061279681856120e7565b806127ba5750836001600160a01b03166127af84610afd565b6001600160a01b0316145b949350505050565b6000818152606d60209081526040918290208251808401909352546001600160a01b03808216808552600160a01b9092046001600160601b03169284019290925290851681146128625760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610b54565b6001600160a01b0384166128c45760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610b54565b60208201516128d586868684613ed9565b6128e0600085613d05565b6001600160a01b038087166000818152606e60209081526040808320805460001901905593891680835284832080546001019055888352606d90915283822080546001600160a01b031916821790559251879392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a45b505050505050565b6002606554036129b35760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b54565b6002606555565b6129c56073336125e0565b61180e5760405162461bcd60e51b815260206004820152601c60248201527f4d757374206265207265676973746572656420657874656e73696f6e000000006044820152606401610b54565b600081600003612a3457607160008154612a2a90615340565b9091555060715491505b6082546071541115612a7f5760405162461bcd60e51b81526020600482015260146024820152731d1bdd185b081cdd5c1c1b1e481c995858da195960621b6044820152606401610b54565b612a898583613ee5565b33600090815260806020526040902054612abc908690849061ffff16601087901b69ffffffffffffffff00001617613f79565b835115612add576000828152607a60205260409020612adb85826156ff565b505b509392505050565b600080600080612af486613361565b91509150600182511115612b4a5760405162461bcd60e51b815260206004820152601c60248201527f4d6f7265207468616e203120726f79616c7479207265636569766572000000006044820152606401610b54565b8151600003612b6157306000935093505050610e01565b81600081518110612b7457612b74615314565b60200260200101516127108683600081518110612b9357612b93615314565b6020026020010151612ba591906157be565b612baf91906157d5565b9350935050509250929050565b6033546001600160a01b0316331461180e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b54565b600061114d836001600160a01b038416613f94565b6000805260776020527f5bc4dfdf00d266d79007b974fdf03467b7a6429c65a950cd7d967e8c7af65da6610bf08284836155c2565b612c6b6075826125e0565b15610e615760405162461bcd60e51b8152600401610b5490615448565b607f5461ffff90811610612cd45760405162461bcd60e51b8152602060048201526013602482015272546f6f206d616e7920657874656e73696f6e7360681b6044820152606401610b54565b6001600160a01b03841660009081526080602052604081205461ffff169003612d7957607f8054600090612d0b9061ffff166157f7565b82546101009290920a61ffff818102199093169183160217909155607f80546001600160a01b0387166000818152608060209081526040808320805495881661ffff199096169590951790945593549094168452608190925290912080546001600160a01b03191690911790555b61101a84848484614087565b612d9184848484613d73565b6001600160a01b0385166000908152607b60205260408120612db2916149c3565b612de384848484607b60008b6001600160a01b03166001600160a01b03168152602001908152602001600020613e1e565b6001600160a01b038516612e33577f2b6849d5976d799a5b0ca4dfd6b40a3d7afe9ea72c091fa01a958594f9a2659b84848484604051612e269493929190615681565b60405180910390a1610c71565b846001600160a01b03167f535a93d2cb000582c0ebeaa9be4890ec6a287f98eb2df00c54c300612fd78d8f858585856040516126fe9493929190615681565b336000908152607760205260409020612e8c8385836155c2565b50336000908152607860205260409020805460ff19169115159190911790555050565b6000818152606d602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b03169282018390529092909190612eff9083908684613ed9565b612f0a600085613d05565b6001600160a01b0382166000818152606e602090815260408083208054600019019055878352606d909152808220829055518692907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a461101a565b6001600160a01b03811615612ff157612f89816311686e4b60e21b614174565b15612ff1576040516311686e4b60e21b81526001600160a01b038481166004830152602482018490528216906345a1b92c90604401600060405180830381600087803b158015612fd857600080fd5b505af1158015612fec573d6000803e3d6000fd5b505050505b6000828152607a60205260409020805461300a90615359565b159050610bf0576000828152607a60205260408120610bf0916149e1565b607280546001600160a01b0319166001600160a01b0383169081179091556040519081527f959c0e47a2fe3cf01e237ba4892e2cc3194d77cbfb33e434e40873225d6b595f9060200160405180910390a150565b336126268461270d565b600054610100900460ff166130ad5760405162461bcd60e51b8152600401610b5490615818565b610b678282614190565b600054610100900460ff166130de5760405162461bcd60e51b8152600401610b5490615818565b61180e6141d0565b606a805460ff191684151590811790915560ff1615610bf05760005b8181101561101a5761313c83838381811061311f5761311f615314565b90506020020160208101906131349190614d64565b606890613169565b508061314781615340565b915050613102565b336000908152607960205260409020610bf08284836155c2565b600061114d836001600160a01b038416614200565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000816000036131f3576071600081546131e990615340565b9091555060715491505b608254607154111561323e5760405162461bcd60e51b81526020600482015260146024820152731d1bdd185b081cdd5c1c1b1e481c995858da195960621b6044820152606401610b54565b61324a84836000613f79565b82511561326b576000828152607a6020526040902061326984826156ff565b505b5092915050565b6000805260796020527fa16c87c7791af27ea6fd9620ff163aaff6138eac198fe485b0b3cad7774b97a7610bf08284836155c2565b610b6733838361424f565b6132c3826345ffcdad60e01b614174565b15610b67576001600160a01b0382166000818152607d6020908152604091829020805460ff191685151590811790915591519182527f072a7592283e2c2d1d56d21517ff6013325e0f55483f4828373ff4d98b0a1a36910160405180910390a25050565b6133328484846127c2565b61333e8484848461431d565b61101a5760405162461bcd60e51b8152600401610b5490615863565b606061326b825b6060806000607c6000858152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156133e357600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900461ffff1681830152825260019092019101613399565b50505050905080516000036135305760006133fd8561270d565b90506001600160a01b0381161561352e5761341f81634e53ee3d60e11b614174565b156134aa57604051634e53ee3d60e11b8152306004820152602481018690526001600160a01b03821690639ca7dc7a90604401600060405180830381865afa15801561346f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613497919081019061593e565b81519195509350156134aa575050915091565b6001600160a01b0381166000908152607b6020908152604080832080548251818502810185019093528083529193909284015b8282101561352757600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900461ffff16818301528252600190920191016134dd565b5050505091505b505b80516000036135d3576000808052607b60209081527ffa58b71a6fb66fb38c35354e640506789c3a5ca0c9abe3bb29fa65504a39d89c8054604080518285028101850190915281815293919290919084015b828210156135cc57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900461ffff1681830152825260019092019101613582565b5050505090505b8051156137095780516001600160401b038111156135f3576135f3614f46565b60405190808252806020026020018201604052801561361c578160200160208202803683370190505b50925080516001600160401b0381111561363857613638614f46565b604051908082528060200260200182016040528015613661578160200160208202803683370190505b50915060005b81518110156137075781818151811061368257613682615314565b6020026020010151600001518482815181106136a0576136a0615314565b60200260200101906001600160a01b031690816001600160a01b0316815250508181815181106136d2576136d2615314565b60200260200101516020015161ffff168382815181106136f4576136f4615314565b6020908102919091010152600101613667565b505b50915091565b606060008211801561372357506071548211155b61375f5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606401610b54565b600061376a8361270d565b90506137776075826125e0565b156137945760405162461bcd60e51b8152600401610b5490615448565b6000838152607a6020526040902080546137ad90615359565b1590506138c7576001600160a01b038116600090815260796020526040902080546137d790615359565b159050613828576001600160a01b0381166000908152607960209081526040808320868452607a8352928190209051613811939201615a75565b604051602081830303815290604052915050919050565b6000838152607a60205260409020805461384190615359565b80601f016020809104026020016040519081016040528092919081815260200182805461386d90615359565b80156138ba5780601f1061388f576101008083540402835291602001916138ba565b820191906000526020600020905b81548152906001019060200180831161389d57829003601f168201915b5050505050915050919050565b6138d88163e9dc637560e01b614174565b156139505760405163e9dc637560e01b8152306004820152602481018490526001600160a01b0382169063e9dc637590604401600060405180830381865afa158015613928573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261114d9190810190615a8a565b6001600160a01b0381166000908152607760205260409020805461397390615359565b1590506139ef576001600160a01b03811660009081526078602052604090205460ff166139cc576001600160a01b03811660009081526077602052604090206139bb8461441b565b604051602001613811929190615af7565b6001600160a01b0381166000908152607760205260409020805461384190615359565b6000805260786020527f081a134e404bb5bca49ef6b8477e647c1205f6d43d6a20bb692a968ac5aa71445460ff16613a54576000805260776020527f5bc4dfdf00d266d79007b974fdf03467b7a6429c65a950cd7d967e8c7af65da66139bb8461441b565b6000805260776020527f5bc4dfdf00d266d79007b974fdf03467b7a6429c65a950cd7d967e8c7af65da6805461384190615359565b50919050565b60405133906001600160a01b038316907fd19cf84cf0fec6bec9ddfa29c63adf83a55707c712f32c8285d6180a7890147990600090a3610b67607382612c16565b613adb6073836125e0565b613b275760405162461bcd60e51b815260206004820152601e60248201527f43726561746f72436f72653a20496e76616c696420657874656e73696f6e00006044820152606401610b54565b6001600160a01b0381161580613b495750613b4981631e05385b60e31b614174565b613b875760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610b54565b6001600160a01b038281166000908152607e6020526040902054811690821614610b67576001600160a01b038281166000818152607e602052604080822080546001600160a01b031916948616948517905551339392917f6a835c4fcf7e0d398db3762332fdaa1471814ad39f1e2d6d0b3fdabf8efee3e091a45050565b6000826000018281548110613c1c57613c1c615314565b9060005260206000200154905092915050565b60006001600160e01b031982166370be671160e11b1480613c6057506001600160e01b031982166328f10a2160e01b145b80613c6f5750613c6f826123e3565b80613c8a57506001600160e01b03198216635d9dd7eb60e11b145b80613ca557506001600160e01b03198216632dde656160e21b145b80613cc057506001600160e01b031982166335681b5360e21b145b80610a6557506001600160e01b0319821663152a902d60e11b1492915050565b60006001600160e01b0319821663e4dcee9160e01b1480610a655750610a6582612423565b6000818152606f6020526040902080546001600160a01b0319166001600160a01b0384169081179091558190613d3a82611452565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b828114613d925760405162461bcd60e51b8152600401610b5490615538565b6000805b82811015613dcc57838382818110613db057613db0615314565b9050602002013582613dc291906154c4565b9150600101613d96565b506127108110610c715760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420746f74616c20726f79616c746965730000000000000000006044820152606401610b54565b60005b8281101561295957816040518060400160405280888885818110613e4757613e47615314565b9050602002016020810190613e5c9190614d64565b6001600160a01b03168152602001868685818110613e7c57613e7c615314565b61ffff602091820293909301358316909352508354600181810186556000958652948390208451910180549490930151909116600160a01b026001600160b01b03199093166001600160a01b039091161791909117905501613e21565b61101a848484846144ad565b336000908152607e60205260409020546001600160a01b031615610b6757336000818152607e602052604090819020549051631e05385b60e31b815260048101929092526001600160a01b03848116602484015260448301849052169063f029c2d890606401600060405180830381600087803b158015613f6557600080fd5b505af1158015612959573d6000803e3d6000fd5b610bf0838383604051806020016040528060008152506144e8565b6000818152600183016020526040812054801561407d576000613fb8600183615b1c565b8554909150600090613fcc90600190615b1c565b9050818114614031576000866000018281548110613fec57613fec615314565b906000526020600020015490508087600001848154811061400f5761400f615314565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061404257614042615b2f565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610a65565b6000915050610a65565b6001600160a01b03841630148015906140a957506001600160a01b0384163b15155b6140df5760405162461bcd60e51b8152602060048201526007602482015266125b9d985b1a5960ca1b6044820152606401610b54565b60405133906001600160a01b038616907fd8cb8ba4086944eabf43c5535b7712015e4d4c714b24bf812c040ea5b7a3e42a90600090a36001600160a01b03841660009081526077602052604090206141388385836155c2565b506001600160a01b0384166000908152607860205260409020805460ff1916821515179055614168607385613169565b5061101a8460016132b2565b600061417f83614637565b801561114d575061114d838361466a565b600054610100900460ff166141b75760405162461bcd60e51b8152600401610b5490615818565b606b6141c383826156ff565b50606c610bf082826156ff565b600054610100900460ff166141f75760405162461bcd60e51b8152600401610b5490615818565b61180e3361317e565b600081815260018301602052604081205461424757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610a65565b506000610a65565b816001600160a01b0316836001600160a01b0316036142b05760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b54565b6001600160a01b03838116600081815260706020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60006001600160a01b0384163b1561441357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290614361903390899088908890600401615b45565b6020604051808303816000875af192505050801561439c575060408051601f3d908101601f1916820190925261439991810190615b82565b60015b6143f9573d8080156143ca576040519150601f19603f3d011682016040523d82523d6000602084013e6143cf565b606091505b5080516000036143f15760405162461bcd60e51b8152600401610b5490615863565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506127ba565b5060016127ba565b60606000614428836146f3565b60010190506000816001600160401b0381111561444757614447614f46565b6040519080825280601f01601f191660200182016040528015614471576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461447b57509392505050565b6001600160a01b0384161561101a5761ffff811660009081526081602052604090205461101a908590859085906001600160a01b03166147cb565b6001600160a01b03841661453e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b54565b614547836125b8565b156145945760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b54565b6145a16000858585613ed9565b6001600160a01b038085166000818152606e6020908152604080832080546001019055805180820182528481526001600160601b038089168285019081528a8652606d9094528285209151935116600160a01b02929095169190911790935591518592907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461333e600085858461431d565b600061464a826301ffc9a760e01b61466a565b8015610a655750614663826001600160e01b031961466a565b1592915050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d915060005190508280156146dc575060208210155b80156146e85750600081115b979650505050505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106147325772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061475e576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061477c57662386f26fc10000830492506010015b6305f5e1008310614794576305f5e100830492506008015b61271083106147a857612710830492506004015b606483106147ba576064830492506002015b600a8310610a655760010192915050565b6001600160a01b0384161561101a576001600160a01b0381161580159061480a57506001600160a01b0381166000908152607d602052604090205460ff165b156148e157604051632f3537c560e11b81523360048201526001600160a01b038581166024830152848116604483015260648201849052821690635e6a6f8a906084016020604051808303816000875af115801561486c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614890919061555f565b6148dc5760405162461bcd60e51b815260206004820152601a60248201527f457874656e73696f6e20617070726f76616c206661696c7572650000000000006044820152606401610b54565b61101a565b6072546001600160a01b03161561101a57607254604051632f3537c560e11b81523360048201526001600160a01b03868116602483015285811660448301526064820185905290911690635e6a6f8a906084016020604051808303816000875af1158015614953573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614977919061555f565b61101a5760405162461bcd60e51b815260206004820152601a60248201527f457874656e73696f6e20617070726f76616c206661696c7572650000000000006044820152606401610b54565b5080546000825590600052602060002090810190610e619190614a1b565b5080546149ed90615359565b6000825580601f106149fd575050565b601f016020900490600052602060002090810190610e619190614a3a565b5b80821115610a385780546001600160b01b0319168155600101614a1c565b5b80821115610a385760008155600101614a3b565b6020808252825182820181905260009190848201906040850190845b81811015614a905783516001600160a01b031683529284019291840191600101614a6b565b50909695505050505050565b6001600160e01b031981168114610e6157600080fd5b600060208284031215614ac457600080fd5b813561114d81614a9c565b60005b83811015614aea578181015183820152602001614ad2565b50506000910152565b60008151808452614b0b816020860160208601614acf565b601f01601f19169290920160200192915050565b60208152600061114d6020830184614af3565b600060208284031215614b4457600080fd5b5035919050565b6001600160a01b0381168114610e6157600080fd5b60008060408385031215614b7357600080fd5b8235614b7e81614b4b565b946020939093013593505050565b600081518084526020808501945080840160005b83811015614bbc57815187529582019590820190600101614ba0565b509495945050505050565b60208152600061114d6020830184614b8c565b60008083601f840112614bec57600080fd5b5081356001600160401b03811115614c0357600080fd5b602083019150836020828501011115610e0157600080fd5b600080600060408486031215614c3057600080fd5b8335925060208401356001600160401b03811115614c4d57600080fd5b614c5986828701614bda565b9497909650939450505050565b60008083601f840112614c7857600080fd5b5081356001600160401b03811115614c8f57600080fd5b6020830191508360208260051b8501011115610e0157600080fd5b600080600080600060608688031215614cc257600080fd5b8535945060208601356001600160401b0380821115614ce057600080fd5b614cec89838a01614c66565b90965094506040880135915080821115614d0557600080fd5b50614d1288828901614c66565b969995985093965092949392505050565b600080600060608486031215614d3857600080fd5b8335614d4381614b4b565b92506020840135614d5381614b4b565b929592945050506040919091013590565b600060208284031215614d7657600080fd5b813561114d81614b4b565b60008060408385031215614d9457600080fd5b50508035926020909101359150565b60008060208385031215614db657600080fd5b82356001600160401b03811115614dcc57600080fd5b614dd885828601614bda565b90969095509350505050565b600080600060408486031215614df957600080fd5b8335614e0481614b4b565b925060208401356001600160401b03811115614c4d57600080fd5b60008060008060408587031215614e3557600080fd5b84356001600160401b0380821115614e4c57600080fd5b614e5888838901614c66565b90965094506020870135915080821115614e7157600080fd5b50614e7e87828801614c66565b95989497509550505050565b600080600060408486031215614e9f57600080fd5b8335614eaa81614b4b565b925060208401356001600160401b03811115614ec557600080fd5b614c5986828701614c66565b8015158114610e6157600080fd5b60008060008060608587031215614ef557600080fd5b8435614f0081614b4b565b935060208501356001600160401b03811115614f1b57600080fd5b614f2787828801614bda565b9094509250506040850135614f3b81614ed1565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715614f8457614f84614f46565b604052919050565b60006001600160401b03821115614fa557614fa5614f46565b50601f01601f191660200190565b6000614fc6614fc184614f8c565b614f5c565b9050828152838383011115614fda57600080fd5b828260208301376000602084830101529392505050565b600082601f83011261500257600080fd5b61114d83833560208501614fb3565b60008060008060008060a0878903121561502a57600080fd5b86356001600160401b038082111561504157600080fd5b61504d8a838b01614ff1565b9750602089013591508082111561506357600080fd5b61506f8a838b01614ff1565b9650604089013595506060890135915061508882614ed1565b9093506080880135908082111561509e57600080fd5b506150ab89828a01614c66565b979a9699509497509295939492505050565b6000806000604084860312156150d257600080fd5b83356001600160401b038111156150e857600080fd5b6150f486828701614bda565b909450925050602084013561510881614ed1565b809150509250925092565b6000806040838503121561512657600080fd5b823561513181614b4b565b9150602083013561514181614ed1565b809150509250929050565b60006020828403121561515e57600080fd5b813561114d81614ed1565b6000806040838503121561517c57600080fd5b823561518781614b4b565b9150602083013561ffff8116811461514157600080fd5b600080600080608085870312156151b457600080fd5b84356151bf81614b4b565b935060208501356151cf81614b4b565b92506040850135915060608501356001600160401b038111156151f157600080fd5b8501601f8101871361520257600080fd5b61521187823560208401614fb3565b91505092959194509250565b600081518084526020808501945080840160005b83811015614bbc5781516001600160a01b031687529582019590820190600101615231565b60208152600061114d602083018461521d565b60408152600061527c604083018561521d565b828103602084015261528e8185614b8c565b95945050505050565b803569ffffffffffffffffffff81168114610d2157600080fd5b600080604083850312156152c457600080fd5b82356152cf81614b4b565b91506152dd60208401615297565b90509250929050565b600080604083850312156152f957600080fd5b823561530481614b4b565b9150602083013561514181614b4b565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016153525761535261532a565b5060010190565b600181811c9082168061536d57607f821691505b602082108103613a8957634e487b7160e01b600052602260045260246000fd5b6020808252602c908201527f416c6c6f776564557365723a206f70657261746f72206973206e6f7420616e2060408201526b30b63637bbb2b2102ab9b2b960a11b606082015260800190565b6020808252601190820152702737b732bc34b9ba32b73a103a37b5b2b760791b604082015260600190565b60208082526024908201527f41646d696e436f6e74726f6c3a204d757374206265206f776e6572206f7220616040820152633236b4b760e11b606082015260800190565b602080825260159082015274115e1d195b9cda5bdb88189b1858dadb1a5cdd1959605a1b604082015260600190565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b80820180821115610a6557610a6561532a565b6000808335601e198436030181126154ee57600080fd5b8301803591506001600160401b0382111561550857600080fd5b602001915036819003821315610e0157600080fd5b60006020828403121561552f57600080fd5b61114d82615297565b6020808252600d908201526c125b9d985b1a59081a5b9c1d5d609a1b604082015260600190565b60006020828403121561557157600080fd5b815161114d81614ed1565b601f821115610bf057600081815260208120601f850160051c810160208610156155a35750805b601f850160051c820191505b81811015612959578281556001016155af565b6001600160401b038311156155d9576155d9614f46565b6155ed836155e78354615359565b8361557c565b6000601f84116001811461562157600085156156095750838201355b600019600387901b1c1916600186901b178355610c71565b600083815260209020601f19861690835b828110156156525786850135825560209485019460019092019101615632565b508682101561566f5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6040808252810184905260008560608301825b878110156156c45782356156a781614b4b565b6001600160a01b0316825260209283019290910190600101615694565b5083810360208501528481526001600160fb1b038511156156e457600080fd5b8460051b915081866020830137016020019695505050505050565b81516001600160401b0381111561571857615718614f46565b61572c816157268454615359565b8461557c565b602080601f83116001811461576157600084156157495750858301515b600019600386901b1c1916600185901b178555612959565b600085815260208120601f198616915b8281101561579057888601518255948401946001909101908401615771565b50858210156157ae5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8082028115828204841417610a6557610a6561532a565b6000826157f257634e487b7160e01b600052601260045260246000fd5b500490565b600061ffff80831681810361580e5761580e61532a565b6001019392505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60006001600160401b038211156158ce576158ce614f46565b5060051b60200190565b600082601f8301126158e957600080fd5b815160206158f9614fc1836158b5565b82815260059290921b8401810191818101908684111561591857600080fd5b8286015b84811015615933578051835291830191830161591c565b509695505050505050565b6000806040838503121561595157600080fd5b82516001600160401b038082111561596857600080fd5b818501915085601f83011261597c57600080fd5b8151602061598c614fc1836158b5565b82815260059290921b840181019181810190898411156159ab57600080fd5b948201945b838610156159d25785516159c381614b4b565b825294820194908201906159b0565b918801519196509093505050808211156159eb57600080fd5b506159f8858286016158d8565b9150509250929050565b60008154615a0f81615359565b60018281168015615a275760018114615a3c57615a6b565b60ff1984168752821515830287019450615a6b565b8560005260208060002060005b85811015615a625781548a820152908401908201615a49565b50505082870194505b5050505092915050565b60006127ba615a848386615a02565b84615a02565b600060208284031215615a9c57600080fd5b81516001600160401b03811115615ab257600080fd5b8201601f81018413615ac357600080fd5b8051615ad1614fc182614f8c565b818152856020838501011115615ae657600080fd5b61528e826020830160208601614acf565b6000615b038285615a02565b8351615b13818360208801614acf565b01949350505050565b81810381811115610a6557610a6561532a565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090615b7890830184614af3565b9695505050505050565b600060208284031215615b9457600080fd5b815161114d81614a9c56fea264697066735822122093dce42f45a8acee361f40744eff773a74492ac573d9ed932be79d5fb847378564736f6c63430008110033