[ { "inputs": [ { "internalType": "address", "name": "defaultAdmin", "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": [ { "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": [], "name": "MoxiePass_InvalidAdmin", "type": "error" }, { "inputs": [], "name": "MoxiePass_InvalidMinter", "type": "error" }, { "inputs": [], "name": "MoxiePass_OnlyOneMintAllowed", "type": "error" }, { "inputs": [], "name": "MoxiePass_TransferNotAllowed", "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": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MINTER_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": "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": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "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": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "callerConfirmation", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "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": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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" } ]
60806040523480156200001157600080fd5b50604051620032b0380380620032b08339818101604052810190620000379190620003c9565b6040518060400160405280600a81526020017f4d6f7869652050617373000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d585000000000000000000000000000000000000000000000000000000000008152508160009081620000b491906200068a565b508060019081620000c691906200068a565b505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000130576040517ff07ddfd600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000197576040517f0b6574bb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620001ac6000801b83620001e860201b60201c565b50620001df7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a682620001e860201b60201c565b50505062000771565b6000620001fc8383620002ec60201b60201c565b620002e15760016007600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200027d6200035760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050620002e6565b600090505b92915050565b60006007600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003918262000364565b9050919050565b620003a38162000384565b8114620003af57600080fd5b50565b600081519050620003c38162000398565b92915050565b60008060408385031215620003e357620003e26200035f565b5b6000620003f385828601620003b2565b92505060206200040685828601620003b2565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200049257607f821691505b602082108103620004a857620004a76200044a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005127fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004d3565b6200051e8683620004d3565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200056b620005656200055f8462000536565b62000540565b62000536565b9050919050565b6000819050919050565b62000587836200054a565b6200059f620005968262000572565b848454620004e0565b825550505050565b600090565b620005b6620005a7565b620005c38184846200057c565b505050565b5b81811015620005eb57620005df600082620005ac565b600181019050620005c9565b5050565b601f8211156200063a576200060481620004ae565b6200060f84620004c3565b810160208510156200061f578190505b620006376200062e85620004c3565b830182620005c8565b50505b505050565b600082821c905092915050565b60006200065f600019846008026200063f565b1980831691505092915050565b60006200067a83836200064c565b9150826002028217905092915050565b620006958262000410565b67ffffffffffffffff811115620006b157620006b06200041b565b5b620006bd825462000479565b620006ca828285620005ef565b600060209050601f831160018114620007025760008415620006ed578287015190505b620006f985826200066c565b86555062000769565b601f1984166200071286620004ae565b60005b828110156200073c5784890151825560018201915060208501945060208101905062000715565b868310156200075c578489015162000758601f8916826200064c565b8355505b6001600288020188555050505b505050505050565b612b2f80620007816000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063b88d4fde1161007c578063b88d4fde1461035e578063c87b56dd1461037a578063d0def521146103aa578063d5391393146103c6578063d547741f146103e4578063e985e9c51461040057610137565b806370a08231146102a657806391d14854146102d657806395d89b4114610306578063a217fddf14610324578063a22cb4651461034257610137565b8063248a9ca3116100ff578063248a9ca3146101f25780632f2ff15d1461022257806336568abe1461023e57806342842e0e1461025a5780636352211e1461027657610137565b806301ffc9a71461013c57806306fdde031461016c578063081812fc1461018a578063095ea7b3146101ba57806323b872dd146101d6575b600080fd5b61015660048036038101906101519190611e91565b610430565b6040516101639190611ed9565b60405180910390f35b610174610442565b6040516101819190611f84565b60405180910390f35b6101a4600480360381019061019f9190611fdc565b6104d4565b6040516101b1919061204a565b60405180910390f35b6101d460048036038101906101cf9190612091565b6104f0565b005b6101f060048036038101906101eb91906120d1565b610506565b005b61020c6004803603810190610207919061215a565b610608565b6040516102199190612196565b60405180910390f35b61023c600480360381019061023791906121b1565b610628565b005b610258600480360381019061025391906121b1565b61064a565b005b610274600480360381019061026f91906120d1565b6106c5565b005b610290600480360381019061028b9190611fdc565b6106e5565b60405161029d919061204a565b60405180910390f35b6102c060048036038101906102bb91906121f1565b6106f7565b6040516102cd919061222d565b60405180910390f35b6102f060048036038101906102eb91906121b1565b6107b1565b6040516102fd9190611ed9565b60405180910390f35b61030e61081c565b60405161031b9190611f84565b60405180910390f35b61032c6108ae565b6040516103399190612196565b60405180910390f35b61035c60048036038101906103579190612274565b6108b5565b005b610378600480360381019061037391906123e9565b6108cb565b005b610394600480360381019061038f9190611fdc565b6108e8565b6040516103a19190611f84565b60405180910390f35b6103c460048036038101906103bf919061250d565b6108fa565b005b6103ce610959565b6040516103db9190612196565b60405180910390f35b6103fe60048036038101906103f991906121b1565b61097d565b005b61041a60048036038101906104159190612569565b61099f565b6040516104279190611ed9565b60405180910390f35b600061043b82610a33565b9050919050565b606060008054610451906125d8565b80601f016020809104026020016040519081016040528092919081815260200182805461047d906125d8565b80156104ca5780601f1061049f576101008083540402835291602001916104ca565b820191906000526020600020905b8154815290600101906020018083116104ad57829003601f168201915b5050505050905090565b60006104df82610aad565b506104e982610b35565b9050919050565b61050282826104fd610b72565b610b7a565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036105785760006040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161056f919061204a565b60405180910390fd5b600061058c8383610587610b72565b610b8c565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610602578382826040517f64283d7b0000000000000000000000000000000000000000000000000000000081526004016105f993929190612609565b60405180910390fd5b50505050565b600060076000838152602001908152602001600020600101549050919050565b61063182610608565b61063a81610c5e565b6106448383610c72565b50505050565b610652610b72565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106b6576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106c08282610d64565b505050565b6106e0838383604051806020016040528060008152506108cb565b505050565b60006106f082610aad565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361076a5760006040517f89c62b64000000000000000000000000000000000000000000000000000000008152600401610761919061204a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006007600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60606001805461082b906125d8565b80601f0160208091040260200160405190810160405280929190818152602001828054610857906125d8565b80156108a45780601f10610879576101008083540402835291602001916108a4565b820191906000526020600020905b81548152906001019060200180831161088757829003601f168201915b5050505050905090565b6000801b81565b6108c76108c0610b72565b8383610e57565b5050565b6108d6848484610506565b6108e284848484610fc6565b50505050565b60606108f38261117d565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661092481610c5e565b6000600860008154809291906109399061266f565b9190505590506109498482611290565b6109538184611389565b50505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b61098682610608565b61098f81610c5e565b6109998383610d64565b50505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610aa65750610aa5826113e5565b5b9050919050565b600080610ab983611446565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b2c57826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401610b23919061222d565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b610b878383836001611483565b505050565b600080610b9884611446565b90506000610ba5866106f7565b90506000811115610be2576040517f2925ca0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610c48576040517fa90052b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c53868686611648565b925050509392505050565b610c6f81610c6a610b72565b611862565b50565b6000610c7e83836107b1565b610d595760016007600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610cf6610b72565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050610d5e565b600090505b92915050565b6000610d7083836107b1565b15610e4c5760006007600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610de9610b72565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a460019050610e51565b600090505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ec857816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401610ebf919061204a565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610fb99190611ed9565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115611177578273ffffffffffffffffffffffffffffffffffffffff1663150b7a0261100a610b72565b8685856040518563ffffffff1660e01b815260040161102c949392919061270c565b6020604051808303816000875af192505050801561106857506040513d601f19601f82011682018060405250810190611065919061276d565b60015b6110ec573d8060008114611098576040519150601f19603f3d011682016040523d82523d6000602084013e61109d565b606091505b5060008151036110e457836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016110db919061204a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461117557836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161116c919061204a565b60405180910390fd5b505b50505050565b606061118882610aad565b5060006006600084815260200190815260200160002080546111a9906125d8565b80601f01602080910402602001604051908101604052809291908181526020018280546111d5906125d8565b80156112225780601f106111f757610100808354040283529160200191611222565b820191906000526020600020905b81548152906001019060200180831161120557829003601f168201915b5050505050905060006112336118b3565b9050600081510361124857819250505061128b565b60008251111561127d5780826040516020016112659291906127d6565b6040516020818303038152906040529250505061128b565b611286846118ca565b925050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113025760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016112f9919061204a565b60405180910390fd5b600061131083836000610b8c565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146113845760006040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260040161137b919061204a565b60405180910390fd5b505050565b806006600084815260200190815260200160002090816113a991906129a6565b507ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce7826040516113d9919061222d565b60405180910390a15050565b6000634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061143f575061143e82611933565b5b9050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806114bc5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156115f05760006114cc84610aad565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561153757508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561154a5750611548818461099f565b155b1561158c57826040517fa9fbf51f000000000000000000000000000000000000000000000000000000008152600401611583919061204a565b60405180910390fd5b81156115ee57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b60008061165484611446565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461169657611695818486611a15565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611727576116d8600085600080611483565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146117aa576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b61186c82826107b1565b6118af5780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016118a6929190612a78565b60405180910390fd5b5050565b606060405180602001604052806000815250905090565b60606118d582610aad565b5060006118e06118b3565b90506000815111611900576040518060200160405280600081525061192b565b8061190a84611ad9565b60405160200161191b9291906127d6565b6040516020818303038152906040525b915050919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806119fe57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a0e5750611a0d82611ba7565b5b9050919050565b611a20838383611c11565b611ad457600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a9557806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611a8c919061222d565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401611acb929190612aa1565b60405180910390fd5b505050565b606060006001611ae884611cd2565b01905060008167ffffffffffffffff811115611b0757611b066122be565b5b6040519080825280601f01601f191660200182016040528015611b395781602001600182028036833780820191505090505b509050600082602001820190505b600115611b9c578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581611b9057611b8f612aca565b5b04945060008503611b47575b819350505050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611cc957508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c8a5750611c89848461099f565b5b80611cc857508273ffffffffffffffffffffffffffffffffffffffff16611cb083610b35565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611d30577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381611d2657611d25612aca565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310611d6d576d04ee2d6d415b85acef81000000008381611d6357611d62612aca565b5b0492506020810190505b662386f26fc100008310611d9c57662386f26fc100008381611d9257611d91612aca565b5b0492506010810190505b6305f5e1008310611dc5576305f5e1008381611dbb57611dba612aca565b5b0492506008810190505b6127108310611dea576127108381611de057611ddf612aca565b5b0492506004810190505b60648310611e0d5760648381611e0357611e02612aca565b5b0492506002810190505b600a8310611e1c576001810190505b80915050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611e6e81611e39565b8114611e7957600080fd5b50565b600081359050611e8b81611e65565b92915050565b600060208284031215611ea757611ea6611e2f565b5b6000611eb584828501611e7c565b91505092915050565b60008115159050919050565b611ed381611ebe565b82525050565b6000602082019050611eee6000830184611eca565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f2e578082015181840152602081019050611f13565b60008484015250505050565b6000601f19601f8301169050919050565b6000611f5682611ef4565b611f608185611eff565b9350611f70818560208601611f10565b611f7981611f3a565b840191505092915050565b60006020820190508181036000830152611f9e8184611f4b565b905092915050565b6000819050919050565b611fb981611fa6565b8114611fc457600080fd5b50565b600081359050611fd681611fb0565b92915050565b600060208284031215611ff257611ff1611e2f565b5b600061200084828501611fc7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061203482612009565b9050919050565b61204481612029565b82525050565b600060208201905061205f600083018461203b565b92915050565b61206e81612029565b811461207957600080fd5b50565b60008135905061208b81612065565b92915050565b600080604083850312156120a8576120a7611e2f565b5b60006120b68582860161207c565b92505060206120c785828601611fc7565b9150509250929050565b6000806000606084860312156120ea576120e9611e2f565b5b60006120f88682870161207c565b93505060206121098682870161207c565b925050604061211a86828701611fc7565b9150509250925092565b6000819050919050565b61213781612124565b811461214257600080fd5b50565b6000813590506121548161212e565b92915050565b6000602082840312156121705761216f611e2f565b5b600061217e84828501612145565b91505092915050565b61219081612124565b82525050565b60006020820190506121ab6000830184612187565b92915050565b600080604083850312156121c8576121c7611e2f565b5b60006121d685828601612145565b92505060206121e78582860161207c565b9150509250929050565b60006020828403121561220757612206611e2f565b5b60006122158482850161207c565b91505092915050565b61222781611fa6565b82525050565b6000602082019050612242600083018461221e565b92915050565b61225181611ebe565b811461225c57600080fd5b50565b60008135905061226e81612248565b92915050565b6000806040838503121561228b5761228a611e2f565b5b60006122998582860161207c565b92505060206122aa8582860161225f565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6122f682611f3a565b810181811067ffffffffffffffff82111715612315576123146122be565b5b80604052505050565b6000612328611e25565b905061233482826122ed565b919050565b600067ffffffffffffffff821115612354576123536122be565b5b61235d82611f3a565b9050602081019050919050565b82818337600083830152505050565b600061238c61238784612339565b61231e565b9050828152602081018484840111156123a8576123a76122b9565b5b6123b384828561236a565b509392505050565b600082601f8301126123d0576123cf6122b4565b5b81356123e0848260208601612379565b91505092915050565b6000806000806080858703121561240357612402611e2f565b5b60006124118782880161207c565b94505060206124228782880161207c565b935050604061243387828801611fc7565b925050606085013567ffffffffffffffff81111561245457612453611e34565b5b612460878288016123bb565b91505092959194509250565b600067ffffffffffffffff821115612487576124866122be565b5b61249082611f3a565b9050602081019050919050565b60006124b06124ab8461246c565b61231e565b9050828152602081018484840111156124cc576124cb6122b9565b5b6124d784828561236a565b509392505050565b600082601f8301126124f4576124f36122b4565b5b813561250484826020860161249d565b91505092915050565b6000806040838503121561252457612523611e2f565b5b60006125328582860161207c565b925050602083013567ffffffffffffffff81111561255357612552611e34565b5b61255f858286016124df565b9150509250929050565b600080604083850312156125805761257f611e2f565b5b600061258e8582860161207c565b925050602061259f8582860161207c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806125f057607f821691505b602082108103612603576126026125a9565b5b50919050565b600060608201905061261e600083018661203b565b61262b602083018561221e565b612638604083018461203b565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061267a82611fa6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036126ac576126ab612640565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b60006126de826126b7565b6126e881856126c2565b93506126f8818560208601611f10565b61270181611f3a565b840191505092915050565b6000608082019050612721600083018761203b565b61272e602083018661203b565b61273b604083018561221e565b818103606083015261274d81846126d3565b905095945050505050565b60008151905061276781611e65565b92915050565b60006020828403121561278357612782611e2f565b5b600061279184828501612758565b91505092915050565b600081905092915050565b60006127b082611ef4565b6127ba818561279a565b93506127ca818560208601611f10565b80840191505092915050565b60006127e282856127a5565b91506127ee82846127a5565b91508190509392505050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261285c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261281f565b612866868361281f565b95508019841693508086168417925050509392505050565b6000819050919050565b60006128a361289e61289984611fa6565b61287e565b611fa6565b9050919050565b6000819050919050565b6128bd83612888565b6128d16128c9826128aa565b84845461282c565b825550505050565b600090565b6128e66128d9565b6128f18184846128b4565b505050565b5b818110156129155761290a6000826128de565b6001810190506128f7565b5050565b601f82111561295a5761292b816127fa565b6129348461280f565b81016020851015612943578190505b61295761294f8561280f565b8301826128f6565b50505b505050565b600082821c905092915050565b600061297d6000198460080261295f565b1980831691505092915050565b6000612996838361296c565b9150826002028217905092915050565b6129af82611ef4565b67ffffffffffffffff8111156129c8576129c76122be565b5b6129d282546125d8565b6129dd828285612919565b600060209050601f831160018114612a1057600084156129fe578287015190505b612a08858261298a565b865550612a70565b601f198416612a1e866127fa565b60005b82811015612a4657848901518255600182019150602085019450602081019050612a21565b86831015612a635784890151612a5f601f89168261296c565b8355505b6001600288020188555050505b505050505050565b6000604082019050612a8d600083018561203b565b612a9a6020830184612187565b9392505050565b6000604082019050612ab6600083018561203b565b612ac3602083018461221e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fdfea26469706673582212206ce3e34cdabc412cf46aee13abc54d717ce215eba8258b22a64e6842f278c17864736f6c634300081800330000000000000000000000009313ede439fc91852d4fd8f753c5569255286790000000000000000000000000717ef586e0858823a56662bb0572b26a726e714d