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

package bindings

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

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

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

// NitroValidatorPtrs is an auto generated low-level Go binding around an user-defined struct.
type NitroValidatorPtrs struct {
	ModuleID  *big.Int
	Timestamp uint64
	Digest    *big.Int
	Pcrs      []*big.Int
	Cert      *big.Int
	Cabundle  []*big.Int
	PublicKey *big.Int
	UserData  *big.Int
	Nonce     *big.Int
}

// SystemConfigGlobalMetaData contains all meta data concerning the SystemConfigGlobal contract.
var SystemConfigGlobalMetaData = &bind.MetaData{
	ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"certManager\",\"type\":\"address\",\"internalType\":\"contractICertManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ATTESTATION_DIGEST\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ATTESTATION_TBS_PREFIX\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"CABUNDLE_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"CERTIFICATE_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DIGEST_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_AGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MODULE_ID_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"NONCE_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PCRS_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PUBLIC_KEY_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"TIMESTAMP_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"USER_DATA_KEY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"certManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractICertManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decodeAttestationTbs\",\"inputs\":[{\"name\":\"attestation\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"attestationTbs\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"deregisterPCR0\",\"inputs\":[{\"name\":\"pcr0\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterSigner\",\"inputs\":[{\"name\":\"signer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_manager\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"manager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposer\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerPCR0\",\"inputs\":[{\"name\":\"pcr0\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerSigner\",\"inputs\":[{\"name\":\"attestationTbs\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceManagement\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setProposer\",\"inputs\":[{\"name\":\"_proposer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferManagement\",\"inputs\":[{\"name\":\"newManager\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"validPCR0s\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validSigners\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validateAttestation\",\"inputs\":[{\"name\":\"attestationTbs\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structNitroValidator.Ptrs\",\"components\":[{\"name\":\"moduleID\",\"type\":\"uint256\",\"internalType\":\"CborElement\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"digest\",\"type\":\"uint256\",\"internalType\":\"CborElement\"},{\"name\":\"pcrs\",\"type\":\"uint256[]\",\"internalType\":\"CborElement[]\"},{\"name\":\"cert\",\"type\":\"uint256\",\"internalType\":\"CborElement\"},{\"name\":\"cabundle\",\"type\":\"uint256[]\",\"internalType\":\"CborElement[]\"},{\"name\":\"publicKey\",\"type\":\"uint256\",\"internalType\":\"CborElement\"},{\"name\":\"userData\",\"type\":\"uint256\",\"internalType\":\"CborElement\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"CborElement\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ManagementTransferred\",\"inputs\":[{\"name\":\"previousManager\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newManager\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false}]",
	Bin: "0x60a06040523480156200001157600080fd5b506040516200616d3803806200616d83398101604081905262000034916200051a565b6001600160a01b0381166080526200004f61dead8062000056565b506200054c565b600054610100900460ff1615808015620000775750600054600160ff909116105b80620000a757506200009430620001a060201b620015c01760201c565b158015620000a7575060005460ff166001145b620001105760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000134576000805461ff0019166101001790555b6200013e620001af565b620001498362000217565b62000154826200029d565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b600054610100900460ff166200020b5760405162461bcd60e51b815260206004820152602b60248201526000805160206200614d83398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000107565b6200021562000322565b565b6200022162000394565b6001600160a01b0381166200028f5760405162461bcd60e51b815260206004820152602d60248201527f4f776e61626c654d616e616765643a206e6577206f776e65722069732074686560448201526c207a65726f206164647265737360981b606482015260840162000107565b6200029a81620003ef565b50565b620002a762000441565b6001600160a01b038116620003175760405162461bcd60e51b815260206004820152602f60248201527f4f776e61626c654d616e616765643a206e6577206d616e61676572206973207460448201526e6865207a65726f206164647265737360881b606482015260840162000107565b6200029a81620004c8565b600054610100900460ff166200037e5760405162461bcd60e51b815260206004820152602b60248201526000805160206200614d83398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000107565b6200038933620003ef565b6200021533620004c8565b6033546001600160a01b03163314620002155760405162461bcd60e51b815260206004820152602760248201526000805160206200612d833981519152604482015266329037bbb732b960c91b606482015260840162000107565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6033546001600160a01b03163314806200046557506034546001600160a01b031633145b620002155760405162461bcd60e51b815260206004820152603660248201526000805160206200612d83398151915260448201527f65206f776e6572206f7220746865206d616e6167657200000000000000000000606482015260840162000107565b603480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f80f15e9dbc60884fdb59fb8ed4fc48a9a689e028f055e893ed45ca5be67c5c8590600090a35050565b6000602082840312156200052d57600080fd5b81516001600160a01b03811681146200054557600080fd5b9392505050565b608051615bb7620005766000396000818161041001528181611d880152611e8f0152615bb76000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80636be1e68b1161010f578063ae951149116100a2578063e0a655ff11610071578063e0a655ff14610567578063e4edf8521461058e578063e8b6d3fe146105a1578063f2fde38b146105c857600080fd5b8063ae951149146104df578063b22bed7e14610506578063ba58e82a1461052d578063cebf08d71461054057600080fd5b80639adb2d68116100de5780639adb2d68146104505780639cc3eb4814610477578063a8e4fb901461049e578063a903a277146104be57600080fd5b80636be1e68b146103dc578063715018a614610403578063739e84841461040b5780638da5cb5b1461043257600080fd5b80632d4bad8a1161018757806350697a3f1161015657806350697a3f1461034057806354fd4d50146103535780636378aad5146103925780636a73b00b146103b957600080fd5b80632d4bad8a146102a05780633893af6d146102c7578063481c6a75146102ee578063485cc9551461032d57600080fd5b80630dcaeaf2116101c35780630dcaeaf2146102305780631fb4a22814610247578063295840d91461025a5780632c68fa021461028d57600080fd5b806305f7aead146101ea578063089208d8146102135780630ba24fe01461021d575b600080fd5b6101fd6101f83660046151f4565b6105db565b60405161020a9190615293565b60405180910390f35b61021b610d3b565b005b61021b61022b36600461537c565b610d4f565b610239610e1081565b60405190815260200161020a565b61021b61025536600461537c565b610da3565b61027d610268366004615397565b60666020526000908152604090205460ff1681565b604051901515815260200161020a565b61021b61029b3660046153f9565b610df2565b6102397f63ce814bd924c1ef12c43686e4cbf48ed1639a78387b0570c23ca921e8ce071c81565b6102397f501a3a7a4e0cf54b03f2488098bdd59bc1c2e8d741a300d6b25926d531733fef81565b60345473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161020a565b61021b61033b36600461543b565b610e41565b61021b61034e3660046153f9565b610fe7565b604080518082018252600581527f302e302e310000000000000000000000000000000000000000000000000000006020820152905161020a91906154e4565b6102397f7ab1577440dd7bedf920cb6de2f9fc6bf7ba98c78c85a3fa1f8311aac95e175981565b61027d6103c736600461537c565b60676020526000908152604090205460ff1681565b6102397f682a7e258d80bd2421d3103cbe71e3e3b82138116756b97b8256f061dc2f11fb81565b61021b611046565b6103087f000000000000000000000000000000000000000000000000000000000000000081565b60335473ffffffffffffffffffffffffffffffffffffffff16610308565b6102397f8ce577cf664c36ba5130242bf5790c2675e9f4e6986a842b607821bee25372ee81565b6102397f8a8cb7aa1da17ada103546ae6b4e13ccc2fafa17adf5f93925e0a0a4e5681a6a81565b6065546103089073ffffffffffffffffffffffffffffffffffffffff1681565b6104d16104cc3660046154f7565b611058565b60405161020a92919061552c565b6102397f925cec779426f44d8d555e01d2683a3a765ce2fa7562ca7352aeb09dfc57ea6a81565b6102397f61585f8bc67a4b6d5891a4639a074964ac66fc2241dc0b36c157dc101325367a81565b61021b61053b36600461555a565b61119f565b6102397f5e4ea5393e4327b3014bc32f2264336b0d1ee84a4cfd197c8ad7e1e16829a16a81565b6102397f4ebf727c48eac2c66272456b06a885c5cc03e54d140f63b63b6fd10c1227958e81565b61021b61059c36600461537c565b611455565b6102397fc7b28019ccfdbd30ffc65951d94bb85c9e2b8434111a000b5afd533ce65f57a481565b61021b6105d636600461537c565b61150c565b61063460405180610120016040528060008152602001600067ffffffffffffffff168152602001600081526020016060815260200160008152602001606081526020016000815260200160008152602001600081525090565b600061063f846115dc565b905060006106508260000151611c9d565b116106bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f206d6f64756c65206964000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6000816020015167ffffffffffffffff1611610734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f2074696d657374616d70000000000000000000000000000000000000000060448201526064016106b3565b60008160a0015151116107a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f20636162756e646c6500000000000000000000000000000000000000000060448201526064016106b3565b60408101517f501a3a7a4e0cf54b03f2488098bdd59bc1c2e8d741a300d6b25926d531733fef906107d5908690611cde565b1461083c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c69642064696765737400000000000000000000000000000000000060448201526064016106b3565b8060600151516001111580156108585750602081606001515111155b6108be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f696e76616c69642070637273000000000000000000000000000000000000000060448201526064016106b3565b6108cb8160c00151611d0c565b806108fc57506108de8160c00151611c9d565b6001111580156108fc57506104006108f98260c00151611c9d565b11155b610962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c696420707562206b6579000000000000000000000000000000000060448201526064016106b3565b61096f8160e00151611d0c565b8061098857506102006109858260e00151611c9d565b11155b6109ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f696e76616c69642075736572206461746100000000000000000000000000000060448201526064016106b3565b6109fc816101000151611d0c565b80610a165750610200610a13826101000151611c9d565b11155b610a7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f696e76616c6964206e6f6e63650000000000000000000000000000000000000060448201526064016106b3565b60005b816060015151811015610b7357610ab282606001518281518110610aa557610aa56155c6565b6020026020010151611c9d565b60201480610ad85750610ad482606001518281518110610aa557610aa56155c6565b6030145b80610afb5750610af782606001518281518110610aa557610aa56155c6565b6040145b610b61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f696e76616c69642070637200000000000000000000000000000000000000000060448201526064016106b3565b80610b6b81615624565b915050610a7f565b506000610b8d826080015186611d2a90919063ffffffff16565b905060008260a001515167ffffffffffffffff811115610baf57610baf6150b1565b604051908082528060200260200182016040528015610be257816020015b6060815260200190600190039081610bcd5790505b50905060005b8360a0015151811015610cfe57610c0e8460a001518281518110610aa557610aa56155c6565b600111158015610c385750610400610c358560a001518381518110610aa557610aa56155c6565b11155b610c9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e76616c696420636162756e646c652063657274000000000000000000000060448201526064016106b3565b610cce8460a001518281518110610cb757610cb76155c6565b602002602001015188611d2a90919063ffffffff16565b828281518110610ce057610ce06155c6565b60200260200101819052508080610cf690615624565b915050610be8565b506000610d0b8383611d51565b90506000610d1c8860008a51611f33565b9050610d2d8260800151828961205a565b509293505050505b92915050565b610d436120d3565b610d4d600061219c565b565b610d576120d3565b73ffffffffffffffffffffffffffffffffffffffff16600090815260676020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b610dab612213565b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610dfa612213565b6001606660008484604051610e1092919061565c565b6040518091039020815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600054610100900460ff1615808015610e615750600054600160ff909116105b80610e7b5750303b158015610e7b575060005460ff166001145b610f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106b3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610f6557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610f6d6122ba565b610f768361150c565b610f7f82611455565b8015610fe257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610fef612213565b60666000838360405161100392919061565c565b6040805191829003909120825260208201929092520160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555050565b61104e612213565b610d4d6000612359565b60608060006001905083600081518110611074576110746155c6565b01602001517fff00000000000000000000000000000000000000000000000000000000000000167fd200000000000000000000000000000000000000000000000000000000000000036110c5575060025b60006110d185836123d0565b905060006110df86836123e0565b905060006110ed87836123f4565b905060006110fb88836123f4565b90506000856111098661240c565b611113919061566c565b905060006111208561240c565b6111298561240c565b611133919061566c565b905060006111428b8985612431565b9050600061115a6111528861240c565b8d9085612431565b90506111688285838661250c565b9a5061118f605086901c69ffffffffffffffffffff1661118787611c9d565b8e9190612431565b9950505050505050505050915091565b6111a76120d3565b600061121c85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f890181900481028201810190925287815292508791508690819084018382808284376000920191909152506105db92505050565b90506000611281826060015160008151811061123a5761123a6155c6565b602002602001015187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611cde9050565b60008181526066602052604090205490915060ff166112fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964207063723020696e206174746573746174696f6e000000000060448201526064016106b3565b42610e10836020015167ffffffffffffffff166113199190615683565b11611380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f6174746573746174696f6e20746f6f206f6c640000000000000000000000000060448201526064016106b3565b60c08201516000906113ff9060501c69ffffffffffffffffffff166113a6906001615683565b60016113b58660c00151611c9d565b6113bf919061566c565b89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509294939250506126fd9050565b73ffffffffffffffffffffffffffffffffffffffff16600090815260676020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550505050505050565b61145d6120d3565b73ffffffffffffffffffffffffffffffffffffffff8116611500576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4f776e61626c654d616e616765643a206e6577206d616e61676572206973207460448201527f6865207a65726f2061646472657373000000000000000000000000000000000060648201526084016106b3565b6115098161219c565b50565b611514612213565b73ffffffffffffffffffffffffffffffffffffffff81166115b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4f776e61626c654d616e616765643a206e6577206f776e65722069732074686560448201527f207a65726f20616464726573730000000000000000000000000000000000000060648201526084016106b3565b61150981612359565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61163560405180610120016040528060008152602001600067ffffffffffffffff168152602001600081526020016060815260200160008152602001606081526020016000815260200160008152602001600081525090565b7f63ce814bd924c1ef12c43686e4cbf48ed1639a78387b0570c23ca921e8ce071c61166383600060126126fd565b146116ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f696e76616c6964206174746573746174696f6e2070726566697800000000000060448201526064016106b3565b60006116d78360126123d0565b905060006116f58469ffffffffffffffffffff605085901c1661277e565b905061175060405180610120016040528060008152602001600067ffffffffffffffff168152602001600081526020016060815260200160008152602001606081526020016000815260200160008152602001600081525090565b600061175b8461240c565b90505b806117688461240c565b1015611c9457611778868461278e565b925060006117868785611cde565b90507f731a883099b3c945aecfdbd40a86f3d98a160b1967957bd49f87de411dac8d1281016117c3576117b9878561278e565b8084529350611c8e565b7f97d581da727f42dbde2cefc3418e1c1c47dec7ee98a946847da90f9e23d0ee058101611802576117f4878561278e565b604084018190529350611c8e565b7f6da313886bd90bb272aaa1fe2d97c5c589a31d058a9d358cad514f6203a8159681016118415761183387856123f4565b608084018190529350611c8e565b7f384d7fe6330242cf0039a6ae26b447a361d47bcbeee5fff4a502acc319a0a85c81016118805761187287856127a6565b60c084018190529350611c8e565b7fa1b15ac6c1bcd84cfeb43cd0dd9bcc94f2e117b5b302e68375281e1e97d65e9681016118bf576118b187856127a6565b60e084018190529350611c8e565b7f854ea88bbf22841206df34921d06039408456738737a5c05e07cee5536a1e8a781016118ff576118f087856127a6565b61010084018190529350611c8e565b7fb1408d83b7153d399d8dba94f9577a3a33fc1ab2ebf09c49c4902ef3edd86a7281016119505761193087856127be565b935061193c8460a01c90565b67ffffffffffffffff166020840152611c8e565b7f75734855e25e8525efcab95194b1ec333d0505e8520a06c6da1f5f5b1a97e5968101611a345761198187856127d6565b935061198d8460a01c90565b67ffffffffffffffff1667ffffffffffffffff8111156119af576119af6150b1565b6040519080825280602002602001820160405280156119d8578160200160208202803683370190505b5060a084015260005b8360a0015151811015611a2e576119f888866123f4565b9450848460a001518281518110611a1157611a116155c6565b602090810291909101015280611a2681615624565b9150506119e1565b50611c8e565b7f9ea7a0743985b492a76e5b9c65f8b69b539903ddbe23f4c93ea823efecdac9868101611c2c57611a6587856123e0565b9350611a718460a01c90565b67ffffffffffffffff1667ffffffffffffffff811115611a9357611a936150b1565b604051908082528060200260200182016040528015611abc578160200160208202803683370190505b50606084015260005b836060015151811015611a2e57611adc88866127be565b94506000611aea8660a01c90565b67ffffffffffffffff1690508460600151518110611b64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e76616c696420706372206b65792076616c7565000000000000000000000060448201526064016106b3565b84606001518181518110611b7a57611b7a6155c6565b6020026020010151600014611beb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f6475706c696361746520706372206b657900000000000000000000000000000060448201526064016106b3565b611bf589876123f4565b95508585606001518281518110611c0e57611c0e6155c6565b60209081029190910101525080611c2481615624565b915050611ac5565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f696e76616c6964206174746573746174696f6e206b657900000000000000000060448201526064016106b3565b5061175e565b50949350505050565b600081604060ff82161480611cb557508060ff166060145b15611cd557611cc48360a01c90565b67ffffffffffffffff169392505050565b50600092915050565b6000611d05605083901c69ffffffffffffffffffff16611cfd84611c9d565b8591906126fd565b9392505050565b60008160f660ff82161480611d0557508060ff1660f7149392505050565b6060611d05605083901c69ffffffffffffffffffff16611d4984611c9d565b859190612431565b6040805160a0810182526000808252602082018190529181018290526060808201839052608082015290805b8351811015611e51577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16630890702c858381518110611dd457611dd46155c6565b6020026020010151846040518363ffffffff1660e01b8152600401611dfa92919061569b565b6020604051808303816000875af1158015611e19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3d91906156bd565b915080611e4981615624565b915050611d7d565b506040517f28c5463700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906328c5463790611ec6908790859060040161569b565b6000604051808303816000875af1158015611ee5573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611f2b919081019061572d565b949350505050565b604080516101008101825267cbbb9d5dc1059ed8815267629a292a367cd5076020820152679159015a3070dd179181019190915267152fecd8f70e59396060828101919091526767332667ffc00b316080830152678eb44a876858151160a083015267db0c2e0d64f98fa760c08301526747b5481dbefa4fa460e083015290611fbe858585846127ee565b80516020808301516040808501516060860151608087015160a088015184517fffffffffffffffff00000000000000000000000000000000000000000000000060c0998a1b81169882019890985295881b8716602887015292871b8616603086015290861b85166038850152851b84169183019190915290921b1660488201526050016040516020818303038152906040529150509392505050565b61206d6120656130d0565b8383866131eb565b610fe2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f696e76616c69642073696700000000000000000000000000000000000000000060448201526064016106b3565b60335473ffffffffffffffffffffffffffffffffffffffff16331480612110575060345473ffffffffffffffffffffffffffffffffffffffff1633145b610d4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4f776e61626c654d616e616765643a2063616c6c6572206973206e6f7420746860448201527f65206f776e6572206f7220746865206d616e616765720000000000000000000060648201526084016106b3565b6034805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f80f15e9dbc60884fdb59fb8ed4fc48a9a689e028f055e893ed45ca5be67c5c8590600090a35050565b60335473ffffffffffffffffffffffffffffffffffffffff163314610d4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4f776e61626c654d616e616765643a2063616c6c6572206973206e6f7420746860448201527f65206f776e65720000000000000000000000000000000000000000000000000060648201526084016106b3565b600054610100900460ff16612351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106b3565b610d4d61348e565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000611d05838360406001613537565b6000611d05836123ef8461240c565b61277e565b6000611d05836124038461240c565b60406001613537565b600061241782611c9d565b610d359069ffffffffffffffffffff605085901c16615683565b82516060906124408385615683565b11156124a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e64730000000000000000000000000060448201526064016106b3565b8167ffffffffffffffff8111156124c1576124c16150b1565b6040519080825280601f01601f1916602001820160405280156124eb576020820181803683370190505b50905060208082019085850101612503828286613908565b50509392505050565b60608161251a85600d615683565b6125249190615683565b67ffffffffffffffff81111561253c5761253c6150b1565b6040519080825280601f01601f191660200182016040528015612566576020820181803683370190505b509050608460f81b81600081518110612581576125816155c6565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350606a60f81b816001815181106125c8576125c86155c6565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f40000000000000000000000000000000000000000000000000000000000000008161262486600c615683565b81518110612634576126346155c6565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060408051808201909152600a81527f5369676e61747572653100000000000000000000000000000000000000000000602080830191825283810191908881019087016126bb6126b3856002615683565b84600a613908565b6126d06126c985600c615683565b838b613908565b6126f0896126df86600d615683565b6126e99190615683565b8289613908565b5050505050949350505050565b825160009061270c8385615683565b1115612774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e64730000000000000000000000000060448201526064016106b3565b5091016020012090565b6000611d05838360a06001613537565b6000611d058361279d8461240c565b60606001613537565b6000611d05836127b58461240c565b60406000613537565b6000611d05836127cd8461240c565b60006001613537565b6000611d05836127e58461240c565b60806001613537565b60408051610a008101825267428a2f98d728ae228152677137449123ef65cd602082015267b5c0fbcfec4d3b2f9181019190915267e9b5dba58189dbbc6060820152673956c25bf348b53860808201526759f111f1b605d01960a082015267923f82a4af194f9b60c082015267ab1c5ed5da6d811860e082015267d807aa98a30302426101008201526712835b0145706fbe61012082015267243185be4ee4b28c61014082015267550c7dc3d5ffb4e26101608201526772be5d74f27b896f6101808201526780deb1fe3b1696b16101a0820152679bdc06a725c712356101c082015267c19bf174cf6926946101e082015267e49b69c19ef14ad261020082015267efbe4786384f25e3610220820152670fc19dc68b8cd5b561024082015267240ca1cc77ac9c65610260820152672de92c6f592b0275610280820152674a7484aa6ea6e4836102a0820152675cb0a9dcbd41fbd46102c08201526776f988da831153b56102e082015267983e5152ee66dfab61030082015267a831c66d2db4321061032082015267b00327c898fb213f61034082015267bf597fc7beef0ee461036082015267c6e00bf33da88fc261038082015267d5a79147930aa7256103a08201526706ca6351e003826f6103c082015267142929670a0e6e706103e08201526727b70a8546d22ffc610400820152672e1b21385c26c926610420820152674d2c6dfc5ac42aed6104408201526753380d139d95b3df61046082015267650a73548baf63de61048082015267766a0abb3c77b2a86104a08201526781c2c92e47edaee66104c08201526792722c851482353b6104e082015267a2bfe8a14cf1036461050082015267a81a664bbc42300161052082015267c24b8b70d0f8979161054082015267c76c51a30654be3061056082015267d192e819d6ef521861058082015267d69906245565a9106105a082015267f40e35855771202a6105c082015267106aa07032bbd1b86105e08201526719a4c116b8d2d0c8610600820152671e376c085141ab53610620820152672748774cdf8eeb996106408201526734b0bcb5e19b48a861066082015267391c0cb3c5c95a63610680820152674ed8aa4ae3418acb6106a0820152675b9cca4f7763e3736106c082015267682e6ff3d6b2b8a36106e082015267748f82ee5defb2fc6107008201526778a5636f43172f606107208201526784c87814a1f0ab72610740820152678cc702081a6439ec6107608201526790befffa23631e2861078082015267a4506cebde82bde96107a082015267bef9a3f7b2c679156107c082015267c67178f2e372532b6107e082015267ca273eceea26619c61080082015267d186b8c721c0c20761082082015267eada7dd6cde0eb1e61084082015267f57d4f7fee6ed1786108608201526706f067aa72176fba610880820152670a637dc5a2c898a66108a082015267113f9804bef90dae6108c0820152671b710b35131c471b6108e08201526728db77f523047d846109008201526732caab7b40c72493610920820152673c9ebe0a15c9bebc61094082015267431d67c49c100d4c610960820152674cc5d4becb3e42b661098082015267597f299cfc657e2a6109a0820152675fcb6fab3ad6faec6109c0820152676c44198c4a4758176109e08201528451612cac8486615683565b1115612d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f4f55545f4f465f424f554e44530000000000000000000000000000000000000060448201526064016106b3565b6000612d2186868661397d565b905060808151612d319190615814565b15612d98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f50414444494e475f4552524f520000000000000000000000000000000000000060448201526064016106b3565b612da0615008565b612da8615027565b612db0615046565b6000612dbd608089615828565b612dc890608061583c565b905060005b855182018110156130c35781811015612df257612ded8b84838d01613a8c565b612dff565b612dff8684848403613a8c565b60005b6010811015612e5057838160108110612e1d57612e1d6155c6565b6020020151868260508110612e3457612e346155c6565b67ffffffffffffffff9092166020929092020152600101612e02565b5060105b6050811015612f0657856010820360508110612e7257612e726155c6565b6020020151612e9987600f840360508110612e8f57612e8f6155c6565b6020020151613af3565b876007840360508110612eae57612eae6155c6565b6020020151612ed5896002860360508110612ecb57612ecb6155c6565b6020020151613b22565b010101868260508110612eea57612eea6155c6565b67ffffffffffffffff9092166020929092020152600101612e54565b5060005b6008811015612f5857888160088110612f2557612f256155c6565b6020020151858260088110612f3c57612f3c6155c6565b67ffffffffffffffff9092166020929092020152600101612f0a565b5060005b6050811015613066576000868260508110612f7957612f796155c6565b6020020151898360508110612f9057612f906155c6565b6020020151608088015160a089015160c08a01518219169116186080890151612fb890613b49565b89600760200201510101010190506000612ff1878260200201518860016020020151896002602002015180821690831691909216181890565b8751612ffc90613b6c565b60c08901805167ffffffffffffffff90811660e08c015260a08b018051821690925260808b018051821690925260608b0180518701821690925260408b018051821690925260208b01805182169092528a5181169091529101909201909116865250600101612f5c565b5060005b60088110156130ba57848160088110613085576130856155c6565b602002015189826008811061309c5761309c6155c6565b6020020180519190910167ffffffffffffffff16905260010161306a565b50608001612dcd565b5050505050505050505050565b6131106040518060e00160405280606081526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b604080516101408101909152603060e082018181528291615b1b6101008401398152602001604051806060016040528060308152602001615a5b603091398152602001604051806060016040528060308152602001615aeb603091398152602001604051806060016040528060308152602001615a8b603091398152602001604051806060016040528060308152602001615b7b603091398152602001604051806060016040528060308152602001615b4b603091398152602001604051806060016040528060308152602001615abb603091399052919050565b60006132186040518060800160405280600081526020016000815260200160008152602001600081525090565b61322184613b8f565b6020830152815261323183613b8f565b6060830152604080830191909152805160e08101909152865160009190819061325990613c42565b815260200161326b8960200151613c42565b815260200161327d8960400151613c42565b815260200161328f8960600151613c42565b81526020016132a18960800151613c42565b81526020016132b38960a00151613c42565b81526020016132c58960c00151613c42565b815250905060006132d98260800151613cd8565b83516020810151905191925015901516806133065750600061330384600001518460a00151613dab565b12155b80613324575061332483602001516000602082015191511591141690565b806133405750600061333e84602001518460c00151613dab565b135b156133515760009350505050611f2b565b6133738183608001518460000151856020015187604001518860600151613e51565b6133835760009350505050611f2b565b865160308110156133c75760408051603080825260608201909252600091602082018180368337509192506133c491505060208a0183830360500184613f35565b97505b5060006133e6826133d78a613c42565b86602001518660a00151613f43565b9050600061340283866000015187602001518760a00151613f43565b905060006134106003614054565b9050600061343c8587608001518489600001518a604001518b606001518d604001518e60600151614076565b9050613455858760800151848960000151858989614261565b5080945050505061346b83838660a00151614452565b845160208082015190840151915184511491141695505050505050949350505050565b600054610100900460ff16613525576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106b3565b61352e33612359565b610d4d3361219c565b60008085858151811061354c5761354c6155c6565b602001015160f81c60f81b60e060f81b1660f81c90506000868681518110613576576135766155c6565b60209101015160f81c601f16905060ff821660e0036136bc578060ff16601614806135a457508060ff166017145b613630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f6f6e6c79206e756c6c207072696d69746976652076616c75657320617265207360448201527f7570706f7274656400000000000000000000000000000000000000000000000060648201526084016106b3565b8315613698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6e756c6c2076616c756520666f7220726571756972656420656c656d656e740060448201526064016106b3565b6136b360ff838317166136ac886001615683565b60501b1790565b92505050611f2b565b8460ff168260ff161461372b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f756e65787065637465642074797065000000000000000000000000000000000060448201526064016106b3565b601c8160ff1610613798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f756e737570706f7274656420747970650000000000000000000000000000000060448201526064016106b3565b8060ff166018036137ea576136b360ff83166137b5886002615683565b896137c18a6001615683565b815181106137d1576137d16155c6565b016020015160f81c60a01b60509190911b919091171790565b8060ff16601903613831576136b360ff8316613807886003615683565b61381c6138158a6001615683565b8b9061449e565b61ffff1660a01b60509190911b919091171790565b8060ff16601a0361387a576136b360ff831661384e886005615683565b61386361385c8a6001615683565b8b90614521565b63ffffffff1660a01b60509190911b919091171790565b8060ff16601b036138c7576136b360ff8316613897886009615683565b6138ac6138a58a6001615683565b8b906145a4565b67ffffffffffffffff1660a01b60509190911b919091171790565b6138fd60ff83166138d9886001615683565b60501b1774ff000000000000000000000000000000000000000060a084901b161790565b979650505050505050565b60208110613940578151835261391f602084615683565b925061392c602083615683565b915061393960208261566c565b9050613908565b8015610fe2576000600161395583602061566c565b61396190610100615999565b61396b919061566c565b83518551821691191617845250505050565b6060600061398c83600861583c565b60c01b9050600061399e608085615814565b9050600060708210156139bd576139b682607761566c565b90506139cb565b6139c88260f761566c565b90505b60008167ffffffffffffffff8111156139e6576139e66150b1565b6040519080825280601f01601f191660200182016040528015613a10576020820181803683370190505b5090506000613a3584613a23898b615683565b613a2d919061566c565b8a9086612431565b604051909150613a6f9082907f800000000000000000000000000000000000000000000000000000000000000090859089906020016159a5565b604051602081830303815290604052955050505050509392505050565b60005b6010811015613aed57613ab7613aa682600861583c565b613ab09084615683565b85906145a4565b838260108110613ac957613ac96155c6565b67ffffffffffffffff9092166020929092020152613ae681615624565b9050613a8f565b50505050565b600060078267ffffffffffffffff16901c613b0f836008614627565b613b1a846001614627565b181892915050565b600060068267ffffffffffffffff16901c613b3e83603d614627565b613b1a846013614627565b6000613b56826029614627565b613b61836012614627565b613b1a84600e614627565b6000613b79826027614627565b613b84836022614627565b613b1a84601c614627565b6000808251606014613bfd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f553338343a206e6f74203736380000000000000000000000000000000000000060448201526064016106b3565b60408051608081018252925082019050600082526020830151601083015260308301516020830152600081526050830151601082015260608301516020820152915091565b60008151603014613caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f553338343a206e6f74203338340000000000000000000000000000000000000060448201526064016106b3565b604080518082019091529050600081526020820151601082015260308201516020820152919050565b6000613cec61048060408051918201905290565b9050613d2282613cfc6002614054565b602082810151908201518103610420860181905291519251911191900303610400830152565b6060610120820152602061014082018190526040610160830181905260016101e0840152835161020084015283820180516102208501526102408401829052610260840192909252610280830181905283516103008401528151610320840152610360830181905261038083018190526103a08301529151610440820152905161046082015290565b815181516000919080821115613dc657600192505050610d35565b80821015613df8577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92505050610d35565b50506020838101519083015180821115613e1757600192505050610d35565b80821015613e49577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92505050610d35565b505092915050565b602082015182516000911590151680613e7857506020868101519084015187518551149114165b80613e8a575060208201518251159015165b80613ea357506020868101519083015187518451149114165b15613eb057506000613f2b565b6000613ebe88846002614664565b90506000613ece89866003614664565b6020880151885191925015901516613ef857613ef581613eef8b888b6146a9565b8a61479b565b90505b6020860151865115901516613f1557613f1281878a61479b565b90505b6020818101519083015191519251911491141690505b9695505050505050565b8082828560045afa50505050565b6000613f508584846147ff565b90506140158482876060018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b60608552602085602001526040856040015260018560c0015281518560e0015260208201518561010001526040816101208760055afa50949350505050565b60006140666040808051918201905290565b6000815260208101929092525090565b61407e615065565b6140878361488d565b6140908361488d565b60208084015190810191909152526140a78561488d565b6140b08561488d565b61010083015160208101919091525260005b60088110156142545760005b600881101561424b5760028183011061424357600382901b81178215614199577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830160031b821761415a8d8d8d8d89866040811061412f5761412f6155c6565b6020020151518a8760408110614147576141476155c6565b6020020151600160200201518f8f6148b4565b86846040811061416c5761416c6155c6565b6020020151878560408110614183576141836155c6565b6020020151600160200201919091525250614241565b600383901b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301176142068d8d8d8d8986604081106141db576141db6155c6565b6020020151518a87604081106141f3576141f36155c6565b6020020151600160200201518d8d6148b4565b868460408110614218576142186155c6565b602002015187856040811061422f5761422f6155c6565b60200201516001602002019190915252505b505b6001016140ce565b506001016140c2565b5098975050505050505050565b81518151600091829182919061427b8c8c8c8c87806149e2565b9095509350690ffffffffffffffffff860b483901c1660b782901c17925082156142e9576142e38c8c8c8c8c88604081106142b8576142b86155c6565b6020020151518d89604081106142d0576142d06155c6565b6020020151600160200201518b8b6148b4565b90955093505b60045b60b8811161437f576143028d8d8d8d8a8a614aa7565b80965081975050508060b80382901c60071660038260b80385901c600716901b17935083600014614377576143718d8d8d8d8d8960408110614346576143466155c6565b6020020151518e8a6040811061435e5761435e6155c6565b6020020151600160200201518c8c6148b4565b90965094505b6003016142ec565b5050506020858101519085015161439a8c8c8c8c89896149e2565b9095509350600860fc83901c1660ff82901c17925082156143d4576143ce8c8c8c8c8c88604081106142b8576142b86155c6565b90955093505b60045b6101008111614442576143ee8d8d8d8d8a8a614aa7565b8096508197505050806101000382901c6007166003826101000385901c600716901b1793508360001461443a576144348d8d8d8d8d8960408110614346576143466155c6565b90965094505b6003016143d7565b5050505097509795505050505050565b604083526020836020015260408360400152815183606001526020820151836080015260018360a0015280518360c0015260208101518360e001526040826101008560055afa50505050565b60006144ab826002615683565b83511015614515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e64730000000000000000000000000060448201526064016106b3565b50016020015160f01c90565b600061452e826004615683565b83511015614598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e64730000000000000000000000000060448201526064016106b3565b50016020015160e01c90565b60006145b1826008615683565b8351101561461b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e646578206f7574206f6620626f756e64730000000000000000000000000060448201526064016106b3565b50016020015160c01c90565b600067ffffffffffffffff8381169083161c614644836040615a31565b67ffffffffffffffff168467ffffffffffffffff16901b17905092915050565b60006146766040808051918201905290565b9050610240840193508251846060015260208301518460800152818460a001526040816101008660055afa509392505050565b60006146bb6040808051918201905290565b9050614781838361018087018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120840193506040816101208660055afa509392505050565b60006147ad6040808051918201905290565b60208581015185820151810191830182905285518751019110018152905060006147d78284613dab565b12611d0557602080820180519184015182039081905283518351929091119103038152611d05565b60006148116040808051918201905290565b9050614845826148216002614054565b60208281015190820151810360c089018190529151925191119190030360a0860152565b604084526040846020015260408460400152825184606001526020830151846080015281518460e0015260208201518461010001526040816101208660055afa509392505050565b600061489f6040808051918201905290565b90508151815260208201516020820152919050565b6000808515806148c2575083155b1561491b57851580156148d3575083155b156148e3575060009050806149d5565b8515614900576148f28661488d565b6148fb8661488d565b614912565b6149098461488d565b6149128461488d565b915091506149d5565b602084810151908701518551885114911416156149625760208381015190860151845187511491141615614957576149128a8a8a8a8a8a6149e2565b5060009050806149d5565b600061496f86858c614c8b565b9050600061497e88878d614c8b565b905061498b8c8383614d0d565b6149978c836002614664565b93506149a484898d614d40565b6149af84878d614d40565b6149ba88858d614c8b565b92506149c78c8484614db7565b6149d283888d614d40565b50505b9850989650505050505050565b600080836000036149f857506000905080614a9c565b602083015183511590151615614a1357506000905080614a9c565b6000614a2189866002614664565b9050614a2e898289614db7565b614a3981878a614e93565b6000614a45858a614ee9565b9050614a528a8383614d0d565b614a5e8a836002614664565b9350614a6b84878b614d40565b614a7684878b614d40565b614a8186858b614c8b565b9250614a8e8a8484614db7565b614a9983868b614d40565b50505b965096945050505050565b60008083600003614abd57506000905080614a9c565b602083015183511590151615614ad857506000905080614a9c565b6000614ae689866002614664565b9050614af3898289614db7565b614afe81878a614e93565b6000614b0a858a614ee9565b9050614b178a8383614d0d565b614b238a836002614664565b9350614b3084878b614d40565b614b3b84878b614d40565b614b4686858b614c8b565b9250614b538a8484614db7565b614b5e83868b614d40565b602083015183511590151615614b7c57600080935093505050614a9c565b614b898a83866002614f4b565b614b948a838a614db7565b614b9f82888b614e93565b614baa81848b614f7b565b614bb58a8383614d0d565b614bc28a87846002614f4b565b614bcd86858b614d40565b614bd886858b614d40565b614be48585888c614f9a565b614bef8a8684614db7565b614bfa85848b614d40565b602085015185511590151615614c1857600080935093505050614a9c565b614c258a83886002614f4b565b614c308a838a614db7565b614c3b82888b614e93565b614c4681868b614f7b565b614c518a8383614d0d565b614c5e8a85846002614f4b565b614c6984878b614d40565b614c7484878b614d40565b614c808387868c614f9a565b614a8e8a8484614db7565b6000614c9d6040808051918201905290565b90506000614cab8585613dab565b12614cd45760208085015181850151810391830182905284518651929091109103038152611d05565b60208481015183820151810183830181815285518851019282109290920180855292860151810391829052855191119103038152611d05565b6103608301925080518360600152602081015183608001526040816101208560055afa50610fe261036084038383614db7565b6000614d4c8484613dab565b12614d73575060208281018051918301518203908190529151835191909211919003039052565b614d958382602082810180519183015182019081905291518351019110019052565b5060208281018051918301518203908190529151835191909211919003039052565b614e7b828261018086018251602093840151835193850151608081811c6fffffffffffffffffffffffffffffffff80851682810294821695841c86810287830280871c820188810180891b9287169290920160408d01528c8402878c02958e0297909402998b02988210921191909101861b90861c018601878101858101958610981196119590950195909501831b82841c01850184810180851b939092169290920198870198909852959093029086109190941001811b93901c92909201019052565b610120830192506040826101208560055afa50505050565b614eb58383602082810180519183015182019081905291518351019110019052565b6000614ec18483613dab565b12610fe257602080840180519183015182039081905282518551929091119103038352505050565b6000614efb6040808051918201905290565b6020808501518551600190811b60ff83901c1784521b9082015290506000614f238284613dab565b12610d3557602080820180519184015182039081905283518351929091119103038152610d35565b610240840193508151846060015260208201518460800152808460a001526040836101008660055afa5050505050565b6020808301518351600190811b60ff83901c1786521b90840152614eb5565b6000614fa68484613dab565b12614fcf5760208084015181840151810391860182905283518551929091109103038452613aed565b60208381015182820151810186830181815284518751019282109290920180885292850151810391829052845191119103038452613aed565b60405180610a0001604052806050906020820280368337509192915050565b6040518061010001604052806008906020820280368337509192915050565b6040518061020001604052806010906020820280368337509192915050565b6040518061080001604052806040905b61507d615093565b8152602001906001900390816150755790505090565b60405180604001604052806002906020820280368337509192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715615103576151036150b1565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715615150576151506150b1565b604052919050565b600067ffffffffffffffff821115615172576151726150b1565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f8301126151af57600080fd5b81356151c26151bd82615158565b615109565b8181528460208386010111156151d757600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561520757600080fd5b823567ffffffffffffffff8082111561521f57600080fd5b61522b8683870161519e565b9350602085013591508082111561524157600080fd5b5061524e8582860161519e565b9150509250929050565b600081518084526020808501945080840160005b838110156152885781518752958201959082019060010161526c565b509495945050505050565b6020815281516020820152600060208301516152bb604084018267ffffffffffffffff169052565b506040830151606083015260608301516101208060808501526152e2610140850183615258565b9150608085015160a085015260a08501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08584030160c08601526153278382615258565b60c087015160e08781019190915287015161010080880191909152909601519190940152509192915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461537757600080fd5b919050565b60006020828403121561538e57600080fd5b611d0582615353565b6000602082840312156153a957600080fd5b5035919050565b60008083601f8401126153c257600080fd5b50813567ffffffffffffffff8111156153da57600080fd5b6020830191508360208285010111156153f257600080fd5b9250929050565b6000806020838503121561540c57600080fd5b823567ffffffffffffffff81111561542357600080fd5b61542f858286016153b0565b90969095509350505050565b6000806040838503121561544e57600080fd5b61545783615353565b915061546560208401615353565b90509250929050565b60005b83811015615489578181015183820152602001615471565b83811115613aed5750506000910152565b600081518084526154b281602086016020860161546e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d05602083018461549a565b60006020828403121561550957600080fd5b813567ffffffffffffffff81111561552057600080fd5b611f2b8482850161519e565b60408152600061553f604083018561549a565b8281036020840152615551818561549a565b95945050505050565b6000806000806040858703121561557057600080fd5b843567ffffffffffffffff8082111561558857600080fd5b615594888389016153b0565b909650945060208701359150808211156155ad57600080fd5b506155ba878288016153b0565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615655576156556155f5565b5060010190565b8183823760009101908152919050565b60008282101561567e5761567e6155f5565b500390565b60008219821115615696576156966155f5565b500190565b6040815260006156ae604083018561549a565b90508260208301529392505050565b6000602082840312156156cf57600080fd5b5051919050565b8051600781900b811461537757600080fd5b600082601f8301126156f957600080fd5b81516157076151bd82615158565b81815284602083860101111561571c57600080fd5b611f2b82602083016020870161546e565b60006020828403121561573f57600080fd5b815167ffffffffffffffff8082111561575757600080fd5b9083019060a0828603121561576b57600080fd5b6157736150e0565b8251801515811461578357600080fd5b81526020830151828116811461579857600080fd5b60208201526157a9604084016156d6565b6040820152606083015160608201526080830151828111156157ca57600080fd5b6157d6878286016156e8565b60808301525095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615823576158236157e5565b500690565b600082615837576158376157e5565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615874576158746155f5565b500290565b600181815b808511156158d257817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156158b8576158b86155f5565b808516156158c557918102915b93841c939080029061587e565b509250929050565b6000826158e957506001610d35565b816158f657506000610d35565b816001811461590c576002811461591657615932565b6001915050610d35565b60ff841115615927576159276155f5565b50506001821b610d35565b5060208310610133831016604e8410600b8410161715615955575081810a610d35565b61595f8383615879565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615991576159916155f5565b029392505050565b6000611d0583836158da565b600085516159b7818460208a0161546e565b7fff00000000000000000000000000000000000000000000000000000000000000861690830190815284516159f381600184016020890161546e565b8082019150507fffffffffffffffff000000000000000000000000000000000000000000000000841660018201526009810191505095945050505050565b600067ffffffffffffffff83811690831681811015615a5257615a526155f5565b03939250505056feb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5fffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffcffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffffa164736f6c634300080f000a4f776e61626c654d616e616765643a2063616c6c6572206973206e6f74207468496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069",
}

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

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

