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

package bind

import (
	"math/big"
	"strings"

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

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

// AcctManagerABI is the input ABI used to generate the binding from.
const AcctManagerABI = "[{\"constant\":false,\"inputs\":[{\"name\":\"_account\",\"type\":\"address\"},{\"name\":\"_orgId\",\"type\":\"string\"},{\"name\":\"_roleId\",\"type\":\"string\"},{\"name\":\"_adminRole\",\"type\":\"bool\"}],\"name\":\"assignAccountRole\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_orgId\",\"type\":\"string\"}],\"name\":\"removeExistingAdmin\",\"outputs\":[{\"name\":\"voterUpdate\",\"type\":\"bool\"},{\"name\":\"account\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"getAccountDetails\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"string\"},{\"name\":\"\",\"type\":\"string\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getNumberOfAccounts\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_account\",\"type\":\"address\"},{\"name\":\"_orgId\",\"type\":\"string\"}],\"name\":\"validateAccount\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"getAccountRole\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_orgId\",\"type\":\"string\"},{\"name\":\"_account\",\"type\":\"address\"},{\"name\":\"_action\",\"type\":\"uint256\"}],\"name\":\"updateAccountStatus\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_orgId\",\"type\":\"string\"}],\"name\":\"orgAdminExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_aIndex\",\"type\":\"uint256\"}],\"name\":\"getAccountDetailsFromIndex\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"string\"},{\"name\":\"\",\"type\":\"string\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_orgId\",\"type\":\"string\"},{\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addNewAdmin\",\"outputs\":[{\"name\":\"voterUpdate\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_nwAdminRole\",\"type\":\"string\"},{\"name\":\"_oAdminRole\",\"type\":\"string\"}],\"name\":\"setDefaults\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_account\",\"type\":\"address\"},{\"name\":\"_orgId\",\"type\":\"string\"},{\"name\":\"_roleId\",\"type\":\"string\"},{\"name\":\"_status\",\"type\":\"uint256\"}],\"name\":\"assignAdminRole\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_account\",\"type\":\"address\"},{\"name\":\"_orgId\",\"type\":\"string\"},{\"name\":\"_ultParent\",\"type\":\"string\"}],\"name\":\"checkOrgAdmin\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_permUpgradable\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_account\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_orgId\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"_roleId\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"_orgAdmin\",\"type\":\"bool\"},{\"indexed\":false,\"name\":\"_status\",\"type\":\"uint256\"}],\"name\":\"AccountAccessModified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_account\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_orgId\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"_roleId\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"_orgAdmin\",\"type\":\"bool\"}],\"name\":\"AccountAccessRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_account\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_orgId\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"_status\",\"type\":\"uint256\"}],\"name\":\"AccountStatusChanged\",\"type\":\"event\"}]"

var AcctManagerParsedABI, _ = abi.JSON(strings.NewReader(AcctManagerABI))

// AcctManagerBin is the compiled bytecode used for deploying new contracts.
var AcctManagerBin = "0x608060405234801561001057600080fd5b50604051602080613a0c8339810180604052602081101561003057600080fd5b5051600080546001600160a01b039092166001600160a01b03199092169190911790556139aa806100626000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806384b7a84a1161008c578063c214e5e511610066578063c214e5e5146105eb578063cef7f6af14610662578063e3483a9d14610720578063e8b42bf4146107ee576100cf565b806384b7a84a146104ad578063950145cf1461052a578063b2018568146105ce576100cf565b8063143a5604146100d45780631d09dc93146101a65780632aceb53414610237578063309e36ef146103665780636b568d761461038057806381d66b2314610412575b600080fd5b6101a4600480360360808110156100ea57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561011457600080fd5b82018360208201111561012657600080fd5b803590602001918460018302840111600160201b8311171561014757600080fd5b919390929091602081019035600160201b81111561016457600080fd5b82018360208201111561017657600080fd5b803590602001918460018302840111600160201b8311171561019757600080fd5b9193509150351515610927565b005b610214600480360360208110156101bc57600080fd5b810190602081018135600160201b8111156101d657600080fd5b8201836020820111156101e857600080fd5b803590602001918460018302840111600160201b8311171561020957600080fd5b509092509050610d25565b6040805192151583526001600160a01b0390911660208301528051918290030190f35b61025d6004803603602081101561024d57600080fd5b50356001600160a01b03166112b1565b60405180866001600160a01b03166001600160a01b03168152602001806020018060200185815260200184151515158152602001838103835287818151815260200191508051906020019080838360005b838110156102c65781810151838201526020016102ae565b50505050905090810190601f1680156102f35780820380516001836020036101000a031916815260200191505b50838103825286518152865160209182019188019080838360005b8381101561032657818101518382015260200161030e565b50505050905090810190601f1680156103535780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390f35b61036e611509565b60408051918252519081900360200190f35b6103fe6004803603604081101561039657600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156103c057600080fd5b8201836020820111156103d257600080fd5b803590602001918460018302840111600160201b831117156103f357600080fd5b509092509050611510565b604080519115158252519081900360200190f35b6104386004803603602081101561042857600080fd5b50356001600160a01b031661166b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561047257818101518382015260200161045a565b50505050905090810190601f16801561049f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101a4600480360360608110156104c357600080fd5b810190602081018135600160201b8111156104dd57600080fd5b8201836020820111156104ef57600080fd5b803590602001918460018302840111600160201b8311171561051057600080fd5b91935091506001600160a01b0381351690602001356117c1565b6103fe6004803603602081101561054057600080fd5b810190602081018135600160201b81111561055a57600080fd5b82018360208201111561056c57600080fd5b803590602001918460018302840111600160201b8311171561058d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611ef4945050505050565b61025d600480360360208110156105e457600080fd5b503561206f565b6103fe6004803603604081101561060157600080fd5b810190602081018135600160201b81111561061b57600080fd5b82018360208201111561062d57600080fd5b803590602001918460018302840111600160201b8311171561064e57600080fd5b9193509150356001600160a01b0316612259565b6101a46004803603604081101561067857600080fd5b810190602081018135600160201b81111561069257600080fd5b8201836020820111156106a457600080fd5b803590602001918460018302840111600160201b831117156106c557600080fd5b919390929091602081019035600160201b8111156106e257600080fd5b8201836020820111156106f457600080fd5b803590602001918460018302840111600160201b8311171561071557600080fd5b5090925090506128ab565b6101a46004803603608081101561073657600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561076057600080fd5b82018360208201111561077257600080fd5b803590602001918460018302840111600160201b8311171561079357600080fd5b919390929091602081019035600160201b8111156107b057600080fd5b8201836020820111156107c257600080fd5b803590602001918460018302840111600160201b831117156107e357600080fd5b919350915035612997565b6103fe6004803603606081101561080457600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561082e57600080fd5b82018360208201111561084057600080fd5b803590602001918460018302840111600160201b8311171561086157600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156108b357600080fd5b8201836020820111156108c557600080fd5b803590602001918460018302840111600160201b831117156108e657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612d09945050505050565b6000809054906101000a90046001600160a01b03166001600160a01b0316630e32cf906040518163ffffffff1660e01b815260040160206040518083038186803b15801561097457600080fd5b505afa158015610988573d6000803e3d6000fd5b505050506040513d602081101561099e57600080fd5b50516001600160a01b031633146109f35760408051600160e51b62461bcd02815260206004820152600e6024820152600160911b6d34b73b30b634b21031b0b63632b902604482015290519081900360640190fd5b6040805160208082019081526004805460026000196101006001841615020190911604938301849052929091829160609091019084908015610a765780601f10610a4b57610100808354040283529160200191610a76565b820191906000526020600020905b815481529060010190602001808311610a5957829003601f168201915b50509250505060405160208183030381529060405280519060200120838360405160200180806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505093505050506040516020818303038152906040528051906020012014158015610c6457506040805160208082019081526005805460026000196101006001841615020190911604938301849052929091829160609091019084908015610b715780601f10610b4657610100808354040283529160200191610b71565b820191906000526020600020905b815481529060010190602001808311610b5457829003601f168201915b50509250505060405160208183030381529060405280519060200120838360405160200180806020018281038252848482818152602001925080828437600081840152601f19601f82011690508083019250505093505050506040516020818303038152906040526040516020018080602001828103825283818151815260200191508051906020019080838360005b83811015610c19578181015183820152602001610c01565b50505050905090810190601f168015610c465780820380516001836020036101000a031916815260200191505b50925050506040516020818303038152906040528051906020012014155b1515610ca457604051600160e51b62461bcd0281526004018080602001828103825260408152602001806138da6040913960400191505060405180910390fd5b610d1d8686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881529250889150879081908401838280828437600092019190915250600292508791506132709050565b505050505050565b6000805460408051600160e41b62e32cf9028152905183926001600160a01b031691630e32cf90916004808301926020929190829003018186803b158015610d6c57600080fd5b505afa158015610d80573d6000803e3d6000fd5b505050506040513d6020811015610d9657600080fd5b50516001600160a01b03163314610deb5760408051600160e51b62461bcd02815260206004820152600e6024820152600160911b6d34b73b30b634b21031b0b63632b902604482015290519081900360640190fd5b610e2a84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ef492505050565b156112a3576000610eb260066000878760405160200180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405160208183030381529060405280519060200120815260200190815260200160002060009054906101000a90046001600160a01b031661364a565b90506006600182815481101515610ec557fe5b9060005260206000209060050201600301819055506000600182815481101515610eeb57fe5b906000526020600020906005020160040160006101000a81548160ff0219169083151502179055507f68e62a03aeb0a125c2fc869eed72f2fca473680987bdd680c093a534e17cc776600182815481101515610f4357fe5b6000918252602090912060059091020154600180546001600160a01b039092169184908110610f6e57fe5b9060005260206000209060050201600101600184815481101515610f8e57fe5b9060005260206000209060050201600201600185815481101515610fae57fe5b60009182526020909120600460059092020101546001805460ff9092169187908110610fd657fe5b600091825260209182902060036005909202010154604080516001600160a01b038816815284151560608201526080810183905260a0938101848152875460026000196101006001841615020190911604948201859052929390929183019060c0840190889080156110895780601f1061105e57610100808354040283529160200191611089565b820191906000526020600020905b81548152906001019060200180831161106c57829003601f168201915b50508381038252865460026000196101006001841615020190911604808252602090910190879080156110fd5780601f106110d2576101008083540402835291602001916110fd565b820191906000526020600020905b8154815290600101906020018083116110e057829003601f168201915b505097505050505050505060405180910390a160408051602080820190815260048054600260001961010060018416150201909116049383018490529290918291606090910190849080156111935780601f1061116857610100808354040283529160200191611193565b820191906000526020600020905b81548152906001019060200180831161117657829003601f168201915b505092505050604051602081830303815290604052805190602001206001828154811015156111be57fe5b6000918252602091829020604080518085019485526002600590940290920183018054600019610100600183161502011693909304908201819052919291829160600190849080156112515780601f1061122657610100808354040283529160200191611251565b820191906000526020600020905b81548152906001019060200180831161123457829003601f168201915b505092505050604051602081830303815290604052805190602001201460018281548110151561127d57fe5b60009182526020909120600590910201549093506001600160a01b031691506112aa9050565b5060009050805b9250929050565b6001600160a01b038116600090815260026020526040812054606090819083908190151561131857505060408051808201825260048152600160e01b634e4f4e45026020808301919091528251908101909252600080835286955090935090915080611500565b60006113238761364a565b905060018181548110151561133457fe5b6000918252602090912060059091020154600180546001600160a01b03909216918390811061135f57fe5b906000526020600020906005020160010160018381548110151561137f57fe5b906000526020600020906005020160020160018481548110151561139f57fe5b9060005260206000209060050201600301546001858154811015156113c057fe5b600091825260209182902060046005909202010154845460408051601f6002600019600186161561010002019094169390930492830185900485028101850190915281815260ff9092169286919083018282801561145f5780601f106114345761010080835404028352916020019161145f565b820191906000526020600020905b81548152906001019060200180831161144257829003601f168201915b5050865460408051602060026001851615610100026000190190941693909304601f8101849004840282018401909252818152959950889450925084019050828280156114ed5780601f106114c2576101008083540402835291602001916114ed565b820191906000526020600020905b8154815290600101906020018083116114d057829003601f168201915b5050505050925095509550955095509550505b91939590929450565b6001545b90565b6001600160a01b038316600090815260026020526040812054151561153757506001611664565b60006115428561364a565b9050838360405160200180806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509350505050604051602081830303815290604052805190602001206001828154811015156115a657fe5b906000526020600020906005020160010160405160200180806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156116435780601f1061161857610100808354040283529160200191611643565b820191906000526020600020905b81548152906001019060200180831161162657829003601f168201915b50509250505060405160208183030381529060405280519060200120149150505b9392505050565b6001600160a01b03811660009081526002602052604090205460609015156116b157506040805180820190915260048152600160e01b634e4f4e450260208201526117bc565b60006116bc8361364a565b90506001818154811015156116cd57fe5b906000526020600020906005020160030154600014151561179b5760018054829081106116f657fe5b600091825260209182902060026005909202018101805460408051601f60001961010060018616150201909316949094049182018590048502840185019052808352919290919083018282801561178e5780601f106117635761010080835404028352916020019161178e565b820191906000526020600020905b81548152906001019060200180831161177157829003601f168201915b50505050509150506117bc565b50506040805180820190915260048152600160e01b634e4f4e450260208201525b919050565b6000809054906101000a90046001600160a01b03166001600160a01b0316630e32cf906040518163ffffffff1660e01b815260040160206040518083038186803b15801561180e57600080fd5b505afa158015611822573d6000803e3d6000fd5b505050506040513d602081101561183857600080fd5b50516001600160a01b0316331461188d5760408051600160e51b62461bcd02815260206004820152600e6024820152600160911b6d34b73b30b634b21031b0b63632b902604482015290519081900360640190fd5b83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506001600160a01b0387168152600260205260409020548693501515915061193290505760408051600160e51b62461bcd02815260206004820152601760248201527f6163636f756e7420646f6573206e6f7420657869737473000000000000000000604482015290519081900360640190fd5b816040516020018080602001828103825283818151815260200191508051906020019080838360005b8381101561197357818101518382015260200161195b565b50505050905090810190601f1680156119a05780820380516001836020036101000a031916815260200191505b50925050506040516020818303038152906040528051906020012060016119c68361364a565b815481106119d057fe5b90600052602060002090600502016001016040516020018080602001828103825283818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015611a6d5780601f10611a4257610100808354040283529160200191611a6d565b820191906000526020600020905b815481529060010190602001808311611a5057829003601f168201915b50509250505060405160208183030381529060405280519060200120141515611ae05760408051600160e51b62461bcd02815260206004820152601860248201527f6163636f756e7420696e20646966666572656e74206f72670000000000000000604482015290519081900360640190fd5b600083118015611af05750600683105b1515611b465760408051600160e51b62461bcd02815260206004820152601d60248201527f696e76616c696420737461747573206368616e67652072657175657374000000604482015290519081900360640190fd5b611b948487878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525060408051602081019091529081529250612d09915050565b151560011415611bd857604051600160e51b62461bcd02815260040180806020018281038252603181526020018061394e6031913960400191505060405180910390fd5b60008360011415611c55576001611bee8661364a565b81548110611bf857fe5b9060005260206000209060050201600301546002141515611c4d57604051600160e51b62461bcd0281526004018080602001828103825260398152602001806138796039913960400191505060405180910390fd5b506004611e3e565b8360021415611cd0576001611c698661364a565b81548110611c7357fe5b9060005260206000209060050201600301546004141515611cc857604051600160e51b62461bcd02815260040180806020018281038252603c81526020018061383d603c913960400191505060405180910390fd5b506002611e3e565b8360031415611d4c576001611ce48661364a565b81548110611cee57fe5b906000526020600020906005020160030154600514151515611d4457604051600160e51b62461bcd0281526004018080602001828103825260388152602001806138056038913960400191505060405180910390fd5b506005611e3e565b8360041415611dc7576001611d608661364a565b81548110611d6a57fe5b9060005260206000209060050201600301546005141515611dbf57604051600160e51b62461bcd02815260040180806020018281038252603481526020018061391a6034913960400191505060405180910390fd5b506007611e3e565b8360051415611e3e576001611ddb8661364a565b81548110611de557fe5b9060005260206000209060050201600301546007141515611e3a57604051600160e51b62461bcd0281526004018080602001828103825260388152602001806137cd6038913960400191505060405180910390fd5b5060025b806001611e4a8761364a565b81548110611e5457fe5b9060005260206000209060050201600301819055507f36b0ea38154dec5e98b6bf928b971a9db5e8cd4b6946350e9e43fb9848c70b258588888460405180856001600160a01b03166001600160a01b03168152602001806020018381526020018281038252858582818152602001925080828437600083820152604051601f909101601f191690920182900397509095505050505050a150505050505050565b6000806001600160a01b031660066000846040516020018080602001828103825283818151815260200191508051906020019080838360005b83811015611f45578181015183820152602001611f2d565b50505050905090810190601f168015611f725780820380516001836020036101000a031916815260200191505b5060408051601f19818403018152918152815160209283012086529085019590955250505001600020546001600160a01b03161461206757600060066000846040516020018080602001828103825283818151815260200191508051906020019080838360005b83811015611ff1578181015183820152602001611fd9565b50505050905090810190601f16801561201e5780820380516001836020036101000a031916815260200191505b5060408051601f19818403018152918152815160209283012086529085019590955250505001600020546001600160a01b0316905061205c81613669565b6002149150506117bc565b506000919050565b600060608060008060018681548110151561208657fe5b6000918252602090912060059091020154600180546001600160a01b0390921691889081106120b157fe5b90600052602060002090600502016001016001888154811015156120d157fe5b90600052602060002090600502016002016001898154811015156120f157fe5b90600052602060002090600502016003015460018a81548110151561211257fe5b600091825260209182902060046005909202010154845460408051601f6002600019600186161561010002019094169390930492830185900485028101850190915281815260ff909216928691908301828280156121b15780601f10612186576101008083540402835291602001916121b1565b820191906000526020600020905b81548152906001019060200180831161219457829003601f168201915b5050865460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529599508894509250840190508282801561223f5780601f106122145761010080835404028352916020019161223f565b820191906000526020600020905b81548152906001019060200180831161222257829003601f168201915b505050505092509450945094509450945091939590929450565b60008060009054906101000a90046001600160a01b03166001600160a01b0316630e32cf906040518163ffffffff1660e01b815260040160206040518083038186803b1580156122a857600080fd5b505afa1580156122bc573d6000803e3d6000fd5b505050506040513d60208110156122d257600080fd5b50516001600160a01b031633146123275760408051600160e51b62461bcd02815260206004820152600e6024820152600160911b6d34b73b30b634b21031b0b63632b902604482015290519081900360640190fd5b60606123328361166b565b9050600061233f84613669565b9050600061234c8561364a565b604080516020808201908152600580546002600019610100600184161502019091160493830184905293945091829160600190849080156123ce5780601f106123a3576101008083540402835291602001916123ce565b820191906000526020600020905b8154815290600101906020018083116123b157829003601f168201915b50509250505060405160208183030381529060405280519060200120836040516020018080602001828103825283818151815260200191508051906020019080838360005b8381101561242b578181015183820152602001612413565b50505050905090810190601f1680156124585780820380516001836020036101000a031916815260200191505b5092505050604051602081830303815290604052805190602001201480156124805750816001145b15612510578460066000898960405160200180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405160208183030381529060405280519060200120815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b600260018281548110151561252157fe5b9060005260206000209060050201600301819055506001808281548110151561254657fe5b906000526020600020906005020160040160006101000a81548160ff0219169083151502179055507f68e62a03aeb0a125c2fc869eed72f2fca473680987bdd680c093a534e17cc7768560018381548110151561259f57fe5b90600052602060002090600502016001016001848154811015156125bf57fe5b90600052602060002090600502016002016001858154811015156125df57fe5b60009182526020909120600460059092020101546001805460ff909216918790811061260757fe5b600091825260209182902060036005909202010154604080516001600160a01b038816815284151560608201526080810183905260a0938101848152875460026000196101006001841615020190911604948201859052929390929183019060c0840190889080156126ba5780601f1061268f576101008083540402835291602001916126ba565b820191906000526020600020905b81548152906001019060200180831161269d57829003601f168201915b505083810382528654600260001961010060018416150201909116048082526020909101908790801561272e5780601f106127035761010080835404028352916020019161272e565b820191906000526020600020905b81548152906001019060200180831161271157829003601f168201915b505097505050505050505060405180910390a160408051602080820190815260048054600260001961010060018416150201909116049383018490529290918291606090910190849080156127c45780601f10612799576101008083540402835291602001916127c4565b820191906000526020600020905b8154815290600101906020018083116127a757829003601f168201915b505092505050604051602081830303815290604052805190602001206001828154811015156127ef57fe5b6000918252602091829020604080518085019485526002600590940290920183018054600019610100600183161502011693909304908201819052919291829160600190849080156128825780601f1061285757610100808354040283529160200191612882565b820191906000526020600020905b81548152906001019060200180831161286557829003601f168201915b505092505050604051602081830303815290604052805190602001201493505050509392505050565b6000809054906101000a90046001600160a01b03166001600160a01b0316630e32cf906040518163ffffffff1660e01b815260040160206040518083038186803b1580156128f857600080fd5b505afa15801561290c573d6000803e3d6000fd5b505050506040513d602081101561292257600080fd5b50516001600160a01b031633146129775760408051600160e51b62461bcd02815260206004820152600e6024820152600160911b6d34b73b30b634b21031b0b63632b902604482015290519081900360640190fd5b612983600485856136c6565b50612990600583836136c6565b5050505050565b6000809054906101000a90046001600160a01b03166001600160a01b0316630e32cf906040518163ffffffff1660e01b815260040160206040518083038186803b1580156129e457600080fd5b505afa1580156129f8573d6000803e3d6000fd5b505050506040513d6020811015612a0e57600080fd5b50516001600160a01b03163314612a635760408051600160e51b62461bcd02815260206004820152600e6024820152600160911b6d34b73b30b634b21031b0b63632b902604482015290519081900360640190fd5b6040805160208082019081526005805460026000196101006001841615020190911604938301849052929091829160609091019084908015612ae65780601f10612abb57610100808354040283529160200191612ae6565b820191906000526020600020905b815481529060010190602001808311612ac957829003601f168201915b50509250505060405160208183030381529060405280519060200120838360405160200180806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509350505050604051602081830303815290604052805190602001201480612c5057506040805160208082019081526004805460026000196101006001841615020190911604938301849052929091829160609091019084908015612bdf5780601f10612bb457610100808354040283529160200191612bdf565b820191906000526020600020905b815481529060010190602001808311612bc257829003601f168201915b50509250505060405160208183030381529060405280519060200120838360405160200180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405160208183030381529060405280519060200120145b1515612c9057604051600160e51b62461bcd0281526004018080602001828103825260288152602001806138b26028913960400191505060405180910390fd5b610d1d8686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881529250889150879081908401838280828437600092019190915250879250600191506132709050565b60408051602080820190815260048054600260001961010060018416150201909116049383018490526000939092829160609091019084908015612d8e5780601f10612d6357610100808354040283529160200191612d8e565b820191906000526020600020905b815481529060010190602001808311612d7157829003601f168201915b50509250505060405160208183030381529060405280519060200120612db38561166b565b6040516020018080602001828103825283818151815260200191508051906020019080838360005b83811015612df3578181015183820152602001612ddb565b50505050905090810190601f168015612e205780820380516001836020036101000a031916815260200191505b5092505050604051602081830303815290604052805190602001201415613101576000612e4c8561364a565b9050836040516020018080602001828103825283818151815260200191508051906020019080838360005b83811015612e8f578181015183820152602001612e77565b50505050905090810190601f168015612ebc5780820380516001836020036101000a031916815260200191505b509250505060405160208183030381529060405280519060200120600182815481101515612ee657fe5b90600052602060002090600502016001016040516020018080602001828103825283818154600181600116156101000203166002900481526020019150805460018160011615610100020316600290048015612f835780601f10612f5857610100808354040283529160200191612f83565b820191906000526020600020905b815481529060010190602001808311612f6657829003601f168201915b5050925050506040516020818303038152906040528051906020012014806130f95750826040516020018080602001828103825283818151815260200191508051906020019080838360005b83811015612fe7578181015183820152602001612fcf565b50505050905090810190601f1680156130145780820380516001836020036101000a031916815260200191505b50925050506040516020818303038152906040528051906020012060018281548110151561303e57fe5b906000526020600020906005020160010160405160200180806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156130db5780601f106130b0576101008083540402835291602001916130db565b820191906000526020600020905b8154815290600101906020018083116130be57829003601f168201915b50509250505060405160208183030381529060405280519060200120145b915050611664565b836001600160a01b031660066000856040516020018080602001828103825283818151815260200191508051906020019080838360005b83811015613150578181015183820152602001613138565b50505050905090810190601f16801561317d5780820380516001836020036101000a031916815260200191505b5060408051601f19818403018152918152815160209283012086529085019590955250505001600020546001600160a01b031614806132685750836001600160a01b031660066000846040516020018080602001828103825283818151815260200191508051906020019080838360005b838110156132065781810151838201526020016131ee565b50505050905090810190601f1680156132335780820380516001836020036101000a031916815260200191505b5060408051601f19818403018152918152815160209283012086529085019590955250505001600020546001600160a01b0316145b949350505050565b6000809054906101000a90046001600160a01b03166001600160a01b0316630e32cf906040518163ffffffff1660e01b815260040160206040518083038186803b1580156132bd57600080fd5b505afa1580156132d1573d6000803e3d6000fd5b505050506040513d60208110156132e757600080fd5b50516001600160a01b0316331461333c5760408051600160e51b62461bcd02815260206004820152600e6024820152600160911b6d34b73b30b634b21031b0b63632b902604482015290519081900360640190fd5b60006133478661364a565b6001600160a01b038716600090815260026020526040902054909150156133f9578360018281548110151561337857fe5b9060005260206000209060050201600201908051906020019061339c929190613744565b50826001828154811015156133ad57fe5b906000526020600020906005020160030181905550816001828154811015156133d257fe5b60009182526020909120600590910201600401805460ff1916911515919091179055613514565b600380546001908101918290556001600160a01b03888116600081815260026020908152604080832096909655855160a0810187529283528281018b81529583018a905260608301899052871515608084015284548086018087559590925282517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6600590930292830180546001600160a01b0319169190951617845594518051949592946134d1937fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf7909301929190910190613744565b50604082015180516134ed916002840191602090910190613744565b50606082015160038201556080909101516004909101805460ff1916911515919091179055505b7f68e62a03aeb0a125c2fc869eed72f2fca473680987bdd680c093a534e17cc776868686858760405180866001600160a01b03166001600160a01b03168152602001806020018060200185151515158152602001848152602001838103835287818151815260200191508051906020019080838360005b838110156135a357818101518382015260200161358b565b50505050905090810190601f1680156135d05780820380516001836020036101000a031916815260200191505b50838103825286518152865160209182019188019080838360005b838110156136035781810151838201526020016135eb565b50505050905090810190601f1680156136305780820380516001836020036101000a031916815260200191505b5097505050505050505060405180910390a1505050505050565b6001600160a01b03166000908152600260205260409020546000190190565b6001600160a01b0381166000908152600260205260408120541515613690575060006117bc565b600061369b8361364a565b90506001818154811015156136ac57fe5b906000526020600020906005020160030154915050919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106137075782800160ff19823516178555613734565b82800160010185558215613734579182015b82811115613734578235825591602001919060010190613719565b506137409291506137b2565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061378557805160ff1916838001178555613734565b82800160010185558215613734579182015b82811115613734578251825591602001919060010190613797565b61150d91905b8082111561374057600081556001016137b856fe6163636f756e74207265636f76657279206e6f7420696e697469617465642e206f7065726174696f6e2063616e6e6f7420626520646f6e656163636f756e7420697320616c726561647920626c61636b6c69737465642e206f7065726174696f6e2063616e6e6f7420626520646f6e656163636f756e74206973206e6f7420696e2073757370656e646564207374617475732e206f7065726174696f6e2063616e6e6f7420626520646f6e656163636f756e74206973206e6f7420696e20616374697665207374617475732e206f7065726174696f6e2063616e6e6f7420626520646f6e6563616e2062652063616c6c656420746f2061737369676e2061646d696e20726f6c6573206f6e6c7963616e6e6f742062652063616c6c65642066726f2061737369676e696e67206f72672061646d696e20616e64206e6574776f726b2061646d696e20726f6c65736163636f756e74206973206e6f7420626c61636b6c69737465642e206f7065726174696f6e2063616e6e6f7420626520646f6e65737461747573206368616e6765206e6f7420706f737369626c6520666f72206f72672061646d696e206163636f756e7473a165627a7a723058203af90e45bb57e7b90add2e34a684e4b9db8ab4db25d7f2ef46dca296b60e11490029"

// DeployAcctManager deploys a new Ethereum contract, binding an instance of AcctManager to it.
func DeployAcctManager(auth *bind.TransactOpts, backend bind.ContractBackend, _permUpgradable common.Address) (common.Address, *types.Transaction, *AcctManager, error) {
	parsed, err := abi.JSON(strings.NewReader(AcctManagerABI))
	if err != nil {
		return common.Address{}, nil, nil, err
	}

	address, tx, contract, err := bind.DeployContract(auth, parsed, common.FromHex(AcctManagerBin), backend, _permUpgradable)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &AcctManager{AcctManagerCaller: AcctManagerCaller{contract: contract}, AcctManagerTransactor: AcctManagerTransactor{contract: contract}, AcctManagerFilterer: AcctManagerFilterer{contract: contract}}, nil
}

// AcctManager is an auto generated Go binding around an Ethereum contract.
type AcctManager struct {
	AcctManagerCaller     // Read-only binding to the contract
	AcctManagerTransactor // Write-only binding to the contract
	AcctManagerFilterer   // Log filterer for contract events
}

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

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

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

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

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

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

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

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

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

// NewAcctManager creates a new instance of AcctManager, bound to a specific deployed contract.
func NewAcctManager(address common.Address, backend bind.ContractBackend) (*AcctManager, error) {
	contract, err := bindAcctManager(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &AcctManager{AcctManagerCaller: AcctManagerCaller{contract: contract}, AcctManagerTransactor: AcctManagerTransactor{contract: contract}, AcctManagerFilterer: AcctManagerFilterer{contract: contract}}, nil
}

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

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

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

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

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

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

// CheckOrgAdmin is a free data retrieval call binding the contract method 0xe8b42bf4.
//
// Solidity: function checkOrgAdmin(address _account, string _orgId, string _ultParent) view returns(bool)
func (_AcctManager *AcctManagerCaller) CheckOrgAdmin(opts *bind.CallOpts, _account common.Address, _orgId string, _ultParent string) (bool, error) {
	var out []interface{}
	err := _AcctManager.contract.Call(opts, &out, "checkOrgAdmin", _account, _orgId, _ultParent)

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

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

	return out0, err

}

// CheckOrgAdmin is a free data retrieval call binding the contract method 0xe8b42bf4.
//
// Solidity: function checkOrgAdmin(address _account, string _orgId, string _ultParent) view returns(bool)
func (_AcctManager *AcctManagerSession) CheckOrgAdmin(_account common.Address, _orgId string, _ultParent string) (bool, error) {
	return _AcctManager.Contract.CheckOrgAdmin(&_AcctManager.CallOpts, _account, _orgId, _ultParent)
}

// CheckOrgAdmin is a free data retrieval call binding the contract method 0xe8b42bf4.
//
// Solidity: function checkOrgAdmin(address _account, string _orgId, string _ultParent) view returns(bool)
func (_AcctManager *AcctManagerCallerSession) CheckOrgAdmin(_account common.Address, _orgId string, _ultParent string) (bool, error) {
	return _AcctManager.Contract.CheckOrgAdmin(&_AcctManager.CallOpts, _account, _orgId, _ultParent)
}

// GetAccountDetails is a free data retrieval call binding the contract method 0x2aceb534.
//
// Solidity: function getAccountDetails(address _account) view returns(address, string, string, uint256, bool)
func (_AcctManager *AcctManagerCaller) GetAccountDetails(opts *bind.CallOpts, _account common.Address) (common.Address, string, string, *big.Int, bool, error) {
	var out []interface{}
	err := _AcctManager.contract.Call(opts, &out, "getAccountDetails", _account)

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

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
	out1 := *abi.ConvertType(out[1], new(string)).(*string)
	out2 := *abi.ConvertType(out[2], new(string)).(*string)
	out3 := *abi.ConvertType(out[3], new(*big.Int)).(**big.Int)
	out4 := *abi.ConvertType(out[4], new(bool)).(*bool)

	return out0, out1, out2, out3, out4, err

}

// GetAccountDetails is a free data retrieval call binding the contract method 0x2aceb534.
//
// Solidity: function getAccountDetails(address _account) view returns(address, string, string, uint256, bool)
func (_AcctManager *AcctManagerSession) GetAccountDetails(_account common.Address) (common.Address, string, string, *big.Int, bool, error) {
	return _AcctManager.Contract.GetAccountDetails(&_AcctManager.CallOpts, _account)
}

// GetAccountDetails is a free data retrieval call binding the contract method 0x2aceb534.
//
// Solidity: function getAccountDetails(address _account) view returns(address, string, string, uint256, bool)
func (_AcctManager *AcctManagerCallerSession) GetAccountDetails(_account common.Address) (common.Address, string, string, *big.Int, bool, error) {
	return _AcctManager.Contract.GetAccountDetails(&_AcctManager.CallOpts, _account)
}

// GetAccountDetailsFromIndex is a free data retrieval call binding the contract method 0xb2018568.
//
// Solidity: function getAccountDetailsFromIndex(uint256 _aIndex) view returns(address, string, string, uint256, bool)
func (_AcctManager *AcctManagerCaller) GetAccountDetailsFromIndex(opts *bind.CallOpts, _aIndex *big.Int) (common.Address, string, string, *big.Int, bool, error) {
	var out []interface{}
	err := _AcctManager.contract.Call(opts, &out, "getAccountDetailsFromIndex", _aIndex)

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

	out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
	out1 := *abi.ConvertType(out[1], new(string)).(*string)
	out2 := *abi.ConvertType(out[2], new(string)).(*string)
	out3 := *abi.ConvertType(out[3], new(*big.Int)).(**big.Int)
	out4 := *abi.ConvertType(out[4], new(bool)).(*bool)

	return out0, out1, out2, out3, out4, err

}

// GetAccountDetailsFromIndex is a free data retrieval call binding the contract method 0xb2018568.
//
// Solidity: function getAccountDetailsFromIndex(uint256 _aIndex) view returns(address, string, string, uint256, bool)
func (_AcctManager *AcctManagerSession) GetAccountDetailsFromIndex(_aIndex *big.Int) (common.Address, string, string, *big.Int, bool, error) {
	return _AcctManager.Contract.GetAccountDetailsFromIndex(&_AcctManager.CallOpts, _aIndex)
}

// GetAccountDetailsFromIndex is a free data retrieval call binding the contract method 0xb2018568.
//
// Solidity: function getAccountDetailsFromIndex(uint256 _aIndex) view returns(address, string, string, uint256, bool)
func (_AcctManager *AcctManagerCallerSession) GetAccountDetailsFromIndex(_aIndex *big.Int) (common.Address, string, string, *big.Int, bool, error) {
	return _AcctManager.Contract.GetAccountDetailsFromIndex(&_AcctManager.CallOpts, _aIndex)
}

// GetAccountRole is a free data retrieval call binding the contract method 0x81d66b23.
//
// Solidity: function getAccountRole(address _account) view returns(string)
func (_AcctManager *AcctManagerCaller) GetAccountRole(opts *bind.CallOpts, _account common.Address) (string, error) {
	var out []interface{}
	err := _AcctManager.contract.Call(opts, &out, "getAccountRole", _account)

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

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

	return out0, err

}

// GetAccountRole is a free data retrieval call binding the contract method 0x81d66b23.
//
// Solidity: function getAccountRole(address _account) view returns(string)
func (_AcctManager *AcctManagerSession) GetAccountRole(_account common.Address) (string, error) {
	return _AcctManager.Contract.GetAccountRole(&_AcctManager.CallOpts, _account)
}

// GetAccountRole is a free data retrieval call binding the contract method 0x81d66b23.
//
// Solidity: function getAccountRole(address _account) view returns(string)
func (_AcctManager *AcctManagerCallerSession) GetAccountRole(_account common.Address) (string, error) {
	return _AcctManager.Contract.GetAccountRole(&_AcctManager.CallOpts, _account)
}

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

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

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

	return out0, err

}

// GetNumberOfAccounts is a free data retrieval call binding the contract method 0x309e36ef.
//
// Solidity: function getNumberOfAccounts() view returns(uint256)
func (_AcctManager *AcctManagerSession) GetNumberOfAccounts() (*big.Int, error) {
	return _AcctManager.Contract.GetNumberOfAccounts(&_AcctManager.CallOpts)
}

// GetNumberOfAccounts is a free data retrieval call binding the contract method 0x309e36ef.
//
// Solidity: function getNumberOfAccounts() view returns(uint256)
func (_AcctManager *AcctManagerCallerSession) GetNumberOfAccounts() (*big.Int, error) {
	return _AcctManager.Contract.GetNumberOfAccounts(&_AcctManager.CallOpts)
}

// OrgAdminExists is a free data retrieval call binding the contract method 0x950145cf.
//
// Solidity: function orgAdminExists(string _orgId) view returns(bool)
func (_AcctManager *AcctManagerCaller) OrgAdminExists(opts *bind.CallOpts, _orgId string) (bool, error) {
	var out []interface{}
	err := _AcctManager.contract.Call(opts, &out, "orgAdminExists", _orgId)

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

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

	return out0, err

}

// OrgAdminExists is a free data retrieval call binding the contract method 0x950145cf.
//
// Solidity: function orgAdminExists(string _orgId) view returns(bool)
func (_AcctManager *AcctManagerSession) OrgAdminExists(_orgId string) (bool, error) {
	return _AcctManager.Contract.OrgAdminExists(&_AcctManager.CallOpts, _orgId)
}

// OrgAdminExists is a free data retrieval call binding the contract method 0x950145cf.
//
// Solidity: function orgAdminExists(string _orgId) view returns(bool)
func (_AcctManager *AcctManagerCallerSession) OrgAdminExists(_orgId string) (bool, error) {
	return _AcctManager.Contract.OrgAdminExists(&_AcctManager.CallOpts, _orgId)
}

// ValidateAccount is a free data retrieval call binding the contract method 0x6b568d76.
//
// Solidity: function validateAccount(address _account, string _orgId) view returns(bool)
func (_AcctManager *AcctManagerCaller) ValidateAccount(opts *bind.CallOpts, _account common.Address, _orgId string) (bool, error) {
	var out []interface{}
	err := _AcctManager.contract.Call(opts, &out, "validateAccount", _account, _orgId)

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

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

	return out0, err

}

// ValidateAccount is a free data retrieval call binding the contract method 0x6b568d76.
//
// Solidity: function validateAccount(address _account, string _orgId) view returns(bool)
func (_AcctManager *AcctManagerSession) ValidateAccount(_account common.Address, _orgId string) (bool, error) {
	return _AcctManager.Contract.ValidateAccount(&_AcctManager.CallOpts, _account, _orgId)
}

// ValidateAccount is a free data retrieval call binding the contract method 0x6b568d76.
//
// Solidity: function validateAccount(address _account, string _orgId) view returns(bool)
func (_AcctManager *AcctManagerCallerSession) ValidateAccount(_account common.Address, _orgId string) (bool, error) {
	return _AcctManager.Contract.ValidateAccount(&_AcctManager.CallOpts, _account, _orgId)
}

// AddNewAdmin is a paid mutator transaction binding the contract method 0xc214e5e5.
//
// Solidity: function addNewAdmin(string _orgId, address _account) returns(bool voterUpdate)
func (_AcctManager *AcctManagerTransactor) AddNewAdmin(opts *bind.TransactOpts, _orgId string, _account common.Address) (*types.Transaction, error) {
	return _AcctManager.contract.Transact(opts, "addNewAdmin", _orgId, _account)
}

// AddNewAdmin is a paid mutator transaction binding the contract method 0xc214e5e5.
//
// Solidity: function addNewAdmin(string _orgId, address _account) returns(bool voterUpdate)
func (_AcctManager *AcctManagerSession) AddNewAdmin(_orgId string, _account common.Address) (*types.Transaction, error) {
	return _AcctManager.Contract.AddNewAdmin(&_AcctManager.TransactOpts, _orgId, _account)
}

// AddNewAdmin is a paid mutator transaction binding the contract method 0xc214e5e5.
//
// Solidity: function addNewAdmin(string _orgId, address _account) returns(bool voterUpdate)
func (_AcctManager *AcctManagerTransactorSession) AddNewAdmin(_orgId string, _account common.Address) (*types.Transaction, error) {
	return _AcctManager.Contract.AddNewAdmin(&_AcctManager.TransactOpts, _orgId, _account)
}

// AssignAccountRole is a paid mutator transaction binding the contract method 0x143a5604.
//
// Solidity: function assignAccountRole(address _account, string _orgId, string _roleId, bool _adminRole) returns()
func (_AcctManager *AcctManagerTransactor) AssignAccountRole(opts *bind.TransactOpts, _account common.Address, _orgId string, _roleId string, _adminRole bool) (*types.Transaction, error) {
	return _AcctManager.contract.Transact(opts, "assignAccountRole", _account, _orgId, _roleId, _adminRole)
}

// AssignAccountRole is a paid mutator transaction binding the contract method 0x143a5604.
//
// Solidity: function assignAccountRole(address _account, string _orgId, string _roleId, bool _adminRole) returns()
func (_AcctManager *AcctManagerSession) AssignAccountRole(_account common.Address, _orgId string, _roleId string, _adminRole bool) (*types.Transaction, error) {
	return _AcctManager.Contract.AssignAccountRole(&_AcctManager.TransactOpts, _account, _orgId, _roleId, _adminRole)
}

// AssignAccountRole is a paid mutator transaction binding the contract method 0x143a5604.
//
// Solidity: function assignAccountRole(address _account, string _orgId, string _roleId, bool _adminRole) returns()
func (_AcctManager *AcctManagerTransactorSession) AssignAccountRole(_account common.Address, _orgId string, _roleId string, _adminRole bool) (*types.Transaction, error) {
	return _AcctManager.Contract.AssignAccountRole(&_AcctManager.TransactOpts, _account, _orgId, _roleId, _adminRole)
}

// AssignAdminRole is a paid mutator transaction binding the contract method 0xe3483a9d.
//
// Solidity: function assignAdminRole(address _account, string _orgId, string _roleId, uint256 _status) returns()
func (_AcctManager *AcctManagerTransactor) AssignAdminRole(opts *bind.TransactOpts, _account common.Address, _orgId string, _roleId string, _status *big.Int) (*types.Transaction, error) {
	return _AcctManager.contract.Transact(opts, "assignAdminRole", _account, _orgId, _roleId, _status)
}

// AssignAdminRole is a paid mutator transaction binding the contract method 0xe3483a9d.
//
// Solidity: function assignAdminRole(address _account, string _orgId, string _roleId, uint256 _status) returns()
func (_AcctManager *AcctManagerSession) AssignAdminRole(_account common.Address, _orgId string, _roleId string, _status *big.Int) (*types.Transaction, error) {
	return _AcctManager.Contract.AssignAdminRole(&_AcctManager.TransactOpts, _account, _orgId, _roleId, _status)
}

// AssignAdminRole is a paid mutator transaction binding the contract method 0xe3483a9d.
//
// Solidity: function assignAdminRole(address _account, string _orgId, string _roleId, uint256 _status) returns()
func (_AcctManager *AcctManagerTransactorSession) AssignAdminRole(_account common.Address, _orgId string, _roleId string, _status *big.Int) (*types.Transaction, error) {
	return _AcctManager.Contract.AssignAdminRole(&_AcctManager.TransactOpts, _account, _orgId, _roleId, _status)
}

// RemoveExistingAdmin is a paid mutator transaction binding the contract method 0x1d09dc93.
//
// Solidity: function removeExistingAdmin(string _orgId) returns(bool voterUpdate, address account)
func (_AcctManager *AcctManagerTransactor) RemoveExistingAdmin(opts *bind.TransactOpts, _orgId string) (*types.Transaction, error) {
	return _AcctManager.contract.Transact(opts, "removeExistingAdmin", _orgId)
}

// RemoveExistingAdmin is a paid mutator transaction binding the contract method 0x1d09dc93.
//
// Solidity: function removeExistingAdmin(string _orgId) returns(bool voterUpdate, address account)
func (_AcctManager *AcctManagerSession) RemoveExistingAdmin(_orgId string) (*types.Transaction, error) {
	return _AcctManager.Contract.RemoveExistingAdmin(&_AcctManager.TransactOpts, _orgId)
}

// RemoveExistingAdmin is a paid mutator transaction binding the contract method 0x1d09dc93.
//
// Solidity: function removeExistingAdmin(string _orgId) returns(bool voterUpdate, address account)
func (_AcctManager *AcctManagerTransactorSession) RemoveExistingAdmin(_orgId string) (*types.Transaction, error) {
	return _AcctManager.Contract.RemoveExistingAdmin(&_AcctManager.TransactOpts, _orgId)
}

// SetDefaults is a paid mutator transaction binding the contract method 0xcef7f6af.
//
// Solidity: function setDefaults(string _nwAdminRole, string _oAdminRole) returns()
func (_AcctManager *AcctManagerTransactor) SetDefaults(opts *bind.TransactOpts, _nwAdminRole string, _oAdminRole string) (*types.Transaction, error) {
	return _AcctManager.contract.Transact(opts, "setDefaults", _nwAdminRole, _oAdminRole)
}

// SetDefaults is a paid mutator transaction binding the contract method 0xcef7f6af.
//
// Solidity: function setDefaults(string _nwAdminRole, string _oAdminRole) returns()
func (_AcctManager *AcctManagerSession) SetDefaults(_nwAdminRole string, _oAdminRole string) (*types.Transaction, error) {
	return _AcctManager.Contract.SetDefaults(&_AcctManager.TransactOpts, _nwAdminRole, _oAdminRole)
}

// SetDefaults is a paid mutator transaction binding the contract method 0xcef7f6af.
//
// Solidity: function setDefaults(string _nwAdminRole, string _oAdminRole) returns()
func (_AcctManager *AcctManagerTransactorSession) SetDefaults(_nwAdminRole string, _oAdminRole string) (*types.Transaction, error) {
	return _AcctManager.Contract.SetDefaults(&_AcctManager.TransactOpts, _nwAdminRole, _oAdminRole)
}

// UpdateAccountStatus is a paid mutator transaction binding the contract method 0x84b7a84a.
//
// Solidity: function updateAccountStatus(string _orgId, address _account, uint256 _action) returns()
func (_AcctManager *AcctManagerTransactor) UpdateAccountStatus(opts *bind.TransactOpts, _orgId string, _account common.Address, _action *big.Int) (*types.Transaction, error) {
	return _AcctManager.contract.Transact(opts, "updateAccountStatus", _orgId, _account, _action)
}

// UpdateAccountStatus is a paid mutator transaction binding the contract method 0x84b7a84a.
//
// Solidity: function updateAccountStatus(string _orgId, address _account, uint256 _action) returns()
func (_AcctManager *AcctManagerSession) UpdateAccountStatus(_orgId string, _account common.Address, _action *big.Int) (*types.Transaction, error) {
	return _AcctManager.Contract.UpdateAccountStatus(&_AcctManager.TransactOpts, _orgId, _account, _action)
}

// UpdateAccountStatus is a paid mutator transaction binding the contract method 0x84b7a84a.
//
// Solidity: function updateAccountStatus(string _orgId, address _account, uint256 _action) returns()
func (_AcctManager *AcctManagerTransactorSession) UpdateAccountStatus(_orgId string, _account common.Address, _action *big.Int) (*types.Transaction, error) {
	return _AcctManager.Contract.UpdateAccountStatus(&_AcctManager.TransactOpts, _orgId, _account, _action)
}

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

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

// AcctManagerAccountAccessModified represents a AccountAccessModified event raised by the AcctManager contract.
type AcctManagerAccountAccessModified struct {
	Account  common.Address
	OrgId    string
	RoleId   string
	OrgAdmin bool
	Status   *big.Int
	Raw      types.Log // Blockchain specific contextual infos
}

// FilterAccountAccessModified is a free log retrieval operation binding the contract event 0x68e62a03aeb0a125c2fc869eed72f2fca473680987bdd680c093a534e17cc776.
//
// Solidity: event AccountAccessModified(address _account, string _orgId, string _roleId, bool _orgAdmin, uint256 _status)
func (_AcctManager *AcctManagerFilterer) FilterAccountAccessModified(opts *bind.FilterOpts) (*AcctManagerAccountAccessModifiedIterator, error) {

	logs, sub, err := _AcctManager.contract.FilterLogs(opts, "AccountAccessModified")
	if err != nil {
		return nil, err
	}
	return &AcctManagerAccountAccessModifiedIterator{contract: _AcctManager.contract, event: "AccountAccessModified", logs: logs, sub: sub}, nil
}

var AccountAccessModifiedTopicHash = "0x68e62a03aeb0a125c2fc869eed72f2fca473680987bdd680c093a534e17cc776"

// WatchAccountAccessModified is a free log subscription operation binding the contract event 0x68e62a03aeb0a125c2fc869eed72f2fca473680987bdd680c093a534e17cc776.
//
// Solidity: event AccountAccessModified(address _account, string _orgId, string _roleId, bool _orgAdmin, uint256 _status)
func (_AcctManager *AcctManagerFilterer) WatchAccountAccessModified(opts *bind.WatchOpts, sink chan<- *AcctManagerAccountAccessModified) (event.Subscription, error) {

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

// ParseAccountAccessModified is a log parse operation binding the contract event 0x68e62a03aeb0a125c2fc869eed72f2fca473680987bdd680c093a534e17cc776.
//
// Solidity: event AccountAccessModified(address _account, string _orgId, string _roleId, bool _orgAdmin, uint256 _status)
func (_AcctManager *AcctManagerFilterer) ParseAccountAccessModified(log types.Log) (*AcctManagerAccountAccessModified, error) {
	event := new(AcctManagerAccountAccessModified)
	if err := _AcctManager.contract.UnpackLog(event, "AccountAccessModified", log); err != nil {
		return nil, err
	}
	return event, nil
}

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

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

// AcctManagerAccountAccessRevoked represents a AccountAccessRevoked event raised by the AcctManager contract.
type AcctManagerAccountAccessRevoked struct {
	Account  common.Address
	OrgId    string
	RoleId   string
	OrgAdmin bool
	Raw      types.Log // Blockchain specific contextual infos
}

// FilterAccountAccessRevoked is a free log retrieval operation binding the contract event 0x6b5105396435a8a139aeed682dd573cd2a7e6279de77f8c11f95a30399212ad1.
//
// Solidity: event AccountAccessRevoked(address _account, string _orgId, string _roleId, bool _orgAdmin)
func (_AcctManager *AcctManagerFilterer) FilterAccountAccessRevoked(opts *bind.FilterOpts) (*AcctManagerAccountAccessRevokedIterator, error) {

	logs, sub, err := _AcctManager.contract.FilterLogs(opts, "AccountAccessRevoked")
	if err != nil {
		return nil, err
	}
	return &AcctManagerAccountAccessRevokedIterator{contract: _AcctManager.contract, event: "AccountAccessRevoked", logs: logs, sub: sub}, nil
}

var AccountAccessRevokedTopicHash = "0x6b5105396435a8a139aeed682dd573cd2a7e6279de77f8c11f95a30399212ad1"

// WatchAccountAccessRevoked is a free log subscription operation binding the contract event 0x6b5105396435a8a139aeed682dd573cd2a7e6279de77f8c11f95a30399212ad1.
//
// Solidity: event AccountAccessRevoked(address _account, string _orgId, string _roleId, bool _orgAdmin)
func (_AcctManager *AcctManagerFilterer) WatchAccountAccessRevoked(opts *bind.WatchOpts, sink chan<- *AcctManagerAccountAccessRevoked) (event.Subscription, error) {

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

// ParseAccountAccessRevoked is a log parse operation binding the contract event 0x6b5105396435a8a139aeed682dd573cd2a7e6279de77f8c11f95a30399212ad1.
//
// Solidity: event AccountAccessRevoked(address _account, string _orgId, string _roleId, bool _orgAdmin)
func (_AcctManager *AcctManagerFilterer) ParseAccountAccessRevoked(log types.Log) (*AcctManagerAccountAccessRevoked, error) {
	event := new(AcctManagerAccountAccessRevoked)
	if err := _AcctManager.contract.UnpackLog(event, "AccountAccessRevoked", log); err != nil {
		return nil, err
	}
	return event, nil
}

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

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

// AcctManagerAccountStatusChanged represents a AccountStatusChanged event raised by the AcctManager contract.
type AcctManagerAccountStatusChanged struct {
	Account common.Address
	OrgId   string
	Status  *big.Int
	Raw     types.Log // Blockchain specific contextual infos
}

// FilterAccountStatusChanged is a free log retrieval operation binding the contract event 0x36b0ea38154dec5e98b6bf928b971a9db5e8cd4b6946350e9e43fb9848c70b25.
//
// Solidity: event AccountStatusChanged(address _account, string _orgId, uint256 _status)
func (_AcctManager *AcctManagerFilterer) FilterAccountStatusChanged(opts *bind.FilterOpts) (*AcctManagerAccountStatusChangedIterator, error) {

	logs, sub, err := _AcctManager.contract.FilterLogs(opts, "AccountStatusChanged")
	if err != nil {
		return nil, err
	}
	return &AcctManagerAccountStatusChangedIterator{contract: _AcctManager.contract, event: "AccountStatusChanged", logs: logs, sub: sub}, nil
}

var AccountStatusChangedTopicHash = "0x36b0ea38154dec5e98b6bf928b971a9db5e8cd4b6946350e9e43fb9848c70b25"

// WatchAccountStatusChanged is a free log subscription operation binding the contract event 0x36b0ea38154dec5e98b6bf928b971a9db5e8cd4b6946350e9e43fb9848c70b25.
//
// Solidity: event AccountStatusChanged(address _account, string _orgId, uint256 _status)
func (_AcctManager *AcctManagerFilterer) WatchAccountStatusChanged(opts *bind.WatchOpts, sink chan<- *AcctManagerAccountStatusChanged) (event.Subscription, error) {

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

// ParseAccountStatusChanged is a log parse operation binding the contract event 0x36b0ea38154dec5e98b6bf928b971a9db5e8cd4b6946350e9e43fb9848c70b25.
//
// Solidity: event AccountStatusChanged(address _account, string _orgId, uint256 _status)
func (_AcctManager *AcctManagerFilterer) ParseAccountStatusChanged(log types.Log) (*AcctManagerAccountStatusChanged, error) {
	event := new(AcctManagerAccountStatusChanged)
	if err := _AcctManager.contract.UnpackLog(event, "AccountStatusChanged", log); err != nil {
		return nil, err
	}
	return event, nil
}
