// Code generated - DO NOT EDIT.
// This file is a generated binding and any manual changes will be lost.

package accessors

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

	ethereum "github.com/thetatoken/thetasubchain/eth"
	"github.com/thetatoken/thetasubchain/eth/abi"
	"github.com/thetatoken/thetasubchain/eth/abi/bind"
	"github.com/thetatoken/theta/common"
	"github.com/thetatoken/thetasubchain/eth/core/types"
	"github.com/thetatoken/thetasubchain/eth/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
)

// TNT721TokenBankMetaData contains all meta data concerning the TNT721TokenBank contract.
var TNT721TokenBankMetaData = &bind.MetaData{
	ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"mainchainID_\",\"type\":\"uint256\"},{\"internalType\":\"contractChainRegistrar\",\"name\":\"chainRegistrar_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"voucherContractAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenID\",\"type\":\"uint256\"}],\"name\":\"FailedToMintTNT721Vouchers\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FailedToSendTFuel\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"tokenContractAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenID\",\"type\":\"uint256\"}],\"name\":\"FailedToUnlockTNT721Tokens\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sourceChainTokenSender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"targetChainID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"targetChainVoucherReceiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenLockNonce\",\"type\":\"uint256\"}],\"name\":\"TNT721TokenLocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"targetChainTokenReceiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"sourceChainVoucherBurnNonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenUnlockNonce\",\"type\":\"uint256\"}],\"name\":\"TNT721TokenUnlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sourceChainVoucherOwner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"targetChainTokenReceiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"voucherBurnNonce\",\"type\":\"uint256\"}],\"name\":\"TNT721VoucherBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"targetChainVoucherReceiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"voucherContract\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"sourceChainTokenLockNonce\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"voucherMintNonce\",\"type\":\"uint256\"}],\"name\":\"TNT721VoucherMinted\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allDenoms\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allVouchers\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"denomToVoucherLookup\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"exists\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"}],\"name\":\"exists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"voucherAddress\",\"type\":\"address\"}],\"name\":\"exists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subchainID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dynasty\",\"type\":\"uint256\"}],\"name\":\"getAdjustedValidatorSet\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"validators\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"shareAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"voucherContractAddr\",\"type\":\"address\"}],\"name\":\"getDenom\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"name\":\"getMaxProcessedTokenLockNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"name\":\"getMaxProcessedVoucherBurnNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"eventNonce\",\"type\":\"uint256\"}],\"name\":\"getTokenLockEventHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"}],\"name\":\"getVoucher\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"eventNonce\",\"type\":\"uint256\"}],\"name\":\"getVoucherBurnEventHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mainchainID\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"tokenLockNonceMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"tokenLockVotingRecords\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynasty\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accumlatedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"tokenUnlockNonceMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"voucherAddressToDenomLookup\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"bool\",\"name\":\"exists\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"voucherBurnNonceMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"voucherBurnVotingRecords\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynasty\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"accumlatedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"voucherMintNonceMap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"targetChainID\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sourceChainTNT721Contract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"targetChainVoucherReceiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenID\",\"type\":\"uint256\"}],\"name\":\"lockTokens\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"targetChainVoucherReceiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenID\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenUri\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"dynasty\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sourceChainTokenLockNonce\",\"type\":\"uint256\"}],\"name\":\"mintVouchers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sourceChainVoucherContractAddr\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"targetChainTokenReceiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenID\",\"type\":\"uint256\"}],\"name\":\"burnVouchers\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"sourceChainID\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"denom\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"targetChainTokenReceiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"dynasty\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sourceChainVoucherBurnNonce\",\"type\":\"uint256\"}],\"name\":\"unlockTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
	Bin: "0x60806040523480156200001157600080fd5b5060405162005fee38038062005fee833981016040819052620000349162000064565b6001600081905591909155600280546001600160a01b0319166001600160a01b03909216919091179055620000a3565b600080604083850312156200007857600080fd5b825160208401519092506001600160a01b03811681146200009857600080fd5b809150509250929050565b615f3b80620000b36000396000f3fe608060405260043610620001675760003560e01c80638883931e11620000c5578063ccf187c71162000078578063ccf187c71462000512578063dd17eb6d1462000543578063ebda9962146200057f578063f6a3d24e14620005a4578063f95627ac14620005e4578063feaff052146200061557600080fd5b80638883931e1462000428578063a0df5cc51462000459578063a2cc69811462000470578063aa861c151462000495578063bff4c41a14620004ca578063ca20756914620004e157600080fd5b8063588b1408116200011e578063588b140814620002fc57806360569b5e14620003305780636ac739b91462000365578063740cb7f814620003a1578063766f8fb014620003d25780637ff75b46146200040357600080fd5b8063073b9502146200016c5780631527b14d14620001975780631eb787371462000208578063261a323e146200026157806327ca4df1146200029757806344b7b35214620002d5575b600080fd5b3480156200017957600080fd5b506200018460015481565b6040519081526020015b60405180910390f35b348015620001a457600080fd5b50620001e8620001b63660046200386e565b8051602081830181018051600d825292820191909301209152546001600160a01b03811690600160a01b900460ff1682565b604080516001600160a01b0390931683529015156020830152016200018e565b3480156200021557600080fd5b506200024b6200022736600462003abe565b600b6020908152600092835260408084209091529082529020805460029091015482565b604080519283526020830191909152016200018e565b3480156200026e57600080fd5b5062000286620002803660046200386e565b62000658565b60405190151581526020016200018e565b348015620002a457600080fd5b50620002bc620002b636600462003a0e565b6200069c565b6040516001600160a01b0390911681526020016200018e565b348015620002e257600080fd5b50620002fa620002f436600462003925565b620006c7565b005b3480156200030957600080fd5b50620003216200031b36600462003a0e565b620009ff565b6040516200018e919062003e84565b3480156200033d57600080fd5b50620003556200034f366004620036f1565b62000ab4565b6040516200018e92919062004085565b3480156200037257600080fd5b50620001846200038436600462003abe565b600091825260086020908152604080842092845291905290205490565b348015620003ae57600080fd5b5062000184620003c036600462003a0e565b60066020526000908152604090205481565b348015620003df57600080fd5b5062000184620003f136600462003a0e565b6000908152600a602052604090205490565b3480156200041057600080fd5b50620002fa6200042236600462003ae1565b62000b63565b3480156200043557600080fd5b50620001846200044736600462003a0e565b60036020526000908152604090205481565b620002fa6200046a36600462003731565b62000db2565b3480156200047d57600080fd5b50620002bc6200048f3660046200386e565b62001162565b348015620004a257600080fd5b50620004ba620004b436600462003abe565b620011d8565b6040516200018e92919062003e09565b620002fa620004db36600462003a42565b62001492565b348015620004ee57600080fd5b50620001846200050036600462003a0e565b60056020526000908152604090205481565b3480156200051f57600080fd5b50620001846200053136600462003a0e565b60046020526000908152604090205481565b3480156200055057600080fd5b50620001846200056236600462003abe565b600091825260076020908152604080842092845291905290205490565b3480156200058c57600080fd5b50620003216200059e366004620036f1565b620019aa565b348015620005b157600080fd5b5062000286620005c3366004620036f1565b6001600160a01b03166000908152600e602052604090206001015460ff1690565b348015620005f157600080fd5b50620001846200060336600462003a0e565b60009081526009602052604090205490565b3480156200062257600080fd5b506200024b6200063436600462003abe565b600c6020908152600092835260408084209091529082529020805460029091015482565b600080620006668362001aaa565b9050600d816040516200067a919062003ba2565b9081526040519081900360200190205460ff600160a01b909104169392505050565b600f8181548110620006ad57600080fd5b6000918252602090912001546001600160a01b0316905081565b60026000541415620006f65760405162461bcd60e51b8152600401620006ed906200417c565b60405180910390fd5b60026000556001600160a01b038516620007245760405162461bcd60e51b8152600401620006ed90620040ab565b6000620007318962001aaa565b9050600080620007418362001abd565b9150915080620007a05760405162461bcd60e51b8152602060048201526024808201527f4661696c656420746f206578747261637420636861696e49442066726f6d2064604482015263656e6f6d60e01b6064820152608401620006ed565b600082848c8c8c8c8c8c8c604051602001620007c59998979695949392919062003c79565b6040516020818303038152906040528051906020012090506000620007ee848884893362001b4e565b90508015620009eb5760405163130d191f60e11b8152309063261a323e906200081c90889060040162003e84565b60206040518083038186803b1580156200083557600080fd5b505afa1580156200084a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000870919062003850565b6200088d576200088d8562000887878f8f62001b6d565b62001c0c565b60405163a2cc698160e01b8152600090309063a2cc698190620008b590899060040162003e84565b60206040518083038186803b158015620008ce57600080fd5b505afa158015620008e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000909919062003711565b90506001600160a01b038116620009745760405162461bcd60e51b815260206004820152602860248201527f74686520766f756368657220666f72207468652064656e6f6d20646f6573206e6044820152671bdd08195e1a5cdd60c21b6064820152608401620006ed565b62000982818c8c8c62001e36565b6200098d8562001ef2565b6000600660008781526020019081526020016000205490507f9b5e85947adbfffa61d52bc536966418240a4d92744deb02c50f02d031419c91878d848e8c86604051620009e09695949392919062003edb565b60405180910390a150505b505060016000555050505050505050505050565b6010818154811062000a1057600080fd5b90600052602060002001600091509050805462000a2d90620043c6565b80601f016020809104026020016040519081016040528092919081815260200182805462000a5b90620043c6565b801562000aac5780601f1062000a805761010080835404028352916020019162000aac565b820191906000526020600020905b81548152906001019060200180831162000a8e57829003601f168201915b505050505081565b600e6020526000908152604090208054819062000ad190620043c6565b80601f016020809104026020016040519081016040528092919081815260200182805462000aff90620043c6565b801562000b505780601f1062000b245761010080835404028352916020019162000b50565b820191906000526020600020905b81548152906001019060200180831162000b3257829003601f168201915b5050506001909301549192505060ff1682565b6002600054141562000b895760405162461bcd60e51b8152600401620006ed906200417c565b60026000556001600160a01b03841662000bb75760405162461bcd60e51b8152600401620006ed90620040ab565b600062000bc48662001aaa565b905060008062000bd48362001f1b565b915091508062000c3d5760405162461bcd60e51b815260206004820152602d60248201527f4661696c656420746f206578747261637420636f6e747261637420616464726560448201526c73732066726f6d2064656e6f6d60981b6064820152608401620006ed565b60008984888a898960405160200162000c5c9695949392919062003d16565b604051602081830303815290604052805190602001209050600062000c858b8884893362001f9c565b9050801562000da0576040516323b872dd60e01b81526001600160a01b038516906323b872dd9062000cc09030908d908d9060040162003d6c565b600060405180830381600087803b15801562000cdb57600080fd5b505af192505050801562000ced575060015b62000d4157886001600160a01b0316846001600160a01b03167f8a89b1afdb3357cad96ac121522e1a8403d435b7b278a844e1002cb17c58522c8a60405162000d3891815260200190565b60405180910390a35b62000d4c8b62001fb1565b60008b815260046020526040908190205490517ff8a9006f96df65bd7b661f7c867ef002bd7c6efcae464f83b84095af188497dd9062000d969088908d908d908c90879062004043565b60405180910390a1505b50506001600055505050505050505050565b6002600054141562000dd85760405162461bcd60e51b8152600401620006ed906200417c565b60026000556001600160a01b03821662000e065760405162461bcd60e51b8152600401620006ed90620040ab565b6040516375ed4cb160e11b81526001600160a01b0384166004820152600090309063ebda99629060240160006040518083038186803b15801562000e4957600080fd5b505afa15801562000e5e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000e889190810190620038a6565b905080516000141562000ef65760405162461bcd60e51b815260206004820152602f60248201527f6661696c656420746f206c6f6f6b75702064656e6f6d20666f7220746865207660448201526e1bdd58da195c8818dbdb9d1c9858dd608a1b6064820152608401620006ed565b60405163130d191f60e11b8152309063261a323e9062000f1b90849060040162003e84565b60206040518083038186803b15801562000f3457600080fd5b505afa15801562000f49573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f6f919062003850565b62000fbd5760405162461bcd60e51b815260206004820152601f60248201527f566f756368657220636f6e747261637420646f6573206e6f74206578697374006044820152606401620006ed565b3362000fcb85828562001fd2565b60008062000fd98462001abd565b91509150806200103f5760405162461bcd60e51b815260206004820152602a60248201527f4661696c656420746f206578747261637420746172676574436861696e49442060448201526966726f6d2064656e6f6d60b01b6064820152608401620006ed565b6200104a826200203f565b600082815260056020526040908190205490517fb097dcf0d8777f11a1ca4b2510f3df57029b1d2f8ce89a94ad11d4ca61df056e906200109490879087908b908b90879062003e99565b60405180910390a1600260009054906101000a90046001600160a01b03166001600160a01b0316639bbb690a6040518163ffffffff1660e01b815260040160206040518083038186803b158015620010eb57600080fd5b505afa15801562001100573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001126919062003a28565b341015620011485760405162461bcd60e51b8152600401620006ed90620040e2565b62001153836200208a565b50506001600055505050505050565b600080620011708362001aaa565b90506000600d8260405162001186919062003ba2565b908152604080516020928190038301812081830190925290546001600160a01b0381168252600160a01b900460ff16158015928201929092529150620011ce57519392505050565b5060009392505050565b6060806000600154461490506000600260009054906101000a90046001600160a01b03166001600160a01b031663a7464b126040518163ffffffff1660e01b815260040160206040518083038186803b1580156200123557600080fd5b505afa1580156200124a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001270919062003a28565b600254604051632f2c13b560e01b81526004810189905291925060009182916001600160a01b031690632f2c13b590602401604080518083038186803b158015620012ba57600080fd5b505afa158015620012cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012f5919062003a8f565b9150915060008180156200131457506200131088856200251c565b8310155b801562001338575062001335846200132e8a600162002531565b906200251c565b83105b9050848015620013455750805b15620013f65760006200135a89600162002531565b6002546040516343f27e4560e01b8152600481018d9052602481018390529192506001600160a01b0316906343f27e459060440160006040518083038186803b158015620013a757600080fd5b505afa158015620013bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620013e6919081019062003777565b975097505050505050506200148b565b6002546040516343f27e4560e01b8152600481018b9052602481018a90526001600160a01b03909116906343f27e459060440160006040518083038186803b1580156200144257600080fd5b505afa15801562001457573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001481919081019062003777565b9650965050505050505b9250929050565b60026000541415620014b85760405162461bcd60e51b8152600401620006ed906200417c565b6002600055620014ca8385846200253f565b620015185760405162461bcd60e51b815260206004820181905260248201527f6c6f636b20746f6b656e732073616e69747920636865636b73206661696c65646044820152606401620006ed565b6040516323b872dd60e01b815283906001600160a01b038216906323b872dd906200154c9033903090879060040162003d6c565b600060405180830381600087803b1580156200156757600080fd5b505af11580156200157c573d6000803e3d6000fd5b50506040516331a9108f60e11b815260048101859052600092506001600160a01b0384169150636352211e9060240160206040518083038186803b158015620015c457600080fd5b505afa158015620015d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015ff919062003711565b90506001600160a01b0381163014620016765760405162461bcd60e51b815260206004820152603260248201527f4661696c656420746f207472616e7366657220544e5437323120746f6b656e7360448201527120746f2074686520746f6b656e2062616e6b60701b6064820152608401620006ed565b506000620016b6466040518060400160405280600381526020016237323160e81b815250620016b0886001600160a01b031660146200272e565b620028e7565b9050620016c3866200292b565b600086815260036020526040902054620016dd8662002976565b15620018a1577f4f9f4d5de31a3b62319d89542b16a804341d645cf6f3ddf2e28a03f7d227cb0b8233898888886001600160a01b03166306fdde036040518163ffffffff1660e01b815260040160006040518083038186803b1580156200174357600080fd5b505afa15801562001758573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620017829190810190620038a6565b896001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015620017bc57600080fd5b505afa158015620017d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620017fb9190810190620038a6565b60405163c87b56dd60e01b8152600481018d90526001600160a01b038c169063c87b56dd9060240160006040518083038186803b1580156200183c57600080fd5b505afa15801562001851573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200187b9190810190620038a6565b89604051620018939998979695949392919062003f25565b60405180910390a1620018e5565b7f4f9f4d5de31a3b62319d89542b16a804341d645cf6f3ddf2e28a03f7d227cb0b823389888886604051620018dc9695949392919062003fba565b60405180910390a15b600260009054906101000a90046001600160a01b03166001600160a01b0316639bbb690a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200193457600080fd5b505afa15801562001949573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200196f919062003a28565b341015620019915760405162461bcd60e51b8152600401620006ed90620040e2565b6200199c876200208a565b505060016000555050505050565b6001600160a01b0381166000908152600e60205260408082208151808301909252805460609392919082908290620019e290620043c6565b80601f016020809104026020016040519081016040528092919081815260200182805462001a1090620043c6565b801562001a615780601f1062001a355761010080835404028352916020019162001a61565b820191906000526020600020905b81548152906001019060200180831162001a4357829003601f168201915b50505091835250506001919091015460ff1615156020918201528101519091501562001a8e575192915050565b5050604080516020810190915260008152919050565b50919050565b606062001ab782620029b9565b92915050565b60008060008062001ad585602f60f81b600162002a3f565b915091508062001aec575060009485945092505050565b60008062001afd8760008662002adb565b915091508062001b165750600096879650945050505050565b60008062001b248462002bfd565b915091508062001b3f57506000988998509650505050505050565b50976001975095505050505050565b600062001b6386868686866009600b62002ce5565b9695505050505050565b60008030905060008460405160200162001b88919062003bc0565b604051602081830303815290604052905060008460405160200162001bae919062003c4e565b604051602081830303815290604052905060008388848460405162001bd39062003554565b62001be2949392919062003d90565b604051809103906000f08015801562001bff573d6000803e3d6000fd5b5098975050505050505050565b600062001c198362001aaa565b60405163130d191f60e11b8152909150309063261a323e9062001c4190849060040162003e84565b60206040518083038186803b15801562001c5a57600080fd5b505afa15801562001c6f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c95919062003850565b1562001cef5760405162461bcd60e51b815260206004820152602260248201527f616e20766f756368657220636f6e747261637420616c72656164792065786973604482015261747360f01b6064820152608401620006ed565b6040805180820182526001600160a01b0384168152600160208201529051600d9062001d1d90849062003ba2565b90815260408051918290036020908101832084518154958301511515600160a01b026001600160a81b03199096166001600160a01b039182161795909517905582820182528483526001838201529285166000908152600e845220815180519293919262001d8f928492019062003562565b506020918201516001918201805460ff1916911515919091179055600f80548083019091557f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319166001600160a01b038616179055601080549182018155600052825162001e30927f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6729092019184019062003562565b50505050565b6040516334ff261960e21b815284906001600160a01b0382169063d3fc98649062001e6a9087908790879060040162003de0565b600060405180830381600087803b15801562001e8557600080fd5b505af192505050801562001e97575060015b62001eeb57836001600160a01b0316816001600160a01b03167f41c63a5df99b10ef03c84c20f31c65445d851a9d493b400a66ef9121109a8eaa8560405162001ee291815260200190565b60405180910390a35b5050505050565b600081815260066020526040812080546001929062001f1390849062004264565b909155505050565b60008060008062001f3385602f60f81b600262002a3f565b915091508062001f4a575060009485945092505050565b60008062001f678762001f5f86600162004264565b895162002adb565b915091508062001f805750600096879650945050505050565b600062001f8d8362003198565b98600198509650505050505050565b600062001b638686868686600a600c62002ce5565b600081815260046020526040812080546001929062001f1390849062004264565b604051632770a7eb60e21b81526001600160a01b03838116600483015260248201839052849190821690639dc29fac90604401600060405180830381600087803b1580156200202057600080fd5b505af115801562002035573d6000803e3d6000fd5b5050505050505050565b60008181526005602052604081208054600192906200206090849062004264565b90915550506000908152600860209081526040808320600583528184205484529091529020439055565b60006200209782620033b3565b90506000600260009054906101000a90046001600160a01b03166001600160a01b0316639bbb690a6040518163ffffffff1660e01b815260040160206040518083038186803b158015620020ea57600080fd5b505afa158015620020ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002125919062003a28565b9050806200213257505050565b6002546040805163dba9de6b60e01b8152815160009384936001600160a01b039091169263dba9de6b9260048083019392829003018186803b1580156200217857600080fd5b505afa1580156200218d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021b3919062003a8f565b9150915080620021d75760405162461bcd60e51b8152600401620006ed906200414d565b600080620021e68685620011d8565b8151919350915080620021fd575050505050505050565b80825114620022615760405162461bcd60e51b815260206004820152602960248201527f76616c696461746f7220616e6420736861726520616d6f756e7420636f756e74604482015268040dad2e6dac2e8c6d60bb1b6064820152608401620006ed565b6000805b82811015620022b6576200229f8482815181106200228757620022876200445e565b6020026020010151836200253190919063ffffffff16565b915080620022ad81620043fd565b91505062002265565b5080620022c857505050505050505050565b8660005b838110156200242357600062002314846200230d888581518110620022f557620022f56200445e565b60200260200101518d6200251c90919063ffffffff16565b90620033d0565b90506200234f8783815181106200232f576200232f6200445e565b60200260200101516001600160a01b03166001600160a01b03163b151590565b6200240d578682815181106200236957620023696200445e565b60200260200101516001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050620023fe57868281518110620023b257620023b26200445e565b60200260200101516001600160a01b03167f562a1007af95860758404d928a251ad8b0062ac50058db9f82dab3fe379f488582604051620023f591815260200190565b60405180910390a25b6200240a8382620033de565b92505b50806200241a81620043fd565b915050620022cc565b506200244985620024366001866200433d565b815181106200232f576200232f6200445e565b6200251057846200245c6001856200433d565b815181106200246f576200246f6200445e565b60200260200101516001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050620025105784620024b16001856200433d565b81518110620024c457620024c46200445e565b60200260200101516001600160a01b03167f562a1007af95860758404d928a251ad8b0062ac50058db9f82dab3fe379f4885826040516200250791815260200190565b60405180910390a25b50505050505050505050565b60006200252a8284620042f0565b9392505050565b60006200252a828462004264565b60006001600160a01b038416620025b75760405162461bcd60e51b815260206004820152603560248201527f736f7572636520636861696e20746f6b656e20616464726573732063616e6e6f6044820152747420626520746865207a65726f206164647265737360581b6064820152608401620006ed565b46831415620026095760405162461bcd60e51b815260206004820152601d60248201527f63616e6e6f742073656e6420746f207468652073616d6520636861696e0000006044820152606401620006ed565b6001600160a01b038216620026325760405162461bcd60e51b8152600401620006ed90620040ab565b600154461415801562002646575060015483145b80620026da575060015446148015620026da57506002546040516343b71f0560e01b8152600481018590526001600160a01b03909116906343b71f059060240160206040518083038186803b1580156200269f57600080fd5b505afa158015620026b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620026da919062003850565b620027245760405162461bcd60e51b81526020600482015260196024820152781b9bdd0818481d985b1a59081d185c99d95d10da185a5b9251603a1b6044820152606401620006ed565b5060019392505050565b606060006200273f836002620042f0565b6200274c90600262004264565b6001600160401b0381111562002766576200276662004474565b6040519080825280601f01601f19166020018201604052801562002791576020820181803683370190505b509050600360fc1b81600081518110620027af57620027af6200445e565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110620027e157620027e16200445e565b60200101906001600160f81b031916908160001a905350600062002807846002620042f0565b6200281490600162004264565b90505b600181111562002896576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106200284c576200284c6200445e565b1a60f81b8282815181106200286557620028656200445e565b60200101906001600160f81b031916908160001a90535060049490941c936200288e81620043ac565b905062002817565b5083156200252a5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401620006ed565b606062002923620028f885620033ec565b84846040516020016200290e9392919062003bee565b60405160208183030381529060405262001aaa565b949350505050565b60008181526003602052604081208054600192906200294c90849062004264565b90915550506000908152600760209081526040808320600383528184205484529091529020439055565b6040805160048152602481019091526020810180516001600160e01b03166306fdde0360e01b178152815160009283929091839182919082885af1949350505050565b60608160005b815181101562002a3857620029f7828281518110620029e257620029e26200445e565b01602001516001600160f81b03191662003501565b82828151811062002a0c5762002a0c6200445e565b60200101906001600160f81b031916908160001a9053508062002a2f81620043fd565b915050620029bf565b5092915050565b82516000908190859082805b8281101562002ac757876001600160f81b03191684828151811062002a745762002a746200445e565b01602001516001600160f81b031916141562002ab25762002a9760018362004264565b91508682141562002ab25794506001935062002ad392505050565b8062002abe81620043fd565b91505062002a4b565b50600080945094505050505b935093915050565b82516060906000908484101562002b075750506040805160208101909152600080825290915062002ad3565b8084111562002b2b5750506040805160208101909152600080825290915062002ad3565b85600062002b3a8688620033de565b6001600160401b0381111562002b545762002b5462004474565b6040519080825280601f01601f19166020018201604052801562002b7f576020820181803683370190505b509050865b8681101562001b3f5782818151811062002ba25762002ba26200445e565b01602001516001600160f81b0319168262002bbe838b620033de565b8151811062002bd15762002bd16200445e565b60200101906001600160f81b031916908160001a9053508062002bf481620043fd565b91505062002b84565b80516000908190839082805b8281101562002cd857603084828151811062002c295762002c296200445e565b016020015160f81c1080159062002c5d5750603984828151811062002c525762002c526200445e565b016020015160f81c11155b1562002cb45762002c7082600a6200251c565b915062002cac603085838151811062002c8d5762002c8d6200445e565b016020015162002ca1919060f81c62004357565b839060ff1662002531565b915062002cc3565b50600096879650945050505050565b8062002ccf81620043fd565b91505062002c09565b5095600195509350505050565b6000806000600260009054906101000a90046001600160a01b03166001600160a01b031663dba9de6b6040518163ffffffff1660e01b8152600401604080518083038186803b15801562002d3857600080fd5b505afa15801562002d4d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002d73919062003a8f565b915091508062002d975760405162461bcd60e51b8152600401620006ed906200414d565b600282108062002db3575062002daf826002620033de565b8910155b62002df35760405162461bcd60e51b815260206004820152600f60248201526e111e5b985cdd1e481d1bdbc81bdb19608a1b6044820152606401620006ed565b505060015488148062002e8157506002546040516343b71f0560e01b8152600481018a90526001600160a01b03909116906343b71f059060240160206040518083038186803b15801562002e4657600080fd5b505afa15801562002e5b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002e81919062003850565b62002ec15760405162461bcd60e51b815260206004820152600f60248201526e125b9d985b1a590818da185a5b9251608a1b6044820152606401620006ed565b60008881526020849052604090205462002edd90600162004264565b851462002eed575060006200318d565b600088815260208381526040808320898452909152812060015460609081908c9081141562002f195750465b62002f25818d620011d8565b9350915060005b8251811015620030a257896001600160a01b031683828151811062002f555762002f556200445e565b60200260200101516001600160a01b03161462002f72576200308d565b6001955060005b60018601548110156200301c5785600101818154811062002f9e5762002f9e6200445e565b6000918252602090912001546001600160a01b038c811691161415620030075760405162461bcd60e51b815260206004820152601c60248201527f546869732076616c696461746f7220616c726561647920766f746564000000006044820152606401620006ed565b806200301381620043fd565b91505062002f79565b508c85556001808601805491820181556000908152602090200180546001600160a01b0319166001600160a01b038c16179055835162003087908590839081106200306b576200306b6200445e565b602002602001015186600201546200253190919063ffffffff16565b60028601555b806200309981620043fd565b91505062002f2c565b50505082620030e65760405162461bcd60e51b815260206004820152600f60248201526e2737ba1030903b30b634b230ba37b960891b6044820152606401620006ed565b6000805b825181101562003124576200310d8382815181106200228757620022876200445e565b9150806200311b81620043fd565b915050620030ea565b50620031328160026200251c565b6002840154620031449060036200251c565b10620031845760008c8152602088905260409020546200316690600162004264565b60008d81526020899052604090205550600193506200318d92505050565b60009450505050505b979650505050505050565b60008181808060025b602a811015620033a857620031b961010085620042be565b9350848181518110620031d057620031d06200445e565b016020015160f81c925084620031e882600162004264565b81518110620031fb57620031fb6200445e565b016020015160f81c915060616001600160a01b038416108015906200322a57506066836001600160a01b031611155b1562003245576200323d60578462004312565b9250620032b8565b6041836001600160a01b0316101580156200326a57506046836001600160a01b031611155b156200327d576200323d60378462004312565b6030836001600160a01b031610158015620032a257506039836001600160a01b031611155b15620032b857620032b560308462004312565b92505b6061826001600160a01b031610158015620032dd57506066826001600160a01b031611155b15620032f857620032f060578362004312565b91506200336b565b6041826001600160a01b0316101580156200331d57506046826001600160a01b031611155b156200333057620032f060378362004312565b6030826001600160a01b0316101580156200335557506039826001600160a01b031611155b156200336b576200336860308362004312565b91505b8162003379846010620042be565b62003385919062004236565b62003391908562004236565b9350620033a060028262004264565b9050620031a1565b509195945050505050565b600080600154831415620033c957504662001ab7565b5090919050565b60006200252a8284620042a7565b60006200252a82846200433d565b606081620034115750506040805180820190915260018152600360fc1b602082015290565b8160005b81156200344157806200342881620043fd565b9150620034399050600a83620042a7565b915062003415565b6000816001600160401b038111156200345e576200345e62004474565b6040519080825280601f01601f19166020018201604052801562003489576020820181803683370190505b5090505b84156200292357620034a16001836200433d565b9150620034b0600a866200441b565b620034bd90603062004264565b60f81b818381518110620034d557620034d56200445e565b60200101906001600160f81b031916908160001a905350620034f9600a86620042a7565b94506200348d565b6000604160f81b6001600160f81b0319831610801590620035305750602d60f91b6001600160f81b0319831611155b1562003550576200354760f883901c60206200427f565b60f81b92915050565b5090565b611a6280620044a483390190565b8280546200357090620043c6565b90600052602060002090601f016020900481019282620035945760008555620035df565b82601f10620035af57805160ff1916838001178555620035df565b82800160010185558215620035df579182015b82811115620035df578251825591602001919060010190620035c2565b50620035509291505b80821115620035505760008155600101620035e8565b80356200360b816200448a565b919050565b600082601f8301126200362257600080fd5b815160206200363b6200363583620041e6565b620041b3565b80838252828201915082860187848660051b89010111156200365c57600080fd5b60005b858110156200367d578151845292840192908401906001016200365f565b5090979650505050505050565b805180151581146200360b57600080fd5b600082601f830112620036ad57600080fd5b8135620036be62003635826200420c565b818152846020838601011115620036d457600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156200370457600080fd5b81356200252a816200448a565b6000602082840312156200372457600080fd5b81516200252a816200448a565b6000806000606084860312156200374757600080fd5b833562003754816200448a565b9250602084013562003766816200448a565b929592945050506040919091013590565b600080604083850312156200378b57600080fd5b82516001600160401b0380821115620037a357600080fd5b818501915085601f830112620037b857600080fd5b81516020620037cb6200363583620041e6565b8083825282820191508286018a848660051b8901011115620037ec57600080fd5b600096505b848710156200381c57805162003807816200448a565b835260019690960195918301918301620037f1565b50918801519196509093505050808211156200383757600080fd5b50620038468582860162003610565b9150509250929050565b6000602082840312156200386357600080fd5b6200252a826200368a565b6000602082840312156200388157600080fd5b81356001600160401b038111156200389857600080fd5b62002923848285016200369b565b600060208284031215620038b957600080fd5b81516001600160401b03811115620038d057600080fd5b8201601f81018413620038e257600080fd5b8051620038f362003635826200420c565b8181528560208385010111156200390957600080fd5b6200391c8260208301602086016200437d565b95945050505050565b600080600080600080600080610100898b0312156200394357600080fd5b88356001600160401b03808211156200395b57600080fd5b620039698c838d016200369b565b995060208b01359150808211156200398057600080fd5b6200398e8c838d016200369b565b985060408b0135915080821115620039a557600080fd5b620039b38c838d016200369b565b9750620039c360608c01620035fe565b965060808b0135955060a08b0135915080821115620039e157600080fd5b50620039f08b828c016200369b565b93505060c0890135915060e089013590509295985092959890939650565b60006020828403121562003a2157600080fd5b5035919050565b60006020828403121562003a3b57600080fd5b5051919050565b6000806000806080858703121562003a5957600080fd5b84359350602085013562003a6d816200448a565b9250604085013562003a7f816200448a565b9396929550929360600135925050565b6000806040838503121562003aa357600080fd5b8251915062003ab5602084016200368a565b90509250929050565b6000806040838503121562003ad257600080fd5b50508035926020909101359150565b60008060008060008060c0878903121562003afb57600080fd5b8635955060208701356001600160401b0381111562003b1957600080fd5b62003b2789828a016200369b565b955050604087013562003b3a816200448a565b959894975094956060810135955060808101359460a0909101359350915050565b6000815180845262003b758160208601602086016200437d565b601f01601f19169290920160200192915050565b6006815265544e5437323160d01b602082015260400190565b6000825162003bb68184602087016200437d565b9190910192915050565b6000825162003bd48184602087016200437d565b67102b37bab1b432b960c11b920191825250600801919050565b6000845162003c028184602089016200437d565b8083019050602f60f81b808252855162003c24816001850160208a016200437d565b6001920191820152835162003c418160028401602088016200437d565b0160020195945050505050565b603b60f91b81526000825162003c6c8160018501602087016200437d565b9190910160010192915050565b898152600060208a5162003c9381838601848f016200437d565b8a519084019062003caa81848401858f016200437d565b8a5191019062003cc081848401858e016200437d565b8082019150506bffffffffffffffffffffffff198960601b1682820152876034820152865162003cf78160548401858b016200437d565b0160548101959095525050506074820152609401979650505050505050565b8681526000865162003d30816020850160208b016200437d565b602092019182019590955260609390931b6bffffffffffffffffffffffff19166040840152605483019190915260748201526094019392505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b038516815260806020820181905260009062003db69083018662003b5b565b828103604084015262003dca818662003b5b565b905082810360608401526200318d818562003b5b565b60018060a01b03841681528260208201526060604082015260006200391c606083018462003b5b565b604080825283519082018190526000906020906060840190828701845b8281101562003e4d5781516001600160a01b03168452928401929084019060010162003e26565b5050508381038285015284518082528583019183019060005b818110156200367d5783518352928401929184019160010162003e66565b6020815260006200252a602083018462003b5b565b60a08152600062003eae60a083018862003b5b565b6001600160a01b039687166020840152949095166040820152606081019290925260809091015292915050565b60c08152600062003ef060c083018962003b5b565b6001600160a01b0397881660208401529590961660408201526060810193909352608083019190915260a09091015292915050565b600061012080835262003f3b8184018d62003b5b565b6001600160a01b038c81166020860152604085018c90528a1660608501526080840189905283810360a0850152905062003f76818862003b5b565b905082810360c084015262003f8c818762003b5b565b905082810360e084015262003fa2818662003b5b565b915050826101008301529a9950505050505050505050565b600061012080835262003fd08184018a62003b5b565b6001600160a01b03898116602086015260408501899052871660608501526080840186905283810360a085015290506200400a8162003b89565b905082810360c08401526200401f8162003b89565b83810360e08501526000815261010090930193909352506020019695505050505050565b60a0815260006200405860a083018862003b5b565b6001600160a01b039690961660208301525060408101939093526060830191909152608090910152919050565b6040815260006200409a604083018562003b5b565b905082151560208301529392505050565b6020808252601b908201527f63616e6e6f742073656e6420746f207a65726f20616464726573730000000000604082015260600190565b60208082526045908201527f6e6f7420656e6f75676820544675656c20286d73672e76616c75652920746f2060408201527f636f766572207468652063726f73732d636861696e207472616e73616374696f6060820152646e2066656560d81b608082015260a00190565b6020808252601590820152746661696c656420746f206765742064796e6173747960581b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b604051601f8201601f191681016001600160401b0381118282101715620041de57620041de62004474565b604052919050565b60006001600160401b0382111562004202576200420262004474565b5060051b60200190565b60006001600160401b0382111562004228576200422862004474565b50601f01601f191660200190565b60006001600160a01b038281168482168083038211156200425b576200425b62004432565b01949350505050565b600082198211156200427a576200427a62004432565b500190565b600060ff821660ff84168060ff038211156200429f576200429f62004432565b019392505050565b600082620042b957620042b962004448565b500490565b60006001600160a01b0382811684821681151582840482111615620042e757620042e762004432565b02949350505050565b60008160001904831182151516156200430d576200430d62004432565b500290565b60006001600160a01b038381169083168181101562004335576200433562004432565b039392505050565b60008282101562004352576200435262004432565b500390565b600060ff821660ff84168082101562004374576200437462004432565b90039392505050565b60005b838110156200439a57818101518382015260200162004380565b8381111562001e305750506000910152565b600081620043be57620043be62004432565b506000190190565b600181811c90821680620043db57607f821691505b6020821081141562001aa457634e487b7160e01b600052602260045260246000fd5b600060001982141562004414576200441462004432565b5060010190565b6000826200442d576200442d62004448565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114620044a057600080fd5b5056fe60806040523480156200001157600080fd5b5060405162001a6238038062001a6283398101604081905262000034916200020c565b83828281600090805190602001906200004f929190620000af565b50805162000065906001906020840190620000af565b5050600680546001600160a01b0319166001600160a01b0393909316929092179091555082516200009e906007906020860190620000af565b505060006008555062000311915050565b828054620000bd90620002be565b90600052602060002090601f016020900481019282620000e157600085556200012c565b82601f10620000fc57805160ff19168380011785556200012c565b828001600101855582156200012c579182015b828111156200012c5782518255916020019190600101906200010f565b506200013a9291506200013e565b5090565b5b808211156200013a57600081556001016200013f565b600082601f8301126200016757600080fd5b81516001600160401b0380821115620001845762000184620002fb565b604051601f8301601f19908116603f01168101908282118183101715620001af57620001af620002fb565b81604052838152602092508683858801011115620001cc57600080fd5b600091505b83821015620001f05785820183015181830184015290820190620001d1565b83821115620002025760008385830101525b9695505050505050565b600080600080608085870312156200022357600080fd5b84516001600160a01b03811681146200023b57600080fd5b60208601519094506001600160401b03808211156200025957600080fd5b620002678883890162000155565b945060408701519150808211156200027e57600080fd5b6200028c8883890162000155565b93506060870151915080821115620002a357600080fd5b50620002b28782880162000155565b91505092959194509250565b600181811c90821680620002d357607f821691505b60208210811415620002f557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61174180620003216000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063880cdc31116100ad578063b88d4fde11610071578063b88d4fde14610271578063c370b04214610284578063c87b56dd1461028c578063d3fc98641461029f578063e985e9c5146102b257600080fd5b8063880cdc311461021d5780638da5cb5b1461023057806395d89b41146102435780639dc29fac1461024b578063a22cb4651461025e57600080fd5b806323b872dd116100f457806323b872dd146101c057806342842e0e146101d3578063442890d5146101e65780636352211e146101f757806370a082311461020a57600080fd5b806301ffc9a71461013157806306fdde0314610159578063081812fc1461016e578063095ea7b31461019957806318160ddd146101ae575b600080fd5b61014461013f366004611475565b6102c5565b60405190151581526020015b60405180910390f35b610161610317565b6040516101509190611552565b61018161017c3660046114af565b6103a9565b6040516001600160a01b039091168152602001610150565b6101ac6101a73660046113e0565b610436565b005b6008545b604051908152602001610150565b6101ac6101ce3660046112ec565b610547565b6101ac6101e13660046112ec565b610578565b6006546001600160a01b0316610181565b6101816102053660046114af565b610593565b6101b2610218366004611297565b61060a565b6101ac61022b366004611297565b610691565b600654610181906001600160a01b031681565b610161610724565b6101ac6102593660046113e0565b610733565b6101ac61026c3660046113a4565b6108b7565b6101ac61027f366004611328565b6108c6565b6101616108fe565b61016161029a3660046114af565b61090d565b6101ac6102ad36600461140a565b6109af565b6101446102c03660046112b9565b610a20565b60006001600160e01b031982166380ac58cd60e01b14806102f657506001600160e01b03198216635b5e139f60e01b145b8061031157506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546103269061166e565b80601f01602080910402602001604051908101604052809291908181526020018280546103529061166e565b801561039f5780601f106103745761010080835404028352916020019161039f565b820191906000526020600020905b81548152906001019060200180831161038257829003601f168201915b5050505050905090565b60006103b482610a4e565b61041a5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b600061044182610593565b9050806001600160a01b0316836001600160a01b031614156104af5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610411565b336001600160a01b03821614806104cb57506104cb8133610a20565b6105385760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776044820152771b995c881b9bdc88185c1c1c9bdd995908199bdc88185b1b60421b6064820152608401610411565b6105428383610a6b565b505050565b6105513382610ad9565b61056d5760405162461bcd60e51b8152600401610411906115ee565b610542838383610ba3565b610542838383604051806020016040528060008152506108c6565b6000818152600260205260408120546001600160a01b0316806103115760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610411565b60006001600160a01b0382166106755760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610411565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b031633146106bb5760405162461bcd60e51b8152600401610411906115b7565b600654604080516001600160a01b03928316815291831660208301527fe2c7d1c4da37855e682bde14f17826d185497973b73fba7554daa6da467058d9910160405180910390a1600680546001600160a01b0319166001600160a01b0392909216919091179055565b6060600180546103269061166e565b6006546001600160a01b0316331461075d5760405162461bcd60e51b8152600401610411906115b7565b6000600854116107a25760405162461bcd60e51b815260206004820152601060248201526f3737903a37b5b2b7103a3790313ab93760811b6044820152606401610411565b60006107ad82610593565b9050826001600160a01b0316816001600160a01b0316146108065760405162461bcd60e51b815260206004820152601360248201527237b7363c9037bbb732b91031b0b710313ab93760691b6044820152606401610411565b6006546001600160a01b031661081c8184610ad9565b6108795760405162461bcd60e51b815260206004820152602860248201527f566f7563686572206f776e657220646964206e6f7420617070726f766520746f60448201526735b2b710313ab93760c11b6064820152608401610411565b61088283610d2d565b60008381526009602052604081206108999161112f565b6001600860008282546108ac9190611657565b909155505050505050565b6108c2338383610db6565b5050565b6108d03383610ad9565b6108ec5760405162461bcd60e51b8152600401610411906115ee565b6108f884848484610e81565b50505050565b6060600780546103269061166e565b600081815260096020526040902080546060919061092a9061166e565b80601f01602080910402602001604051908101604052809291908181526020018280546109569061166e565b80156109a35780601f10610978576101008083540402835291602001916109a3565b820191906000526020600020905b81548152906001019060200180831161098657829003601f168201915b50505050509050919050565b6006546001600160a01b031633146109d95760405162461bcd60e51b8152600401610411906115b7565b6109e38383610eb4565b60008281526009602090815260409091208251610a029284019061116c565b50600160086000828254610a16919061163f565b9091555050505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6000908152600260205260409020546001600160a01b0316151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610aa082610593565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610ae482610a4e565b610b455760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610411565b6000610b5083610593565b9050806001600160a01b0316846001600160a01b03161480610b775750610b778185610a20565b80610b9b5750836001600160a01b0316610b90846103a9565b6001600160a01b0316145b949350505050565b826001600160a01b0316610bb682610593565b6001600160a01b031614610c1a5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610411565b6001600160a01b038216610c7c5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610411565b610c87600082610a6b565b6001600160a01b0383166000908152600360205260408120805460019290610cb0908490611657565b90915550506001600160a01b0382166000908152600360205260408120805460019290610cde90849061163f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716916000805160206116ec83398151915291a4505050565b6000610d3882610593565b9050610d45600083610a6b565b6001600160a01b0381166000908152600360205260408120805460019290610d6e908490611657565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416906000805160206116ec833981519152908390a45050565b816001600160a01b0316836001600160a01b03161415610e145760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b6044820152606401610411565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b610e8c848484610ba3565b610e9884848484610ece565b6108f85760405162461bcd60e51b815260040161041190611565565b6108c2828260405180602001604052806000815250610fdb565b60006001600160a01b0384163b15610fd057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290610f12903390899088908890600401611515565b602060405180830381600087803b158015610f2c57600080fd5b505af1925050508015610f5c575060408051601f3d908101601f19168201909252610f5991810190611492565b60015b610fb6573d808015610f8a576040519150601f19603f3d011682016040523d82523d6000602084013e610f8f565b606091505b508051610fae5760405162461bcd60e51b815260040161041190611565565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610b9b565b506001949350505050565b610fe5838361100e565b610ff26000848484610ece565b6105425760405162461bcd60e51b815260040161041190611565565b6001600160a01b0382166110645760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610411565b61106d81610a4e565b156110ba5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610411565b6001600160a01b03821660009081526003602052604081208054600192906110e390849061163f565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392906000805160206116ec833981519152908290a45050565b50805461113b9061166e565b6000825580601f1061114b575050565b601f01602090049060005260206000209081019061116991906111f0565b50565b8280546111789061166e565b90600052602060002090601f01602090048101928261119a57600085556111e0565b82601f106111b357805160ff19168380011785556111e0565b828001600101855582156111e0579182015b828111156111e05782518255916020019190600101906111c5565b506111ec9291506111f0565b5090565b5b808211156111ec57600081556001016111f1565b600067ffffffffffffffff80841115611220576112206116bf565b604051601f8501601f19908116603f01168101908282118183101715611248576112486116bf565b8160405280935085815286868601111561126157600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b038116811461129257600080fd5b919050565b6000602082840312156112a957600080fd5b6112b28261127b565b9392505050565b600080604083850312156112cc57600080fd5b6112d58361127b565b91506112e36020840161127b565b90509250929050565b60008060006060848603121561130157600080fd5b61130a8461127b565b92506113186020850161127b565b9150604084013590509250925092565b6000806000806080858703121561133e57600080fd5b6113478561127b565b93506113556020860161127b565b925060408501359150606085013567ffffffffffffffff81111561137857600080fd5b8501601f8101871361138957600080fd5b61139887823560208401611205565b91505092959194509250565b600080604083850312156113b757600080fd5b6113c08361127b565b9150602083013580151581146113d557600080fd5b809150509250929050565b600080604083850312156113f357600080fd5b6113fc8361127b565b946020939093013593505050565b60008060006060848603121561141f57600080fd5b6114288461127b565b925060208401359150604084013567ffffffffffffffff81111561144b57600080fd5b8401601f8101861361145c57600080fd5b61146b86823560208401611205565b9150509250925092565b60006020828403121561148757600080fd5b81356112b2816116d5565b6000602082840312156114a457600080fd5b81516112b2816116d5565b6000602082840312156114c157600080fd5b5035919050565b6000815180845260005b818110156114ee576020818501810151868301820152016114d2565b81811115611500576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611548908301846114c8565b9695505050505050565b6020815260006112b260208301846114c8565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601c908201527f6f6e6c79206f776e65722063616e206d616b65207468652063616c6c00000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b60008219821115611652576116526116a9565b500190565b600082821015611669576116696116a9565b500390565b600181811c9082168061168257607f821691505b602082108114156116a357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461116957600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122020c10a7a04aa490ee699f5e061b5817e73667f4af33ae8fac9f919f5990beb5d64736f6c63430008070033a2646970667358221220528a856f072ce218ac2575842b0cac74419cdad45fa7658f3a3dec9b40b4110964736f6c63430008070033",
}

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

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