// DeploySystemConfigGlobal deploys a new Ethereum contract, binding an instance of SystemConfigGlobal to it.
func DeploySystemConfigGlobal(auth *bind.TransactOpts, backend bind.ContractBackend, certManager common.Address) (common.Address, *types.Transaction, *SystemConfigGlobal, error) {
	parsed, err := SystemConfigGlobalMetaData.GetAbi()
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	if parsed == nil {
		return common.Address{}, nil, nil, errors.New("GetABI returned nil")
	}

	address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(SystemConfigGlobalBin), backend, certManager)
	if err != nil {
		return common.Address{}, nil, nil, err
	}
	return address, tx, &SystemConfigGlobal{SystemConfigGlobalCaller: SystemConfigGlobalCaller{contract: contract}, SystemConfigGlobalTransactor: SystemConfigGlobalTransactor{contract: contract}, SystemConfigGlobalFilterer: SystemConfigGlobalFilterer{contract: contract}}, nil
}

// SystemConfigGlobal is an auto generated Go binding around an Ethereum contract.
type SystemConfigGlobal struct {
	SystemConfigGlobalCaller     // Read-only binding to the contract
	SystemConfigGlobalTransactor // Write-only binding to the contract
	SystemConfigGlobalFilterer   // Log filterer for contract events
}

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

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

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

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

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

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

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

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

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

