status-im/status-go

View on GitHub
contracts/community-tokens/mastertoken/MasterToken.go

Summary

Maintainability
B
6 hrs
Test Coverage
F
0%
// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.

package mastertoken

import (
    "errors"
    "math/big"
    "strings"

    ethereum "github.com/ethereum/go-ethereum"
    "github.com/ethereum/go-ethereum/accounts/abi"
    "github.com/ethereum/go-ethereum/accounts/abi/bind"
    "github.com/ethereum/go-ethereum/common"
    "github.com/ethereum/go-ethereum/core/types"
    "github.com/ethereum/go-ethereum/event"
)

// Reference imports to suppress errors if they are not otherwise used.
var (
    _ = errors.New
    _ = big.NewInt
    _ = strings.NewReader
    _ = ethereum.NotFound
    _ = bind.Bind
    _ = common.Big1
    _ = types.BloomLookup
    _ = event.NewSubscription
    _ = abi.ConvertType
)

// MasterTokenMetaData contains all meta data concerning the MasterToken contract.
var MasterTokenMetaData = &bind.MetaData{
    ABI: "[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_baseTokenURI\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"_ownerToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BaseToken_MaxSupplyLowerThanTotalSupply\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseToken_MaxSupplyReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseToken_NotRemoteBurnable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseToken_NotTransferable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CommunityOwnable_InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CommunityOwnable_NotAuthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"StatusMint\",\"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\":[{\"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\":[],\"name\":\"baseTokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"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\":\"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\":\"masterToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"name\":\"mintTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mintedCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"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\":\"ownerToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"tokenIds\",\"type\":\"uint256[]\"}],\"name\":\"remoteBurn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"remoteBurnable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newMaxSupply\",\"type\":\"uint256\"}],\"name\":\"setMaxSupply\",\"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\":\"transferable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
    Bin: "0x6101006040523480156200001257600080fd5b5060405162002d9d38038062002d9d8339810160408190526200003591620001a9565b8383600019600160008686828181898982620000528382620002eb565b506001620000618282620002eb565b5050506001600160a01b03808316608081905290821660a05215801562000091575060a0516001600160a01b0316155b15620000b05760405163c9d8a9b360e01b815260040160405180910390fd5b5050600b86905584151560c05283151560e052600c620000d18482620002eb565b50505050505050505050505050620003b7565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200010c57600080fd5b81516001600160401b0380821115620001295762000129620000e4565b604051601f8301601f19908116603f01168101908282118183101715620001545762000154620000e4565b816040528381526020925086838588010111156200017157600080fd5b600091505b8382101562000195578582018301518183018401529082019062000176565b600093810190920192909252949350505050565b60008060008060808587031215620001c057600080fd5b84516001600160401b0380821115620001d857600080fd5b620001e688838901620000fa565b95506020870151915080821115620001fd57600080fd5b6200020b88838901620000fa565b945060408701519150808211156200022257600080fd5b506200023187828801620000fa565b606087015190935090506001600160a01b03811681146200025157600080fd5b939692955090935050565b600181811c908216806200027157607f821691505b6020821081036200029257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002e657600081815260208120601f850160051c81016020861015620002c15750805b601f850160051c820191505b81811015620002e257828155600101620002cd565b5050505b505050565b81516001600160401b03811115620003075762000307620000e4565b6200031f816200031884546200025c565b8462000298565b602080601f8311600181146200035757600084156200033e5750858301515b600019600386901b1c1916600185901b178555620002e2565b600085815260208120601f198616915b82811015620003885788860151825594840194600190910190840162000367565b5085821015620003a75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e05161294a62000453600039600081816103540152611abf01526000818161023501526109f9015260008181610281015281816108ec0152818161094b01528181610bd601528181610c3501528181610faa01526110090152600081816103070152818161080f0152818161086e01528181610af901528181610b5801528181610ecd0152610f2c015261294a6000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c806365371883116100ee578063b88d4fde11610097578063cf721b1511610071578063cf721b15146103ca578063d547cfb7146103d2578063d5abeb01146103da578063e985e9c5146103e357600080fd5b8063b88d4fde14610391578063c87b56dd146103a4578063ce7c8b49146103b757600080fd5b806392ff0d31116100c857806392ff0d311461034f57806395d89b4114610376578063a22cb4651461037e57600080fd5b806365371883146103025780636f8b44b01461032957806370a082311461033c57600080fd5b806323b872dd1161015b57806342842e0e1161013557806342842e0e146102b65780634f6ccce7146102c95780634fb95e02146102dc5780636352211e146102ef57600080fd5b806323b872dd146102695780632bb5e31e1461027c5780632f745c59146102a357600080fd5b8063095ea7b31161018c578063095ea7b31461021b578063101639f51461023057806318160ddd1461025757600080fd5b806301ffc9a7146101b357806306fdde03146101db578063081812fc146101f0575b600080fd5b6101c66101c13660046122f8565b61041f565b60405190151581526020015b60405180910390f35b6101e3610430565b6040516101d29190612383565b6102036101fe366004612396565b6104c2565b6040516001600160a01b0390911681526020016101d2565b61022e6102293660046123cb565b6104e9565b005b6101c67f000000000000000000000000000000000000000000000000000000000000000081565b6008545b6040519081526020016101d2565b61022e6102773660046123f5565b61061f565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b61025b6102b13660046123cb565b6106a6565b61022e6102c43660046123f5565b61074e565b61025b6102d7366004612396565b610769565b61022e6102ea3660046124d3565b61080d565b6102036102fd366004612396565b610a92565b6102037f000000000000000000000000000000000000000000000000000000000000000081565b61022e610337366004612396565b610af7565b61025b61034a366004612569565b610d22565b6101c67f000000000000000000000000000000000000000000000000000000000000000081565b6101e3610dbc565b61022e61038c366004612584565b610dcb565b61022e61039f3660046125c0565b610dd6565b6101e36103b2366004612396565b610e64565b61022e6103c536600461269e565b610ecb565b61025b61110b565b6101e361111b565b61025b600b5481565b6101c66103f136600461272b565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b600061042a826111a9565b92915050565b60606000805461043f9061275e565b80601f016020809104026020016040519081016040528092919081815260200182805461046b9061275e565b80156104b85780601f1061048d576101008083540402835291602001916104b8565b820191906000526020600020905b81548152906001019060200180831161049b57829003601f168201915b5050505050905090565b60006104cd826111ff565b506000908152600460205260409020546001600160a01b031690565b60006104f482610a92565b9050806001600160a01b0316836001600160a01b0316036105825760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b038216148061059e575061059e81336103f1565b6106105760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610579565b61061a8383611263565b505050565b61062933826112e9565b61069b5760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610579565b61061a838383611368565b60006106b183610d22565b82106107255760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610579565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b61061a83838360405180602001604052806000815250610dd6565b600061077460085490565b82106107e85760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610579565b600882815481106107fb576107fb6127b1565b90600052602060002001549050919050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316158015906108e357506040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156108bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e191906127e0565b155b80156109c057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316158015906109c057506040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561099a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109be91906127e0565b155b156109f7576040517f7cea464e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000610a4e576040517f98209e6c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8151811015610a8e57610a7c828281518110610a6f57610a6f6127b1565b60200260200101516115d4565b80610a8681612828565b915050610a51565b5050565b6000818152600260205260408120546001600160a01b03168061042a5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610579565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615801590610bcd57506040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610ba7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcb91906127e0565b155b8015610caa57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615801590610caa57506040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610c84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca891906127e0565b155b15610ce1576040517f7cea464e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600854811015610d1d576040517fad8783d500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b55565b60006001600160a01b038216610da05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610579565b506001600160a01b031660009081526003602052604090205490565b60606001805461043f9061275e565b610a8e3383836116ad565b610de033836112e9565b610e525760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610579565b610e5e84848484611799565b50505050565b6060610e6f826111ff565b6000610e79611822565b90506000815111610e995760405180602001604052806000815250610ec4565b80610ea384611831565b604051602001610eb4929190612860565b6040516020818303038152906040525b9392505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031615801590610fa157506040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610f7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9f91906127e0565b155b801561107e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161580159061107e57506040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611058573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107c91906127e0565b155b156110b5576040517f7cea464e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b548151600a546110c7919061288f565b11156110ff576040517f23d6539900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611108816118ef565b50565b6000611116600a5490565b905090565b600c80546111289061275e565b80601f01602080910402602001604051908101604052809291908181526020018280546111549061275e565b80156111a15780601f10611176576101008083540402835291602001916111a1565b820191906000526020600020905b81548152906001019060200180831161118457829003601f168201915b505050505081565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d6300000000000000000000000000000000000000000000000000000000148061042a575061042a826119b3565b6000818152600260205260409020546001600160a01b03166111085760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610579565b600081815260046020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03841690811790915581906112b082610a92565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806112f583610a92565b9050806001600160a01b0316846001600160a01b0316148061133c57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b806113605750836001600160a01b0316611355846104c2565b6001600160a01b0316145b949350505050565b826001600160a01b031661137b82610a92565b6001600160a01b0316146113f75760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610579565b6001600160a01b0382166114725760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610579565b61147f8383836001611a96565b826001600160a01b031661149282610a92565b6001600160a01b03161461150e5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610579565b600081815260046020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169091556001600160a01b038781168086526003855283862080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006115df82610a92565b90506115ef816000846001611a96565b6115f882610a92565b600083815260046020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169091556001600160a01b0385168085526003845282852080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b816001600160a01b0316836001600160a01b03160361170e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610579565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6117a4848484611368565b6117b084848484611b23565b610e5e5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610579565b6060600c805461043f9061275e565b6060600061183e83611ce2565b600101905060008167ffffffffffffffff81111561185e5761185e612431565b6040519080825280601f01601f191660200182016040528015611888576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461189257509392505050565b60005b8151811015610a8e57611936828281518110611910576119106127b1565b6020026020010151611921600a5490565b60405180602001604052806000815250611dc4565b600a5482828151811061194b5761194b6127b1565b60200260200101516001600160a01b031660006001600160a01b03167f28c427b0611d99da5c4f7368abe57e86b045b483c4689ae93e90745802335b8760405160405180910390a46119a1600a80546001019055565b806119ab81612828565b9150506118f2565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480611a4657507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061042a57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000083161461042a565b6001600160a01b03841615801590611ab657506001600160a01b03831615155b8015611ae057507f0000000000000000000000000000000000000000000000000000000000000000155b15611b17576040517f6b2b9e5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e5e84848484611e4d565b60006001600160a01b0384163b15611cd7576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a0290611b809033908990889088906004016128a2565b6020604051808303816000875af1925050508015611bd9575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611bd6918101906128de565b60015b611c8c573d808015611c07576040519150601f19603f3d011682016040523d82523d6000602084013e611c0c565b606091505b508051600003611c845760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610579565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050611360565b506001949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611d2b577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611d57576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611d7557662386f26fc10000830492506010015b6305f5e1008310611d8d576305f5e100830492506008015b6127108310611da157612710830492506004015b60648310611db3576064830492506002015b600a831061042a5760010192915050565b611dce8383611f89565b611ddb6000848484611b23565b61061a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610579565b6001811115611ec45760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e736563757469766520747260448201527f616e7366657273206e6f7420737570706f7274656400000000000000000000006064820152608401610579565b816001600160a01b038516611f2057611f1b81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611f43565b836001600160a01b0316856001600160a01b031614611f4357611f43858261213a565b6001600160a01b038416611f5f57611f5a816121d7565b611f82565b846001600160a01b0316846001600160a01b031614611f8257611f828482612286565b5050505050565b6001600160a01b038216611fdf5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610579565b6000818152600260205260409020546001600160a01b0316156120445760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610579565b612052600083836001611a96565b6000818152600260205260409020546001600160a01b0316156120b75760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610579565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000600161214784610d22565b61215191906128fb565b6000838152600760205260409020549091508082146121a4576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906121e9906001906128fb565b60008381526009602052604081205460088054939450909284908110612211576122116127b1565b906000526020600020015490508060088381548110612232576122326127b1565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061226a5761226a61290e565b6001900381819060005260206000200160009055905550505050565b600061229183610d22565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461110857600080fd5b60006020828403121561230a57600080fd5b8135610ec4816122ca565b60005b83811015612330578181015183820152602001612318565b50506000910152565b60008151808452612351816020860160208601612315565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610ec46020830184612339565b6000602082840312156123a857600080fd5b5035919050565b80356001600160a01b03811681146123c657600080fd5b919050565b600080604083850312156123de57600080fd5b6123e7836123af565b946020939093013593505050565b60008060006060848603121561240a57600080fd5b612413846123af565b9250612421602085016123af565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156124a7576124a7612431565b604052919050565b600067ffffffffffffffff8211156124c9576124c9612431565b5060051b60200190565b600060208083850312156124e657600080fd5b823567ffffffffffffffff8111156124fd57600080fd5b8301601f8101851361250e57600080fd5b803561252161251c826124af565b612460565b81815260059190911b8201830190838101908783111561254057600080fd5b928401925b8284101561255e57833582529284019290840190612545565b979650505050505050565b60006020828403121561257b57600080fd5b610ec4826123af565b6000806040838503121561259757600080fd5b6125a0836123af565b9150602083013580151581146125b557600080fd5b809150509250929050565b600080600080608085870312156125d657600080fd5b6125df856123af565b935060206125ee8187016123af565b935060408601359250606086013567ffffffffffffffff8082111561261257600080fd5b818801915088601f83011261262657600080fd5b81358181111561263857612638612431565b612668847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601612460565b9150808252898482850101111561267e57600080fd5b808484018584013760008482840101525080935050505092959194509250565b600060208083850312156126b157600080fd5b823567ffffffffffffffff8111156126c857600080fd5b8301601f810185136126d957600080fd5b80356126e761251c826124af565b81815260059190911b8201830190838101908783111561270657600080fd5b928401925b8284101561255e5761271c846123af565b8252928401929084019061270b565b6000806040838503121561273e57600080fd5b612747836123af565b9150612755602084016123af565b90509250929050565b600181811c9082168061277257607f821691505b6020821081036127ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156127f257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612859576128596127f9565b5060010190565b60008351612872818460208801612315565b835190830190612886818360208801612315565b01949350505050565b8082018082111561042a5761042a6127f9565b60006001600160a01b038087168352808616602084015250836040830152608060608301526128d46080830184612339565b9695505050505050565b6000602082840312156128f057600080fd5b8151610ec4816122ca565b8181038181111561042a5761042a6127f9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000811000a",
}