// DeployTNT721TokenBank deploys a new Ethereum contract, binding an instance of TNT721TokenBank to it.
func DeployTNT721TokenBank(auth *bind.TransactOpts, backend bind.ContractBackend, mainchainID_ *big.Int, chainRegistrar_ common.Address) (common.Address, *types.Transaction, *TNT721TokenBank, error) {
	parsed, err := TNT721TokenBankMetaData.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(TNT721TokenBankBin), backend, mainchainID_, chainRegistrar_)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &TNT721TokenBank{TNT721TokenBankCaller: TNT721TokenBankCaller{contract: contract}, TNT721TokenBankTransactor: TNT721TokenBankTransactor{contract: contract}, TNT721TokenBankFilterer: TNT721TokenBankFilterer{contract: contract}}, nil
}

// TNT721TokenBank is an auto generated Go binding around an Ethereum contract.
type TNT721TokenBank struct {
	TNT721TokenBankCaller     // Read-only binding to the contract
	TNT721TokenBankTransactor // Write-only binding to the contract
	TNT721TokenBankFilterer   // Log filterer for contract events
}

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

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

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

// TNT721TokenBankSession is an auto generated Go binding around an Ethereum contract,
// with pre-set call and transact options.
type TNT721TokenBankSession struct {
	Contract     *TNT721TokenBank  // 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
}

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

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

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

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

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