// NewSystemConfigGlobal creates a new instance of SystemConfigGlobal, bound to a specific deployed contract.
func NewSystemConfigGlobal(address common.Address, backend bind.ContractBackend) (*SystemConfigGlobal, error) {
	contract, err := bindSystemConfigGlobal(address, backend, backend, backend)
	if err != nil {
		return nil, err
	}
	return &SystemConfigGlobal{SystemConfigGlobalCaller: SystemConfigGlobalCaller{contract: contract}, SystemConfigGlobalTransactor: SystemConfigGlobalTransactor{contract: contract}, SystemConfigGlobalFilterer: SystemConfigGlobalFilterer{contract: contract}}, nil
}

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

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

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

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

// Call invokes the (constant) contract method with params as input values and
// sets the output to result. The result type might be a single field for simple
// returns, a slice of interfaces for anonymous returns and a struct for named
// returns.
func (_SystemConfigGlobal *SystemConfigGlobalRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
	return _SystemConfigGlobal.Contract.SystemConfigGlobalCaller.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 (_SystemConfigGlobal *SystemConfigGlobalRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _SystemConfigGlobal.Contract.SystemConfigGlobalTransactor.contract.Transfer(opts)
}

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

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

// ATTESTATIONDIGEST is a free data retrieval call binding the contract method 0x3893af6d.
//
// Solidity: function ATTESTATION_DIGEST() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalCaller) ATTESTATIONDIGEST(opts *bind.CallOpts) ([32]byte, error) {
	var out []interface{}
	err := _SystemConfigGlobal.contract.Call(opts, &out, "ATTESTATION_DIGEST")

	if err != nil {
		return *new([32]byte), err
	}

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

	return out0, err

}