// MasterTokenABI is the input ABI used to generate the binding from.
// Deprecated: Use MasterTokenMetaData.ABI instead.
var MasterTokenABI = MasterTokenMetaData.ABI

// MasterTokenBin is the compiled bytecode used for deploying new contracts.
// Deprecated: Use MasterTokenMetaData.Bin instead.
var MasterTokenBin = MasterTokenMetaData.Bin

// DeployMasterToken deploys a new Ethereum contract, binding an instance of MasterToken to it.
func DeployMasterToken(auth *bind.TransactOpts, backend bind.ContractBackend, _name string, _symbol string, _baseTokenURI string, _ownerToken common.Address) (common.Address, *types.Transaction, *MasterToken, error) {
    parsed, err := MasterTokenMetaData.GetAbi()
    if err != nil {
        return common.Address{}, nil, nil, err
    }
    if parsed == nil {
        return common.Address{}, nil, nil, errors.New("GetABI returned nil")
    }

    address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(MasterTokenBin), backend, _name, _symbol, _baseTokenURI, _ownerToken)
    if err != nil {
        return common.Address{}, nil, nil, err
    }
    return address, tx, &MasterToken{MasterTokenCaller: MasterTokenCaller{contract: contract}, MasterTokenTransactor: MasterTokenTransactor{contract: contract}, MasterTokenFilterer: MasterTokenFilterer{contract: contract}}, nil
}

// MasterToken is an auto generated Go binding around an Ethereum contract.
type MasterToken struct {
    MasterTokenCaller     // Read-only binding to the contract
    MasterTokenTransactor // Write-only binding to the contract
    MasterTokenFilterer   // Log filterer for contract events
}