// NewTNT721TokenBank creates a new instance of TNT721TokenBank, bound to a specific deployed contract.
func NewTNT721TokenBank(address common.Address, backend bind.ContractBackend) (*TNT721TokenBank, error) {
	contract, err := bindTNT721TokenBank(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &TNT721TokenBank{TNT721TokenBankCaller: TNT721TokenBankCaller{contract: contract}, TNT721TokenBankTransactor: TNT721TokenBankTransactor{contract: contract}, TNT721TokenBankFilterer: TNT721TokenBankFilterer{contract: contract}}, nil
}

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

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

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

// bindTNT721TokenBank binds a generic wrapper to an already deployed contract.
func bindTNT721TokenBank(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(TNT721TokenBankABI))
	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 (_TNT721TokenBank *TNT721TokenBankRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _TNT721TokenBank.Contract.TNT721TokenBankCaller.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 (_TNT721TokenBank *TNT721TokenBankRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _TNT721TokenBank.Contract.TNT721TokenBankTransactor.contract.Transfer(opts)
}

// Transact invokes the (paid) contract method with params as input values.
func (_TNT721TokenBank *TNT721TokenBankRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _TNT721TokenBank.Contract.TNT721TokenBankTransactor.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 (_TNT721TokenBank *TNT721TokenBankCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _TNT721TokenBank.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 (_TNT721TokenBank *TNT721TokenBankTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _TNT721TokenBank.Contract.contract.Transfer(opts)
}

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

// AllDenoms is a free data retrieval call binding the contract method 0x588b1408.
//
// Solidity: function allDenoms(uint256 ) view returns(string)
func (_TNT721TokenBank *TNT721TokenBankCaller) AllDenoms(opts *bind.CallOpts, arg0 *big.Int) (string, error) {
	var out []interface{}
	err := _TNT721TokenBank.contract.Call(opts, &out, "allDenoms", arg0)

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

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

	return out0, err

}

// AllDenoms is a free data retrieval call binding the contract method 0x588b1408.
//
// Solidity: function allDenoms(uint256 ) view returns(string)
func (_TNT721TokenBank *TNT721TokenBankSession) AllDenoms(arg0 *big.Int) (string, error) {
	return _TNT721TokenBank.Contract.AllDenoms(&_TNT721TokenBank.CallOpts, arg0)
}

// AllDenoms is a free data retrieval call binding the contract method 0x588b1408.
//
// Solidity: function allDenoms(uint256 ) view returns(string)
func (_TNT721TokenBank *TNT721TokenBankCallerSession) AllDenoms(arg0 *big.Int) (string, error) {
	return _TNT721TokenBank.Contract.AllDenoms(&_TNT721TokenBank.CallOpts, arg0)
}

// AllVouchers is a free data retrieval call binding the contract method 0x27ca4df1.
//
// Solidity: function allVouchers(uint256 ) view returns(address)
func (_TNT721TokenBank *TNT721TokenBankCaller) AllVouchers(opts *bind.CallOpts, arg0 *big.Int) (common.Address, error) {
	var out []interface{}
	err := _TNT721TokenBank.contract.Call(opts, &out, "allVouchers", arg0)

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

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

	return out0, err

}

// AllVouchers is a free data retrieval call binding the contract method 0x27ca4df1.
//
// Solidity: function allVouchers(uint256 ) view returns(address)
func (_TNT721TokenBank *TNT721TokenBankSession) AllVouchers(arg0 *big.Int) (common.Address, error) {
	return _TNT721TokenBank.Contract.AllVouchers(&_TNT721TokenBank.CallOpts, arg0)
}

// AllVouchers is a free data retrieval call binding the contract method 0x27ca4df1.
//
// Solidity: function allVouchers(uint256 ) view returns(address)
func (_TNT721TokenBank *TNT721TokenBankCallerSession) AllVouchers(arg0 *big.Int) (common.Address, error) {
	return _TNT721TokenBank.Contract.AllVouchers(&_TNT721TokenBank.CallOpts, arg0)
}

// DenomToVoucherLookup is a free data retrieval call binding the contract method 0x1527b14d.
//
// Solidity: function denomToVoucherLookup(string ) view returns(address contractAddress, bool exists)
func (_TNT721TokenBank *TNT721TokenBankCaller) DenomToVoucherLookup(opts *bind.CallOpts, arg0 string) (struct {
	ContractAddress common.Address
	Exists          bool
}, error) {
	var out []interface{}
	err := _TNT721TokenBank.contract.Call(opts, &out, "denomToVoucherLookup", arg0)

	outstruct := new(struct {
		ContractAddress common.Address
		Exists          bool
	})
	if err != nil {
		return *outstruct, err
	}

	outstruct.ContractAddress = *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
	outstruct.Exists = *abi.ConvertType(out[1], new(bool)).(*bool)

	return *outstruct, err

}

// DenomToVoucherLookup is a free data retrieval call binding the contract method 0x1527b14d.
//
// Solidity: function denomToVoucherLookup(string ) view returns(address contractAddress, bool exists)
func (_TNT721TokenBank *TNT721TokenBankSession) DenomToVoucherLookup(arg0 string) (struct {
	ContractAddress common.Address
	Exists          bool
}, error) {
	return _TNT721TokenBank.Contract.DenomToVoucherLookup(&_TNT721TokenBank.CallOpts, arg0)
}

// DenomToVoucherLookup is a free data retrieval call binding the contract method 0x1527b14d.
//
// Solidity: function denomToVoucherLookup(string ) view returns(address contractAddress, bool exists)
func (_TNT721TokenBank *TNT721TokenBankCallerSession) DenomToVoucherLookup(arg0 string) (struct {
	ContractAddress common.Address
	Exists          bool
}, error) {
	return _TNT721TokenBank.Contract.DenomToVoucherLookup(&_TNT721TokenBank.CallOpts, arg0)
}

// Exists is a free data retrieval call binding the contract method 0x261a323e.
//
// Solidity: function exists(string denom) view returns(bool)
func (_TNT721TokenBank *TNT721TokenBankCaller) Exists(opts *bind.CallOpts, denom string) (bool, error) {
	var out []interface{}
	err := _TNT721TokenBank.contract.Call(opts, &out, "exists", denom)

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

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

	return out0, err

}

// Exists is a free data retrieval call binding the contract method 0x261a323e.
//
// Solidity: function exists(string denom) view returns(bool)
func (_TNT721TokenBank *TNT721TokenBankSession) Exists(denom string) (bool, error) {
	return _TNT721TokenBank.Contract.Exists(&_TNT721TokenBank.CallOpts, denom)
}

// Exists is a free data retrieval call binding the contract method 0x261a323e.
//
// Solidity: function exists(string denom) view returns(bool)
func (_TNT721TokenBank *TNT721TokenBankCallerSession) Exists(denom string) (bool, error) {
	return _TNT721TokenBank.Contract.Exists(&_TNT721TokenBank.CallOpts, denom)
}

// Exists0 is a free data retrieval call binding the contract method 0xf6a3d24e.
//
// Solidity: function exists(address voucherAddress) view returns(bool)
func (_TNT721TokenBank *TNT721TokenBankCaller) Exists0(opts *bind.CallOpts, voucherAddress common.Address) (bool, error) {
	var out []interface{}
	err := _TNT721TokenBank.contract.Call(opts, &out, "exists0", voucherAddress)

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

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

	return out0, err

}

// Exists0 is a free data retrieval call binding the contract method 0xf6a3d24e.
//
// Solidity: function exists(address voucherAddress) view returns(bool)
func (_TNT721TokenBank *TNT721TokenBankSession) Exists0(voucherAddress common.Address) (bool, error) {
	return _TNT721TokenBank.Contract.Exists0(&_TNT721TokenBank.CallOpts, voucherAddress)
}

// Exists0 is a free data retrieval call binding the contract method 0xf6a3d24e.
//
// Solidity: function exists(address voucherAddress) view returns(bool)
func (_TNT721TokenBank *TNT721TokenBankCallerSession) Exists0(voucherAddress common.Address) (bool, error) {
	return _TNT721TokenBank.Contract.Exists0(&_TNT721TokenBank.CallOpts, voucherAddress)
}

// GetAdjustedValidatorSet is a free data retrieval call binding the contract method 0xaa861c15.
//
// Solidity: function getAdjustedValidatorSet(uint256 subchainID, uint256 dynasty) view returns(address[] validators, uint256[] shareAmounts)
func (_TNT721TokenBank *TNT721TokenBankCaller) GetAdjustedValidatorSet(opts *bind.CallOpts, subchainID *big.Int, dynasty *big.Int) (struct {
	Validators   []common.Address
	ShareAmounts []*big.Int
}, error) {
	var out []interface{}
	err := _TNT721TokenBank.contract.Call(opts, &out, "getAdjustedValidatorSet", subchainID, dynasty)

	outstruct := new(struct {
		Validators   []common.Address
		ShareAmounts []*big.Int
	})
	if err != nil {
		return *outstruct, err
	}

	outstruct.Validators = *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address)
	outstruct.ShareAmounts = *abi.ConvertType(out[1], new([]*big.Int)).(*[]*big.Int)

	return *outstruct, err

}

// GetAdjustedValidatorSet is a free data retrieval call binding the contract method 0xaa861c15.
//
// Solidity: function getAdjustedValidatorSet(uint256 subchainID, uint256 dynasty) view returns(address[] validators, uint256[] shareAmounts)
func (_TNT721TokenBank *TNT721TokenBankSession) GetAdjustedValidatorSet(subchainID *big.Int, dynasty *big.Int) (struct {
	Validators   []common.Address
	ShareAmounts []*big.Int
}, error) {
	return _TNT721TokenBank.Contract.GetAdjustedValidatorSet(&_TNT721TokenBank.CallOpts, subchainID, dynasty)
}

// GetAdjustedValidatorSet is a free data retrieval call binding the contract method 0xaa861c15.
//
// Solidity: function getAdjustedValidatorSet(uint256 subchainID, uint256 dynasty) view returns(address[] validators, uint256[] shareAmounts)
func (_TNT721TokenBank *TNT721TokenBankCallerSession) GetAdjustedValidatorSet(subchainID *big.Int, dynasty *big.Int) (struct {
	Validators   []common.Address
	ShareAmounts []*big.Int
}, error) {
	return _TNT721TokenBank.Contract.GetAdjustedValidatorSet(&_TNT721TokenBank.CallOpts, subchainID, dynasty)
}

// GetDenom is a free data retrieval call binding the contract method 0xebda9962.
//
// Solidity: function getDenom(address voucherContractAddr) view returns(string)
func (_TNT721TokenBank *TNT721TokenBankCaller) GetDenom(opts *bind.CallOpts, voucherContractAddr common.Address) (string, error) {
	var out []interface{}
	err := _TNT721TokenBank.contract.Call(opts, &out, "getDenom", voucherContractAddr)

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

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

	return out0, err

}

// GetDenom is a free data retrieval call binding the contract method 0xebda9962.
//
// Solidity: function getDenom(address voucherContractAddr) view returns(string)
func (_TNT721TokenBank *TNT721TokenBankSession) GetDenom(voucherContractAddr common.Address) (string, error) {
	return _TNT721TokenBank.Contract.GetDenom(&_TNT721TokenBank.CallOpts, voucherContractAddr)
}

// GetDenom is a free data retrieval call binding the contract method 0xebda9962.
//
// Solidity: function getDenom(address voucherContractAddr) view returns(string)
func (_TNT721TokenBank *TNT721TokenBankCallerSession) GetDenom(voucherContractAddr common.Address) (string, error) {
	return _TNT721TokenBank.Contract.GetDenom(&_TNT721TokenBank.CallOpts, voucherContractAddr)
}

// GetMaxProcessedTokenLockNonce is a free data retrieval call binding the contract method 0xf95627ac.
//
// Solidity: function getMaxProcessedTokenLockNonce(uint256 chainID) view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankCaller) GetMaxProcessedTokenLockNonce(opts *bind.CallOpts, chainID *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _TNT721TokenBank.contract.Call(opts, &out, "getMaxProcessedTokenLockNonce", chainID)

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

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

	return out0, err

}

// GetMaxProcessedTokenLockNonce is a free data retrieval call binding the contract method 0xf95627ac.
//
// Solidity: function getMaxProcessedTokenLockNonce(uint256 chainID) view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankSession) GetMaxProcessedTokenLockNonce(chainID *big.Int) (*big.Int, error) {
	return _TNT721TokenBank.Contract.GetMaxProcessedTokenLockNonce(&_TNT721TokenBank.CallOpts, chainID)
}

// GetMaxProcessedTokenLockNonce is a free data retrieval call binding the contract method 0xf95627ac.
//
// Solidity: function getMaxProcessedTokenLockNonce(uint256 chainID) view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankCallerSession) GetMaxProcessedTokenLockNonce(chainID *big.Int) (*big.Int, error) {
	return _TNT721TokenBank.Contract.GetMaxProcessedTokenLockNonce(&_TNT721TokenBank.CallOpts, chainID)
}

