func (it *RarityGoldApprovalIterator) Close() error {
	it.sub.Unsubscribe()
	return nil
}
Close terminates the iteration process, releasing any pending underlying
resources.
package rarity
import (
	"errors"
	"math/big"
	"strings"
	ethereum "github.com/ethereum/go-ethereum"
	"github.com/ethereum/go-ethereum/accounts/abi"
	"github.com/ethereum/go-ethereum/accounts/abi/bind"
	"github.com/ethereum/go-ethereum/common"
	"github.com/ethereum/go-ethereum/core/types"
	"github.com/ethereum/go-ethereum/event"
)
var (
	_ = errors.New
	_ = big.NewInt
	_ = strings.NewReader
	_ = ethereum.NotFound
	_ = bind.Bind
	_ = common.Big1
	_ = types.BloomLookup
	_ = event.NewSubscription
)
var RarityGoldMetaData = &bind.MetaData{
	ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"spender\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"summoner\",\"type\":\"uint256\"}],\"name\":\"claim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"summoner\",\"type\":\"uint256\"}],\"name\":\"claimable\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"claimed\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"executor\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"from\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"to\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"level\",\"type\":\"uint256\"}],\"name\":\"wealth_by_level\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"wealth\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]",
}
var RarityGoldABI = RarityGoldMetaData.ABI
type RarityGold struct {
	RarityGoldCaller      
	RarityGoldTransactor  
	RarityGoldFilterer    
}
type RarityGoldCaller struct {
	contract *bind.BoundContract  
}
type RarityGoldTransactor struct {
	contract *bind.BoundContract  
}
type RarityGoldFilterer struct {
	contract *bind.BoundContract  
}
type RarityGoldSession struct {
	Contract     *RarityGold        
	CallOpts     bind.CallOpts      
	TransactOpts bind.TransactOpts  
}
type RarityGoldCallerSession struct {
	Contract *RarityGoldCaller  
	CallOpts bind.CallOpts      
}
type RarityGoldTransactorSession struct {
	Contract     *RarityGoldTransactor  
	TransactOpts bind.TransactOpts      
}
type RarityGoldRaw struct {
	Contract *RarityGold  
}
type RarityGoldCallerRaw struct {
	Contract *RarityGoldCaller  
}
type RarityGoldTransactorRaw struct {
	Contract *RarityGoldTransactor  
}
func NewRarityGold(address common.Address, backend bind.ContractBackend) (*RarityGold, error) {
	contract, err := bindRarityGold(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &RarityGold{RarityGoldCaller: RarityGoldCaller{contract: contract}, RarityGoldTransactor: RarityGoldTransactor{contract: contract}, RarityGoldFilterer: RarityGoldFilterer{contract: contract}}, nil
}
func NewRarityGoldCaller(address common.Address, caller bind.ContractCaller) (*RarityGoldCaller, error) {
	contract, err := bindRarityGold(address, caller, nil, nil)
	if err != nil {
		return nil, err
	}
	return &RarityGoldCaller{contract: contract}, nil
}
func NewRarityGoldTransactor(address common.Address, transactor bind.ContractTransactor) (*RarityGoldTransactor, error) {
	contract, err := bindRarityGold(address, nil, transactor, nil)
	if err != nil {
		return nil, err
	}
	return &RarityGoldTransactor{contract: contract}, nil
}
func NewRarityGoldFilterer(address common.Address, filterer bind.ContractFilterer) (*RarityGoldFilterer, error) {
	contract, err := bindRarityGold(address, nil, nil, filterer)
	if err != nil {
		return nil, err
	}
	return &RarityGoldFilterer{contract: contract}, nil
}
func bindRarityGold(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
	parsed, err := abi.JSON(strings.NewReader(RarityGoldABI))
	if err != nil {
		return nil, err
	}
	return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil
}
func (_RarityGold *RarityGoldRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _RarityGold.Contract.RarityGoldCaller.contract.Call(opts, result, method, params...)
}
func (_RarityGold *RarityGoldRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _RarityGold.Contract.RarityGoldTransactor.contract.Transfer(opts)
}
func (_RarityGold *RarityGoldRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _RarityGold.Contract.RarityGoldTransactor.contract.Transact(opts, method, params...)
}
func (_RarityGold *RarityGoldCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _RarityGold.Contract.contract.Call(opts, result, method, params...)
}
func (_RarityGold *RarityGoldTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _RarityGold.Contract.contract.Transfer(opts)
}
func (_RarityGold *RarityGoldTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
	return _RarityGold.Contract.contract.Transact(opts, method, params...)
}
func (_RarityGold *RarityGoldCaller) Allowance(opts *bind.CallOpts, arg0 *big.Int, arg1 *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _RarityGold.contract.Call(opts, &out, "allowance", arg0, arg1)
	if err != nil {
		return *new(*big.Int), err
	}
	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
	return out0, err
}
func (_RarityGold *RarityGoldSession) Allowance(arg0 *big.Int, arg1 *big.Int) (*big.Int, error) {
	return _RarityGold.Contract.Allowance(&_RarityGold.CallOpts, arg0, arg1)
}
func (_RarityGold *RarityGoldCallerSession) Allowance(arg0 *big.Int, arg1 *big.Int) (*big.Int, error) {
	return _RarityGold.Contract.Allowance(&_RarityGold.CallOpts, arg0, arg1)
}
func (_RarityGold *RarityGoldCaller) BalanceOf(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _RarityGold.contract.Call(opts, &out, "balanceOf", arg0)
	if err != nil {
		return *new(*big.Int), err
	}
	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
	return out0, err
}
func (_RarityGold *RarityGoldSession) BalanceOf(arg0 *big.Int) (*big.Int, error) {
	return _RarityGold.Contract.BalanceOf(&_RarityGold.CallOpts, arg0)
}
func (_RarityGold *RarityGoldCallerSession) BalanceOf(arg0 *big.Int) (*big.Int, error) {
	return _RarityGold.Contract.BalanceOf(&_RarityGold.CallOpts, arg0)
}
func (_RarityGold *RarityGoldCaller) Claimable(opts *bind.CallOpts, summoner *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _RarityGold.contract.Call(opts, &out, "claimable", summoner)
	if err != nil {
		return *new(*big.Int), err
	}
	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
	return out0, err
}
func (_RarityGold *RarityGoldSession) Claimable(summoner *big.Int) (*big.Int, error) {
	return _RarityGold.Contract.Claimable(&_RarityGold.CallOpts, summoner)
}
func (_RarityGold *RarityGoldCallerSession) Claimable(summoner *big.Int) (*big.Int, error) {
	return _RarityGold.Contract.Claimable(&_RarityGold.CallOpts, summoner)
}
func (_RarityGold *RarityGoldCaller) Claimed(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _RarityGold.contract.Call(opts, &out, "claimed", arg0)
	if err != nil {
		return *new(*big.Int), err
	}
	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
	return out0, err
}
func (_RarityGold *RarityGoldSession) Claimed(arg0 *big.Int) (*big.Int, error) {
	return _RarityGold.Contract.Claimed(&_RarityGold.CallOpts, arg0)
}
func (_RarityGold *RarityGoldCallerSession) Claimed(arg0 *big.Int) (*big.Int, error) {
	return _RarityGold.Contract.Claimed(&_RarityGold.CallOpts, arg0)
}
func (_RarityGold *RarityGoldCaller) Decimals(opts *bind.CallOpts) (uint8, error) {
	var out []interface{}
	err := _RarityGold.contract.Call(opts, &out, "decimals")
	if err != nil {
		return *new(uint8), err
	}
	out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8)
	return out0, err
}
func (_RarityGold *RarityGoldSession) Decimals() (uint8, error) {
	return _RarityGold.Contract.Decimals(&_RarityGold.CallOpts)
}
func (_RarityGold *RarityGoldCallerSession) Decimals() (uint8, error) {
	return _RarityGold.Contract.Decimals(&_RarityGold.CallOpts)
}
func (_RarityGold *RarityGoldCaller) Name(opts *bind.CallOpts) (string, error) {
	var out []interface{}
	err := _RarityGold.contract.Call(opts, &out, "name")
	if err != nil {
		return *new(string), err
	}
	out0 := *abi.ConvertType(out[0], new(string)).(*string)
	return out0, err
}
func (_RarityGold *RarityGoldSession) Name() (string, error) {
	return _RarityGold.Contract.Name(&_RarityGold.CallOpts)
}
func (_RarityGold *RarityGoldCallerSession) Name() (string, error) {
	return _RarityGold.Contract.Name(&_RarityGold.CallOpts)
}
func (_RarityGold *RarityGoldCaller) Symbol(opts *bind.CallOpts) (string, error) {
	var out []interface{}
	err := _RarityGold.contract.Call(opts, &out, "symbol")
	if err != nil {
		return *new(string), err
	}
	out0 := *abi.ConvertType(out[0], new(string)).(*string)
	return out0, err
}
func (_RarityGold *RarityGoldSession) Symbol() (string, error) {
	return _RarityGold.Contract.Symbol(&_RarityGold.CallOpts)
}
func (_RarityGold *RarityGoldCallerSession) Symbol() (string, error) {
	return _RarityGold.Contract.Symbol(&_RarityGold.CallOpts)
}
func (_RarityGold *RarityGoldCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
	var out []interface{}
	err := _RarityGold.contract.Call(opts, &out, "totalSupply")
	if err != nil {
		return *new(*big.Int), err
	}
	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
	return out0, err
}
func (_RarityGold *RarityGoldSession) TotalSupply() (*big.Int, error) {
	return _RarityGold.Contract.TotalSupply(&_RarityGold.CallOpts)
}
func (_RarityGold *RarityGoldCallerSession) TotalSupply() (*big.Int, error) {
	return _RarityGold.Contract.TotalSupply(&_RarityGold.CallOpts)
}
func (_RarityGold *RarityGoldCaller) WealthByLevel(opts *bind.CallOpts, level *big.Int) (*big.Int, error) {
	var out []interface{}
	err := _RarityGold.contract.Call(opts, &out, "wealth_by_level", level)
	if err != nil {
		return *new(*big.Int), err
	}
	out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
	return out0, err
}
func (_RarityGold *RarityGoldSession) WealthByLevel(level *big.Int) (*big.Int, error) {
	return _RarityGold.Contract.WealthByLevel(&_RarityGold.CallOpts, level)
}
func (_RarityGold *RarityGoldCallerSession) WealthByLevel(level *big.Int) (*big.Int, error) {
	return _RarityGold.Contract.WealthByLevel(&_RarityGold.CallOpts, level)
}
func (_RarityGold *RarityGoldTransactor) Approve(opts *bind.TransactOpts, from *big.Int, spender *big.Int, amount *big.Int) (*types.Transaction, error) {
	return _RarityGold.contract.Transact(opts, "approve", from, spender, amount)
}
func (_RarityGold *RarityGoldSession) Approve(from *big.Int, spender *big.Int, amount *big.Int) (*types.Transaction, error) {
	return _RarityGold.Contract.Approve(&_RarityGold.TransactOpts, from, spender, amount)
}
func (_RarityGold *RarityGoldTransactorSession) Approve(from *big.Int, spender *big.Int, amount *big.Int) (*types.Transaction, error) {
	return _RarityGold.Contract.Approve(&_RarityGold.TransactOpts, from, spender, amount)
}
func (_RarityGold *RarityGoldTransactor) Claim(opts *bind.TransactOpts, summoner *big.Int) (*types.Transaction, error) {
	return _RarityGold.contract.Transact(opts, "claim", summoner)
}
func (_RarityGold *RarityGoldSession) Claim(summoner *big.Int) (*types.Transaction, error) {
	return _RarityGold.Contract.Claim(&_RarityGold.TransactOpts, summoner)
}
func (_RarityGold *RarityGoldTransactorSession) Claim(summoner *big.Int) (*types.Transaction, error) {
	return _RarityGold.Contract.Claim(&_RarityGold.TransactOpts, summoner)
}
func (_RarityGold *RarityGoldTransactor) Transfer(opts *bind.TransactOpts, from *big.Int, to *big.Int, amount *big.Int) (*types.Transaction, error) {
	return _RarityGold.contract.Transact(opts, "transfer", from, to, amount)
}
func (_RarityGold *RarityGoldSession) Transfer(from *big.Int, to *big.Int, amount *big.Int) (*types.Transaction, error) {
	return _RarityGold.Contract.Transfer(&_RarityGold.TransactOpts, from, to, amount)
}
func (_RarityGold *RarityGoldTransactorSession) Transfer(from *big.Int, to *big.Int, amount *big.Int) (*types.Transaction, error) {
	return _RarityGold.Contract.Transfer(&_RarityGold.TransactOpts, from, to, amount)
}
func (_RarityGold *RarityGoldTransactor) TransferFrom(opts *bind.TransactOpts, executor *big.Int, from *big.Int, to *big.Int, amount *big.Int) (*types.Transaction, error) {
	return _RarityGold.contract.Transact(opts, "transferFrom", executor, from, to, amount)
}
func (_RarityGold *RarityGoldSession) TransferFrom(executor *big.Int, from *big.Int, to *big.Int, amount *big.Int) (*types.Transaction, error) {
	return _RarityGold.Contract.TransferFrom(&_RarityGold.TransactOpts, executor, from, to, amount)
}
func (_RarityGold *RarityGoldTransactorSession) TransferFrom(executor *big.Int, from *big.Int, to *big.Int, amount *big.Int) (*types.Transaction, error) {
	return _RarityGold.Contract.TransferFrom(&_RarityGold.TransactOpts, executor, from, to, amount)
}
type RarityGoldApprovalIterator struct {
	Event *RarityGoldApproval  
	contract *bind.BoundContract  
	event    string               
	logs chan types.Log         
	sub  ethereum.Subscription  
	done bool                   
	fail error                  
}
func (it *RarityGoldApprovalIterator) Next() bool {
	if it.fail != nil {
		return false
	}
	if it.done {
		select {
		case log := <-it.logs:
			it.Event = new(RarityGoldApproval)
			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
		}
	}
	select {
	case log := <-it.logs:
		it.Event = new(RarityGoldApproval)
		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()
	}
}
func (it *RarityGoldApprovalIterator) Error() error {
	return it.fail
}