1 tx
178 calls
constructor
constructor(address trustedForwarder, address _mintingSigner, address paymentTokenAddress, address initialOwner)
functions
authorizedMinters
viewfunction authorizedMinters(address) view returns (bool)
balanceOf
viewfunction balanceOf(address account, uint256 id) view returns (uint256)
balanceOfBatch
viewfunction balanceOfBatch(address[] accounts, uint256[] ids) view returns (uint256[])
exists
viewfunction exists(uint256 id) view returns (bool)
isApprovedForAll
viewfunction isApprovedForAll(address account, address operator) view returns (bool)
isTrustedForwarder
viewfunction isTrustedForwarder(address forwarder) view returns (bool)
mintingSigner
viewfunction mintingSigner() view returns (address)
name
purefunction name() pure returns (string)
owner
viewfunction owner() view returns (address)
paymentToken
viewfunction paymentToken() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
purefunction symbol() pure returns (string)
totalSupply
viewfunction totalSupply(uint256 id) view returns (uint256)
uri
viewfunction uri(uint256 id) view returns (string)
authorizeTransfer
nonpayablefunction authorizeTransfer(bytes32 message, bytes signature)
batchBurn
nonpayablefunction batchBurn(uint256[] ids, uint256[] amounts)
batchMint
nonpayablefunction batchMint(address[] recipients, uint256[] ids, uint256[] amounts, string[] uris, uint256 paymentAmount, bytes32 message, bytes signature)
burn
nonpayablefunction burn(address from, uint256 id, uint256 amount)
changeMintingSigner
nonpayablefunction changeMintingSigner(address _newSigner)
multiMint
nonpayablefunction multiMint(address[] recipients, uint256 id, uint256[] amounts, string uri_, uint256 paymentAmount, bytes32 message, bytes signature)
privateMintWithPermit
nonpayablefunction privateMintWithPermit(address user, address[] recipients, uint256 id, uint256[] amounts, string tokenURI, uint256 paymentAmount, bytes32 message, bytes mintSignature)
renounceOwnership
nonpayablefunction renounceOwnership()
safeBatchTransferFrom
nonpayablefunction safeBatchTransferFrom(address from, address to, uint256[] ids, uint256[] amounts, bytes data)
safeMintWithPermit
nonpayablefunction safeMintWithPermit(address user, address[] recipients, uint256 id, uint256[] amounts, string tokenURI, uint256 paymentAmount, bytes32 message, bytes mintSignature)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes data)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setAuthorizedMinter
nonpayablefunction setAuthorizedMinter(address minter, bool authorized)
setPaymentToken
nonpayablefunction setPaymentToken(address tokenAddress)
setTrustedForwarder
nonpayablefunction setTrustedForwarder(address newTrustedForwarder)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdrawERC20
nonpayablefunction withdrawERC20(address tokenAddress, uint256 amount)
withdrawNative
nonpayablefunction withdrawNative(uint256 amount)
events
ApprovalForAll
event ApprovalForAll(address indexed account, address indexed operator, bool approved)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
TransferBatch
event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values)
TransferSingle
event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value)
URI
event URI(string value, uint256 indexed id)
errors
No errors.
creation bytecode
0x60c0604052600060a09081526003906200001a90826200022a565b503480156200002857600080fd5b50604051620053ef380380620053ef8339810160408190526200004b9162000313565b60408051602081019091526000815284906200006781620000d7565b506200007c62000076620000e9565b620000fa565b60016007556001600160a01b03908116608052600980546001600160a01b031990811687841617909155600880548216868416179055600a8054909116918416919091179055620000cd81620000fa565b5050505062000370565b6002620000e582826200022a565b5050565b6000620000f56200014c565b905090565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6009546000906001600160a01b0316331480156200016b575060143610155b156200017e575060131936013560601c90565b503390565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001ae57607f821691505b602082108103620001cf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000225576000816000526020600020601f850160051c81016020861015620002005750805b601f850160051c820191505b8181101562000221578281556001016200020c565b5050505b505050565b81516001600160401b0381111562000246576200024662000183565b6200025e8162000257845462000199565b84620001d5565b602080601f8311600181146200029657600084156200027d5750858301515b600019600386901b1c1916600185901b17855562000221565b600085815260208120601f198616915b82811015620002c757888601518255948401946001909101908401620002a6565b5085821015620002e65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80516001600160a01b03811681146200030e57600080fd5b919050565b600080600080608085870312156200032a57600080fd5b6200033585620002f6565b93506200034560208601620002f6565b92506200035560408601620002f6565b91506200036560608601620002f6565b905092959194509250565b60805161506662000389600039600050506150666000f3fe6080604052600436106101ce5760003560e01c806384276d81116100f6578063cbc7e8c81161008f578063f242432a11610061578063f242432a14610699578063f2fde38b146106b9578063f5298aca146106d9578063f566ac42146106f957005b8063cbc7e8c8146105e3578063da74222814610603578063e985e9c514610623578063ed58bad81461067957005b8063a1db9782116100c8578063a1db978214610546578063a22cb46514610566578063aa2fe91b14610586578063bd85b039146105b657005b806384276d81146104885780638da5cb5b146104a857806391bc853d146104d357806395d89b411461050057005b80633013ce29116101685780636a326ab11161013a5780636a326ab1146104135780636f60e68314610433578063715018a6146104535780637dfa18181461046857005b80633013ce29146103295780634e1273f41461037b5780634f558e79146103a8578063572b6c05146103d757005b806318a379b6116101a157806318a379b6146102a957806320ec271b146102c957806324167412146102e95780632eb2c2d61461030957005b8062fdd58e146101d757806301ffc9a71461020a57806306fdde031461023a5780630e89341c1461028957005b366101d557005b005b3480156101e357600080fd5b506101f76101f236600461420d565b610719565b6040519081526020015b60405180910390f35b34801561021657600080fd5b5061022a610225366004614265565b6107f9565b6040519015158152602001610201565b34801561024657600080fd5b5060408051808201909152600a81527f496465614d696e7465720000000000000000000000000000000000000000000060208201525b60405161020191906142f0565b34801561029557600080fd5b5061027c6102a4366004614303565b6108dc565b3480156102b557600080fd5b506101d56102c436600461431c565b6108e7565b3480156102d557600080fd5b506101d56102e436600461444b565b6109b3565b3480156102f557600080fd5b506101d56103043660046145b3565b610b0f565b34801561031557600080fd5b506101d561032436600461468e565b610df6565b34801561033557600080fd5b50600a546103569073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610201565b34801561038757600080fd5b5061039b610396366004614738565b610ede565b60405161020191906147ab565b3480156103b457600080fd5b5061022a6103c3366004614303565b600090815260056020526040902054151590565b3480156103e357600080fd5b5061022a6103f236600461431c565b60095473ffffffffffffffffffffffffffffffffffffffff91821691161490565b34801561041f57600080fd5b506101d561042e36600461431c565b61102e565b34801561043f57600080fd5b506101d561044e366004614849565b6110fa565b34801561045f57600080fd5b506101d561150a565b34801561047457600080fd5b506101d56104833660046145b3565b61151e565b34801561049457600080fd5b506101d56104a3366004614303565b611884565b3480156104b457600080fd5b5060065473ffffffffffffffffffffffffffffffffffffffff16610356565b3480156104df57600080fd5b506008546103569073ffffffffffffffffffffffffffffffffffffffff1681565b34801561050c57600080fd5b5060408051808201909152600481527f49444d5400000000000000000000000000000000000000000000000000000000602082015261027c565b34801561055257600080fd5b506101d561056136600461420d565b611a48565b34801561057257600080fd5b506101d561058136600461493c565b611c0d565b34801561059257600080fd5b5061022a6105a136600461431c565b600b6020526000908152604090205460ff1681565b3480156105c257600080fd5b506101f76105d1366004614303565b60009081526005602052604090205490565b3480156105ef57600080fd5b506101d56105fe366004614973565b611c1f565b34801561060f57600080fd5b506101d561061e36600461431c565b611fa6565b34801561062f57600080fd5b5061022a61063e3660046149fd565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205460ff1690565b34801561068557600080fd5b506101d561069436600461493c565b612072565b3480156106a557600080fd5b506101d56106b4366004614a30565b6120d0565b3480156106c557600080fd5b506101d56106d436600461431c565b6121b1565b3480156106e557600080fd5b506101d56106f4366004614a95565b612268565b34801561070557600080fd5b506101d5610714366004614ac8565b61234e565b600073ffffffffffffffffffffffffffffffffffffffff83166107c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201527f616c6964206f776e65720000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b5060008181526020818152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020545b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a2600000000000000000000000000000000000000000000000000000000148061088c57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b806107f357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146107f3565b60606107f3826123ad565b6108ef61248d565b73ffffffffffffffffffffffffffffffffffffffff811661096c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f496e76616c69642061646472657373000000000000000000000000000000000060448201526064016107ba565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60065473ffffffffffffffffffffffffffffffffffffffff166109d4612547565b73ffffffffffffffffffffffffffffffffffffffff161480610a285750600b60006109fd612547565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205460ff165b610a8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f7420617574686f72697a656400000000000000000000000000000000000060448201526064016107ba565b8051825114610af9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c656e677468206d69736d61746368000000000000000000000000000000000060448201526064016107ba565b610b0b610b04612547565b8383612556565b5050565b610b1761288d565b878383836000610b54837f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b60085490915073ffffffffffffffffffffffffffffffffffffffff16610b7a8284612900565b73ffffffffffffffffffffffffffffffffffffffff1614610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c6964207369676e617475726500000000000000000000000000000060448201526064016107ba565b8315610d0657600a546040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015230602483015260448201879052909116906323b872dd906064016020604051808303816000875af1158015610c7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca09190614b05565b610d06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f5061796d656e74206661696c656400000000000000000000000000000000000060448201526064016107ba565b89518c5114610d71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c656e677468206d69736d61746368000000000000000000000000000000000060448201526064016107ba565b60005b8c51811015610dd257610dca8d8281518110610d9257610d92614b22565b60200260200101518d8d8481518110610dad57610dad614b22565b60200260200101516040518060200160405280600081525061291c565b600101610d74565b50610ddd8b8a612a9e565b5050505050610dec6001600755565b5050505050505050565b610dfe612547565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610e3e5750610e3e8561063e612547565b610eca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60448201527f6572206f7220617070726f76656400000000000000000000000000000000000060648201526084016107ba565b610ed78585858585612afb565b5050505050565b60608151835114610f71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d61746368000000000000000000000000000000000000000000000060648201526084016107ba565b6000835167ffffffffffffffff811115610f8d57610f8d614337565b604051908082528060200260200182016040528015610fb6578160200160208202803683370190505b50905060005b845181101561102657611001858281518110610fda57610fda614b22565b6020026020010151858381518110610ff457610ff4614b22565b6020026020010151610719565b82828151811061101357611013614b22565b6020908102919091010152600101610fbc565b509392505050565b61103661248d565b73ffffffffffffffffffffffffffffffffffffffff81166110b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e76616c696420746f6b656e2061646472657373000000000000000000000060448201526064016107ba565b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60065473ffffffffffffffffffffffffffffffffffffffff1661111b612547565b73ffffffffffffffffffffffffffffffffffffffff16148061116f5750600b6000611144612547565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205460ff165b6111d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f7420617574686f72697a656400000000000000000000000000000000000060448201526064016107ba565b6111dd61288d565b6111e5612547565b8383836000611221837f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b60085490915073ffffffffffffffffffffffffffffffffffffffff166112478284612900565b73ffffffffffffffffffffffffffffffffffffffff16146112c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c6964207369676e617475726500000000000000000000000000000060448201526064016107ba565b83156113d357600a546040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015230602483015260448201879052909116906323b872dd906064016020604051808303816000875af1158015611349573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136d9190614b05565b6113d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f5061796d656e74206661696c656400000000000000000000000000000000000060448201526064016107ba565b8a518c511480156113e5575089518b51145b80156113f2575088518b51145b611458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e70757420617272617973206d69736d61746368000000000000000000000060448201526064016107ba565b60005b8c518110156114f1576114ad8d828151811061147957611479614b22565b60200260200101518d838151811061149357611493614b22565b60200260200101518d8481518110610dad57610dad614b22565b6114e98c82815181106114c2576114c2614b22565b60200260200101518b83815181106114dc576114dc614b22565b6020026020010151612a9e565b60010161145b565b5050505050506115016001600755565b50505050505050565b61151261248d565b61151c6000612e47565b565b60065473ffffffffffffffffffffffffffffffffffffffff1661153f612547565b73ffffffffffffffffffffffffffffffffffffffff1614806115935750600b6000611568612547565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205460ff165b6115f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f7420617574686f72697a656400000000000000000000000000000000000060448201526064016107ba565b61160161288d565b87838383600061163e837f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b60085490915073ffffffffffffffffffffffffffffffffffffffff166116648284612900565b73ffffffffffffffffffffffffffffffffffffffff16146116e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c6964207369676e617475726500000000000000000000000000000060448201526064016107ba565b83156117f057600a546040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015230602483015260448201879052909116906323b872dd906064016020604051808303816000875af1158015611766573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178a9190614b05565b6117f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f5061796d656e74206661696c656400000000000000000000000000000000000060448201526064016107ba565b89518c511461185b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c656e677468206d69736d61746368000000000000000000000000000000000060448201526064016107ba565b60005b8c51811015610dd25761187c8d8281518110610d9257610d92614b22565b60010161185e565b61188c61248d565b600081116118f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f60448201526064016107ba565b80471015611960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f496e73756666696369656e742062616c616e636500000000000000000000000060448201526064016107ba565b600061198160065473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d80600081146119d8576040519150601f19603f3d011682016040523d82523d6000602084013e6119dd565b606091505b5050905080610b0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f455448207472616e73666572206661696c65640000000000000000000000000060448201526064016107ba565b611a5061248d565b73ffffffffffffffffffffffffffffffffffffffff8216611acd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f496e76616c696420746f6b656e2061646472657373000000000000000000000060448201526064016107ba565b60008111611b37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f60448201526064016107ba565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611b7260065473ffffffffffffffffffffffffffffffffffffffff1690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018490526044016020604051808303816000875af1158015611be4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c089190614b05565b505050565b610b0b611c18612547565b8383612ebe565b60065473ffffffffffffffffffffffffffffffffffffffff16611c40612547565b73ffffffffffffffffffffffffffffffffffffffff161480611c945750600b6000611c69612547565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205460ff165b611cfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f7420617574686f72697a656400000000000000000000000000000000000060448201526064016107ba565b611d0261288d565b611d0a612547565b8383836000611d46837f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b60085490915073ffffffffffffffffffffffffffffffffffffffff16611d6c8284612900565b73ffffffffffffffffffffffffffffffffffffffff1614611de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c6964207369676e617475726500000000000000000000000000000060448201526064016107ba565b8315611ef857600a546040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015230602483015260448201879052909116906323b872dd906064016020604051808303816000875af1158015611e6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e929190614b05565b611ef8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f5061796d656e74206661696c656400000000000000000000000000000000000060448201526064016107ba565b89518c5114611f63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c656e677468206d69736d61746368000000000000000000000000000000000060448201526064016107ba565b60005b8c51811015611f8c57611f848d8281518110610d9257610d92614b22565b600101611f66565b50611f978b8a612a9e565b50505050506115016001600755565b611fae61248d565b73ffffffffffffffffffffffffffffffffffffffff811661202b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f496e76616c696420666f7277617264657220616464726573730000000000000060448201526064016107ba565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61207a61248d565b73ffffffffffffffffffffffffffffffffffffffff919091166000908152600b6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6120d8612547565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061211857506121188561063e612547565b6121a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60448201527f6572206f7220617070726f76656400000000000000000000000000000000000060648201526084016107ba565b610ed78585858585613011565b6121b961248d565b73ffffffffffffffffffffffffffffffffffffffff811661225c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016107ba565b61226581612e47565b50565b60065473ffffffffffffffffffffffffffffffffffffffff16612289612547565b73ffffffffffffffffffffffffffffffffffffffff1614806122dd5750600b60006122b2612547565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205460ff165b612343576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4e6f7420617574686f72697a656400000000000000000000000000000000000060448201526064016107ba565b611c08838383613268565b604051806040016040528083815260200182815250600c600061236f612547565b73ffffffffffffffffffffffffffffffffffffffff16815260208082019290925260400160002082518155908201516001820190610ed79082614bec565b6000818152600460205260408120805460609291906123cb90614b51565b80601f01602080910402602001604051908101604052809291908181526020018280546123f790614b51565b80156124445780601f1061241957610100808354040283529160200191612444565b820191906000526020600020905b81548152906001019060200180831161242757829003601f168201915b5050505050905060008151116124625761245d83613491565b612486565b600381604051602001612476929190614d06565b6040516020818303038152906040525b9392505050565b612495612547565b73ffffffffffffffffffffffffffffffffffffffff166124ca60065473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff161461151c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107ba565b6000612551613525565b905090565b73ffffffffffffffffffffffffffffffffffffffff83166125f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016107ba565b805182511461268a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d6174636800000000000000000000000000000000000000000000000060648201526084016107ba565b6000612694612547565b90506126b481856000868660405180602001604052806000815250613588565b60005b83518110156127f85760008482815181106126d4576126d4614b22565b6020026020010151905060008483815181106126f2576126f2614b22565b6020908102919091018101516000848152808352604080822073ffffffffffffffffffffffffffffffffffffffff8c1683529093529190912054909150818110156127be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c60448201527f616e63650000000000000000000000000000000000000000000000000000000060648201526084016107ba565b60009283526020838152604080852073ffffffffffffffffffffffffffffffffffffffff8b168652909152909220910390556001016126b7565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612870929190614dab565b60405180910390a460408051602081019091526000905250505050565b6002600754036128f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016107ba565b6002600755565b600080600061290f858561387c565b91509150611026816138c1565b73ffffffffffffffffffffffffffffffffffffffff84166129bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f2061646472657360448201527f730000000000000000000000000000000000000000000000000000000000000060648201526084016107ba565b60006129c9612547565b905060006129d685613a74565b905060006129e385613a74565b90506129f483600089858589613588565b60008681526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915281208054879290612a31908490614dd9565b9091555050604080518781526020810187905273ffffffffffffffffffffffffffffffffffffffff808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461150183600089898989613abf565b6000828152600460205260409020612ab68282614bec565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b612ae2846108dc565b604051612aef91906142f0565b60405180910390a25050565b8151835114612b8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d6174636800000000000000000000000000000000000000000000000060648201526084016107ba565b73ffffffffffffffffffffffffffffffffffffffff8416612c2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016107ba565b6000612c39612547565b9050612c49818787878787613588565b60005b8451811015612db2576000858281518110612c6957612c69614b22565b602002602001015190506000858381518110612c8757612c87614b22565b6020908102919091018101516000848152808352604080822073ffffffffffffffffffffffffffffffffffffffff8e168352909352919091205490915081811015612d54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e736665720000000000000000000000000000000000000000000060648201526084016107ba565b60008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8e8116855292528083208585039055908b16825281208054849290612d9e908490614dd9565b909155505060019093019250612c4c915050565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612e29929190614dab565b60405180910390a4612e3f818787878787613d49565b505050505050565b6006805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c66000000000000000000000000000000000000000000000060648201526084016107ba565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff84166130b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f20616460448201527f647265737300000000000000000000000000000000000000000000000000000060648201526084016107ba565b60006130be612547565b905060006130cb85613a74565b905060006130d885613a74565b90506130e8838989858589613588565b60008681526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8c168452909152902054858110156131a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201527f72207472616e736665720000000000000000000000000000000000000000000060648201526084016107ba565b60008781526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8d8116855292528083208985039055908a168252812080548892906131f0908490614dd9565b9091555050604080518881526020810188905273ffffffffffffffffffffffffffffffffffffffff808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461325d848a8a8a8a8a613abf565b505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff831661330b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201527f657373000000000000000000000000000000000000000000000000000000000060648201526084016107ba565b6000613315612547565b9050600061332284613a74565b9050600061332f84613a74565b905061334f83876000858560405180602001604052806000815250613588565b60008581526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8a1684529091529020548481101561340c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c60448201527f616e63650000000000000000000000000000000000000000000000000000000060648201526084016107ba565b60008681526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516020810190915260009052611501565b6060600280546134a090614b51565b80601f01602080910402602001604051908101604052809291908181526020018280546134cc90614b51565b80156135195780601f106134ee57610100808354040283529160200191613519565b820191906000526020600020905b8154815290600101906020018083116134fc57829003601f168201915b50505050509050919050565b60095460009073ffffffffffffffffffffffffffffffffffffffff1633148015613550575060143610155b1561358057507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90565b503390565b90565b613596868686868686613ef6565b73ffffffffffffffffffffffffffffffffffffffff8516158015906135d0575073ffffffffffffffffffffffffffffffffffffffff841615155b15612e3f576000600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820154815260200160018201805461363b90614b51565b80601f016020809104026020016040519081016040528092919081815260200182805461366790614b51565b80156136b45780601f10613689576101008083540402835291602001916136b4565b820191906000526020600020905b81548152906001019060200180831161369757829003601f168201915b50505050508152505090506000613724878787876040516020016136db9493929190614e38565b604051602081830303815290604052805190602001207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b82519091508114613791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f5472616e736665723a206d657373616765206d69736d6174636800000000000060448201526064016107ba565b600854602083015173ffffffffffffffffffffffffffffffffffffffff909116906137bd908390612900565b73ffffffffffffffffffffffffffffffffffffffff161461383a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5472616e736665723a20696e76616c6964207369676e6174757265000000000060448201526064016107ba565b73ffffffffffffffffffffffffffffffffffffffff87166000908152600c60205260408120818155906138706001830182614196565b50505050505050505050565b60008082516041036138b25760208301516040840151606085015160001a6138a6878285856140a7565b945094505050506138ba565b506000905060025b9250929050565b60008160048111156138d5576138d5614e8f565b036138dd5750565b60018160048111156138f1576138f1614e8f565b03613958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016107ba565b600281600481111561396c5761396c614e8f565b036139d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016107ba565b60038160048111156139e7576139e7614e8f565b03612265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f756500000000000000000000000000000000000000000000000000000000000060648201526084016107ba565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110613aae57613aae614b22565b602090810291909101015292915050565b73ffffffffffffffffffffffffffffffffffffffff84163b15612e3f576040517ff23a6e6100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063f23a6e6190613b369089908990889088908890600401614ebe565b6020604051808303816000875af1925050508015613b8f575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252613b8c91810190614f0e565b60015b613c7857613b9b614f2b565b806308c379a003613bee5750613baf614f46565b80613bba5750613bf0565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ba91906142f0565b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560448201527f526563656976657220696d706c656d656e74657200000000000000000000000060648201526084016107ba565b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014611501576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016107ba565b73ffffffffffffffffffffffffffffffffffffffff84163b15612e3f576040517fbc197c8100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063bc197c8190613dc09089908990889088908890600401614fee565b6020604051808303816000875af1925050508015613e19575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252613e1691810190614f0e565b60015b613e2557613b9b614f2b565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014611501576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a6563746560448201527f6420746f6b656e7300000000000000000000000000000000000000000000000060648201526084016107ba565b73ffffffffffffffffffffffffffffffffffffffff8516613f815760005b8351811015613f7f57828181518110613f2f57613f2f614b22565b602002602001015160056000868481518110613f4d57613f4d614b22565b602002602001015181526020019081526020016000206000828254613f729190614dd9565b9091555050600101613f14565b505b73ffffffffffffffffffffffffffffffffffffffff8416612e3f5760005b8351811015611501576000848281518110613fbc57613fbc614b22565b602002602001015190506000848381518110613fda57613fda614b22565b602002602001015190506000600560008481526020019081526020016000205490508181101561408c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f7460448201527f616c537570706c7900000000000000000000000000000000000000000000000060648201526084016107ba565b60009283526005602052604090922091039055600101613f9f565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156140de575060009050600361418d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614132573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166141865760006001925092505061418d565b9150600090505b94509492505050565b5080546141a290614b51565b6000825580601f106141b2575050565b601f01602090049060005260206000209081019061226591905b808211156141e057600081556001016141cc565b5090565b803573ffffffffffffffffffffffffffffffffffffffff8116811461420857600080fd5b919050565b6000806040838503121561422057600080fd5b614229836141e4565b946020939093013593505050565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461226557600080fd5b60006020828403121561427757600080fd5b813561248681614237565b60005b8381101561429d578181015183820152602001614285565b50506000910152565b600081518084526142be816020860160208601614282565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061248660208301846142a6565b60006020828403121561431557600080fd5b5035919050565b60006020828403121561432e57600080fd5b612486826141e4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff821117156143aa576143aa614337565b6040525050565b600067ffffffffffffffff8211156143cb576143cb614337565b5060051b60200190565b600082601f8301126143e657600080fd5b813560206143f3826143b1565b6040516144008282614366565b80915083815260208101915060208460051b87010193508684111561442457600080fd5b602086015b848110156144405780358352918301918301614429565b509695505050505050565b6000806040838503121561445e57600080fd5b823567ffffffffffffffff8082111561447657600080fd5b614482868387016143d5565b9350602085013591508082111561449857600080fd5b506144a5858286016143d5565b9150509250929050565b600082601f8301126144c057600080fd5b813560206144cd826143b1565b6040516144da8282614366565b80915083815260208101915060208460051b8701019350868411156144fe57600080fd5b602086015b8481101561444057614514816141e4565b8352918301918301614503565b600082601f83011261453257600080fd5b813567ffffffffffffffff81111561454c5761454c614337565b60405161458160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160182614366565b81815284602083860101111561459657600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080610100898b0312156145d057600080fd5b6145d9896141e4565b9750602089013567ffffffffffffffff808211156145f657600080fd5b6146028c838d016144af565b985060408b0135975060608b013591508082111561461f57600080fd5b61462b8c838d016143d5565b965060808b013591508082111561464157600080fd5b61464d8c838d01614521565b955060a08b0135945060c08b0135935060e08b013591508082111561467157600080fd5b5061467e8b828c01614521565b9150509295985092959890939650565b600080600080600060a086880312156146a657600080fd5b6146af866141e4565b94506146bd602087016141e4565b9350604086013567ffffffffffffffff808211156146da57600080fd5b6146e689838a016143d5565b945060608801359150808211156146fc57600080fd5b61470889838a016143d5565b9350608088013591508082111561471e57600080fd5b5061472b88828901614521565b9150509295509295909350565b6000806040838503121561474b57600080fd5b823567ffffffffffffffff8082111561476357600080fd5b614482868387016144af565b60008151808452602080850194506020840160005b838110156147a057815187529582019590820190600101614784565b509495945050505050565b602081526000612486602083018461476f565b600082601f8301126147cf57600080fd5b813560206147dc826143b1565b6040516147e98282614366565b83815260059390931b850182019282810191508684111561480957600080fd5b8286015b8481101561444057803567ffffffffffffffff81111561482d5760008081fd5b61483b8986838b0101614521565b84525091830191830161480d565b600080600080600080600060e0888a03121561486457600080fd5b873567ffffffffffffffff8082111561487c57600080fd5b6148888b838c016144af565b985060208a013591508082111561489e57600080fd5b6148aa8b838c016143d5565b975060408a01359150808211156148c057600080fd5b6148cc8b838c016143d5565b965060608a01359150808211156148e257600080fd5b6148ee8b838c016147be565b955060808a0135945060a08a0135935060c08a013591508082111561491257600080fd5b5061491f8a828b01614521565b91505092959891949750929550565b801515811461226557600080fd5b6000806040838503121561494f57600080fd5b614958836141e4565b915060208301356149688161492e565b809150509250929050565b600080600080600080600060e0888a03121561498e57600080fd5b873567ffffffffffffffff808211156149a657600080fd5b6149b28b838c016144af565b985060208a0135975060408a01359150808211156149cf57600080fd5b6149db8b838c016143d5565b965060608a01359150808211156149f157600080fd5b6148ee8b838c01614521565b60008060408385031215614a1057600080fd5b614a19836141e4565b9150614a27602084016141e4565b90509250929050565b600080600080600060a08688031215614a4857600080fd5b614a51866141e4565b9450614a5f602087016141e4565b93506040860135925060608601359150608086013567ffffffffffffffff811115614a8957600080fd5b61472b88828901614521565b600080600060608486031215614aaa57600080fd5b614ab3846141e4565b95602085013595506040909401359392505050565b60008060408385031215614adb57600080fd5b82359150602083013567ffffffffffffffff811115614af957600080fd5b6144a585828601614521565b600060208284031215614b1757600080fd5b81516124868161492e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600181811c90821680614b6557607f821691505b602082108103614b9e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f821115611c08576000816000526020600020601f850160051c81016020861015614bcd5750805b601f850160051c820191505b81811015612e3f57828155600101614bd9565b815167ffffffffffffffff811115614c0657614c06614337565b614c1a81614c148454614b51565b84614ba4565b602080601f831160018114614c6d5760008415614c375750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612e3f565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015614cba57888601518255948401946001909101908401614c9b565b5085821015614cf657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b6000808454614d1481614b51565b60018281168015614d2c5760018114614d5f57614d8e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450614d8e565b8860005260208060002060005b85811015614d855781548a820152908401908201614d6c565b50505082870194505b505050508351614da2818360208801614282565b01949350505050565b604081526000614dbe604083018561476f565b8281036020840152614dd0818561476f565b95945050505050565b808201808211156107f3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b805160009060208084018383156147a057815187529582019590820190600101614784565b60007fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808760601b168352808660601b16601484015250614e85614e7f6028840186614e13565b84614e13565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525084604083015283606083015260a06080830152614f0360a08301846142a6565b979650505050505050565b600060208284031215614f2057600080fd5b815161248681614237565b600060033d11156135855760046000803e5060005160e01c90565b600060443d1015614f545790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff8160248401118184111715614fa257505050505090565b8285019150815181811115614fba5750505050505090565b843d8701016020828501011115614fd45750505050505090565b614fe360208286010187614366565b509095945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808816835280871660208401525060a0604083015261502760a083018661476f565b8281036060840152615039818661476f565b9050828103608084015261504d81856142a6565b9897505050505050505056fea164736f6c6343000817000a000000000000000000000000f0511f123164602042ab2bcf02111fa5d3fe97cd000000000000000000000000bc7736e46b28c9b754702bc8f01814be87958226000000000000000000000000f287bb214361b3d5d0728a5d0cfde736268ec84e000000000000000000000000919beabcf84d83dc5267dbd19eb5fcab94b8f233