// GetMaxProcessedVoucherBurnNonce is a free data retrieval call binding the contract method 0x766f8fb0.
//
// Solidity: function getMaxProcessedVoucherBurnNonce(uint256 chainID) view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankCaller) GetMaxProcessedVoucherBurnNonce(opts *bind.CallOpts, chainID *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _TNT721TokenBank.contract.Call(opts, &out, "getMaxProcessedVoucherBurnNonce", chainID)

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

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

	return out0, err

}

// GetMaxProcessedVoucherBurnNonce is a free data retrieval call binding the contract method 0x766f8fb0.
//
// Solidity: function getMaxProcessedVoucherBurnNonce(uint256 chainID) view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankSession) GetMaxProcessedVoucherBurnNonce(chainID *big.Int) (*big.Int, error) {
	return _TNT721TokenBank.Contract.GetMaxProcessedVoucherBurnNonce(&_TNT721TokenBank.CallOpts, chainID)
}

// GetMaxProcessedVoucherBurnNonce is a free data retrieval call binding the contract method 0x766f8fb0.
//
// Solidity: function getMaxProcessedVoucherBurnNonce(uint256 chainID) view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankCallerSession) GetMaxProcessedVoucherBurnNonce(chainID *big.Int) (*big.Int, error) {
	return _TNT721TokenBank.Contract.GetMaxProcessedVoucherBurnNonce(&_TNT721TokenBank.CallOpts, chainID)
}

