[ { "inputs": [ { "internalType": "address", "name": "defaultAdmin", "type": "address" }, { "internalType": "address", "name": "pauser", "type": "address" }, { "internalType": "address", "name": "minter", "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": "ERC721EnumerableForbiddenBatchMint", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721IncorrectOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721InsufficientApproval", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC721InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC721InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721InvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC721InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC721InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721NonexistentToken", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "ERC721OutOfBoundsIndex", "type": "error" }, { "inputs": [], "name": "EnforcedPause", "type": "error" }, { "inputs": [], "name": "ExpectedPause", "type": "error" }, { "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": "uint256", "name": "_fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_toTokenId", "type": "uint256" } ], "name": "BatchMetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "MetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "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" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINTER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PAUSER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "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": "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": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "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": "to", "type": "address" } ], "name": "safeMint", "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": "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": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040526001600d55348015610014575f80fd5b50604051613e3d380380613e3d83398181016040528101906100369190610318565b6040518060400160405280601081526020017f34353262204163636573732050617373000000000000000000000000000000008152506040518060400160405280600481526020017f3435324200000000000000000000000000000000000000000000000000000000815250815f90816100b091906105a2565b5080600190816100c091906105a2565b5050505f600b5f6101000a81548160ff0219169083151502179055506100ee5f801b8461015960201b60201c565b5061011f7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8361015960201b60201c565b506101507f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a68261015960201b60201c565b50505050610671565b5f61016a838361024f60201b60201c565b610245576001600c5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506101e26102b360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050610249565b5f90505b92915050565b5f600c5f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f33905090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6102e7826102be565b9050919050565b6102f7816102dd565b8114610301575f80fd5b50565b5f81519050610312816102ee565b92915050565b5f805f6060848603121561032f5761032e6102ba565b5b5f61033c86828701610304565b935050602061034d86828701610304565b925050604061035e86828701610304565b9150509250925092565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806103e357607f821691505b6020821081036103f6576103f561039f565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026104587fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261041d565b610462868361041d565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6104a66104a161049c8461047a565b610483565b61047a565b9050919050565b5f819050919050565b6104bf8361048c565b6104d36104cb826104ad565b848454610429565b825550505050565b5f90565b6104e76104db565b6104f28184846104b6565b505050565b5b818110156105155761050a5f826104df565b6001810190506104f8565b5050565b601f82111561055a5761052b816103fc565b6105348461040e565b81016020851015610543578190505b61055761054f8561040e565b8301826104f7565b50505b505050565b5f82821c905092915050565b5f61057a5f198460080261055f565b1980831691505092915050565b5f610592838361056b565b9150826002028217905092915050565b6105ab82610368565b67ffffffffffffffff8111156105c4576105c3610372565b5b6105ce82546103cc565b6105d9828285610519565b5f60209050601f83116001811461060a575f84156105f8578287015190505b6106028582610587565b865550610669565b601f198416610618866103fc565b5f5b8281101561063f5784890151825560018201915060208501945060208101905061061a565b8683101561065c5784890151610658601f89168261056b565b8355505b6001600288020188555050505b505050505050565b6137bf8061067e5f395ff3fe608060405234801561000f575f80fd5b50600436106101cd575f3560e01c80634f6ccce711610102578063a217fddf116100a0578063d53913931161006f578063d539139314610527578063d547741f14610545578063e63ab1e914610561578063e985e9c51461057f576101cd565b8063a217fddf146104a1578063a22cb465146104bf578063b88d4fde146104db578063c87b56dd146104f7576101cd565b806370a08231116100dc57806370a08231146104195780638456cb591461044957806391d148541461045357806395d89b4114610483576101cd565b80634f6ccce71461039b5780635c975abb146103cb5780636352211e146103e9576101cd565b80632f2ff15d1161016f5780633f4ba83a116101495780633f4ba83a1461033d57806340d097c31461034757806342842e0e1461036357806342966c681461037f576101cd565b80632f2ff15d146102d55780632f745c59146102f157806336568abe14610321576101cd565b8063095ea7b3116101ab578063095ea7b31461024f57806318160ddd1461026b57806323b872dd14610289578063248a9ca3146102a5576101cd565b806301ffc9a7146101d157806306fdde0314610201578063081812fc1461021f575b5f80fd5b6101eb60048036038101906101e69190612a32565b6105af565b6040516101f89190612a77565b60405180910390f35b6102096105c0565b6040516102169190612b00565b60405180910390f35b61023960048036038101906102349190612b53565b61064f565b6040516102469190612bbd565b60405180910390f35b61026960048036038101906102649190612c00565b61066a565b005b610273610680565b6040516102809190612c4d565b60405180910390f35b6102a3600480360381019061029e9190612c66565b61068c565b005b6102bf60048036038101906102ba9190612ce9565b6106e4565b6040516102cc9190612d23565b60405180910390f35b6102ef60048036038101906102ea9190612d3c565b610701565b005b61030b60048036038101906103069190612c00565b610723565b6040516103189190612c4d565b60405180910390f35b61033b60048036038101906103369190612d3c565b6107c7565b005b610345610842565b005b610361600480360381019061035c9190612d7a565b610877565b005b61037d60048036038101906103789190612c66565b6108fa565b005b61039960048036038101906103949190612b53565b610919565b005b6103b560048036038101906103b09190612b53565b61092f565b6040516103c29190612c4d565b60405180910390f35b6103d36109a1565b6040516103e09190612a77565b60405180910390f35b61040360048036038101906103fe9190612b53565b6109b6565b6040516104109190612bbd565b60405180910390f35b610433600480360381019061042e9190612d7a565b6109c7565b6040516104409190612c4d565b60405180910390f35b610451610a7d565b005b61046d60048036038101906104689190612d3c565b610ab2565b60405161047a9190612a77565b60405180910390f35b61048b610b16565b6040516104989190612b00565b60405180910390f35b6104a9610ba6565b6040516104b69190612d23565b60405180910390f35b6104d960048036038101906104d49190612dcf565b610bac565b005b6104f560048036038101906104f09190612f39565b610bc2565b005b610511600480360381019061050c9190612b53565b610c1c565b60405161051e9190612b00565b60405180910390f35b61052f610c2e565b60405161053c9190612d23565b60405180910390f35b61055f600480360381019061055a9190612d3c565b610c52565b005b610569610c74565b6040516105769190612d23565b60405180910390f35b61059960048036038101906105949190612fb9565b610c98565b6040516105a69190612a77565b60405180910390f35b5f6105b982610d26565b9050919050565b60605f80546105ce90613024565b80601f01602080910402602001604051908101604052809291908181526020018280546105fa90613024565b80156106455780601f1061061c57610100808354040283529160200191610645565b820191905f5260205f20905b81548152906001019060200180831161062857829003601f168201915b5050505050905090565b5f61065982610d9f565b5061066382610e25565b9050919050565b61067c8282610677610e5e565b610e65565b5050565b5f600880549050905090565b61069581610e77565b6106d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cb906130c4565b60405180910390fd5b6106df838383610f39565b505050565b5f600c5f8381526020019081526020015f20600101549050919050565b61070a826106e4565b610713816110a1565b61071d83836110b5565b50505050565b5f61072d836109c7565b82106107725782826040517fa57d13dc0000000000000000000000000000000000000000000000000000000081526004016107699291906130e2565b60405180910390fd5b60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2054905092915050565b6107cf610e5e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610833576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61083d828261119f565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61086c816110a1565b610874611289565b50565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66108a1816110a1565b5f600d5f8154809291906108b490613136565b9190505590506108c483826112ea565b6108f5816108d183611307565b6040516020016108e19190613201565b604051602081830303815290604052611485565b505050565b61091483838360405180602001604052805f815250610bc2565b505050565b61092b5f82610926610e5e565b6114df565b5050565b5f610938610680565b821061097d575f826040517fa57d13dc0000000000000000000000000000000000000000000000000000000081526004016109749291906130e2565b60405180910390fd5b6008828154811061099157610990613222565b5b905f5260205f2001549050919050565b5f600b5f9054906101000a900460ff16905090565b5f6109c082610d9f565b9050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a38575f6040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401610a2f9190612bbd565b60405180910390fd5b60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610aa7816110a1565b610aaf6114f4565b50565b5f600c5f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b606060018054610b2590613024565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5190613024565b8015610b9c5780601f10610b7357610100808354040283529160200191610b9c565b820191905f5260205f20905b815481529060010190602001808311610b7f57829003601f168201915b5050505050905090565b5f801b81565b610bbe610bb7610e5e565b8383611556565b5050565b610bcb82610e77565b610c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c01906130c4565b60405180910390fd5b610c16848484846116bf565b50505050565b6060610c27826116dc565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610c5b826106e4565b610c64816110a1565b610c6e838361119f565b50505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b5f60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610d985750610d97826117e7565b5b9050919050565b5f80610daa83611847565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e1c57826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610e139190612c4d565b60405180910390fd5b80915050919050565b5f60045f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f33905090565b610e728383836001611880565b505050565b5f80610e82836109b6565b9050610e8c610e5e565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610eff5750610ec8610e5e565b73ffffffffffffffffffffffffffffffffffffffff16610ee78461064f565b73ffffffffffffffffffffffffffffffffffffffff16145b80610f175750610f1681610f11610e5e565b610c98565b5b80610f315750610f305f801b610f2b610e5e565b610ab2565b5b915050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fa9575f6040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610fa09190612bbd565b60405180910390fd5b5f610fb583835f6114df565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361102757816040517f7e27328900000000000000000000000000000000000000000000000000000000815260040161101e9190612c4d565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461109b578382826040517f64283d7b0000000000000000000000000000000000000000000000000000000081526004016110929392919061324f565b60405180910390fd5b50505050565b6110b2816110ad610e5e565b611a3f565b50565b5f6110c08383610ab2565b611195576001600c5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611132610e5e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050611199565b5f90505b92915050565b5f6111aa8383610ab2565b1561127f575f600c5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061121c610e5e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a460019050611283565b5f90505b92915050565b611291611a90565b5f600b5f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6112d3610e5e565b6040516112e09190612bbd565b60405180910390a1565b611303828260405180602001604052805f815250611ad0565b5050565b60605f820361134d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611480565b5f8290505f5b5f821461137c57808061136590613136565b915050600a8261137591906132b1565b9150611353565b5f8167ffffffffffffffff81111561139757611396612e15565b5b6040519080825280601f01601f1916602001820160405280156113c95781602001600182028036833780820191505090505b5090505f8290505b5f8614611478576001816113e591906132e1565b90505f600a80886113f691906132b1565b6114009190613314565b8761140b91906132e1565b60306114179190613361565b90505f8160f81b90508084848151811061143457611433613222565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a8861146f91906132b1565b975050506113d1565b819450505050505b919050565b80600a5f8481526020019081526020015f2090816114a39190613532565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7826040516114d39190612c4d565b60405180910390a15050565b5f6114eb848484611aeb565b90509392505050565b6114fc611b08565b6001600b5f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861153f610e5e565b60405161154c9190612bbd565b60405180910390a1565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115c657816040517f5b08ba180000000000000000000000000000000000000000000000000000000081526004016115bd9190612bbd565b60405180910390fd5b8060055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116b29190612a77565b60405180910390a3505050565b6116ca848484610f39565b6116d684848484611b49565b50505050565b60606116e782610d9f565b505f600a5f8481526020019081526020015f20805461170590613024565b80601f016020809104026020016040519081016040528092919081815260200182805461173190613024565b801561177c5780601f106117535761010080835404028352916020019161177c565b820191905f5260205f20905b81548152906001019060200180831161175f57829003601f168201915b505050505090505f61178c611cfb565b90505f8151036117a05781925050506117e2565b5f825111156117d45780826040516020016117bc929190613601565b604051602081830303815290604052925050506117e2565b6117dd84611d1b565b925050505b919050565b5f634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611840575061183f82611d81565b5b9050919050565b5f60025f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806118b857505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156119ea575f6118c784610d9f565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561193157508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561194457506119428184610c98565b155b1561198657826040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815260040161197d9190612bbd565b60405180910390fd5b81156119e857838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b8360045f8581526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b611a498282610ab2565b611a8c5780826040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401611a83929190613624565b60405180910390fd5b5050565b611a986109a1565b611ace576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611ada8383611dfa565b611ae65f848484611b49565b505050565b5f611af4611b08565b611aff848484611eed565b90509392505050565b611b106109a1565b15611b47576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f8373ffffffffffffffffffffffffffffffffffffffff163b1115611cf5578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02611b8c610e5e565b8685856040518563ffffffff1660e01b8152600401611bae949392919061369d565b6020604051808303815f875af1925050508015611be957506040513d601f19601f82011682018060405250810190611be691906136fb565b60015b611c6a573d805f8114611c17576040519150601f19603f3d011682016040523d82523d5f602084013e611c1c565b606091505b505f815103611c6257836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611c599190612bbd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611cf357836040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611cea9190612bbd565b60405180910390fd5b505b50505050565b606060405180606001604052806036815260200161375460369139905090565b6060611d2682610d9f565b505f611d30611cfb565b90505f815111611d4e5760405180602001604052805f815250611d79565b80611d5884612007565b604051602001611d69929190613601565b6040516020818303038152906040525b915050919050565b5f7f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611df35750611df2826120d1565b5b9050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e6a575f6040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401611e619190612bbd565b60405180910390fd5b5f611e7683835f6114df565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611ee8575f6040517f73c6ac6e000000000000000000000000000000000000000000000000000000008152600401611edf9190612bbd565b60405180910390fd5b505050565b5f80611efa8585856121b2565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f3d57611f38846123bd565b611f7c565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611f7b57611f7a8185612401565b5b5b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611fbd57611fb88461254b565b611ffc565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611ffb57611ffa858561260b565b5b5b809150509392505050565b60605f60016120158461268f565b0190505f8167ffffffffffffffff81111561203357612032612e15565b5b6040519080825280601f01601f1916602001820160405280156120655781602001600182028036833780820191505090505b5090505f82602001820190505b6001156120c6578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816120bb576120ba613284565b5b0494505f8503612072575b819350505050919050565b5f7f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061219b57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806121ab57506121aa826127e0565b5b9050919050565b5f806121bd84611847565b90505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146121fe576121fd818486612849565b5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146122895761223d5f855f80611880565b600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825403925050819055505b5f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461230857600160035f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8460025f8681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b60088054905060095f8381526020019081526020015f2081905550600881908060018154018082558091505060019003905f5260205f20015f909190919091505550565b5f61240b836109c7565b90505f60075f8481526020019081526020015f205490508181146124e2575f60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f205490508060065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f20819055508160075f8381526020019081526020015f2081905550505b60075f8481526020019081526020015f205f905560065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f205f905550505050565b5f600160088054905061255e91906132e1565b90505f60095f8481526020019081526020015f205490505f6008838154811061258a57612589613222565b5b905f5260205f200154905080600883815481106125aa576125a9613222565b5b905f5260205f2001819055508160095f8381526020019081526020015f208190555060095f8581526020019081526020015f205f905560088054806125f2576125f1613726565b5b600190038181905f5260205f20015f9055905550505050565b5f6001612617846109c7565b61262191906132e1565b90508160065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f20819055508060075f8481526020019081526020015f2081905550505050565b5f805f90507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106126eb577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816126e1576126e0613284565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612728576d04ee2d6d415b85acef8100000000838161271e5761271d613284565b5b0492506020810190505b662386f26fc10000831061275757662386f26fc10000838161274d5761274c613284565b5b0492506010810190505b6305f5e1008310612780576305f5e100838161277657612775613284565b5b0492506008810190505b61271083106127a557612710838161279b5761279a613284565b5b0492506004810190505b606483106127c857606483816127be576127bd613284565b5b0492506002810190505b600a83106127d7576001810190505b80915050919050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61285483838361290c565b612907575f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128c857806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016128bf9190612c4d565b60405180910390fd5b81816040517f177e802f0000000000000000000000000000000000000000000000000000000081526004016128fe9291906130e2565b60405180910390fd5b505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129c357508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061298457506129838484610c98565b5b806129c257508273ffffffffffffffffffffffffffffffffffffffff166129aa83610e25565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612a11816129dd565b8114612a1b575f80fd5b50565b5f81359050612a2c81612a08565b92915050565b5f60208284031215612a4757612a466129d5565b5b5f612a5484828501612a1e565b91505092915050565b5f8115159050919050565b612a7181612a5d565b82525050565b5f602082019050612a8a5f830184612a68565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612ad282612a90565b612adc8185612a9a565b9350612aec818560208601612aaa565b612af581612ab8565b840191505092915050565b5f6020820190508181035f830152612b188184612ac8565b905092915050565b5f819050919050565b612b3281612b20565b8114612b3c575f80fd5b50565b5f81359050612b4d81612b29565b92915050565b5f60208284031215612b6857612b676129d5565b5b5f612b7584828501612b3f565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612ba782612b7e565b9050919050565b612bb781612b9d565b82525050565b5f602082019050612bd05f830184612bae565b92915050565b612bdf81612b9d565b8114612be9575f80fd5b50565b5f81359050612bfa81612bd6565b92915050565b5f8060408385031215612c1657612c156129d5565b5b5f612c2385828601612bec565b9250506020612c3485828601612b3f565b9150509250929050565b612c4781612b20565b82525050565b5f602082019050612c605f830184612c3e565b92915050565b5f805f60608486031215612c7d57612c7c6129d5565b5b5f612c8a86828701612bec565b9350506020612c9b86828701612bec565b9250506040612cac86828701612b3f565b9150509250925092565b5f819050919050565b612cc881612cb6565b8114612cd2575f80fd5b50565b5f81359050612ce381612cbf565b92915050565b5f60208284031215612cfe57612cfd6129d5565b5b5f612d0b84828501612cd5565b91505092915050565b612d1d81612cb6565b82525050565b5f602082019050612d365f830184612d14565b92915050565b5f8060408385031215612d5257612d516129d5565b5b5f612d5f85828601612cd5565b9250506020612d7085828601612bec565b9150509250929050565b5f60208284031215612d8f57612d8e6129d5565b5b5f612d9c84828501612bec565b91505092915050565b612dae81612a5d565b8114612db8575f80fd5b50565b5f81359050612dc981612da5565b92915050565b5f8060408385031215612de557612de46129d5565b5b5f612df285828601612bec565b9250506020612e0385828601612dbb565b9150509250929050565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612e4b82612ab8565b810181811067ffffffffffffffff82111715612e6a57612e69612e15565b5b80604052505050565b5f612e7c6129cc565b9050612e888282612e42565b919050565b5f67ffffffffffffffff821115612ea757612ea6612e15565b5b612eb082612ab8565b9050602081019050919050565b828183375f83830152505050565b5f612edd612ed884612e8d565b612e73565b905082815260208101848484011115612ef957612ef8612e11565b5b612f04848285612ebd565b509392505050565b5f82601f830112612f2057612f1f612e0d565b5b8135612f30848260208601612ecb565b91505092915050565b5f805f8060808587031215612f5157612f506129d5565b5b5f612f5e87828801612bec565b9450506020612f6f87828801612bec565b9350506040612f8087828801612b3f565b925050606085013567ffffffffffffffff811115612fa157612fa06129d9565b5b612fad87828801612f0c565b91505092959194509250565b5f8060408385031215612fcf57612fce6129d5565b5b5f612fdc85828601612bec565b9250506020612fed85828601612bec565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061303b57607f821691505b60208210810361304e5761304d612ff7565b5b50919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f5f8201527f776e6572206e6f7220617070726f766564206e6f722061646d696e0000000000602082015250565b5f6130ae603b83612a9a565b91506130b982613054565b604082019050919050565b5f6020820190508181035f8301526130db816130a2565b9050919050565b5f6040820190506130f55f830185612bae565b6131026020830184612c3e565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61314082612b20565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361317257613171613109565b5b600182019050919050565b5f81905092915050565b5f61319182612a90565b61319b818561317d565b93506131ab818560208601612aaa565b80840191505092915050565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000005f82015250565b5f6131eb60058361317d565b91506131f6826131b7565b600582019050919050565b5f61320c8284613187565b9150613217826131df565b915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f6060820190506132625f830186612bae565b61326f6020830185612c3e565b61327c6040830184612bae565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6132bb82612b20565b91506132c683612b20565b9250826132d6576132d5613284565b5b828204905092915050565b5f6132eb82612b20565b91506132f683612b20565b925082820390508181111561330e5761330d613109565b5b92915050565b5f61331e82612b20565b915061332983612b20565b925082820261333781612b20565b9150828204841483151761334e5761334d613109565b5b5092915050565b5f60ff82169050919050565b5f61336b82613355565b915061337683613355565b9250828201905060ff81111561338f5761338e613109565b5b92915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026133f17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826133b6565b6133fb86836133b6565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61343661343161342c84612b20565b613413565b612b20565b9050919050565b5f819050919050565b61344f8361341c565b61346361345b8261343d565b8484546133c2565b825550505050565b5f90565b61347761346b565b613482818484613446565b505050565b5b818110156134a55761349a5f8261346f565b600181019050613488565b5050565b601f8211156134ea576134bb81613395565b6134c4846133a7565b810160208510156134d3578190505b6134e76134df856133a7565b830182613487565b50505b505050565b5f82821c905092915050565b5f61350a5f19846008026134ef565b1980831691505092915050565b5f61352283836134fb565b9150826002028217905092915050565b61353b82612a90565b67ffffffffffffffff81111561355457613553612e15565b5b61355e8254613024565b6135698282856134a9565b5f60209050601f83116001811461359a575f8415613588578287015190505b6135928582613517565b8655506135f9565b601f1984166135a886613395565b5f5b828110156135cf578489015182556001820191506020850194506020810190506135aa565b868310156135ec57848901516135e8601f8916826134fb565b8355505b6001600288020188555050505b505050505050565b5f61360c8285613187565b91506136188284613187565b91508190509392505050565b5f6040820190506136375f830185612bae565b6136446020830184612d14565b9392505050565b5f81519050919050565b5f82825260208201905092915050565b5f61366f8261364b565b6136798185613655565b9350613689818560208601612aaa565b61369281612ab8565b840191505092915050565b5f6080820190506136b05f830187612bae565b6136bd6020830186612bae565b6136ca6040830185612c3e565b81810360608301526136dc8184613665565b905095945050505050565b5f815190506136f581612a08565b92915050565b5f602082840312156137105761370f6129d5565b5b5f61371d848285016136e7565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfe697066733a2f2f516d62566f6f57794c4c4b43585448336d424a415a7651503265596b437754746134747a56424e6169794556344c2fa26469706673582212200100749cda336791450d56fb8b61db19b5164cee17068bd8858813a43acc6aca64736f6c634300081a0033000000000000000000000000d831a9d032d19d4b4d4ad76bd93bf91fb8fb07fd000000000000000000000000d831a9d032d19d4b4d4ad76bd93bf91fb8fb07fd000000000000000000000000d831a9d032d19d4b4d4ad76bd93bf91fb8fb07fd