// MasterTokenCaller is an auto generated read-only Go binding around an Ethereum contract.
type MasterTokenCaller struct {
    contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// MasterTokenTransactor is an auto generated write-only Go binding around an Ethereum contract.
type MasterTokenTransactor struct {
    contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// MasterTokenFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
type MasterTokenFilterer struct {
    contract *bind.BoundContract // Generic contract wrapper for the low level calls
}

// MasterTokenSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type MasterTokenSession struct {
    Contract     *MasterToken      // Generic contract binding to set the session for
    CallOpts     bind.CallOpts     // Call options to use throughout this session
    TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
}

// MasterTokenCallerSession is an auto generated read-only Go binding around an Ethereum contract,
// with pre-set call options.
type MasterTokenCallerSession struct {
    Contract *MasterTokenCaller // Generic contract caller binding to set the session for
    CallOpts bind.CallOpts      // Call options to use throughout this session
}

// MasterTokenTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
// with pre-set transact options.
type MasterTokenTransactorSession struct {
    Contract     *MasterTokenTransactor // Generic contract transactor binding to set the session for
    TransactOpts bind.TransactOpts      // Transaction auth options to use throughout this session
}

// MasterTokenRaw is an auto generated low-level Go binding around an Ethereum contract.
type MasterTokenRaw struct {
    Contract *MasterToken // Generic contract binding to access the raw methods on
}

// MasterTokenCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
type MasterTokenCallerRaw struct {
    Contract *MasterTokenCaller // Generic read-only contract binding to access the raw methods on
}

// MasterTokenTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
type MasterTokenTransactorRaw struct {
    Contract *MasterTokenTransactor // Generic write-only contract binding to access the raw methods on
}

// NewMasterToken creates a new instance of MasterToken, bound to a specific deployed contract.
func NewMasterToken(address common.Address, backend bind.ContractBackend) (*MasterToken, error) {
    contract, err := bindMasterToken(address, backend, backend, backend)
    if err != nil {
        return nil, err
    }
    return &MasterToken{MasterTokenCaller: MasterTokenCaller{contract: contract}, MasterTokenTransactor: MasterTokenTransactor{contract: contract}, MasterTokenFilterer: MasterTokenFilterer{contract: contract}}, nil
}

// NewMasterTokenCaller creates a new read-only instance of MasterToken, bound to a specific deployed contract.
func NewMasterTokenCaller(address common.Address, caller bind.ContractCaller) (*MasterTokenCaller, error) {
    contract, err := bindMasterToken(address, caller, nil, nil)
    if err != nil {
        return nil, err
    }
    return &MasterTokenCaller{contract: contract}, nil
}

// NewMasterTokenTransactor creates a new write-only instance of MasterToken, bound to a specific deployed contract.
func NewMasterTokenTransactor(address common.Address, transactor bind.ContractTransactor) (*MasterTokenTransactor, error) {
    contract, err := bindMasterToken(address, nil, transactor, nil)
    if err != nil {
        return nil, err
    }
    return &MasterTokenTransactor{contract: contract}, nil
}

// NewMasterTokenFilterer creates a new log filterer instance of MasterToken, bound to a specific deployed contract.
func NewMasterTokenFilterer(address common.Address, filterer bind.ContractFilterer) (*MasterTokenFilterer, error) {
    contract, err := bindMasterToken(address, nil, nil, filterer)
    if err != nil {
        return nil, err
    }
    return &MasterTokenFilterer{contract: contract}, nil
}

// bindMasterToken binds a generic wrapper to an already deployed contract.
func bindMasterToken(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
    parsed, err := MasterTokenMetaData.GetAbi()
    if err != nil {
        return nil, err
    }
    return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil
}

// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_MasterToken *MasterTokenRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
    return _MasterToken.Contract.MasterTokenCaller.contract.Call(opts, result, method, params...)
}

// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_MasterToken *MasterTokenRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
    return _MasterToken.Contract.MasterTokenTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_MasterToken *MasterTokenRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
    return _MasterToken.Contract.MasterTokenTransactor.contract.Transact(opts, method, params...)
}

// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_MasterToken *MasterTokenCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
    return _MasterToken.Contract.contract.Call(opts, result, method, params...)
}

// Transfer initiates a plain transaction to move funds to the contract, calling
// its default method if one is available.
func (_MasterToken *MasterTokenTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
    return _MasterToken.Contract.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_MasterToken *MasterTokenTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
    return _MasterToken.Contract.contract.Transact(opts, method, params...)
}

// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address owner) view returns(uint256)
func (_MasterToken *MasterTokenCaller) BalanceOf(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
    var out []interface{}
    err := _MasterToken.contract.Call(opts, &out, "balanceOf", owner)

    if err != nil {
        return *new(*big.Int), err
    }

    out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

    return out0, err

}

// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address owner) view returns(uint256)
func (_MasterToken *MasterTokenSession) BalanceOf(owner common.Address) (*big.Int, error) {
    return _MasterToken.Contract.BalanceOf(&_MasterToken.CallOpts, owner)
}

// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
//
// Solidity: function balanceOf(address owner) view returns(uint256)
func (_MasterToken *MasterTokenCallerSession) BalanceOf(owner common.Address) (*big.Int, error) {
    return _MasterToken.Contract.BalanceOf(&_MasterToken.CallOpts, owner)
}

// BaseTokenURI is a free data retrieval call binding the contract method 0xd547cfb7.
//
// Solidity: function baseTokenURI() view returns(string)
func (_MasterToken *MasterTokenCaller) BaseTokenURI(opts *bind.CallOpts) (string, error) {
    var out []interface{}
    err := _MasterToken.contract.Call(opts, &out, "baseTokenURI")

    if err != nil {
        return *new(string), err
    }

    out0 := *abi.ConvertType(out[0], new(string)).(*string)

    return out0, err

}

// BaseTokenURI is a free data retrieval call binding the contract method 0xd547cfb7.
//
// Solidity: function baseTokenURI() view returns(string)
func (_MasterToken *MasterTokenSession) BaseTokenURI() (string, error) {
    return _MasterToken.Contract.BaseTokenURI(&_MasterToken.CallOpts)
}

// BaseTokenURI is a free data retrieval call binding the contract method 0xd547cfb7.
//
// Solidity: function baseTokenURI() view returns(string)
func (_MasterToken *MasterTokenCallerSession) BaseTokenURI() (string, error) {
    return _MasterToken.Contract.BaseTokenURI(&_MasterToken.CallOpts)
}

// GetApproved is a free data retrieval call binding the contract method 0x081812fc.
//
// Solidity: function getApproved(uint256 tokenId) view returns(address)
func (_MasterToken *MasterTokenCaller) GetApproved(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
    var out []interface{}
    err := _MasterToken.contract.Call(opts, &out, "getApproved", tokenId)

    if err != nil {
        return *new(common.Address), err
    }

    out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

    return out0, err

}

// GetApproved is a free data retrieval call binding the contract method 0x081812fc.
//
// Solidity: function getApproved(uint256 tokenId) view returns(address)
func (_MasterToken *MasterTokenSession) GetApproved(tokenId *big.Int) (common.Address, error) {
    return _MasterToken.Contract.GetApproved(&_MasterToken.CallOpts, tokenId)
}

// GetApproved is a free data retrieval call binding the contract method 0x081812fc.
//
// Solidity: function getApproved(uint256 tokenId) view returns(address)
func (_MasterToken *MasterTokenCallerSession) GetApproved(tokenId *big.Int) (common.Address, error) {
    return _MasterToken.Contract.GetApproved(&_MasterToken.CallOpts, tokenId)
}

// IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
//
// Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
func (_MasterToken *MasterTokenCaller) IsApprovedForAll(opts *bind.CallOpts, owner common.Address, operator common.Address) (bool, error) {
    var out []interface{}
    err := _MasterToken.contract.Call(opts, &out, "isApprovedForAll", owner, operator)

    if err != nil {
        return *new(bool), err
    }

    out0 := *abi.ConvertType(out[0], new(bool)).(*bool)

    return out0, err

}

// IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
//
// Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
func (_MasterToken *MasterTokenSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
    return _MasterToken.Contract.IsApprovedForAll(&_MasterToken.CallOpts, owner, operator)
}