// GetTokenLockEventHeight is a free data retrieval call binding the contract method 0xdd17eb6d.
//
// Solidity: function getTokenLockEventHeight(uint256 chainID, uint256 eventNonce) view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankCaller) GetTokenLockEventHeight(opts *bind.CallOpts, chainID *big.Int, eventNonce *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _TNT721TokenBank.contract.Call(opts, &out, "getTokenLockEventHeight", chainID, eventNonce)

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

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

	return out0, err

}

// GetTokenLockEventHeight is a free data retrieval call binding the contract method 0xdd17eb6d.
//
// Solidity: function getTokenLockEventHeight(uint256 chainID, uint256 eventNonce) view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankSession) GetTokenLockEventHeight(chainID *big.Int, eventNonce *big.Int) (*big.Int, error) {
	return _TNT721TokenBank.Contract.GetTokenLockEventHeight(&_TNT721TokenBank.CallOpts, chainID, eventNonce)
}

// GetTokenLockEventHeight is a free data retrieval call binding the contract method 0xdd17eb6d.
//
// Solidity: function getTokenLockEventHeight(uint256 chainID, uint256 eventNonce) view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankCallerSession) GetTokenLockEventHeight(chainID *big.Int, eventNonce *big.Int) (*big.Int, error) {
	return _TNT721TokenBank.Contract.GetTokenLockEventHeight(&_TNT721TokenBank.CallOpts, chainID, eventNonce)
}

// GetVoucher is a free data retrieval call binding the contract method 0xa2cc6981.
//
// Solidity: function getVoucher(string denom) view returns(address)
func (_TNT721TokenBank *TNT721TokenBankCaller) GetVoucher(opts *bind.CallOpts, denom string) (common.Address, error) {
	var out []interface{}
	err := _TNT721TokenBank.contract.Call(opts, &out, "getVoucher", denom)

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

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

	return out0, err

}

// GetVoucher is a free data retrieval call binding the contract method 0xa2cc6981.
//
// Solidity: function getVoucher(string denom) view returns(address)
func (_TNT721TokenBank *TNT721TokenBankSession) GetVoucher(denom string) (common.Address, error) {
	return _TNT721TokenBank.Contract.GetVoucher(&_TNT721TokenBank.CallOpts, denom)
}

// GetVoucher is a free data retrieval call binding the contract method 0xa2cc6981.
//
// Solidity: function getVoucher(string denom) view returns(address)
func (_TNT721TokenBank *TNT721TokenBankCallerSession) GetVoucher(denom string) (common.Address, error) {
	return _TNT721TokenBank.Contract.GetVoucher(&_TNT721TokenBank.CallOpts, denom)
}

// GetVoucherBurnEventHeight is a free data retrieval call binding the contract method 0x6ac739b9.
//
// Solidity: function getVoucherBurnEventHeight(uint256 chainID, uint256 eventNonce) view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankCaller) GetVoucherBurnEventHeight(opts *bind.CallOpts, chainID *big.Int, eventNonce *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _TNT721TokenBank.contract.Call(opts, &out, "getVoucherBurnEventHeight", chainID, eventNonce)

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

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

	return out0, err

}

// GetVoucherBurnEventHeight is a free data retrieval call binding the contract method 0x6ac739b9.
//
// Solidity: function getVoucherBurnEventHeight(uint256 chainID, uint256 eventNonce) view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankSession) GetVoucherBurnEventHeight(chainID *big.Int, eventNonce *big.Int) (*big.Int, error) {
	return _TNT721TokenBank.Contract.GetVoucherBurnEventHeight(&_TNT721TokenBank.CallOpts, chainID, eventNonce)
}

// GetVoucherBurnEventHeight is a free data retrieval call binding the contract method 0x6ac739b9.
//
// Solidity: function getVoucherBurnEventHeight(uint256 chainID, uint256 eventNonce) view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankCallerSession) GetVoucherBurnEventHeight(chainID *big.Int, eventNonce *big.Int) (*big.Int, error) {
	return _TNT721TokenBank.Contract.GetVoucherBurnEventHeight(&_TNT721TokenBank.CallOpts, chainID, eventNonce)
}

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

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

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

	return out0, err

}

// MainchainID is a free data retrieval call binding the contract method 0x073b9502.
//
// Solidity: function mainchainID() view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankSession) MainchainID() (*big.Int, error) {
	return _TNT721TokenBank.Contract.MainchainID(&_TNT721TokenBank.CallOpts)
}

// MainchainID is a free data retrieval call binding the contract method 0x073b9502.
//
// Solidity: function mainchainID() view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankCallerSession) MainchainID() (*big.Int, error) {
	return _TNT721TokenBank.Contract.MainchainID(&_TNT721TokenBank.CallOpts)
}

// TokenLockNonceMap is a free data retrieval call binding the contract method 0x8883931e.
//
// Solidity: function tokenLockNonceMap(uint256 ) view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankCaller) TokenLockNonceMap(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _TNT721TokenBank.contract.Call(opts, &out, "tokenLockNonceMap", arg0)

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

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

	return out0, err

}

// TokenLockNonceMap is a free data retrieval call binding the contract method 0x8883931e.
//
// Solidity: function tokenLockNonceMap(uint256 ) view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankSession) TokenLockNonceMap(arg0 *big.Int) (*big.Int, error) {
	return _TNT721TokenBank.Contract.TokenLockNonceMap(&_TNT721TokenBank.CallOpts, arg0)
}

// TokenLockNonceMap is a free data retrieval call binding the contract method 0x8883931e.
//
// Solidity: function tokenLockNonceMap(uint256 ) view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankCallerSession) TokenLockNonceMap(arg0 *big.Int) (*big.Int, error) {
	return _TNT721TokenBank.Contract.TokenLockNonceMap(&_TNT721TokenBank.CallOpts, arg0)
}

// TokenLockVotingRecords is a free data retrieval call binding the contract method 0x1eb78737.
//
// Solidity: function tokenLockVotingRecords(uint256 , bytes32 ) view returns(uint256 dynasty, uint256 accumlatedShares)
func (_TNT721TokenBank *TNT721TokenBankCaller) TokenLockVotingRecords(opts *bind.CallOpts, arg0 *big.Int, arg1 [32]byte) (struct {
	Dynasty          *big.Int
	AccumlatedShares *big.Int
}, error) {
	var out []interface{}
	err := _TNT721TokenBank.contract.Call(opts, &out, "tokenLockVotingRecords", arg0, arg1)

	outstruct := new(struct {
		Dynasty          *big.Int
		AccumlatedShares *big.Int
	})
	if err != nil {
		return *outstruct, err
	}

	outstruct.Dynasty = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
	outstruct.AccumlatedShares = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int)

	return *outstruct, err

}

// TokenLockVotingRecords is a free data retrieval call binding the contract method 0x1eb78737.
//
// Solidity: function tokenLockVotingRecords(uint256 , bytes32 ) view returns(uint256 dynasty, uint256 accumlatedShares)
func (_TNT721TokenBank *TNT721TokenBankSession) TokenLockVotingRecords(arg0 *big.Int, arg1 [32]byte) (struct {
	Dynasty          *big.Int
	AccumlatedShares *big.Int
}, error) {
	return _TNT721TokenBank.Contract.TokenLockVotingRecords(&_TNT721TokenBank.CallOpts, arg0, arg1)
}

// TokenLockVotingRecords is a free data retrieval call binding the contract method 0x1eb78737.
//
// Solidity: function tokenLockVotingRecords(uint256 , bytes32 ) view returns(uint256 dynasty, uint256 accumlatedShares)
func (_TNT721TokenBank *TNT721TokenBankCallerSession) TokenLockVotingRecords(arg0 *big.Int, arg1 [32]byte) (struct {
	Dynasty          *big.Int
	AccumlatedShares *big.Int
}, error) {
	return _TNT721TokenBank.Contract.TokenLockVotingRecords(&_TNT721TokenBank.CallOpts, arg0, arg1)
}

// TokenUnlockNonceMap is a free data retrieval call binding the contract method 0xccf187c7.
//
// Solidity: function tokenUnlockNonceMap(uint256 ) view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankCaller) TokenUnlockNonceMap(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _TNT721TokenBank.contract.Call(opts, &out, "tokenUnlockNonceMap", arg0)

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

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

	return out0, err

}

// TokenUnlockNonceMap is a free data retrieval call binding the contract method 0xccf187c7.
//
// Solidity: function tokenUnlockNonceMap(uint256 ) view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankSession) TokenUnlockNonceMap(arg0 *big.Int) (*big.Int, error) {
	return _TNT721TokenBank.Contract.TokenUnlockNonceMap(&_TNT721TokenBank.CallOpts, arg0)
}