// ATTESTATIONDIGEST is a free data retrieval call binding the contract method 0x3893af6d.
//
// Solidity: function ATTESTATION_DIGEST() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalSession) ATTESTATIONDIGEST() ([32]byte, error) {
	return _SystemConfigGlobal.Contract.ATTESTATIONDIGEST(&_SystemConfigGlobal.CallOpts)
}

// ATTESTATIONDIGEST is a free data retrieval call binding the contract method 0x3893af6d.
//
// Solidity: function ATTESTATION_DIGEST() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) ATTESTATIONDIGEST() ([32]byte, error) {
	return _SystemConfigGlobal.Contract.ATTESTATIONDIGEST(&_SystemConfigGlobal.CallOpts)
}

// ATTESTATIONTBSPREFIX is a free data retrieval call binding the contract method 0x2d4bad8a.
//
// Solidity: function ATTESTATION_TBS_PREFIX() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalCaller) ATTESTATIONTBSPREFIX(opts *bind.CallOpts) ([32]byte, error) {
	var out []interface{}
	err := _SystemConfigGlobal.contract.Call(opts, &out, "ATTESTATION_TBS_PREFIX")

	if err != nil {
		return *new([32]byte), err
	}

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

	return out0, err

}

// ATTESTATIONTBSPREFIX is a free data retrieval call binding the contract method 0x2d4bad8a.
//
// Solidity: function ATTESTATION_TBS_PREFIX() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalSession) ATTESTATIONTBSPREFIX() ([32]byte, error) {
	return _SystemConfigGlobal.Contract.ATTESTATIONTBSPREFIX(&_SystemConfigGlobal.CallOpts)
}