// IsApprovedForAll is a free data retrieval call binding the contract method 0xe985e9c5.
//
// Solidity: function isApprovedForAll(address owner, address operator) view returns(bool)
func (_MasterToken *MasterTokenCallerSession) IsApprovedForAll(owner common.Address, operator common.Address) (bool, error) {
    return _MasterToken.Contract.IsApprovedForAll(&_MasterToken.CallOpts, owner, operator)
}

// MasterToken is a free data retrieval call binding the contract method 0x2bb5e31e.
//
// Solidity: function masterToken() view returns(address)
func (_MasterToken *MasterTokenCaller) MasterToken(opts *bind.CallOpts) (common.Address, error) {
    var out []interface{}
    err := _MasterToken.contract.Call(opts, &out, "masterToken")

    if err != nil {
        return *new(common.Address), err
    }

    out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

    return out0, err

}

// MasterToken is a free data retrieval call binding the contract method 0x2bb5e31e.
//
// Solidity: function masterToken() view returns(address)
func (_MasterToken *MasterTokenSession) MasterToken() (common.Address, error) {
    return _MasterToken.Contract.MasterToken(&_MasterToken.CallOpts)
}

// MasterToken is a free data retrieval call binding the contract method 0x2bb5e31e.
//
// Solidity: function masterToken() view returns(address)
func (_MasterToken *MasterTokenCallerSession) MasterToken() (common.Address, error) {
    return _MasterToken.Contract.MasterToken(&_MasterToken.CallOpts)
}

// MaxSupply is a free data retrieval call binding the contract method 0xd5abeb01.
//
// Solidity: function maxSupply() view returns(uint256)
func (_MasterToken *MasterTokenCaller) MaxSupply(opts *bind.CallOpts) (*big.Int, error) {
    var out []interface{}
    err := _MasterToken.contract.Call(opts, &out, "maxSupply")

    if err != nil {
        return *new(*big.Int), err
    }

    out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

    return out0, err

}

// MaxSupply is a free data retrieval call binding the contract method 0xd5abeb01.
//
// Solidity: function maxSupply() view returns(uint256)
func (_MasterToken *MasterTokenSession) MaxSupply() (*big.Int, error) {
    return _MasterToken.Contract.MaxSupply(&_MasterToken.CallOpts)
}

// MaxSupply is a free data retrieval call binding the contract method 0xd5abeb01.
//
// Solidity: function maxSupply() view returns(uint256)
func (_MasterToken *MasterTokenCallerSession) MaxSupply() (*big.Int, error) {
    return _MasterToken.Contract.MaxSupply(&_MasterToken.CallOpts)
}

// MintedCount is a free data retrieval call binding the contract method 0xcf721b15.
//
// Solidity: function mintedCount() view returns(uint256)
func (_MasterToken *MasterTokenCaller) MintedCount(opts *bind.CallOpts) (*big.Int, error) {
    var out []interface{}
    err := _MasterToken.contract.Call(opts, &out, "mintedCount")

    if err != nil {
        return *new(*big.Int), err
    }

    out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

    return out0, err

}

// MintedCount is a free data retrieval call binding the contract method 0xcf721b15.
//
// Solidity: function mintedCount() view returns(uint256)
func (_MasterToken *MasterTokenSession) MintedCount() (*big.Int, error) {
    return _MasterToken.Contract.MintedCount(&_MasterToken.CallOpts)
}

// MintedCount is a free data retrieval call binding the contract method 0xcf721b15.
//
// Solidity: function mintedCount() view returns(uint256)
func (_MasterToken *MasterTokenCallerSession) MintedCount() (*big.Int, error) {
    return _MasterToken.Contract.MintedCount(&_MasterToken.CallOpts)
}

// Name is a free data retrieval call binding the contract method 0x06fdde03.
//
// Solidity: function name() view returns(string)
func (_MasterToken *MasterTokenCaller) Name(opts *bind.CallOpts) (string, error) {
    var out []interface{}
    err := _MasterToken.contract.Call(opts, &out, "name")

    if err != nil {
        return *new(string), err
    }

    out0 := *abi.ConvertType(out[0], new(string)).(*string)

    return out0, err

}

// Name is a free data retrieval call binding the contract method 0x06fdde03.
//
// Solidity: function name() view returns(string)
func (_MasterToken *MasterTokenSession) Name() (string, error) {
    return _MasterToken.Contract.Name(&_MasterToken.CallOpts)
}

// Name is a free data retrieval call binding the contract method 0x06fdde03.
//
// Solidity: function name() view returns(string)
func (_MasterToken *MasterTokenCallerSession) Name() (string, error) {
    return _MasterToken.Contract.Name(&_MasterToken.CallOpts)
}

// OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
//
// Solidity: function ownerOf(uint256 tokenId) view returns(address)
func (_MasterToken *MasterTokenCaller) OwnerOf(opts *bind.CallOpts, tokenId *big.Int) (common.Address, error) {
    var out []interface{}
    err := _MasterToken.contract.Call(opts, &out, "ownerOf", tokenId)

    if err != nil {
        return *new(common.Address), err
    }

    out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

    return out0, err

}

// OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
//
// Solidity: function ownerOf(uint256 tokenId) view returns(address)
func (_MasterToken *MasterTokenSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
    return _MasterToken.Contract.OwnerOf(&_MasterToken.CallOpts, tokenId)
}

// OwnerOf is a free data retrieval call binding the contract method 0x6352211e.
//
// Solidity: function ownerOf(uint256 tokenId) view returns(address)
func (_MasterToken *MasterTokenCallerSession) OwnerOf(tokenId *big.Int) (common.Address, error) {
    return _MasterToken.Contract.OwnerOf(&_MasterToken.CallOpts, tokenId)
}

// OwnerToken is a free data retrieval call binding the contract method 0x65371883.
//
// Solidity: function ownerToken() view returns(address)
func (_MasterToken *MasterTokenCaller) OwnerToken(opts *bind.CallOpts) (common.Address, error) {
    var out []interface{}
    err := _MasterToken.contract.Call(opts, &out, "ownerToken")

    if err != nil {
        return *new(common.Address), err
    }

    out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)

    return out0, err

}

// OwnerToken is a free data retrieval call binding the contract method 0x65371883.
//
// Solidity: function ownerToken() view returns(address)
func (_MasterToken *MasterTokenSession) OwnerToken() (common.Address, error) {
    return _MasterToken.Contract.OwnerToken(&_MasterToken.CallOpts)
}

// OwnerToken is a free data retrieval call binding the contract method 0x65371883.
//
// Solidity: function ownerToken() view returns(address)
func (_MasterToken *MasterTokenCallerSession) OwnerToken() (common.Address, error) {
    return _MasterToken.Contract.OwnerToken(&_MasterToken.CallOpts)
}

// RemoteBurnable is a free data retrieval call binding the contract method 0x101639f5.
//
// Solidity: function remoteBurnable() view returns(bool)
func (_MasterToken *MasterTokenCaller) RemoteBurnable(opts *bind.CallOpts) (bool, error) {
    var out []interface{}
    err := _MasterToken.contract.Call(opts, &out, "remoteBurnable")

    if err != nil {
        return *new(bool), err
    }

    out0 := *abi.ConvertType(out[0], new(bool)).(*bool)

    return out0, err

}

// RemoteBurnable is a free data retrieval call binding the contract method 0x101639f5.
//
// Solidity: function remoteBurnable() view returns(bool)
func (_MasterToken *MasterTokenSession) RemoteBurnable() (bool, error) {
    return _MasterToken.Contract.RemoteBurnable(&_MasterToken.CallOpts)
}

// RemoteBurnable is a free data retrieval call binding the contract method 0x101639f5.
//
// Solidity: function remoteBurnable() view returns(bool)
func (_MasterToken *MasterTokenCallerSession) RemoteBurnable() (bool, error) {
    return _MasterToken.Contract.RemoteBurnable(&_MasterToken.CallOpts)
}

// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
//
// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
func (_MasterToken *MasterTokenCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) {
    var out []interface{}
    err := _MasterToken.contract.Call(opts, &out, "supportsInterface", interfaceId)

    if err != nil {
        return *new(bool), err
    }

    out0 := *abi.ConvertType(out[0], new(bool)).(*bool)

    return out0, err

}

// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
//
// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
func (_MasterToken *MasterTokenSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
    return _MasterToken.Contract.SupportsInterface(&_MasterToken.CallOpts, interfaceId)
}

// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
//
// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
func (_MasterToken *MasterTokenCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
    return _MasterToken.Contract.SupportsInterface(&_MasterToken.CallOpts, interfaceId)
}

// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
//
// Solidity: function symbol() view returns(string)
func (_MasterToken *MasterTokenCaller) Symbol(opts *bind.CallOpts) (string, error) {
    var out []interface{}
    err := _MasterToken.contract.Call(opts, &out, "symbol")

    if err != nil {
        return *new(string), err
    }

    out0 := *abi.ConvertType(out[0], new(string)).(*string)

    return out0, err

}

// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
//
// Solidity: function symbol() view returns(string)
func (_MasterToken *MasterTokenSession) Symbol() (string, error) {
    return _MasterToken.Contract.Symbol(&_MasterToken.CallOpts)
}

// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
//
// Solidity: function symbol() view returns(string)
func (_MasterToken *MasterTokenCallerSession) Symbol() (string, error) {
    return _MasterToken.Contract.Symbol(&_MasterToken.CallOpts)
}

// TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
//
// Solidity: function tokenByIndex(uint256 index) view returns(uint256)
func (_MasterToken *MasterTokenCaller) TokenByIndex(opts *bind.CallOpts, index *big.Int) (*big.Int, error) {
    var out []interface{}
    err := _MasterToken.contract.Call(opts, &out, "tokenByIndex", index)

    if err != nil {
        return *new(*big.Int), err
    }

    out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

    return out0, err

}

// TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
//
// Solidity: function tokenByIndex(uint256 index) view returns(uint256)
func (_MasterToken *MasterTokenSession) TokenByIndex(index *big.Int) (*big.Int, error) {
    return _MasterToken.Contract.TokenByIndex(&_MasterToken.CallOpts, index)
}

// TokenByIndex is a free data retrieval call binding the contract method 0x4f6ccce7.
//
// Solidity: function tokenByIndex(uint256 index) view returns(uint256)
func (_MasterToken *MasterTokenCallerSession) TokenByIndex(index *big.Int) (*big.Int, error) {
    return _MasterToken.Contract.TokenByIndex(&_MasterToken.CallOpts, index)
}

// TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
//
// Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
func (_MasterToken *MasterTokenCaller) TokenOfOwnerByIndex(opts *bind.CallOpts, owner common.Address, index *big.Int) (*big.Int, error) {
    var out []interface{}
    err := _MasterToken.contract.Call(opts, &out, "tokenOfOwnerByIndex", owner, index)

    if err != nil {
        return *new(*big.Int), err
    }

    out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

    return out0, err

}

// TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
//
// Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
func (_MasterToken *MasterTokenSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) {
    return _MasterToken.Contract.TokenOfOwnerByIndex(&_MasterToken.CallOpts, owner, index)
}

// TokenOfOwnerByIndex is a free data retrieval call binding the contract method 0x2f745c59.
//
// Solidity: function tokenOfOwnerByIndex(address owner, uint256 index) view returns(uint256)
func (_MasterToken *MasterTokenCallerSession) TokenOfOwnerByIndex(owner common.Address, index *big.Int) (*big.Int, error) {
    return _MasterToken.Contract.TokenOfOwnerByIndex(&_MasterToken.CallOpts, owner, index)
}

// TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
//
// Solidity: function tokenURI(uint256 tokenId) view returns(string)
func (_MasterToken *MasterTokenCaller) TokenURI(opts *bind.CallOpts, tokenId *big.Int) (string, error) {
    var out []interface{}
    err := _MasterToken.contract.Call(opts, &out, "tokenURI", tokenId)

    if err != nil {
        return *new(string), err
    }

    out0 := *abi.ConvertType(out[0], new(string)).(*string)

    return out0, err

}

// TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
//
// Solidity: function tokenURI(uint256 tokenId) view returns(string)
func (_MasterToken *MasterTokenSession) TokenURI(tokenId *big.Int) (string, error) {
    return _MasterToken.Contract.TokenURI(&_MasterToken.CallOpts, tokenId)
}

// TokenURI is a free data retrieval call binding the contract method 0xc87b56dd.
//
// Solidity: function tokenURI(uint256 tokenId) view returns(string)
func (_MasterToken *MasterTokenCallerSession) TokenURI(tokenId *big.Int) (string, error) {
    return _MasterToken.Contract.TokenURI(&_MasterToken.CallOpts, tokenId)
}

// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
//
// Solidity: function totalSupply() view returns(uint256)
func (_MasterToken *MasterTokenCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
    var out []interface{}
    err := _MasterToken.contract.Call(opts, &out, "totalSupply")

    if err != nil {
        return *new(*big.Int), err
    }

    out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)

    return out0, err

}

// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
//
// Solidity: function totalSupply() view returns(uint256)
func (_MasterToken *MasterTokenSession) TotalSupply() (*big.Int, error) {
    return _MasterToken.Contract.TotalSupply(&_MasterToken.CallOpts)
}

// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
//
// Solidity: function totalSupply() view returns(uint256)
func (_MasterToken *MasterTokenCallerSession) TotalSupply() (*big.Int, error) {
    return _MasterToken.Contract.TotalSupply(&_MasterToken.CallOpts)
}

// Transferable is a free data retrieval call binding the contract method 0x92ff0d31.
//
// Solidity: function transferable() view returns(bool)
func (_MasterToken *MasterTokenCaller) Transferable(opts *bind.CallOpts) (bool, error) {
    var out []interface{}
    err := _MasterToken.contract.Call(opts, &out, "transferable")

    if err != nil {
        return *new(bool), err
    }

    out0 := *abi.ConvertType(out[0], new(bool)).(*bool)

    return out0, err

}

// Transferable is a free data retrieval call binding the contract method 0x92ff0d31.
//
// Solidity: function transferable() view returns(bool)
func (_MasterToken *MasterTokenSession) Transferable() (bool, error) {
    return _MasterToken.Contract.Transferable(&_MasterToken.CallOpts)
}

// Transferable is a free data retrieval call binding the contract method 0x92ff0d31.
//
// Solidity: function transferable() view returns(bool)
func (_MasterToken *MasterTokenCallerSession) Transferable() (bool, error) {
    return _MasterToken.Contract.Transferable(&_MasterToken.CallOpts)
}

// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address to, uint256 tokenId) returns()
func (_MasterToken *MasterTokenTransactor) Approve(opts *bind.TransactOpts, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
    return _MasterToken.contract.Transact(opts, "approve", to, tokenId)
}

// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address to, uint256 tokenId) returns()
func (_MasterToken *MasterTokenSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
    return _MasterToken.Contract.Approve(&_MasterToken.TransactOpts, to, tokenId)
}

// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
//
// Solidity: function approve(address to, uint256 tokenId) returns()
func (_MasterToken *MasterTokenTransactorSession) Approve(to common.Address, tokenId *big.Int) (*types.Transaction, error) {
    return _MasterToken.Contract.Approve(&_MasterToken.TransactOpts, to, tokenId)
}

// MintTo is a paid mutator transaction binding the contract method 0xce7c8b49.
//
// Solidity: function mintTo(address[] addresses) returns()
func (_MasterToken *MasterTokenTransactor) MintTo(opts *bind.TransactOpts, addresses []common.Address) (*types.Transaction, error) {
    return _MasterToken.contract.Transact(opts, "mintTo", addresses)
}

// MintTo is a paid mutator transaction binding the contract method 0xce7c8b49.
//
// Solidity: function mintTo(address[] addresses) returns()
func (_MasterToken *MasterTokenSession) MintTo(addresses []common.Address) (*types.Transaction, error) {
    return _MasterToken.Contract.MintTo(&_MasterToken.TransactOpts, addresses)
}

// MintTo is a paid mutator transaction binding the contract method 0xce7c8b49.
//
// Solidity: function mintTo(address[] addresses) returns()
func (_MasterToken *MasterTokenTransactorSession) MintTo(addresses []common.Address) (*types.Transaction, error) {
    return _MasterToken.Contract.MintTo(&_MasterToken.TransactOpts, addresses)
}