// TokenUnlockNonceMap is a free data retrieval call binding the contract method 0xccf187c7.
//
// Solidity: function tokenUnlockNonceMap(uint256 ) view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankCallerSession) TokenUnlockNonceMap(arg0 *big.Int) (*big.Int, error) {
	return _TNT721TokenBank.Contract.TokenUnlockNonceMap(&_TNT721TokenBank.CallOpts, arg0)
}

// VoucherAddressToDenomLookup is a free data retrieval call binding the contract method 0x60569b5e.
//
// Solidity: function voucherAddressToDenomLookup(address ) view returns(string denom, bool exists)
func (_TNT721TokenBank *TNT721TokenBankCaller) VoucherAddressToDenomLookup(opts *bind.CallOpts, arg0 common.Address) (struct {
	Denom  string
	Exists bool
}, error) {
	var out []interface{}
	err := _TNT721TokenBank.contract.Call(opts, &out, "voucherAddressToDenomLookup", arg0)

	outstruct := new(struct {
		Denom  string
		Exists bool
	})
	if err != nil {
		return *outstruct, err
	}

	outstruct.Denom = *abi.ConvertType(out[0], new(string)).(*string)
	outstruct.Exists = *abi.ConvertType(out[1], new(bool)).(*bool)

	return *outstruct, err

}

// VoucherAddressToDenomLookup is a free data retrieval call binding the contract method 0x60569b5e.
//
// Solidity: function voucherAddressToDenomLookup(address ) view returns(string denom, bool exists)
func (_TNT721TokenBank *TNT721TokenBankSession) VoucherAddressToDenomLookup(arg0 common.Address) (struct {
	Denom  string
	Exists bool
}, error) {
	return _TNT721TokenBank.Contract.VoucherAddressToDenomLookup(&_TNT721TokenBank.CallOpts, arg0)
}

// VoucherAddressToDenomLookup is a free data retrieval call binding the contract method 0x60569b5e.
//
// Solidity: function voucherAddressToDenomLookup(address ) view returns(string denom, bool exists)
func (_TNT721TokenBank *TNT721TokenBankCallerSession) VoucherAddressToDenomLookup(arg0 common.Address) (struct {
	Denom  string
	Exists bool
}, error) {
	return _TNT721TokenBank.Contract.VoucherAddressToDenomLookup(&_TNT721TokenBank.CallOpts, arg0)
}

// VoucherBurnNonceMap is a free data retrieval call binding the contract method 0xca207569.
//
// Solidity: function voucherBurnNonceMap(uint256 ) view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankCaller) VoucherBurnNonceMap(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _TNT721TokenBank.contract.Call(opts, &out, "voucherBurnNonceMap", arg0)

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

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

	return out0, err

}

// VoucherBurnNonceMap is a free data retrieval call binding the contract method 0xca207569.
//
// Solidity: function voucherBurnNonceMap(uint256 ) view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankSession) VoucherBurnNonceMap(arg0 *big.Int) (*big.Int, error) {
	return _TNT721TokenBank.Contract.VoucherBurnNonceMap(&_TNT721TokenBank.CallOpts, arg0)
}

// VoucherBurnNonceMap is a free data retrieval call binding the contract method 0xca207569.
//
// Solidity: function voucherBurnNonceMap(uint256 ) view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankCallerSession) VoucherBurnNonceMap(arg0 *big.Int) (*big.Int, error) {
	return _TNT721TokenBank.Contract.VoucherBurnNonceMap(&_TNT721TokenBank.CallOpts, arg0)
}

// VoucherBurnVotingRecords is a free data retrieval call binding the contract method 0xfeaff052.
//
// Solidity: function voucherBurnVotingRecords(uint256 , bytes32 ) view returns(uint256 dynasty, uint256 accumlatedShares)
func (_TNT721TokenBank *TNT721TokenBankCaller) VoucherBurnVotingRecords(opts *bind.CallOpts, arg0 *big.Int, arg1 [32]byte) (struct {
	Dynasty          *big.Int
	AccumlatedShares *big.Int
}, error) {
	var out []interface{}
	err := _TNT721TokenBank.contract.Call(opts, &out, "voucherBurnVotingRecords", arg0, arg1)

	outstruct := new(struct {
		Dynasty          *big.Int
		AccumlatedShares *big.Int
	})
	if err != nil {
		return *outstruct, err
	}

	outstruct.Dynasty = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
	outstruct.AccumlatedShares = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int)

	return *outstruct, err

}

// VoucherBurnVotingRecords is a free data retrieval call binding the contract method 0xfeaff052.
//
// Solidity: function voucherBurnVotingRecords(uint256 , bytes32 ) view returns(uint256 dynasty, uint256 accumlatedShares)
func (_TNT721TokenBank *TNT721TokenBankSession) VoucherBurnVotingRecords(arg0 *big.Int, arg1 [32]byte) (struct {
	Dynasty          *big.Int
	AccumlatedShares *big.Int
}, error) {
	return _TNT721TokenBank.Contract.VoucherBurnVotingRecords(&_TNT721TokenBank.CallOpts, arg0, arg1)
}

// VoucherBurnVotingRecords is a free data retrieval call binding the contract method 0xfeaff052.
//
// Solidity: function voucherBurnVotingRecords(uint256 , bytes32 ) view returns(uint256 dynasty, uint256 accumlatedShares)
func (_TNT721TokenBank *TNT721TokenBankCallerSession) VoucherBurnVotingRecords(arg0 *big.Int, arg1 [32]byte) (struct {
	Dynasty          *big.Int
	AccumlatedShares *big.Int
}, error) {
	return _TNT721TokenBank.Contract.VoucherBurnVotingRecords(&_TNT721TokenBank.CallOpts, arg0, arg1)
}

// VoucherMintNonceMap is a free data retrieval call binding the contract method 0x740cb7f8.
//
// Solidity: function voucherMintNonceMap(uint256 ) view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankCaller) VoucherMintNonceMap(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _TNT721TokenBank.contract.Call(opts, &out, "voucherMintNonceMap", arg0)

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

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

	return out0, err

}

// VoucherMintNonceMap is a free data retrieval call binding the contract method 0x740cb7f8.
//
// Solidity: function voucherMintNonceMap(uint256 ) view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankSession) VoucherMintNonceMap(arg0 *big.Int) (*big.Int, error) {
	return _TNT721TokenBank.Contract.VoucherMintNonceMap(&_TNT721TokenBank.CallOpts, arg0)
}

// VoucherMintNonceMap is a free data retrieval call binding the contract method 0x740cb7f8.
//
// Solidity: function voucherMintNonceMap(uint256 ) view returns(uint256)
func (_TNT721TokenBank *TNT721TokenBankCallerSession) VoucherMintNonceMap(arg0 *big.Int) (*big.Int, error) {
	return _TNT721TokenBank.Contract.VoucherMintNonceMap(&_TNT721TokenBank.CallOpts, arg0)
}

// BurnVouchers is a paid mutator transaction binding the contract method 0xa0df5cc5.
//
// Solidity: function burnVouchers(address sourceChainVoucherContractAddr, address targetChainTokenReceiver, uint256 tokenID) payable returns()
func (_TNT721TokenBank *TNT721TokenBankTransactor) BurnVouchers(opts *bind.TransactOpts, sourceChainVoucherContractAddr common.Address, targetChainTokenReceiver common.Address, tokenID *big.Int) (*types.Transaction, error) {
	return _TNT721TokenBank.contract.Transact(opts, "burnVouchers", sourceChainVoucherContractAddr, targetChainTokenReceiver, tokenID)
}

// BurnVouchers is a paid mutator transaction binding the contract method 0xa0df5cc5.
//
// Solidity: function burnVouchers(address sourceChainVoucherContractAddr, address targetChainTokenReceiver, uint256 tokenID) payable returns()
func (_TNT721TokenBank *TNT721TokenBankSession) BurnVouchers(sourceChainVoucherContractAddr common.Address, targetChainTokenReceiver common.Address, tokenID *big.Int) (*types.Transaction, error) {
	return _TNT721TokenBank.Contract.BurnVouchers(&_TNT721TokenBank.TransactOpts, sourceChainVoucherContractAddr, targetChainTokenReceiver, tokenID)
}

// BurnVouchers is a paid mutator transaction binding the contract method 0xa0df5cc5.
//
// Solidity: function burnVouchers(address sourceChainVoucherContractAddr, address targetChainTokenReceiver, uint256 tokenID) payable returns()
func (_TNT721TokenBank *TNT721TokenBankTransactorSession) BurnVouchers(sourceChainVoucherContractAddr common.Address, targetChainTokenReceiver common.Address, tokenID *big.Int) (*types.Transaction, error) {
	return _TNT721TokenBank.Contract.BurnVouchers(&_TNT721TokenBank.TransactOpts, sourceChainVoucherContractAddr, targetChainTokenReceiver, tokenID)
}

// LockTokens is a paid mutator transaction binding the contract method 0xbff4c41a.
//
// Solidity: function lockTokens(uint256 targetChainID, address sourceChainTNT721Contract, address targetChainVoucherReceiver, uint256 tokenID) payable returns()
func (_TNT721TokenBank *TNT721TokenBankTransactor) LockTokens(opts *bind.TransactOpts, targetChainID *big.Int, sourceChainTNT721Contract common.Address, targetChainVoucherReceiver common.Address, tokenID *big.Int) (*types.Transaction, error) {
	return _TNT721TokenBank.contract.Transact(opts, "lockTokens", targetChainID, sourceChainTNT721Contract, targetChainVoucherReceiver, tokenID)
}

// LockTokens is a paid mutator transaction binding the contract method 0xbff4c41a.
//
// Solidity: function lockTokens(uint256 targetChainID, address sourceChainTNT721Contract, address targetChainVoucherReceiver, uint256 tokenID) payable returns()
func (_TNT721TokenBank *TNT721TokenBankSession) LockTokens(targetChainID *big.Int, sourceChainTNT721Contract common.Address, targetChainVoucherReceiver common.Address, tokenID *big.Int) (*types.Transaction, error) {
	return _TNT721TokenBank.Contract.LockTokens(&_TNT721TokenBank.TransactOpts, targetChainID, sourceChainTNT721Contract, targetChainVoucherReceiver, tokenID)
}

// LockTokens is a paid mutator transaction binding the contract method 0xbff4c41a.
//
// Solidity: function lockTokens(uint256 targetChainID, address sourceChainTNT721Contract, address targetChainVoucherReceiver, uint256 tokenID) payable returns()
func (_TNT721TokenBank *TNT721TokenBankTransactorSession) LockTokens(targetChainID *big.Int, sourceChainTNT721Contract common.Address, targetChainVoucherReceiver common.Address, tokenID *big.Int) (*types.Transaction, error) {
	return _TNT721TokenBank.Contract.LockTokens(&_TNT721TokenBank.TransactOpts, targetChainID, sourceChainTNT721Contract, targetChainVoucherReceiver, tokenID)
}

// MintVouchers is a paid mutator transaction binding the contract method 0x44b7b352.
//
// Solidity: function mintVouchers(string denom, string name, string symbol, address targetChainVoucherReceiver, uint256 tokenID, string tokenUri, uint256 dynasty, uint256 sourceChainTokenLockNonce) returns()
func (_TNT721TokenBank *TNT721TokenBankTransactor) MintVouchers(opts *bind.TransactOpts, denom string, name string, symbol string, targetChainVoucherReceiver common.Address, tokenID *big.Int, tokenUri string, dynasty *big.Int, sourceChainTokenLockNonce *big.Int) (*types.Transaction, error) {
	return _TNT721TokenBank.contract.Transact(opts, "mintVouchers", denom, name, symbol, targetChainVoucherReceiver, tokenID, tokenUri, dynasty, sourceChainTokenLockNonce)
}

// MintVouchers is a paid mutator transaction binding the contract method 0x44b7b352.
//
// Solidity: function mintVouchers(string denom, string name, string symbol, address targetChainVoucherReceiver, uint256 tokenID, string tokenUri, uint256 dynasty, uint256 sourceChainTokenLockNonce) returns()
func (_TNT721TokenBank *TNT721TokenBankSession) MintVouchers(denom string, name string, symbol string, targetChainVoucherReceiver common.Address, tokenID *big.Int, tokenUri string, dynasty *big.Int, sourceChainTokenLockNonce *big.Int) (*types.Transaction, error) {
	return _TNT721TokenBank.Contract.MintVouchers(&_TNT721TokenBank.TransactOpts, denom, name, symbol, targetChainVoucherReceiver, tokenID, tokenUri, dynasty, sourceChainTokenLockNonce)
}

// MintVouchers is a paid mutator transaction binding the contract method 0x44b7b352.
//
// Solidity: function mintVouchers(string denom, string name, string symbol, address targetChainVoucherReceiver, uint256 tokenID, string tokenUri, uint256 dynasty, uint256 sourceChainTokenLockNonce) returns()
func (_TNT721TokenBank *TNT721TokenBankTransactorSession) MintVouchers(denom string, name string, symbol string, targetChainVoucherReceiver common.Address, tokenID *big.Int, tokenUri string, dynasty *big.Int, sourceChainTokenLockNonce *big.Int) (*types.Transaction, error) {
	return _TNT721TokenBank.Contract.MintVouchers(&_TNT721TokenBank.TransactOpts, denom, name, symbol, targetChainVoucherReceiver, tokenID, tokenUri, dynasty, sourceChainTokenLockNonce)
}

// UnlockTokens is a paid mutator transaction binding the contract method 0x7ff75b46.
//
// Solidity: function unlockTokens(uint256 sourceChainID, string denom, address targetChainTokenReceiver, uint256 tokenID, uint256 dynasty, uint256 sourceChainVoucherBurnNonce) returns()
func (_TNT721TokenBank *TNT721TokenBankTransactor) UnlockTokens(opts *bind.TransactOpts, sourceChainID *big.Int, denom string, targetChainTokenReceiver common.Address, tokenID *big.Int, dynasty *big.Int, sourceChainVoucherBurnNonce *big.Int) (*types.Transaction, error) {
	return _TNT721TokenBank.contract.Transact(opts, "unlockTokens", sourceChainID, denom, targetChainTokenReceiver, tokenID, dynasty, sourceChainVoucherBurnNonce)
}