// ATTESTATIONTBSPREFIX is a free data retrieval call binding the contract method 0x2d4bad8a.
//
// Solidity: function ATTESTATION_TBS_PREFIX() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) ATTESTATIONTBSPREFIX() ([32]byte, error) {
	return _SystemConfigGlobal.Contract.ATTESTATIONTBSPREFIX(&_SystemConfigGlobal.CallOpts)
}

// CABUNDLEKEY is a free data retrieval call binding the contract method 0x9cc3eb48.
//
// Solidity: function CABUNDLE_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalCaller) CABUNDLEKEY(opts *bind.CallOpts) ([32]byte, error) {
	var out []interface{}
	err := _SystemConfigGlobal.contract.Call(opts, &out, "CABUNDLE_KEY")

	if err != nil {
		return *new([32]byte), err
	}

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

	return out0, err

}

// CABUNDLEKEY is a free data retrieval call binding the contract method 0x9cc3eb48.
//
// Solidity: function CABUNDLE_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalSession) CABUNDLEKEY() ([32]byte, error) {
	return _SystemConfigGlobal.Contract.CABUNDLEKEY(&_SystemConfigGlobal.CallOpts)
}

// CABUNDLEKEY is a free data retrieval call binding the contract method 0x9cc3eb48.
//
// Solidity: function CABUNDLE_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) CABUNDLEKEY() ([32]byte, error) {
	return _SystemConfigGlobal.Contract.CABUNDLEKEY(&_SystemConfigGlobal.CallOpts)
}

// CERTIFICATEKEY is a free data retrieval call binding the contract method 0xae951149.
//
// Solidity: function CERTIFICATE_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalCaller) CERTIFICATEKEY(opts *bind.CallOpts) ([32]byte, error) {
	var out []interface{}
	err := _SystemConfigGlobal.contract.Call(opts, &out, "CERTIFICATE_KEY")

	if err != nil {
		return *new([32]byte), err
	}

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

	return out0, err

}

// CERTIFICATEKEY is a free data retrieval call binding the contract method 0xae951149.
//
// Solidity: function CERTIFICATE_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalSession) CERTIFICATEKEY() ([32]byte, error) {
	return _SystemConfigGlobal.Contract.CERTIFICATEKEY(&_SystemConfigGlobal.CallOpts)
}

// CERTIFICATEKEY is a free data retrieval call binding the contract method 0xae951149.
//
// Solidity: function CERTIFICATE_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) CERTIFICATEKEY() ([32]byte, error) {
	return _SystemConfigGlobal.Contract.CERTIFICATEKEY(&_SystemConfigGlobal.CallOpts)
}

// DIGESTKEY is a free data retrieval call binding the contract method 0x6be1e68b.
//
// Solidity: function DIGEST_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalCaller) DIGESTKEY(opts *bind.CallOpts) ([32]byte, error) {
	var out []interface{}
	err := _SystemConfigGlobal.contract.Call(opts, &out, "DIGEST_KEY")

	if err != nil {
		return *new([32]byte), err
	}

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

	return out0, err

}

// DIGESTKEY is a free data retrieval call binding the contract method 0x6be1e68b.
//
// Solidity: function DIGEST_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalSession) DIGESTKEY() ([32]byte, error) {
	return _SystemConfigGlobal.Contract.DIGESTKEY(&_SystemConfigGlobal.CallOpts)
}

// DIGESTKEY is a free data retrieval call binding the contract method 0x6be1e68b.
//
// Solidity: function DIGEST_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) DIGESTKEY() ([32]byte, error) {
	return _SystemConfigGlobal.Contract.DIGESTKEY(&_SystemConfigGlobal.CallOpts)
}

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

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

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

	return out0, err

}

// MAXAGE is a free data retrieval call binding the contract method 0x0dcaeaf2.
//
// Solidity: function MAX_AGE() view returns(uint256)
func (_SystemConfigGlobal *SystemConfigGlobalSession) MAXAGE() (*big.Int, error) {
	return _SystemConfigGlobal.Contract.MAXAGE(&_SystemConfigGlobal.CallOpts)
}

// MAXAGE is a free data retrieval call binding the contract method 0x0dcaeaf2.
//
// Solidity: function MAX_AGE() view returns(uint256)
func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) MAXAGE() (*big.Int, error) {
	return _SystemConfigGlobal.Contract.MAXAGE(&_SystemConfigGlobal.CallOpts)
}

// MODULEIDKEY is a free data retrieval call binding the contract method 0x9adb2d68.
//
// Solidity: function MODULE_ID_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalCaller) MODULEIDKEY(opts *bind.CallOpts) ([32]byte, error) {
	var out []interface{}
	err := _SystemConfigGlobal.contract.Call(opts, &out, "MODULE_ID_KEY")

	if err != nil {
		return *new([32]byte), err
	}

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

	return out0, err

}

// MODULEIDKEY is a free data retrieval call binding the contract method 0x9adb2d68.
//
// Solidity: function MODULE_ID_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalSession) MODULEIDKEY() ([32]byte, error) {
	return _SystemConfigGlobal.Contract.MODULEIDKEY(&_SystemConfigGlobal.CallOpts)
}

// MODULEIDKEY is a free data retrieval call binding the contract method 0x9adb2d68.
//
// Solidity: function MODULE_ID_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) MODULEIDKEY() ([32]byte, error) {
	return _SystemConfigGlobal.Contract.MODULEIDKEY(&_SystemConfigGlobal.CallOpts)
}

// NONCEKEY is a free data retrieval call binding the contract method 0x6378aad5.
//
// Solidity: function NONCE_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalCaller) NONCEKEY(opts *bind.CallOpts) ([32]byte, error) {
	var out []interface{}
	err := _SystemConfigGlobal.contract.Call(opts, &out, "NONCE_KEY")

	if err != nil {
		return *new([32]byte), err
	}

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

	return out0, err

}