// RemoteBurn is a paid mutator transaction binding the contract method 0x4fb95e02.
//
// Solidity: function remoteBurn(uint256[] tokenIds) returns()
func (_MasterToken *MasterTokenTransactor) RemoteBurn(opts *bind.TransactOpts, tokenIds []*big.Int) (*types.Transaction, error) {
    return _MasterToken.contract.Transact(opts, "remoteBurn", tokenIds)
}

// RemoteBurn is a paid mutator transaction binding the contract method 0x4fb95e02.
//
// Solidity: function remoteBurn(uint256[] tokenIds) returns()
func (_MasterToken *MasterTokenSession) RemoteBurn(tokenIds []*big.Int) (*types.Transaction, error) {
    return _MasterToken.Contract.RemoteBurn(&_MasterToken.TransactOpts, tokenIds)
}

// RemoteBurn is a paid mutator transaction binding the contract method 0x4fb95e02.
//
// Solidity: function remoteBurn(uint256[] tokenIds) returns()
func (_MasterToken *MasterTokenTransactorSession) RemoteBurn(tokenIds []*big.Int) (*types.Transaction, error) {
    return _MasterToken.Contract.RemoteBurn(&_MasterToken.TransactOpts, tokenIds)
}

// SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
//
// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
func (_MasterToken *MasterTokenTransactor) SafeTransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
    return _MasterToken.contract.Transact(opts, "safeTransferFrom", from, to, tokenId)
}

// SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
//
// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
func (_MasterToken *MasterTokenSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
    return _MasterToken.Contract.SafeTransferFrom(&_MasterToken.TransactOpts, from, to, tokenId)
}

// SafeTransferFrom is a paid mutator transaction binding the contract method 0x42842e0e.
//
// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId) returns()
func (_MasterToken *MasterTokenTransactorSession) SafeTransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
    return _MasterToken.Contract.SafeTransferFrom(&_MasterToken.TransactOpts, from, to, tokenId)
}

// SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
//
// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
func (_MasterToken *MasterTokenTransactor) SafeTransferFrom0(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
    return _MasterToken.contract.Transact(opts, "safeTransferFrom0", from, to, tokenId, data)
}

// SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
//
// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
func (_MasterToken *MasterTokenSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
    return _MasterToken.Contract.SafeTransferFrom0(&_MasterToken.TransactOpts, from, to, tokenId, data)
}

// SafeTransferFrom0 is a paid mutator transaction binding the contract method 0xb88d4fde.
//
// Solidity: function safeTransferFrom(address from, address to, uint256 tokenId, bytes data) returns()
func (_MasterToken *MasterTokenTransactorSession) SafeTransferFrom0(from common.Address, to common.Address, tokenId *big.Int, data []byte) (*types.Transaction, error) {
    return _MasterToken.Contract.SafeTransferFrom0(&_MasterToken.TransactOpts, from, to, tokenId, data)
}

// SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
//
// Solidity: function setApprovalForAll(address operator, bool approved) returns()
func (_MasterToken *MasterTokenTransactor) SetApprovalForAll(opts *bind.TransactOpts, operator common.Address, approved bool) (*types.Transaction, error) {
    return _MasterToken.contract.Transact(opts, "setApprovalForAll", operator, approved)
}

// SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
//
// Solidity: function setApprovalForAll(address operator, bool approved) returns()
func (_MasterToken *MasterTokenSession) SetApprovalForAll(operator common.Address, approved bool) (*types.Transaction, error) {
    return _MasterToken.Contract.SetApprovalForAll(&_MasterToken.TransactOpts, operator, approved)
}

// SetApprovalForAll is a paid mutator transaction binding the contract method 0xa22cb465.
//
// Solidity: function setApprovalForAll(address operator, bool approved) returns()
func (_MasterToken *MasterTokenTransactorSession) SetApprovalForAll(operator common.Address, approved bool) (*types.Transaction, error) {
    return _MasterToken.Contract.SetApprovalForAll(&_MasterToken.TransactOpts, operator, approved)
}

// SetMaxSupply is a paid mutator transaction binding the contract method 0x6f8b44b0.
//
// Solidity: function setMaxSupply(uint256 newMaxSupply) returns()
func (_MasterToken *MasterTokenTransactor) SetMaxSupply(opts *bind.TransactOpts, newMaxSupply *big.Int) (*types.Transaction, error) {
    return _MasterToken.contract.Transact(opts, "setMaxSupply", newMaxSupply)
}

// SetMaxSupply is a paid mutator transaction binding the contract method 0x6f8b44b0.
//
// Solidity: function setMaxSupply(uint256 newMaxSupply) returns()
func (_MasterToken *MasterTokenSession) SetMaxSupply(newMaxSupply *big.Int) (*types.Transaction, error) {
    return _MasterToken.Contract.SetMaxSupply(&_MasterToken.TransactOpts, newMaxSupply)
}

// SetMaxSupply is a paid mutator transaction binding the contract method 0x6f8b44b0.
//
// Solidity: function setMaxSupply(uint256 newMaxSupply) returns()
func (_MasterToken *MasterTokenTransactorSession) SetMaxSupply(newMaxSupply *big.Int) (*types.Transaction, error) {
    return _MasterToken.Contract.SetMaxSupply(&_MasterToken.TransactOpts, newMaxSupply)
}

// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
func (_MasterToken *MasterTokenTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
    return _MasterToken.contract.Transact(opts, "transferFrom", from, to, tokenId)
}

// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
func (_MasterToken *MasterTokenSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
    return _MasterToken.Contract.TransferFrom(&_MasterToken.TransactOpts, from, to, tokenId)
}

// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
//
// Solidity: function transferFrom(address from, address to, uint256 tokenId) returns()
func (_MasterToken *MasterTokenTransactorSession) TransferFrom(from common.Address, to common.Address, tokenId *big.Int) (*types.Transaction, error) {
    return _MasterToken.Contract.TransferFrom(&_MasterToken.TransactOpts, from, to, tokenId)
}

// MasterTokenApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the MasterToken contract.
type MasterTokenApprovalIterator struct {
    Event *MasterTokenApproval // Event containing the contract specifics and raw log

    contract *bind.BoundContract // Generic contract to use for unpacking event data
    event    string              // Event name to use for unpacking event data

    logs chan types.Log        // Log channel receiving the found contract events
    sub  ethereum.Subscription // Subscription for errors, completion and termination
    done bool                  // Whether the subscription completed delivering logs
    fail error                 // Occurred error to stop iteration
}

// Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure.
func (it *MasterTokenApprovalIterator) Next() bool {
    // If the iterator failed, stop iterating
    if it.fail != nil {
        return false
    }
    // If the iterator completed, deliver directly whatever's available
    if it.done {
        select {
        case log := <-it.logs:
            it.Event = new(MasterTokenApproval)
            if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
                it.fail = err
                return false
            }
            it.Event.Raw = log
            return true

        default:
            return false
        }
    }
    // Iterator still in progress, wait for either a data or an error event
    select {
    case log := <-it.logs:
        it.Event = new(MasterTokenApproval)
        if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
            it.fail = err
            return false
        }
        it.Event.Raw = log
        return true

    case err := <-it.sub.Err():
        it.done = true
        it.fail = err
        return it.Next()
    }
}

// Error returns any retrieval or parsing error occurred during filtering.
func (it *MasterTokenApprovalIterator) Error() error {
    return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *MasterTokenApprovalIterator) Close() error {
    it.sub.Unsubscribe()
    return nil
}

// MasterTokenApproval represents a Approval event raised by the MasterToken contract.
type MasterTokenApproval struct {
    Owner    common.Address
    Approved common.Address
    TokenId  *big.Int
    Raw      types.Log // Blockchain specific contextual infos
}

// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
func (_MasterToken *MasterTokenFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, approved []common.Address, tokenId []*big.Int) (*MasterTokenApprovalIterator, error) {

    var ownerRule []interface{}
    for _, ownerItem := range owner {
        ownerRule = append(ownerRule, ownerItem)
    }
    var approvedRule []interface{}
    for _, approvedItem := range approved {
        approvedRule = append(approvedRule, approvedItem)
    }
    var tokenIdRule []interface{}
    for _, tokenIdItem := range tokenId {
        tokenIdRule = append(tokenIdRule, tokenIdItem)
    }

    logs, sub, err := _MasterToken.contract.FilterLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
    if err != nil {
        return nil, err
    }
    return &MasterTokenApprovalIterator{contract: _MasterToken.contract, event: "Approval", logs: logs, sub: sub}, nil
}

// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
func (_MasterToken *MasterTokenFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *MasterTokenApproval, owner []common.Address, approved []common.Address, tokenId []*big.Int) (event.Subscription, error) {

    var ownerRule []interface{}
    for _, ownerItem := range owner {
        ownerRule = append(ownerRule, ownerItem)
    }
    var approvedRule []interface{}
    for _, approvedItem := range approved {
        approvedRule = append(approvedRule, approvedItem)
    }
    var tokenIdRule []interface{}
    for _, tokenIdItem := range tokenId {
        tokenIdRule = append(tokenIdRule, tokenIdItem)
    }

    logs, sub, err := _MasterToken.contract.WatchLogs(opts, "Approval", ownerRule, approvedRule, tokenIdRule)
    if err != nil {
        return nil, err
    }
    return event.NewSubscription(func(quit <-chan struct{}) error {
        defer sub.Unsubscribe()
        for {
            select {
            case log := <-logs:
                // New log arrived, parse the event and forward to the user
                event := new(MasterTokenApproval)
                if err := _MasterToken.contract.UnpackLog(event, "Approval", log); err != nil {
                    return err
                }
                event.Raw = log

                select {
                case sink <- event:
                case err := <-sub.Err():
                    return err
                case <-quit:
                    return nil
                }
            case err := <-sub.Err():
                return err
            case <-quit:
                return nil
            }
        }
    }), nil
}

// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
//
// Solidity: event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
func (_MasterToken *MasterTokenFilterer) ParseApproval(log types.Log) (*MasterTokenApproval, error) {
    event := new(MasterTokenApproval)
    if err := _MasterToken.contract.UnpackLog(event, "Approval", log); err != nil {
        return nil, err
    }
    event.Raw = log
    return event, nil
}

// MasterTokenApprovalForAllIterator is returned from FilterApprovalForAll and is used to iterate over the raw logs and unpacked data for ApprovalForAll events raised by the MasterToken contract.
type MasterTokenApprovalForAllIterator struct {
    Event *MasterTokenApprovalForAll // Event containing the contract specifics and raw log

    contract *bind.BoundContract // Generic contract to use for unpacking event data
    event    string              // Event name to use for unpacking event data

    logs chan types.Log        // Log channel receiving the found contract events
    sub  ethereum.Subscription // Subscription for errors, completion and termination
    done bool                  // Whether the subscription completed delivering logs
    fail error                 // Occurred error to stop iteration
}

// Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure.
func (it *MasterTokenApprovalForAllIterator) Next() bool {
    // If the iterator failed, stop iterating
    if it.fail != nil {
        return false
    }
    // If the iterator completed, deliver directly whatever's available
    if it.done {
        select {
        case log := <-it.logs:
            it.Event = new(MasterTokenApprovalForAll)
            if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
                it.fail = err
                return false
            }
            it.Event.Raw = log
            return true

        default:
            return false
        }
    }
    // Iterator still in progress, wait for either a data or an error event
    select {
    case log := <-it.logs:
        it.Event = new(MasterTokenApprovalForAll)
        if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
            it.fail = err
            return false
        }
        it.Event.Raw = log
        return true

    case err := <-it.sub.Err():
        it.done = true
        it.fail = err
        return it.Next()
    }
}

// Error returns any retrieval or parsing error occurred during filtering.
func (it *MasterTokenApprovalForAllIterator) Error() error {
    return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *MasterTokenApprovalForAllIterator) Close() error {
    it.sub.Unsubscribe()
    return nil
}

// MasterTokenApprovalForAll represents a ApprovalForAll event raised by the MasterToken contract.
type MasterTokenApprovalForAll struct {
    Owner    common.Address
    Operator common.Address
    Approved bool
    Raw      types.Log // Blockchain specific contextual infos
}

// FilterApprovalForAll is a free log retrieval operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
//
// Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
func (_MasterToken *MasterTokenFilterer) FilterApprovalForAll(opts *bind.FilterOpts, owner []common.Address, operator []common.Address) (*MasterTokenApprovalForAllIterator, error) {

    var ownerRule []interface{}
    for _, ownerItem := range owner {
        ownerRule = append(ownerRule, ownerItem)
    }
    var operatorRule []interface{}
    for _, operatorItem := range operator {
        operatorRule = append(operatorRule, operatorItem)
    }

    logs, sub, err := _MasterToken.contract.FilterLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
    if err != nil {
        return nil, err
    }
    return &MasterTokenApprovalForAllIterator{contract: _MasterToken.contract, event: "ApprovalForAll", logs: logs, sub: sub}, nil
}

// WatchApprovalForAll is a free log subscription operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
//
// Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
func (_MasterToken *MasterTokenFilterer) WatchApprovalForAll(opts *bind.WatchOpts, sink chan<- *MasterTokenApprovalForAll, owner []common.Address, operator []common.Address) (event.Subscription, error) {

    var ownerRule []interface{}
    for _, ownerItem := range owner {
        ownerRule = append(ownerRule, ownerItem)
    }
    var operatorRule []interface{}
    for _, operatorItem := range operator {
        operatorRule = append(operatorRule, operatorItem)
    }

    logs, sub, err := _MasterToken.contract.WatchLogs(opts, "ApprovalForAll", ownerRule, operatorRule)
    if err != nil {
        return nil, err
    }
    return event.NewSubscription(func(quit <-chan struct{}) error {
        defer sub.Unsubscribe()
        for {
            select {
            case log := <-logs:
                // New log arrived, parse the event and forward to the user
                event := new(MasterTokenApprovalForAll)
                if err := _MasterToken.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
                    return err
                }
                event.Raw = log

                select {
                case sink <- event:
                case err := <-sub.Err():
                    return err
                case <-quit:
                    return nil
                }
            case err := <-sub.Err():
                return err
            case <-quit:
                return nil
            }
        }
    }), nil
}

// ParseApprovalForAll is a log parse operation binding the contract event 0x17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31.
//
// Solidity: event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
func (_MasterToken *MasterTokenFilterer) ParseApprovalForAll(log types.Log) (*MasterTokenApprovalForAll, error) {
    event := new(MasterTokenApprovalForAll)
    if err := _MasterToken.contract.UnpackLog(event, "ApprovalForAll", log); err != nil {
        return nil, err
    }
    event.Raw = log
    return event, nil
}

// MasterTokenStatusMintIterator is returned from FilterStatusMint and is used to iterate over the raw logs and unpacked data for StatusMint events raised by the MasterToken contract.
type MasterTokenStatusMintIterator struct {
    Event *MasterTokenStatusMint // Event containing the contract specifics and raw log

    contract *bind.BoundContract // Generic contract to use for unpacking event data
    event    string              // Event name to use for unpacking event data

    logs chan types.Log        // Log channel receiving the found contract events
    sub  ethereum.Subscription // Subscription for errors, completion and termination
    done bool                  // Whether the subscription completed delivering logs
    fail error                 // Occurred error to stop iteration
}

// Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure.
func (it *MasterTokenStatusMintIterator) Next() bool {
    // If the iterator failed, stop iterating
    if it.fail != nil {
        return false
    }
    // If the iterator completed, deliver directly whatever's available
    if it.done {
        select {
        case log := <-it.logs:
            it.Event = new(MasterTokenStatusMint)
            if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
                it.fail = err
                return false
            }
            it.Event.Raw = log
            return true

        default:
            return false
        }
    }
    // Iterator still in progress, wait for either a data or an error event
    select {
    case log := <-it.logs:
        it.Event = new(MasterTokenStatusMint)
        if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
            it.fail = err
            return false
        }
        it.Event.Raw = log
        return true

    case err := <-it.sub.Err():
        it.done = true
        it.fail = err
        return it.Next()
    }
}