// UnlockTokens is a paid mutator transaction binding the contract method 0x7ff75b46.
//
// Solidity: function unlockTokens(uint256 sourceChainID, string denom, address targetChainTokenReceiver, uint256 tokenID, uint256 dynasty, uint256 sourceChainVoucherBurnNonce) returns()
func (_TNT721TokenBank *TNT721TokenBankSession) UnlockTokens(sourceChainID *big.Int, denom string, targetChainTokenReceiver common.Address, tokenID *big.Int, dynasty *big.Int, sourceChainVoucherBurnNonce *big.Int) (*types.Transaction, error) {
	return _TNT721TokenBank.Contract.UnlockTokens(&_TNT721TokenBank.TransactOpts, sourceChainID, denom, targetChainTokenReceiver, tokenID, dynasty, sourceChainVoucherBurnNonce)
}

// UnlockTokens is a paid mutator transaction binding the contract method 0x7ff75b46.
//
// Solidity: function unlockTokens(uint256 sourceChainID, string denom, address targetChainTokenReceiver, uint256 tokenID, uint256 dynasty, uint256 sourceChainVoucherBurnNonce) returns()
func (_TNT721TokenBank *TNT721TokenBankTransactorSession) UnlockTokens(sourceChainID *big.Int, denom string, targetChainTokenReceiver common.Address, tokenID *big.Int, dynasty *big.Int, sourceChainVoucherBurnNonce *big.Int) (*types.Transaction, error) {
	return _TNT721TokenBank.Contract.UnlockTokens(&_TNT721TokenBank.TransactOpts, sourceChainID, denom, targetChainTokenReceiver, tokenID, dynasty, sourceChainVoucherBurnNonce)
}

// TNT721TokenBankFailedToMintTNT721VouchersIterator is returned from FilterFailedToMintTNT721Vouchers and is used to iterate over the raw logs and unpacked data for FailedToMintTNT721Vouchers events raised by the TNT721TokenBank contract.
type TNT721TokenBankFailedToMintTNT721VouchersIterator struct {
	Event *TNT721TokenBankFailedToMintTNT721Vouchers // 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 *TNT721TokenBankFailedToMintTNT721VouchersIterator) 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(TNT721TokenBankFailedToMintTNT721Vouchers)
			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(TNT721TokenBankFailedToMintTNT721Vouchers)
		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 *TNT721TokenBankFailedToMintTNT721VouchersIterator) Error() error {
	return it.fail
}

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

// TNT721TokenBankFailedToMintTNT721Vouchers represents a FailedToMintTNT721Vouchers event raised by the TNT721TokenBank contract.
type TNT721TokenBankFailedToMintTNT721Vouchers struct {
	VoucherContractAddress common.Address
	Receiver               common.Address
	TokenID                *big.Int
	Raw                    types.Log // Blockchain specific contextual infos
}

// FilterFailedToMintTNT721Vouchers is a free log retrieval operation binding the contract event 0x41c63a5df99b10ef03c84c20f31c65445d851a9d493b400a66ef9121109a8eaa.
//
// Solidity: event FailedToMintTNT721Vouchers(address indexed voucherContractAddress, address indexed receiver, uint256 tokenID)
func (_TNT721TokenBank *TNT721TokenBankFilterer) FilterFailedToMintTNT721Vouchers(opts *bind.FilterOpts, voucherContractAddress []common.Address, receiver []common.Address) (*TNT721TokenBankFailedToMintTNT721VouchersIterator, error) {

	var voucherContractAddressRule []interface{}
	for _, voucherContractAddressItem := range voucherContractAddress {
		voucherContractAddressRule = append(voucherContractAddressRule, voucherContractAddressItem)
	}
	var receiverRule []interface{}
	for _, receiverItem := range receiver {
		receiverRule = append(receiverRule, receiverItem)
	}

	logs, sub, err := _TNT721TokenBank.contract.FilterLogs(opts, "FailedToMintTNT721Vouchers", voucherContractAddressRule, receiverRule)
	if err != nil {
		return nil, err
	}
	return &TNT721TokenBankFailedToMintTNT721VouchersIterator{contract: _TNT721TokenBank.contract, event: "FailedToMintTNT721Vouchers", logs: logs, sub: sub}, nil
}