// NONCEKEY is a free data retrieval call binding the contract method 0x6378aad5.
//
// Solidity: function NONCE_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalSession) NONCEKEY() ([32]byte, error) {
	return _SystemConfigGlobal.Contract.NONCEKEY(&_SystemConfigGlobal.CallOpts)
}

// NONCEKEY is a free data retrieval call binding the contract method 0x6378aad5.
//
// Solidity: function NONCE_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) NONCEKEY() ([32]byte, error) {
	return _SystemConfigGlobal.Contract.NONCEKEY(&_SystemConfigGlobal.CallOpts)
}

// PCRSKEY is a free data retrieval call binding the contract method 0xb22bed7e.
//
// Solidity: function PCRS_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalCaller) PCRSKEY(opts *bind.CallOpts) ([32]byte, error) {
	var out []interface{}
	err := _SystemConfigGlobal.contract.Call(opts, &out, "PCRS_KEY")

	if err != nil {
		return *new([32]byte), err
	}

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

	return out0, err

}

// PCRSKEY is a free data retrieval call binding the contract method 0xb22bed7e.
//
// Solidity: function PCRS_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalSession) PCRSKEY() ([32]byte, error) {
	return _SystemConfigGlobal.Contract.PCRSKEY(&_SystemConfigGlobal.CallOpts)
}

// PCRSKEY is a free data retrieval call binding the contract method 0xb22bed7e.
//
// Solidity: function PCRS_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) PCRSKEY() ([32]byte, error) {
	return _SystemConfigGlobal.Contract.PCRSKEY(&_SystemConfigGlobal.CallOpts)
}

// PUBLICKEYKEY is a free data retrieval call binding the contract method 0xe8b6d3fe.
//
// Solidity: function PUBLIC_KEY_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalCaller) PUBLICKEYKEY(opts *bind.CallOpts) ([32]byte, error) {
	var out []interface{}
	err := _SystemConfigGlobal.contract.Call(opts, &out, "PUBLIC_KEY_KEY")

	if err != nil {
		return *new([32]byte), err
	}

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

	return out0, err

}

// PUBLICKEYKEY is a free data retrieval call binding the contract method 0xe8b6d3fe.
//
// Solidity: function PUBLIC_KEY_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalSession) PUBLICKEYKEY() ([32]byte, error) {
	return _SystemConfigGlobal.Contract.PUBLICKEYKEY(&_SystemConfigGlobal.CallOpts)
}

// PUBLICKEYKEY is a free data retrieval call binding the contract method 0xe8b6d3fe.
//
// Solidity: function PUBLIC_KEY_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) PUBLICKEYKEY() ([32]byte, error) {
	return _SystemConfigGlobal.Contract.PUBLICKEYKEY(&_SystemConfigGlobal.CallOpts)
}

// TIMESTAMPKEY is a free data retrieval call binding the contract method 0xe0a655ff.
//
// Solidity: function TIMESTAMP_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalCaller) TIMESTAMPKEY(opts *bind.CallOpts) ([32]byte, error) {
	var out []interface{}
	err := _SystemConfigGlobal.contract.Call(opts, &out, "TIMESTAMP_KEY")

	if err != nil {
		return *new([32]byte), err
	}

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

	return out0, err

}

// TIMESTAMPKEY is a free data retrieval call binding the contract method 0xe0a655ff.
//
// Solidity: function TIMESTAMP_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalSession) TIMESTAMPKEY() ([32]byte, error) {
	return _SystemConfigGlobal.Contract.TIMESTAMPKEY(&_SystemConfigGlobal.CallOpts)
}

// TIMESTAMPKEY is a free data retrieval call binding the contract method 0xe0a655ff.
//
// Solidity: function TIMESTAMP_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) TIMESTAMPKEY() ([32]byte, error) {
	return _SystemConfigGlobal.Contract.TIMESTAMPKEY(&_SystemConfigGlobal.CallOpts)
}

// USERDATAKEY is a free data retrieval call binding the contract method 0xcebf08d7.
//
// Solidity: function USER_DATA_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalCaller) USERDATAKEY(opts *bind.CallOpts) ([32]byte, error) {
	var out []interface{}
	err := _SystemConfigGlobal.contract.Call(opts, &out, "USER_DATA_KEY")

	if err != nil {
		return *new([32]byte), err
	}

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

	return out0, err

}

// USERDATAKEY is a free data retrieval call binding the contract method 0xcebf08d7.
//
// Solidity: function USER_DATA_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalSession) USERDATAKEY() ([32]byte, error) {
	return _SystemConfigGlobal.Contract.USERDATAKEY(&_SystemConfigGlobal.CallOpts)
}

// USERDATAKEY is a free data retrieval call binding the contract method 0xcebf08d7.
//
// Solidity: function USER_DATA_KEY() view returns(bytes32)
func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) USERDATAKEY() ([32]byte, error) {
	return _SystemConfigGlobal.Contract.USERDATAKEY(&_SystemConfigGlobal.CallOpts)
}

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

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

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

	return out0, err

}

// CertManager is a free data retrieval call binding the contract method 0x739e8484.
//
// Solidity: function certManager() view returns(address)
func (_SystemConfigGlobal *SystemConfigGlobalSession) CertManager() (common.Address, error) {
	return _SystemConfigGlobal.Contract.CertManager(&_SystemConfigGlobal.CallOpts)
}

// CertManager is a free data retrieval call binding the contract method 0x739e8484.
//
// Solidity: function certManager() view returns(address)
func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) CertManager() (common.Address, error) {
	return _SystemConfigGlobal.Contract.CertManager(&_SystemConfigGlobal.CallOpts)
}

// DecodeAttestationTbs is a free data retrieval call binding the contract method 0xa903a277.
//
// Solidity: function decodeAttestationTbs(bytes attestation) pure returns(bytes attestationTbs, bytes signature)
func (_SystemConfigGlobal *SystemConfigGlobalCaller) DecodeAttestationTbs(opts *bind.CallOpts, attestation []byte) (struct {
	AttestationTbs []byte
	Signature      []byte
}, error) {
	var out []interface{}
	err := _SystemConfigGlobal.contract.Call(opts, &out, "decodeAttestationTbs", attestation)

	outstruct := new(struct {
		AttestationTbs []byte
		Signature      []byte
	})
	if err != nil {
		return *outstruct, err
	}

	outstruct.AttestationTbs = *abi.ConvertType(out[0], new([]byte)).(*[]byte)
	outstruct.Signature = *abi.ConvertType(out[1], new([]byte)).(*[]byte)

	return *outstruct, err

}

// DecodeAttestationTbs is a free data retrieval call binding the contract method 0xa903a277.
//
// Solidity: function decodeAttestationTbs(bytes attestation) pure returns(bytes attestationTbs, bytes signature)
func (_SystemConfigGlobal *SystemConfigGlobalSession) DecodeAttestationTbs(attestation []byte) (struct {
	AttestationTbs []byte
	Signature      []byte
}, error) {
	return _SystemConfigGlobal.Contract.DecodeAttestationTbs(&_SystemConfigGlobal.CallOpts, attestation)
}

// DecodeAttestationTbs is a free data retrieval call binding the contract method 0xa903a277.
//
// Solidity: function decodeAttestationTbs(bytes attestation) pure returns(bytes attestationTbs, bytes signature)
func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) DecodeAttestationTbs(attestation []byte) (struct {
	AttestationTbs []byte
	Signature      []byte
}, error) {
	return _SystemConfigGlobal.Contract.DecodeAttestationTbs(&_SystemConfigGlobal.CallOpts, attestation)
}

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

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

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

	return out0, err

}

// Manager is a free data retrieval call binding the contract method 0x481c6a75.
//
// Solidity: function manager() view returns(address)
func (_SystemConfigGlobal *SystemConfigGlobalSession) Manager() (common.Address, error) {
	return _SystemConfigGlobal.Contract.Manager(&_SystemConfigGlobal.CallOpts)
}

// Manager is a free data retrieval call binding the contract method 0x481c6a75.
//
// Solidity: function manager() view returns(address)
func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) Manager() (common.Address, error) {
	return _SystemConfigGlobal.Contract.Manager(&_SystemConfigGlobal.CallOpts)
}

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

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

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

	return out0, err

}

// Owner is a free data retrieval call binding the contract method 0x8da5cb5b.
//
// Solidity: function owner() view returns(address)
func (_SystemConfigGlobal *SystemConfigGlobalSession) Owner() (common.Address, error) {
	return _SystemConfigGlobal.Contract.Owner(&_SystemConfigGlobal.CallOpts)
}

// Owner is a free data retrieval call binding the contract method 0x8da5cb5b.
//
// Solidity: function owner() view returns(address)
func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) Owner() (common.Address, error) {
	return _SystemConfigGlobal.Contract.Owner(&_SystemConfigGlobal.CallOpts)
}

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

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

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

	return out0, err

}

// Proposer is a free data retrieval call binding the contract method 0xa8e4fb90.
//
// Solidity: function proposer() view returns(address)
func (_SystemConfigGlobal *SystemConfigGlobalSession) Proposer() (common.Address, error) {
	return _SystemConfigGlobal.Contract.Proposer(&_SystemConfigGlobal.CallOpts)
}

// Proposer is a free data retrieval call binding the contract method 0xa8e4fb90.
//
// Solidity: function proposer() view returns(address)
func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) Proposer() (common.Address, error) {
	return _SystemConfigGlobal.Contract.Proposer(&_SystemConfigGlobal.CallOpts)
}

// ValidPCR0s is a free data retrieval call binding the contract method 0x295840d9.
//
// Solidity: function validPCR0s(bytes32 ) view returns(bool)
func (_SystemConfigGlobal *SystemConfigGlobalCaller) ValidPCR0s(opts *bind.CallOpts, arg0 [32]byte) (bool, error) {
	var out []interface{}
	err := _SystemConfigGlobal.contract.Call(opts, &out, "validPCR0s", arg0)

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

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

	return out0, err

}

// ValidPCR0s is a free data retrieval call binding the contract method 0x295840d9.
//
// Solidity: function validPCR0s(bytes32 ) view returns(bool)
func (_SystemConfigGlobal *SystemConfigGlobalSession) ValidPCR0s(arg0 [32]byte) (bool, error) {
	return _SystemConfigGlobal.Contract.ValidPCR0s(&_SystemConfigGlobal.CallOpts, arg0)
}

// ValidPCR0s is a free data retrieval call binding the contract method 0x295840d9.
//
// Solidity: function validPCR0s(bytes32 ) view returns(bool)
func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) ValidPCR0s(arg0 [32]byte) (bool, error) {
	return _SystemConfigGlobal.Contract.ValidPCR0s(&_SystemConfigGlobal.CallOpts, arg0)
}

// ValidSigners is a free data retrieval call binding the contract method 0x6a73b00b.
//
// Solidity: function validSigners(address ) view returns(bool)
func (_SystemConfigGlobal *SystemConfigGlobalCaller) ValidSigners(opts *bind.CallOpts, arg0 common.Address) (bool, error) {
	var out []interface{}
	err := _SystemConfigGlobal.contract.Call(opts, &out, "validSigners", arg0)

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

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

	return out0, err

}