// Error returns any retrieval or parsing error occurred during filtering.
func (it *MasterTokenStatusMintIterator) Error() error {
    return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *MasterTokenStatusMintIterator) Close() error {
    it.sub.Unsubscribe()
    return nil
}

// MasterTokenStatusMint represents a StatusMint event raised by the MasterToken contract.
type MasterTokenStatusMint struct {
    From    common.Address
    To      common.Address
    TokenId *big.Int
    Raw     types.Log // Blockchain specific contextual infos
}

// FilterStatusMint is a free log retrieval operation binding the contract event 0x28c427b0611d99da5c4f7368abe57e86b045b483c4689ae93e90745802335b87.
//
// Solidity: event StatusMint(address indexed from, address indexed to, uint256 indexed tokenId)
func (_MasterToken *MasterTokenFilterer) FilterStatusMint(opts *bind.FilterOpts, from []common.Address, to []common.Address, tokenId []*big.Int) (*MasterTokenStatusMintIterator, error) {

    var fromRule []interface{}
    for _, fromItem := range from {
        fromRule = append(fromRule, fromItem)
    }
    var toRule []interface{}
    for _, toItem := range to {
        toRule = append(toRule, toItem)
    }
    var tokenIdRule []interface{}
    for _, tokenIdItem := range tokenId {
        tokenIdRule = append(tokenIdRule, tokenIdItem)
    }

    logs, sub, err := _MasterToken.contract.FilterLogs(opts, "StatusMint", fromRule, toRule, tokenIdRule)
    if err != nil {
        return nil, err
    }
    return &MasterTokenStatusMintIterator{contract: _MasterToken.contract, event: "StatusMint", logs: logs, sub: sub}, nil
}

// WatchStatusMint is a free log subscription operation binding the contract event 0x28c427b0611d99da5c4f7368abe57e86b045b483c4689ae93e90745802335b87.
//
// Solidity: event StatusMint(address indexed from, address indexed to, uint256 indexed tokenId)
func (_MasterToken *MasterTokenFilterer) WatchStatusMint(opts *bind.WatchOpts, sink chan<- *MasterTokenStatusMint, from []common.Address, to []common.Address, tokenId []*big.Int) (event.Subscription, error) {

    var fromRule []interface{}
    for _, fromItem := range from {
        fromRule = append(fromRule, fromItem)
    }
    var toRule []interface{}
    for _, toItem := range to {
        toRule = append(toRule, toItem)
    }
    var tokenIdRule []interface{}
    for _, tokenIdItem := range tokenId {
        tokenIdRule = append(tokenIdRule, tokenIdItem)
    }

    logs, sub, err := _MasterToken.contract.WatchLogs(opts, "StatusMint", fromRule, toRule, tokenIdRule)
    if err != nil {
        return nil, err
    }
    return event.NewSubscription(func(quit <-chan struct{}) error {
        defer sub.Unsubscribe()
        for {
            select {
            case log := <-logs:
                // New log arrived, parse the event and forward to the user
                event := new(MasterTokenStatusMint)
                if err := _MasterToken.contract.UnpackLog(event, "StatusMint", log); err != nil {
                    return err
                }
                event.Raw = log

                select {
                case sink <- event:
                case err := <-sub.Err():
                    return err
                case <-quit:
                    return nil
                }
            case err := <-sub.Err():
                return err
            case <-quit:
                return nil
            }
        }
    }), nil
}

// ParseStatusMint is a log parse operation binding the contract event 0x28c427b0611d99da5c4f7368abe57e86b045b483c4689ae93e90745802335b87.
//
// Solidity: event StatusMint(address indexed from, address indexed to, uint256 indexed tokenId)
func (_MasterToken *MasterTokenFilterer) ParseStatusMint(log types.Log) (*MasterTokenStatusMint, error) {
    event := new(MasterTokenStatusMint)
    if err := _MasterToken.contract.UnpackLog(event, "StatusMint", log); err != nil {
        return nil, err
    }
    event.Raw = log
    return event, nil
}

// MasterTokenTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the MasterToken contract.
type MasterTokenTransferIterator struct {
    Event *MasterTokenTransfer // Event containing the contract specifics and raw log

    contract *bind.BoundContract // Generic contract to use for unpacking event data
    event    string              // Event name to use for unpacking event data

    logs chan types.Log        // Log channel receiving the found contract events
    sub  ethereum.Subscription // Subscription for errors, completion and termination
    done bool                  // Whether the subscription completed delivering logs
    fail error                 // Occurred error to stop iteration
}

// Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure.
func (it *MasterTokenTransferIterator) Next() bool {
    // If the iterator failed, stop iterating
    if it.fail != nil {
        return false
    }
    // If the iterator completed, deliver directly whatever's available
    if it.done {
        select {
        case log := <-it.logs:
            it.Event = new(MasterTokenTransfer)
            if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
                it.fail = err
                return false
            }
            it.Event.Raw = log
            return true

        default:
            return false
        }
    }
    // Iterator still in progress, wait for either a data or an error event
    select {
    case log := <-it.logs:
        it.Event = new(MasterTokenTransfer)
        if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
            it.fail = err
            return false
        }
        it.Event.Raw = log
        return true

    case err := <-it.sub.Err():
        it.done = true
        it.fail = err
        return it.Next()
    }
}

// Error returns any retrieval or parsing error occurred during filtering.
func (it *MasterTokenTransferIterator) Error() error {
    return it.fail
}

// Close terminates the iteration process, releasing any pending underlying
// resources.
func (it *MasterTokenTransferIterator) Close() error {
    it.sub.Unsubscribe()
    return nil
}

// MasterTokenTransfer represents a Transfer event raised by the MasterToken contract.
type MasterTokenTransfer struct {
    From    common.Address
    To      common.Address
    TokenId *big.Int
    Raw     types.Log // Blockchain specific contextual infos
}

// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
func (_MasterToken *MasterTokenFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address, tokenId []*big.Int) (*MasterTokenTransferIterator, error) {

    var fromRule []interface{}
    for _, fromItem := range from {
        fromRule = append(fromRule, fromItem)
    }
    var toRule []interface{}
    for _, toItem := range to {
        toRule = append(toRule, toItem)
    }
    var tokenIdRule []interface{}
    for _, tokenIdItem := range tokenId {
        tokenIdRule = append(tokenIdRule, tokenIdItem)
    }

    logs, sub, err := _MasterToken.contract.FilterLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
    if err != nil {
        return nil, err
    }
    return &MasterTokenTransferIterator{contract: _MasterToken.contract, event: "Transfer", logs: logs, sub: sub}, nil
}

// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
func (_MasterToken *MasterTokenFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *MasterTokenTransfer, from []common.Address, to []common.Address, tokenId []*big.Int) (event.Subscription, error) {

    var fromRule []interface{}
    for _, fromItem := range from {
        fromRule = append(fromRule, fromItem)
    }
    var toRule []interface{}
    for _, toItem := range to {
        toRule = append(toRule, toItem)
    }
    var tokenIdRule []interface{}
    for _, tokenIdItem := range tokenId {
        tokenIdRule = append(tokenIdRule, tokenIdItem)
    }

    logs, sub, err := _MasterToken.contract.WatchLogs(opts, "Transfer", fromRule, toRule, tokenIdRule)
    if err != nil {
        return nil, err
    }
    return event.NewSubscription(func(quit <-chan struct{}) error {
        defer sub.Unsubscribe()
        for {
            select {
            case log := <-logs:
                // New log arrived, parse the event and forward to the user
                event := new(MasterTokenTransfer)
                if err := _MasterToken.contract.UnpackLog(event, "Transfer", log); err != nil {
                    return err
                }
                event.Raw = log

                select {
                case sink <- event:
                case err := <-sub.Err():
                    return err
                case <-quit:
                    return nil
                }
            case err := <-sub.Err():
                return err
            case <-quit:
                return nil
            }
        }
    }), nil
}

// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
//
// Solidity: event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
func (_MasterToken *MasterTokenFilterer) ParseTransfer(log types.Log) (*MasterTokenTransfer, error) {
    event := new(MasterTokenTransfer)
    if err := _MasterToken.contract.UnpackLog(event, "Transfer", log); err != nil {
        return nil, err
    }
    event.Raw = log
    return event, nil
}