// WatchFailedToMintTNT721Vouchers is a free log subscription operation binding the contract event 0x41c63a5df99b10ef03c84c20f31c65445d851a9d493b400a66ef9121109a8eaa.
//
// Solidity: event FailedToMintTNT721Vouchers(address indexed voucherContractAddress, address indexed receiver, uint256 tokenID)
func (_TNT721TokenBank *TNT721TokenBankFilterer) WatchFailedToMintTNT721Vouchers(opts *bind.WatchOpts, sink chan<- *TNT721TokenBankFailedToMintTNT721Vouchers, voucherContractAddress []common.Address, receiver []common.Address) (event.Subscription, error) {

	var voucherContractAddressRule []interface{}
	for _, voucherContractAddressItem := range voucherContractAddress {
		voucherContractAddressRule = append(voucherContractAddressRule, voucherContractAddressItem)
	}
	var receiverRule []interface{}
	for _, receiverItem := range receiver {
		receiverRule = append(receiverRule, receiverItem)
	}

	logs, sub, err := _TNT721TokenBank.contract.WatchLogs(opts, "FailedToMintTNT721Vouchers", voucherContractAddressRule, receiverRule)
	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(TNT721TokenBankFailedToMintTNT721Vouchers)
				if err := _TNT721TokenBank.contract.UnpackLog(event, "FailedToMintTNT721Vouchers", 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
}

// ParseFailedToMintTNT721Vouchers is a log parse operation binding the contract event 0x41c63a5df99b10ef03c84c20f31c65445d851a9d493b400a66ef9121109a8eaa.
//
// Solidity: event FailedToMintTNT721Vouchers(address indexed voucherContractAddress, address indexed receiver, uint256 tokenID)
func (_TNT721TokenBank *TNT721TokenBankFilterer) ParseFailedToMintTNT721Vouchers(log types.Log) (*TNT721TokenBankFailedToMintTNT721Vouchers, error) {
	event := new(TNT721TokenBankFailedToMintTNT721Vouchers)
	if err := _TNT721TokenBank.contract.UnpackLog(event, "FailedToMintTNT721Vouchers", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// TNT721TokenBankFailedToSendTFuelIterator is returned from FilterFailedToSendTFuel and is used to iterate over the raw logs and unpacked data for FailedToSendTFuel events raised by the TNT721TokenBank contract.
type TNT721TokenBankFailedToSendTFuelIterator struct {
	Event *TNT721TokenBankFailedToSendTFuel // 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 *TNT721TokenBankFailedToSendTFuelIterator) 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(TNT721TokenBankFailedToSendTFuel)
			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(TNT721TokenBankFailedToSendTFuel)
		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 *TNT721TokenBankFailedToSendTFuelIterator) Error() error {
	return it.fail
}

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

// TNT721TokenBankFailedToSendTFuel represents a FailedToSendTFuel event raised by the TNT721TokenBank contract.
type TNT721TokenBankFailedToSendTFuel struct {
	Receiver common.Address
	Amount   *big.Int
	Raw      types.Log // Blockchain specific contextual infos
}

// FilterFailedToSendTFuel is a free log retrieval operation binding the contract event 0x562a1007af95860758404d928a251ad8b0062ac50058db9f82dab3fe379f4885.
//
// Solidity: event FailedToSendTFuel(address indexed receiver, uint256 amount)
func (_TNT721TokenBank *TNT721TokenBankFilterer) FilterFailedToSendTFuel(opts *bind.FilterOpts, receiver []common.Address) (*TNT721TokenBankFailedToSendTFuelIterator, error) {

	var receiverRule []interface{}
	for _, receiverItem := range receiver {
		receiverRule = append(receiverRule, receiverItem)
	}

	logs, sub, err := _TNT721TokenBank.contract.FilterLogs(opts, "FailedToSendTFuel", receiverRule)
	if err != nil {
		return nil, err
	}
	return &TNT721TokenBankFailedToSendTFuelIterator{contract: _TNT721TokenBank.contract, event: "FailedToSendTFuel", logs: logs, sub: sub}, nil
}

// WatchFailedToSendTFuel is a free log subscription operation binding the contract event 0x562a1007af95860758404d928a251ad8b0062ac50058db9f82dab3fe379f4885.
//
// Solidity: event FailedToSendTFuel(address indexed receiver, uint256 amount)
func (_TNT721TokenBank *TNT721TokenBankFilterer) WatchFailedToSendTFuel(opts *bind.WatchOpts, sink chan<- *TNT721TokenBankFailedToSendTFuel, receiver []common.Address) (event.Subscription, error) {

	var receiverRule []interface{}
	for _, receiverItem := range receiver {
		receiverRule = append(receiverRule, receiverItem)
	}

	logs, sub, err := _TNT721TokenBank.contract.WatchLogs(opts, "FailedToSendTFuel", receiverRule)
	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(TNT721TokenBankFailedToSendTFuel)
				if err := _TNT721TokenBank.contract.UnpackLog(event, "FailedToSendTFuel", 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
}

// ParseFailedToSendTFuel is a log parse operation binding the contract event 0x562a1007af95860758404d928a251ad8b0062ac50058db9f82dab3fe379f4885.
//
// Solidity: event FailedToSendTFuel(address indexed receiver, uint256 amount)
func (_TNT721TokenBank *TNT721TokenBankFilterer) ParseFailedToSendTFuel(log types.Log) (*TNT721TokenBankFailedToSendTFuel, error) {
	event := new(TNT721TokenBankFailedToSendTFuel)
	if err := _TNT721TokenBank.contract.UnpackLog(event, "FailedToSendTFuel", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// TNT721TokenBankFailedToUnlockTNT721TokensIterator is returned from FilterFailedToUnlockTNT721Tokens and is used to iterate over the raw logs and unpacked data for FailedToUnlockTNT721Tokens events raised by the TNT721TokenBank contract.
type TNT721TokenBankFailedToUnlockTNT721TokensIterator struct {
	Event *TNT721TokenBankFailedToUnlockTNT721Tokens // 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 *TNT721TokenBankFailedToUnlockTNT721TokensIterator) 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(TNT721TokenBankFailedToUnlockTNT721Tokens)
			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(TNT721TokenBankFailedToUnlockTNT721Tokens)
		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 *TNT721TokenBankFailedToUnlockTNT721TokensIterator) Error() error {
	return it.fail
}

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

// TNT721TokenBankFailedToUnlockTNT721Tokens represents a FailedToUnlockTNT721Tokens event raised by the TNT721TokenBank contract.
type TNT721TokenBankFailedToUnlockTNT721Tokens struct {
	TokenContractAddress common.Address
	Receiver             common.Address
	TokenID              *big.Int
	Raw                  types.Log // Blockchain specific contextual infos
}

// FilterFailedToUnlockTNT721Tokens is a free log retrieval operation binding the contract event 0x8a89b1afdb3357cad96ac121522e1a8403d435b7b278a844e1002cb17c58522c.
//
// Solidity: event FailedToUnlockTNT721Tokens(address indexed tokenContractAddress, address indexed receiver, uint256 tokenID)
func (_TNT721TokenBank *TNT721TokenBankFilterer) FilterFailedToUnlockTNT721Tokens(opts *bind.FilterOpts, tokenContractAddress []common.Address, receiver []common.Address) (*TNT721TokenBankFailedToUnlockTNT721TokensIterator, error) {

	var tokenContractAddressRule []interface{}
	for _, tokenContractAddressItem := range tokenContractAddress {
		tokenContractAddressRule = append(tokenContractAddressRule, tokenContractAddressItem)
	}
	var receiverRule []interface{}
	for _, receiverItem := range receiver {
		receiverRule = append(receiverRule, receiverItem)
	}

	logs, sub, err := _TNT721TokenBank.contract.FilterLogs(opts, "FailedToUnlockTNT721Tokens", tokenContractAddressRule, receiverRule)
	if err != nil {
		return nil, err
	}
	return &TNT721TokenBankFailedToUnlockTNT721TokensIterator{contract: _TNT721TokenBank.contract, event: "FailedToUnlockTNT721Tokens", logs: logs, sub: sub}, nil
}

// WatchFailedToUnlockTNT721Tokens is a free log subscription operation binding the contract event 0x8a89b1afdb3357cad96ac121522e1a8403d435b7b278a844e1002cb17c58522c.
//
// Solidity: event FailedToUnlockTNT721Tokens(address indexed tokenContractAddress, address indexed receiver, uint256 tokenID)
func (_TNT721TokenBank *TNT721TokenBankFilterer) WatchFailedToUnlockTNT721Tokens(opts *bind.WatchOpts, sink chan<- *TNT721TokenBankFailedToUnlockTNT721Tokens, tokenContractAddress []common.Address, receiver []common.Address) (event.Subscription, error) {

	var tokenContractAddressRule []interface{}
	for _, tokenContractAddressItem := range tokenContractAddress {
		tokenContractAddressRule = append(tokenContractAddressRule, tokenContractAddressItem)
	}
	var receiverRule []interface{}
	for _, receiverItem := range receiver {
		receiverRule = append(receiverRule, receiverItem)
	}

	logs, sub, err := _TNT721TokenBank.contract.WatchLogs(opts, "FailedToUnlockTNT721Tokens", tokenContractAddressRule, receiverRule)
	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(TNT721TokenBankFailedToUnlockTNT721Tokens)
				if err := _TNT721TokenBank.contract.UnpackLog(event, "FailedToUnlockTNT721Tokens", 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
}

// ParseFailedToUnlockTNT721Tokens is a log parse operation binding the contract event 0x8a89b1afdb3357cad96ac121522e1a8403d435b7b278a844e1002cb17c58522c.
//
// Solidity: event FailedToUnlockTNT721Tokens(address indexed tokenContractAddress, address indexed receiver, uint256 tokenID)
func (_TNT721TokenBank *TNT721TokenBankFilterer) ParseFailedToUnlockTNT721Tokens(log types.Log) (*TNT721TokenBankFailedToUnlockTNT721Tokens, error) {
	event := new(TNT721TokenBankFailedToUnlockTNT721Tokens)
	if err := _TNT721TokenBank.contract.UnpackLog(event, "FailedToUnlockTNT721Tokens", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// TNT721TokenBankTNT721TokenLockedIterator is returned from FilterTNT721TokenLocked and is used to iterate over the raw logs and unpacked data for TNT721TokenLocked events raised by the TNT721TokenBank contract.
type TNT721TokenBankTNT721TokenLockedIterator struct {
	Event *TNT721TokenBankTNT721TokenLocked // 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 *TNT721TokenBankTNT721TokenLockedIterator) 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(TNT721TokenBankTNT721TokenLocked)
			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(TNT721TokenBankTNT721TokenLocked)
		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 *TNT721TokenBankTNT721TokenLockedIterator) Error() error {
	return it.fail
}

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

// TNT721TokenBankTNT721TokenLocked represents a TNT721TokenLocked event raised by the TNT721TokenBank contract.
type TNT721TokenBankTNT721TokenLocked struct {
	Denom                      string
	SourceChainTokenSender     common.Address
	TargetChainID              *big.Int
	TargetChainVoucherReceiver common.Address
	TokenID                    *big.Int
	Name                       string
	Symbol                     string
	TokenURI                   string
	TokenLockNonce             *big.Int
	Raw                        types.Log // Blockchain specific contextual infos
}

// FilterTNT721TokenLocked is a free log retrieval operation binding the contract event 0x4f9f4d5de31a3b62319d89542b16a804341d645cf6f3ddf2e28a03f7d227cb0b.
//
// Solidity: event TNT721TokenLocked(string denom, address sourceChainTokenSender, uint256 targetChainID, address targetChainVoucherReceiver, uint256 tokenID, string name, string symbol, string tokenURI, uint256 tokenLockNonce)
func (_TNT721TokenBank *TNT721TokenBankFilterer) FilterTNT721TokenLocked(opts *bind.FilterOpts) (*TNT721TokenBankTNT721TokenLockedIterator, error) {

	logs, sub, err := _TNT721TokenBank.contract.FilterLogs(opts, "TNT721TokenLocked")
	if err != nil {
		return nil, err
	}
	return &TNT721TokenBankTNT721TokenLockedIterator{contract: _TNT721TokenBank.contract, event: "TNT721TokenLocked", logs: logs, sub: sub}, nil
}

// WatchTNT721TokenLocked is a free log subscription operation binding the contract event 0x4f9f4d5de31a3b62319d89542b16a804341d645cf6f3ddf2e28a03f7d227cb0b.
//
// Solidity: event TNT721TokenLocked(string denom, address sourceChainTokenSender, uint256 targetChainID, address targetChainVoucherReceiver, uint256 tokenID, string name, string symbol, string tokenURI, uint256 tokenLockNonce)
func (_TNT721TokenBank *TNT721TokenBankFilterer) WatchTNT721TokenLocked(opts *bind.WatchOpts, sink chan<- *TNT721TokenBankTNT721TokenLocked) (event.Subscription, error) {

	logs, sub, err := _TNT721TokenBank.contract.WatchLogs(opts, "TNT721TokenLocked")
	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(TNT721TokenBankTNT721TokenLocked)
				if err := _TNT721TokenBank.contract.UnpackLog(event, "TNT721TokenLocked", 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
}

// ParseTNT721TokenLocked is a log parse operation binding the contract event 0x4f9f4d5de31a3b62319d89542b16a804341d645cf6f3ddf2e28a03f7d227cb0b.
//
// Solidity: event TNT721TokenLocked(string denom, address sourceChainTokenSender, uint256 targetChainID, address targetChainVoucherReceiver, uint256 tokenID, string name, string symbol, string tokenURI, uint256 tokenLockNonce)
func (_TNT721TokenBank *TNT721TokenBankFilterer) ParseTNT721TokenLocked(log types.Log) (*TNT721TokenBankTNT721TokenLocked, error) {
	event := new(TNT721TokenBankTNT721TokenLocked)
	if err := _TNT721TokenBank.contract.UnpackLog(event, "TNT721TokenLocked", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// TNT721TokenBankTNT721TokenUnlockedIterator is returned from FilterTNT721TokenUnlocked and is used to iterate over the raw logs and unpacked data for TNT721TokenUnlocked events raised by the TNT721TokenBank contract.
type TNT721TokenBankTNT721TokenUnlockedIterator struct {
	Event *TNT721TokenBankTNT721TokenUnlocked // 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 *TNT721TokenBankTNT721TokenUnlockedIterator) 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(TNT721TokenBankTNT721TokenUnlocked)
			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(TNT721TokenBankTNT721TokenUnlocked)
		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 *TNT721TokenBankTNT721TokenUnlockedIterator) Error() error {
	return it.fail
}

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

// TNT721TokenBankTNT721TokenUnlocked represents a TNT721TokenUnlocked event raised by the TNT721TokenBank contract.
type TNT721TokenBankTNT721TokenUnlocked struct {
	Denom                       string
	TargetChainTokenReceiver    common.Address
	TokenID                     *big.Int
	SourceChainVoucherBurnNonce *big.Int
	TokenUnlockNonce            *big.Int
	Raw                         types.Log // Blockchain specific contextual infos
}

// FilterTNT721TokenUnlocked is a free log retrieval operation binding the contract event 0xf8a9006f96df65bd7b661f7c867ef002bd7c6efcae464f83b84095af188497dd.
//
// Solidity: event TNT721TokenUnlocked(string denom, address targetChainTokenReceiver, uint256 tokenID, uint256 sourceChainVoucherBurnNonce, uint256 tokenUnlockNonce)
func (_TNT721TokenBank *TNT721TokenBankFilterer) FilterTNT721TokenUnlocked(opts *bind.FilterOpts) (*TNT721TokenBankTNT721TokenUnlockedIterator, error) {

	logs, sub, err := _TNT721TokenBank.contract.FilterLogs(opts, "TNT721TokenUnlocked")
	if err != nil {
		return nil, err
	}
	return &TNT721TokenBankTNT721TokenUnlockedIterator{contract: _TNT721TokenBank.contract, event: "TNT721TokenUnlocked", logs: logs, sub: sub}, nil
}

// WatchTNT721TokenUnlocked is a free log subscription operation binding the contract event 0xf8a9006f96df65bd7b661f7c867ef002bd7c6efcae464f83b84095af188497dd.
//
// Solidity: event TNT721TokenUnlocked(string denom, address targetChainTokenReceiver, uint256 tokenID, uint256 sourceChainVoucherBurnNonce, uint256 tokenUnlockNonce)
func (_TNT721TokenBank *TNT721TokenBankFilterer) WatchTNT721TokenUnlocked(opts *bind.WatchOpts, sink chan<- *TNT721TokenBankTNT721TokenUnlocked) (event.Subscription, error) {

	logs, sub, err := _TNT721TokenBank.contract.WatchLogs(opts, "TNT721TokenUnlocked")
	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(TNT721TokenBankTNT721TokenUnlocked)
				if err := _TNT721TokenBank.contract.UnpackLog(event, "TNT721TokenUnlocked", 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
}

// ParseTNT721TokenUnlocked is a log parse operation binding the contract event 0xf8a9006f96df65bd7b661f7c867ef002bd7c6efcae464f83b84095af188497dd.
//
// Solidity: event TNT721TokenUnlocked(string denom, address targetChainTokenReceiver, uint256 tokenID, uint256 sourceChainVoucherBurnNonce, uint256 tokenUnlockNonce)
func (_TNT721TokenBank *TNT721TokenBankFilterer) ParseTNT721TokenUnlocked(log types.Log) (*TNT721TokenBankTNT721TokenUnlocked, error) {
	event := new(TNT721TokenBankTNT721TokenUnlocked)
	if err := _TNT721TokenBank.contract.UnpackLog(event, "TNT721TokenUnlocked", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// TNT721TokenBankTNT721VoucherBurnedIterator is returned from FilterTNT721VoucherBurned and is used to iterate over the raw logs and unpacked data for TNT721VoucherBurned events raised by the TNT721TokenBank contract.
type TNT721TokenBankTNT721VoucherBurnedIterator struct {
	Event *TNT721TokenBankTNT721VoucherBurned // 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 *TNT721TokenBankTNT721VoucherBurnedIterator) 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(TNT721TokenBankTNT721VoucherBurned)
			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(TNT721TokenBankTNT721VoucherBurned)
		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 *TNT721TokenBankTNT721VoucherBurnedIterator) Error() error {
	return it.fail
}

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

// TNT721TokenBankTNT721VoucherBurned represents a TNT721VoucherBurned event raised by the TNT721TokenBank contract.
type TNT721TokenBankTNT721VoucherBurned struct {
	Denom                    string
	SourceChainVoucherOwner  common.Address
	TargetChainTokenReceiver common.Address
	TokenID                  *big.Int
	VoucherBurnNonce         *big.Int
	Raw                      types.Log // Blockchain specific contextual infos
}

// FilterTNT721VoucherBurned is a free log retrieval operation binding the contract event 0xb097dcf0d8777f11a1ca4b2510f3df57029b1d2f8ce89a94ad11d4ca61df056e.
//
// Solidity: event TNT721VoucherBurned(string denom, address sourceChainVoucherOwner, address targetChainTokenReceiver, uint256 tokenID, uint256 voucherBurnNonce)
func (_TNT721TokenBank *TNT721TokenBankFilterer) FilterTNT721VoucherBurned(opts *bind.FilterOpts) (*TNT721TokenBankTNT721VoucherBurnedIterator, error) {

	logs, sub, err := _TNT721TokenBank.contract.FilterLogs(opts, "TNT721VoucherBurned")
	if err != nil {
		return nil, err
	}
	return &TNT721TokenBankTNT721VoucherBurnedIterator{contract: _TNT721TokenBank.contract, event: "TNT721VoucherBurned", logs: logs, sub: sub}, nil
}

// WatchTNT721VoucherBurned is a free log subscription operation binding the contract event 0xb097dcf0d8777f11a1ca4b2510f3df57029b1d2f8ce89a94ad11d4ca61df056e.
//
// Solidity: event TNT721VoucherBurned(string denom, address sourceChainVoucherOwner, address targetChainTokenReceiver, uint256 tokenID, uint256 voucherBurnNonce)
func (_TNT721TokenBank *TNT721TokenBankFilterer) WatchTNT721VoucherBurned(opts *bind.WatchOpts, sink chan<- *TNT721TokenBankTNT721VoucherBurned) (event.Subscription, error) {

	logs, sub, err := _TNT721TokenBank.contract.WatchLogs(opts, "TNT721VoucherBurned")
	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(TNT721TokenBankTNT721VoucherBurned)
				if err := _TNT721TokenBank.contract.UnpackLog(event, "TNT721VoucherBurned", 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
}

// ParseTNT721VoucherBurned is a log parse operation binding the contract event 0xb097dcf0d8777f11a1ca4b2510f3df57029b1d2f8ce89a94ad11d4ca61df056e.
//
// Solidity: event TNT721VoucherBurned(string denom, address sourceChainVoucherOwner, address targetChainTokenReceiver, uint256 tokenID, uint256 voucherBurnNonce)
func (_TNT721TokenBank *TNT721TokenBankFilterer) ParseTNT721VoucherBurned(log types.Log) (*TNT721TokenBankTNT721VoucherBurned, error) {
	event := new(TNT721TokenBankTNT721VoucherBurned)
	if err := _TNT721TokenBank.contract.UnpackLog(event, "TNT721VoucherBurned", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

// TNT721TokenBankTNT721VoucherMintedIterator is returned from FilterTNT721VoucherMinted and is used to iterate over the raw logs and unpacked data for TNT721VoucherMinted events raised by the TNT721TokenBank contract.
type TNT721TokenBankTNT721VoucherMintedIterator struct {
	Event *TNT721TokenBankTNT721VoucherMinted // 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 *TNT721TokenBankTNT721VoucherMintedIterator) 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(TNT721TokenBankTNT721VoucherMinted)
			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(TNT721TokenBankTNT721VoucherMinted)
		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 *TNT721TokenBankTNT721VoucherMintedIterator) Error() error {
	return it.fail
}

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

// TNT721TokenBankTNT721VoucherMinted represents a TNT721VoucherMinted event raised by the TNT721TokenBank contract.
type TNT721TokenBankTNT721VoucherMinted struct {
	Denom                      string
	TargetChainVoucherReceiver common.Address
	VoucherContract            common.Address
	TokenID                    *big.Int
	SourceChainTokenLockNonce  *big.Int
	VoucherMintNonce           *big.Int
	Raw                        types.Log // Blockchain specific contextual infos
}

// FilterTNT721VoucherMinted is a free log retrieval operation binding the contract event 0x9b5e85947adbfffa61d52bc536966418240a4d92744deb02c50f02d031419c91.
//
// Solidity: event TNT721VoucherMinted(string denom, address targetChainVoucherReceiver, address voucherContract, uint256 tokenID, uint256 sourceChainTokenLockNonce, uint256 voucherMintNonce)
func (_TNT721TokenBank *TNT721TokenBankFilterer) FilterTNT721VoucherMinted(opts *bind.FilterOpts) (*TNT721TokenBankTNT721VoucherMintedIterator, error) {

	logs, sub, err := _TNT721TokenBank.contract.FilterLogs(opts, "TNT721VoucherMinted")
	if err != nil {
		return nil, err
	}
	return &TNT721TokenBankTNT721VoucherMintedIterator{contract: _TNT721TokenBank.contract, event: "TNT721VoucherMinted", logs: logs, sub: sub}, nil
}

// WatchTNT721VoucherMinted is a free log subscription operation binding the contract event 0x9b5e85947adbfffa61d52bc536966418240a4d92744deb02c50f02d031419c91.
//
// Solidity: event TNT721VoucherMinted(string denom, address targetChainVoucherReceiver, address voucherContract, uint256 tokenID, uint256 sourceChainTokenLockNonce, uint256 voucherMintNonce)
func (_TNT721TokenBank *TNT721TokenBankFilterer) WatchTNT721VoucherMinted(opts *bind.WatchOpts, sink chan<- *TNT721TokenBankTNT721VoucherMinted) (event.Subscription, error) {

	logs, sub, err := _TNT721TokenBank.contract.WatchLogs(opts, "TNT721VoucherMinted")
	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(TNT721TokenBankTNT721VoucherMinted)
				if err := _TNT721TokenBank.contract.UnpackLog(event, "TNT721VoucherMinted", 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
}

// ParseTNT721VoucherMinted is a log parse operation binding the contract event 0x9b5e85947adbfffa61d52bc536966418240a4d92744deb02c50f02d031419c91.
//
// Solidity: event TNT721VoucherMinted(string denom, address targetChainVoucherReceiver, address voucherContract, uint256 tokenID, uint256 sourceChainTokenLockNonce, uint256 voucherMintNonce)
func (_TNT721TokenBank *TNT721TokenBankFilterer) ParseTNT721VoucherMinted(log types.Log) (*TNT721TokenBankTNT721VoucherMinted, error) {
	event := new(TNT721TokenBankTNT721VoucherMinted)
	if err := _TNT721TokenBank.contract.UnpackLog(event, "TNT721VoucherMinted", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}