// ValidSigners is a free data retrieval call binding the contract method 0x6a73b00b.
//
// Solidity: function validSigners(address ) view returns(bool)
func (_SystemConfigGlobal *SystemConfigGlobalSession) ValidSigners(arg0 common.Address) (bool, error) {
	return _SystemConfigGlobal.Contract.ValidSigners(&_SystemConfigGlobal.CallOpts, arg0)
}

// ValidSigners is a free data retrieval call binding the contract method 0x6a73b00b.
//
// Solidity: function validSigners(address ) view returns(bool)
func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) ValidSigners(arg0 common.Address) (bool, error) {
	return _SystemConfigGlobal.Contract.ValidSigners(&_SystemConfigGlobal.CallOpts, arg0)
}

// Version is a free data retrieval call binding the contract method 0x54fd4d50.
//
// Solidity: function version() pure returns(string)
func (_SystemConfigGlobal *SystemConfigGlobalCaller) Version(opts *bind.CallOpts) (string, error) {
	var out []interface{}
	err := _SystemConfigGlobal.contract.Call(opts, &out, "version")

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

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

	return out0, err

}

// Version is a free data retrieval call binding the contract method 0x54fd4d50.
//
// Solidity: function version() pure returns(string)
func (_SystemConfigGlobal *SystemConfigGlobalSession) Version() (string, error) {
	return _SystemConfigGlobal.Contract.Version(&_SystemConfigGlobal.CallOpts)
}

// Version is a free data retrieval call binding the contract method 0x54fd4d50.
//
// Solidity: function version() pure returns(string)
func (_SystemConfigGlobal *SystemConfigGlobalCallerSession) Version() (string, error) {
	return _SystemConfigGlobal.Contract.Version(&_SystemConfigGlobal.CallOpts)
}

// DeregisterPCR0 is a paid mutator transaction binding the contract method 0x50697a3f.
//
// Solidity: function deregisterPCR0(bytes pcr0) returns()
func (_SystemConfigGlobal *SystemConfigGlobalTransactor) DeregisterPCR0(opts *bind.TransactOpts, pcr0 []byte) (*types.Transaction, error) {
	return _SystemConfigGlobal.contract.Transact(opts, "deregisterPCR0", pcr0)
}

// DeregisterPCR0 is a paid mutator transaction binding the contract method 0x50697a3f.
//
// Solidity: function deregisterPCR0(bytes pcr0) returns()
func (_SystemConfigGlobal *SystemConfigGlobalSession) DeregisterPCR0(pcr0 []byte) (*types.Transaction, error) {
	return _SystemConfigGlobal.Contract.DeregisterPCR0(&_SystemConfigGlobal.TransactOpts, pcr0)
}

// DeregisterPCR0 is a paid mutator transaction binding the contract method 0x50697a3f.
//
// Solidity: function deregisterPCR0(bytes pcr0) returns()
func (_SystemConfigGlobal *SystemConfigGlobalTransactorSession) DeregisterPCR0(pcr0 []byte) (*types.Transaction, error) {
	return _SystemConfigGlobal.Contract.DeregisterPCR0(&_SystemConfigGlobal.TransactOpts, pcr0)
}

// DeregisterSigner is a paid mutator transaction binding the contract method 0x0ba24fe0.
//
// Solidity: function deregisterSigner(address signer) returns()
func (_SystemConfigGlobal *SystemConfigGlobalTransactor) DeregisterSigner(opts *bind.TransactOpts, signer common.Address) (*types.Transaction, error) {
	return _SystemConfigGlobal.contract.Transact(opts, "deregisterSigner", signer)
}

// DeregisterSigner is a paid mutator transaction binding the contract method 0x0ba24fe0.
//
// Solidity: function deregisterSigner(address signer) returns()
func (_SystemConfigGlobal *SystemConfigGlobalSession) DeregisterSigner(signer common.Address) (*types.Transaction, error) {
	return _SystemConfigGlobal.Contract.DeregisterSigner(&_SystemConfigGlobal.TransactOpts, signer)
}

// DeregisterSigner is a paid mutator transaction binding the contract method 0x0ba24fe0.
//
// Solidity: function deregisterSigner(address signer) returns()
func (_SystemConfigGlobal *SystemConfigGlobalTransactorSession) DeregisterSigner(signer common.Address) (*types.Transaction, error) {
	return _SystemConfigGlobal.Contract.DeregisterSigner(&_SystemConfigGlobal.TransactOpts, signer)
}

// Initialize is a paid mutator transaction binding the contract method 0x485cc955.
//
// Solidity: function initialize(address _owner, address _manager) returns()
func (_SystemConfigGlobal *SystemConfigGlobalTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _manager common.Address) (*types.Transaction, error) {
	return _SystemConfigGlobal.contract.Transact(opts, "initialize", _owner, _manager)
}

// Initialize is a paid mutator transaction binding the contract method 0x485cc955.
//
// Solidity: function initialize(address _owner, address _manager) returns()
func (_SystemConfigGlobal *SystemConfigGlobalSession) Initialize(_owner common.Address, _manager common.Address) (*types.Transaction, error) {
	return _SystemConfigGlobal.Contract.Initialize(&_SystemConfigGlobal.TransactOpts, _owner, _manager)
}

// Initialize is a paid mutator transaction binding the contract method 0x485cc955.
//
// Solidity: function initialize(address _owner, address _manager) returns()
func (_SystemConfigGlobal *SystemConfigGlobalTransactorSession) Initialize(_owner common.Address, _manager common.Address) (*types.Transaction, error) {
	return _SystemConfigGlobal.Contract.Initialize(&_SystemConfigGlobal.TransactOpts, _owner, _manager)
}

// RegisterPCR0 is a paid mutator transaction binding the contract method 0x2c68fa02.
//
// Solidity: function registerPCR0(bytes pcr0) returns()
func (_SystemConfigGlobal *SystemConfigGlobalTransactor) RegisterPCR0(opts *bind.TransactOpts, pcr0 []byte) (*types.Transaction, error) {
	return _SystemConfigGlobal.contract.Transact(opts, "registerPCR0", pcr0)
}

// RegisterPCR0 is a paid mutator transaction binding the contract method 0x2c68fa02.
//
// Solidity: function registerPCR0(bytes pcr0) returns()
func (_SystemConfigGlobal *SystemConfigGlobalSession) RegisterPCR0(pcr0 []byte) (*types.Transaction, error) {
	return _SystemConfigGlobal.Contract.RegisterPCR0(&_SystemConfigGlobal.TransactOpts, pcr0)
}

// RegisterPCR0 is a paid mutator transaction binding the contract method 0x2c68fa02.
//
// Solidity: function registerPCR0(bytes pcr0) returns()
func (_SystemConfigGlobal *SystemConfigGlobalTransactorSession) RegisterPCR0(pcr0 []byte) (*types.Transaction, error) {
	return _SystemConfigGlobal.Contract.RegisterPCR0(&_SystemConfigGlobal.TransactOpts, pcr0)
}

// RegisterSigner is a paid mutator transaction binding the contract method 0xba58e82a.
//
// Solidity: function registerSigner(bytes attestationTbs, bytes signature) returns()
func (_SystemConfigGlobal *SystemConfigGlobalTransactor) RegisterSigner(opts *bind.TransactOpts, attestationTbs []byte, signature []byte) (*types.Transaction, error) {
	return _SystemConfigGlobal.contract.Transact(opts, "registerSigner", attestationTbs, signature)
}

// RegisterSigner is a paid mutator transaction binding the contract method 0xba58e82a.
//
// Solidity: function registerSigner(bytes attestationTbs, bytes signature) returns()
func (_SystemConfigGlobal *SystemConfigGlobalSession) RegisterSigner(attestationTbs []byte, signature []byte) (*types.Transaction, error) {
	return _SystemConfigGlobal.Contract.RegisterSigner(&_SystemConfigGlobal.TransactOpts, attestationTbs, signature)
}

// RegisterSigner is a paid mutator transaction binding the contract method 0xba58e82a.
//
// Solidity: function registerSigner(bytes attestationTbs, bytes signature) returns()
func (_SystemConfigGlobal *SystemConfigGlobalTransactorSession) RegisterSigner(attestationTbs []byte, signature []byte) (*types.Transaction, error) {
	return _SystemConfigGlobal.Contract.RegisterSigner(&_SystemConfigGlobal.TransactOpts, attestationTbs, signature)
}

// RenounceManagement is a paid mutator transaction binding the contract method 0x089208d8.
//
// Solidity: function renounceManagement() returns()
func (_SystemConfigGlobal *SystemConfigGlobalTransactor) RenounceManagement(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _SystemConfigGlobal.contract.Transact(opts, "renounceManagement")
}

// RenounceManagement is a paid mutator transaction binding the contract method 0x089208d8.
//
// Solidity: function renounceManagement() returns()
func (_SystemConfigGlobal *SystemConfigGlobalSession) RenounceManagement() (*types.Transaction, error) {
	return _SystemConfigGlobal.Contract.RenounceManagement(&_SystemConfigGlobal.TransactOpts)
}

// RenounceManagement is a paid mutator transaction binding the contract method 0x089208d8.
//
// Solidity: function renounceManagement() returns()
func (_SystemConfigGlobal *SystemConfigGlobalTransactorSession) RenounceManagement() (*types.Transaction, error) {
	return _SystemConfigGlobal.Contract.RenounceManagement(&_SystemConfigGlobal.TransactOpts)
}

// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6.
//
// Solidity: function renounceOwnership() returns()
func (_SystemConfigGlobal *SystemConfigGlobalTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) {
	return _SystemConfigGlobal.contract.Transact(opts, "renounceOwnership")
}

// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6.
//
// Solidity: function renounceOwnership() returns()
func (_SystemConfigGlobal *SystemConfigGlobalSession) RenounceOwnership() (*types.Transaction, error) {
	return _SystemConfigGlobal.Contract.RenounceOwnership(&_SystemConfigGlobal.TransactOpts)
}

// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6.
//
// Solidity: function renounceOwnership() returns()
func (_SystemConfigGlobal *SystemConfigGlobalTransactorSession) RenounceOwnership() (*types.Transaction, error) {
	return _SystemConfigGlobal.Contract.RenounceOwnership(&_SystemConfigGlobal.TransactOpts)
}

// SetProposer is a paid mutator transaction binding the contract method 0x1fb4a228.
//
// Solidity: function setProposer(address _proposer) returns()
func (_SystemConfigGlobal *SystemConfigGlobalTransactor) SetProposer(opts *bind.TransactOpts, _proposer common.Address) (*types.Transaction, error) {
	return _SystemConfigGlobal.contract.Transact(opts, "setProposer", _proposer)
}

// SetProposer is a paid mutator transaction binding the contract method 0x1fb4a228.
//
// Solidity: function setProposer(address _proposer) returns()
func (_SystemConfigGlobal *SystemConfigGlobalSession) SetProposer(_proposer common.Address) (*types.Transaction, error) {
	return _SystemConfigGlobal.Contract.SetProposer(&_SystemConfigGlobal.TransactOpts, _proposer)
}

// SetProposer is a paid mutator transaction binding the contract method 0x1fb4a228.
//
// Solidity: function setProposer(address _proposer) returns()
func (_SystemConfigGlobal *SystemConfigGlobalTransactorSession) SetProposer(_proposer common.Address) (*types.Transaction, error) {
	return _SystemConfigGlobal.Contract.SetProposer(&_SystemConfigGlobal.TransactOpts, _proposer)
}

// TransferManagement is a paid mutator transaction binding the contract method 0xe4edf852.
//
// Solidity: function transferManagement(address newManager) returns()
func (_SystemConfigGlobal *SystemConfigGlobalTransactor) TransferManagement(opts *bind.TransactOpts, newManager common.Address) (*types.Transaction, error) {
	return _SystemConfigGlobal.contract.Transact(opts, "transferManagement", newManager)
}

// TransferManagement is a paid mutator transaction binding the contract method 0xe4edf852.
//
// Solidity: function transferManagement(address newManager) returns()
func (_SystemConfigGlobal *SystemConfigGlobalSession) TransferManagement(newManager common.Address) (*types.Transaction, error) {
	return _SystemConfigGlobal.Contract.TransferManagement(&_SystemConfigGlobal.TransactOpts, newManager)
}

// TransferManagement is a paid mutator transaction binding the contract method 0xe4edf852.
//
// Solidity: function transferManagement(address newManager) returns()
func (_SystemConfigGlobal *SystemConfigGlobalTransactorSession) TransferManagement(newManager common.Address) (*types.Transaction, error) {
	return _SystemConfigGlobal.Contract.TransferManagement(&_SystemConfigGlobal.TransactOpts, newManager)
}

// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b.
//
// Solidity: function transferOwnership(address newOwner) returns()
func (_SystemConfigGlobal *SystemConfigGlobalTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) {
	return _SystemConfigGlobal.contract.Transact(opts, "transferOwnership", newOwner)
}

// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b.
//
// Solidity: function transferOwnership(address newOwner) returns()
func (_SystemConfigGlobal *SystemConfigGlobalSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) {
	return _SystemConfigGlobal.Contract.TransferOwnership(&_SystemConfigGlobal.TransactOpts, newOwner)
}

// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b.
//
// Solidity: function transferOwnership(address newOwner) returns()
func (_SystemConfigGlobal *SystemConfigGlobalTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) {
	return _SystemConfigGlobal.Contract.TransferOwnership(&_SystemConfigGlobal.TransactOpts, newOwner)
}

// ValidateAttestation is a paid mutator transaction binding the contract method 0x05f7aead.
//
// Solidity: function validateAttestation(bytes attestationTbs, bytes signature) returns((uint256,uint64,uint256,uint256[],uint256,uint256[],uint256,uint256,uint256))
func (_SystemConfigGlobal *SystemConfigGlobalTransactor) ValidateAttestation(opts *bind.TransactOpts, attestationTbs []byte, signature []byte) (*types.Transaction, error) {
	return _SystemConfigGlobal.contract.Transact(opts, "validateAttestation", attestationTbs, signature)
}

// ValidateAttestation is a paid mutator transaction binding the contract method 0x05f7aead.
//
// Solidity: function validateAttestation(bytes attestationTbs, bytes signature) returns((uint256,uint64,uint256,uint256[],uint256,uint256[],uint256,uint256,uint256))
func (_SystemConfigGlobal *SystemConfigGlobalSession) ValidateAttestation(attestationTbs []byte, signature []byte) (*types.Transaction, error) {
	return _SystemConfigGlobal.Contract.ValidateAttestation(&_SystemConfigGlobal.TransactOpts, attestationTbs, signature)
}

// ValidateAttestation is a paid mutator transaction binding the contract method 0x05f7aead.
//
// Solidity: function validateAttestation(bytes attestationTbs, bytes signature) returns((uint256,uint64,uint256,uint256[],uint256,uint256[],uint256,uint256,uint256))
func (_SystemConfigGlobal *SystemConfigGlobalTransactorSession) ValidateAttestation(attestationTbs []byte, signature []byte) (*types.Transaction, error) {
	return _SystemConfigGlobal.Contract.ValidateAttestation(&_SystemConfigGlobal.TransactOpts, attestationTbs, signature)
}

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

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

// SystemConfigGlobalInitialized represents a Initialized event raised by the SystemConfigGlobal contract.
type SystemConfigGlobalInitialized struct {
	Version uint8
	Raw     types.Log // Blockchain specific contextual infos
}

// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498.
//
// Solidity: event Initialized(uint8 version)
func (_SystemConfigGlobal *SystemConfigGlobalFilterer) FilterInitialized(opts *bind.FilterOpts) (*SystemConfigGlobalInitializedIterator, error) {

	logs, sub, err := _SystemConfigGlobal.contract.FilterLogs(opts, "Initialized")
	if err != nil {
		return nil, err
	}
	return &SystemConfigGlobalInitializedIterator{contract: _SystemConfigGlobal.contract, event: "Initialized", logs: logs, sub: sub}, nil
}

// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498.
//
// Solidity: event Initialized(uint8 version)
func (_SystemConfigGlobal *SystemConfigGlobalFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *SystemConfigGlobalInitialized) (event.Subscription, error) {

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

// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498.
//
// Solidity: event Initialized(uint8 version)
func (_SystemConfigGlobal *SystemConfigGlobalFilterer) ParseInitialized(log types.Log) (*SystemConfigGlobalInitialized, error) {
	event := new(SystemConfigGlobalInitialized)
	if err := _SystemConfigGlobal.contract.UnpackLog(event, "Initialized", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// SystemConfigGlobalManagementTransferred represents a ManagementTransferred event raised by the SystemConfigGlobal contract.
type SystemConfigGlobalManagementTransferred struct {
	PreviousManager common.Address
	NewManager      common.Address
	Raw             types.Log // Blockchain specific contextual infos
}

// FilterManagementTransferred is a free log retrieval operation binding the contract event 0x80f15e9dbc60884fdb59fb8ed4fc48a9a689e028f055e893ed45ca5be67c5c85.
//
// Solidity: event ManagementTransferred(address indexed previousManager, address indexed newManager)
func (_SystemConfigGlobal *SystemConfigGlobalFilterer) FilterManagementTransferred(opts *bind.FilterOpts, previousManager []common.Address, newManager []common.Address) (*SystemConfigGlobalManagementTransferredIterator, error) {

	var previousManagerRule []interface{}
	for _, previousManagerItem := range previousManager {
		previousManagerRule = append(previousManagerRule, previousManagerItem)
	}
	var newManagerRule []interface{}
	for _, newManagerItem := range newManager {
		newManagerRule = append(newManagerRule, newManagerItem)
	}

	logs, sub, err := _SystemConfigGlobal.contract.FilterLogs(opts, "ManagementTransferred", previousManagerRule, newManagerRule)
	if err != nil {
		return nil, err
	}
	return &SystemConfigGlobalManagementTransferredIterator{contract: _SystemConfigGlobal.contract, event: "ManagementTransferred", logs: logs, sub: sub}, nil
}

// WatchManagementTransferred is a free log subscription operation binding the contract event 0x80f15e9dbc60884fdb59fb8ed4fc48a9a689e028f055e893ed45ca5be67c5c85.
//
// Solidity: event ManagementTransferred(address indexed previousManager, address indexed newManager)
func (_SystemConfigGlobal *SystemConfigGlobalFilterer) WatchManagementTransferred(opts *bind.WatchOpts, sink chan<- *SystemConfigGlobalManagementTransferred, previousManager []common.Address, newManager []common.Address) (event.Subscription, error) {

	var previousManagerRule []interface{}
	for _, previousManagerItem := range previousManager {
		previousManagerRule = append(previousManagerRule, previousManagerItem)
	}
	var newManagerRule []interface{}
	for _, newManagerItem := range newManager {
		newManagerRule = append(newManagerRule, newManagerItem)
	}

	logs, sub, err := _SystemConfigGlobal.contract.WatchLogs(opts, "ManagementTransferred", previousManagerRule, newManagerRule)
	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(SystemConfigGlobalManagementTransferred)
				if err := _SystemConfigGlobal.contract.UnpackLog(event, "ManagementTransferred", 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
}

// ParseManagementTransferred is a log parse operation binding the contract event 0x80f15e9dbc60884fdb59fb8ed4fc48a9a689e028f055e893ed45ca5be67c5c85.
//
// Solidity: event ManagementTransferred(address indexed previousManager, address indexed newManager)
func (_SystemConfigGlobal *SystemConfigGlobalFilterer) ParseManagementTransferred(log types.Log) (*SystemConfigGlobalManagementTransferred, error) {
	event := new(SystemConfigGlobalManagementTransferred)
	if err := _SystemConfigGlobal.contract.UnpackLog(event, "ManagementTransferred", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}

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

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

// SystemConfigGlobalOwnershipTransferred represents a OwnershipTransferred event raised by the SystemConfigGlobal contract.
type SystemConfigGlobalOwnershipTransferred struct {
	PreviousOwner common.Address
	NewOwner      common.Address
	Raw           types.Log // Blockchain specific contextual infos
}

// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0.
//
// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
func (_SystemConfigGlobal *SystemConfigGlobalFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*SystemConfigGlobalOwnershipTransferredIterator, error) {

	var previousOwnerRule []interface{}
	for _, previousOwnerItem := range previousOwner {
		previousOwnerRule = append(previousOwnerRule, previousOwnerItem)
	}
	var newOwnerRule []interface{}
	for _, newOwnerItem := range newOwner {
		newOwnerRule = append(newOwnerRule, newOwnerItem)
	}

	logs, sub, err := _SystemConfigGlobal.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule)
	if err != nil {
		return nil, err
	}
	return &SystemConfigGlobalOwnershipTransferredIterator{contract: _SystemConfigGlobal.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil
}

// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0.
//
// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
func (_SystemConfigGlobal *SystemConfigGlobalFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *SystemConfigGlobalOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) {

	var previousOwnerRule []interface{}
	for _, previousOwnerItem := range previousOwner {
		previousOwnerRule = append(previousOwnerRule, previousOwnerItem)
	}
	var newOwnerRule []interface{}
	for _, newOwnerItem := range newOwner {
		newOwnerRule = append(newOwnerRule, newOwnerItem)
	}

	logs, sub, err := _SystemConfigGlobal.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule)
	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(SystemConfigGlobalOwnershipTransferred)
				if err := _SystemConfigGlobal.contract.UnpackLog(event, "OwnershipTransferred", 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
}

// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0.
//
// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
func (_SystemConfigGlobal *SystemConfigGlobalFilterer) ParseOwnershipTransferred(log types.Log) (*SystemConfigGlobalOwnershipTransferred, error) {
	event := new(SystemConfigGlobalOwnershipTransferred)
	if err := _SystemConfigGlobal.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
		return nil, err
	}
	event.Raw = log
	return event, nil
}
