diff --git a/contracts/.gitignore b/contracts/.gitignore index ddfd43837dc..daaf02e38df 100644 --- a/contracts/.gitignore +++ b/contracts/.gitignore @@ -2,6 +2,7 @@ artifacts cache node_modules solc +zksolc abi coverage coverage.json diff --git a/contracts/GNUmakefile b/contracts/GNUmakefile index 4066c76037e..9d7b8423c59 100644 --- a/contracts/GNUmakefile +++ b/contracts/GNUmakefile @@ -98,6 +98,12 @@ artifact-generate: ./scripts/generate_compiled_json_ccip.sh $(contract) $(solcversion) $(artifactpath) +.PHONY: wrappers-ccip-zksupport +wrappers-ccip-zksupport: pnpmdep mockery abigen ## Recompiles solidity contracts for ccip and their go wrappers with zksync support + ./scripts/native_solc_compile_all_ccip_zks + go generate ../core/gethwrappers/ccip/go_generate_zks.go + + help: @echo "" @echo " .__ .__ .__ .__ __" diff --git a/contracts/scripts/native_solc_compile_all_ccip_zks b/contracts/scripts/native_solc_compile_all_ccip_zks new file mode 100755 index 00000000000..21433d80814 --- /dev/null +++ b/contracts/scripts/native_solc_compile_all_ccip_zks @@ -0,0 +1,98 @@ +#!/usr/bin/env bash + +set -e + +echo " ┌──────────────────────────────────────────────┐" +echo " │ Compiling CCIP contracts... │" +echo " └──────────────────────────────────────────────┘" + +SOLC_VERSION="0.8.24" +OPTIMIZE_RUNS=26000 +OPTIMIZE_RUNS_OFFRAMP=500 +ZKSOLC_VERSION="1.5.6" + + +SCRIPTPATH="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" +python3 -m pip install --require-hashes -r "$SCRIPTPATH"/requirements.txt +solc-select install $SOLC_VERSION +solc-select use $SOLC_VERSION +export SOLC_VERSION=$SOLC_VERSION + +ROOT="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; cd ../../ && pwd -P )" + +compileContract () { + local contract + contract=$(basename "$1" ".sol") + + local optimize_runs=$OPTIMIZE_RUNS + + case $1 in + "ccip/offRamp/OffRamp.sol") + echo "OffRamp uses $OPTIMIZE_RUNS_OFFRAMP optimizer runs." + optimize_runs=$OPTIMIZE_RUNS_OFFRAMP + ;; + esac + + solc --overwrite --optimize --optimize-runs $optimize_runs --metadata-hash none \ + -o "$ROOT"/contracts/solc/v$SOLC_VERSION/"$contract" \ + --abi --bin --allow-paths "$ROOT"/contracts/src/v0.8 \ + --bin-runtime --hashes --metadata --metadata-literal --combined-json abi,hashes,metadata,srcmap,srcmap-runtime \ + --evm-version paris \ + "$ROOT"/contracts/src/v0.8/"$1" + + zksolc --overwrite -O3 --metadata-hash none \ + -o "$ROOT"/contracts/zksolc/v$ZKSOLC_VERSION/"$contract" \ + --bin --allow-paths "$ROOT"/contracts/src/v0.8 \ + --metadata --metadata-literal \ + --evm-version paris \ + "$ROOT"/contracts/src/v0.8/"$1" +} + + +# Solc produces and overwrites intermediary contracts. +# Contracts should be ordered in reverse-import-complexity-order to minimize overwrite risks. +compileContract ccip/offRamp/OffRamp.sol +compileContract ccip/FeeQuoter.sol +compileContract ccip/onRamp/OnRamp.sol +compileContract ccip/applications/PingPongDemo.sol +compileContract ccip/applications/EtherSenderReceiver.sol +compileContract ccip/rmn/RMNRemote.sol +compileContract ccip/rmn/RMNHome.sol +compileContract ccip/rmn/ARMProxy.sol +compileContract ccip/MultiAggregateRateLimiter.sol +compileContract ccip/Router.sol +compileContract ccip/tokenAdminRegistry/TokenAdminRegistry.sol +compileContract ccip/tokenAdminRegistry/RegistryModuleOwnerCustom.sol +compileContract ccip/capability/CCIPHome.sol +compileContract ccip/NonceManager.sol +compileContract shared/token/ERC677/BurnMintERC677.sol +compileContract shared/token/ERC20/BurnMintERC20.sol + + +# Pools +compileContract ccip/pools/LockReleaseTokenPool.sol +compileContract ccip/pools/BurnMintTokenPool.sol +compileContract ccip/pools/BurnFromMintTokenPool.sol +compileContract ccip/pools/BurnWithFromMintTokenPool.sol +compileContract ccip/pools/TokenPool.sol + + +# Test helpers +compileContract ccip/test/helpers/BurnMintERC677Helper.sol +compileContract ccip/test/helpers/MessageHasher.sol +compileContract ccip/test/helpers/USDCReaderTester.sol +compileContract ccip/test/helpers/ReportCodec.sol +compileContract ccip/test/helpers/receivers/MaybeRevertMessageReceiver.sol +compileContract ccip/test/helpers/MultiOCR3Helper.sol +compileContract ccip/test/mocks/MockE2EUSDCTokenMessenger.sol +compileContract ccip/test/mocks/MockE2EUSDCTransmitter.sol +# compileContract ccip/test/WETH9.sol (error) +compileContract ccip/test/helpers/CCIPReaderTester.sol + +# Encoding Utils +# compileContract ccip/interfaces/encodingutils/ICCIPEncodingUtils.sol (error) + +# Customer contracts +compileContract ccip/pools/USDC/USDCTokenPool.sol + +compileContract tests/MockV3Aggregator.sol diff --git a/core/gethwrappers/abigen.go b/core/gethwrappers/abigen.go index af085f30d9b..7690bcda57f 100644 --- a/core/gethwrappers/abigen.go +++ b/core/gethwrappers/abigen.go @@ -28,7 +28,7 @@ const headerComment = `// Code generated - DO NOT EDIT. // AbigenArgs is the arguments to the abigen executable. E.g., Bin is the -bin // arg. type AbigenArgs struct { - Bin, ABI, Out, Type, Pkg string + Bin, ABI, Out, Type, Pkg, ZkBinPath string } // Abigen calls Abigen with the given arguments @@ -72,6 +72,9 @@ func Abigen(a AbigenArgs) { } ImproveAbigenOutput(a.Out, a.ABI) + if a.ZkBinPath != "" { + ImproveAbigenOutput_zks(a.Out, a.ZkBinPath) + } } func ImproveAbigenOutput(path string, abiPath string) { @@ -466,3 +469,197 @@ func writeInterface(contractName string, fileNode *ast.File) *ast.File { func addHeader(code []byte) []byte { return utils.ConcatBytes([]byte(headerComment), code) } + +// ZK stack logic +func ImproveAbigenOutput_zks(path string, zkBinPath string) { + + bs, err := os.ReadFile(path) + if err != nil { + Exit("Error while improving abigen output", err) + } + + fset, fileNode := parseFile(bs) + + contractName := getContractName(fileNode) + + zkByteCode, err := os.ReadFile(zkBinPath) + if err != nil { + Exit("Error while improving abigen output", err) + } + zkHexString := string(zkByteCode) + + // add zksync binary to the wrapper + fileNode = addZKSyncBin(fileNode, contractName, zkHexString) + + // add zksync logic to the deploy function + fileNode = updateDeployMethod(contractName, fset, fileNode) + + bs = generateCode(fset, fileNode) + + err = os.WriteFile(path, bs, 0600) + if err != nil { + Exit("Error while writing improved abigen source", err) + } +} + +// add zksync binary to the wrapper +func addZKSyncBin(fileNode *ast.File, contractName string, zkHexString string) *ast.File { + // zksync + newVarSpec := &ast.ValueSpec{ + Names: []*ast.Ident{ast.NewIdent(fmt.Sprintf("%sZKBin", contractName))}, + Type: ast.NewIdent("string"), + Values: []ast.Expr{ + &ast.BasicLit{ + Kind: token.STRING, + Value: fmt.Sprintf("(\"0x%s\")", zkHexString), + }, + }, + } + newVarDecl := &ast.GenDecl{ + Tok: token.VAR, + Specs: []ast.Spec{newVarSpec}, + } + + // Insert the new variable declaration at the top of the file (before existing functions) + fileNode.Decls = append(fileNode.Decls, newVarDecl) + return fileNode +} + +// add zksync logic to the deploy function +func updateDeployMethod(contractName string, fset *token.FileSet, fileNode *ast.File) *ast.File { + + return astutil.Apply(fileNode, func(cursor *astutil.Cursor) bool { + x, is := cursor.Node().(*ast.FuncDecl) + if !is { + return true + } else if x.Name.Name != "Deploy"+contractName { + return false + } + + // only add this import if Deploy method found + astutil.AddImport(fset, fileNode, "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks") + + // Extract the parameters from the existing function x + paramList := getConstructorParams(x.Type.Params.List) + // get the `if zksync()` block + zkSyncBlock := getZKSyncBlock(contractName, paramList) + // insert the `if zksync()` block + addZKSyncBlock(*x, zkSyncBlock) + // update the return type in the function signature + updateTxReturnType(*x) + // update the actual return value + updateReturnStmt(*x) + + return false + }, nil).(*ast.File) +} + +// get the `if zksync()` block +func getZKSyncBlock(contractName, paramList string) string { + zkSyncBlock := `if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(%sZKBin), backend, %params) + contractReturn := &%s{address: address, abi: *parsed, %sCaller: %sCaller{contract: contractBind}, %sTransactor: %sTransactor{contract: contractBind},%sFilterer: %sFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + }` + zkSyncBlock = strings.ReplaceAll(zkSyncBlock, "%s", contractName) + zkSyncBlock = strings.ReplaceAll(zkSyncBlock, "%params", paramList) + return strings.ReplaceAll(zkSyncBlock, "%s", contractName) +} + +// Extract the parameters for constructor function +func getConstructorParams(contstructorParams []*ast.Field) string { + params := []string{} + for i, param := range contstructorParams { + if i > 1 { // Skip auth and backend + for _, name := range param.Names { + params = append(params, name.Name) + } + } + } + paramList := strings.Join(params, ", ") + return paramList +} + +// insert the `if zksync()` block +func addZKSyncBlock(x ast.FuncDecl, zkSyncBlock string) ast.FuncDecl { + for i, stmt := range x.Body.List { + + ifStmt, ok := stmt.(*ast.IfStmt) + if !ok { + continue + } + binaryExpr, ok := ifStmt.Cond.(*ast.BinaryExpr) + if !ok { + continue + } + if ident, ok := binaryExpr.X.(*ast.Ident); ok && ident.Name == "parsed" { + // Creating new statement to insert + newStmt := &ast.ExprStmt{ + X: &ast.BasicLit{ + Kind: token.STRING, + Value: zkSyncBlock, + }, + } + + // Insert the new statement after the current statement + x.Body.List = append(x.Body.List[:i+1], append([]ast.Stmt{newStmt}, x.Body.List[i+1:]...)...) + break + } + } + return x +} + +// convert *types.Transaction to *generated_zks.Transaction +func updateTxReturnType(x ast.FuncDecl) { + x.Type.Results.List[1].Type = &ast.StarExpr{ + X: &ast.SelectorExpr{ + X: &ast.Ident{Name: "generated_zks"}, + Sel: &ast.Ident{Name: "Transaction"}, + }, + } +} + +// convert tx to &Transaction{Transaction: tx, Hash_zks: tx.Hash()} +func updateReturnStmt(x ast.FuncDecl) { + for _, stmt := range x.Body.List { + returnStmt, is := stmt.(*ast.ReturnStmt) + if !is { + continue + } + if len(returnStmt.Results) < 3 { + continue + } + + txExpr, ok := returnStmt.Results[1].(*ast.Ident) + if !ok { + return + } + if txExpr.Name != "tx" { + return + } + + txField := &ast.KeyValueExpr{ + Key: ast.NewIdent("Transaction"), + Value: ast.NewIdent("tx"), + } + + hashField := &ast.KeyValueExpr{ + Key: ast.NewIdent("Hash_zks"), + Value: &ast.CallExpr{ + Fun: &ast.SelectorExpr{ + X: ast.NewIdent("tx"), + Sel: ast.NewIdent("Hash"), + }, + }, + } + newRet := &ast.CompositeLit{ + Type: &ast.SelectorExpr{ + X: ast.NewIdent("generated_zks"), + Sel: ast.NewIdent("Transaction"), + }, + Elts: []ast.Expr{txField, hashField}, + } + pointerRet := &ast.UnaryExpr{Op: token.AND, X: newRet} + returnStmt.Results[1] = pointerRet + } +} diff --git a/core/gethwrappers/ccip/gen_to_gen_zks.py b/core/gethwrappers/ccip/gen_to_gen_zks.py new file mode 100644 index 00000000000..380f639776b --- /dev/null +++ b/core/gethwrappers/ccip/gen_to_gen_zks.py @@ -0,0 +1,27 @@ +# utility to convert go_generate.go to go_generate_zks.go + +def update_go_generate(file_path): + updated_lines = [] + + with open(file_path, 'r') as file: + for line in file: + if "//go:generate" in line: + parts = line.strip().split() # Split the line into parts + bin_path = parts[5] + # Generate the .zbin path with `.sol` insertion + zbin_path = bin_path.replace("solc", "zksolc").replace("/v0.8.24/", "/v1.5.6/").replace(".bin", ".sol/") + bin_path.split('/')[-1].replace(".bin", ".zbin") + parts.append(zbin_path) + + parts[3] = "./generation/generate_zks/wrap.go" + + line = " ".join(parts) + "\n" + print(line) + + updated_lines.append(line) + + # Write back to the file + with open(file_path, 'w') as file: + file.writelines(updated_lines) + +# Example usage +update_go_generate('go_generate_zks.go') diff --git a/core/gethwrappers/ccip/generated_zks/burn_from_mint_token_pool/burn_from_mint_token_pool.go b/core/gethwrappers/ccip/generated_zks/burn_from_mint_token_pool/burn_from_mint_token_pool.go new file mode 100644 index 00000000000..38451a907de --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/burn_from_mint_token_pool/burn_from_mint_token_pool.go @@ -0,0 +1,3151 @@ +package burn_from_mint_token_pool + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type PoolLockOrBurnInV1 struct { + Receiver []byte + RemoteChainSelector uint64 + OriginalSender common.Address + Amount *big.Int + LocalToken common.Address +} + +type PoolLockOrBurnOutV1 struct { + DestTokenAddress []byte + DestPoolData []byte +} + +type PoolReleaseOrMintInV1 struct { + OriginalSender []byte + RemoteChainSelector uint64 + Receiver common.Address + Amount *big.Int + LocalToken common.Address + SourcePoolAddress []byte + SourcePoolData []byte + OffchainTokenData []byte +} + +type PoolReleaseOrMintOutV1 struct { + DestinationAmount *big.Int +} + +type RateLimiterConfig struct { + IsEnabled bool + Capacity *big.Int + Rate *big.Int +} + +type RateLimiterTokenBucket struct { + Tokens *big.Int + LastUpdated uint32 + IsEnabled bool + Capacity *big.Int + Rate *big.Int +} + +type TokenPoolChainUpdate struct { + RemoteChainSelector uint64 + RemotePoolAddresses [][]byte + RemoteTokenAddress []byte + OutboundRateLimiterConfig RateLimiterConfig + InboundRateLimiterConfig RateLimiterConfig +} + +var BurnFromMintTokenPoolMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"contractIBurnMintERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"localTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"allowlist\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllowListNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"CallerIsNotARampOnRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotTransferToSelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"DisabledNonZeroRateLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"expected\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"actual\",\"type\":\"uint8\"}],\"name\":\"InvalidDecimalArgs\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"InvalidRateLimitRate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolData\",\"type\":\"bytes\"}],\"name\":\"InvalidRemoteChainDecimals\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidRemotePoolForChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidSourcePoolAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeProposedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"NonExistentChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"remoteDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"localDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"remoteAmount\",\"type\":\"uint256\"}],\"name\":\"OverflowDetected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerCannotBeZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"PoolAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimitMustBeDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListAdd\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListRemove\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remoteToken\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Locked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Minted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rateLimitAdmin\",\"type\":\"address\"}],\"name\":\"RateLimitAdminSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Released\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"RemotePoolAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"RemotePoolRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"RouterUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensConsumed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"addRemotePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"removes\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"adds\",\"type\":\"address[]\"}],\"name\":\"applyAllowListUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"remoteChainSelectorsToRemove\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes[]\",\"name\":\"remotePoolAddresses\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes\",\"name\":\"remoteTokenAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"internalType\":\"structTokenPool.ChainUpdate[]\",\"name\":\"chainsToAdd\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentInboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentOutboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateLimitAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemotePools\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemoteToken\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRmnProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupportedChains\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"isRemotePool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"isSupportedChain\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isSupportedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"internalType\":\"structPool.LockOrBurnInV1\",\"name\":\"lockOrBurnIn\",\"type\":\"tuple\"}],\"name\":\"lockOrBurn\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destPoolData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.LockOrBurnOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"originalSender\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainTokenData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.ReleaseOrMintInV1\",\"name\":\"releaseOrMintIn\",\"type\":\"tuple\"}],\"name\":\"releaseOrMint\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"destinationAmount\",\"type\":\"uint256\"}],\"internalType\":\"structPool.ReleaseOrMintOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"removeRemotePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundConfig\",\"type\":\"tuple\"}],\"name\":\"setChainRateLimiterConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rateLimitAdmin\",\"type\":\"address\"}],\"name\":\"setRateLimitAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"setRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x6101006040523480156200001257600080fd5b5060405162004c6338038062004c63833981016040819052620000359162000918565b8484848484336000816200005c57604051639b15e16f60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03848116919091179091558116156200008f576200008f8162000206565b50506001600160a01b0385161580620000af57506001600160a01b038116155b80620000c257506001600160a01b038216155b15620000e1576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b03808616608081905290831660c0526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa92505050801562000151575060408051601f3d908101601f191682019092526200014e9181019062000a3a565b60015b1562000192578060ff168560ff161462000190576040516332ad3e0760e11b815260ff8087166004830152821660248201526044015b60405180910390fd5b505b60ff841660a052600480546001600160a01b0319166001600160a01b038316179055825115801560e052620001dc57604080516000815260208101909152620001dc908462000280565b50620001fb935050506001600160a01b038716905030600019620003dd565b505050505062000b84565b336001600160a01b038216036200023057604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60e051620002a1576040516335f4a7b360e01b815260040160405180910390fd5b60005b82518110156200032c576000838281518110620002c557620002c562000a58565b60209081029190910101519050620002df600282620004c3565b1562000322576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b50600101620002a4565b5060005b8151811015620003d857600082828151811062000351576200035162000a58565b6020026020010151905060006001600160a01b0316816001600160a01b0316036200037d5750620003cf565b6200038a600282620004e3565b15620003cd576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b60010162000330565b505050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156200042f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000455919062000a6e565b62000461919062000a9e565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152919250620004bd91869190620004fa16565b50505050565b6000620004da836001600160a01b038416620005cb565b90505b92915050565b6000620004da836001600160a01b038416620006cf565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649082015260009062000549906001600160a01b03851690849062000721565b805190915015620003d857808060200190518101906200056a919062000ab4565b620003d85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000187565b60008181526001830160205260408120548015620006c4576000620005f260018362000adf565b8554909150600090620006089060019062000adf565b9050808214620006745760008660000182815481106200062c576200062c62000a58565b906000526020600020015490508087600001848154811062000652576200065262000a58565b6000918252602080832090910192909255918252600188019052604090208390555b855486908062000688576200068862000af5565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050620004dd565b6000915050620004dd565b60008181526001830160205260408120546200071857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620004dd565b506000620004dd565b60606200073284846000856200073a565b949350505050565b6060824710156200079d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000187565b600080866001600160a01b03168587604051620007bb919062000b31565b60006040518083038185875af1925050503d8060008114620007fa576040519150601f19603f3d011682016040523d82523d6000602084013e620007ff565b606091505b50909250905062000813878383876200081e565b979650505050505050565b60608315620008925782516000036200088a576001600160a01b0385163b6200088a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000187565b508162000732565b620007328383815115620008a95781518083602001fd5b8060405162461bcd60e51b815260040162000187919062000b4f565b6001600160a01b0381168114620008db57600080fd5b50565b805160ff81168114620008f057600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b8051620008f081620008c5565b600080600080600060a086880312156200093157600080fd5b85516200093e81620008c5565b945060206200094f878201620008de565b60408801519095506001600160401b03808211156200096d57600080fd5b818901915089601f8301126200098257600080fd5b815181811115620009975762000997620008f5565b8060051b604051601f19603f83011681018181108582111715620009bf57620009bf620008f5565b60405291825284820192508381018501918c831115620009de57600080fd5b938501935b8285101562000a0757620009f7856200090b565b84529385019392850192620009e3565b80985050505050505062000a1e606087016200090b565b915062000a2e608087016200090b565b90509295509295909350565b60006020828403121562000a4d57600080fd5b620004da82620008de565b634e487b7160e01b600052603260045260246000fd5b60006020828403121562000a8157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115620004dd57620004dd62000a88565b60006020828403121562000ac757600080fd5b8151801515811462000ad857600080fd5b9392505050565b81810381811115620004dd57620004dd62000a88565b634e487b7160e01b600052603160045260246000fd5b60005b8381101562000b2857818101518382015260200162000b0e565b50506000910152565b6000825162000b4581846020870162000b0b565b9190910192915050565b602081526000825180602084015262000b7081604085016020870162000b0b565b601f01601f19169190910160400192915050565b60805160a05160c05160e05161402e62000c356000396000818161054f01528181611d8201526127d30152600081816105290152818161189f015261206e0152600081816102e001528181610ba901528181611a4801528181611b0201528181611b3601528181611b6901528181611bce01528181611c270152611cc90152600081816102470152818161029c01528181610708015281816121f10152818161276901526129be015261402e6000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80639a4575b911610104578063c0d78655116100a2578063dc0bd97111610071578063dc0bd97114610527578063e0351e131461054d578063e8a1da1714610573578063f2fde38b1461058657600080fd5b8063c0d78655146104d9578063c4bffe2b146104ec578063c75eea9c14610501578063cf7401f31461051457600080fd5b8063acfecf91116100de578063acfecf9114610426578063af58d59f14610439578063b0f479a1146104a8578063b7946580146104c657600080fd5b80639a4575b9146103d1578063a42a7b8b146103f1578063a7cd63b71461041157600080fd5b806354c8a4f31161017157806379ba50971161014b57806379ba5097146103855780637d54534e1461038d5780638926f54f146103a05780638da5cb5b146103b357600080fd5b806354c8a4f31461033f57806362ddd3c4146103545780636d3d1a581461036757600080fd5b8063240028e8116101ad578063240028e81461028c57806324f65ee7146102d9578063390775371461030a5780634c5ef0ed1461032c57600080fd5b806301ffc9a7146101d4578063181f5a77146101fc57806321df0da714610245575b600080fd5b6101e76101e236600461317e565b610599565b60405190151581526020015b60405180910390f35b6102386040518060400160405280601b81526020017f4275726e46726f6d4d696e74546f6b656e506f6f6c20312e352e31000000000081525081565b6040516101f39190613224565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f3565b6101e761029a366004613259565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101f3565b61031d610318366004613276565b61067e565b604051905181526020016101f3565b6101e761033a3660046132cf565b61084d565b61035261034d36600461339e565b610897565b005b6103526103623660046132cf565b610912565b60095473ffffffffffffffffffffffffffffffffffffffff16610267565b6103526109af565b61035261039b366004613259565b610a7d565b6101e76103ae36600461340a565b610afe565b60015473ffffffffffffffffffffffffffffffffffffffff16610267565b6103e46103df366004613425565b610b15565b6040516101f39190613460565b6104046103ff36600461340a565b610bee565b6040516101f391906134b7565b610419610d59565b6040516101f39190613539565b6103526104343660046132cf565b610d6a565b61044c61044736600461340a565b610e82565b6040516101f3919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60045473ffffffffffffffffffffffffffffffffffffffff16610267565b6102386104d436600461340a565b610f57565b6103526104e7366004613259565b611007565b6104f46110e2565b6040516101f39190613593565b61044c61050f36600461340a565b61119a565b61035261052236600461371b565b61126c565b7f0000000000000000000000000000000000000000000000000000000000000000610267565b7f00000000000000000000000000000000000000000000000000000000000000006101e7565b61035261058136600461339e565b6112f0565b610352610594366004613259565b611802565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faff2afbf00000000000000000000000000000000000000000000000000000000148061062c57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e64dd2900000000000000000000000000000000000000000000000000000000145b8061067857507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60408051602081019091526000815261069682611816565b60006106ef60608401356106ea6106b060c0870187613760565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a3a92505050565b611afe565b905073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166340c10f1961073d6060860160408701613259565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff909116600482015260248101849052604401600060405180830381600087803b1580156107aa57600080fd5b505af11580156107be573d6000803e3d6000fd5b506107d3925050506060840160408501613259565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f08360405161083191815260200190565b60405180910390a3604080516020810190915290815292915050565b600061088f83836040516108629291906137c5565b604080519182900390912067ffffffffffffffff8716600090815260076020529190912060050190611d12565b949350505050565b61089f611d2d565b61090c84848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808802828101820190935287825290935087925086918291850190849080828437600092019190915250611d8092505050565b50505050565b61091a611d2d565b61092383610afe565b61096a576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024015b60405180910390fd5b6109aa8383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f3692505050565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a00576040517f02b543c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000008082163390811790935560008054909116815560405173ffffffffffffffffffffffffffffffffffffffff909216929183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610a85611d2d565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f44676b5284b809a22248eba0da87391d79098be38bb03154be88a58bf4d091749060200160405180910390a150565b6000610678600567ffffffffffffffff8416611d12565b6040805180820190915260608082526020820152610b3282612030565b610b3f82606001356121bc565b6040516060830135815233907f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df79060200160405180910390a26040518060400160405280610b998460200160208101906104d4919061340a565b8152602001610be66040805160ff7f000000000000000000000000000000000000000000000000000000000000000016602082015260609101604051602081830303815290604052905090565b905292915050565b67ffffffffffffffff8116600090815260076020526040812060609190610c179060050161225e565b90506000815167ffffffffffffffff811115610c3557610c356135d5565b604051908082528060200260200182016040528015610c6857816020015b6060815260200190600190039081610c535790505b50905060005b8251811015610d515760086000848381518110610c8d57610c8d6137d5565b602002602001015181526020019081526020016000208054610cae90613804565b80601f0160208091040260200160405190810160405280929190818152602001828054610cda90613804565b8015610d275780601f10610cfc57610100808354040283529160200191610d27565b820191906000526020600020905b815481529060010190602001808311610d0a57829003601f168201915b5050505050828281518110610d3e57610d3e6137d5565b6020908102919091010152600101610c6e565b509392505050565b6060610d65600261225e565b905090565b610d72611d2d565b610d7b83610afe565b610dbd576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610961565b610dfd8282604051610dd09291906137c5565b604080519182900390912067ffffffffffffffff861660009081526007602052919091206005019061226b565b610e39578282826040517f74f23c7c000000000000000000000000000000000000000000000000000000008152600401610961939291906138a0565b8267ffffffffffffffff167f52d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d768383604051610e759291906138c4565b60405180910390a2505050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600390910154808416606083015291909104909116608082015261067890612277565b67ffffffffffffffff81166000908152600760205260409020600401805460609190610f8290613804565b80601f0160208091040260200160405190810160405280929190818152602001828054610fae90613804565b8015610ffb5780601f10610fd057610100808354040283529160200191610ffb565b820191906000526020600020905b815481529060010190602001808311610fde57829003601f168201915b50505050509050919050565b61100f611d2d565b73ffffffffffffffffffffffffffffffffffffffff811661105c576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f1684910160405180910390a15050565b606060006110f0600561225e565b90506000815167ffffffffffffffff81111561110e5761110e6135d5565b604051908082528060200260200182016040528015611137578160200160208202803683370190505b50905060005b825181101561119357828181518110611158576111586137d5565b6020026020010151828281518110611172576111726137d5565b67ffffffffffffffff9092166020928302919091019091015260010161113d565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600190910154808416606083015291909104909116608082015261067890612277565b60095473ffffffffffffffffffffffffffffffffffffffff1633148015906112ac575060015473ffffffffffffffffffffffffffffffffffffffff163314155b156112e5576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610961565b6109aa838383612329565b6112f8611d2d565b60005b838110156114e5576000858583818110611317576113176137d5565b905060200201602081019061132c919061340a565b9050611343600567ffffffffffffffff831661226b565b611385576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610961565b67ffffffffffffffff811660009081526007602052604081206113aa9060050161225e565b905060005b81518110156114165761140d8282815181106113cd576113cd6137d5565b6020026020010151600760008667ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060050161226b90919063ffffffff16565b506001016113af565b5067ffffffffffffffff8216600090815260076020526040812080547fffffffffffffffffffffff0000000000000000000000000000000000000000009081168255600182018390556002820180549091169055600381018290559061147f6004830182613111565b6005820160008181611491828261314b565b505060405167ffffffffffffffff871681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d859916945060200192506114d3915050565b60405180910390a150506001016112fb565b5060005b818110156117fb576000838383818110611505576115056137d5565b905060200281019061151791906138d8565b611520906139a4565b905061153181606001516000612413565b61154081608001516000612413565b80604001515160000361157f576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80516115979060059067ffffffffffffffff16612550565b6115dc5780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610961565b805167ffffffffffffffff16600090815260076020908152604091829020825160a08082018552606080870180518601516fffffffffffffffffffffffffffffffff90811680865263ffffffff42168689018190528351511515878b0181905284518a0151841686890181905294518b0151841660809889018190528954740100000000000000000000000000000000000000009283027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff7001000000000000000000000000000000008087027fffffffffffffffffffffffff000000000000000000000000000000000000000094851690981788178216929092178d5592810290971760018c01558c519889018d52898e0180518d01518716808b528a8e019590955280515115158a8f018190528151909d01518716988a01899052518d0151909516979098018790526002890180549a90910299909316171790941695909517909255909202909117600382015590820151600482019061175f9082613b1b565b5060005b8260200151518110156117a35761179b83600001518460200151838151811061178e5761178e6137d5565b6020026020010151611f36565b600101611763565b507f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c282600001518360400151846060015185608001516040516117e99493929190613c35565b60405180910390a150506001016114e9565b5050505050565b61180a611d2d565b6118138161255c565b50565b61182961029a60a0830160808401613259565b6118885761183d60a0820160808301613259565b6040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610961565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016632cbc26bb6118d4604084016020850161340a565b60405160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260809190911b77ffffffffffffffff00000000000000000000000000000000166004820152602401602060405180830381865afa158015611945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119699190613cce565b156119a0576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119b86119b3604083016020840161340a565b612620565b6119d86119cb604083016020840161340a565b61033a60a0840184613760565b611a1d576119e960a0820182613760565b6040517f24eb47e50000000000000000000000000000000000000000000000000000000081526004016109619291906138c4565b611813611a30604083016020840161340a565b8260600135612746565b60008151600003611a6c57507f0000000000000000000000000000000000000000000000000000000000000000919050565b8151602014611aa957816040517f953576f70000000000000000000000000000000000000000000000000000000081526004016109619190613224565b600082806020019051810190611abf9190613ceb565b905060ff81111561067857826040517f953576f70000000000000000000000000000000000000000000000000000000081526004016109619190613224565b60007f000000000000000000000000000000000000000000000000000000000000000060ff168260ff1603611b34575081610678565b7f000000000000000000000000000000000000000000000000000000000000000060ff168260ff161115611c1f576000611b8e7f000000000000000000000000000000000000000000000000000000000000000084613d33565b9050604d8160ff161115611c02576040517fa9cb113d00000000000000000000000000000000000000000000000000000000815260ff80851660048301527f000000000000000000000000000000000000000000000000000000000000000016602482015260448101859052606401610961565b611c0d81600a613e6c565b611c179085613e7b565b915050610678565b6000611c4b837f0000000000000000000000000000000000000000000000000000000000000000613d33565b9050604d8160ff161180611c925750611c6581600a613e6c565b611c8f907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613e7b565b84115b15611cfd576040517fa9cb113d00000000000000000000000000000000000000000000000000000000815260ff80851660048301527f000000000000000000000000000000000000000000000000000000000000000016602482015260448101859052606401610961565b611d0881600a613e6c565b61088f9085613eb6565b600081815260018301602052604081205415155b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314611d7e576040517f2b5c74de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f0000000000000000000000000000000000000000000000000000000000000000611dd7576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015611e6d576000838281518110611df757611df76137d5565b60200260200101519050611e1581600261278d90919063ffffffff16565b15611e645760405173ffffffffffffffffffffffffffffffffffffffff821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b50600101611dda565b5060005b81518110156109aa576000828281518110611e8e57611e8e6137d5565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ed25750611f2e565b611edd6002826127af565b15611f2c5760405173ffffffffffffffffffffffffffffffffffffffff821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101611e71565b8051600003611f71576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805160208083019190912067ffffffffffffffff8416600090815260079092526040909120611fa39060050182612550565b611fdd5782826040517f393b8ad2000000000000000000000000000000000000000000000000000000008152600401610961929190613ecd565b6000818152600860205260409020611ff58382613b1b565b508267ffffffffffffffff167f7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea83604051610e759190613224565b61204361029a60a0830160808401613259565b6120575761183d60a0820160808301613259565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016632cbc26bb6120a3604084016020850161340a565b60405160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260809190911b77ffffffffffffffff00000000000000000000000000000000166004820152602401602060405180830381865afa158015612114573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121389190613cce565b1561216f576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121876121826060830160408401613259565b6127d1565b61219f61219a604083016020840161340a565b612850565b6118136121b2604083016020840161340a565b826060013561299e565b6040517f79cc6790000000000000000000000000000000000000000000000000000000008152306004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906379cc679090604401600060405180830381600087803b15801561224a57600080fd5b505af11580156117fb573d6000803e3d6000fd5b60606000611d26836129e2565b6000611d268383612a3d565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915261230582606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff16426122e99190613ef0565b85608001516fffffffffffffffffffffffffffffffff16612b30565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b61233283610afe565b612374576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610961565b61237f826000612413565b67ffffffffffffffff831660009081526007602052604090206123a29083612b58565b6123ad816000612413565b67ffffffffffffffff831660009081526007602052604090206123d39060020182612b58565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b83838360405161240693929190613f03565b60405180910390a1505050565b8151156124de5781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff16101580612469575060408201516fffffffffffffffffffffffffffffffff16155b156124a257816040517f8020d1240000000000000000000000000000000000000000000000000000000081526004016109619190613f86565b80156124da576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b60408201516fffffffffffffffffffffffffffffffff16151580612517575060208201516fffffffffffffffffffffffffffffffff1615155b156124da57816040517fd68af9cc0000000000000000000000000000000000000000000000000000000081526004016109619190613f86565b6000611d268383612cfa565b3373ffffffffffffffffffffffffffffffffffffffff8216036125ab576040517fdad89dca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61262981610afe565b61266b576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610961565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925233602483015273ffffffffffffffffffffffffffffffffffffffff16906383826b2b90604401602060405180830381865afa1580156126ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061270e9190613cce565b611813576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610961565b67ffffffffffffffff821660009081526007602052604090206124da90600201827f0000000000000000000000000000000000000000000000000000000000000000612d49565b6000611d268373ffffffffffffffffffffffffffffffffffffffff8416612a3d565b6000611d268373ffffffffffffffffffffffffffffffffffffffff8416612cfa565b7f000000000000000000000000000000000000000000000000000000000000000015611813576128026002826130cc565b611813576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610961565b61285981610afe565b61289b576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610961565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925273ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa158015612914573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129389190613fc2565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611813576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610961565b67ffffffffffffffff821660009081526007602052604090206124da90827f0000000000000000000000000000000000000000000000000000000000000000612d49565b606081600001805480602002602001604051908101604052809291908181526020018280548015610ffb57602002820191906000526020600020905b815481526020019060010190808311612a1e5750505050509050919050565b60008181526001830160205260408120548015612b26576000612a61600183613ef0565b8554909150600090612a7590600190613ef0565b9050808214612ada576000866000018281548110612a9557612a956137d5565b9060005260206000200154905080876000018481548110612ab857612ab86137d5565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612aeb57612aeb613fdf565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610678565b6000915050610678565b6000612b4f85612b408486613eb6565b612b4a908761400e565b6130fb565b95945050505050565b8154600090612b8190700100000000000000000000000000000000900463ffffffff1642613ef0565b90508015612c235760018301548354612bc9916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416612b30565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b60208201518354612c49916fffffffffffffffffffffffffffffffff90811691166130fb565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c1990612406908490613f86565b6000818152600183016020526040812054612d4157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610678565b506000610678565b825474010000000000000000000000000000000000000000900460ff161580612d70575081155b15612d7a57505050565b825460018401546fffffffffffffffffffffffffffffffff80831692911690600090612dc090700100000000000000000000000000000000900463ffffffff1642613ef0565b90508015612e805781831115612e02576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001860154612e3c9083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16612b30565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b84821015612f375773ffffffffffffffffffffffffffffffffffffffff8416612edf576040517ff94ebcd10000000000000000000000000000000000000000000000000000000081526004810183905260248101869052604401610961565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff85166044820152606401610961565b8483101561304a5760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16906000908290612f7b9082613ef0565b612f85878a613ef0565b612f8f919061400e565b612f999190613e7b565b905073ffffffffffffffffffffffffffffffffffffffff8616612ff2576040517f15279c080000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610961565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff87166044820152606401610961565b6130548584613ef0565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515611d26565b600081831061310a5781611d26565b5090919050565b50805461311d90613804565b6000825580601f1061312d575050565b601f0160209004906000526020600020908101906118139190613165565b508054600082559060005260206000209081019061181391905b5b8082111561317a5760008155600101613166565b5090565b60006020828403121561319057600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611d2657600080fd5b6000815180845260005b818110156131e6576020818501810151868301820152016131ca565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000611d2660208301846131c0565b73ffffffffffffffffffffffffffffffffffffffff8116811461181357600080fd5b60006020828403121561326b57600080fd5b8135611d2681613237565b60006020828403121561328857600080fd5b813567ffffffffffffffff81111561329f57600080fd5b82016101008185031215611d2657600080fd5b803567ffffffffffffffff811681146132ca57600080fd5b919050565b6000806000604084860312156132e457600080fd5b6132ed846132b2565b9250602084013567ffffffffffffffff8082111561330a57600080fd5b818601915086601f83011261331e57600080fd5b81358181111561332d57600080fd5b87602082850101111561333f57600080fd5b6020830194508093505050509250925092565b60008083601f84011261336457600080fd5b50813567ffffffffffffffff81111561337c57600080fd5b6020830191508360208260051b850101111561339757600080fd5b9250929050565b600080600080604085870312156133b457600080fd5b843567ffffffffffffffff808211156133cc57600080fd5b6133d888838901613352565b909650945060208701359150808211156133f157600080fd5b506133fe87828801613352565b95989497509550505050565b60006020828403121561341c57600080fd5b611d26826132b2565b60006020828403121561343757600080fd5b813567ffffffffffffffff81111561344e57600080fd5b820160a08185031215611d2657600080fd5b60208152600082516040602084015261347c60608401826131c0565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016040850152612b4f82826131c0565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561352c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261351a8583516131c0565b945092850192908501906001016134e0565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561358757835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101613555565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561358757835167ffffffffffffffff16835292840192918401916001016135af565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613627576136276135d5565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613674576136746135d5565b604052919050565b801515811461181357600080fd5b80356fffffffffffffffffffffffffffffffff811681146132ca57600080fd5b6000606082840312156136bc57600080fd5b6040516060810181811067ffffffffffffffff821117156136df576136df6135d5565b60405290508082356136f08161367c565b81526136fe6020840161368a565b602082015261370f6040840161368a565b60408201525092915050565b600080600060e0848603121561373057600080fd5b613739846132b2565b925061374885602086016136aa565b915061375785608086016136aa565b90509250925092565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261379557600080fd5b83018035915067ffffffffffffffff8211156137b057600080fd5b60200191503681900382131561339757600080fd5b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600181811c9082168061381857607f821691505b602082108103613851577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b67ffffffffffffffff84168152604060208201526000612b4f604083018486613857565b60208152600061088f602083018486613857565b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee183360301811261390c57600080fd5b9190910192915050565b600082601f83011261392757600080fd5b813567ffffffffffffffff811115613941576139416135d5565b61397260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161362d565b81815284602083860101111561398757600080fd5b816020850160208301376000918101602001919091529392505050565b600061012082360312156139b757600080fd5b6139bf613604565b6139c8836132b2565b815260208084013567ffffffffffffffff808211156139e657600080fd5b9085019036601f8301126139f957600080fd5b813581811115613a0b57613a0b6135d5565b8060051b613a1a85820161362d565b9182528381018501918581019036841115613a3457600080fd5b86860192505b83831015613a7057823585811115613a525760008081fd5b613a603689838a0101613916565b8352509186019190860190613a3a565b8087890152505050506040860135925080831115613a8d57600080fd5b5050613a9b36828601613916565b604083015250613aae36606085016136aa565b6060820152613ac03660c085016136aa565b608082015292915050565b601f8211156109aa576000816000526020600020601f850160051c81016020861015613af45750805b601f850160051c820191505b81811015613b1357828155600101613b00565b505050505050565b815167ffffffffffffffff811115613b3557613b356135d5565b613b4981613b438454613804565b84613acb565b602080601f831160018114613b9c5760008415613b665750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613b13565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613be957888601518255948401946001909101908401613bca565b5085821015613c2557878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff87168352806020840152613c59818401876131c0565b8551151560408581019190915260208701516fffffffffffffffffffffffffffffffff9081166060870152908701511660808501529150613c979050565b8251151560a083015260208301516fffffffffffffffffffffffffffffffff90811660c084015260408401511660e0830152612b4f565b600060208284031215613ce057600080fd5b8151611d268161367c565b600060208284031215613cfd57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff828116828216039081111561067857610678613d04565b600181815b80851115613da557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613d8b57613d8b613d04565b80851615613d9857918102915b93841c9390800290613d51565b509250929050565b600082613dbc57506001610678565b81613dc957506000610678565b8160018114613ddf5760028114613de957613e05565b6001915050610678565b60ff841115613dfa57613dfa613d04565b50506001821b610678565b5060208310610133831016604e8410600b8410161715613e28575081810a610678565b613e328383613d4c565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613e6457613e64613d04565b029392505050565b6000611d2660ff841683613dad565b600082613eb1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b808202811582820484141761067857610678613d04565b67ffffffffffffffff8316815260406020820152600061088f60408301846131c0565b8181038181111561067857610678613d04565b67ffffffffffffffff8416815260e08101613f4f60208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c083015261088f565b6060810161067882848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b600060208284031215613fd457600080fd5b8151611d2681613237565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b8082018082111561067857610678613d0456fea164736f6c6343000818000a", +} + +var BurnFromMintTokenPoolABI = BurnFromMintTokenPoolMetaData.ABI + +var BurnFromMintTokenPoolBin = BurnFromMintTokenPoolMetaData.Bin + +func DeployBurnFromMintTokenPool(auth *bind.TransactOpts, backend bind.ContractBackend, token common.Address, localTokenDecimals uint8, allowlist []common.Address, rmnProxy common.Address, router common.Address) (common.Address, *generated_zks.Transaction, *BurnFromMintTokenPool, error) { + parsed, err := BurnFromMintTokenPoolMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(BurnFromMintTokenPoolZKBin), backend, token, localTokenDecimals, allowlist, rmnProxy, router) + contractReturn := &BurnFromMintTokenPool{address: address, abi: *parsed, BurnFromMintTokenPoolCaller: BurnFromMintTokenPoolCaller{contract: contractBind}, BurnFromMintTokenPoolTransactor: BurnFromMintTokenPoolTransactor{contract: contractBind}, BurnFromMintTokenPoolFilterer: BurnFromMintTokenPoolFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(BurnFromMintTokenPoolBin), backend, token, localTokenDecimals, allowlist, rmnProxy, router) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &BurnFromMintTokenPool{address: address, abi: *parsed, BurnFromMintTokenPoolCaller: BurnFromMintTokenPoolCaller{contract: contract}, BurnFromMintTokenPoolTransactor: BurnFromMintTokenPoolTransactor{contract: contract}, BurnFromMintTokenPoolFilterer: BurnFromMintTokenPoolFilterer{contract: contract}}, nil +} + +type BurnFromMintTokenPool struct { + address common.Address + abi abi.ABI + BurnFromMintTokenPoolCaller + BurnFromMintTokenPoolTransactor + BurnFromMintTokenPoolFilterer +} + +type BurnFromMintTokenPoolCaller struct { + contract *bind.BoundContract +} + +type BurnFromMintTokenPoolTransactor struct { + contract *bind.BoundContract +} + +type BurnFromMintTokenPoolFilterer struct { + contract *bind.BoundContract +} + +type BurnFromMintTokenPoolSession struct { + Contract *BurnFromMintTokenPool + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type BurnFromMintTokenPoolCallerSession struct { + Contract *BurnFromMintTokenPoolCaller + CallOpts bind.CallOpts +} + +type BurnFromMintTokenPoolTransactorSession struct { + Contract *BurnFromMintTokenPoolTransactor + TransactOpts bind.TransactOpts +} + +type BurnFromMintTokenPoolRaw struct { + Contract *BurnFromMintTokenPool +} + +type BurnFromMintTokenPoolCallerRaw struct { + Contract *BurnFromMintTokenPoolCaller +} + +type BurnFromMintTokenPoolTransactorRaw struct { + Contract *BurnFromMintTokenPoolTransactor +} + +func NewBurnFromMintTokenPool(address common.Address, backend bind.ContractBackend) (*BurnFromMintTokenPool, error) { + abi, err := abi.JSON(strings.NewReader(BurnFromMintTokenPoolABI)) + if err != nil { + return nil, err + } + contract, err := bindBurnFromMintTokenPool(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &BurnFromMintTokenPool{address: address, abi: abi, BurnFromMintTokenPoolCaller: BurnFromMintTokenPoolCaller{contract: contract}, BurnFromMintTokenPoolTransactor: BurnFromMintTokenPoolTransactor{contract: contract}, BurnFromMintTokenPoolFilterer: BurnFromMintTokenPoolFilterer{contract: contract}}, nil +} + +func NewBurnFromMintTokenPoolCaller(address common.Address, caller bind.ContractCaller) (*BurnFromMintTokenPoolCaller, error) { + contract, err := bindBurnFromMintTokenPool(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &BurnFromMintTokenPoolCaller{contract: contract}, nil +} + +func NewBurnFromMintTokenPoolTransactor(address common.Address, transactor bind.ContractTransactor) (*BurnFromMintTokenPoolTransactor, error) { + contract, err := bindBurnFromMintTokenPool(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &BurnFromMintTokenPoolTransactor{contract: contract}, nil +} + +func NewBurnFromMintTokenPoolFilterer(address common.Address, filterer bind.ContractFilterer) (*BurnFromMintTokenPoolFilterer, error) { + contract, err := bindBurnFromMintTokenPool(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &BurnFromMintTokenPoolFilterer{contract: contract}, nil +} + +func bindBurnFromMintTokenPool(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := BurnFromMintTokenPoolMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BurnFromMintTokenPool.Contract.BurnFromMintTokenPoolCaller.contract.Call(opts, result, method, params...) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.BurnFromMintTokenPoolTransactor.contract.Transfer(opts) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.BurnFromMintTokenPoolTransactor.contract.Transact(opts, method, params...) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BurnFromMintTokenPool.Contract.contract.Call(opts, result, method, params...) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.contract.Transfer(opts) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.contract.Transact(opts, method, params...) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCaller) GetAllowList(opts *bind.CallOpts) ([]common.Address, error) { + var out []interface{} + err := _BurnFromMintTokenPool.contract.Call(opts, &out, "getAllowList") + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) GetAllowList() ([]common.Address, error) { + return _BurnFromMintTokenPool.Contract.GetAllowList(&_BurnFromMintTokenPool.CallOpts) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCallerSession) GetAllowList() ([]common.Address, error) { + return _BurnFromMintTokenPool.Contract.GetAllowList(&_BurnFromMintTokenPool.CallOpts) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCaller) GetAllowListEnabled(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _BurnFromMintTokenPool.contract.Call(opts, &out, "getAllowListEnabled") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) GetAllowListEnabled() (bool, error) { + return _BurnFromMintTokenPool.Contract.GetAllowListEnabled(&_BurnFromMintTokenPool.CallOpts) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCallerSession) GetAllowListEnabled() (bool, error) { + return _BurnFromMintTokenPool.Contract.GetAllowListEnabled(&_BurnFromMintTokenPool.CallOpts) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCaller) GetCurrentInboundRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + var out []interface{} + err := _BurnFromMintTokenPool.contract.Call(opts, &out, "getCurrentInboundRateLimiterState", remoteChainSelector) + + if err != nil { + return *new(RateLimiterTokenBucket), err + } + + out0 := *abi.ConvertType(out[0], new(RateLimiterTokenBucket)).(*RateLimiterTokenBucket) + + return out0, err + +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) GetCurrentInboundRateLimiterState(remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + return _BurnFromMintTokenPool.Contract.GetCurrentInboundRateLimiterState(&_BurnFromMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCallerSession) GetCurrentInboundRateLimiterState(remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + return _BurnFromMintTokenPool.Contract.GetCurrentInboundRateLimiterState(&_BurnFromMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCaller) GetCurrentOutboundRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + var out []interface{} + err := _BurnFromMintTokenPool.contract.Call(opts, &out, "getCurrentOutboundRateLimiterState", remoteChainSelector) + + if err != nil { + return *new(RateLimiterTokenBucket), err + } + + out0 := *abi.ConvertType(out[0], new(RateLimiterTokenBucket)).(*RateLimiterTokenBucket) + + return out0, err + +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) GetCurrentOutboundRateLimiterState(remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + return _BurnFromMintTokenPool.Contract.GetCurrentOutboundRateLimiterState(&_BurnFromMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCallerSession) GetCurrentOutboundRateLimiterState(remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + return _BurnFromMintTokenPool.Contract.GetCurrentOutboundRateLimiterState(&_BurnFromMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCaller) GetRateLimitAdmin(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BurnFromMintTokenPool.contract.Call(opts, &out, "getRateLimitAdmin") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) GetRateLimitAdmin() (common.Address, error) { + return _BurnFromMintTokenPool.Contract.GetRateLimitAdmin(&_BurnFromMintTokenPool.CallOpts) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCallerSession) GetRateLimitAdmin() (common.Address, error) { + return _BurnFromMintTokenPool.Contract.GetRateLimitAdmin(&_BurnFromMintTokenPool.CallOpts) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCaller) GetRemotePools(opts *bind.CallOpts, remoteChainSelector uint64) ([][]byte, error) { + var out []interface{} + err := _BurnFromMintTokenPool.contract.Call(opts, &out, "getRemotePools", remoteChainSelector) + + if err != nil { + return *new([][]byte), err + } + + out0 := *abi.ConvertType(out[0], new([][]byte)).(*[][]byte) + + return out0, err + +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) GetRemotePools(remoteChainSelector uint64) ([][]byte, error) { + return _BurnFromMintTokenPool.Contract.GetRemotePools(&_BurnFromMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCallerSession) GetRemotePools(remoteChainSelector uint64) ([][]byte, error) { + return _BurnFromMintTokenPool.Contract.GetRemotePools(&_BurnFromMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCaller) GetRemoteToken(opts *bind.CallOpts, remoteChainSelector uint64) ([]byte, error) { + var out []interface{} + err := _BurnFromMintTokenPool.contract.Call(opts, &out, "getRemoteToken", remoteChainSelector) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) GetRemoteToken(remoteChainSelector uint64) ([]byte, error) { + return _BurnFromMintTokenPool.Contract.GetRemoteToken(&_BurnFromMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCallerSession) GetRemoteToken(remoteChainSelector uint64) ([]byte, error) { + return _BurnFromMintTokenPool.Contract.GetRemoteToken(&_BurnFromMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCaller) GetRmnProxy(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BurnFromMintTokenPool.contract.Call(opts, &out, "getRmnProxy") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) GetRmnProxy() (common.Address, error) { + return _BurnFromMintTokenPool.Contract.GetRmnProxy(&_BurnFromMintTokenPool.CallOpts) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCallerSession) GetRmnProxy() (common.Address, error) { + return _BurnFromMintTokenPool.Contract.GetRmnProxy(&_BurnFromMintTokenPool.CallOpts) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCaller) GetRouter(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BurnFromMintTokenPool.contract.Call(opts, &out, "getRouter") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) GetRouter() (common.Address, error) { + return _BurnFromMintTokenPool.Contract.GetRouter(&_BurnFromMintTokenPool.CallOpts) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCallerSession) GetRouter() (common.Address, error) { + return _BurnFromMintTokenPool.Contract.GetRouter(&_BurnFromMintTokenPool.CallOpts) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCaller) GetSupportedChains(opts *bind.CallOpts) ([]uint64, error) { + var out []interface{} + err := _BurnFromMintTokenPool.contract.Call(opts, &out, "getSupportedChains") + + if err != nil { + return *new([]uint64), err + } + + out0 := *abi.ConvertType(out[0], new([]uint64)).(*[]uint64) + + return out0, err + +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) GetSupportedChains() ([]uint64, error) { + return _BurnFromMintTokenPool.Contract.GetSupportedChains(&_BurnFromMintTokenPool.CallOpts) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCallerSession) GetSupportedChains() ([]uint64, error) { + return _BurnFromMintTokenPool.Contract.GetSupportedChains(&_BurnFromMintTokenPool.CallOpts) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCaller) GetToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BurnFromMintTokenPool.contract.Call(opts, &out, "getToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) GetToken() (common.Address, error) { + return _BurnFromMintTokenPool.Contract.GetToken(&_BurnFromMintTokenPool.CallOpts) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCallerSession) GetToken() (common.Address, error) { + return _BurnFromMintTokenPool.Contract.GetToken(&_BurnFromMintTokenPool.CallOpts) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCaller) GetTokenDecimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _BurnFromMintTokenPool.contract.Call(opts, &out, "getTokenDecimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) GetTokenDecimals() (uint8, error) { + return _BurnFromMintTokenPool.Contract.GetTokenDecimals(&_BurnFromMintTokenPool.CallOpts) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCallerSession) GetTokenDecimals() (uint8, error) { + return _BurnFromMintTokenPool.Contract.GetTokenDecimals(&_BurnFromMintTokenPool.CallOpts) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCaller) IsRemotePool(opts *bind.CallOpts, remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) { + var out []interface{} + err := _BurnFromMintTokenPool.contract.Call(opts, &out, "isRemotePool", remoteChainSelector, remotePoolAddress) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) IsRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) { + return _BurnFromMintTokenPool.Contract.IsRemotePool(&_BurnFromMintTokenPool.CallOpts, remoteChainSelector, remotePoolAddress) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCallerSession) IsRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) { + return _BurnFromMintTokenPool.Contract.IsRemotePool(&_BurnFromMintTokenPool.CallOpts, remoteChainSelector, remotePoolAddress) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCaller) IsSupportedChain(opts *bind.CallOpts, remoteChainSelector uint64) (bool, error) { + var out []interface{} + err := _BurnFromMintTokenPool.contract.Call(opts, &out, "isSupportedChain", remoteChainSelector) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) IsSupportedChain(remoteChainSelector uint64) (bool, error) { + return _BurnFromMintTokenPool.Contract.IsSupportedChain(&_BurnFromMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCallerSession) IsSupportedChain(remoteChainSelector uint64) (bool, error) { + return _BurnFromMintTokenPool.Contract.IsSupportedChain(&_BurnFromMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCaller) IsSupportedToken(opts *bind.CallOpts, token common.Address) (bool, error) { + var out []interface{} + err := _BurnFromMintTokenPool.contract.Call(opts, &out, "isSupportedToken", token) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) IsSupportedToken(token common.Address) (bool, error) { + return _BurnFromMintTokenPool.Contract.IsSupportedToken(&_BurnFromMintTokenPool.CallOpts, token) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCallerSession) IsSupportedToken(token common.Address) (bool, error) { + return _BurnFromMintTokenPool.Contract.IsSupportedToken(&_BurnFromMintTokenPool.CallOpts, token) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BurnFromMintTokenPool.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 + +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) Owner() (common.Address, error) { + return _BurnFromMintTokenPool.Contract.Owner(&_BurnFromMintTokenPool.CallOpts) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCallerSession) Owner() (common.Address, error) { + return _BurnFromMintTokenPool.Contract.Owner(&_BurnFromMintTokenPool.CallOpts) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _BurnFromMintTokenPool.contract.Call(opts, &out, "supportsInterface", interfaceId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _BurnFromMintTokenPool.Contract.SupportsInterface(&_BurnFromMintTokenPool.CallOpts, interfaceId) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _BurnFromMintTokenPool.Contract.SupportsInterface(&_BurnFromMintTokenPool.CallOpts, interfaceId) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _BurnFromMintTokenPool.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) TypeAndVersion() (string, error) { + return _BurnFromMintTokenPool.Contract.TypeAndVersion(&_BurnFromMintTokenPool.CallOpts) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolCallerSession) TypeAndVersion() (string, error) { + return _BurnFromMintTokenPool.Contract.TypeAndVersion(&_BurnFromMintTokenPool.CallOpts) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BurnFromMintTokenPool.contract.Transact(opts, "acceptOwnership") +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) AcceptOwnership() (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.AcceptOwnership(&_BurnFromMintTokenPool.TransactOpts) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.AcceptOwnership(&_BurnFromMintTokenPool.TransactOpts) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolTransactor) AddRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _BurnFromMintTokenPool.contract.Transact(opts, "addRemotePool", remoteChainSelector, remotePoolAddress) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) AddRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.AddRemotePool(&_BurnFromMintTokenPool.TransactOpts, remoteChainSelector, remotePoolAddress) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolTransactorSession) AddRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.AddRemotePool(&_BurnFromMintTokenPool.TransactOpts, remoteChainSelector, remotePoolAddress) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolTransactor) ApplyAllowListUpdates(opts *bind.TransactOpts, removes []common.Address, adds []common.Address) (*types.Transaction, error) { + return _BurnFromMintTokenPool.contract.Transact(opts, "applyAllowListUpdates", removes, adds) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) ApplyAllowListUpdates(removes []common.Address, adds []common.Address) (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.ApplyAllowListUpdates(&_BurnFromMintTokenPool.TransactOpts, removes, adds) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolTransactorSession) ApplyAllowListUpdates(removes []common.Address, adds []common.Address) (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.ApplyAllowListUpdates(&_BurnFromMintTokenPool.TransactOpts, removes, adds) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolTransactor) ApplyChainUpdates(opts *bind.TransactOpts, remoteChainSelectorsToRemove []uint64, chainsToAdd []TokenPoolChainUpdate) (*types.Transaction, error) { + return _BurnFromMintTokenPool.contract.Transact(opts, "applyChainUpdates", remoteChainSelectorsToRemove, chainsToAdd) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) ApplyChainUpdates(remoteChainSelectorsToRemove []uint64, chainsToAdd []TokenPoolChainUpdate) (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.ApplyChainUpdates(&_BurnFromMintTokenPool.TransactOpts, remoteChainSelectorsToRemove, chainsToAdd) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolTransactorSession) ApplyChainUpdates(remoteChainSelectorsToRemove []uint64, chainsToAdd []TokenPoolChainUpdate) (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.ApplyChainUpdates(&_BurnFromMintTokenPool.TransactOpts, remoteChainSelectorsToRemove, chainsToAdd) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolTransactor) LockOrBurn(opts *bind.TransactOpts, lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) { + return _BurnFromMintTokenPool.contract.Transact(opts, "lockOrBurn", lockOrBurnIn) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) LockOrBurn(lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.LockOrBurn(&_BurnFromMintTokenPool.TransactOpts, lockOrBurnIn) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolTransactorSession) LockOrBurn(lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.LockOrBurn(&_BurnFromMintTokenPool.TransactOpts, lockOrBurnIn) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolTransactor) ReleaseOrMint(opts *bind.TransactOpts, releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) { + return _BurnFromMintTokenPool.contract.Transact(opts, "releaseOrMint", releaseOrMintIn) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) ReleaseOrMint(releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.ReleaseOrMint(&_BurnFromMintTokenPool.TransactOpts, releaseOrMintIn) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolTransactorSession) ReleaseOrMint(releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.ReleaseOrMint(&_BurnFromMintTokenPool.TransactOpts, releaseOrMintIn) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolTransactor) RemoveRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _BurnFromMintTokenPool.contract.Transact(opts, "removeRemotePool", remoteChainSelector, remotePoolAddress) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) RemoveRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.RemoveRemotePool(&_BurnFromMintTokenPool.TransactOpts, remoteChainSelector, remotePoolAddress) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolTransactorSession) RemoveRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.RemoveRemotePool(&_BurnFromMintTokenPool.TransactOpts, remoteChainSelector, remotePoolAddress) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolTransactor) SetChainRateLimiterConfig(opts *bind.TransactOpts, remoteChainSelector uint64, outboundConfig RateLimiterConfig, inboundConfig RateLimiterConfig) (*types.Transaction, error) { + return _BurnFromMintTokenPool.contract.Transact(opts, "setChainRateLimiterConfig", remoteChainSelector, outboundConfig, inboundConfig) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) SetChainRateLimiterConfig(remoteChainSelector uint64, outboundConfig RateLimiterConfig, inboundConfig RateLimiterConfig) (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.SetChainRateLimiterConfig(&_BurnFromMintTokenPool.TransactOpts, remoteChainSelector, outboundConfig, inboundConfig) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolTransactorSession) SetChainRateLimiterConfig(remoteChainSelector uint64, outboundConfig RateLimiterConfig, inboundConfig RateLimiterConfig) (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.SetChainRateLimiterConfig(&_BurnFromMintTokenPool.TransactOpts, remoteChainSelector, outboundConfig, inboundConfig) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolTransactor) SetRateLimitAdmin(opts *bind.TransactOpts, rateLimitAdmin common.Address) (*types.Transaction, error) { + return _BurnFromMintTokenPool.contract.Transact(opts, "setRateLimitAdmin", rateLimitAdmin) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) SetRateLimitAdmin(rateLimitAdmin common.Address) (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.SetRateLimitAdmin(&_BurnFromMintTokenPool.TransactOpts, rateLimitAdmin) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolTransactorSession) SetRateLimitAdmin(rateLimitAdmin common.Address) (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.SetRateLimitAdmin(&_BurnFromMintTokenPool.TransactOpts, rateLimitAdmin) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolTransactor) SetRouter(opts *bind.TransactOpts, newRouter common.Address) (*types.Transaction, error) { + return _BurnFromMintTokenPool.contract.Transact(opts, "setRouter", newRouter) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) SetRouter(newRouter common.Address) (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.SetRouter(&_BurnFromMintTokenPool.TransactOpts, newRouter) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolTransactorSession) SetRouter(newRouter common.Address) (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.SetRouter(&_BurnFromMintTokenPool.TransactOpts, newRouter) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _BurnFromMintTokenPool.contract.Transact(opts, "transferOwnership", to) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.TransferOwnership(&_BurnFromMintTokenPool.TransactOpts, to) +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _BurnFromMintTokenPool.Contract.TransferOwnership(&_BurnFromMintTokenPool.TransactOpts, to) +} + +type BurnFromMintTokenPoolAllowListAddIterator struct { + Event *BurnFromMintTokenPoolAllowListAdd + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnFromMintTokenPoolAllowListAddIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolAllowListAdd) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolAllowListAdd) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnFromMintTokenPoolAllowListAddIterator) Error() error { + return it.fail +} + +func (it *BurnFromMintTokenPoolAllowListAddIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnFromMintTokenPoolAllowListAdd struct { + Sender common.Address + Raw types.Log +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) FilterAllowListAdd(opts *bind.FilterOpts) (*BurnFromMintTokenPoolAllowListAddIterator, error) { + + logs, sub, err := _BurnFromMintTokenPool.contract.FilterLogs(opts, "AllowListAdd") + if err != nil { + return nil, err + } + return &BurnFromMintTokenPoolAllowListAddIterator{contract: _BurnFromMintTokenPool.contract, event: "AllowListAdd", logs: logs, sub: sub}, nil +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) WatchAllowListAdd(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolAllowListAdd) (event.Subscription, error) { + + logs, sub, err := _BurnFromMintTokenPool.contract.WatchLogs(opts, "AllowListAdd") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnFromMintTokenPoolAllowListAdd) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "AllowListAdd", 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 +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) ParseAllowListAdd(log types.Log) (*BurnFromMintTokenPoolAllowListAdd, error) { + event := new(BurnFromMintTokenPoolAllowListAdd) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "AllowListAdd", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnFromMintTokenPoolAllowListRemoveIterator struct { + Event *BurnFromMintTokenPoolAllowListRemove + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnFromMintTokenPoolAllowListRemoveIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolAllowListRemove) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolAllowListRemove) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnFromMintTokenPoolAllowListRemoveIterator) Error() error { + return it.fail +} + +func (it *BurnFromMintTokenPoolAllowListRemoveIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnFromMintTokenPoolAllowListRemove struct { + Sender common.Address + Raw types.Log +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) FilterAllowListRemove(opts *bind.FilterOpts) (*BurnFromMintTokenPoolAllowListRemoveIterator, error) { + + logs, sub, err := _BurnFromMintTokenPool.contract.FilterLogs(opts, "AllowListRemove") + if err != nil { + return nil, err + } + return &BurnFromMintTokenPoolAllowListRemoveIterator{contract: _BurnFromMintTokenPool.contract, event: "AllowListRemove", logs: logs, sub: sub}, nil +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) WatchAllowListRemove(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolAllowListRemove) (event.Subscription, error) { + + logs, sub, err := _BurnFromMintTokenPool.contract.WatchLogs(opts, "AllowListRemove") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnFromMintTokenPoolAllowListRemove) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "AllowListRemove", 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 +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) ParseAllowListRemove(log types.Log) (*BurnFromMintTokenPoolAllowListRemove, error) { + event := new(BurnFromMintTokenPoolAllowListRemove) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "AllowListRemove", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnFromMintTokenPoolBurnedIterator struct { + Event *BurnFromMintTokenPoolBurned + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnFromMintTokenPoolBurnedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolBurned) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolBurned) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnFromMintTokenPoolBurnedIterator) Error() error { + return it.fail +} + +func (it *BurnFromMintTokenPoolBurnedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnFromMintTokenPoolBurned struct { + Sender common.Address + Amount *big.Int + Raw types.Log +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) FilterBurned(opts *bind.FilterOpts, sender []common.Address) (*BurnFromMintTokenPoolBurnedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _BurnFromMintTokenPool.contract.FilterLogs(opts, "Burned", senderRule) + if err != nil { + return nil, err + } + return &BurnFromMintTokenPoolBurnedIterator{contract: _BurnFromMintTokenPool.contract, event: "Burned", logs: logs, sub: sub}, nil +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) WatchBurned(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolBurned, sender []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _BurnFromMintTokenPool.contract.WatchLogs(opts, "Burned", senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnFromMintTokenPoolBurned) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "Burned", 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 +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) ParseBurned(log types.Log) (*BurnFromMintTokenPoolBurned, error) { + event := new(BurnFromMintTokenPoolBurned) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "Burned", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnFromMintTokenPoolChainAddedIterator struct { + Event *BurnFromMintTokenPoolChainAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnFromMintTokenPoolChainAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolChainAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolChainAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnFromMintTokenPoolChainAddedIterator) Error() error { + return it.fail +} + +func (it *BurnFromMintTokenPoolChainAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnFromMintTokenPoolChainAdded struct { + RemoteChainSelector uint64 + RemoteToken []byte + OutboundRateLimiterConfig RateLimiterConfig + InboundRateLimiterConfig RateLimiterConfig + Raw types.Log +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) FilterChainAdded(opts *bind.FilterOpts) (*BurnFromMintTokenPoolChainAddedIterator, error) { + + logs, sub, err := _BurnFromMintTokenPool.contract.FilterLogs(opts, "ChainAdded") + if err != nil { + return nil, err + } + return &BurnFromMintTokenPoolChainAddedIterator{contract: _BurnFromMintTokenPool.contract, event: "ChainAdded", logs: logs, sub: sub}, nil +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) WatchChainAdded(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolChainAdded) (event.Subscription, error) { + + logs, sub, err := _BurnFromMintTokenPool.contract.WatchLogs(opts, "ChainAdded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnFromMintTokenPoolChainAdded) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "ChainAdded", 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 +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) ParseChainAdded(log types.Log) (*BurnFromMintTokenPoolChainAdded, error) { + event := new(BurnFromMintTokenPoolChainAdded) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "ChainAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnFromMintTokenPoolChainConfiguredIterator struct { + Event *BurnFromMintTokenPoolChainConfigured + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnFromMintTokenPoolChainConfiguredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolChainConfigured) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolChainConfigured) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnFromMintTokenPoolChainConfiguredIterator) Error() error { + return it.fail +} + +func (it *BurnFromMintTokenPoolChainConfiguredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnFromMintTokenPoolChainConfigured struct { + RemoteChainSelector uint64 + OutboundRateLimiterConfig RateLimiterConfig + InboundRateLimiterConfig RateLimiterConfig + Raw types.Log +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) FilterChainConfigured(opts *bind.FilterOpts) (*BurnFromMintTokenPoolChainConfiguredIterator, error) { + + logs, sub, err := _BurnFromMintTokenPool.contract.FilterLogs(opts, "ChainConfigured") + if err != nil { + return nil, err + } + return &BurnFromMintTokenPoolChainConfiguredIterator{contract: _BurnFromMintTokenPool.contract, event: "ChainConfigured", logs: logs, sub: sub}, nil +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) WatchChainConfigured(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolChainConfigured) (event.Subscription, error) { + + logs, sub, err := _BurnFromMintTokenPool.contract.WatchLogs(opts, "ChainConfigured") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnFromMintTokenPoolChainConfigured) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "ChainConfigured", 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 +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) ParseChainConfigured(log types.Log) (*BurnFromMintTokenPoolChainConfigured, error) { + event := new(BurnFromMintTokenPoolChainConfigured) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "ChainConfigured", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnFromMintTokenPoolChainRemovedIterator struct { + Event *BurnFromMintTokenPoolChainRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnFromMintTokenPoolChainRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolChainRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolChainRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnFromMintTokenPoolChainRemovedIterator) Error() error { + return it.fail +} + +func (it *BurnFromMintTokenPoolChainRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnFromMintTokenPoolChainRemoved struct { + RemoteChainSelector uint64 + Raw types.Log +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) FilterChainRemoved(opts *bind.FilterOpts) (*BurnFromMintTokenPoolChainRemovedIterator, error) { + + logs, sub, err := _BurnFromMintTokenPool.contract.FilterLogs(opts, "ChainRemoved") + if err != nil { + return nil, err + } + return &BurnFromMintTokenPoolChainRemovedIterator{contract: _BurnFromMintTokenPool.contract, event: "ChainRemoved", logs: logs, sub: sub}, nil +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolChainRemoved) (event.Subscription, error) { + + logs, sub, err := _BurnFromMintTokenPool.contract.WatchLogs(opts, "ChainRemoved") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnFromMintTokenPoolChainRemoved) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "ChainRemoved", 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 +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) ParseChainRemoved(log types.Log) (*BurnFromMintTokenPoolChainRemoved, error) { + event := new(BurnFromMintTokenPoolChainRemoved) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "ChainRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnFromMintTokenPoolConfigChangedIterator struct { + Event *BurnFromMintTokenPoolConfigChanged + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnFromMintTokenPoolConfigChangedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolConfigChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolConfigChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnFromMintTokenPoolConfigChangedIterator) Error() error { + return it.fail +} + +func (it *BurnFromMintTokenPoolConfigChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnFromMintTokenPoolConfigChanged struct { + Config RateLimiterConfig + Raw types.Log +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) FilterConfigChanged(opts *bind.FilterOpts) (*BurnFromMintTokenPoolConfigChangedIterator, error) { + + logs, sub, err := _BurnFromMintTokenPool.contract.FilterLogs(opts, "ConfigChanged") + if err != nil { + return nil, err + } + return &BurnFromMintTokenPoolConfigChangedIterator{contract: _BurnFromMintTokenPool.contract, event: "ConfigChanged", logs: logs, sub: sub}, nil +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) WatchConfigChanged(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolConfigChanged) (event.Subscription, error) { + + logs, sub, err := _BurnFromMintTokenPool.contract.WatchLogs(opts, "ConfigChanged") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnFromMintTokenPoolConfigChanged) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "ConfigChanged", 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 +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) ParseConfigChanged(log types.Log) (*BurnFromMintTokenPoolConfigChanged, error) { + event := new(BurnFromMintTokenPoolConfigChanged) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "ConfigChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnFromMintTokenPoolLockedIterator struct { + Event *BurnFromMintTokenPoolLocked + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnFromMintTokenPoolLockedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolLocked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolLocked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnFromMintTokenPoolLockedIterator) Error() error { + return it.fail +} + +func (it *BurnFromMintTokenPoolLockedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnFromMintTokenPoolLocked struct { + Sender common.Address + Amount *big.Int + Raw types.Log +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) FilterLocked(opts *bind.FilterOpts, sender []common.Address) (*BurnFromMintTokenPoolLockedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _BurnFromMintTokenPool.contract.FilterLogs(opts, "Locked", senderRule) + if err != nil { + return nil, err + } + return &BurnFromMintTokenPoolLockedIterator{contract: _BurnFromMintTokenPool.contract, event: "Locked", logs: logs, sub: sub}, nil +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) WatchLocked(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolLocked, sender []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _BurnFromMintTokenPool.contract.WatchLogs(opts, "Locked", senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnFromMintTokenPoolLocked) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "Locked", 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 +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) ParseLocked(log types.Log) (*BurnFromMintTokenPoolLocked, error) { + event := new(BurnFromMintTokenPoolLocked) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "Locked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnFromMintTokenPoolMintedIterator struct { + Event *BurnFromMintTokenPoolMinted + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnFromMintTokenPoolMintedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolMinted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolMinted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnFromMintTokenPoolMintedIterator) Error() error { + return it.fail +} + +func (it *BurnFromMintTokenPoolMintedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnFromMintTokenPoolMinted struct { + Sender common.Address + Recipient common.Address + Amount *big.Int + Raw types.Log +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) FilterMinted(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*BurnFromMintTokenPoolMintedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _BurnFromMintTokenPool.contract.FilterLogs(opts, "Minted", senderRule, recipientRule) + if err != nil { + return nil, err + } + return &BurnFromMintTokenPoolMintedIterator{contract: _BurnFromMintTokenPool.contract, event: "Minted", logs: logs, sub: sub}, nil +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) WatchMinted(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolMinted, sender []common.Address, recipient []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _BurnFromMintTokenPool.contract.WatchLogs(opts, "Minted", senderRule, recipientRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnFromMintTokenPoolMinted) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "Minted", 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 +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) ParseMinted(log types.Log) (*BurnFromMintTokenPoolMinted, error) { + event := new(BurnFromMintTokenPoolMinted) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "Minted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnFromMintTokenPoolOwnershipTransferRequestedIterator struct { + Event *BurnFromMintTokenPoolOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnFromMintTokenPoolOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnFromMintTokenPoolOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *BurnFromMintTokenPoolOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnFromMintTokenPoolOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*BurnFromMintTokenPoolOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _BurnFromMintTokenPool.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &BurnFromMintTokenPoolOwnershipTransferRequestedIterator{contract: _BurnFromMintTokenPool.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _BurnFromMintTokenPool.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnFromMintTokenPoolOwnershipTransferRequested) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "OwnershipTransferRequested", 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 +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) ParseOwnershipTransferRequested(log types.Log) (*BurnFromMintTokenPoolOwnershipTransferRequested, error) { + event := new(BurnFromMintTokenPoolOwnershipTransferRequested) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnFromMintTokenPoolOwnershipTransferredIterator struct { + Event *BurnFromMintTokenPoolOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnFromMintTokenPoolOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnFromMintTokenPoolOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *BurnFromMintTokenPoolOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnFromMintTokenPoolOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*BurnFromMintTokenPoolOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _BurnFromMintTokenPool.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &BurnFromMintTokenPoolOwnershipTransferredIterator{contract: _BurnFromMintTokenPool.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _BurnFromMintTokenPool.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnFromMintTokenPoolOwnershipTransferred) + if err := _BurnFromMintTokenPool.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 +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) ParseOwnershipTransferred(log types.Log) (*BurnFromMintTokenPoolOwnershipTransferred, error) { + event := new(BurnFromMintTokenPoolOwnershipTransferred) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnFromMintTokenPoolRateLimitAdminSetIterator struct { + Event *BurnFromMintTokenPoolRateLimitAdminSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnFromMintTokenPoolRateLimitAdminSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolRateLimitAdminSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolRateLimitAdminSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnFromMintTokenPoolRateLimitAdminSetIterator) Error() error { + return it.fail +} + +func (it *BurnFromMintTokenPoolRateLimitAdminSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnFromMintTokenPoolRateLimitAdminSet struct { + RateLimitAdmin common.Address + Raw types.Log +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) FilterRateLimitAdminSet(opts *bind.FilterOpts) (*BurnFromMintTokenPoolRateLimitAdminSetIterator, error) { + + logs, sub, err := _BurnFromMintTokenPool.contract.FilterLogs(opts, "RateLimitAdminSet") + if err != nil { + return nil, err + } + return &BurnFromMintTokenPoolRateLimitAdminSetIterator{contract: _BurnFromMintTokenPool.contract, event: "RateLimitAdminSet", logs: logs, sub: sub}, nil +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) WatchRateLimitAdminSet(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolRateLimitAdminSet) (event.Subscription, error) { + + logs, sub, err := _BurnFromMintTokenPool.contract.WatchLogs(opts, "RateLimitAdminSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnFromMintTokenPoolRateLimitAdminSet) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "RateLimitAdminSet", 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 +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) ParseRateLimitAdminSet(log types.Log) (*BurnFromMintTokenPoolRateLimitAdminSet, error) { + event := new(BurnFromMintTokenPoolRateLimitAdminSet) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "RateLimitAdminSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnFromMintTokenPoolReleasedIterator struct { + Event *BurnFromMintTokenPoolReleased + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnFromMintTokenPoolReleasedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolReleased) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolReleased) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnFromMintTokenPoolReleasedIterator) Error() error { + return it.fail +} + +func (it *BurnFromMintTokenPoolReleasedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnFromMintTokenPoolReleased struct { + Sender common.Address + Recipient common.Address + Amount *big.Int + Raw types.Log +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) FilterReleased(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*BurnFromMintTokenPoolReleasedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _BurnFromMintTokenPool.contract.FilterLogs(opts, "Released", senderRule, recipientRule) + if err != nil { + return nil, err + } + return &BurnFromMintTokenPoolReleasedIterator{contract: _BurnFromMintTokenPool.contract, event: "Released", logs: logs, sub: sub}, nil +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) WatchReleased(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolReleased, sender []common.Address, recipient []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _BurnFromMintTokenPool.contract.WatchLogs(opts, "Released", senderRule, recipientRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnFromMintTokenPoolReleased) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "Released", 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 +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) ParseReleased(log types.Log) (*BurnFromMintTokenPoolReleased, error) { + event := new(BurnFromMintTokenPoolReleased) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "Released", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnFromMintTokenPoolRemotePoolAddedIterator struct { + Event *BurnFromMintTokenPoolRemotePoolAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnFromMintTokenPoolRemotePoolAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolRemotePoolAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolRemotePoolAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnFromMintTokenPoolRemotePoolAddedIterator) Error() error { + return it.fail +} + +func (it *BurnFromMintTokenPoolRemotePoolAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnFromMintTokenPoolRemotePoolAdded struct { + RemoteChainSelector uint64 + RemotePoolAddress []byte + Raw types.Log +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) FilterRemotePoolAdded(opts *bind.FilterOpts, remoteChainSelector []uint64) (*BurnFromMintTokenPoolRemotePoolAddedIterator, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _BurnFromMintTokenPool.contract.FilterLogs(opts, "RemotePoolAdded", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return &BurnFromMintTokenPoolRemotePoolAddedIterator{contract: _BurnFromMintTokenPool.contract, event: "RemotePoolAdded", logs: logs, sub: sub}, nil +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) WatchRemotePoolAdded(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolRemotePoolAdded, remoteChainSelector []uint64) (event.Subscription, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _BurnFromMintTokenPool.contract.WatchLogs(opts, "RemotePoolAdded", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnFromMintTokenPoolRemotePoolAdded) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "RemotePoolAdded", 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 +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) ParseRemotePoolAdded(log types.Log) (*BurnFromMintTokenPoolRemotePoolAdded, error) { + event := new(BurnFromMintTokenPoolRemotePoolAdded) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "RemotePoolAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnFromMintTokenPoolRemotePoolRemovedIterator struct { + Event *BurnFromMintTokenPoolRemotePoolRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnFromMintTokenPoolRemotePoolRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolRemotePoolRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolRemotePoolRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnFromMintTokenPoolRemotePoolRemovedIterator) Error() error { + return it.fail +} + +func (it *BurnFromMintTokenPoolRemotePoolRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnFromMintTokenPoolRemotePoolRemoved struct { + RemoteChainSelector uint64 + RemotePoolAddress []byte + Raw types.Log +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) FilterRemotePoolRemoved(opts *bind.FilterOpts, remoteChainSelector []uint64) (*BurnFromMintTokenPoolRemotePoolRemovedIterator, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _BurnFromMintTokenPool.contract.FilterLogs(opts, "RemotePoolRemoved", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return &BurnFromMintTokenPoolRemotePoolRemovedIterator{contract: _BurnFromMintTokenPool.contract, event: "RemotePoolRemoved", logs: logs, sub: sub}, nil +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) WatchRemotePoolRemoved(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolRemotePoolRemoved, remoteChainSelector []uint64) (event.Subscription, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _BurnFromMintTokenPool.contract.WatchLogs(opts, "RemotePoolRemoved", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnFromMintTokenPoolRemotePoolRemoved) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "RemotePoolRemoved", 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 +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) ParseRemotePoolRemoved(log types.Log) (*BurnFromMintTokenPoolRemotePoolRemoved, error) { + event := new(BurnFromMintTokenPoolRemotePoolRemoved) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "RemotePoolRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnFromMintTokenPoolRouterUpdatedIterator struct { + Event *BurnFromMintTokenPoolRouterUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnFromMintTokenPoolRouterUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolRouterUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolRouterUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnFromMintTokenPoolRouterUpdatedIterator) Error() error { + return it.fail +} + +func (it *BurnFromMintTokenPoolRouterUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnFromMintTokenPoolRouterUpdated struct { + OldRouter common.Address + NewRouter common.Address + Raw types.Log +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) FilterRouterUpdated(opts *bind.FilterOpts) (*BurnFromMintTokenPoolRouterUpdatedIterator, error) { + + logs, sub, err := _BurnFromMintTokenPool.contract.FilterLogs(opts, "RouterUpdated") + if err != nil { + return nil, err + } + return &BurnFromMintTokenPoolRouterUpdatedIterator{contract: _BurnFromMintTokenPool.contract, event: "RouterUpdated", logs: logs, sub: sub}, nil +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) WatchRouterUpdated(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolRouterUpdated) (event.Subscription, error) { + + logs, sub, err := _BurnFromMintTokenPool.contract.WatchLogs(opts, "RouterUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnFromMintTokenPoolRouterUpdated) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "RouterUpdated", 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 +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) ParseRouterUpdated(log types.Log) (*BurnFromMintTokenPoolRouterUpdated, error) { + event := new(BurnFromMintTokenPoolRouterUpdated) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "RouterUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnFromMintTokenPoolTokensConsumedIterator struct { + Event *BurnFromMintTokenPoolTokensConsumed + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnFromMintTokenPoolTokensConsumedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolTokensConsumed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnFromMintTokenPoolTokensConsumed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnFromMintTokenPoolTokensConsumedIterator) Error() error { + return it.fail +} + +func (it *BurnFromMintTokenPoolTokensConsumedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnFromMintTokenPoolTokensConsumed struct { + Tokens *big.Int + Raw types.Log +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) FilterTokensConsumed(opts *bind.FilterOpts) (*BurnFromMintTokenPoolTokensConsumedIterator, error) { + + logs, sub, err := _BurnFromMintTokenPool.contract.FilterLogs(opts, "TokensConsumed") + if err != nil { + return nil, err + } + return &BurnFromMintTokenPoolTokensConsumedIterator{contract: _BurnFromMintTokenPool.contract, event: "TokensConsumed", logs: logs, sub: sub}, nil +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) WatchTokensConsumed(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolTokensConsumed) (event.Subscription, error) { + + logs, sub, err := _BurnFromMintTokenPool.contract.WatchLogs(opts, "TokensConsumed") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnFromMintTokenPoolTokensConsumed) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "TokensConsumed", 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 +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPoolFilterer) ParseTokensConsumed(log types.Log) (*BurnFromMintTokenPoolTokensConsumed, error) { + event := new(BurnFromMintTokenPoolTokensConsumed) + if err := _BurnFromMintTokenPool.contract.UnpackLog(event, "TokensConsumed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPool) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _BurnFromMintTokenPool.abi.Events["AllowListAdd"].ID: + return _BurnFromMintTokenPool.ParseAllowListAdd(log) + case _BurnFromMintTokenPool.abi.Events["AllowListRemove"].ID: + return _BurnFromMintTokenPool.ParseAllowListRemove(log) + case _BurnFromMintTokenPool.abi.Events["Burned"].ID: + return _BurnFromMintTokenPool.ParseBurned(log) + case _BurnFromMintTokenPool.abi.Events["ChainAdded"].ID: + return _BurnFromMintTokenPool.ParseChainAdded(log) + case _BurnFromMintTokenPool.abi.Events["ChainConfigured"].ID: + return _BurnFromMintTokenPool.ParseChainConfigured(log) + case _BurnFromMintTokenPool.abi.Events["ChainRemoved"].ID: + return _BurnFromMintTokenPool.ParseChainRemoved(log) + case _BurnFromMintTokenPool.abi.Events["ConfigChanged"].ID: + return _BurnFromMintTokenPool.ParseConfigChanged(log) + case _BurnFromMintTokenPool.abi.Events["Locked"].ID: + return _BurnFromMintTokenPool.ParseLocked(log) + case _BurnFromMintTokenPool.abi.Events["Minted"].ID: + return _BurnFromMintTokenPool.ParseMinted(log) + case _BurnFromMintTokenPool.abi.Events["OwnershipTransferRequested"].ID: + return _BurnFromMintTokenPool.ParseOwnershipTransferRequested(log) + case _BurnFromMintTokenPool.abi.Events["OwnershipTransferred"].ID: + return _BurnFromMintTokenPool.ParseOwnershipTransferred(log) + case _BurnFromMintTokenPool.abi.Events["RateLimitAdminSet"].ID: + return _BurnFromMintTokenPool.ParseRateLimitAdminSet(log) + case _BurnFromMintTokenPool.abi.Events["Released"].ID: + return _BurnFromMintTokenPool.ParseReleased(log) + case _BurnFromMintTokenPool.abi.Events["RemotePoolAdded"].ID: + return _BurnFromMintTokenPool.ParseRemotePoolAdded(log) + case _BurnFromMintTokenPool.abi.Events["RemotePoolRemoved"].ID: + return _BurnFromMintTokenPool.ParseRemotePoolRemoved(log) + case _BurnFromMintTokenPool.abi.Events["RouterUpdated"].ID: + return _BurnFromMintTokenPool.ParseRouterUpdated(log) + case _BurnFromMintTokenPool.abi.Events["TokensConsumed"].ID: + return _BurnFromMintTokenPool.ParseTokensConsumed(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (BurnFromMintTokenPoolAllowListAdd) Topic() common.Hash { + return common.HexToHash("0x2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d8") +} + +func (BurnFromMintTokenPoolAllowListRemove) Topic() common.Hash { + return common.HexToHash("0x800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf7566") +} + +func (BurnFromMintTokenPoolBurned) Topic() common.Hash { + return common.HexToHash("0x696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df7") +} + +func (BurnFromMintTokenPoolChainAdded) Topic() common.Hash { + return common.HexToHash("0x8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c2") +} + +func (BurnFromMintTokenPoolChainConfigured) Topic() common.Hash { + return common.HexToHash("0x0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b") +} + +func (BurnFromMintTokenPoolChainRemoved) Topic() common.Hash { + return common.HexToHash("0x5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d859916") +} + +func (BurnFromMintTokenPoolConfigChanged) Topic() common.Hash { + return common.HexToHash("0x9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19") +} + +func (BurnFromMintTokenPoolLocked) Topic() common.Hash { + return common.HexToHash("0x9f1ec8c880f76798e7b793325d625e9b60e4082a553c98f42b6cda368dd60008") +} + +func (BurnFromMintTokenPoolMinted) Topic() common.Hash { + return common.HexToHash("0x9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0") +} + +func (BurnFromMintTokenPoolOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (BurnFromMintTokenPoolOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (BurnFromMintTokenPoolRateLimitAdminSet) Topic() common.Hash { + return common.HexToHash("0x44676b5284b809a22248eba0da87391d79098be38bb03154be88a58bf4d09174") +} + +func (BurnFromMintTokenPoolReleased) Topic() common.Hash { + return common.HexToHash("0x2d87480f50083e2b2759522a8fdda59802650a8055e609a7772cf70c07748f52") +} + +func (BurnFromMintTokenPoolRemotePoolAdded) Topic() common.Hash { + return common.HexToHash("0x7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea") +} + +func (BurnFromMintTokenPoolRemotePoolRemoved) Topic() common.Hash { + return common.HexToHash("0x52d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d76") +} + +func (BurnFromMintTokenPoolRouterUpdated) Topic() common.Hash { + return common.HexToHash("0x02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f1684") +} + +func (BurnFromMintTokenPoolTokensConsumed) Topic() common.Hash { + return common.HexToHash("0x1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a") +} + +func (_BurnFromMintTokenPool *BurnFromMintTokenPool) Address() common.Address { + return _BurnFromMintTokenPool.address +} + +type BurnFromMintTokenPoolInterface interface { + GetAllowList(opts *bind.CallOpts) ([]common.Address, error) + + GetAllowListEnabled(opts *bind.CallOpts) (bool, error) + + GetCurrentInboundRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64) (RateLimiterTokenBucket, error) + + GetCurrentOutboundRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64) (RateLimiterTokenBucket, error) + + GetRateLimitAdmin(opts *bind.CallOpts) (common.Address, error) + + GetRemotePools(opts *bind.CallOpts, remoteChainSelector uint64) ([][]byte, error) + + GetRemoteToken(opts *bind.CallOpts, remoteChainSelector uint64) ([]byte, error) + + GetRmnProxy(opts *bind.CallOpts) (common.Address, error) + + GetRouter(opts *bind.CallOpts) (common.Address, error) + + GetSupportedChains(opts *bind.CallOpts) ([]uint64, error) + + GetToken(opts *bind.CallOpts) (common.Address, error) + + GetTokenDecimals(opts *bind.CallOpts) (uint8, error) + + IsRemotePool(opts *bind.CallOpts, remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) + + IsSupportedChain(opts *bind.CallOpts, remoteChainSelector uint64) (bool, error) + + IsSupportedToken(opts *bind.CallOpts, token common.Address) (bool, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + AddRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) + + ApplyAllowListUpdates(opts *bind.TransactOpts, removes []common.Address, adds []common.Address) (*types.Transaction, error) + + ApplyChainUpdates(opts *bind.TransactOpts, remoteChainSelectorsToRemove []uint64, chainsToAdd []TokenPoolChainUpdate) (*types.Transaction, error) + + LockOrBurn(opts *bind.TransactOpts, lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) + + ReleaseOrMint(opts *bind.TransactOpts, releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) + + RemoveRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) + + SetChainRateLimiterConfig(opts *bind.TransactOpts, remoteChainSelector uint64, outboundConfig RateLimiterConfig, inboundConfig RateLimiterConfig) (*types.Transaction, error) + + SetRateLimitAdmin(opts *bind.TransactOpts, rateLimitAdmin common.Address) (*types.Transaction, error) + + SetRouter(opts *bind.TransactOpts, newRouter common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + FilterAllowListAdd(opts *bind.FilterOpts) (*BurnFromMintTokenPoolAllowListAddIterator, error) + + WatchAllowListAdd(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolAllowListAdd) (event.Subscription, error) + + ParseAllowListAdd(log types.Log) (*BurnFromMintTokenPoolAllowListAdd, error) + + FilterAllowListRemove(opts *bind.FilterOpts) (*BurnFromMintTokenPoolAllowListRemoveIterator, error) + + WatchAllowListRemove(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolAllowListRemove) (event.Subscription, error) + + ParseAllowListRemove(log types.Log) (*BurnFromMintTokenPoolAllowListRemove, error) + + FilterBurned(opts *bind.FilterOpts, sender []common.Address) (*BurnFromMintTokenPoolBurnedIterator, error) + + WatchBurned(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolBurned, sender []common.Address) (event.Subscription, error) + + ParseBurned(log types.Log) (*BurnFromMintTokenPoolBurned, error) + + FilterChainAdded(opts *bind.FilterOpts) (*BurnFromMintTokenPoolChainAddedIterator, error) + + WatchChainAdded(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolChainAdded) (event.Subscription, error) + + ParseChainAdded(log types.Log) (*BurnFromMintTokenPoolChainAdded, error) + + FilterChainConfigured(opts *bind.FilterOpts) (*BurnFromMintTokenPoolChainConfiguredIterator, error) + + WatchChainConfigured(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolChainConfigured) (event.Subscription, error) + + ParseChainConfigured(log types.Log) (*BurnFromMintTokenPoolChainConfigured, error) + + FilterChainRemoved(opts *bind.FilterOpts) (*BurnFromMintTokenPoolChainRemovedIterator, error) + + WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolChainRemoved) (event.Subscription, error) + + ParseChainRemoved(log types.Log) (*BurnFromMintTokenPoolChainRemoved, error) + + FilterConfigChanged(opts *bind.FilterOpts) (*BurnFromMintTokenPoolConfigChangedIterator, error) + + WatchConfigChanged(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolConfigChanged) (event.Subscription, error) + + ParseConfigChanged(log types.Log) (*BurnFromMintTokenPoolConfigChanged, error) + + FilterLocked(opts *bind.FilterOpts, sender []common.Address) (*BurnFromMintTokenPoolLockedIterator, error) + + WatchLocked(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolLocked, sender []common.Address) (event.Subscription, error) + + ParseLocked(log types.Log) (*BurnFromMintTokenPoolLocked, error) + + FilterMinted(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*BurnFromMintTokenPoolMintedIterator, error) + + WatchMinted(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolMinted, sender []common.Address, recipient []common.Address) (event.Subscription, error) + + ParseMinted(log types.Log) (*BurnFromMintTokenPoolMinted, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*BurnFromMintTokenPoolOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*BurnFromMintTokenPoolOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*BurnFromMintTokenPoolOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*BurnFromMintTokenPoolOwnershipTransferred, error) + + FilterRateLimitAdminSet(opts *bind.FilterOpts) (*BurnFromMintTokenPoolRateLimitAdminSetIterator, error) + + WatchRateLimitAdminSet(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolRateLimitAdminSet) (event.Subscription, error) + + ParseRateLimitAdminSet(log types.Log) (*BurnFromMintTokenPoolRateLimitAdminSet, error) + + FilterReleased(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*BurnFromMintTokenPoolReleasedIterator, error) + + WatchReleased(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolReleased, sender []common.Address, recipient []common.Address) (event.Subscription, error) + + ParseReleased(log types.Log) (*BurnFromMintTokenPoolReleased, error) + + FilterRemotePoolAdded(opts *bind.FilterOpts, remoteChainSelector []uint64) (*BurnFromMintTokenPoolRemotePoolAddedIterator, error) + + WatchRemotePoolAdded(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolRemotePoolAdded, remoteChainSelector []uint64) (event.Subscription, error) + + ParseRemotePoolAdded(log types.Log) (*BurnFromMintTokenPoolRemotePoolAdded, error) + + FilterRemotePoolRemoved(opts *bind.FilterOpts, remoteChainSelector []uint64) (*BurnFromMintTokenPoolRemotePoolRemovedIterator, error) + + WatchRemotePoolRemoved(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolRemotePoolRemoved, remoteChainSelector []uint64) (event.Subscription, error) + + ParseRemotePoolRemoved(log types.Log) (*BurnFromMintTokenPoolRemotePoolRemoved, error) + + FilterRouterUpdated(opts *bind.FilterOpts) (*BurnFromMintTokenPoolRouterUpdatedIterator, error) + + WatchRouterUpdated(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolRouterUpdated) (event.Subscription, error) + + ParseRouterUpdated(log types.Log) (*BurnFromMintTokenPoolRouterUpdated, error) + + FilterTokensConsumed(opts *bind.FilterOpts) (*BurnFromMintTokenPoolTokensConsumedIterator, error) + + WatchTokensConsumed(opts *bind.WatchOpts, sink chan<- *BurnFromMintTokenPoolTokensConsumed) (event.Subscription, error) + + ParseTokensConsumed(log types.Log) (*BurnFromMintTokenPoolTokensConsumed, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var BurnFromMintTokenPoolZKBin string = ("0x0004000000000002001f00000000000200000060031002700000066b0030019d0000066b033001970003000000310355000200000001035500000001002001900000005d0000c13d0000008004000039000000400040043f000000040030008c000000850000413d000000000201043b000000e0022002700000068b0020009c000000870000a13d0000068c0020009c000000c80000a13d0000068d0020009c000000f70000213d000006930020009c000001810000213d000006960020009c000005230000613d000006970020009c000000850000c13d0000000002000416000000000002004b000000850000c13d0000000504000039000000000204041a000000800020043f000000000040043f000000000002004b00000a110000c13d000000a002000039000000400020043f0000002004000039000000000500001900000005065002100000003f07600039000006d40770019700000000072700190000066f0070009c000001230000213d000000400070043f00000000005204350000001f0560018f000000a004400039000000000006004b0000003b0000613d000000000131034f00000000036400190000000006040019000000001701043c0000000006760436000000000036004b000000370000c13d000000000005004b000000800100043d000000000001004b0000004d0000613d00000000010000190000000003020433000000000013004b0000102b0000a13d00000005031002100000000005430019000000a00330003900000000030304330000066f0330019700000000003504350000000101100039000000800300043d000000000031004b000000400000413d000000400100043d00000020030000390000000005310436000000000302043300000000003504350000004002100039000000000003004b00000a080000613d000000000500001900000000460404340000066f0660019700000000026204360000000105500039000000000035004b000000560000413d00000a080000013d0000010004000039000000400040043f0000000002000416000000000002004b000000850000c13d0000001f023000390000066c022001970000010002200039000000400020043f0000001f0530018f0000066d0630019800000100026000390000006f0000613d000000000701034f000000007807043c0000000004840436000000000024004b0000006b0000c13d000000000005004b0000007c0000613d000000000161034f0000000304500210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000a00030008c000000850000413d000001000100043d0000066e0010009c000000850000213d000001200200043d001100000002001d000000ff0020008c000001100000a13d0000000001000019000019aa00010430000006a10020009c000000a20000213d000006ab0020009c000001290000a13d000006ac0020009c000001580000213d000006af0020009c000001fa0000613d000006b00020009c000000850000c13d0000000001000416000000000001004b000000850000c13d0000000001000412001900000001001d001800200000003d000080050100003900000044030000390000000004000415000000190440008a0000000504400210000006cb0200004119a819800000040f000000ff0110018f000000800010043f000006cc01000041000019a90001042e000006a20020009c0000013a0000a13d000006a30020009c000001630000213d000006a60020009c000002150000613d000006a70020009c000000850000c13d000000240030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000401100370000000000101043b0000066e0010009c000000850000213d0000000102000039000000000202041a0000066e022001970000000003000411000000000023004b000009e10000c13d0000000902000039000000000302041a0000067203300197000000000313019f000000000032041b000000800010043f00000000010004140000066b0010009c0000066b01008041000000c001100210000006e9011001c70000800d020000390000000103000039000006ea0400004100000a350000013d000006980020009c000001450000a13d000006990020009c0000016c0000213d0000069c0020009c000002980000613d0000069d0020009c000000850000c13d000000240030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000401100370000000000101043b001100000001001d0000066f0010009c000000850000213d19a815a50000040f0000001101000029000000000010043f0000000701000039000000200010043f0000004002000039000000000100001919a8196b0000040f001000000001001d000000400100043d001100000001001d19a814600000040f00000010050000290000000201500039000000000401041a000006d1004001980000000002000039000000010200c03900000011010000290000004003100039000000000023043500000080024002700000066b0220019700000020031000390000000000230435000006be02400197000000000021043500000003025000390000056e0000013d0000068e0020009c000001e10000213d000006910020009c000005380000613d000006920020009c000000850000c13d0000000001000416000000000001004b000000850000c13d0000000001000412001300000001001d001200600000003d000080050100003900000044030000390000000004000415000000130440008a0000000504400210000006cb0200004119a819800000040f000000000001004b0000000001000039000000010100c039000000800010043f000006cc01000041000019a90001042e000001400200043d0000066f0020009c000000850000213d0000001f04200039000000000034004b000000000500001900000670050080410000067004400197000000000004004b00000000060000190000067006004041000006700040009c000000000605c019000000000006004b000000850000c13d000001000420003900000000040404330000066f0040009c000009b50000a13d000006dc01000041000000000010043f0000004101000039000000040010043f000006bb01000041000019aa00010430000006b10020009c000003fb0000613d000006b20020009c000003410000613d000006b30020009c000000850000c13d0000000001000416000000000001004b000000850000c13d0000000001000412001d00000001001d001c00000000003d0000800501000039000000440300003900000000040004150000001d0440008a000005420000013d000006a80020009c0000040e0000613d000006a90020009c000003550000613d000006aa0020009c000000850000c13d0000000001000416000000000001004b000000850000c13d00000009010000390000033c0000013d0000069e0020009c000004d00000613d0000069f0020009c000003930000613d000006a00020009c000000850000c13d0000000001000416000000000001004b000000850000c13d0000000202000039000000000102041a000000800010043f000000000020043f0000002002000039000000000001004b000009e90000c13d000000a0010000390000000004020019000009f80000013d000006ad0020009c000002310000613d000006ae0020009c000000850000c13d0000000001000416000000000001004b000000850000c13d000000000103001919a8147d0000040f19a815150000040f0000028e0000013d000006a40020009c000002840000613d000006a50020009c000000850000c13d0000000001000416000000000001004b000000850000c13d00000001010000390000033c0000013d0000069a0020009c000003380000613d0000069b0020009c000000850000c13d000000240030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000401100370000000000101043b0000066f0010009c000000850000213d19a815ba0000040f0000002002000039000000400300043d001100000003001d000000000223043619a8146b0000040f00000011020000290000057b0000013d000006940020009c000005490000613d000006950020009c000000850000c13d000000e40030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000402100370000000000202043b001100000002001d0000066f0020009c000000850000213d000000e002000039000000400020043f0000002402100370000000000202043b000000000002004b0000000003000039000000010300c039000000000032004b000000850000c13d000000800020043f0000004402100370000000000202043b000006be0020009c000000850000213d000000a00020043f0000006402100370000000000202043b000006be0020009c000000850000213d000000c00020043f0000014002000039000000400020043f0000008402100370000000000202043b000000000002004b0000000003000039000000010300c039000000000032004b000000850000c13d000000e00020043f000000a402100370000000000202043b000006be0020009c000000850000213d000001000020043f000000c401100370000000000101043b000006be0010009c000000850000213d000001200010043f0000000901000039000000000101041a0000066e021001970000000001000411000000000021004b000001c20000613d0000000102000039000000000202041a0000066e02200197000000000021004b00000df00000c13d0000001101000029000000000010043f0000000601000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000000101041a000000000001004b000003880000613d000000c00100043d000006be01100197000000800200043d000000000002004b00000ed30000c13d000000000001004b000001dd0000c13d000000a00100043d000006be0010019800000ed90000613d000000400200043d001100000002001d000006c00100004100000f460000013d0000068f0020009c000005840000613d000006900020009c000000850000c13d000000240030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000401100370000000000601043b0000066e0060009c000000850000213d0000000101000039000000000101041a0000066e011001970000000005000411000000000015004b000009e10000c13d000000000056004b00000a390000c13d000006b601000041000000800010043f000006b701000041000019aa00010430000000240030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000401100370000000000101043b001100000001001d0000066e0010009c000000850000213d0000000001000412001b00000001001d001a00000000003d0000800501000039000000440300003900000000040004150000001b0440008a0000000504400210000006cb0200004119a819800000040f0000066e01100197000000110010006b00000000010000390000000101006039000000800010043f000006cc01000041000019a90001042e0000000001000416000000000001004b000000850000c13d000000000100041a0000066e021001970000000006000411000000000026004b000009e50000c13d0000000102000039000000000302041a0000067204300197000000000464019f000000000042041b0000067201100197000000000010041b00000000010004140000066e053001970000066b0010009c0000066b01008041000000c001100210000006b4011001c70000800d020000390000000303000039000006ec0400004119a8199e0000040f0000000100200190000000850000613d00000a480000013d000000240030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000402100370000000000202043b001100000002001d0000066f0020009c000000850000213d000000110230006a000006820020009c000000850000213d000001040020008c000000850000413d000000a002000039000000400020043f0000001102000029000f00840020003d0000000f01100360000000800000043f000000000101043b001000000001001d0000066e0010009c000000850000213d000006cb01000041000000000010044300000000010004120000000400100443000000240000044300000000010004140000066b0010009c0000066b01008041000000c001100210000006dd011001c7000080050200003919a819a30000040f0000000100200190000013d70000613d0000000202000367000000000101043b0000066e01100197000000100010006b00000a6b0000c13d0000000f01000029000e0060001000920000000e01200360000000000101043b0000066f0010009c000000850000213d000000400300043d000006df0200004100000000002304350000008001100210000006e001100197000f00000003001d00000004023000390000000000120435000006cb010000410000000000100443000000000100041200000004001004430000004001000039000000240010044300000000010004140000066b0010009c0000066b01008041000000c001100210000006dd011001c7000080050200003919a819a30000040f0000000100200190000013d70000613d000000000201043b00000000010004140000066e02200197000000040020008c00000be30000c13d0000000103000031000000200030008c0000002004000039000000000403401900000c0d0000013d000000240030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000401100370000000000101043b0000066f0010009c000000850000213d19a817b80000040f000000000001004b0000000001000039000000010100c039000000400200043d00000000001204350000066b0020009c0000066b020080410000004001200210000006e8011001c7000019a90001042e000000440030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000402100370000000000202043b001100000002001d0000066f0020009c000000850000213d0000002402100370000000000202043b0000066f0020009c000000850000213d0000002304200039000000000034004b000000850000813d000f00040020003d0000000f01100360000000000101043b001000000001001d0000066f0010009c000000850000213d0000002402200039000d00000002001d000e00100020002d0000000e0030006b000000850000213d0000000101000039000000000101041a0000066e011001970000000002000411000000000012004b000009e10000c13d0000001101000029000000000010043f0000000601000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000000101041a000000000001004b000003880000613d0000001101000029000000000010043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d00000010020000290000001f02200039000006fd02200197000b00000002001d0000003f02200039000006fd02200197000000000101043b000c00000001001d000000400100043d0000000002210019000000000012004b000000000400003900000001040040390000066f0020009c000001230000213d0000000100400190000001230000c13d000000400020043f000000100200002900000000022104360000000e05000029000000000050007c000000850000213d0000001004000029000006fd03400198000e001f00400193000a00000003001d00000000033200190000000f040000290000002004400039000f00000004001d0000000204400367000002ff0000613d000000000504034f0000000006020019000000005705043c0000000006760436000000000036004b000002fb0000c13d0000000e0000006b0000030d0000613d0000000a044003600000000e050000290000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000430435000000100320002900000000000304350000066b0020009c0000066b02008041000000400220021000000000010104330000066b0010009c0000066b010080410000006001100210000000000121019f00000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f000006b4011001c7000080100200003919a819a30000040f0000000100200190000000850000613d0000000c020000290000000503200039000000000201043b000000000103001919a817cc0000040f000000400700043d000000000001004b00000f500000c13d000c00000007001d000000240170003900000040020000390000000000210435000006da01000041000000000017043500000004017000390000001102000029000000000021043500000044037000390000000d01000029000000100200002919a815860000040f0000000c02000029000010450000013d0000000001000416000000000001004b000000850000c13d0000000401000039000000000101041a0000066e01100197000000800010043f000006cc01000041000019a90001042e0000000001000416000000000001004b000000850000c13d000000c001000039000000400010043f0000001b01000039000000800010043f000006f701000041000000a00010043f0000002001000039000000c00010043f0000008001000039000000e00200003919a8146b0000040f000000c00110008a0000066b0010009c0000066b010080410000006001100210000006f8011001c7000019a90001042e000000440030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000402100370000000000202043b001100000002001d0000066f0020009c000000850000213d0000002402100370000000000202043b0000066f0020009c000000850000213d0000002304200039000000000034004b000000850000813d0000000404200039000000000141034f000000000101043b001000000001001d0000066f0010009c000000850000213d0000002402200039000f00000002001d0000001001200029000000000031004b000000850000213d0000000101000039000000000101041a0000066e011001970000000002000411000000000012004b000009e10000c13d0000001101000029000000000010043f0000000601000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000000101041a000000000001004b00000b590000c13d000000400100043d000006ba0200004100000000002104350000000402100039000000110300002900000000003204350000066b0010009c0000066b010080410000004001100210000006bb011001c7000019aa00010430000000240030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000401100370000000000101043b0000066f0010009c000000850000213d000000000010043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b0000000501100039000000000301041a000000400200043d000f00000002001d001100000003001d0000000002320436000e00000002001d000000000010043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000000850000613d0000001105000029000000000005004b0000000e02000029000003c70000613d000000000101043b0000000e020000290000000003000019000000000401041a000000000242043600000001011000390000000103300039000000000053004b000003c10000413d0000000f0120006a0000001f01100039000006fd011001970000000f04100029000000000014004b000000000100003900000001010040390000066f0040009c000001230000213d0000000100100190000001230000c13d000000400040043f0000000f0100002900000000020104330000066f0020009c000001230000213d00000005012002100000003f03100039000006710330019700000000034300190000066f0030009c000001230000213d000000400030043f000d00000004001d0000000005240436000000000002004b000003e90000613d00000060020000390000000003000019000000000435001900000000002404350000002003300039000000000013004b000003e40000413d000c00000005001d0000000f010000290000000001010433000000000001004b00000b620000c13d000000400100043d000000200200003900000000032104360000000d0200002900000000020204330000000000230435000000400310003900000005042002100000000005340019000000000002004b00000bc60000c13d000000000215004900000a090000013d000000240030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000401100370000000000201043b000006f900200198000000850000c13d0000000101000039000006fa0020009c000005460000613d000006fb0020009c000005460000613d000006fc0020009c000000000100c019000000800010043f000006cc01000041000019a90001042e000000440030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000402100370000000000202043b0000066f0020009c000000850000213d0000002305200039000000000035004b000000850000813d0000000405200039000000000551034f000000000905043b0000066f0090009c000000850000213d0000002407200039000000050b90021000000000087b0019000000000038004b000000850000213d0000002402100370000000000202043b0000066f0020009c000000850000213d0000002305200039000000000035004b000000850000813d0000000405200039000000000551034f000000000605043b0000066f0060009c000000850000213d0000002402200039000000050a60021000000000052a0019000000000035004b000000850000213d0000000103000039000000000303041a0000066e03300197000000000c00041100000000003c004b000009e10000c13d0000003f03b000390000067103300197000006d30030009c000001230000213d0000008003300039000f00000003001d000000400030043f000000800090043f000000000009004b000004500000613d000000000371034f000000000303043b0000066e0030009c000000850000213d000000200440003900000000003404350000002007700039000000000087004b000004450000413d000000400300043d000f00000003001d0000003f03a0003900000671033001970000000f033000290000000f0030006c000000000400003900000001040040390000066f0030009c000001230000213d0000000100400190000001230000c13d000000400030043f0000000f030000290000000003630436000e00000003001d000000000006004b0000046a0000613d0000000f03000029000000000421034f000000000404043b0000066e0040009c000000850000213d000000200330003900000000004304350000002002200039000000000052004b000004610000413d000006cb010000410000000000100443000000000100041200000004001004430000006001000039000000240010044300000000010004140000066b0010009c0000066b01008041000000c001100210000006dd011001c7000080050200003919a819a30000040f0000000100200190000013d70000613d000000000101043b000000000001004b00000ade0000613d000000800100043d000000000001004b00000fc60000c13d0000000f010000290000000001010433000000000001004b00000a480000613d00000000030000190000048a0000013d00000001033000390000000f010000290000000001010433000000000013004b00000a480000813d00000005013002100000000e0110002900000000010104330000066e04100198000004850000613d000000000040043f0000000301000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c70000801002000039001000000003001d001100000004001d19a819a30000040f000000110400002900000010030000290000000100200190000000850000613d000000000101043b000000000101041a000000000001004b000004850000c13d0000000203000039000000000103041a0000066f0010009c000001230000213d0000000102100039000000000023041b000006790110009a000000000041041b000000000103041a000d00000001001d000000000040043f0000000301000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f00000011030000290000000100200190000000850000613d000000000101043b0000000d02000029000000000021041b000000400100043d00000000003104350000066b0010009c0000066b01008041000000400110021000000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f0000067a011001c70000800d0200003900000001030000390000067b0400004119a8199e0000040f00000010030000290000000100200190000004850000c13d000000850000013d000000240030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000402100370000000000202043b0000066f0020009c000000850000213d0000000003230049000006820030009c000000850000213d000000a40030008c000000850000413d000000c003000039000000400030043f0000006003000039000000800030043f000000a00030043f001000840020003d0000001001100360000000000101043b001100000001001d0000066e0010009c000000850000213d000006cb01000041000000000010044300000000010004120000000400100443000000240000044300000000010004140000066b0010009c0000066b01008041000000c001100210000006dd011001c7000080050200003919a819a30000040f0000000100200190000013d70000613d0000000202000367000000000101043b0000066e01100197000000110010006b00000a4a0000c13d0000001001000029000f0060001000920000000f01200360000000000101043b0000066f0010009c000000850000213d000000400300043d000006df0200004100000000002304350000008001100210000006e001100197001000000003001d00000004023000390000000000120435000006cb010000410000000000100443000000000100041200000004001004430000004001000039000000240010044300000000010004140000066b0010009c0000066b01008041000000c001100210000006dd011001c7000080050200003919a819a30000040f0000000100200190000013d70000613d000000000201043b00000000010004140000066e02200197000000040020008c00000ae10000c13d0000000103000031000000200030008c0000002004000039000000000403401900000b0b0000013d000000240030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000401100370000000000101043b0000066e0010009c000000850000213d0000000102000039000000000202041a0000066e022001970000000003000411000000000023004b000009e10000c13d000000000001004b00000a250000c13d000006ca01000041000000800010043f000006b701000041000019aa000104300000000001000416000000000001004b000000850000c13d0000000001000412001500000001001d001400400000003d000080050100003900000044030000390000000004000415000000150440008a0000000504400210000006cb0200004119a819800000040f0000066e01100197000000800010043f000006cc01000041000019a90001042e000000240030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000401100370000000000101043b001100000001001d0000066f0010009c000000850000213d19a815a50000040f0000001101000029000000000010043f0000000701000039000000200010043f0000004002000039000000000100001919a8196b0000040f001000000001001d000000400100043d001100000001001d19a814600000040f0000001005000029000000000405041a000006d1004001980000000002000039000000010200c03900000011010000290000004003100039000000000023043500000080024002700000066b0220019700000020031000390000000000230435000006be0240019700000000002104350000000102500039000000000402041a000000800210003900000080034002700000000000320435000006be034001970000006002100039000000000032043519a8176a0000040f000000400100043d001000000001001d000000110200002919a8149a0000040f000000100200002900000000012100490000066b0010009c0000066b0100804100000060011002100000066b0020009c0000066b020080410000004002200210000000000121019f000019a90001042e000000440030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000402100370000000000202043b0000066f0020009c000000850000213d0000002304200039000000000034004b000000850000813d0000000404200039000000000441034f000000000404043b000600000004001d0000066f0040009c000000850000213d000500240020003d000000060200002900000005022002100000000502200029000000000032004b000000850000213d0000002402100370000000000202043b000200000002001d0000066f0020009c000000850000213d00000002020000290000002302200039000000000032004b000000850000813d00000002020000290000000402200039000000000121034f000000000101043b000100000001001d0000066f0010009c000000850000213d0000000201000029000300240010003d000000010100002900000005011002100000000301100029000000000031004b000000850000213d0000000101000039000000000101041a0000066e011001970000000002000411000000000012004b000009e10000c13d000000060000006b00000c530000c13d000000010000006b00000a480000613d000500000000001d0000000501000029000000050110021000000003011000290000000202000367000000000112034f000000000101043b0000000003000031000000020430006a000001430440008a00000670054001970000067006100197000000000756013f000000000056004b00000000050000190000067005004041000000000041004b00000000040000190000067004008041000006700070009c000000000504c019000000000005004b000000850000c13d001000030010002d000000100130006a000f00000001001d000006820010009c000000850000213d0000000f01000029000001200010008c000000850000413d000000400100043d000900000001001d000006bc0010009c000001230000213d0000000901000029000000a001100039000000400010043f0000001001200360000000000101043b0000066f0010009c000000850000213d00000009040000290000000001140436000800000001001d00000010010000290000002001100039000000000112034f000000000101043b0000066f0010009c000000850000213d0000001001100029001100000001001d0000001f01100039000000000031004b0000000004000019000006700400804100000670011001970000067005300197000000000751013f000000000051004b00000000010000190000067001004041000006700070009c000000000104c019000000000001004b000000850000c13d0000001101200360000000000101043b0000066f0010009c000001230000213d00000005091002100000003f049000390000067104400197000000400600043d0000000004460019000e00000006001d000000000064004b000000000700003900000001070040390000066f0040009c000001230000213d0000000100700190000001230000c13d000000400040043f0000000e040000290000000000140435000000110100002900000020081000390000000009980019000000000039004b000000850000213d000000000098004b000006670000813d0000000e0a000029000006240000013d000000200aa000390000000001b7001900000000000104350000000000ca04350000002008800039000000000098004b000006670000813d000000000182034f000000000101043b0000066f0010009c000000850000213d000000110d1000290000003f01d00039000000000031004b000000000400001900000670040080410000067001100197000000000751013f000000000051004b00000000010000190000067001004041000006700070009c000000000104c019000000000001004b000000850000c13d000000200ed000390000000001e2034f000000000b01043b0000066f00b0009c000001230000213d0000001f01b00039000006fd011001970000003f01100039000006fd01100197000000400c00043d00000000011c00190000000000c1004b000000000400003900000001040040390000066f0010009c000001230000213d0000000100400190000001230000c13d0000004004d00039000000400010043f0000000007bc043600000000014b0019000000000031004b000000850000213d0000002001e00039000000000412034f000006fd01b00198000000000e170019000006590000613d000000000f04034f000000000d07001900000000f60f043c000000000d6d04360000000000ed004b000006550000c13d0000001f0db001900000061d0000613d000000000114034f0000000304d0021000000000060e043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f00000000001e04350000061d0000013d00000008010000290000000e04000029000000000041043500000010010000290000004006100039000000000162034f000000000101043b0000066f0010009c000000850000213d00000010071000290000001f01700039000000000031004b000000000400001900000670040080410000067001100197000000000851013f000000000051004b00000000010000190000067001004041000006700080009c000000000104c019000000000001004b000000850000c13d000000000172034f000000000401043b0000066f0040009c000001230000213d0000001f01400039000006fd011001970000003f01100039000006fd01100197000000400500043d0000000001150019000000000051004b000000000800003900000001080040390000066f0010009c000001230000213d0000000100800190000001230000c13d0000002008700039000000400010043f00000000074504360000000001840019000000000031004b000000850000213d000000000882034f000006fd0140019800000000031700190000069f0000613d000000000908034f000000000a070019000000009b09043c000000000aba043600000000003a004b0000069b0000c13d0000001f09400190000006ac0000613d000000000118034f0000000308900210000000000903043300000000098901cf000000000989022f000000000101043b0000010008800089000000000181022f00000000018101cf000000000191019f00000000001304350000000001470019000000000001043500000009010000290000004001100039000600000001001d00000000005104350000000f01000029000000600110008a000006820010009c000000850000213d000000600010008c000000850000413d000000400300043d000006bd0030009c000001230000213d0000006001300039000000400010043f0000002001600039000000000412034f000000000404043b000000000004004b0000000005000039000000010500c039000000000054004b000000850000c13d00000000044304360000002001100039000000000512034f000000000505043b000006be0050009c000000850000213d00000000005404350000002004100039000000000142034f000000000101043b000006be0010009c000000850000213d0000004005300039000000000015043500000009010000290000006001100039000700000001001d00000000003104350000000f01000029000000c00110008a000006820010009c000000850000213d000000600010008c000000850000413d000000400100043d000006bd0010009c000001230000213d0000006003100039000000400030043f0000002003400039000000000432034f000000000404043b000000000004004b0000000005000039000000010500c039000000000054004b000000850000c13d00000000044104360000002003300039000000000532034f000000000505043b000006be0050009c000000850000213d00000000005404350000002003300039000000000232034f000000000302043b000006be0030009c000000850000213d0000004002100039000000000032043500000009030000290000008003300039000400000003001d00000000001304350000000703000029000000000303043300000040053000390000000005050433000006be065001970000000057030434000000000007004b0000070b0000613d000000000006004b0000126e0000613d0000000005050433000006be05500197000000000056004b000007100000413d0000126e0000013d000000000006004b0000125a0000c13d0000000005050433000006be005001980000125a0000c13d0000000002020433000006be022001970000000003010433000000000003004b0000071c0000613d000000000002004b000012750000613d0000000003040433000006be03300197000000000032004b000007210000413d000012750000013d000000000002004b0000125e0000c13d0000000002040433000006be002001980000125e0000c13d000000060100002900000000010104330000000001010433000000000001004b00000a7a0000613d000000090100002900000000010104330000066f01100197001100000001001d000000000010043f0000000601000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000000101041a000000000001004b0000123f0000c13d0000000501000039000000000101041a0000066f0010009c000001230000213d00000001021000390000000503000039000000000023041b000006c20110009a0000001102000029000000000021041b000000000103041a001000000001001d000000000020043f0000000601000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b0000001002000029000000000021041b000000090100002900000000010104330000066f01100197000000000010043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000301043b000000070100002900000000010104330000000024010434001100000004001d000000000004004b0000000004000039000000010400c039001000000004001d000000400400043d000006bc0040009c000001230000213d000f00000003001d0000000002020433000006be0220019700000040011000390000000001010433000b00000001001d000000a001400039000000400010043f000e00000002001d000d00000004001d0000000001240436000c00000001001d000006c301000041000000000010044300000000010004140000066b0010009c0000066b01008041000000c001100210000006c4011001c70000800b0200003919a819a30000040f0000000100200190000013d70000613d0000000b02000029000006be02200197000000000101043b0000000d040000290000004003400039000000100500002900000000005304350000008003400039000000000023043500000060034000390000000e0500002900000000005304350000066b011001970000000c030000290000000000130435000000110000006b0000000003000019000006c50300c0410000000f09000029000000000409041a000006c604400197000000000343019f0000008002200210000000000425019f000000000353019f0000008002100210000000000323019f000000000039041b0000000103900039000000000043041b000000400300043d000006bc0030009c000001230000213d0000000404000029000000000404043300000020054000390000000005050433000000000604043300000040044000390000000004040433000000a007300039000000400070043f0000008007300039000006be0840019700000000008704350000004007300039000000000006004b0000000006000039000000010600c039000000000067043500000020063000390000000000160435000006be015001970000006005300039000000000015043500000000001304350000000003000019000006c50300c0410000000205900039000000000605041a000006c606600197000000000363019f000000000223019f000000000212019f000000000025041b0000008002400210000000000112019f0000000302900039000000000012041b0000000601000029000000000301043300000000540304340000066f0040009c000001230000213d0000000406900039000000000106041a000000010010019000000001071002700000007f0770618f0000001f0070008c00000000020000390000000102002039000000000121013f000000010010019000000df50000c13d000000200070008c001100000006001d001000000004001d000e00000003001d000008000000413d000d00000007001d000f00000005001d000000000060043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000000850000613d00000010040000290000001f024000390000000502200270000000200040008c0000000002004019000000000301043b0000000d010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b00000011060000290000000f05000029000008000000813d000000000002041b0000000102200039000000000012004b000007fc0000413d0000001f0040008c0000081f0000a13d000000000060043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000000850000613d0000001007000029000006fd02700198000000000101043b0000000e080000290000082b0000613d000000010320008a0000000503300270000000000331001900000001043000390000002003000039000000110600002900000000058300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000008170000c13d0000082d0000013d000000000004004b000008230000613d0000000001050433000008240000013d00000000010000190000000302400210000006fe0220027f000006fe02200167000000000121016f0000000102400210000000000121019f000008390000013d00000020030000390000001106000029000000000072004b000008370000813d0000000302700210000000f80220018f000006fe0220027f000006fe0220016700000000038300190000000003030433000000000223016f000000000021041b000000010170021000000001011001bf000000000016041b000000080100002900000000010104330000000002010433000000000002004b0000095c0000613d0000000003000019000c00000003001d0000000502300210000000000121001900000020011000390000000001010433001000000001001d0000000031010434000000000001004b00000a7a0000613d00000009020000290000000002020433001100000002001d0000066b0010009c0000066b0100804100000060011002100000066b0030009c000f00000003001d0000066b0200004100000000020340190000004002200210000000000121019f00000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f000006b4011001c7000080100200003919a819a30000040f0000000100200190000000850000613d00000011020000290000066f02200197000000000101043b001100000001001d000b00000002001d000000000020043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000201043b0000001101000029000000000010043f000e00000002001d0000000601200039000d00000001001d000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000000101041a000000000001004b000010370000c13d0000000e010000290000000502100039000000000102041a0000066f0010009c000001230000213d000a00000001001d0000000101100039000000000012041b000e00000002001d000000000020043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f00000001002001900000001102000029000000850000613d000000000101043b0000000a01100029000000000021041b0000000e01000029000000000101041a000e00000001001d000000000020043f0000000d01000029000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f00000001002001900000001102000029000000850000613d000000000101043b0000000e03000029000000000031041b000000000020043f0000000801000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000401043b000000100100002900000000050104330000066f0050009c000001230000213d000000000104041a000000010010019000000001031002700000007f0330618f0000001f0030008c00000000020000390000000102002039000000000121013f00000001001001900000000f0700002900000df50000c13d000000200030008c001100000004001d000e00000005001d000008ec0000413d000d00000003001d000000000040043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000000850000613d0000000e050000290000001f025000390000000502200270000000200050008c0000000002004019000000000301043b0000000d010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b0000000f070000290000001104000029000008ec0000813d000000000002041b0000000102200039000000000012004b000008e80000413d0000001f0050008c000009180000a13d000000000040043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000000850000613d0000000e08000029000006fd02800198000000000101043b000009560000613d000000010320008a00000005033002700000000003310019000000010430003900000020030000390000000f07000029000000100600002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000009030000c13d000000000082004b000009140000813d0000000302800210000000f80220018f000006fe0220027f000006fe0220016700000000036300190000000003030433000000000223016f000000000021041b000000010180021000000001011001bf0000001104000029000009240000013d000000000005004b0000091c0000613d00000000010704330000091d0000013d000000000100001900000010060000290000000302500210000006fe0220027f000006fe02200167000000000121016f0000000102500210000000000121019f000000000014041b000000400100043d00000020020000390000000003210436000000000206043300000000002304350000004003100039000000000002004b000009350000613d000000000400001900000000053400190000000006740019000000000606043300000000006504350000002004400039000000000024004b0000092e0000413d0000001f04200039000006fd044001970000000002320019000000000002043500000040024000390000066b0020009c0000066b0200804100000060022002100000066b0010009c0000066b010080410000004001100210000000000112019f00000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f000006b4011001c70000800d020000390000000203000039000006c8040000410000000b0500002919a8199e0000040f0000000100200190000000850000613d0000000c030000290000000103300039000000080100002900000000010104330000000002010433000000000023004b000008400000413d0000095c0000013d00000020030000390000000f070000290000001006000029000000000082004b0000090c0000413d000009140000013d00000004010000290000000002010433000000070100002900000000050104330000000601000029000000000301043300000009010000290000000004010433000000400100043d0000002006100039000001000700003900000000007604350000066f0440019700000000004104350000010007100039000000006403043400000000004704350000012003100039000000000004004b000009780000613d000000000700001900000000083700190000000009760019000000000909043300000000009804350000002007700039000000000047004b000009710000413d000000000643001900000000000604350000000076050434000000000006004b0000000006000039000000010600c039000000400810003900000000006804350000000006070433000006be066001970000006007100039000000000067043500000040055000390000000005050433000006be05500197000000800610003900000000005604350000000065020434000000000005004b0000000005000039000000010500c039000000a00710003900000000005704350000000005060433000006be05500197000000c006100039000000000056043500000040022000390000000002020433000006be02200197000000e00510003900000000002504350000001f02400039000006fd02200197000000000212004900000000023200190000066b0020009c0000066b0200804100000060022002100000066b0010009c0000066b010080410000004001100210000000000112019f00000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f000006b4011001c70000800d020000390000000103000039000006c90400004119a8199e0000040f0000000100200190000000850000613d00000005020000290000000102200039000500000002001d000000010020006c000005be0000413d00000a480000013d00000005054002100000003f065000390000067106600197000000400700043d0000000006670019000f00000007001d000000000076004b000000000700003900000001070040390000066f0060009c000001230000213d0000000100700190000001230000c13d0000010007300039000000400060043f0000000f030000290000000003430436000e00000003001d00000120022000390000000003250019000000000073004b000000850000213d000000000004004b000009d40000613d0000000e0400002900000000250204340000066e0050009c000000850000213d0000000004540436000000000032004b000009ce0000413d000001600500043d0000066e0050009c000000850000213d000001800200043d001000000002001d0000066e0020009c000000850000213d0000000003000411000000000003004b00000a4c0000c13d000000400100043d0000068a0200004100000a7c0000013d000006ed01000041000000800010043f000006b701000041000019aa00010430000006eb01000041000000800010043f000006b701000041000019aa00010430000000a005000039000006db0300004100000000040000190000000006050019000000000503041a000000000556043600000001033000390000000104400039000000000014004b000009ec0000413d000000410160008a000006fd04100197000006d30040009c000001230000213d0000008001400039000000400010043f0000000000210435000000a002400039000000800300043d0000000000320435000000c002400039000000000003004b00000a080000613d000000a004000039000000000500001900000000460404340000066e0660019700000000026204360000000105500039000000000035004b00000a020000413d00000000021200490000066b0020009c0000066b0200804100000060022002100000066b0010009c0000066b010080410000004001100210000000000112019f000019a90001042e000000a006000039000006d20400004100000000050000190000000007060019000000000604041a000000000667043600000001044000390000000105500039000000000025004b00000a140000413d000000410270008a000006fd04200197000006d30040009c000001230000213d0000008002400039000000800500043d000000400020043f0000066f0050009c000000280000a13d000001230000013d0000000402000039000000000302041a0000067204300197000000000414019f000000000042041b0000066e02300197000000800020043f000000a00010043f00000000010004140000066b0010009c0000066b01008041000000c001100210000006d5011001c70000800d020000390000000103000039000006d60400004119a8199e0000040f0000000100200190000000850000613d00000a480000013d000000000100041a0000067201100197000000000161019f000000000010041b00000000010004140000066b0010009c0000066b01008041000000c001100210000006b4011001c70000800d020000390000000303000039000006b50400004119a8199e0000040f0000000100200190000000850000613d0000000001000019000019a90001042e000000100100002900000a6c0000013d0000000106000039000000000406041a0000067204400197000000000334019f000000000036041b000000000005004b00000a7a0000613d0000066e0210019800000a7a0000613d000000100000006b00000a7a0000613d000b00000006001d000000800020043f000000c00050043f0000067301000041000000400300043d000d00000003001d00000000001304350000000001000414000000040020008c000c00000002001d00000a820000c13d00000000010004150000001f0110008a00000005011002100000000103000031000000200030008c00000020040000390000000004034019001f00000000003d00000ab00000013d0000000f01000029000000000112034f000000000101043b0000066e0010009c000000850000213d000000400200043d000006de030000410000000000320435000000040320003900000000001304350000066b0020009c0000066b020080410000004001200210000006bb011001c7000019aa00010430000000400100043d000006ca0200004100000000002104350000066b0010009c0000066b01008041000000400110021000000674011001c7000019aa000104300000000d030000290000066b0030009c0000066b0300804100000040033002100000066b0010009c0000066b01008041000000c001100210000000000131019f00000674011001c719a819a30000040f00000060031002700000066b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000d0570002900000a9b0000613d000000000801034f0000000d09000029000000008a08043c0000000009a90436000000000059004b00000a970000c13d000000000006004b00000aa80000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f000300000001035500000000010004150000001e0110008a0000000501100210001e00000000003d000000010020019000000ac70000613d0000001f02400039000000600420018f0000000d02400029000000000042004b000000000400003900000001040040390000066f0020009c000001230000213d0000000100400190000001230000c13d000000400020043f000000200030008c000000850000413d0000000d030000290000000003030433000000ff0030008c000000850000213d0000000501100270000000000103001f0000001101000029000000ff0110018f000000000031004b00000dfd0000c13d0000001101000029000000a00010043f0000000402000039000000000102041a000006720110019700000010011001af000000000012041b0000000f010000290000000001010433000000000001004b0000000001000039000000010100c039000000e00010043f00000e0c0000613d000000400100043d000006770010009c000001230000213d0000002002100039000000400020043f0000000000010435000000e00100043d000000000001004b00000e080000c13d000000400100043d000006f00200004100000a7c0000013d00000010030000290000066b0030009c0000066b0300804100000040033002100000066b0010009c0000066b01008041000000c001100210000000000131019f000006bb011001c719a819a30000040f00000060031002700000066b03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000100570002900000afa0000613d000000000801034f0000001009000029000000008a08043c0000000009a90436000000000059004b00000af60000c13d000000000006004b00000b070000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000c470000613d0000001f01400039000000600210018f0000001001200029000000000021004b000000000200003900000001020040390000066f0010009c000001230000213d0000000100200190000001230000c13d000000400010043f000000200030008c000000850000413d00000010020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b000000850000c13d000000000002004b00000dfb0000c13d0000000f0100002900000020011000390000000201100367000000000101043b001000000001001d0000066e0010009c000000850000213d000006cb010000410000000000100443000000000100041200000004001004430000006001000039000000240010044300000000010004140000066b0010009c0000066b01008041000000c001100210000006dd011001c7000080050200003919a819a30000040f0000000100200190000013d70000613d000000000101043b000000000001004b0000104e0000c13d0000000f010000290000000201100367000000000101043b001000000001001d0000066f0010009c000000850000213d0000001001000029000000000010043f0000000601000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000400200043d000e00000002001d0000000402200039000000000101043b000000000101041a000000000001004b0000111f0000c13d000006e7010000410000000e030000290000000000130435000000100100002900000c410000013d00000000030000310000000f01000029000000100200002919a814dd0000040f0000000002010019000000110100002919a8162c0000040f0000000001000019000019a90001042e0000000002000019001100000002001d0000000502200210001000000002001d0000000e012000290000000001010433000000000010043f0000000801000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000000201041a000000010320019000000001052002700000007f0550618f0000001f0050008c00000000040000390000000104002039000000000043004b00000df50000c13d000000400700043d0000000004570436000000000003004b00000ba00000613d000900000004001d000a00000005001d000b00000007001d000000000010043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000000850000613d0000000a08000029000000000008004b000000200500008a00000ba80000613d000000000201043b00000000010000190000000d060000290000000b0700002900000009090000290000000003190019000000000402041a000000000043043500000001022000390000002001100039000000000081004b00000b980000413d00000bab0000013d000006ff012001970000000000140435000000000005004b00000020010000390000000001006039000000200500008a0000000d0600002900000bab0000013d00000000010000190000000d060000290000000b070000290000003f01100039000000000251016f0000000001720019000000000021004b000000000200003900000001020040390000066f0010009c000001230000213d0000000100200190000001230000c13d000000400010043f00000000010604330000001102000029000000000021004b0000102b0000a13d00000010030000290000000c0130002900000000007104350000000001060433000000000021004b0000102b0000a13d00000001022000390000000f010000290000000001010433000000000012004b00000b630000413d000003ee0000013d00000000040000190000000d0c00002900000bd10000013d0000001f07600039000006fd077001970000000006650019000000000006043500000000057500190000000104400039000000000024004b000003f90000813d0000000006150049000000400660008a0000000003630436000000200cc0003900000000060c043300000000760604340000000005650436000000000006004b00000bc90000613d00000000080000190000000009580019000000000a870019000000000a0a04330000000000a904350000002008800039000000000068004b00000bdb0000413d00000bc90000013d0000000f030000290000066b0030009c0000066b0300804100000040033002100000066b0010009c0000066b01008041000000c001100210000000000131019f000006bb011001c719a819a30000040f00000060031002700000066b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000f0570002900000bfc0000613d000000000801034f0000000f09000029000000008a08043c0000000009a90436000000000059004b00000bf80000c13d000000000006004b00000c090000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000de40000613d0000001f01400039000000600210018f0000000f01200029000000000021004b000000000200003900000001020040390000066f0010009c000001230000213d0000000100200190000001230000c13d000000400010043f000000200030008c000000850000413d0000000f020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b000000850000c13d000000000002004b00000dfb0000c13d0000000e010000290000000201100367000000000101043b000f00000001001d0000066f0010009c000000850000213d0000000f01000029000000000010043f0000000601000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000400200043d000d00000002001d0000000402200039000000000101043b000000000101041a000000000001004b000010b80000c13d000006e7010000410000000d0300002900000000001304350000000f0100002900000000001204350000066b0030009c0000066b030080410000004001300210000006bb011001c7000019aa000104300000001f0530018f0000066d06300198000000400200043d000000000462001900000ec00000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000c4e0000c13d00000ec00000013d0000000002000019000700000002001d000000050120021000000005011000290000000201100367000000000101043b000b00000001001d0000066f0010009c000000850000213d0000000b01000029000000000010043f0000000601000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000000301041a000000000003004b000010d40000613d0000000501000039000000000201041a000000000002004b000013e40000613d000000010130008a000000000023004b00000c8f0000613d000000000012004b0000102b0000a13d000006b80130009a000006b80220009a000000000202041a000000000021041b000000000020043f0000000601000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c70000801002000039001100000003001d19a819a30000040f0000000100200190000000850000613d000000000101043b0000001102000029000000000021041b0000000501000039000000000301041a000000000003004b000010310000613d000000010130008a000006b80230009a000000000002041b0000000502000039000000000012041b0000000b01000029000000000010043f0000000601000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000000001041b0000000b01000029000000000010043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b0000000501100039000000000301041a000000400200043d000f00000002001d001100000003001d0000000002320436000a00000002001d000000000010043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000000850000613d0000001105000029000000000005004b0000000a0200002900000cce0000613d000000000101043b0000000a020000290000000003000019000000000401041a000000000242043600000001011000390000000103300039000000000053004b00000cc80000413d0000000f0120006a0000001f01100039000006fd021001970000000f01200029000000000021004b000000000200003900000001020040390000066f0010009c000001230000213d0000000100200190000001230000c13d000000400010043f0000000f010000290000000001010433000000000001004b00000d730000613d000000000200001900000ce80000013d000000000101043b000000000001041b000000110200002900000001022000390000000f010000290000000001010433000000000012004b00000d730000813d001100000002001d0000000b01000029000000000010043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000301043b0000000f0100002900000000010104330000001102000029000000000021004b0000102b0000a13d00000005012002100000000a011000290000000001010433000c00000001001d000000000010043f000d00000003001d0000000601300039000e00000001001d000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000000101041a000000000001004b00000ce20000613d0000000d020000290000000503200039000000000203041a000000000002004b000013e40000613d000000000021004b001000000001001d000d00000003001d00000d540000613d000900000002001d000000000030043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000000850000613d00000010020000290008000100200092000000000101043b0000000d04000029000000000204041a000000080020006c0000102b0000a13d0000000902000029000000010220008a0000000001120019000000000101041a000900000001001d000000000040043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b00000008011000290000000902000029000000000021041b000000000020043f0000000e01000029000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b0000001002000029000000000021041b0000000d03000029000000000103041a001000000001001d000000000001004b000010310000613d000000000030043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000000850000613d0000001002000029000000010220008a000000000101043b0000000001210019000000000001041b0000000d01000029000000000021041b0000000c01000029000000000010043f0000000e01000029000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f000000010020019000000ce00000c13d000000850000013d0000000b01000029000000000010043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000301043b000000000003041b0000000101300039000000000001041b0000000201300039000000000001041b0000000301300039000000000001041b0000000404300039000000000104041a000000010010019000000001051002700000007f0550618f0000001f0050008c00000000020000390000000102002039000000000121013f000000010010019000000df50000c13d000000000005004b00000db50000613d0000001f0050008c00000db40000a13d000f00000005001d001100000003001d001000000004001d000000000040043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b0000000f020000290000001f02200039000000050220027000000000022100190000000103100039000000000023004b00000db00000813d000000000003041b0000000103300039000000000023004b00000dac0000413d0000001002000029000000000002041b00000000040100190000001103000029000000000004041b0000000501300039000000000201041a000000000001041b000000000002004b00000dcd0000613d001100000002001d000000000010043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b0000001102100029000000000021004b00000dcd0000813d000000000001041b0000000101100039000000000021004b00000dc90000413d000000400100043d0000000b0200002900000000002104350000066b0010009c0000066b01008041000000400110021000000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f0000067a011001c70000800d020000390000000103000039000006b90400004119a8199e0000040f0000000100200190000000850000613d00000007020000290000000102200039000000060020006c00000c540000413d000005bb0000013d0000001f0530018f0000066d06300198000000400200043d000000000462001900000ec00000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000deb0000c13d00000ec00000013d000006cd02000041000001400020043f000001440010043f000006ce01000041000019aa00010430000006dc01000041000000000010043f0000002201000039000000040010043f000006bb01000041000019aa00010430000006e10200004100000a7c0000013d0000002404200039000000000034043500000675030000410000000000320435000000040320003900000000001304350000066b0020009c0000066b02008041000000400120021000000676011001c7000019aa000104300000000f010000290000000001010433000000000001004b00000ef70000c13d000000400300043d0000067c010000410000000000130435000000240130003900000000020004100000000000210435001100000003001d0000000401300039000000000021043500000000010004140000000c02000029000000040020008c00000e1e0000c13d0000000103000031000000200030008c0000002004000039000000000403401900000e490000013d00000011020000290000066b0020009c0000066b0200804100000040022002100000066b0010009c0000066b01008041000000c001100210000000000121019f00000676011001c70000000c0200002919a819a30000040f00000060031002700000066b03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000110570002900000e380000613d000000000801034f0000001109000029000000008a08043c0000000009a90436000000000059004b00000e340000c13d000000000006004b00000e450000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000eb50000613d0000001f01400039000000600210018f0000001101200029000000000021004b000000000200003900000001020040390000066f0010009c000001230000213d0000000100200190000001230000c13d000000400010043f000000200040008c000000850000413d00000011020000290000000002020433000000000002004b000013e40000c13d0000004402100039000000010400008a000000000042043500000020021000390000067d040000410000000000420435000000240410003900000000050004100000000000540435000000440400003900000000004104350000067e0010009c000001230000213d000000c004100039000000400040043f000000a0051000390000067f04000041001000000005001d000000000045043500000080051000390000002004000039000f00000005001d0000000000450435000000000401043300000000010004140000000c05000029000000040050008c00000e880000613d0000066b0020009c0000066b0200804100000040022002100000066b0040009c0000066b040080410000006003400210000000000223019f0000066b0010009c0000066b01008041000000c001100210000000000112019f0000000c0200002919a8199e0000040f000b000100200193000300000001035500000060011002700001066b0010019d0000066b03100197000000000003004b000010650000c13d001100600000003d000e00800000003d000000110100002900000000010104330000000b0000006b000010990000c13d000000000001004b000010cb0000c13d000000400100043d000006850200004100000000002104350000000402100039000000200300003900000000003204350000000f020000290000000002020433000000240310003900000000002304350000004403100039000000000002004b000000100700002900000ea80000613d000000000400001900000000053400190000000006740019000000000606043300000000006504350000002004400039000000000024004b00000ea10000413d0000001f04200039000006fd044001970000000002320019000000000002043500000044024000390000066b0020009c0000066b0200804100000060022002100000066b0010009c0000066b010080410000004001100210000000000112019f000019aa000104300000001f0530018f0000066d06300198000000400200043d000000000462001900000ec00000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000ebc0000c13d000000000005004b00000ecd0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f000000000014043500000060013002100000066b0020009c0000066b020080410000004002200210000000000112019f000019aa00010430000000000001004b00000f430000613d000000a00200043d000006be02200197000000000021004b00000f430000813d0000001101000029000000000010043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000800200003919a818580000040f000001200100043d000006be01100197000000e00200043d000000000002004b00000f840000c13d000000000001004b00000ef30000c13d000001000100043d000006be0010019800000f8a0000613d000000400200043d001100000002001d000006c001000041000010950000013d000000000200001900000eff0000013d000000110200002900000001022000390000000f010000290000000001010433000000000012004b00000e0c0000813d001100000002001d00000005012002100000000e0110002900000000010104330000066e0310019800000ef90000613d000000000030043f0000000301000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c70000801002000039001000000003001d19a819a30000040f00000010040000290000000100200190000000850000613d000000000101043b000000000101041a000000000001004b00000ef90000c13d0000000203000039000000000103041a0000066f0010009c000001230000213d0000000102100039000000000023041b000006790110009a000000000041041b000000000103041a000d00000001001d000000000040043f0000000301000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f00000010030000290000000100200190000000850000613d000000000101043b0000000d02000029000000000021041b000000400100043d00000000003104350000066b0010009c0000066b01008041000000400110021000000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f0000067a011001c70000800d0200003900000001030000390000067b0400004119a8199e0000040f000000010020019000000ef90000c13d000000850000013d000000400200043d001100000002001d000006bf0100004100000000001204350000000402200039000000800100003919a816150000040f00000011010000290000066b0010009c0000066b01008041000000400110021000000689011001c7000019aa000104300000002001700039000000100200002900000000002104350000002001000039000000000017043500000040017000390000000a021000290000000f0300002900000002033003670000000a0000006b00000f610000613d000000000403034f0000000005010019000000004604043c0000000005650436000000000025004b00000f5d0000c13d0000000e0000006b00000f6f0000613d0000000a033003600000000e040000290000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000320435000000100110002900000000000104350000066b0070009c0000066b0700804100000040017002100000000b02000029000006d70020009c000006d7020080410000006002200210000000000112019f00000000020004140000066b0020009c0000066b02008041000000c002200210000000000121019f000006d80110009a0000800d020000390000000203000039000006d904000041000000110500002900000a350000013d000000000001004b000010920000613d000001000200043d000006be02200197000000000021004b000010920000813d0000001101000029000000000010043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b0000000201100039000000e00200003919a818580000040f000000400100043d00000011020000290000000002210436000000800300043d000000000003004b0000000003000039000000010300c0390000000000320435000000a00200043d000006be0220019700000040031000390000000000230435000000c00200043d000006be0220019700000060031000390000000000230435000000e00200043d000000000002004b0000000002000039000000010200c03900000080031000390000000000230435000001000200043d000006be02200197000000a0031000390000000000230435000001200200043d000006be02200197000000c00310003900000000002304350000066b0010009c0000066b01008041000000400110021000000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f000006cf011001c70000800d020000390000000103000039000006d00400004100000a350000013d000000000200001900000fcd0000013d00000010020000290000000102200039000000800100043d000000000012004b0000047f0000813d001000000002001d0000000501200210000000a00110003900000000010104330000066e01100197001100000001001d000000000010043f0000000301000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000000301041a000000000003004b00000fc80000613d0000000201000039000000000201041a000000000002004b000013e40000613d000000010130008a000000000023004b000010050000613d000000000012004b0000102b0000a13d000006ee0130009a000006ee0220009a000000000202041a000000000021041b000000000020043f0000000301000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c70000801002000039000d00000003001d19a819a30000040f0000000d030000290000000100200190000000850000613d000000000101043b000000000031041b0000000201000039000000000301041a000000000003004b000010310000613d000000010130008a000006ee0230009a000000000002041b0000000202000039000000000012041b0000001101000029000000000010043f0000000301000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000000001041b000000400100043d000000110200002900000000002104350000066b0010009c0000066b01008041000000400110021000000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f0000067a011001c70000800d020000390000000103000039000006ef0400004119a8199e0000040f000000010020019000000fc80000c13d000000850000013d000006dc01000041000000000010043f0000003201000039000000040010043f000006bb01000041000019aa00010430000006dc01000041000000000010043f0000003101000039000000040010043f000006bb01000041000019aa00010430000000400300043d001100000003001d000000240130003900000040020000390000000000210435000006c701000041000000000013043500000004013000390000000b0200002900000000002104350000004402300039000000100100002919a8146b0000040f000000110200002900000000012100490000066b0010009c0000066b010080410000066b0020009c0000066b0200804100000060011002100000004002200210000000000121019f000019aa000104300000001001000029000000000010043f0000000301000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000000101041a000000000001004b00000b3a0000c13d000000400100043d000006e2020000410000000000210435000000040210003900000010030000290000038d0000013d0000066f0030009c000001230000213d0000001f02300039000006fd022001970000003f02200039000006fd02200197000000400400043d0000000002240019001100000004001d000000000042004b000000000400003900000001040040390000066f0020009c000001230000213d0000000100400190000001230000c13d000000400020043f00000011020000290000000004320436000006fd023001980000001f0330018f000e00000004001d00000000012400190000000304000367000010840000613d000000000504034f0000000e06000029000000005705043c0000000006760436000000000016004b000010800000c13d000000000003004b00000e8c0000613d000000000224034f0000000303300210000000000401043300000000043401cf000000000434022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000242019f000000000021043500000e8c0000013d000000400200043d001100000002001d000006bf0100004100000000001204350000000402200039000000e00100003900000f490000013d000000000001004b0000121e0000c13d000006800100004100000000001004430000000c01000029000000040010044300000000010004140000066b0010009c0000066b01008041000000c00110021000000681011001c7000080020200003919a819a30000040f0000000100200190000013d70000613d000000000101043b000000000001004b0000121a0000c13d000000400100043d00000044021000390000068803000041000000000032043500000024021000390000001d0300003900000000003204350000068502000041000000000021043500000004021000390000002003000039000000000032043500000f4b0000013d0000000401000039000000000301041a000006f1010000410000000d0400002900000000001404350000000f01000029000000000012043500000024014000390000000002000411000000000021043500000000010004140000066e02300197000000040020008c000010da0000c13d0000000103000031000000200030008c00000020040000390000000004034019000011040000013d0000000e020000290000066b0020009c0000066b0200804100000040022002100000066b0010009c0000066b010080410000006001100210000000000121019f000019aa00010430000000400100043d000006ba02000041000000000021043500000004021000390000000b030000290000038d0000013d0000000d030000290000066b0030009c0000066b0300804100000040033002100000066b0010009c0000066b01008041000000c001100210000000000131019f00000676011001c719a819a30000040f00000060031002700000066b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000d05700029000010f30000613d000000000801034f0000000d09000029000000008a08043c0000000009a90436000000000059004b000010ef0000c13d000000000006004b000011000000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f000300000001035500000001002001900000112f0000613d0000001f01400039000000600210018f0000000d01200029000000000021004b000000000200003900000001020040390000066f0010009c000001230000213d0000000100200190000001230000c13d000000400010043f000000200030008c000000850000413d0000000d020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b000000850000c13d000000000002004b0000127b0000c13d000006e4020000410000000000210435000000040210003900000000030004110000038d0000013d0000000401000039000000000301041a000006e3010000410000000e0400002900000000001404350000001001000029000000000012043500000000010004140000066e02300197000000040020008c0000113b0000c13d0000000103000031000000200030008c00000020040000390000000004034019000011650000013d0000001f0530018f0000066d06300198000000400200043d000000000462001900000ec00000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000011360000c13d00000ec00000013d0000000e030000290000066b0030009c0000066b0300804100000040033002100000066b0010009c0000066b01008041000000c001100210000000000131019f000006bb011001c719a819a30000040f00000060031002700000066b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000e05700029000011540000613d000000000801034f0000000e09000029000000008a08043c0000000009a90436000000000059004b000011500000c13d000000000006004b000011610000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000012620000613d0000001f01400039000000600210018f0000000e01200029000000000021004b000000000200003900000001020040390000066f0010009c000001230000213d0000000100200190000001230000c13d000000400010043f000000200030008c000000850000413d0000000e020000290000000002020433000006c50020009c000000850000813d0000000003000411000000000023004b000012bb0000c13d00000002010003670000000f02100360000000000202043b0000066f0020009c000000850000213d0000000f030000290000004003300039000000000131034f000000000101043b001000000001001d000000000020043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b0000001002000029000000110300002919a818c50000040f000006800100004100000000001004430000001101000029000000040010044300000000010004140000066b0010009c0000066b01008041000000c00110021000000681011001c7000080020200003919a819a30000040f0000000100200190000013d70000613d000000000101043b000000000001004b000000850000613d000000400300043d000000240130003900000010020000290000000000210435000006e501000041000000000013043500000000010004100000066e01100197000e00000003001d0000000402300039000000000012043500000000010004140000001102000029000000040020008c000011c20000613d0000000e020000290000066b0020009c0000066b0200804100000040022002100000066b0010009c0000066b01008041000000c001100210000000000121019f00000676011001c7000000110200002919a8199e0000040f00000060031002700001066b0030019d00030000000103550000000100200190000013460000613d0000000e010000290000066f0010009c000001230000213d0000000e02000029000000400020043f000000100100002900000000001204350000066b0020009c0000066b02008041000000400120021000000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f0000067a011001c70000800d020000390000000203000039000006e604000041000000000500041119a8199e0000040f0000000100200190000000850000613d0000000f010000290000000201100367000000000101043b0000066f0010009c000000850000213d19a815ba0000040f000000400200043d001100000002001d0000000002000412001700000002001d001600200000003d001000000001001d000080050100003900000044030000390000000004000415000000170440008a0000000504400210000006cb0200004119a819800000040f000000ff0310018f0000001101000029000000200210003900000000003204350000002002000039000000000021043519a814550000040f000000400100043d000e00000001001d19a814550000040f0000000e020000290000002001200039000f00000001001d00000011030000290000000000310435000000100100002900000000001204350000000003020019000000400400043d001100000004001d00000020010000390000000002140436000000000103043300000040030000390000000000320435000000600240003919a8146b0000040f000000000201001900000011040000290000000001410049000000200310008a0000000f0100002900000000010104330000004004400039000000000034043519a8146b0000040f000000110200002900000000012100490000066b0020009c0000066b0200804100000040022002100000066b0010009c0000066b010080410000006001100210000000000121019f000019a90001042e00000011010000290000000001010433000000000001004b0000122b0000613d000006820010009c000000850000213d000000200010008c000000850000413d0000000e010000290000000001010433000000000001004b0000000002000039000000010200c039000000000021004b000000850000c13d000000000001004b000012460000613d000000800100043d00000140000004430000016000100443000000a00100043d00000020030000390000018000300443000001a000100443000000c00100043d0000004002000039000001c000200443000001e0001004430000006001000039000000e00200043d000002000010044300000220002004430000010000300443000000040100003900000120001004430000068701000041000019a90001042e00000009010000290000000001010433000000400200043d000006c10300004100000000003204350000066f0110019700000a730000013d000000400100043d00000064021000390000068303000041000000000032043500000044021000390000068403000041000000000032043500000024021000390000002a030000390000000000320435000006850200004100000000002104350000000402100039000000200300003900000000003204350000066b0010009c0000066b01008041000000400110021000000686011001c7000019aa00010430000000400200043d001100000002001d000006c001000041000012710000013d000000400300043d001100000003001d000006c002000041000012780000013d0000001f0530018f0000066d06300198000000400200043d000000000462001900000ec00000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000012690000c13d00000ec00000013d000000400200043d001100000002001d000006bf0100004100000000001204350000000402200039000000000103001900000f490000013d000000400300043d001100000003001d000006bf020000410000000000230435000000040230003900000f490000013d00000002020003670000000e01200360000000000101043b0000066f0010009c000000850000213d0000000e030000290000008003300039000000000332034f000000000303043b0000000004000031000000110540006a000000230550008a00000670065001970000067007300197000000000867013f000000000067004b00000000060000190000067006004041000000000053004b00000000050000190000067005008041000006700080009c000000000605c019000000000006004b000000850000c13d0000001105000029000f00040050003d0000000f05300029000000000252034f000000000302043b0000066f0030009c000000850000213d0000000004340049000000200250003900000670054001970000067006200197000000000756013f000000000056004b00000000050000190000067005004041000000000042004b00000000040000190000067004002041000006700070009c000000000504c019000000000005004b000000850000c13d19a815150000040f000000000001004b000012bf0000c13d0000001101000029000000a4021000390000000f0100002919a814b30000040f000006f603000041000000400500043d001100000005001d0000000000350435000000040350003900000020040000390000000000430435000000240350003919a815860000040f000010440000013d000006e402000041000000000021043500000004021000390000038d0000013d00000002010003670000000e02100360000000000202043b0000066f0020009c000000850000213d0000000e03000029000d00400030003d0000000d01100360000000000101043b000e00000001001d000000000020043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b00000002011000390000000e02000029000000100300002919a818c50000040f0000000d01000029000d00600010003d00000002030003670000000d01300360000000000101043b0000000004000031000000110240006a000000230220008a00000670052001970000067006100197000000000756013f000000000056004b00000000050000190000067005004041000000000021004b00000000020000190000067002008041000006700070009c000000000502c019000000000005004b000000850000c13d0000000f01100029000000000213034f000000000202043b0000066f0020009c000000850000213d0000000005240049000000200610003900000670015001970000067007600197000000000817013f000000000017004b00000000010000190000067001004041000000000056004b00000000050000190000067005002041000006700080009c000000000105c019000000000001004b000000850000c13d0000001f01200039000006fd011001970000003f01100039000006fd05100197000000400100043d0000000005510019000000000015004b000000000800003900000001080040390000066f0050009c000001230000213d0000000100800190000001230000c13d000000400050043f00000000052104360000000008620019000000000048004b000000850000213d000000000463034f000006fd062001980000001f0720018f0000000003650019000013200000613d000000000804034f0000000009050019000000008a08043c0000000009a90436000000000039004b0000131c0000c13d000000000007004b0000132d0000613d000000000464034f0000000306700210000000000703043300000000076701cf000000000767022f000000000404043b0000010006600089000000000464022f00000000046401cf000000000474019f0000000000430435000000000225001900000000000204350000000002010433000000200020008c000013530000613d000000000002004b000013570000c13d000006cb010000410000000000100443000000000100041200000004001004430000002001000039000000240010044300000000010004140000066b0010009c0000066b01008041000000c001100210000006dd011001c7000080050200003919a819a30000040f0000000100200190000013d70000613d000000000101043b001100000001001d000013600000013d0000066b033001970000001f0530018f0000066d06300198000000400200043d000000000462001900000ec00000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000134e0000c13d00000ec00000013d0000000002050433001100000002001d000000ff0020008c000013600000a13d000000400400043d001100000004001d000006f50200004100000000002404350000000402400039000000200300003900000000003204350000002402400039000010430000013d000006cb010000410000000000100443000000000100041200000004001004430000002001000039000000240010044300000000010004140000066b0010009c0000066b01008041000000c001100210000006dd011001c7000080050200003919a819a30000040f0000000100200190000013d70000613d0000001102000029000000ff0220018f000000000301043b000000ff0430018f000000000142004b000013d80000c13d0000000e01000029001100000001001d0000000d01000029000000800110008a000e00000001001d0000000201100367000000000101043b000f00000001001d0000066e0010009c000000850000213d000006800100004100000000001004430000001001000029000000040010044300000000010004140000066b0010009c0000066b01008041000000c00110021000000681011001c7000080020200003919a819a30000040f0000000100200190000013d70000613d000000000101043b000000000001004b000000850000613d000000400300043d000000240130003900000011020000290000000000210435000006f3010000410000000000130435000d00000003001d00000004013000390000000f02000029000000000021043500000000010004140000001002000029000000040020008c000013ad0000613d0000000d020000290000066b0020009c0000066b0200804100000040022002100000066b0010009c0000066b01008041000000c001100210000000000121019f00000676011001c7000000100200002919a8199e0000040f00000060031002700001066b0030019d00030000000103550000000100200190000013f00000613d0000000d010000290000066f0010009c000001230000213d0000000d01000029000000400010043f0000000e010000290000000201100367000000000601043b0000066e0060009c000000850000213d00000011010000290000000d0200002900000000001204350000066b0020009c0000066b02008041000000400120021000000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f0000067a011001c70000800d020000390000000303000039000006f404000041000000000500041119a8199e0000040f0000000100200190000000850000613d000000400100043d001000000001001d19a8144a0000040f000000110200002900000010010000290000000000210435000000400100043d00000000002104350000066b0010009c0000066b010080410000004001100210000006e8011001c7000019a90001042e000000000001042f000013e10000a13d000000ff0010008c000013e40000213d0000004d0010008c0000141f0000213d000000000001004b000013fd0000c13d0000000102000039000014080000013d0000000001240049000000ff0010008c000013ea0000a13d000006dc01000041000000000010043f0000001101000039000000040010043f000006bb01000041000019aa000104300000004e0010008c0000141f0000813d000000000001004b0000140a0000c13d00000001020000390000141c0000013d0000066b033001970000001f0530018f0000066d06300198000000400200043d000000000462001900000ec00000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000013f80000c13d00000ec00000013d0000000a030000390000000102000039000000010010019000000000043300a9000000010300603900000000022300a900000001011002720000000003040019000013ff0000c13d000000000002004b000014160000613d0000000e012000f9000013760000013d0000000a0500003900000001020000390000000004010019000000010040019000000000065500a9000000010500603900000000022500a9000000010440027200000000050600190000140d0000c13d000000000002004b0000141c0000c13d000006dc01000041000000000010043f0000001201000039000000040010043f000006bb01000041000019aa00010430000006fe022001290000000e0020006c000014310000813d000000400200043d001000000002001d000006f2010000410000000000120435000000040120003900000011020000290000000e0400002919a816230000040f000000100200002900000000012100490000066b0010009c0000066b0100804100000060011002100000066b0020009c0000066b020080410000004002200210000000000121019f000019aa00010430000000ff0210018f0000004d0020008c000013e40000213d000000000002004b000014380000c13d0000000101000039000014410000013d0000000a030000390000000101000039000000010020019000000000043300a9000000010300603900000000011300a9000000010220027200000000030400190000143a0000c13d0000000e0000006b001100000000001d000013770000613d0000000e031000b9001100000003001d0000000e023000fa000000000012004b000013770000613d000013e40000013d000007000010009c0000144f0000813d0000002001100039000000400010043f000000000001042d000006dc01000041000000000010043f0000004101000039000000040010043f000006bb01000041000019aa00010430000007010010009c0000145a0000813d0000004001100039000000400010043f000000000001042d000006dc01000041000000000010043f0000004101000039000000040010043f000006bb01000041000019aa00010430000007020010009c000014650000813d000000a001100039000000400010043f000000000001042d000006dc01000041000000000010043f0000004101000039000000040010043f000006bb01000041000019aa0001043000000000430104340000000001320436000000000003004b000014770000613d000000000200001900000000052100190000000006240019000000000606043300000000006504350000002002200039000000000032004b000014700000413d000000000231001900000000000204350000001f02300039000006fd022001970000000001210019000000000001042d000006820010009c000014980000213d000000430010008c000014980000a13d00000002020003670000000403200370000000000403043b0000066f0040009c000014980000213d0000002403200370000000000503043b0000066f0050009c000014980000213d0000002303500039000000000013004b000014980000813d0000000403500039000000000232034f000000000302043b0000066f0030009c000014980000213d00000024025000390000000005320019000000000015004b000014980000213d0000000001040019000000000001042d0000000001000019000019aa000104300000000043020434000006be03300197000000000331043600000000040404330000066b04400197000000000043043500000040032000390000000003030433000000000003004b0000000003000039000000010300c0390000004004100039000000000034043500000060032000390000000003030433000006be033001970000006004100039000000000034043500000080022000390000000002020433000006be0220019700000080031000390000000000230435000000a001100039000000000001042d0000000204000367000000000224034f000000000202043b000000000300003100000000051300490000001f0550008a00000670065001970000067007200197000000000867013f000000000067004b00000000060000190000067006002041000000000052004b00000000050000190000067005004041000006700080009c000000000605c019000000000006004b000014db0000613d0000000001120019000000000214034f000000000202043b0000066f0020009c000014db0000213d0000000003230049000000200110003900000670043001970000067005100197000000000645013f000000000045004b00000000040000190000067004004041000000000031004b00000000030000190000067003002041000006700060009c000000000403c019000000000004004b000014db0000c13d000000000001042d0000000001000019000019aa00010430000007030020009c0000150d0000813d00000000040100190000001f01200039000006fd011001970000003f01100039000006fd05100197000000400100043d0000000005510019000000000015004b000000000700003900000001070040390000066f0050009c0000150d0000213d00000001007001900000150d0000c13d000000400050043f00000000052104360000000007420019000000000037004b000015130000213d000006fd062001980000001f0720018f00000002044003670000000003650019000014fd0000613d000000000804034f0000000009050019000000008a08043c0000000009a90436000000000039004b000014f90000c13d000000000007004b0000150a0000613d000000000464034f0000000306700210000000000703043300000000076701cf000000000767022f000000000404043b0000010006600089000000000464022f00000000046401cf000000000474019f000000000043043500000000022500190000000000020435000000000001042d000006dc01000041000000000010043f0000004101000039000000040010043f000006bb01000041000019aa000104300000000001000019000019aa000104300003000000000002000300000003001d000200000002001d0000066f01100197000000000010043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000207000029000000030a00002900000001002001900000157e0000613d0000000003000031000000000601043b0000070300a0009c000015800000813d0000001f01a00039000006fd011001970000003f01100039000006fd02100197000000400100043d0000000002210019000000000012004b000000000500003900000001050040390000066f0020009c000015800000213d0000000100500190000015800000c13d000100000006001d000000400020043f0000000002a1043600000000057a0019000000000035004b0000157e0000213d000006fd04a001980000001f05a0018f00000002067003670000000003420019000015490000613d000000000706034f0000000008020019000000007907043c0000000008980436000000000038004b000015450000c13d000000000005004b000015560000613d000000000446034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004304350000000003a2001900000000000304350000066b0020009c0000066b02008041000000400220021000000000010104330000066b0010009c0000066b010080410000006001100210000000000121019f00000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f000006b4011001c7000080100200003919a819a30000040f00000001002001900000157e0000613d000000000101043b000000000010043f00000001010000290000000601100039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f00000001002001900000157e0000613d000000000101043b000000000101041a000000000001004b0000000001000039000000010100c039000000000001042d0000000001000019000019aa00010430000006dc01000041000000000010043f0000004101000039000000040010043f000006bb01000041000019aa000104300000000003230436000006fd062001980000001f0720018f00000000056300190000000201100367000015920000613d000000000801034f0000000009030019000000008a08043c0000000009a90436000000000059004b0000158e0000c13d000000000007004b0000159f0000613d000000000161034f0000000306700210000000000705043300000000076701cf000000000767022f000000000101043b0000010006600089000000000161022f00000000016101cf000000000171019f0000000000150435000000000123001900000000000104350000001f01200039000006fd011001970000000001130019000000000001042d000000400100043d000007020010009c000015b40000813d000000a002100039000000400020043f000000800210003900000000000204350000006002100039000000000002043500000040021000390000000000020435000000200210003900000000000204350000000000010435000000000001042d000006dc01000041000000000010043f0000004101000039000000040010043f000006bb01000041000019aa0001043000030000000000020000066f01100197000000000010043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000016070000613d000000000101043b0000000405100039000000000205041a000000010320019000000001062002700000007f0660618f0000001f0060008c00000000040000390000000104002039000000000043004b000016090000c13d000000400100043d0000000004610436000000000003004b000015f30000613d000100000004001d000200000006001d000300000001001d000000000050043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000016070000613d0000000206000029000000000006004b000015f90000613d000000000201043b0000000005000019000000030100002900000001070000290000000003570019000000000402041a000000000043043500000001022000390000002005500039000000000065004b000015eb0000413d000015fb0000013d000006ff022001970000000000240435000000000006004b00000020050000390000000005006039000015fb0000013d000000000500001900000003010000290000003f03500039000006fd023001970000000003120019000000000023004b000000000200003900000001020040390000066f0030009c0000160f0000213d00000001002001900000160f0000c13d000000400030043f000000000001042d0000000001000019000019aa00010430000006dc01000041000000000010043f0000002201000039000000040010043f000006bb01000041000019aa00010430000006dc01000041000000000010043f0000004101000039000000040010043f000006bb01000041000019aa000104300000000043010434000000000003004b0000000003000039000000010300c03900000000033204360000000004040433000006be044001970000000000430435000000400220003900000040011000390000000001010433000006be011001970000000000120435000000000001042d00000040051000390000000000450435000000ff0330018f00000020041000390000000000340435000000ff0220018f00000000002104350000006001100039000000000001042d0007000000000002000400000001001d000600000002001d0000000021020434000000000001004b000017450000613d0000066b0010009c0000066b0100804100000060011002100000066b0020009c000500000002001d0000066b020080410000004002200210000000000121019f00000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f000006b4011001c7000080100200003919a819a30000040f00000001002001900000173d0000613d000000000101043b000700000001001d00000004010000290000066f01100197000200000001001d000000000010043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f00000001002001900000173d0000613d000000000201043b0000000701000029000000000010043f000400000002001d0000000601200039000300000001001d000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f00000001002001900000173d0000613d000000000101043b000000000101041a000000000001004b0000174d0000c13d00000004010000290000000502100039000000000102041a000007030010009c0000173f0000813d000100000001001d0000000101100039000000000012041b000400000002001d000000000020043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f000000010020019000000007020000290000173d0000613d000000000101043b0000000101100029000000000021041b0000000401000029000000000101041a000400000001001d000000000020043f0000000301000029000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f000000010020019000000007020000290000173d0000613d000000000101043b0000000403000029000000000031041b000000000020043f0000000801000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f00000001002001900000173d0000613d000000000801043b000000060100002900000000040104330000066f0040009c0000173f0000213d000000000108041a000000010210019000000001031002700000007f0330618f0000001f0030008c00000000010000390000000101002039000000000012004b0000000507000029000017640000c13d000000200030008c000400000008001d000700000004001d000016d00000413d000300000003001d000000000080043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f00000001002001900000173d0000613d00000007040000290000001f024000390000000502200270000000200040008c0000000002004019000000000301043b00000003010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b00000005070000290000000408000029000016d00000813d000000000002041b0000000102200039000000000012004b000016cc0000413d0000001f0040008c000000200a00008a000000200b000039000017000000a13d000000000080043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f00000001002001900000173d0000613d0000000709000029000000200a00008a0000000002a90170000000000101043b000000200b000039000017360000613d000000010320008a000000050330027000000000043100190000002003000039000000010440003900000005070000290000000606000029000000040800002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000016ec0000c13d000000000092004b000016fd0000813d0000000302900210000000f80220018f000006fe0220027f000006fe0220016700000000036300190000000003030433000000000223016f000000000021041b000000010190021000000001011001bf0000170c0000013d000000000004004b000017040000613d0000000001070433000017050000013d000000000100001900000006060000290000000302400210000006fe0220027f000006fe02200167000000000121016f0000000102400210000000000121019f000000000018041b000000400100043d0000000003b10436000000000206043300000000002304350000004003100039000000000002004b0000171c0000613d000000000400001900000000053400190000000006740019000000000606043300000000006504350000002004400039000000000024004b000017150000413d0000001f042000390000000004a4016f0000000002230019000000000002043500000040024000390000066b0020009c0000066b0200804100000060022002100000066b0010009c0000066b010080410000004001100210000000000112019f00000000020004140000066b0020009c0000066b02008041000000c002200210000000000121019f000006b4011001c70000800d020000390000000203000039000006c804000041000000020500002919a8199e0000040f00000001002001900000173d0000613d000000000001042d00000000030b0019000000050700002900000006060000290000000408000029000000000092004b000016f50000413d000016fd0000013d0000000001000019000019aa00010430000006dc01000041000000000010043f0000004101000039000000040010043f000006bb01000041000019aa00010430000000400100043d000006ca0200004100000000002104350000066b0010009c0000066b01008041000000400110021000000674011001c7000019aa00010430000000400300043d000700000003001d000000240130003900000040020000390000000000210435000006c70100004100000000001304350000000401300039000000020200002900000000002104350000004402300039000000060100002919a8146b0000040f000000070200002900000000012100490000066b0010009c0000066b010080410000066b0020009c0000066b0200804100000060011002100000004002200210000000000121019f000019aa00010430000006dc01000041000000000010043f0000002201000039000000040010043f000006bb01000041000019aa000104300005000000000002000000400300043d000007020030009c000017b10000813d000000a002300039000000400020043f00000080023000390000000000020435000000600230003900000000000204350000004002300039000000000002043500000020023000390000000000020435000000000003043500000060021000390000000002020433000100000002001d000500000001001d0000000012010434000300000002001d000200000001001d0000000001010433000400000001001d000006c301000041000000000010044300000000010004140000066b0010009c0000066b01008041000000c001100210000006c4011001c70000800b0200003919a819a30000040f0000000100200190000017b70000613d00000004020000290000066b04200197000000000601043b000000000346004b0000000501000029000017ab0000413d00000080021000390000000002020433000006be0520019700000000023500a9000000000046004b0000179c0000613d00000000033200d9000000000053004b000017ab0000c13d0000000303000029000006be03300197000000000032001a000017ab0000413d00000000023200190000000103000029000006be03300197000006be04200197000000000023004b000000000304801900000000003104350000066b0260019700000002030000290000000000230435000000000001042d000006dc01000041000000000010043f0000001101000039000000040010043f000006bb01000041000019aa00010430000006dc01000041000000000010043f0000004101000039000000040010043f000006bb01000041000019aa00010430000000000001042f000000000010043f0000000601000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000017ca0000613d000000000101043b000000000101041a000000000001004b0000000001000039000000010100c039000000000001042d0000000001000019000019aa000104300006000000000002000300000002001d000000000020043f000600000001001d0000000101100039000400000001001d000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000018440000613d0000000603000029000000000101043b000000000101041a000000000001004b000018420000613d000000000203041a000000000002004b000018460000613d000000000021004b000500000001001d000018200000613d000200000002001d000000000030043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000018440000613d00000005020000290001000100200092000000000101043b0000000604000029000000000204041a000000010020006c0000184c0000a13d0000000202000029000000010220008a0000000001120019000000000101041a000200000001001d000000000040043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000018440000613d000000000101043b00000001011000290000000202000029000000000021041b000000000020043f0000000401000029000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000018440000613d000000000101043b0000000502000029000000000021041b0000000603000029000000000103041a000500000001001d000000000001004b000018520000613d000000000030043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000018440000613d0000000502000029000000010220008a000000000101043b0000000001210019000000000001041b0000000601000029000000000021041b0000000301000029000000000010043f0000000401000029000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000018440000613d000000000101043b000000000001041b0000000101000039000000000001042d0000000001000019000000000001042d0000000001000019000019aa00010430000006dc01000041000000000010043f0000001101000039000000040010043f000006bb01000041000019aa00010430000006dc01000041000000000010043f0000003201000039000000040010043f000006bb01000041000019aa00010430000006dc01000041000000000010043f0000003101000039000000040010043f000006bb01000041000019aa000104300003000000000002000100000002001d000300000001001d000000000101041a000200000001001d000006c301000041000000000010044300000000010004140000066b0010009c0000066b01008041000000c001100210000006c4011001c70000800b0200003919a819a30000040f0000000100200190000018ba0000613d000000020800002900000080028002700000066b03200197000000000201043b000000000532004b0000000307000029000018b40000413d0000000101700039000018730000c13d000000000207041a000018850000013d000000000301041a000000800630027000000000045600a900000000055400d9000000000065004b000018b40000c13d000006be05800197000000000054001a000018b40000413d000006be033001970000000004540019000000000043004b0000000003048019000006720480019700000080022002100000070402200197000000000242019f000000000232019f000000010600002900000020036000390000000004030433000006be04400197000006be05200197000000000054004b00000000050440190000070502200197000000000225019f0000000005060433000000000005004b0000000005000019000006c50500c041000000000252019f000000000027041b000000400260003900000000050204330000008005500210000000000445019f000000000041041b0000000001000039000000010100c039000000400400043d00000000011404360000000003030433000006be0330019700000000003104350000000001020433000006be01100197000000400240003900000000001204350000066b0040009c0000066b04008041000000400140021000000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f00000706011001c70000800d020000390000000103000039000007070400004119a8199e0000040f0000000100200190000018bb0000613d000000000001042d000006dc01000041000000000010043f0000001101000039000000040010043f000006bb01000041000019aa00010430000000000001042f0000000001000019000019aa000104300000066e04400197000000400510003900000000004504350000002004100039000000000034043500000000002104350000006001100039000000000001042d0006000000000002000000000401041a000006d100400198000019190000613d000000000002004b000019190000613d000600000004001d000500000002001d000200000003001d000300000001001d0000000101100039000100000001001d000000000101041a000400000001001d000006c301000041000000000010044300000000010004140000066b0010009c0000066b01008041000000c001100210000006c4011001c70000800b0200003919a819a30000040f00000001002001900000191a0000613d000000060300002900000080023002700000066b02200197000000000101043b000000000421004b000019350000413d000006be033001970000000405000029000006be02500197000018eb0000c13d00000005040000290000000305000029000018ff0000013d000000000023004b0000193d0000213d000000800650027000000000056400a900000000044500d9000000000064004b000019350000c13d000000000035001a000019350000413d0000000003350019000000800110021000000704011001970000000305000029000000000405041a0000070804400197000000000114019f000000000015041b000000000032004b00000000030240190000000504000029000000000042004b0000191b0000413d000000000143004b0000192c0000413d000006be01100197000000000205041a0000070a02200197000000000112019f000000000015041b000000400100043d00000000004104350000066b0010009c0000066b01008041000000400110021000000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f0000067a011001c70000800d0200003900000001030000390000070b0400004119a8199e0000040f00000001002001900000193b0000613d000000000001042d000000000001042f000000400100043d0000000004010019000000040110003900000002030000290000066e00300198000019450000c13d0000070f03000041000000000034043500000000002104350000002401400039000000050200002900000000002104350000066b0040009c0000066b04008041000000400140021000000676011001c7000019aa000104300000000101000029000000000101041a0000008001100272000019350000613d00000005043000690000000002140019000000010220008a000000000042004b0000194a0000813d000006dc01000041000000000010043f0000001101000039000000040010043f000006bb01000041000019aa000104300000000001000019000019aa00010430000000400100043d000007090200004100000000002104350000066b0010009c0000066b01008041000000400110021000000674011001c7000019aa000104300000070e03000041000600000004001d000000000034043500000005030000290000195e0000013d00000000021200d9000000400100043d0000000005010019000000040110003900000002040000290000066e004001980000195b0000c13d0000070d0400004100000000004504350000000000210435000000240150003900000000003104350000066b0050009c0000066b05008041000000400150021000000676011001c7000019aa000104300000070c04000041000600000005001d0000000000450435000000020400002919a818bd0000040f000000060200002900000000012100490000066b0010009c0000066b0100804100000060011002100000066b0020009c0000066b020080410000004002200210000000000121019f000019aa00010430000000000001042f0000066b0010009c0000066b0100804100000040011002100000066b0020009c0000066b020080410000006002200210000000000112019f00000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f000006b4011001c7000080100200003919a819a30000040f00000001002001900000197e0000613d000000000101043b000000000001042d0000000001000019000019aa0001043000000000050100190000000000200443000000050030008c0000198e0000413d000000040100003900000000020000190000000506200210000000000664001900000005066002700000000006060031000000000161043a0000000102200039000000000031004b000019860000413d0000066b0030009c0000066b03008041000000600130021000000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f00000710011001c7000000000205001919a819a30000040f00000001002001900000199d0000613d000000000101043b000000000001042d000000000001042f000019a1002104210000000102000039000000000001042d0000000002000019000000000001042d000019a6002104230000000102000039000000000001042d0000000002000019000000000001042d000019a800000432000019a90001042e000019aa00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffff0000000000000000000000000000000000000000313ce567000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000655a7c0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffdf0200000000000000000000000000000000000040000000000000000000000000bfa87805ed57dc1f0d489ce33be4c4577d74ccde357eeeee058a32c55c44a53202000000000000000000000000000000000000200000000000000000000000002640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d8dd62ed3e00000000000000000000000000000000000000000000000000000000095ea7b300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff3f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65641806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b8302000002000000000000000000000000000000240000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f742073756363656564000000000000000000000000000000000000000000005361666545524332303a204552433230206f7065726174696f6e20646964206e08c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000000000000200000000000000000000000000000140000001000000000000000000416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000000000000000000000000000000000000000000640000000000000000000000009b15e16f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a4575b800000000000000000000000000000000000000000000000000000000c0d7865400000000000000000000000000000000000000000000000000000000dc0bd97000000000000000000000000000000000000000000000000000000000e8a1da1600000000000000000000000000000000000000000000000000000000e8a1da1700000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000dc0bd97100000000000000000000000000000000000000000000000000000000e0351e1300000000000000000000000000000000000000000000000000000000c75eea9b00000000000000000000000000000000000000000000000000000000c75eea9c00000000000000000000000000000000000000000000000000000000cf7401f300000000000000000000000000000000000000000000000000000000c0d7865500000000000000000000000000000000000000000000000000000000c4bffe2b00000000000000000000000000000000000000000000000000000000acfecf9000000000000000000000000000000000000000000000000000000000b0f479a000000000000000000000000000000000000000000000000000000000b0f479a100000000000000000000000000000000000000000000000000000000b794658000000000000000000000000000000000000000000000000000000000acfecf9100000000000000000000000000000000000000000000000000000000af58d59f000000000000000000000000000000000000000000000000000000009a4575b900000000000000000000000000000000000000000000000000000000a42a7b8b00000000000000000000000000000000000000000000000000000000a7cd63b70000000000000000000000000000000000000000000000000000000054c8a4f20000000000000000000000000000000000000000000000000000000079ba5096000000000000000000000000000000000000000000000000000000008926f54e000000000000000000000000000000000000000000000000000000008926f54f000000000000000000000000000000000000000000000000000000008da5cb5b0000000000000000000000000000000000000000000000000000000079ba5097000000000000000000000000000000000000000000000000000000007d54534e0000000000000000000000000000000000000000000000000000000054c8a4f30000000000000000000000000000000000000000000000000000000062ddd3c4000000000000000000000000000000000000000000000000000000006d3d1a5800000000000000000000000000000000000000000000000000000000240028e700000000000000000000000000000000000000000000000000000000390775360000000000000000000000000000000000000000000000000000000039077537000000000000000000000000000000000000000000000000000000004c5ef0ed00000000000000000000000000000000000000000000000000000000240028e80000000000000000000000000000000000000000000000000000000024f65ee70000000000000000000000000000000000000000000000000000000001ffc9a700000000000000000000000000000000000000000000000000000000181f5a770000000000000000000000000000000000000000000000000000000021df0da70200000000000000000000000000000000000000000000000000000000000000ed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278dad89dca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000800000000000000000fc949c7b4a13586e39d89eead2f38644f9fb3efb5a0490b14f8fc0ceab44c2515204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599161e670e4b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5f000000000000000000000000000000000000000000000000ffffffffffffff9f00000000000000000000000000000000ffffffffffffffffffffffffffffffff8020d12400000000000000000000000000000000000000000000000000000000d68af9cc000000000000000000000000000000000000000000000000000000001d5ad3c500000000000000000000000000000000000000000000000000000000fc949c7b4a13586e39d89eead2f38644f9fb3efb5a0490b14f8fc0ceab44c250796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d9553913202000002000000000000000000000000000000040000000000000000000000000000000000000000000000010000000000000000000000000000000000000000ffffffffffffffffffffff000000000000000000000000000000000000000000393b8ad2000000000000000000000000000000000000000000000000000000007d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c28579befe00000000000000000000000000000000000000000000000000000000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e00000000000000000000000000000000000000200000008000000000000000008e4a23d600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000140000000000000000002000000000000000000000000000000000000e00000000000000000000000000350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b0000000000000000000000ff0000000000000000000000000000000000000000036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0000000000000000000000000000000000000000000000000ffffffffffffff7f00000000000000000000000000000000000000000000003fffffffffffffffe0020000000000000000000000000000000000004000000080000000000000000002dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f168400000000000000000000000000000000000000000000000000000000ffffffbffdffffffffffffffffffffffffffffffffffffc000000000000000000000000052d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d7674f23c7c00000000000000000000000000000000000000000000000000000000405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace4e487b71000000000000000000000000000000000000000000000000000000000200000200000000000000000000000000000044000000000000000000000000961c9a4f000000000000000000000000000000000000000000000000000000002cbc26bb000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff0000000000000000000000000000000053ad11d800000000000000000000000000000000000000000000000000000000d0d2597600000000000000000000000000000000000000000000000000000000a8d87a3b00000000000000000000000000000000000000000000000000000000728fe07b0000000000000000000000000000000000000000000000000000000079cc679000000000000000000000000000000000000000000000000000000000696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df7a9902c7e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000020000000000000000000000000000000000002000000080000000000000000044676b5284b809a22248eba0da87391d79098be38bb03154be88a58bf4d0917402b543c6000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e02b5c74de00000000000000000000000000000000000000000000000000000000bfa87805ed57dc1f0d489ce33be4c4577d74ccde357eeeee058a32c55c44a533800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf756635f4a7b30000000000000000000000000000000000000000000000000000000083826b2b00000000000000000000000000000000000000000000000000000000a9cb113d0000000000000000000000000000000000000000000000000000000040c10f19000000000000000000000000000000000000000000000000000000009d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0953576f70000000000000000000000000000000000000000000000000000000024eb47e5000000000000000000000000000000000000000000000000000000004275726e46726f6d4d696e74546f6b656e506f6f6c20312e352e3100000000000000000000000000000000000000000000000000000000c0000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffc9a7000000000000000000000000000000000000000000000000000000000e64dd2900000000000000000000000000000000000000000000000000000000aff2afbf00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000ffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffffc0000000000000000000000000000000000000000000000000ffffffffffffff600000000000000000000000000000000000000000000000010000000000000000000000000000000000000000ffffffff00000000000000000000000000000000ffffffffffffffffffffff00ffffffff0000000000000000000000000000000002000000000000000000000000000000000000600000000000000000000000009ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19ffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff9725942a00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000000000001871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690ad0c8d23a0000000000000000000000000000000000000000000000000000000015279c08000000000000000000000000000000000000000000000000000000001a76572a00000000000000000000000000000000000000000000000000000000f94ebcd1000000000000000000000000000000000000000000000000000000000200000200000000000000000000000000000000000000000000000000000000") diff --git a/core/gethwrappers/ccip/generated_zks/burn_mint_token_pool/burn_mint_token_pool.go b/core/gethwrappers/ccip/generated_zks/burn_mint_token_pool/burn_mint_token_pool.go new file mode 100644 index 00000000000..79cf70113e9 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/burn_mint_token_pool/burn_mint_token_pool.go @@ -0,0 +1,3151 @@ +package burn_mint_token_pool + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type PoolLockOrBurnInV1 struct { + Receiver []byte + RemoteChainSelector uint64 + OriginalSender common.Address + Amount *big.Int + LocalToken common.Address +} + +type PoolLockOrBurnOutV1 struct { + DestTokenAddress []byte + DestPoolData []byte +} + +type PoolReleaseOrMintInV1 struct { + OriginalSender []byte + RemoteChainSelector uint64 + Receiver common.Address + Amount *big.Int + LocalToken common.Address + SourcePoolAddress []byte + SourcePoolData []byte + OffchainTokenData []byte +} + +type PoolReleaseOrMintOutV1 struct { + DestinationAmount *big.Int +} + +type RateLimiterConfig struct { + IsEnabled bool + Capacity *big.Int + Rate *big.Int +} + +type RateLimiterTokenBucket struct { + Tokens *big.Int + LastUpdated uint32 + IsEnabled bool + Capacity *big.Int + Rate *big.Int +} + +type TokenPoolChainUpdate struct { + RemoteChainSelector uint64 + RemotePoolAddresses [][]byte + RemoteTokenAddress []byte + OutboundRateLimiterConfig RateLimiterConfig + InboundRateLimiterConfig RateLimiterConfig +} + +var BurnMintTokenPoolMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"contractIBurnMintERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"localTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"allowlist\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllowListNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"CallerIsNotARampOnRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotTransferToSelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"DisabledNonZeroRateLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"expected\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"actual\",\"type\":\"uint8\"}],\"name\":\"InvalidDecimalArgs\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"InvalidRateLimitRate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolData\",\"type\":\"bytes\"}],\"name\":\"InvalidRemoteChainDecimals\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidRemotePoolForChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidSourcePoolAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeProposedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"NonExistentChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"remoteDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"localDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"remoteAmount\",\"type\":\"uint256\"}],\"name\":\"OverflowDetected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerCannotBeZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"PoolAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimitMustBeDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListAdd\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListRemove\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remoteToken\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Locked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Minted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rateLimitAdmin\",\"type\":\"address\"}],\"name\":\"RateLimitAdminSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Released\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"RemotePoolAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"RemotePoolRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"RouterUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensConsumed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"addRemotePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"removes\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"adds\",\"type\":\"address[]\"}],\"name\":\"applyAllowListUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"remoteChainSelectorsToRemove\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes[]\",\"name\":\"remotePoolAddresses\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes\",\"name\":\"remoteTokenAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"internalType\":\"structTokenPool.ChainUpdate[]\",\"name\":\"chainsToAdd\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentInboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentOutboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateLimitAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemotePools\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemoteToken\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRmnProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupportedChains\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"isRemotePool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"isSupportedChain\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isSupportedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"internalType\":\"structPool.LockOrBurnInV1\",\"name\":\"lockOrBurnIn\",\"type\":\"tuple\"}],\"name\":\"lockOrBurn\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destPoolData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.LockOrBurnOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"originalSender\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainTokenData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.ReleaseOrMintInV1\",\"name\":\"releaseOrMintIn\",\"type\":\"tuple\"}],\"name\":\"releaseOrMint\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"destinationAmount\",\"type\":\"uint256\"}],\"internalType\":\"structPool.ReleaseOrMintOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"removeRemotePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundConfig\",\"type\":\"tuple\"}],\"name\":\"setChainRateLimiterConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rateLimitAdmin\",\"type\":\"address\"}],\"name\":\"setRateLimitAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"setRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x6101006040523480156200001257600080fd5b5060405162004809380380620048098339810160408190526200003591620005a2565b8484848484336000816200005c57604051639b15e16f60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03848116919091179091558116156200008f576200008f81620001eb565b50506001600160a01b0385161580620000af57506001600160a01b038116155b80620000c257506001600160a01b038216155b15620000e1576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b03808616608081905290831660c0526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa92505050801562000151575060408051601f3d908101601f191682019092526200014e91810190620006c4565b60015b1562000191578060ff168560ff16146200018f576040516332ad3e0760e11b815260ff80871660048301528216602482015260440160405180910390fd5b505b60ff841660a052600480546001600160a01b0319166001600160a01b038316179055825115801560e052620001db57604080516000815260208101909152620001db908462000265565b5050505050505050505062000730565b336001600160a01b038216036200021557604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60e05162000286576040516335f4a7b360e01b815260040160405180910390fd5b60005b825181101562000311576000838281518110620002aa57620002aa620006e2565b60209081029190910101519050620002c4600282620003c2565b1562000307576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b5060010162000289565b5060005b8151811015620003bd576000828281518110620003365762000336620006e2565b6020026020010151905060006001600160a01b0316816001600160a01b031603620003625750620003b4565b6200036f600282620003e2565b15620003b2576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b60010162000315565b505050565b6000620003d9836001600160a01b038416620003f9565b90505b92915050565b6000620003d9836001600160a01b038416620004fd565b60008181526001830160205260408120548015620004f257600062000420600183620006f8565b85549091506000906200043690600190620006f8565b9050808214620004a25760008660000182815481106200045a576200045a620006e2565b9060005260206000200154905080876000018481548110620004805762000480620006e2565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080620004b657620004b66200071a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050620003dc565b6000915050620003dc565b60008181526001830160205260408120546200054657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620003dc565b506000620003dc565b6001600160a01b03811681146200056557600080fd5b50565b805160ff811681146200057a57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b80516200057a816200054f565b600080600080600060a08688031215620005bb57600080fd5b8551620005c8816200054f565b94506020620005d987820162000568565b60408801519095506001600160401b0380821115620005f757600080fd5b818901915089601f8301126200060c57600080fd5b8151818111156200062157620006216200057f565b8060051b604051601f19603f830116810181811085821117156200064957620006496200057f565b60405291825284820192508381018501918c8311156200066857600080fd5b938501935b828510156200069157620006818562000595565b845293850193928501926200066d565b809850505050505050620006a86060870162000595565b9150620006b86080870162000595565b90509295509295909350565b600060208284031215620006d757600080fd5b620003d98262000568565b634e487b7160e01b600052603260045260246000fd5b81810381811115620003dc57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60805160a05160c05160e051614028620007e16000396000818161054f01528181611d8201526127cd0152600081816105290152818161189f015261206e0152600081816102e001528181610ba901528181611a4801528181611b0201528181611b3601528181611b6901528181611bce01528181611c270152611cc90152600081816102470152818161029c01528181610708015281816121eb0152818161276301526129b801526140286000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80639a4575b911610104578063c0d78655116100a2578063dc0bd97111610071578063dc0bd97114610527578063e0351e131461054d578063e8a1da1714610573578063f2fde38b1461058657600080fd5b8063c0d78655146104d9578063c4bffe2b146104ec578063c75eea9c14610501578063cf7401f31461051457600080fd5b8063acfecf91116100de578063acfecf9114610426578063af58d59f14610439578063b0f479a1146104a8578063b7946580146104c657600080fd5b80639a4575b9146103d1578063a42a7b8b146103f1578063a7cd63b71461041157600080fd5b806354c8a4f31161017157806379ba50971161014b57806379ba5097146103855780637d54534e1461038d5780638926f54f146103a05780638da5cb5b146103b357600080fd5b806354c8a4f31461033f57806362ddd3c4146103545780636d3d1a581461036757600080fd5b8063240028e8116101ad578063240028e81461028c57806324f65ee7146102d9578063390775371461030a5780634c5ef0ed1461032c57600080fd5b806301ffc9a7146101d4578063181f5a77146101fc57806321df0da714610245575b600080fd5b6101e76101e2366004613178565b610599565b60405190151581526020015b60405180910390f35b6102386040518060400160405280601781526020017f4275726e4d696e74546f6b656e506f6f6c20312e352e3100000000000000000081525081565b6040516101f3919061321e565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f3565b6101e761029a366004613253565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101f3565b61031d610318366004613270565b61067e565b604051905181526020016101f3565b6101e761033a3660046132c9565b61084d565b61035261034d366004613398565b610897565b005b6103526103623660046132c9565b610912565b60095473ffffffffffffffffffffffffffffffffffffffff16610267565b6103526109af565b61035261039b366004613253565b610a7d565b6101e76103ae366004613404565b610afe565b60015473ffffffffffffffffffffffffffffffffffffffff16610267565b6103e46103df36600461341f565b610b15565b6040516101f3919061345a565b6104046103ff366004613404565b610bee565b6040516101f391906134b1565b610419610d59565b6040516101f39190613533565b6103526104343660046132c9565b610d6a565b61044c610447366004613404565b610e82565b6040516101f3919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60045473ffffffffffffffffffffffffffffffffffffffff16610267565b6102386104d4366004613404565b610f57565b6103526104e7366004613253565b611007565b6104f46110e2565b6040516101f3919061358d565b61044c61050f366004613404565b61119a565b610352610522366004613715565b61126c565b7f0000000000000000000000000000000000000000000000000000000000000000610267565b7f00000000000000000000000000000000000000000000000000000000000000006101e7565b610352610581366004613398565b6112f0565b610352610594366004613253565b611802565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faff2afbf00000000000000000000000000000000000000000000000000000000148061062c57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e64dd2900000000000000000000000000000000000000000000000000000000145b8061067857507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60408051602081019091526000815261069682611816565b60006106ef60608401356106ea6106b060c087018761375a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a3a92505050565b611afe565b905073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166340c10f1961073d6060860160408701613253565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff909116600482015260248101849052604401600060405180830381600087803b1580156107aa57600080fd5b505af11580156107be573d6000803e3d6000fd5b506107d3925050506060840160408501613253565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f08360405161083191815260200190565b60405180910390a3604080516020810190915290815292915050565b600061088f83836040516108629291906137bf565b604080519182900390912067ffffffffffffffff8716600090815260076020529190912060050190611d12565b949350505050565b61089f611d2d565b61090c84848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808802828101820190935287825290935087925086918291850190849080828437600092019190915250611d8092505050565b50505050565b61091a611d2d565b61092383610afe565b61096a576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024015b60405180910390fd5b6109aa8383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f3692505050565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a00576040517f02b543c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000008082163390811790935560008054909116815560405173ffffffffffffffffffffffffffffffffffffffff909216929183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610a85611d2d565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f44676b5284b809a22248eba0da87391d79098be38bb03154be88a58bf4d091749060200160405180910390a150565b6000610678600567ffffffffffffffff8416611d12565b6040805180820190915260608082526020820152610b3282612030565b610b3f82606001356121bc565b6040516060830135815233907f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df79060200160405180910390a26040518060400160405280610b998460200160208101906104d49190613404565b8152602001610be66040805160ff7f000000000000000000000000000000000000000000000000000000000000000016602082015260609101604051602081830303815290604052905090565b905292915050565b67ffffffffffffffff8116600090815260076020526040812060609190610c1790600501612258565b90506000815167ffffffffffffffff811115610c3557610c356135cf565b604051908082528060200260200182016040528015610c6857816020015b6060815260200190600190039081610c535790505b50905060005b8251811015610d515760086000848381518110610c8d57610c8d6137cf565b602002602001015181526020019081526020016000208054610cae906137fe565b80601f0160208091040260200160405190810160405280929190818152602001828054610cda906137fe565b8015610d275780601f10610cfc57610100808354040283529160200191610d27565b820191906000526020600020905b815481529060010190602001808311610d0a57829003601f168201915b5050505050828281518110610d3e57610d3e6137cf565b6020908102919091010152600101610c6e565b509392505050565b6060610d656002612258565b905090565b610d72611d2d565b610d7b83610afe565b610dbd576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610961565b610dfd8282604051610dd09291906137bf565b604080519182900390912067ffffffffffffffff8616600090815260076020529190912060050190612265565b610e39578282826040517f74f23c7c0000000000000000000000000000000000000000000000000000000081526004016109619392919061389a565b8267ffffffffffffffff167f52d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d768383604051610e759291906138be565b60405180910390a2505050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600390910154808416606083015291909104909116608082015261067890612271565b67ffffffffffffffff81166000908152600760205260409020600401805460609190610f82906137fe565b80601f0160208091040260200160405190810160405280929190818152602001828054610fae906137fe565b8015610ffb5780601f10610fd057610100808354040283529160200191610ffb565b820191906000526020600020905b815481529060010190602001808311610fde57829003601f168201915b50505050509050919050565b61100f611d2d565b73ffffffffffffffffffffffffffffffffffffffff811661105c576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f1684910160405180910390a15050565b606060006110f06005612258565b90506000815167ffffffffffffffff81111561110e5761110e6135cf565b604051908082528060200260200182016040528015611137578160200160208202803683370190505b50905060005b825181101561119357828181518110611158576111586137cf565b6020026020010151828281518110611172576111726137cf565b67ffffffffffffffff9092166020928302919091019091015260010161113d565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600190910154808416606083015291909104909116608082015261067890612271565b60095473ffffffffffffffffffffffffffffffffffffffff1633148015906112ac575060015473ffffffffffffffffffffffffffffffffffffffff163314155b156112e5576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610961565b6109aa838383612323565b6112f8611d2d565b60005b838110156114e5576000858583818110611317576113176137cf565b905060200201602081019061132c9190613404565b9050611343600567ffffffffffffffff8316612265565b611385576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610961565b67ffffffffffffffff811660009081526007602052604081206113aa90600501612258565b905060005b81518110156114165761140d8282815181106113cd576113cd6137cf565b6020026020010151600760008667ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060050161226590919063ffffffff16565b506001016113af565b5067ffffffffffffffff8216600090815260076020526040812080547fffffffffffffffffffffff0000000000000000000000000000000000000000009081168255600182018390556002820180549091169055600381018290559061147f600483018261310b565b60058201600081816114918282613145565b505060405167ffffffffffffffff871681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d859916945060200192506114d3915050565b60405180910390a150506001016112fb565b5060005b818110156117fb576000838383818110611505576115056137cf565b905060200281019061151791906138d2565b6115209061399e565b90506115318160600151600061240d565b6115408160800151600061240d565b80604001515160000361157f576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80516115979060059067ffffffffffffffff1661254a565b6115dc5780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610961565b805167ffffffffffffffff16600090815260076020908152604091829020825160a08082018552606080870180518601516fffffffffffffffffffffffffffffffff90811680865263ffffffff42168689018190528351511515878b0181905284518a0151841686890181905294518b0151841660809889018190528954740100000000000000000000000000000000000000009283027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff7001000000000000000000000000000000008087027fffffffffffffffffffffffff000000000000000000000000000000000000000094851690981788178216929092178d5592810290971760018c01558c519889018d52898e0180518d01518716808b528a8e019590955280515115158a8f018190528151909d01518716988a01899052518d0151909516979098018790526002890180549a90910299909316171790941695909517909255909202909117600382015590820151600482019061175f9082613b15565b5060005b8260200151518110156117a35761179b83600001518460200151838151811061178e5761178e6137cf565b6020026020010151611f36565b600101611763565b507f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c282600001518360400151846060015185608001516040516117e99493929190613c2f565b60405180910390a150506001016114e9565b5050505050565b61180a611d2d565b61181381612556565b50565b61182961029a60a0830160808401613253565b6118885761183d60a0820160808301613253565b6040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610961565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016632cbc26bb6118d46040840160208501613404565b60405160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260809190911b77ffffffffffffffff00000000000000000000000000000000166004820152602401602060405180830381865afa158015611945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119699190613cc8565b156119a0576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119b86119b36040830160208401613404565b61261a565b6119d86119cb6040830160208401613404565b61033a60a084018461375a565b611a1d576119e960a082018261375a565b6040517f24eb47e50000000000000000000000000000000000000000000000000000000081526004016109619291906138be565b611813611a306040830160208401613404565b8260600135612740565b60008151600003611a6c57507f0000000000000000000000000000000000000000000000000000000000000000919050565b8151602014611aa957816040517f953576f7000000000000000000000000000000000000000000000000000000008152600401610961919061321e565b600082806020019051810190611abf9190613ce5565b905060ff81111561067857826040517f953576f7000000000000000000000000000000000000000000000000000000008152600401610961919061321e565b60007f000000000000000000000000000000000000000000000000000000000000000060ff168260ff1603611b34575081610678565b7f000000000000000000000000000000000000000000000000000000000000000060ff168260ff161115611c1f576000611b8e7f000000000000000000000000000000000000000000000000000000000000000084613d2d565b9050604d8160ff161115611c02576040517fa9cb113d00000000000000000000000000000000000000000000000000000000815260ff80851660048301527f000000000000000000000000000000000000000000000000000000000000000016602482015260448101859052606401610961565b611c0d81600a613e66565b611c179085613e75565b915050610678565b6000611c4b837f0000000000000000000000000000000000000000000000000000000000000000613d2d565b9050604d8160ff161180611c925750611c6581600a613e66565b611c8f907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613e75565b84115b15611cfd576040517fa9cb113d00000000000000000000000000000000000000000000000000000000815260ff80851660048301527f000000000000000000000000000000000000000000000000000000000000000016602482015260448101859052606401610961565b611d0881600a613e66565b61088f9085613eb0565b600081815260018301602052604081205415155b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314611d7e576040517f2b5c74de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f0000000000000000000000000000000000000000000000000000000000000000611dd7576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015611e6d576000838281518110611df757611df76137cf565b60200260200101519050611e1581600261278790919063ffffffff16565b15611e645760405173ffffffffffffffffffffffffffffffffffffffff821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b50600101611dda565b5060005b81518110156109aa576000828281518110611e8e57611e8e6137cf565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ed25750611f2e565b611edd6002826127a9565b15611f2c5760405173ffffffffffffffffffffffffffffffffffffffff821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101611e71565b8051600003611f71576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805160208083019190912067ffffffffffffffff8416600090815260079092526040909120611fa3906005018261254a565b611fdd5782826040517f393b8ad2000000000000000000000000000000000000000000000000000000008152600401610961929190613ec7565b6000818152600860205260409020611ff58382613b15565b508267ffffffffffffffff167f7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea83604051610e75919061321e565b61204361029a60a0830160808401613253565b6120575761183d60a0820160808301613253565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016632cbc26bb6120a36040840160208501613404565b60405160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260809190911b77ffffffffffffffff00000000000000000000000000000000166004820152602401602060405180830381865afa158015612114573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121389190613cc8565b1561216f576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121876121826060830160408401613253565b6127cb565b61219f61219a6040830160208401613404565b61284a565b6118136121b26040830160208401613404565b8260600135612998565b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906342966c6890602401600060405180830381600087803b15801561224457600080fd5b505af11580156117fb573d6000803e3d6000fd5b60606000611d26836129dc565b6000611d268383612a37565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526122ff82606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff16426122e39190613eea565b85608001516fffffffffffffffffffffffffffffffff16612b2a565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b61232c83610afe565b61236e576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610961565b61237982600061240d565b67ffffffffffffffff8316600090815260076020526040902061239c9083612b52565b6123a781600061240d565b67ffffffffffffffff831660009081526007602052604090206123cd9060020182612b52565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b83838360405161240093929190613efd565b60405180910390a1505050565b8151156124d85781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff16101580612463575060408201516fffffffffffffffffffffffffffffffff16155b1561249c57816040517f8020d1240000000000000000000000000000000000000000000000000000000081526004016109619190613f80565b80156124d4576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b60408201516fffffffffffffffffffffffffffffffff16151580612511575060208201516fffffffffffffffffffffffffffffffff1615155b156124d457816040517fd68af9cc0000000000000000000000000000000000000000000000000000000081526004016109619190613f80565b6000611d268383612cf4565b3373ffffffffffffffffffffffffffffffffffffffff8216036125a5576040517fdad89dca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61262381610afe565b612665576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610961565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925233602483015273ffffffffffffffffffffffffffffffffffffffff16906383826b2b90604401602060405180830381865afa1580156126e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127089190613cc8565b611813576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610961565b67ffffffffffffffff821660009081526007602052604090206124d490600201827f0000000000000000000000000000000000000000000000000000000000000000612d43565b6000611d268373ffffffffffffffffffffffffffffffffffffffff8416612a37565b6000611d268373ffffffffffffffffffffffffffffffffffffffff8416612cf4565b7f000000000000000000000000000000000000000000000000000000000000000015611813576127fc6002826130c6565b611813576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610961565b61285381610afe565b612895576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610961565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925273ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa15801561290e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129329190613fbc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611813576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610961565b67ffffffffffffffff821660009081526007602052604090206124d490827f0000000000000000000000000000000000000000000000000000000000000000612d43565b606081600001805480602002602001604051908101604052809291908181526020018280548015610ffb57602002820191906000526020600020905b815481526020019060010190808311612a185750505050509050919050565b60008181526001830160205260408120548015612b20576000612a5b600183613eea565b8554909150600090612a6f90600190613eea565b9050808214612ad4576000866000018281548110612a8f57612a8f6137cf565b9060005260206000200154905080876000018481548110612ab257612ab26137cf565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612ae557612ae5613fd9565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610678565b6000915050610678565b6000612b4985612b3a8486613eb0565b612b449087614008565b6130f5565b95945050505050565b8154600090612b7b90700100000000000000000000000000000000900463ffffffff1642613eea565b90508015612c1d5760018301548354612bc3916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416612b2a565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b60208201518354612c43916fffffffffffffffffffffffffffffffff90811691166130f5565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c1990612400908490613f80565b6000818152600183016020526040812054612d3b57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610678565b506000610678565b825474010000000000000000000000000000000000000000900460ff161580612d6a575081155b15612d7457505050565b825460018401546fffffffffffffffffffffffffffffffff80831692911690600090612dba90700100000000000000000000000000000000900463ffffffff1642613eea565b90508015612e7a5781831115612dfc576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001860154612e369083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16612b2a565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b84821015612f315773ffffffffffffffffffffffffffffffffffffffff8416612ed9576040517ff94ebcd10000000000000000000000000000000000000000000000000000000081526004810183905260248101869052604401610961565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff85166044820152606401610961565b848310156130445760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16906000908290612f759082613eea565b612f7f878a613eea565b612f899190614008565b612f939190613e75565b905073ffffffffffffffffffffffffffffffffffffffff8616612fec576040517f15279c080000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610961565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff87166044820152606401610961565b61304e8584613eea565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515611d26565b60008183106131045781611d26565b5090919050565b508054613117906137fe565b6000825580601f10613127575050565b601f016020900490600052602060002090810190611813919061315f565b508054600082559060005260206000209081019061181391905b5b808211156131745760008155600101613160565b5090565b60006020828403121561318a57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611d2657600080fd5b6000815180845260005b818110156131e0576020818501810151868301820152016131c4565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000611d2660208301846131ba565b73ffffffffffffffffffffffffffffffffffffffff8116811461181357600080fd5b60006020828403121561326557600080fd5b8135611d2681613231565b60006020828403121561328257600080fd5b813567ffffffffffffffff81111561329957600080fd5b82016101008185031215611d2657600080fd5b803567ffffffffffffffff811681146132c457600080fd5b919050565b6000806000604084860312156132de57600080fd5b6132e7846132ac565b9250602084013567ffffffffffffffff8082111561330457600080fd5b818601915086601f83011261331857600080fd5b81358181111561332757600080fd5b87602082850101111561333957600080fd5b6020830194508093505050509250925092565b60008083601f84011261335e57600080fd5b50813567ffffffffffffffff81111561337657600080fd5b6020830191508360208260051b850101111561339157600080fd5b9250929050565b600080600080604085870312156133ae57600080fd5b843567ffffffffffffffff808211156133c657600080fd5b6133d28883890161334c565b909650945060208701359150808211156133eb57600080fd5b506133f88782880161334c565b95989497509550505050565b60006020828403121561341657600080fd5b611d26826132ac565b60006020828403121561343157600080fd5b813567ffffffffffffffff81111561344857600080fd5b820160a08185031215611d2657600080fd5b60208152600082516040602084015261347660608401826131ba565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016040850152612b4982826131ba565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015613526577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526135148583516131ba565b945092850192908501906001016134da565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561358157835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161354f565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561358157835167ffffffffffffffff16835292840192918401916001016135a9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613621576136216135cf565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561366e5761366e6135cf565b604052919050565b801515811461181357600080fd5b80356fffffffffffffffffffffffffffffffff811681146132c457600080fd5b6000606082840312156136b657600080fd5b6040516060810181811067ffffffffffffffff821117156136d9576136d96135cf565b60405290508082356136ea81613676565b81526136f860208401613684565b602082015261370960408401613684565b60408201525092915050565b600080600060e0848603121561372a57600080fd5b613733846132ac565b925061374285602086016136a4565b915061375185608086016136a4565b90509250925092565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261378f57600080fd5b83018035915067ffffffffffffffff8211156137aa57600080fd5b60200191503681900382131561339157600080fd5b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600181811c9082168061381257607f821691505b60208210810361384b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b67ffffffffffffffff84168152604060208201526000612b49604083018486613851565b60208152600061088f602083018486613851565b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee183360301811261390657600080fd5b9190910192915050565b600082601f83011261392157600080fd5b813567ffffffffffffffff81111561393b5761393b6135cf565b61396c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613627565b81815284602083860101111561398157600080fd5b816020850160208301376000918101602001919091529392505050565b600061012082360312156139b157600080fd5b6139b96135fe565b6139c2836132ac565b815260208084013567ffffffffffffffff808211156139e057600080fd5b9085019036601f8301126139f357600080fd5b813581811115613a0557613a056135cf565b8060051b613a14858201613627565b9182528381018501918581019036841115613a2e57600080fd5b86860192505b83831015613a6a57823585811115613a4c5760008081fd5b613a5a3689838a0101613910565b8352509186019190860190613a34565b8087890152505050506040860135925080831115613a8757600080fd5b5050613a9536828601613910565b604083015250613aa836606085016136a4565b6060820152613aba3660c085016136a4565b608082015292915050565b601f8211156109aa576000816000526020600020601f850160051c81016020861015613aee5750805b601f850160051c820191505b81811015613b0d57828155600101613afa565b505050505050565b815167ffffffffffffffff811115613b2f57613b2f6135cf565b613b4381613b3d84546137fe565b84613ac5565b602080601f831160018114613b965760008415613b605750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613b0d565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613be357888601518255948401946001909101908401613bc4565b5085821015613c1f57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff87168352806020840152613c53818401876131ba565b8551151560408581019190915260208701516fffffffffffffffffffffffffffffffff9081166060870152908701511660808501529150613c919050565b8251151560a083015260208301516fffffffffffffffffffffffffffffffff90811660c084015260408401511660e0830152612b49565b600060208284031215613cda57600080fd5b8151611d2681613676565b600060208284031215613cf757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff828116828216039081111561067857610678613cfe565b600181815b80851115613d9f57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613d8557613d85613cfe565b80851615613d9257918102915b93841c9390800290613d4b565b509250929050565b600082613db657506001610678565b81613dc357506000610678565b8160018114613dd95760028114613de357613dff565b6001915050610678565b60ff841115613df457613df4613cfe565b50506001821b610678565b5060208310610133831016604e8410600b8410161715613e22575081810a610678565b613e2c8383613d46565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613e5e57613e5e613cfe565b029392505050565b6000611d2660ff841683613da7565b600082613eab577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b808202811582820484141761067857610678613cfe565b67ffffffffffffffff8316815260406020820152600061088f60408301846131ba565b8181038181111561067857610678613cfe565b67ffffffffffffffff8416815260e08101613f4960208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c083015261088f565b6060810161067882848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b600060208284031215613fce57600080fd5b8151611d2681613231565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b8082018082111561067857610678613cfe56fea164736f6c6343000818000a", +} + +var BurnMintTokenPoolABI = BurnMintTokenPoolMetaData.ABI + +var BurnMintTokenPoolBin = BurnMintTokenPoolMetaData.Bin + +func DeployBurnMintTokenPool(auth *bind.TransactOpts, backend bind.ContractBackend, token common.Address, localTokenDecimals uint8, allowlist []common.Address, rmnProxy common.Address, router common.Address) (common.Address, *generated_zks.Transaction, *BurnMintTokenPool, error) { + parsed, err := BurnMintTokenPoolMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(BurnMintTokenPoolZKBin), backend, token, localTokenDecimals, allowlist, rmnProxy, router) + contractReturn := &BurnMintTokenPool{address: address, abi: *parsed, BurnMintTokenPoolCaller: BurnMintTokenPoolCaller{contract: contractBind}, BurnMintTokenPoolTransactor: BurnMintTokenPoolTransactor{contract: contractBind}, BurnMintTokenPoolFilterer: BurnMintTokenPoolFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(BurnMintTokenPoolBin), backend, token, localTokenDecimals, allowlist, rmnProxy, router) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &BurnMintTokenPool{address: address, abi: *parsed, BurnMintTokenPoolCaller: BurnMintTokenPoolCaller{contract: contract}, BurnMintTokenPoolTransactor: BurnMintTokenPoolTransactor{contract: contract}, BurnMintTokenPoolFilterer: BurnMintTokenPoolFilterer{contract: contract}}, nil +} + +type BurnMintTokenPool struct { + address common.Address + abi abi.ABI + BurnMintTokenPoolCaller + BurnMintTokenPoolTransactor + BurnMintTokenPoolFilterer +} + +type BurnMintTokenPoolCaller struct { + contract *bind.BoundContract +} + +type BurnMintTokenPoolTransactor struct { + contract *bind.BoundContract +} + +type BurnMintTokenPoolFilterer struct { + contract *bind.BoundContract +} + +type BurnMintTokenPoolSession struct { + Contract *BurnMintTokenPool + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type BurnMintTokenPoolCallerSession struct { + Contract *BurnMintTokenPoolCaller + CallOpts bind.CallOpts +} + +type BurnMintTokenPoolTransactorSession struct { + Contract *BurnMintTokenPoolTransactor + TransactOpts bind.TransactOpts +} + +type BurnMintTokenPoolRaw struct { + Contract *BurnMintTokenPool +} + +type BurnMintTokenPoolCallerRaw struct { + Contract *BurnMintTokenPoolCaller +} + +type BurnMintTokenPoolTransactorRaw struct { + Contract *BurnMintTokenPoolTransactor +} + +func NewBurnMintTokenPool(address common.Address, backend bind.ContractBackend) (*BurnMintTokenPool, error) { + abi, err := abi.JSON(strings.NewReader(BurnMintTokenPoolABI)) + if err != nil { + return nil, err + } + contract, err := bindBurnMintTokenPool(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &BurnMintTokenPool{address: address, abi: abi, BurnMintTokenPoolCaller: BurnMintTokenPoolCaller{contract: contract}, BurnMintTokenPoolTransactor: BurnMintTokenPoolTransactor{contract: contract}, BurnMintTokenPoolFilterer: BurnMintTokenPoolFilterer{contract: contract}}, nil +} + +func NewBurnMintTokenPoolCaller(address common.Address, caller bind.ContractCaller) (*BurnMintTokenPoolCaller, error) { + contract, err := bindBurnMintTokenPool(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &BurnMintTokenPoolCaller{contract: contract}, nil +} + +func NewBurnMintTokenPoolTransactor(address common.Address, transactor bind.ContractTransactor) (*BurnMintTokenPoolTransactor, error) { + contract, err := bindBurnMintTokenPool(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &BurnMintTokenPoolTransactor{contract: contract}, nil +} + +func NewBurnMintTokenPoolFilterer(address common.Address, filterer bind.ContractFilterer) (*BurnMintTokenPoolFilterer, error) { + contract, err := bindBurnMintTokenPool(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &BurnMintTokenPoolFilterer{contract: contract}, nil +} + +func bindBurnMintTokenPool(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := BurnMintTokenPoolMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_BurnMintTokenPool *BurnMintTokenPoolRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BurnMintTokenPool.Contract.BurnMintTokenPoolCaller.contract.Call(opts, result, method, params...) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.BurnMintTokenPoolTransactor.contract.Transfer(opts) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.BurnMintTokenPoolTransactor.contract.Transact(opts, method, params...) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BurnMintTokenPool.Contract.contract.Call(opts, result, method, params...) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.contract.Transfer(opts) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.contract.Transact(opts, method, params...) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCaller) GetAllowList(opts *bind.CallOpts) ([]common.Address, error) { + var out []interface{} + err := _BurnMintTokenPool.contract.Call(opts, &out, "getAllowList") + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) GetAllowList() ([]common.Address, error) { + return _BurnMintTokenPool.Contract.GetAllowList(&_BurnMintTokenPool.CallOpts) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCallerSession) GetAllowList() ([]common.Address, error) { + return _BurnMintTokenPool.Contract.GetAllowList(&_BurnMintTokenPool.CallOpts) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCaller) GetAllowListEnabled(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _BurnMintTokenPool.contract.Call(opts, &out, "getAllowListEnabled") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) GetAllowListEnabled() (bool, error) { + return _BurnMintTokenPool.Contract.GetAllowListEnabled(&_BurnMintTokenPool.CallOpts) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCallerSession) GetAllowListEnabled() (bool, error) { + return _BurnMintTokenPool.Contract.GetAllowListEnabled(&_BurnMintTokenPool.CallOpts) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCaller) GetCurrentInboundRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + var out []interface{} + err := _BurnMintTokenPool.contract.Call(opts, &out, "getCurrentInboundRateLimiterState", remoteChainSelector) + + if err != nil { + return *new(RateLimiterTokenBucket), err + } + + out0 := *abi.ConvertType(out[0], new(RateLimiterTokenBucket)).(*RateLimiterTokenBucket) + + return out0, err + +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) GetCurrentInboundRateLimiterState(remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + return _BurnMintTokenPool.Contract.GetCurrentInboundRateLimiterState(&_BurnMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCallerSession) GetCurrentInboundRateLimiterState(remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + return _BurnMintTokenPool.Contract.GetCurrentInboundRateLimiterState(&_BurnMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCaller) GetCurrentOutboundRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + var out []interface{} + err := _BurnMintTokenPool.contract.Call(opts, &out, "getCurrentOutboundRateLimiterState", remoteChainSelector) + + if err != nil { + return *new(RateLimiterTokenBucket), err + } + + out0 := *abi.ConvertType(out[0], new(RateLimiterTokenBucket)).(*RateLimiterTokenBucket) + + return out0, err + +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) GetCurrentOutboundRateLimiterState(remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + return _BurnMintTokenPool.Contract.GetCurrentOutboundRateLimiterState(&_BurnMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCallerSession) GetCurrentOutboundRateLimiterState(remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + return _BurnMintTokenPool.Contract.GetCurrentOutboundRateLimiterState(&_BurnMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCaller) GetRateLimitAdmin(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BurnMintTokenPool.contract.Call(opts, &out, "getRateLimitAdmin") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) GetRateLimitAdmin() (common.Address, error) { + return _BurnMintTokenPool.Contract.GetRateLimitAdmin(&_BurnMintTokenPool.CallOpts) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCallerSession) GetRateLimitAdmin() (common.Address, error) { + return _BurnMintTokenPool.Contract.GetRateLimitAdmin(&_BurnMintTokenPool.CallOpts) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCaller) GetRemotePools(opts *bind.CallOpts, remoteChainSelector uint64) ([][]byte, error) { + var out []interface{} + err := _BurnMintTokenPool.contract.Call(opts, &out, "getRemotePools", remoteChainSelector) + + if err != nil { + return *new([][]byte), err + } + + out0 := *abi.ConvertType(out[0], new([][]byte)).(*[][]byte) + + return out0, err + +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) GetRemotePools(remoteChainSelector uint64) ([][]byte, error) { + return _BurnMintTokenPool.Contract.GetRemotePools(&_BurnMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCallerSession) GetRemotePools(remoteChainSelector uint64) ([][]byte, error) { + return _BurnMintTokenPool.Contract.GetRemotePools(&_BurnMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCaller) GetRemoteToken(opts *bind.CallOpts, remoteChainSelector uint64) ([]byte, error) { + var out []interface{} + err := _BurnMintTokenPool.contract.Call(opts, &out, "getRemoteToken", remoteChainSelector) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) GetRemoteToken(remoteChainSelector uint64) ([]byte, error) { + return _BurnMintTokenPool.Contract.GetRemoteToken(&_BurnMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCallerSession) GetRemoteToken(remoteChainSelector uint64) ([]byte, error) { + return _BurnMintTokenPool.Contract.GetRemoteToken(&_BurnMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCaller) GetRmnProxy(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BurnMintTokenPool.contract.Call(opts, &out, "getRmnProxy") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) GetRmnProxy() (common.Address, error) { + return _BurnMintTokenPool.Contract.GetRmnProxy(&_BurnMintTokenPool.CallOpts) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCallerSession) GetRmnProxy() (common.Address, error) { + return _BurnMintTokenPool.Contract.GetRmnProxy(&_BurnMintTokenPool.CallOpts) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCaller) GetRouter(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BurnMintTokenPool.contract.Call(opts, &out, "getRouter") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) GetRouter() (common.Address, error) { + return _BurnMintTokenPool.Contract.GetRouter(&_BurnMintTokenPool.CallOpts) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCallerSession) GetRouter() (common.Address, error) { + return _BurnMintTokenPool.Contract.GetRouter(&_BurnMintTokenPool.CallOpts) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCaller) GetSupportedChains(opts *bind.CallOpts) ([]uint64, error) { + var out []interface{} + err := _BurnMintTokenPool.contract.Call(opts, &out, "getSupportedChains") + + if err != nil { + return *new([]uint64), err + } + + out0 := *abi.ConvertType(out[0], new([]uint64)).(*[]uint64) + + return out0, err + +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) GetSupportedChains() ([]uint64, error) { + return _BurnMintTokenPool.Contract.GetSupportedChains(&_BurnMintTokenPool.CallOpts) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCallerSession) GetSupportedChains() ([]uint64, error) { + return _BurnMintTokenPool.Contract.GetSupportedChains(&_BurnMintTokenPool.CallOpts) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCaller) GetToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BurnMintTokenPool.contract.Call(opts, &out, "getToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) GetToken() (common.Address, error) { + return _BurnMintTokenPool.Contract.GetToken(&_BurnMintTokenPool.CallOpts) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCallerSession) GetToken() (common.Address, error) { + return _BurnMintTokenPool.Contract.GetToken(&_BurnMintTokenPool.CallOpts) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCaller) GetTokenDecimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _BurnMintTokenPool.contract.Call(opts, &out, "getTokenDecimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) GetTokenDecimals() (uint8, error) { + return _BurnMintTokenPool.Contract.GetTokenDecimals(&_BurnMintTokenPool.CallOpts) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCallerSession) GetTokenDecimals() (uint8, error) { + return _BurnMintTokenPool.Contract.GetTokenDecimals(&_BurnMintTokenPool.CallOpts) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCaller) IsRemotePool(opts *bind.CallOpts, remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) { + var out []interface{} + err := _BurnMintTokenPool.contract.Call(opts, &out, "isRemotePool", remoteChainSelector, remotePoolAddress) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) IsRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) { + return _BurnMintTokenPool.Contract.IsRemotePool(&_BurnMintTokenPool.CallOpts, remoteChainSelector, remotePoolAddress) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCallerSession) IsRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) { + return _BurnMintTokenPool.Contract.IsRemotePool(&_BurnMintTokenPool.CallOpts, remoteChainSelector, remotePoolAddress) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCaller) IsSupportedChain(opts *bind.CallOpts, remoteChainSelector uint64) (bool, error) { + var out []interface{} + err := _BurnMintTokenPool.contract.Call(opts, &out, "isSupportedChain", remoteChainSelector) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) IsSupportedChain(remoteChainSelector uint64) (bool, error) { + return _BurnMintTokenPool.Contract.IsSupportedChain(&_BurnMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCallerSession) IsSupportedChain(remoteChainSelector uint64) (bool, error) { + return _BurnMintTokenPool.Contract.IsSupportedChain(&_BurnMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCaller) IsSupportedToken(opts *bind.CallOpts, token common.Address) (bool, error) { + var out []interface{} + err := _BurnMintTokenPool.contract.Call(opts, &out, "isSupportedToken", token) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) IsSupportedToken(token common.Address) (bool, error) { + return _BurnMintTokenPool.Contract.IsSupportedToken(&_BurnMintTokenPool.CallOpts, token) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCallerSession) IsSupportedToken(token common.Address) (bool, error) { + return _BurnMintTokenPool.Contract.IsSupportedToken(&_BurnMintTokenPool.CallOpts, token) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BurnMintTokenPool.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 + +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) Owner() (common.Address, error) { + return _BurnMintTokenPool.Contract.Owner(&_BurnMintTokenPool.CallOpts) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCallerSession) Owner() (common.Address, error) { + return _BurnMintTokenPool.Contract.Owner(&_BurnMintTokenPool.CallOpts) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _BurnMintTokenPool.contract.Call(opts, &out, "supportsInterface", interfaceId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _BurnMintTokenPool.Contract.SupportsInterface(&_BurnMintTokenPool.CallOpts, interfaceId) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _BurnMintTokenPool.Contract.SupportsInterface(&_BurnMintTokenPool.CallOpts, interfaceId) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _BurnMintTokenPool.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) TypeAndVersion() (string, error) { + return _BurnMintTokenPool.Contract.TypeAndVersion(&_BurnMintTokenPool.CallOpts) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolCallerSession) TypeAndVersion() (string, error) { + return _BurnMintTokenPool.Contract.TypeAndVersion(&_BurnMintTokenPool.CallOpts) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BurnMintTokenPool.contract.Transact(opts, "acceptOwnership") +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) AcceptOwnership() (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.AcceptOwnership(&_BurnMintTokenPool.TransactOpts) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.AcceptOwnership(&_BurnMintTokenPool.TransactOpts) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolTransactor) AddRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _BurnMintTokenPool.contract.Transact(opts, "addRemotePool", remoteChainSelector, remotePoolAddress) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) AddRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.AddRemotePool(&_BurnMintTokenPool.TransactOpts, remoteChainSelector, remotePoolAddress) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolTransactorSession) AddRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.AddRemotePool(&_BurnMintTokenPool.TransactOpts, remoteChainSelector, remotePoolAddress) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolTransactor) ApplyAllowListUpdates(opts *bind.TransactOpts, removes []common.Address, adds []common.Address) (*types.Transaction, error) { + return _BurnMintTokenPool.contract.Transact(opts, "applyAllowListUpdates", removes, adds) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) ApplyAllowListUpdates(removes []common.Address, adds []common.Address) (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.ApplyAllowListUpdates(&_BurnMintTokenPool.TransactOpts, removes, adds) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolTransactorSession) ApplyAllowListUpdates(removes []common.Address, adds []common.Address) (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.ApplyAllowListUpdates(&_BurnMintTokenPool.TransactOpts, removes, adds) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolTransactor) ApplyChainUpdates(opts *bind.TransactOpts, remoteChainSelectorsToRemove []uint64, chainsToAdd []TokenPoolChainUpdate) (*types.Transaction, error) { + return _BurnMintTokenPool.contract.Transact(opts, "applyChainUpdates", remoteChainSelectorsToRemove, chainsToAdd) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) ApplyChainUpdates(remoteChainSelectorsToRemove []uint64, chainsToAdd []TokenPoolChainUpdate) (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.ApplyChainUpdates(&_BurnMintTokenPool.TransactOpts, remoteChainSelectorsToRemove, chainsToAdd) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolTransactorSession) ApplyChainUpdates(remoteChainSelectorsToRemove []uint64, chainsToAdd []TokenPoolChainUpdate) (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.ApplyChainUpdates(&_BurnMintTokenPool.TransactOpts, remoteChainSelectorsToRemove, chainsToAdd) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolTransactor) LockOrBurn(opts *bind.TransactOpts, lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) { + return _BurnMintTokenPool.contract.Transact(opts, "lockOrBurn", lockOrBurnIn) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) LockOrBurn(lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.LockOrBurn(&_BurnMintTokenPool.TransactOpts, lockOrBurnIn) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolTransactorSession) LockOrBurn(lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.LockOrBurn(&_BurnMintTokenPool.TransactOpts, lockOrBurnIn) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolTransactor) ReleaseOrMint(opts *bind.TransactOpts, releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) { + return _BurnMintTokenPool.contract.Transact(opts, "releaseOrMint", releaseOrMintIn) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) ReleaseOrMint(releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.ReleaseOrMint(&_BurnMintTokenPool.TransactOpts, releaseOrMintIn) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolTransactorSession) ReleaseOrMint(releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.ReleaseOrMint(&_BurnMintTokenPool.TransactOpts, releaseOrMintIn) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolTransactor) RemoveRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _BurnMintTokenPool.contract.Transact(opts, "removeRemotePool", remoteChainSelector, remotePoolAddress) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) RemoveRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.RemoveRemotePool(&_BurnMintTokenPool.TransactOpts, remoteChainSelector, remotePoolAddress) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolTransactorSession) RemoveRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.RemoveRemotePool(&_BurnMintTokenPool.TransactOpts, remoteChainSelector, remotePoolAddress) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolTransactor) SetChainRateLimiterConfig(opts *bind.TransactOpts, remoteChainSelector uint64, outboundConfig RateLimiterConfig, inboundConfig RateLimiterConfig) (*types.Transaction, error) { + return _BurnMintTokenPool.contract.Transact(opts, "setChainRateLimiterConfig", remoteChainSelector, outboundConfig, inboundConfig) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) SetChainRateLimiterConfig(remoteChainSelector uint64, outboundConfig RateLimiterConfig, inboundConfig RateLimiterConfig) (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.SetChainRateLimiterConfig(&_BurnMintTokenPool.TransactOpts, remoteChainSelector, outboundConfig, inboundConfig) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolTransactorSession) SetChainRateLimiterConfig(remoteChainSelector uint64, outboundConfig RateLimiterConfig, inboundConfig RateLimiterConfig) (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.SetChainRateLimiterConfig(&_BurnMintTokenPool.TransactOpts, remoteChainSelector, outboundConfig, inboundConfig) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolTransactor) SetRateLimitAdmin(opts *bind.TransactOpts, rateLimitAdmin common.Address) (*types.Transaction, error) { + return _BurnMintTokenPool.contract.Transact(opts, "setRateLimitAdmin", rateLimitAdmin) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) SetRateLimitAdmin(rateLimitAdmin common.Address) (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.SetRateLimitAdmin(&_BurnMintTokenPool.TransactOpts, rateLimitAdmin) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolTransactorSession) SetRateLimitAdmin(rateLimitAdmin common.Address) (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.SetRateLimitAdmin(&_BurnMintTokenPool.TransactOpts, rateLimitAdmin) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolTransactor) SetRouter(opts *bind.TransactOpts, newRouter common.Address) (*types.Transaction, error) { + return _BurnMintTokenPool.contract.Transact(opts, "setRouter", newRouter) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) SetRouter(newRouter common.Address) (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.SetRouter(&_BurnMintTokenPool.TransactOpts, newRouter) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolTransactorSession) SetRouter(newRouter common.Address) (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.SetRouter(&_BurnMintTokenPool.TransactOpts, newRouter) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _BurnMintTokenPool.contract.Transact(opts, "transferOwnership", to) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.TransferOwnership(&_BurnMintTokenPool.TransactOpts, to) +} + +func (_BurnMintTokenPool *BurnMintTokenPoolTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _BurnMintTokenPool.Contract.TransferOwnership(&_BurnMintTokenPool.TransactOpts, to) +} + +type BurnMintTokenPoolAllowListAddIterator struct { + Event *BurnMintTokenPoolAllowListAdd + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnMintTokenPoolAllowListAddIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolAllowListAdd) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolAllowListAdd) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnMintTokenPoolAllowListAddIterator) Error() error { + return it.fail +} + +func (it *BurnMintTokenPoolAllowListAddIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnMintTokenPoolAllowListAdd struct { + Sender common.Address + Raw types.Log +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) FilterAllowListAdd(opts *bind.FilterOpts) (*BurnMintTokenPoolAllowListAddIterator, error) { + + logs, sub, err := _BurnMintTokenPool.contract.FilterLogs(opts, "AllowListAdd") + if err != nil { + return nil, err + } + return &BurnMintTokenPoolAllowListAddIterator{contract: _BurnMintTokenPool.contract, event: "AllowListAdd", logs: logs, sub: sub}, nil +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) WatchAllowListAdd(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolAllowListAdd) (event.Subscription, error) { + + logs, sub, err := _BurnMintTokenPool.contract.WatchLogs(opts, "AllowListAdd") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnMintTokenPoolAllowListAdd) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "AllowListAdd", 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 +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) ParseAllowListAdd(log types.Log) (*BurnMintTokenPoolAllowListAdd, error) { + event := new(BurnMintTokenPoolAllowListAdd) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "AllowListAdd", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnMintTokenPoolAllowListRemoveIterator struct { + Event *BurnMintTokenPoolAllowListRemove + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnMintTokenPoolAllowListRemoveIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolAllowListRemove) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolAllowListRemove) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnMintTokenPoolAllowListRemoveIterator) Error() error { + return it.fail +} + +func (it *BurnMintTokenPoolAllowListRemoveIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnMintTokenPoolAllowListRemove struct { + Sender common.Address + Raw types.Log +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) FilterAllowListRemove(opts *bind.FilterOpts) (*BurnMintTokenPoolAllowListRemoveIterator, error) { + + logs, sub, err := _BurnMintTokenPool.contract.FilterLogs(opts, "AllowListRemove") + if err != nil { + return nil, err + } + return &BurnMintTokenPoolAllowListRemoveIterator{contract: _BurnMintTokenPool.contract, event: "AllowListRemove", logs: logs, sub: sub}, nil +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) WatchAllowListRemove(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolAllowListRemove) (event.Subscription, error) { + + logs, sub, err := _BurnMintTokenPool.contract.WatchLogs(opts, "AllowListRemove") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnMintTokenPoolAllowListRemove) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "AllowListRemove", 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 +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) ParseAllowListRemove(log types.Log) (*BurnMintTokenPoolAllowListRemove, error) { + event := new(BurnMintTokenPoolAllowListRemove) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "AllowListRemove", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnMintTokenPoolBurnedIterator struct { + Event *BurnMintTokenPoolBurned + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnMintTokenPoolBurnedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolBurned) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolBurned) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnMintTokenPoolBurnedIterator) Error() error { + return it.fail +} + +func (it *BurnMintTokenPoolBurnedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnMintTokenPoolBurned struct { + Sender common.Address + Amount *big.Int + Raw types.Log +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) FilterBurned(opts *bind.FilterOpts, sender []common.Address) (*BurnMintTokenPoolBurnedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _BurnMintTokenPool.contract.FilterLogs(opts, "Burned", senderRule) + if err != nil { + return nil, err + } + return &BurnMintTokenPoolBurnedIterator{contract: _BurnMintTokenPool.contract, event: "Burned", logs: logs, sub: sub}, nil +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) WatchBurned(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolBurned, sender []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _BurnMintTokenPool.contract.WatchLogs(opts, "Burned", senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnMintTokenPoolBurned) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "Burned", 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 +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) ParseBurned(log types.Log) (*BurnMintTokenPoolBurned, error) { + event := new(BurnMintTokenPoolBurned) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "Burned", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnMintTokenPoolChainAddedIterator struct { + Event *BurnMintTokenPoolChainAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnMintTokenPoolChainAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolChainAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolChainAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnMintTokenPoolChainAddedIterator) Error() error { + return it.fail +} + +func (it *BurnMintTokenPoolChainAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnMintTokenPoolChainAdded struct { + RemoteChainSelector uint64 + RemoteToken []byte + OutboundRateLimiterConfig RateLimiterConfig + InboundRateLimiterConfig RateLimiterConfig + Raw types.Log +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) FilterChainAdded(opts *bind.FilterOpts) (*BurnMintTokenPoolChainAddedIterator, error) { + + logs, sub, err := _BurnMintTokenPool.contract.FilterLogs(opts, "ChainAdded") + if err != nil { + return nil, err + } + return &BurnMintTokenPoolChainAddedIterator{contract: _BurnMintTokenPool.contract, event: "ChainAdded", logs: logs, sub: sub}, nil +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) WatchChainAdded(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolChainAdded) (event.Subscription, error) { + + logs, sub, err := _BurnMintTokenPool.contract.WatchLogs(opts, "ChainAdded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnMintTokenPoolChainAdded) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "ChainAdded", 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 +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) ParseChainAdded(log types.Log) (*BurnMintTokenPoolChainAdded, error) { + event := new(BurnMintTokenPoolChainAdded) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "ChainAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnMintTokenPoolChainConfiguredIterator struct { + Event *BurnMintTokenPoolChainConfigured + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnMintTokenPoolChainConfiguredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolChainConfigured) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolChainConfigured) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnMintTokenPoolChainConfiguredIterator) Error() error { + return it.fail +} + +func (it *BurnMintTokenPoolChainConfiguredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnMintTokenPoolChainConfigured struct { + RemoteChainSelector uint64 + OutboundRateLimiterConfig RateLimiterConfig + InboundRateLimiterConfig RateLimiterConfig + Raw types.Log +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) FilterChainConfigured(opts *bind.FilterOpts) (*BurnMintTokenPoolChainConfiguredIterator, error) { + + logs, sub, err := _BurnMintTokenPool.contract.FilterLogs(opts, "ChainConfigured") + if err != nil { + return nil, err + } + return &BurnMintTokenPoolChainConfiguredIterator{contract: _BurnMintTokenPool.contract, event: "ChainConfigured", logs: logs, sub: sub}, nil +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) WatchChainConfigured(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolChainConfigured) (event.Subscription, error) { + + logs, sub, err := _BurnMintTokenPool.contract.WatchLogs(opts, "ChainConfigured") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnMintTokenPoolChainConfigured) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "ChainConfigured", 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 +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) ParseChainConfigured(log types.Log) (*BurnMintTokenPoolChainConfigured, error) { + event := new(BurnMintTokenPoolChainConfigured) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "ChainConfigured", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnMintTokenPoolChainRemovedIterator struct { + Event *BurnMintTokenPoolChainRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnMintTokenPoolChainRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolChainRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolChainRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnMintTokenPoolChainRemovedIterator) Error() error { + return it.fail +} + +func (it *BurnMintTokenPoolChainRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnMintTokenPoolChainRemoved struct { + RemoteChainSelector uint64 + Raw types.Log +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) FilterChainRemoved(opts *bind.FilterOpts) (*BurnMintTokenPoolChainRemovedIterator, error) { + + logs, sub, err := _BurnMintTokenPool.contract.FilterLogs(opts, "ChainRemoved") + if err != nil { + return nil, err + } + return &BurnMintTokenPoolChainRemovedIterator{contract: _BurnMintTokenPool.contract, event: "ChainRemoved", logs: logs, sub: sub}, nil +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolChainRemoved) (event.Subscription, error) { + + logs, sub, err := _BurnMintTokenPool.contract.WatchLogs(opts, "ChainRemoved") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnMintTokenPoolChainRemoved) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "ChainRemoved", 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 +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) ParseChainRemoved(log types.Log) (*BurnMintTokenPoolChainRemoved, error) { + event := new(BurnMintTokenPoolChainRemoved) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "ChainRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnMintTokenPoolConfigChangedIterator struct { + Event *BurnMintTokenPoolConfigChanged + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnMintTokenPoolConfigChangedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolConfigChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolConfigChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnMintTokenPoolConfigChangedIterator) Error() error { + return it.fail +} + +func (it *BurnMintTokenPoolConfigChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnMintTokenPoolConfigChanged struct { + Config RateLimiterConfig + Raw types.Log +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) FilterConfigChanged(opts *bind.FilterOpts) (*BurnMintTokenPoolConfigChangedIterator, error) { + + logs, sub, err := _BurnMintTokenPool.contract.FilterLogs(opts, "ConfigChanged") + if err != nil { + return nil, err + } + return &BurnMintTokenPoolConfigChangedIterator{contract: _BurnMintTokenPool.contract, event: "ConfigChanged", logs: logs, sub: sub}, nil +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) WatchConfigChanged(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolConfigChanged) (event.Subscription, error) { + + logs, sub, err := _BurnMintTokenPool.contract.WatchLogs(opts, "ConfigChanged") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnMintTokenPoolConfigChanged) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "ConfigChanged", 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 +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) ParseConfigChanged(log types.Log) (*BurnMintTokenPoolConfigChanged, error) { + event := new(BurnMintTokenPoolConfigChanged) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "ConfigChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnMintTokenPoolLockedIterator struct { + Event *BurnMintTokenPoolLocked + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnMintTokenPoolLockedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolLocked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolLocked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnMintTokenPoolLockedIterator) Error() error { + return it.fail +} + +func (it *BurnMintTokenPoolLockedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnMintTokenPoolLocked struct { + Sender common.Address + Amount *big.Int + Raw types.Log +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) FilterLocked(opts *bind.FilterOpts, sender []common.Address) (*BurnMintTokenPoolLockedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _BurnMintTokenPool.contract.FilterLogs(opts, "Locked", senderRule) + if err != nil { + return nil, err + } + return &BurnMintTokenPoolLockedIterator{contract: _BurnMintTokenPool.contract, event: "Locked", logs: logs, sub: sub}, nil +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) WatchLocked(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolLocked, sender []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _BurnMintTokenPool.contract.WatchLogs(opts, "Locked", senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnMintTokenPoolLocked) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "Locked", 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 +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) ParseLocked(log types.Log) (*BurnMintTokenPoolLocked, error) { + event := new(BurnMintTokenPoolLocked) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "Locked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnMintTokenPoolMintedIterator struct { + Event *BurnMintTokenPoolMinted + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnMintTokenPoolMintedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolMinted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolMinted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnMintTokenPoolMintedIterator) Error() error { + return it.fail +} + +func (it *BurnMintTokenPoolMintedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnMintTokenPoolMinted struct { + Sender common.Address + Recipient common.Address + Amount *big.Int + Raw types.Log +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) FilterMinted(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*BurnMintTokenPoolMintedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _BurnMintTokenPool.contract.FilterLogs(opts, "Minted", senderRule, recipientRule) + if err != nil { + return nil, err + } + return &BurnMintTokenPoolMintedIterator{contract: _BurnMintTokenPool.contract, event: "Minted", logs: logs, sub: sub}, nil +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) WatchMinted(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolMinted, sender []common.Address, recipient []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _BurnMintTokenPool.contract.WatchLogs(opts, "Minted", senderRule, recipientRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnMintTokenPoolMinted) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "Minted", 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 +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) ParseMinted(log types.Log) (*BurnMintTokenPoolMinted, error) { + event := new(BurnMintTokenPoolMinted) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "Minted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnMintTokenPoolOwnershipTransferRequestedIterator struct { + Event *BurnMintTokenPoolOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnMintTokenPoolOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnMintTokenPoolOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *BurnMintTokenPoolOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnMintTokenPoolOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*BurnMintTokenPoolOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _BurnMintTokenPool.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &BurnMintTokenPoolOwnershipTransferRequestedIterator{contract: _BurnMintTokenPool.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _BurnMintTokenPool.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnMintTokenPoolOwnershipTransferRequested) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "OwnershipTransferRequested", 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 +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) ParseOwnershipTransferRequested(log types.Log) (*BurnMintTokenPoolOwnershipTransferRequested, error) { + event := new(BurnMintTokenPoolOwnershipTransferRequested) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnMintTokenPoolOwnershipTransferredIterator struct { + Event *BurnMintTokenPoolOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnMintTokenPoolOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnMintTokenPoolOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *BurnMintTokenPoolOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnMintTokenPoolOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*BurnMintTokenPoolOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _BurnMintTokenPool.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &BurnMintTokenPoolOwnershipTransferredIterator{contract: _BurnMintTokenPool.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _BurnMintTokenPool.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnMintTokenPoolOwnershipTransferred) + if err := _BurnMintTokenPool.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 +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) ParseOwnershipTransferred(log types.Log) (*BurnMintTokenPoolOwnershipTransferred, error) { + event := new(BurnMintTokenPoolOwnershipTransferred) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnMintTokenPoolRateLimitAdminSetIterator struct { + Event *BurnMintTokenPoolRateLimitAdminSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnMintTokenPoolRateLimitAdminSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolRateLimitAdminSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolRateLimitAdminSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnMintTokenPoolRateLimitAdminSetIterator) Error() error { + return it.fail +} + +func (it *BurnMintTokenPoolRateLimitAdminSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnMintTokenPoolRateLimitAdminSet struct { + RateLimitAdmin common.Address + Raw types.Log +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) FilterRateLimitAdminSet(opts *bind.FilterOpts) (*BurnMintTokenPoolRateLimitAdminSetIterator, error) { + + logs, sub, err := _BurnMintTokenPool.contract.FilterLogs(opts, "RateLimitAdminSet") + if err != nil { + return nil, err + } + return &BurnMintTokenPoolRateLimitAdminSetIterator{contract: _BurnMintTokenPool.contract, event: "RateLimitAdminSet", logs: logs, sub: sub}, nil +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) WatchRateLimitAdminSet(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolRateLimitAdminSet) (event.Subscription, error) { + + logs, sub, err := _BurnMintTokenPool.contract.WatchLogs(opts, "RateLimitAdminSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnMintTokenPoolRateLimitAdminSet) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "RateLimitAdminSet", 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 +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) ParseRateLimitAdminSet(log types.Log) (*BurnMintTokenPoolRateLimitAdminSet, error) { + event := new(BurnMintTokenPoolRateLimitAdminSet) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "RateLimitAdminSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnMintTokenPoolReleasedIterator struct { + Event *BurnMintTokenPoolReleased + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnMintTokenPoolReleasedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolReleased) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolReleased) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnMintTokenPoolReleasedIterator) Error() error { + return it.fail +} + +func (it *BurnMintTokenPoolReleasedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnMintTokenPoolReleased struct { + Sender common.Address + Recipient common.Address + Amount *big.Int + Raw types.Log +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) FilterReleased(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*BurnMintTokenPoolReleasedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _BurnMintTokenPool.contract.FilterLogs(opts, "Released", senderRule, recipientRule) + if err != nil { + return nil, err + } + return &BurnMintTokenPoolReleasedIterator{contract: _BurnMintTokenPool.contract, event: "Released", logs: logs, sub: sub}, nil +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) WatchReleased(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolReleased, sender []common.Address, recipient []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _BurnMintTokenPool.contract.WatchLogs(opts, "Released", senderRule, recipientRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnMintTokenPoolReleased) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "Released", 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 +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) ParseReleased(log types.Log) (*BurnMintTokenPoolReleased, error) { + event := new(BurnMintTokenPoolReleased) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "Released", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnMintTokenPoolRemotePoolAddedIterator struct { + Event *BurnMintTokenPoolRemotePoolAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnMintTokenPoolRemotePoolAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolRemotePoolAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolRemotePoolAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnMintTokenPoolRemotePoolAddedIterator) Error() error { + return it.fail +} + +func (it *BurnMintTokenPoolRemotePoolAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnMintTokenPoolRemotePoolAdded struct { + RemoteChainSelector uint64 + RemotePoolAddress []byte + Raw types.Log +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) FilterRemotePoolAdded(opts *bind.FilterOpts, remoteChainSelector []uint64) (*BurnMintTokenPoolRemotePoolAddedIterator, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _BurnMintTokenPool.contract.FilterLogs(opts, "RemotePoolAdded", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return &BurnMintTokenPoolRemotePoolAddedIterator{contract: _BurnMintTokenPool.contract, event: "RemotePoolAdded", logs: logs, sub: sub}, nil +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) WatchRemotePoolAdded(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolRemotePoolAdded, remoteChainSelector []uint64) (event.Subscription, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _BurnMintTokenPool.contract.WatchLogs(opts, "RemotePoolAdded", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnMintTokenPoolRemotePoolAdded) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "RemotePoolAdded", 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 +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) ParseRemotePoolAdded(log types.Log) (*BurnMintTokenPoolRemotePoolAdded, error) { + event := new(BurnMintTokenPoolRemotePoolAdded) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "RemotePoolAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnMintTokenPoolRemotePoolRemovedIterator struct { + Event *BurnMintTokenPoolRemotePoolRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnMintTokenPoolRemotePoolRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolRemotePoolRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolRemotePoolRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnMintTokenPoolRemotePoolRemovedIterator) Error() error { + return it.fail +} + +func (it *BurnMintTokenPoolRemotePoolRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnMintTokenPoolRemotePoolRemoved struct { + RemoteChainSelector uint64 + RemotePoolAddress []byte + Raw types.Log +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) FilterRemotePoolRemoved(opts *bind.FilterOpts, remoteChainSelector []uint64) (*BurnMintTokenPoolRemotePoolRemovedIterator, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _BurnMintTokenPool.contract.FilterLogs(opts, "RemotePoolRemoved", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return &BurnMintTokenPoolRemotePoolRemovedIterator{contract: _BurnMintTokenPool.contract, event: "RemotePoolRemoved", logs: logs, sub: sub}, nil +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) WatchRemotePoolRemoved(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolRemotePoolRemoved, remoteChainSelector []uint64) (event.Subscription, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _BurnMintTokenPool.contract.WatchLogs(opts, "RemotePoolRemoved", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnMintTokenPoolRemotePoolRemoved) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "RemotePoolRemoved", 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 +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) ParseRemotePoolRemoved(log types.Log) (*BurnMintTokenPoolRemotePoolRemoved, error) { + event := new(BurnMintTokenPoolRemotePoolRemoved) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "RemotePoolRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnMintTokenPoolRouterUpdatedIterator struct { + Event *BurnMintTokenPoolRouterUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnMintTokenPoolRouterUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolRouterUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolRouterUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnMintTokenPoolRouterUpdatedIterator) Error() error { + return it.fail +} + +func (it *BurnMintTokenPoolRouterUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnMintTokenPoolRouterUpdated struct { + OldRouter common.Address + NewRouter common.Address + Raw types.Log +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) FilterRouterUpdated(opts *bind.FilterOpts) (*BurnMintTokenPoolRouterUpdatedIterator, error) { + + logs, sub, err := _BurnMintTokenPool.contract.FilterLogs(opts, "RouterUpdated") + if err != nil { + return nil, err + } + return &BurnMintTokenPoolRouterUpdatedIterator{contract: _BurnMintTokenPool.contract, event: "RouterUpdated", logs: logs, sub: sub}, nil +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) WatchRouterUpdated(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolRouterUpdated) (event.Subscription, error) { + + logs, sub, err := _BurnMintTokenPool.contract.WatchLogs(opts, "RouterUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnMintTokenPoolRouterUpdated) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "RouterUpdated", 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 +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) ParseRouterUpdated(log types.Log) (*BurnMintTokenPoolRouterUpdated, error) { + event := new(BurnMintTokenPoolRouterUpdated) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "RouterUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnMintTokenPoolTokensConsumedIterator struct { + Event *BurnMintTokenPoolTokensConsumed + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnMintTokenPoolTokensConsumedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolTokensConsumed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnMintTokenPoolTokensConsumed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnMintTokenPoolTokensConsumedIterator) Error() error { + return it.fail +} + +func (it *BurnMintTokenPoolTokensConsumedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnMintTokenPoolTokensConsumed struct { + Tokens *big.Int + Raw types.Log +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) FilterTokensConsumed(opts *bind.FilterOpts) (*BurnMintTokenPoolTokensConsumedIterator, error) { + + logs, sub, err := _BurnMintTokenPool.contract.FilterLogs(opts, "TokensConsumed") + if err != nil { + return nil, err + } + return &BurnMintTokenPoolTokensConsumedIterator{contract: _BurnMintTokenPool.contract, event: "TokensConsumed", logs: logs, sub: sub}, nil +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) WatchTokensConsumed(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolTokensConsumed) (event.Subscription, error) { + + logs, sub, err := _BurnMintTokenPool.contract.WatchLogs(opts, "TokensConsumed") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnMintTokenPoolTokensConsumed) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "TokensConsumed", 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 +} + +func (_BurnMintTokenPool *BurnMintTokenPoolFilterer) ParseTokensConsumed(log types.Log) (*BurnMintTokenPoolTokensConsumed, error) { + event := new(BurnMintTokenPoolTokensConsumed) + if err := _BurnMintTokenPool.contract.UnpackLog(event, "TokensConsumed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (_BurnMintTokenPool *BurnMintTokenPool) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _BurnMintTokenPool.abi.Events["AllowListAdd"].ID: + return _BurnMintTokenPool.ParseAllowListAdd(log) + case _BurnMintTokenPool.abi.Events["AllowListRemove"].ID: + return _BurnMintTokenPool.ParseAllowListRemove(log) + case _BurnMintTokenPool.abi.Events["Burned"].ID: + return _BurnMintTokenPool.ParseBurned(log) + case _BurnMintTokenPool.abi.Events["ChainAdded"].ID: + return _BurnMintTokenPool.ParseChainAdded(log) + case _BurnMintTokenPool.abi.Events["ChainConfigured"].ID: + return _BurnMintTokenPool.ParseChainConfigured(log) + case _BurnMintTokenPool.abi.Events["ChainRemoved"].ID: + return _BurnMintTokenPool.ParseChainRemoved(log) + case _BurnMintTokenPool.abi.Events["ConfigChanged"].ID: + return _BurnMintTokenPool.ParseConfigChanged(log) + case _BurnMintTokenPool.abi.Events["Locked"].ID: + return _BurnMintTokenPool.ParseLocked(log) + case _BurnMintTokenPool.abi.Events["Minted"].ID: + return _BurnMintTokenPool.ParseMinted(log) + case _BurnMintTokenPool.abi.Events["OwnershipTransferRequested"].ID: + return _BurnMintTokenPool.ParseOwnershipTransferRequested(log) + case _BurnMintTokenPool.abi.Events["OwnershipTransferred"].ID: + return _BurnMintTokenPool.ParseOwnershipTransferred(log) + case _BurnMintTokenPool.abi.Events["RateLimitAdminSet"].ID: + return _BurnMintTokenPool.ParseRateLimitAdminSet(log) + case _BurnMintTokenPool.abi.Events["Released"].ID: + return _BurnMintTokenPool.ParseReleased(log) + case _BurnMintTokenPool.abi.Events["RemotePoolAdded"].ID: + return _BurnMintTokenPool.ParseRemotePoolAdded(log) + case _BurnMintTokenPool.abi.Events["RemotePoolRemoved"].ID: + return _BurnMintTokenPool.ParseRemotePoolRemoved(log) + case _BurnMintTokenPool.abi.Events["RouterUpdated"].ID: + return _BurnMintTokenPool.ParseRouterUpdated(log) + case _BurnMintTokenPool.abi.Events["TokensConsumed"].ID: + return _BurnMintTokenPool.ParseTokensConsumed(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (BurnMintTokenPoolAllowListAdd) Topic() common.Hash { + return common.HexToHash("0x2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d8") +} + +func (BurnMintTokenPoolAllowListRemove) Topic() common.Hash { + return common.HexToHash("0x800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf7566") +} + +func (BurnMintTokenPoolBurned) Topic() common.Hash { + return common.HexToHash("0x696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df7") +} + +func (BurnMintTokenPoolChainAdded) Topic() common.Hash { + return common.HexToHash("0x8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c2") +} + +func (BurnMintTokenPoolChainConfigured) Topic() common.Hash { + return common.HexToHash("0x0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b") +} + +func (BurnMintTokenPoolChainRemoved) Topic() common.Hash { + return common.HexToHash("0x5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d859916") +} + +func (BurnMintTokenPoolConfigChanged) Topic() common.Hash { + return common.HexToHash("0x9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19") +} + +func (BurnMintTokenPoolLocked) Topic() common.Hash { + return common.HexToHash("0x9f1ec8c880f76798e7b793325d625e9b60e4082a553c98f42b6cda368dd60008") +} + +func (BurnMintTokenPoolMinted) Topic() common.Hash { + return common.HexToHash("0x9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0") +} + +func (BurnMintTokenPoolOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (BurnMintTokenPoolOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (BurnMintTokenPoolRateLimitAdminSet) Topic() common.Hash { + return common.HexToHash("0x44676b5284b809a22248eba0da87391d79098be38bb03154be88a58bf4d09174") +} + +func (BurnMintTokenPoolReleased) Topic() common.Hash { + return common.HexToHash("0x2d87480f50083e2b2759522a8fdda59802650a8055e609a7772cf70c07748f52") +} + +func (BurnMintTokenPoolRemotePoolAdded) Topic() common.Hash { + return common.HexToHash("0x7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea") +} + +func (BurnMintTokenPoolRemotePoolRemoved) Topic() common.Hash { + return common.HexToHash("0x52d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d76") +} + +func (BurnMintTokenPoolRouterUpdated) Topic() common.Hash { + return common.HexToHash("0x02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f1684") +} + +func (BurnMintTokenPoolTokensConsumed) Topic() common.Hash { + return common.HexToHash("0x1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a") +} + +func (_BurnMintTokenPool *BurnMintTokenPool) Address() common.Address { + return _BurnMintTokenPool.address +} + +type BurnMintTokenPoolInterface interface { + GetAllowList(opts *bind.CallOpts) ([]common.Address, error) + + GetAllowListEnabled(opts *bind.CallOpts) (bool, error) + + GetCurrentInboundRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64) (RateLimiterTokenBucket, error) + + GetCurrentOutboundRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64) (RateLimiterTokenBucket, error) + + GetRateLimitAdmin(opts *bind.CallOpts) (common.Address, error) + + GetRemotePools(opts *bind.CallOpts, remoteChainSelector uint64) ([][]byte, error) + + GetRemoteToken(opts *bind.CallOpts, remoteChainSelector uint64) ([]byte, error) + + GetRmnProxy(opts *bind.CallOpts) (common.Address, error) + + GetRouter(opts *bind.CallOpts) (common.Address, error) + + GetSupportedChains(opts *bind.CallOpts) ([]uint64, error) + + GetToken(opts *bind.CallOpts) (common.Address, error) + + GetTokenDecimals(opts *bind.CallOpts) (uint8, error) + + IsRemotePool(opts *bind.CallOpts, remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) + + IsSupportedChain(opts *bind.CallOpts, remoteChainSelector uint64) (bool, error) + + IsSupportedToken(opts *bind.CallOpts, token common.Address) (bool, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + AddRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) + + ApplyAllowListUpdates(opts *bind.TransactOpts, removes []common.Address, adds []common.Address) (*types.Transaction, error) + + ApplyChainUpdates(opts *bind.TransactOpts, remoteChainSelectorsToRemove []uint64, chainsToAdd []TokenPoolChainUpdate) (*types.Transaction, error) + + LockOrBurn(opts *bind.TransactOpts, lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) + + ReleaseOrMint(opts *bind.TransactOpts, releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) + + RemoveRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) + + SetChainRateLimiterConfig(opts *bind.TransactOpts, remoteChainSelector uint64, outboundConfig RateLimiterConfig, inboundConfig RateLimiterConfig) (*types.Transaction, error) + + SetRateLimitAdmin(opts *bind.TransactOpts, rateLimitAdmin common.Address) (*types.Transaction, error) + + SetRouter(opts *bind.TransactOpts, newRouter common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + FilterAllowListAdd(opts *bind.FilterOpts) (*BurnMintTokenPoolAllowListAddIterator, error) + + WatchAllowListAdd(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolAllowListAdd) (event.Subscription, error) + + ParseAllowListAdd(log types.Log) (*BurnMintTokenPoolAllowListAdd, error) + + FilterAllowListRemove(opts *bind.FilterOpts) (*BurnMintTokenPoolAllowListRemoveIterator, error) + + WatchAllowListRemove(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolAllowListRemove) (event.Subscription, error) + + ParseAllowListRemove(log types.Log) (*BurnMintTokenPoolAllowListRemove, error) + + FilterBurned(opts *bind.FilterOpts, sender []common.Address) (*BurnMintTokenPoolBurnedIterator, error) + + WatchBurned(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolBurned, sender []common.Address) (event.Subscription, error) + + ParseBurned(log types.Log) (*BurnMintTokenPoolBurned, error) + + FilterChainAdded(opts *bind.FilterOpts) (*BurnMintTokenPoolChainAddedIterator, error) + + WatchChainAdded(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolChainAdded) (event.Subscription, error) + + ParseChainAdded(log types.Log) (*BurnMintTokenPoolChainAdded, error) + + FilterChainConfigured(opts *bind.FilterOpts) (*BurnMintTokenPoolChainConfiguredIterator, error) + + WatchChainConfigured(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolChainConfigured) (event.Subscription, error) + + ParseChainConfigured(log types.Log) (*BurnMintTokenPoolChainConfigured, error) + + FilterChainRemoved(opts *bind.FilterOpts) (*BurnMintTokenPoolChainRemovedIterator, error) + + WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolChainRemoved) (event.Subscription, error) + + ParseChainRemoved(log types.Log) (*BurnMintTokenPoolChainRemoved, error) + + FilterConfigChanged(opts *bind.FilterOpts) (*BurnMintTokenPoolConfigChangedIterator, error) + + WatchConfigChanged(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolConfigChanged) (event.Subscription, error) + + ParseConfigChanged(log types.Log) (*BurnMintTokenPoolConfigChanged, error) + + FilterLocked(opts *bind.FilterOpts, sender []common.Address) (*BurnMintTokenPoolLockedIterator, error) + + WatchLocked(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolLocked, sender []common.Address) (event.Subscription, error) + + ParseLocked(log types.Log) (*BurnMintTokenPoolLocked, error) + + FilterMinted(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*BurnMintTokenPoolMintedIterator, error) + + WatchMinted(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolMinted, sender []common.Address, recipient []common.Address) (event.Subscription, error) + + ParseMinted(log types.Log) (*BurnMintTokenPoolMinted, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*BurnMintTokenPoolOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*BurnMintTokenPoolOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*BurnMintTokenPoolOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*BurnMintTokenPoolOwnershipTransferred, error) + + FilterRateLimitAdminSet(opts *bind.FilterOpts) (*BurnMintTokenPoolRateLimitAdminSetIterator, error) + + WatchRateLimitAdminSet(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolRateLimitAdminSet) (event.Subscription, error) + + ParseRateLimitAdminSet(log types.Log) (*BurnMintTokenPoolRateLimitAdminSet, error) + + FilterReleased(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*BurnMintTokenPoolReleasedIterator, error) + + WatchReleased(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolReleased, sender []common.Address, recipient []common.Address) (event.Subscription, error) + + ParseReleased(log types.Log) (*BurnMintTokenPoolReleased, error) + + FilterRemotePoolAdded(opts *bind.FilterOpts, remoteChainSelector []uint64) (*BurnMintTokenPoolRemotePoolAddedIterator, error) + + WatchRemotePoolAdded(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolRemotePoolAdded, remoteChainSelector []uint64) (event.Subscription, error) + + ParseRemotePoolAdded(log types.Log) (*BurnMintTokenPoolRemotePoolAdded, error) + + FilterRemotePoolRemoved(opts *bind.FilterOpts, remoteChainSelector []uint64) (*BurnMintTokenPoolRemotePoolRemovedIterator, error) + + WatchRemotePoolRemoved(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolRemotePoolRemoved, remoteChainSelector []uint64) (event.Subscription, error) + + ParseRemotePoolRemoved(log types.Log) (*BurnMintTokenPoolRemotePoolRemoved, error) + + FilterRouterUpdated(opts *bind.FilterOpts) (*BurnMintTokenPoolRouterUpdatedIterator, error) + + WatchRouterUpdated(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolRouterUpdated) (event.Subscription, error) + + ParseRouterUpdated(log types.Log) (*BurnMintTokenPoolRouterUpdated, error) + + FilterTokensConsumed(opts *bind.FilterOpts) (*BurnMintTokenPoolTokensConsumedIterator, error) + + WatchTokensConsumed(opts *bind.WatchOpts, sink chan<- *BurnMintTokenPoolTokensConsumed) (event.Subscription, error) + + ParseTokensConsumed(log types.Log) (*BurnMintTokenPoolTokensConsumed, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var BurnMintTokenPoolZKBin string = ("0x0003000000000002001f000000000002000000600310027000020000000103550000061c0030019d0000061c0330019700000001002001900000005c0000c13d0000008004000039000000400040043f000000040030008c000000840000413d000000000201043b000000e0022002700000062f0020009c000000860000a13d000006300020009c000000c70000a13d000006310020009c000000f60000213d000006370020009c000001800000213d0000063a0020009c000005220000613d0000063b0020009c000000840000c13d0000000002000416000000000002004b000000840000c13d0000000504000039000000000204041a000000800020043f000000000040043f000000000002004b00000a100000c13d000000a002000039000000400020043f0000002004000039000000000500001900000005065002100000003f076000390000067a077001970000000007270019000006200070009c000001220000213d000000400070043f00000000005204350000001f0560018f000000a004400039000000000006004b0000003a0000613d000000000131034f00000000036400190000000006040019000000001701043c0000000006760436000000000036004b000000360000c13d000000000005004b000000800100043d000000000001004b0000004c0000613d00000000010000190000000003020433000000000013004b00000f830000a13d00000005031002100000000005430019000000a0033000390000000003030433000006200330019700000000003504350000000101100039000000800300043d000000000031004b0000003f0000413d000000400100043d00000020030000390000000005310436000000000302043300000000003504350000004002100039000000000003004b00000a070000613d00000000050000190000000046040434000006200660019700000000026204360000000105500039000000000035004b000000550000413d00000a070000013d0000010004000039000000400040043f0000000002000416000000000002004b000000840000c13d0000001f023000390000061d022001970000010002200039000000400020043f0000001f0530018f0000061e0630019800000100026000390000006e0000613d000000000701034f000000007807043c0000000004840436000000000024004b0000006a0000c13d000000000005004b0000007b0000613d000000000161034f0000000304500210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000a00030008c000000840000413d000001000100043d0000061f0010009c000000840000213d000001200200043d001100000002001d000000ff0020008c0000010f0000a13d00000000010000190000186c00010430000006450020009c000000a10000213d0000064f0020009c000001280000a13d000006500020009c000001570000213d000006530020009c000001f90000613d000006540020009c000000840000c13d0000000001000416000000000001004b000000840000c13d0000000001000412001900000001001d001800200000003d000080050100003900000044030000390000000004000415000000190440008a00000005044002100000067102000041186a18420000040f000000ff0110018f000000800010043f00000672010000410000186b0001042e000006460020009c000001390000a13d000006470020009c000001620000213d0000064a0020009c000002140000613d0000064b0020009c000000840000c13d000000240030008c000000840000413d0000000002000416000000000002004b000000840000c13d0000000401100370000000000101043b0000061f0010009c000000840000213d0000000102000039000000000202041a0000061f022001970000000003000411000000000023004b000009e00000c13d0000000902000039000000000302041a0000062303300197000000000313019f000000000032041b000000800010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000691011001c70000800d020000390000000103000039000006920400004100000a340000013d0000063c0020009c000001440000a13d0000063d0020009c0000016b0000213d000006400020009c000002970000613d000006410020009c000000840000c13d000000240030008c000000840000413d0000000002000416000000000002004b000000840000c13d0000000401100370000000000101043b001100000001001d000006200010009c000000840000213d186a14670000040f0000001101000029000000000010043f0000000701000039000000200010043f00000040020000390000000001000019186a182d0000040f001000000001001d000000400100043d001100000001001d186a13220000040f00000010050000290000000201500039000000000401041a00000677004001980000000002000039000000010200c03900000011010000290000004003100039000000000023043500000080024002700000061c02200197000000200310003900000000002304350000066302400197000000000021043500000003025000390000056d0000013d000006320020009c000001e00000213d000006350020009c000005370000613d000006360020009c000000840000c13d0000000001000416000000000001004b000000840000c13d0000000001000412001300000001001d001200600000003d000080050100003900000044030000390000000004000415000000130440008a00000005044002100000067102000041186a18420000040f000000000001004b0000000001000039000000010100c039000000800010043f00000672010000410000186b0001042e000001400200043d000006200020009c000000840000213d0000001f04200039000000000034004b000000000500001900000621050080410000062104400197000000000004004b00000000060000190000062106004041000006210040009c000000000605c019000000000006004b000000840000c13d00000100042000390000000004040433000006200040009c000009b40000a13d0000068201000041000000000010043f0000004101000039000000040010043f0000065f010000410000186c00010430000006550020009c000003fa0000613d000006560020009c000003400000613d000006570020009c000000840000c13d0000000001000416000000000001004b000000840000c13d0000000001000412001d00000001001d001c00000000003d0000800501000039000000440300003900000000040004150000001d0440008a000005410000013d0000064c0020009c0000040d0000613d0000064d0020009c000003540000613d0000064e0020009c000000840000c13d0000000001000416000000000001004b000000840000c13d00000009010000390000033b0000013d000006420020009c000004cf0000613d000006430020009c000003920000613d000006440020009c000000840000c13d0000000001000416000000000001004b000000840000c13d0000000202000039000000000102041a000000800010043f000000000020043f0000002002000039000000000001004b000009e80000c13d000000a0010000390000000004020019000009f70000013d000006510020009c000002300000613d000006520020009c000000840000c13d0000000001000416000000000001004b000000840000c13d0000000001030019186a133f0000040f186a13d70000040f0000028d0000013d000006480020009c000002830000613d000006490020009c000000840000c13d0000000001000416000000000001004b000000840000c13d00000001010000390000033b0000013d0000063e0020009c000003370000613d0000063f0020009c000000840000c13d000000240030008c000000840000413d0000000002000416000000000002004b000000840000c13d0000000401100370000000000101043b000006200010009c000000840000213d186a147c0000040f0000002002000039000000400300043d001100000003001d0000000002230436186a132d0000040f00000011020000290000057a0000013d000006380020009c000005480000613d000006390020009c000000840000c13d000000e40030008c000000840000413d0000000002000416000000000002004b000000840000c13d0000000402100370000000000202043b001100000002001d000006200020009c000000840000213d000000e002000039000000400020043f0000002402100370000000000202043b000000000002004b0000000003000039000000010300c039000000000032004b000000840000c13d000000800020043f0000004402100370000000000202043b000006630020009c000000840000213d000000a00020043f0000006402100370000000000202043b000006630020009c000000840000213d000000c00020043f0000014002000039000000400020043f0000008402100370000000000202043b000000000002004b0000000003000039000000010300c039000000000032004b000000840000c13d000000e00020043f000000a402100370000000000202043b000006630020009c000000840000213d000001000020043f000000c401100370000000000101043b000006630010009c000000840000213d000001200010043f0000000901000039000000000101041a0000061f021001970000000001000411000000000021004b000001c10000613d0000000102000039000000000202041a0000061f02200197000000000021004b00000dfb0000c13d0000001101000029000000000010043f0000000601000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000101043b000000000101041a000000000001004b000003870000613d000000c00100043d0000066301100197000000800200043d000000000002004b00000e630000c13d000000000001004b000001dc0000c13d000000a00100043d000006630010019800000e690000613d000000400200043d001100000002001d000006660100004100000e8a0000013d000006330020009c000005830000613d000006340020009c000000840000c13d000000240030008c000000840000413d0000000002000416000000000002004b000000840000c13d0000000401100370000000000601043b0000061f0060009c000000840000213d0000000101000039000000000101041a0000061f011001970000000005000411000000000015004b000009e00000c13d000000000056004b00000a380000c13d0000065a01000041000000800010043f0000065b010000410000186c00010430000000240030008c000000840000413d0000000002000416000000000002004b000000840000c13d0000000401100370000000000101043b001100000001001d0000061f0010009c000000840000213d0000000001000412001b00000001001d001a00000000003d0000800501000039000000440300003900000000040004150000001b0440008a00000005044002100000067102000041186a18420000040f0000061f01100197000000110010006b00000000010000390000000101006039000000800010043f00000672010000410000186b0001042e0000000001000416000000000001004b000000840000c13d000000000100041a0000061f021001970000000006000411000000000026004b000009e40000c13d0000000102000039000000000302041a0000062304300197000000000464019f000000000042041b0000062301100197000000000010041b00000000010004140000061f053001970000061c0010009c0000061c01008041000000c00110021000000658011001c70000800d0200003900000003030000390000069404000041186a18600000040f0000000100200190000000840000613d00000a470000013d000000240030008c000000840000413d0000000002000416000000000002004b000000840000c13d0000000402100370000000000202043b001100000002001d000006200020009c000000840000213d000000110230006a000006600020009c000000840000213d000001040020008c000000840000413d000000a002000039000000400020043f0000001102000029000f00840020003d0000000f01100360000000800000043f000000000101043b001000000001001d0000061f0010009c000000840000213d0000067101000041000000000010044300000000010004120000000400100443000000240000044300000000010004140000061c0010009c0000061c01008041000000c00110021000000683011001c70000800502000039186a18650000040f0000000100200190000012990000613d0000000202000367000000000101043b0000061f01100197000000100010006b00000a670000c13d0000000f01000029000e0060001000920000000e01200360000000000101043b000006200010009c000000840000213d000000400300043d0000068502000041000000000023043500000080011002100000068601100197000f00000003001d0000000402300039000000000012043500000671010000410000000000100443000000000100041200000004001004430000004001000039000000240010044300000000010004140000061c0010009c0000061c01008041000000c00110021000000683011001c70000800502000039186a18650000040f0000000100200190000012990000613d000000000201043b00000000010004140000061f02200197000000040020008c00000bdd0000c13d0000000103000031000000200030008c0000002004000039000000000403401900000c060000013d000000240030008c000000840000413d0000000002000416000000000002004b000000840000c13d0000000401100370000000000101043b000006200010009c000000840000213d186a167a0000040f000000000001004b0000000001000039000000010100c039000000400200043d00000000001204350000061c0020009c0000061c02008041000000400120021000000690011001c70000186b0001042e000000440030008c000000840000413d0000000002000416000000000002004b000000840000c13d0000000402100370000000000202043b001100000002001d000006200020009c000000840000213d0000002402100370000000000202043b000006200020009c000000840000213d0000002304200039000000000034004b000000840000813d000f00040020003d0000000f01100360000000000101043b001000000001001d000006200010009c000000840000213d0000002402200039000d00000002001d000e00100020002d0000000e0030006b000000840000213d0000000101000039000000000101041a0000061f011001970000000002000411000000000012004b000009e00000c13d0000001101000029000000000010043f0000000601000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000101043b000000000101041a000000000001004b000003870000613d0000001101000029000000000010043f0000000701000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d00000010020000290000001f02200039000006a502200197000b00000002001d0000003f02200039000006a502200197000000000101043b000c00000001001d000000400100043d0000000002210019000000000012004b00000000040000390000000104004039000006200020009c000001220000213d0000000100400190000001220000c13d000000400020043f000000100200002900000000022104360000000e05000029000000000050007c000000840000213d0000001004000029000006a503400198000e001f00400193000a00000003001d00000000033200190000000f040000290000002004400039000f00000004001d0000000204400367000002fe0000613d000000000504034f0000000006020019000000005705043c0000000006760436000000000036004b000002fa0000c13d0000000e0000006b0000030c0000613d0000000a044003600000000e050000290000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000430435000000100320002900000000000304350000061c0020009c0000061c02008041000000400220021000000000010104330000061c0010009c0000061c010080410000006001100210000000000121019f00000000020004140000061c0020009c0000061c02008041000000c002200210000000000112019f00000658011001c70000801002000039186a18650000040f0000000100200190000000840000613d0000000c020000290000000503200039000000000201043b0000000001030019186a168e0000040f000000400700043d000000000001004b00000e940000c13d000c00000007001d0000002401700039000000400200003900000000002104350000068001000041000000000017043500000004017000390000001102000029000000000021043500000044037000390000000d010000290000001002000029186a14480000040f0000000c0200002900000f9d0000013d0000000001000416000000000001004b000000840000c13d0000000401000039000000000101041a0000061f01100197000000800010043f00000672010000410000186b0001042e0000000001000416000000000001004b000000840000c13d000000c001000039000000400010043f0000001701000039000000800010043f0000069f01000041000000a00010043f0000002001000039000000c00010043f0000008001000039000000e002000039186a132d0000040f000000c00110008a0000061c0010009c0000061c010080410000006001100210000006a0011001c70000186b0001042e000000440030008c000000840000413d0000000002000416000000000002004b000000840000c13d0000000402100370000000000202043b001100000002001d000006200020009c000000840000213d0000002402100370000000000202043b000006200020009c000000840000213d0000002304200039000000000034004b000000840000813d0000000404200039000000000141034f000000000101043b001000000001001d000006200010009c000000840000213d0000002402200039000f00000002001d0000001001200029000000000031004b000000840000213d0000000101000039000000000101041a0000061f011001970000000002000411000000000012004b000009e00000c13d0000001101000029000000000010043f0000000601000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000101043b000000000101041a000000000001004b00000b530000c13d000000400100043d0000065e0200004100000000002104350000000402100039000000110300002900000000003204350000061c0010009c0000061c0100804100000040011002100000065f011001c70000186c00010430000000240030008c000000840000413d0000000002000416000000000002004b000000840000c13d0000000401100370000000000101043b000006200010009c000000840000213d000000000010043f0000000701000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000101043b0000000501100039000000000301041a000000400200043d000f00000002001d001100000003001d0000000002320436000e00000002001d000000000010043f00000000010004140000061c0010009c0000061c01008041000000c0011002100000062b011001c70000801002000039186a18650000040f0000000100200190000000840000613d0000001105000029000000000005004b0000000e02000029000003c60000613d000000000101043b0000000e020000290000000003000019000000000401041a000000000242043600000001011000390000000103300039000000000053004b000003c00000413d0000000f0120006a0000001f01100039000006a5011001970000000f04100029000000000014004b00000000010000390000000101004039000006200040009c000001220000213d0000000100100190000001220000c13d000000400040043f0000000f010000290000000002010433000006200020009c000001220000213d00000005012002100000003f0310003900000622033001970000000003430019000006200030009c000001220000213d000000400030043f000d00000004001d0000000005240436000000000002004b000003e80000613d00000060020000390000000003000019000000000435001900000000002404350000002003300039000000000013004b000003e30000413d000c00000005001d0000000f010000290000000001010433000000000001004b00000b5c0000c13d000000400100043d000000200200003900000000032104360000000d0200002900000000020204330000000000230435000000400310003900000005042002100000000005340019000000000002004b00000bc00000c13d000000000215004900000a080000013d000000240030008c000000840000413d0000000002000416000000000002004b000000840000c13d0000000401100370000000000201043b000006a100200198000000840000c13d0000000101000039000006a20020009c000005450000613d000006a30020009c000005450000613d000006a40020009c000000000100c019000000800010043f00000672010000410000186b0001042e000000440030008c000000840000413d0000000002000416000000000002004b000000840000c13d0000000402100370000000000202043b000006200020009c000000840000213d0000002305200039000000000035004b000000840000813d0000000405200039000000000551034f000000000905043b000006200090009c000000840000213d0000002407200039000000050b90021000000000087b0019000000000038004b000000840000213d0000002402100370000000000202043b000006200020009c000000840000213d0000002305200039000000000035004b000000840000813d0000000405200039000000000551034f000000000605043b000006200060009c000000840000213d0000002402200039000000050a60021000000000052a0019000000000035004b000000840000213d0000000103000039000000000303041a0000061f03300197000000000c00041100000000003c004b000009e00000c13d0000003f03b000390000062203300197000006790030009c000001220000213d0000008003300039000f00000003001d000000400030043f000000800090043f000000000009004b0000044f0000613d000000000371034f000000000303043b0000061f0030009c000000840000213d000000200440003900000000003404350000002007700039000000000087004b000004440000413d000000400300043d000f00000003001d0000003f03a0003900000622033001970000000f033000290000000f0030006c00000000040000390000000104004039000006200030009c000001220000213d0000000100400190000001220000c13d000000400030043f0000000f030000290000000003630436000e00000003001d000000000006004b000004690000613d0000000f03000029000000000421034f000000000404043b0000061f0040009c000000840000213d000000200330003900000000004304350000002002200039000000000052004b000004600000413d00000671010000410000000000100443000000000100041200000004001004430000006001000039000000240010044300000000010004140000061c0010009c0000061c01008041000000c00110021000000683011001c70000800502000039186a18650000040f0000000100200190000012990000613d000000000101043b000000000001004b00000ad90000613d000000800100043d000000000001004b00000f1e0000c13d0000000f010000290000000001010433000000000001004b00000a470000613d0000000003000019000004890000013d00000001033000390000000f010000290000000001010433000000000013004b00000a470000813d00000005013002100000000e0110002900000000010104330000061f04100198000004840000613d000000000040043f0000000301000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039001000000003001d001100000004001d186a18650000040f000000110400002900000010030000290000000100200190000000840000613d000000000101043b000000000101041a000000000001004b000004840000c13d0000000203000039000000000103041a000006200010009c000001220000213d0000000102100039000000000023041b0000062a0110009a000000000041041b000000000103041a000d00000001001d000000000040043f0000000301000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f00000011030000290000000100200190000000840000613d000000000101043b0000000d02000029000000000021041b000000400100043d00000000003104350000061c0010009c0000061c01008041000000400110021000000000020004140000061c0020009c0000061c02008041000000c002200210000000000112019f0000062b011001c70000800d0200003900000001030000390000062c04000041186a18600000040f00000010030000290000000100200190000004840000c13d000000840000013d000000240030008c000000840000413d0000000002000416000000000002004b000000840000c13d0000000402100370000000000202043b000006200020009c000000840000213d0000000003230049000006600030009c000000840000213d000000a40030008c000000840000413d000000c003000039000000400030043f0000006003000039000000800030043f000000a00030043f001000840020003d0000001001100360000000000101043b001100000001001d0000061f0010009c000000840000213d0000067101000041000000000010044300000000010004120000000400100443000000240000044300000000010004140000061c0010009c0000061c01008041000000c00110021000000683011001c70000800502000039186a18650000040f0000000100200190000012990000613d0000000202000367000000000101043b0000061f01100197000000110010006b00000a490000c13d0000001001000029000f0060001000920000000f01200360000000000101043b000006200010009c000000840000213d000000400300043d0000068502000041000000000023043500000080011002100000068601100197001000000003001d0000000402300039000000000012043500000671010000410000000000100443000000000100041200000004001004430000004001000039000000240010044300000000010004140000061c0010009c0000061c01008041000000c00110021000000683011001c70000800502000039186a18650000040f0000000100200190000012990000613d000000000201043b00000000010004140000061f02200197000000040020008c00000adc0000c13d0000000103000031000000200030008c0000002004000039000000000403401900000b050000013d000000240030008c000000840000413d0000000002000416000000000002004b000000840000c13d0000000401100370000000000101043b0000061f0010009c000000840000213d0000000102000039000000000202041a0000061f022001970000000003000411000000000023004b000009e00000c13d000000000001004b00000a240000c13d0000067001000041000000800010043f0000065b010000410000186c000104300000000001000416000000000001004b000000840000c13d0000000001000412001500000001001d001400400000003d000080050100003900000044030000390000000004000415000000150440008a00000005044002100000067102000041186a18420000040f0000061f01100197000000800010043f00000672010000410000186b0001042e000000240030008c000000840000413d0000000002000416000000000002004b000000840000c13d0000000401100370000000000101043b001100000001001d000006200010009c000000840000213d186a14670000040f0000001101000029000000000010043f0000000701000039000000200010043f00000040020000390000000001000019186a182d0000040f001000000001001d000000400100043d001100000001001d186a13220000040f0000001005000029000000000405041a00000677004001980000000002000039000000010200c03900000011010000290000004003100039000000000023043500000080024002700000061c0220019700000020031000390000000000230435000006630240019700000000002104350000000102500039000000000402041a000000800210003900000080034002700000000000320435000006630340019700000060021000390000000000320435186a162c0000040f000000400100043d001000000001001d0000001102000029186a135c0000040f000000100200002900000000012100490000061c0010009c0000061c0100804100000060011002100000061c0020009c0000061c020080410000004002200210000000000121019f0000186b0001042e000000440030008c000000840000413d0000000002000416000000000002004b000000840000c13d0000000402100370000000000202043b000006200020009c000000840000213d0000002304200039000000000034004b000000840000813d0000000404200039000000000441034f000000000404043b000600000004001d000006200040009c000000840000213d000500240020003d000000060200002900000005022002100000000502200029000000000032004b000000840000213d0000002402100370000000000202043b000200000002001d000006200020009c000000840000213d00000002020000290000002302200039000000000032004b000000840000813d00000002020000290000000402200039000000000121034f000000000101043b000100000001001d000006200010009c000000840000213d0000000201000029000300240010003d000000010100002900000005011002100000000301100029000000000031004b000000840000213d0000000101000039000000000101041a0000061f011001970000000002000411000000000012004b000009e00000c13d000000060000006b00000c4c0000c13d000000010000006b00000a470000613d000500000000001d0000000501000029000000050110021000000003011000290000000202000367000000000112034f000000000101043b0000000003000031000000020430006a000001430440008a00000621054001970000062106100197000000000756013f000000000056004b00000000050000190000062105004041000000000041004b00000000040000190000062104008041000006210070009c000000000504c019000000000005004b000000840000c13d001000030010002d000000100130006a000f00000001001d000006600010009c000000840000213d0000000f01000029000001200010008c000000840000413d000000400100043d000900000001001d000006610010009c000001220000213d0000000901000029000000a001100039000000400010043f0000001001200360000000000101043b000006200010009c000000840000213d00000009040000290000000001140436000800000001001d00000010010000290000002001100039000000000112034f000000000101043b000006200010009c000000840000213d0000001001100029001100000001001d0000001f01100039000000000031004b0000000004000019000006210400804100000621011001970000062105300197000000000751013f000000000051004b00000000010000190000062101004041000006210070009c000000000104c019000000000001004b000000840000c13d0000001101200360000000000101043b000006200010009c000001220000213d00000005091002100000003f049000390000062204400197000000400600043d0000000004460019000e00000006001d000000000064004b00000000070000390000000107004039000006200040009c000001220000213d0000000100700190000001220000c13d000000400040043f0000000e040000290000000000140435000000110100002900000020081000390000000009980019000000000039004b000000840000213d000000000098004b000006660000813d0000000e0a000029000006230000013d000000200aa000390000000001b7001900000000000104350000000000ca04350000002008800039000000000098004b000006660000813d000000000182034f000000000101043b000006200010009c000000840000213d000000110d1000290000003f01d00039000000000031004b000000000400001900000621040080410000062101100197000000000751013f000000000051004b00000000010000190000062101004041000006210070009c000000000104c019000000000001004b000000840000c13d000000200ed000390000000001e2034f000000000b01043b0000062000b0009c000001220000213d0000001f01b00039000006a5011001970000003f01100039000006a501100197000000400c00043d00000000011c00190000000000c1004b00000000040000390000000104004039000006200010009c000001220000213d0000000100400190000001220000c13d0000004004d00039000000400010043f0000000007bc043600000000014b0019000000000031004b000000840000213d0000002001e00039000000000412034f000006a501b00198000000000e170019000006580000613d000000000f04034f000000000d07001900000000f60f043c000000000d6d04360000000000ed004b000006540000c13d0000001f0db001900000061c0000613d000000000114034f0000000304d0021000000000060e043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f00000000001e04350000061c0000013d00000008010000290000000e04000029000000000041043500000010010000290000004006100039000000000162034f000000000101043b000006200010009c000000840000213d00000010071000290000001f01700039000000000031004b000000000400001900000621040080410000062101100197000000000851013f000000000051004b00000000010000190000062101004041000006210080009c000000000104c019000000000001004b000000840000c13d000000000172034f000000000401043b000006200040009c000001220000213d0000001f01400039000006a5011001970000003f01100039000006a501100197000000400500043d0000000001150019000000000051004b00000000080000390000000108004039000006200010009c000001220000213d0000000100800190000001220000c13d0000002008700039000000400010043f00000000074504360000000001840019000000000031004b000000840000213d000000000882034f000006a50140019800000000031700190000069e0000613d000000000908034f000000000a070019000000009b09043c000000000aba043600000000003a004b0000069a0000c13d0000001f09400190000006ab0000613d000000000118034f0000000308900210000000000903043300000000098901cf000000000989022f000000000101043b0000010008800089000000000181022f00000000018101cf000000000191019f00000000001304350000000001470019000000000001043500000009010000290000004001100039000600000001001d00000000005104350000000f01000029000000600110008a000006600010009c000000840000213d000000600010008c000000840000413d000000400300043d000006620030009c000001220000213d0000006001300039000000400010043f0000002001600039000000000412034f000000000404043b000000000004004b0000000005000039000000010500c039000000000054004b000000840000c13d00000000044304360000002001100039000000000512034f000000000505043b000006630050009c000000840000213d00000000005404350000002004100039000000000142034f000000000101043b000006630010009c000000840000213d0000004005300039000000000015043500000009010000290000006001100039000700000001001d00000000003104350000000f01000029000000c00110008a000006600010009c000000840000213d000000600010008c000000840000413d000000400100043d000006620010009c000001220000213d0000006003100039000000400030043f0000002003400039000000000432034f000000000404043b000000000004004b0000000005000039000000010500c039000000000054004b000000840000c13d00000000044104360000002003300039000000000532034f000000000505043b000006630050009c000000840000213d00000000005404350000002003300039000000000232034f000000000302043b000006630030009c000000840000213d0000004002100039000000000032043500000009030000290000008003300039000400000003001d0000000000130435000000070300002900000000030304330000004005300039000000000505043300000663065001970000000057030434000000000007004b0000070a0000613d000000000006004b000011310000613d00000000050504330000066305500197000000000056004b0000070f0000413d000011310000013d000000000006004b0000111d0000c13d000000000505043300000663005001980000111d0000c13d000000000202043300000663022001970000000003010433000000000003004b0000071b0000613d000000000002004b000011380000613d00000000030404330000066303300197000000000032004b000007200000413d000011380000013d000000000002004b000011210000c13d00000000020404330000066300200198000011210000c13d000000060100002900000000010104330000000001010433000000000001004b00000a760000613d000000090100002900000000010104330000062001100197001100000001001d000000000010043f0000000601000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000101043b000000000101041a000000000001004b000011160000c13d0000000501000039000000000101041a000006200010009c000001220000213d00000001021000390000000503000039000000000023041b000006680110009a0000001102000029000000000021041b000000000103041a001000000001001d000000000020043f0000000601000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000101043b0000001002000029000000000021041b000000090100002900000000010104330000062001100197000000000010043f0000000701000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000301043b000000070100002900000000010104330000000024010434001100000004001d000000000004004b0000000004000039000000010400c039001000000004001d000000400400043d000006610040009c000001220000213d000f00000003001d0000000002020433000006630220019700000040011000390000000001010433000b00000001001d000000a001400039000000400010043f000e00000002001d000d00000004001d0000000001240436000c00000001001d0000066901000041000000000010044300000000010004140000061c0010009c0000061c01008041000000c0011002100000066a011001c70000800b02000039186a18650000040f0000000100200190000012990000613d0000000b020000290000066302200197000000000101043b0000000d040000290000004003400039000000100500002900000000005304350000008003400039000000000023043500000060034000390000000e0500002900000000005304350000061c011001970000000c030000290000000000130435000000110000006b00000000030000190000066b0300c0410000000f09000029000000000409041a0000066c04400197000000000343019f0000008002200210000000000425019f000000000353019f0000008002100210000000000323019f000000000039041b0000000103900039000000000043041b000000400300043d000006610030009c000001220000213d0000000404000029000000000404043300000020054000390000000005050433000000000604043300000040044000390000000004040433000000a007300039000000400070043f0000008007300039000006630840019700000000008704350000004007300039000000000006004b0000000006000039000000010600c039000000000067043500000020063000390000000000160435000006630150019700000060053000390000000000150435000000000013043500000000030000190000066b0300c0410000000205900039000000000605041a0000066c06600197000000000363019f000000000223019f000000000212019f000000000025041b0000008002400210000000000112019f0000000302900039000000000012041b000000060100002900000000030104330000000054030434000006200040009c000001220000213d0000000406900039000000000106041a000000010010019000000001071002700000007f0770618f0000001f0070008c00000000020000390000000102002039000000000121013f000000010010019000000e000000c13d000000200070008c001100000006001d001000000004001d000e00000003001d000007ff0000413d000d00000007001d000f00000005001d000000000060043f00000000010004140000061c0010009c0000061c01008041000000c0011002100000062b011001c70000801002000039186a18650000040f0000000100200190000000840000613d00000010040000290000001f024000390000000502200270000000200040008c0000000002004019000000000301043b0000000d010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b00000011060000290000000f05000029000007ff0000813d000000000002041b0000000102200039000000000012004b000007fb0000413d0000001f0040008c0000081e0000a13d000000000060043f00000000010004140000061c0010009c0000061c01008041000000c0011002100000062b011001c70000801002000039186a18650000040f0000000100200190000000840000613d0000001007000029000006a502700198000000000101043b0000000e080000290000082a0000613d000000010320008a0000000503300270000000000331001900000001043000390000002003000039000000110600002900000000058300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000008160000c13d0000082c0000013d000000000004004b000008220000613d0000000001050433000008230000013d00000000010000190000000302400210000006a60220027f000006a602200167000000000121016f0000000102400210000000000121019f000008380000013d00000020030000390000001106000029000000000072004b000008360000813d0000000302700210000000f80220018f000006a60220027f000006a60220016700000000038300190000000003030433000000000223016f000000000021041b000000010170021000000001011001bf000000000016041b000000080100002900000000010104330000000002010433000000000002004b0000095b0000613d0000000003000019000c00000003001d0000000502300210000000000121001900000020011000390000000001010433001000000001001d0000000031010434000000000001004b00000a760000613d00000009020000290000000002020433001100000002001d0000061c0010009c0000061c0100804100000060011002100000061c0030009c000f00000003001d0000061c0200004100000000020340190000004002200210000000000121019f00000000020004140000061c0020009c0000061c02008041000000c002200210000000000112019f00000658011001c70000801002000039186a18650000040f0000000100200190000000840000613d00000011020000290000062002200197000000000101043b001100000001001d000b00000002001d000000000020043f0000000701000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000201043b0000001101000029000000000010043f000e00000002001d0000000601200039000d00000001001d000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000101043b000000000101041a000000000001004b00000f8f0000c13d0000000e010000290000000502100039000000000102041a000006200010009c000001220000213d000a00000001001d0000000101100039000000000012041b000e00000002001d000000000020043f00000000010004140000061c0010009c0000061c01008041000000c0011002100000062b011001c70000801002000039186a18650000040f00000001002001900000001102000029000000840000613d000000000101043b0000000a01100029000000000021041b0000000e01000029000000000101041a000e00000001001d000000000020043f0000000d01000029000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f00000001002001900000001102000029000000840000613d000000000101043b0000000e03000029000000000031041b000000000020043f0000000801000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000401043b00000010010000290000000005010433000006200050009c000001220000213d000000000104041a000000010010019000000001031002700000007f0330618f0000001f0030008c00000000020000390000000102002039000000000121013f00000001001001900000000f0700002900000e000000c13d000000200030008c001100000004001d000e00000005001d000008eb0000413d000d00000003001d000000000040043f00000000010004140000061c0010009c0000061c01008041000000c0011002100000062b011001c70000801002000039186a18650000040f0000000100200190000000840000613d0000000e050000290000001f025000390000000502200270000000200050008c0000000002004019000000000301043b0000000d010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b0000000f070000290000001104000029000008eb0000813d000000000002041b0000000102200039000000000012004b000008e70000413d0000001f0050008c000009170000a13d000000000040043f00000000010004140000061c0010009c0000061c01008041000000c0011002100000062b011001c70000801002000039186a18650000040f0000000100200190000000840000613d0000000e08000029000006a502800198000000000101043b000009550000613d000000010320008a00000005033002700000000003310019000000010430003900000020030000390000000f07000029000000100600002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000009020000c13d000000000082004b000009130000813d0000000302800210000000f80220018f000006a60220027f000006a60220016700000000036300190000000003030433000000000223016f000000000021041b000000010180021000000001011001bf0000001104000029000009230000013d000000000005004b0000091b0000613d00000000010704330000091c0000013d000000000100001900000010060000290000000302500210000006a60220027f000006a602200167000000000121016f0000000102500210000000000121019f000000000014041b000000400100043d00000020020000390000000003210436000000000206043300000000002304350000004003100039000000000002004b000009340000613d000000000400001900000000053400190000000006740019000000000606043300000000006504350000002004400039000000000024004b0000092d0000413d0000001f04200039000006a5044001970000000002320019000000000002043500000040024000390000061c0020009c0000061c0200804100000060022002100000061c0010009c0000061c010080410000004001100210000000000112019f00000000020004140000061c0020009c0000061c02008041000000c002200210000000000112019f00000658011001c70000800d0200003900000002030000390000066e040000410000000b05000029186a18600000040f0000000100200190000000840000613d0000000c030000290000000103300039000000080100002900000000010104330000000002010433000000000023004b0000083f0000413d0000095b0000013d00000020030000390000000f070000290000001006000029000000000082004b0000090b0000413d000009130000013d00000004010000290000000002010433000000070100002900000000050104330000000601000029000000000301043300000009010000290000000004010433000000400100043d000000200610003900000100070000390000000000760435000006200440019700000000004104350000010007100039000000006403043400000000004704350000012003100039000000000004004b000009770000613d000000000700001900000000083700190000000009760019000000000909043300000000009804350000002007700039000000000047004b000009700000413d000000000643001900000000000604350000000076050434000000000006004b0000000006000039000000010600c039000000400810003900000000006804350000000006070433000006630660019700000060071000390000000000670435000000400550003900000000050504330000066305500197000000800610003900000000005604350000000065020434000000000005004b0000000005000039000000010500c039000000a007100039000000000057043500000000050604330000066305500197000000c0061000390000000000560435000000400220003900000000020204330000066302200197000000e00510003900000000002504350000001f02400039000006a502200197000000000212004900000000023200190000061c0020009c0000061c0200804100000060022002100000061c0010009c0000061c010080410000004001100210000000000112019f00000000020004140000061c0020009c0000061c02008041000000c002200210000000000112019f00000658011001c70000800d0200003900000001030000390000066f04000041186a18600000040f0000000100200190000000840000613d00000005020000290000000102200039000500000002001d000000010020006c000005bd0000413d00000a470000013d00000005054002100000003f065000390000062206600197000000400700043d0000000006670019000f00000007001d000000000076004b00000000070000390000000107004039000006200060009c000001220000213d0000000100700190000001220000c13d0000010007300039000000400060043f0000000f030000290000000003430436000e00000003001d00000120022000390000000003250019000000000073004b000000840000213d000000000004004b000009d30000613d0000000e0400002900000000250204340000061f0050009c000000840000213d0000000004540436000000000032004b000009cd0000413d000001600300043d0000061f0030009c000000840000213d000001800200043d001000000002001d0000061f0020009c000000840000213d0000000002000411000000000002004b00000a4b0000c13d000000400100043d0000062e0200004100000a780000013d0000069501000041000000800010043f0000065b010000410000186c000104300000069301000041000000800010043f0000065b010000410000186c00010430000000a005000039000006810300004100000000040000190000000006050019000000000503041a000000000556043600000001033000390000000104400039000000000014004b000009eb0000413d000000410160008a000006a504100197000006790040009c000001220000213d0000008001400039000000400010043f0000000000210435000000a002400039000000800300043d0000000000320435000000c002400039000000000003004b00000a070000613d000000a004000039000000000500001900000000460404340000061f0660019700000000026204360000000105500039000000000035004b00000a010000413d00000000021200490000061c0020009c0000061c0200804100000060022002100000061c0010009c0000061c010080410000004001100210000000000112019f0000186b0001042e000000a006000039000006780400004100000000050000190000000007060019000000000604041a000000000667043600000001044000390000000105500039000000000025004b00000a130000413d000000410270008a000006a504200197000006790040009c000001220000213d0000008002400039000000800500043d000000400020043f000006200050009c000000270000a13d000001220000013d0000000402000039000000000302041a0000062304300197000000000414019f000000000042041b0000061f02300197000000800020043f000000a00010043f00000000010004140000061c0010009c0000061c01008041000000c0011002100000067b011001c70000800d0200003900000001030000390000067c04000041186a18600000040f0000000100200190000000840000613d00000a470000013d000000000100041a0000062301100197000000000161019f000000000010041b00000000010004140000061c0010009c0000061c01008041000000c00110021000000658011001c70000800d0200003900000003030000390000065904000041186a18600000040f0000000100200190000000840000613d00000000010000190000186b0001042e000000100100002900000a680000013d0000000104000039000000000504041a0000062305500197000000000225019f000000000024041b000000000003004b00000a760000613d0000061f0210019800000a760000613d000000100000006b00000a760000613d000000800020043f000000c00030043f0000062401000041000000400300043d000d00000003001d00000000001304350000000001000414000000040020008c00000a7e0000c13d00000000010004150000001f0110008a00000005011002100000000103000031000000200030008c0000002004000039000000000403401900000aaa0000013d0000000f01000029000000000112034f000000000101043b0000061f0010009c000000840000213d000000400200043d00000684030000410000000000320435000000040320003900000000001304350000061c0020009c0000061c0200804100000040012002100000065f011001c70000186c00010430000000400100043d000006700200004100000000002104350000061c0010009c0000061c01008041000000400110021000000625011001c70000186c000104300000000d030000290000061c0030009c0000061c0300804100000040033002100000061c0010009c0000061c01008041000000c001100210000000000131019f00000625011001c7186a18650000040f00000060031002700000061c03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000d0570002900000a970000613d000000000801034f0000000d09000029000000008a08043c0000000009a90436000000000059004b00000a930000c13d000000000006004b00000aa40000613d000000000171034f0000000306600210000000000705043300000000076701cf000000000767022f000000000101043b0000010006600089000000000161022f00000000016101cf000000000171019f0000000000150435000100000003001f00000000010004150000001e0110008a0000000501100210000000010020019000000ac10000613d0000001f02400039000000600420018f0000000d02400029000000000042004b00000000040000390000000104004039000006200020009c000001220000213d0000000100400190000001220000c13d000000400020043f000000200030008c000000840000413d0000000d030000290000000003030433000000ff0030008c000000840000213d0000000501100270000000000103001f0000001101000029000000ff0110018f000000000031004b00000e080000c13d0000001101000029000000a00010043f0000000402000039000000000102041a000006230110019700000010011001af000000000012041b0000000f010000290000000001010433000000000001004b0000000001000039000000010100c039000000e00010043f000000000100001900000ec90000613d000000400100043d000006280010009c000001220000213d0000002002100039000000400020043f0000000000010435000000e00100043d000000000001004b00000e130000c13d000000400100043d000006980200004100000a780000013d00000010030000290000061c0030009c0000061c0300804100000040033002100000061c0010009c0000061c01008041000000c001100210000000000131019f0000065f011001c7186a18650000040f00000060031002700000061c03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000100570002900000af50000613d000000000801034f0000001009000029000000008a08043c0000000009a90436000000000059004b00000af10000c13d000000000006004b00000b020000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f000000010020019000000c400000613d0000001f01400039000000600210018f0000001001200029000000000021004b00000000020000390000000102004039000006200010009c000001220000213d0000000100200190000001220000c13d000000400010043f000000200030008c000000840000413d00000010020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b000000840000c13d000000000002004b00000e060000c13d0000000f0100002900000020011000390000000201100367000000000101043b001000000001001d0000061f0010009c000000840000213d00000671010000410000000000100443000000000100041200000004001004430000006001000039000000240010044300000000010004140000061c0010009c0000061c01008041000000c00110021000000683011001c70000800502000039186a18650000040f0000000100200190000012990000613d000000000101043b000000000001004b00000fa60000c13d0000000f010000290000000201100367000000000101043b001000000001001d000006200010009c000000840000213d0000001001000029000000000010043f0000000601000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000400200043d000e00000002001d0000000402200039000000000101043b000000000101041a000000000001004b000010210000c13d0000068f010000410000000e030000290000000000130435000000100100002900000c3a0000013d00000000030000310000000f010000290000001002000029186a139f0000040f00000000020100190000001101000029186a14ee0000040f00000000010000190000186b0001042e0000000002000019001100000002001d0000000502200210001000000002001d0000000e012000290000000001010433000000000010043f0000000801000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000101043b000000000201041a000000010320019000000001052002700000007f0550618f0000001f0050008c00000000040000390000000104002039000000000043004b00000e000000c13d000000400700043d0000000004570436000000000003004b00000b9a0000613d000900000004001d000a00000005001d000b00000007001d000000000010043f00000000010004140000061c0010009c0000061c01008041000000c0011002100000062b011001c70000801002000039186a18650000040f0000000100200190000000840000613d0000000a08000029000000000008004b000000200500008a00000ba20000613d000000000201043b00000000010000190000000d060000290000000b0700002900000009090000290000000003190019000000000402041a000000000043043500000001022000390000002001100039000000000081004b00000b920000413d00000ba50000013d000006a7012001970000000000140435000000000005004b00000020010000390000000001006039000000200500008a0000000d0600002900000ba50000013d00000000010000190000000d060000290000000b070000290000003f01100039000000000251016f0000000001720019000000000021004b00000000020000390000000102004039000006200010009c000001220000213d0000000100200190000001220000c13d000000400010043f00000000010604330000001102000029000000000021004b00000f830000a13d00000010030000290000000c0130002900000000007104350000000001060433000000000021004b00000f830000a13d00000001022000390000000f010000290000000001010433000000000012004b00000b5d0000413d000003ed0000013d00000000040000190000000d0c00002900000bcb0000013d0000001f07600039000006a5077001970000000006650019000000000006043500000000057500190000000104400039000000000024004b000003f80000813d0000000006150049000000400660008a0000000003630436000000200cc0003900000000060c043300000000760604340000000005650436000000000006004b00000bc30000613d00000000080000190000000009580019000000000a870019000000000a0a04330000000000a904350000002008800039000000000068004b00000bd50000413d00000bc30000013d0000000f030000290000061c0030009c0000061c0300804100000040033002100000061c0010009c0000061c01008041000000c001100210000000000131019f0000065f011001c7186a18650000040f00000060031002700000061c03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000f0570002900000bf60000613d000000000801034f0000000f09000029000000008a08043c0000000009a90436000000000059004b00000bf20000c13d000000000006004b00000c030000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f000000010020019000000ddd0000613d0000001f01400039000000600210018f0000000f01200029000000000021004b00000000020000390000000102004039000006200010009c000001220000213d0000000100200190000001220000c13d000000400010043f000000200030008c000000840000413d0000000f020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b000000840000c13d000000000002004b00000e060000c13d0000000e010000290000000201100367000000000101043b000f00000001001d000006200010009c000000840000213d0000000f01000029000000000010043f0000000601000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000400200043d000d00000002001d0000000402200039000000000101043b000000000101041a000000000001004b00000fc40000c13d0000068f010000410000000d0300002900000000001304350000000f0100002900000000001204350000061c0030009c0000061c0300804100000040013002100000065f011001c70000186c000104300000001f0530018f0000061e06300198000000400200043d000000000462001900000de80000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000c470000c13d00000de80000013d0000000002000019000700000002001d000000050120021000000005011000290000000201100367000000000101043b000b00000001001d000006200010009c000000840000213d0000000b01000029000000000010043f0000000601000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000101043b000000000301041a000000000003004b00000fd70000613d0000000501000039000000000201041a000000000002004b000012a60000613d000000010130008a000000000023004b00000c880000613d000000000012004b00000f830000a13d0000065c0130009a0000065c0220009a000000000202041a000000000021041b000000000020043f0000000601000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039001100000003001d186a18650000040f0000000100200190000000840000613d000000000101043b0000001102000029000000000021041b0000000501000039000000000301041a000000000003004b00000f890000613d000000010130008a0000065c0230009a000000000002041b0000000502000039000000000012041b0000000b01000029000000000010043f0000000601000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000101043b000000000001041b0000000b01000029000000000010043f0000000701000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000101043b0000000501100039000000000301041a000000400200043d000f00000002001d001100000003001d0000000002320436000a00000002001d000000000010043f00000000010004140000061c0010009c0000061c01008041000000c0011002100000062b011001c70000801002000039186a18650000040f0000000100200190000000840000613d0000001105000029000000000005004b0000000a0200002900000cc70000613d000000000101043b0000000a020000290000000003000019000000000401041a000000000242043600000001011000390000000103300039000000000053004b00000cc10000413d0000000f0120006a0000001f01100039000006a5021001970000000f01200029000000000021004b00000000020000390000000102004039000006200010009c000001220000213d0000000100200190000001220000c13d000000400010043f0000000f010000290000000001010433000000000001004b00000d6c0000613d000000000200001900000ce10000013d000000000101043b000000000001041b000000110200002900000001022000390000000f010000290000000001010433000000000012004b00000d6c0000813d001100000002001d0000000b01000029000000000010043f0000000701000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000301043b0000000f0100002900000000010104330000001102000029000000000021004b00000f830000a13d00000005012002100000000a011000290000000001010433000c00000001001d000000000010043f000d00000003001d0000000601300039000e00000001001d000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000101043b000000000101041a000000000001004b00000cdb0000613d0000000d020000290000000503200039000000000203041a000000000002004b000012a60000613d000000000021004b001000000001001d000d00000003001d00000d4d0000613d000900000002001d000000000030043f00000000010004140000061c0010009c0000061c01008041000000c0011002100000062b011001c70000801002000039186a18650000040f0000000100200190000000840000613d00000010020000290008000100200092000000000101043b0000000d04000029000000000204041a000000080020006c00000f830000a13d0000000902000029000000010220008a0000000001120019000000000101041a000900000001001d000000000040043f00000000010004140000061c0010009c0000061c01008041000000c0011002100000062b011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000101043b00000008011000290000000902000029000000000021041b000000000020043f0000000e01000029000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000101043b0000001002000029000000000021041b0000000d03000029000000000103041a001000000001001d000000000001004b00000f890000613d000000000030043f00000000010004140000061c0010009c0000061c01008041000000c0011002100000062b011001c70000801002000039186a18650000040f0000000100200190000000840000613d0000001002000029000000010220008a000000000101043b0000000001210019000000000001041b0000000d01000029000000000021041b0000000c01000029000000000010043f0000000e01000029000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f000000010020019000000cd90000c13d000000840000013d0000000b01000029000000000010043f0000000701000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000301043b000000000003041b0000000101300039000000000001041b0000000201300039000000000001041b0000000301300039000000000001041b0000000404300039000000000104041a000000010010019000000001051002700000007f0550618f0000001f0050008c00000000020000390000000102002039000000000121013f000000010010019000000e000000c13d000000000005004b00000dae0000613d0000001f0050008c00000dad0000a13d000f00000005001d001100000003001d001000000004001d000000000040043f00000000010004140000061c0010009c0000061c01008041000000c0011002100000062b011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000101043b0000000f020000290000001f02200039000000050220027000000000022100190000000103100039000000000023004b00000da90000813d000000000003041b0000000103300039000000000023004b00000da50000413d0000001002000029000000000002041b00000000040100190000001103000029000000000004041b0000000501300039000000000201041a000000000001041b000000000002004b00000dc60000613d001100000002001d000000000010043f00000000010004140000061c0010009c0000061c01008041000000c0011002100000062b011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000101043b0000001102100029000000000021004b00000dc60000813d000000000001041b0000000101100039000000000021004b00000dc20000413d000000400100043d0000000b0200002900000000002104350000061c0010009c0000061c01008041000000400110021000000000020004140000061c0020009c0000061c02008041000000c002200210000000000112019f0000062b011001c70000800d0200003900000001030000390000065d04000041186a18600000040f0000000100200190000000840000613d00000007020000290000000102200039000000060020006c00000c4d0000413d000005ba0000013d0000001f0530018f0000061e06300198000000400200043d000000000462001900000de80000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000de40000c13d000000000005004b00000df50000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f000000000014043500000060013002100000061c0020009c0000061c020080410000004002200210000000000112019f0000186c000104300000067302000041000001400020043f000001440010043f00000674010000410000186c000104300000068201000041000000000010043f0000002201000039000000040010043f0000065f010000410000186c00010430000006870200004100000a780000013d0000002404200039000000000034043500000626030000410000000000320435000000040320003900000000001304350000061c0020009c0000061c02008041000000400120021000000627011001c70000186c000104300000000f020000290000000002020433000000000002004b00000ec90000613d000000000200001900000e1f0000013d000000110200002900000001022000390000000f010000290000000001010433000000000012004b00000ec80000813d001100000002001d00000005012002100000000e0110002900000000010104330000061f0310019800000e190000613d000000000030043f0000000301000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039001000000003001d186a18650000040f00000010040000290000000100200190000000840000613d000000000101043b000000000101041a000000000001004b00000e190000c13d0000000203000039000000000103041a000006200010009c000001220000213d0000000102100039000000000023041b0000062a0110009a000000000041041b000000000103041a000d00000001001d000000000040043f0000000301000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f00000010030000290000000100200190000000840000613d000000000101043b0000000d02000029000000000021041b000000400100043d00000000003104350000061c0010009c0000061c01008041000000400110021000000000020004140000061c0020009c0000061c02008041000000c002200210000000000112019f0000062b011001c70000800d0200003900000001030000390000062c04000041186a18600000040f000000010020019000000e190000c13d000000840000013d000000000001004b00000e870000613d000000a00200043d0000066302200197000000000021004b00000e870000813d0000001101000029000000000010043f0000000701000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000101043b0000008002000039186a171a0000040f000001200100043d0000066301100197000000e00200043d000000000002004b00000edc0000c13d000000000001004b00000e830000c13d000001000100043d000006630010019800000ee20000613d000000400200043d001100000002001d000006660100004100000fc00000013d000000400200043d001100000002001d0000066401000041000000000012043500000004022000390000008001000039186a14d70000040f00000011010000290000061c0010009c0000061c01008041000000400110021000000665011001c70000186c000104300000002001700039000000100200002900000000002104350000002001000039000000000017043500000040017000390000000a021000290000000f0300002900000002033003670000000a0000006b00000ea50000613d000000000403034f0000000005010019000000004604043c0000000005650436000000000025004b00000ea10000c13d0000000e0000006b00000eb30000613d0000000a033003600000000e040000290000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000320435000000100110002900000000000104350000061c0070009c0000061c0700804100000040017002100000000b020000290000067d0020009c0000067d020080410000006002200210000000000112019f00000000020004140000061c0020009c0000061c02008041000000c002200210000000000121019f0000067e0110009a0000800d0200003900000002030000390000067f04000041000000110500002900000a340000013d000000e00100043d000000800200043d00000140000004430000016000200443000000a00200043d00000020030000390000018000300443000001a000200443000000c00200043d0000004004000039000001c000400443000001e0002004430000006002000039000002000020044300000220001004430000010000300443000000040100003900000120001004430000062d010000410000186b0001042e000000000001004b00000fbd0000613d000001000200043d0000066302200197000000000021004b00000fbd0000813d0000001101000029000000000010043f0000000701000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000101043b0000000201100039000000e002000039186a171a0000040f000000400100043d00000011020000290000000002210436000000800300043d000000000003004b0000000003000039000000010300c0390000000000320435000000a00200043d000006630220019700000040031000390000000000230435000000c00200043d000006630220019700000060031000390000000000230435000000e00200043d000000000002004b0000000002000039000000010200c03900000080031000390000000000230435000001000200043d0000066302200197000000a0031000390000000000230435000001200200043d0000066302200197000000c00310003900000000002304350000061c0010009c0000061c01008041000000400110021000000000020004140000061c0020009c0000061c02008041000000c002200210000000000112019f00000675011001c70000800d020000390000000103000039000006760400004100000a340000013d000000000200001900000f250000013d00000010020000290000000102200039000000800100043d000000000012004b0000047e0000813d001000000002001d0000000501200210000000a00110003900000000010104330000061f01100197001100000001001d000000000010043f0000000301000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000101043b000000000301041a000000000003004b00000f200000613d0000000201000039000000000201041a000000000002004b000012a60000613d000000010130008a000000000023004b00000f5d0000613d000000000012004b00000f830000a13d000006960130009a000006960220009a000000000202041a000000000021041b000000000020043f0000000301000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039000d00000003001d186a18650000040f0000000d030000290000000100200190000000840000613d000000000101043b000000000031041b0000000201000039000000000301041a000000000003004b00000f890000613d000000010130008a000006960230009a000000000002041b0000000202000039000000000012041b0000001101000029000000000010043f0000000301000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000101043b000000000001041b000000400100043d000000110200002900000000002104350000061c0010009c0000061c01008041000000400110021000000000020004140000061c0020009c0000061c02008041000000c002200210000000000112019f0000062b011001c70000800d0200003900000001030000390000069704000041186a18600000040f000000010020019000000f200000c13d000000840000013d0000068201000041000000000010043f0000003201000039000000040010043f0000065f010000410000186c000104300000068201000041000000000010043f0000003101000039000000040010043f0000065f010000410000186c00010430000000400300043d001100000003001d0000002401300039000000400200003900000000002104350000066d01000041000000000013043500000004013000390000000b02000029000000000021043500000044023000390000001001000029186a132d0000040f000000110200002900000000012100490000061c0010009c0000061c010080410000061c0020009c0000061c0200804100000060011002100000004002200210000000000121019f0000186c000104300000001001000029000000000010043f0000000301000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000101043b000000000101041a000000000001004b00000b340000c13d000000400100043d00000688020000410000000000210435000000040210003900000010030000290000038c0000013d000000400200043d001100000002001d000006640100004100000000001204350000000402200039000000e00100003900000e8d0000013d0000000401000039000000000301041a00000699010000410000000d0400002900000000001404350000000f01000029000000000012043500000024014000390000000002000411000000000021043500000000010004140000061f02300197000000040020008c00000fdd0000c13d0000000103000031000000200030008c00000020040000390000000004034019000010060000013d000000400100043d0000065e02000041000000000021043500000004021000390000000b030000290000038c0000013d0000000d030000290000061c0030009c0000061c0300804100000040033002100000061c0010009c0000061c01008041000000c001100210000000000131019f00000627011001c7186a18650000040f00000060031002700000061c03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000d0570002900000ff60000613d000000000801034f0000000d09000029000000008a08043c0000000009a90436000000000059004b00000ff20000c13d000000000006004b000010030000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0000000100200190000010310000613d0000001f01400039000000600210018f0000000d01200029000000000021004b00000000020000390000000102004039000006200010009c000001220000213d0000000100200190000001220000c13d000000400010043f000000200030008c000000840000413d0000000d020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b000000840000c13d000000000002004b0000113e0000c13d0000068a020000410000000000210435000000040210003900000000030004110000038c0000013d0000000401000039000000000301041a00000689010000410000000e0400002900000000001404350000001001000029000000000012043500000000010004140000061f02300197000000040020008c0000103d0000c13d0000000103000031000000200030008c00000020040000390000000004034019000010660000013d0000001f0530018f0000061e06300198000000400200043d000000000462001900000de80000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000010380000c13d00000de80000013d0000000e030000290000061c0030009c0000061c0300804100000040033002100000061c0010009c0000061c01008041000000c001100210000000000131019f0000065f011001c7186a18650000040f00000060031002700000061c03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000e05700029000010560000613d000000000801034f0000000e09000029000000008a08043c0000000009a90436000000000059004b000010520000c13d000000000006004b000010630000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0000000100200190000011250000613d0000001f01400039000000600210018f0000000e01200029000000000021004b00000000020000390000000102004039000006200010009c000001220000213d0000000100200190000001220000c13d000000400010043f000000200030008c000000840000413d0000000e0200002900000000020204330000066b0020009c000000840000813d0000000003000411000000000023004b0000117e0000c13d00000002010003670000000f02100360000000000202043b000006200020009c000000840000213d0000000f030000290000004003300039000000000131034f000000000101043b001000000001001d000000000020043f0000000701000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000101043b00000010020000290000001103000029186a17870000040f0000068b0100004100000000001004430000001101000029000000040010044300000000010004140000061c0010009c0000061c01008041000000c0011002100000068c011001c70000800202000039186a18650000040f0000000100200190000012990000613d000000000101043b000000000001004b000000840000613d000000400200043d0000068d010000410000000000120435000e00000002001d00000004012000390000001002000029000000000021043500000000010004140000001102000029000000040020008c000010be0000613d0000000e020000290000061c0020009c0000061c0200804100000040022002100000061c0010009c0000061c01008041000000c001100210000000000121019f0000065f011001c70000001102000029186a18600000040f00000060031002700001061c0030019d0000000100200190000012090000613d0000000e01000029000006200010009c000001220000213d0000000e02000029000000400020043f000000100100002900000000001204350000061c0020009c0000061c02008041000000400120021000000000020004140000061c0020009c0000061c02008041000000c002200210000000000112019f0000062b011001c70000800d0200003900000002030000390000068e040000410000000005000411186a18600000040f0000000100200190000000840000613d0000000f010000290000000201100367000000000101043b000006200010009c000000840000213d186a147c0000040f000000400200043d001100000002001d0000000002000412001700000002001d001600200000003d001000000001001d000080050100003900000044030000390000000004000415000000170440008a00000005044002100000067102000041186a18420000040f000000ff0310018f00000011010000290000002002100039000000000032043500000020020000390000000000210435186a13170000040f000000400100043d000e00000001001d186a13170000040f0000000e020000290000002001200039000f00000001001d00000011030000290000000000310435000000100100002900000000001204350000000003020019000000400400043d001100000004001d000000200100003900000000021404360000000001030433000000400300003900000000003204350000006002400039186a132d0000040f000000000201001900000011040000290000000001410049000000200310008a0000000f01000029000000000101043300000040044000390000000000340435186a132d0000040f000000110200002900000000012100490000061c0020009c0000061c0200804100000040022002100000061c0010009c0000061c010080410000006001100210000000000121019f0000186b0001042e00000009010000290000000001010433000000400200043d00000667030000410000000000320435000006200110019700000a6f0000013d000000400200043d001100000002001d0000066601000041000011340000013d000000400300043d001100000003001d00000666020000410000113b0000013d0000001f0530018f0000061e06300198000000400200043d000000000462001900000de80000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000112c0000c13d00000de80000013d000000400200043d001100000002001d000006640100004100000000001204350000000402200039000000000103001900000e8d0000013d000000400300043d001100000003001d00000664020000410000000000230435000000040230003900000e8d0000013d00000002020003670000000e01200360000000000101043b000006200010009c000000840000213d0000000e030000290000008003300039000000000332034f000000000303043b0000000004000031000000110540006a000000230550008a00000621065001970000062107300197000000000867013f000000000067004b00000000060000190000062106004041000000000053004b00000000050000190000062105008041000006210080009c000000000605c019000000000006004b000000840000c13d0000001105000029000f00040050003d0000000f05300029000000000252034f000000000302043b000006200030009c000000840000213d0000000004340049000000200250003900000621054001970000062106200197000000000756013f000000000056004b00000000050000190000062105004041000000000042004b00000000040000190000062104002041000006210070009c000000000504c019000000000005004b000000840000c13d186a13d70000040f000000000001004b000011820000c13d0000001101000029000000a4021000390000000f01000029186a13750000040f0000069e03000041000000400500043d001100000005001d00000000003504350000000403500039000000200400003900000000004304350000002403500039186a14480000040f00000f9c0000013d0000068a02000041000000000021043500000004021000390000038c0000013d00000002010003670000000e02100360000000000202043b000006200020009c000000840000213d0000000e03000029000d00400030003d0000000d01100360000000000101043b000e00000001001d000000000020043f0000000701000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000000840000613d000000000101043b00000002011000390000000e020000290000001003000029186a17870000040f0000000d01000029000d00600010003d00000002030003670000000d01300360000000000101043b0000000004000031000000110240006a000000230220008a00000621052001970000062106100197000000000756013f000000000056004b00000000050000190000062105004041000000000021004b00000000020000190000062102008041000006210070009c000000000502c019000000000005004b000000840000c13d0000000f01100029000000000213034f000000000202043b000006200020009c000000840000213d0000000005240049000000200610003900000621015001970000062107600197000000000817013f000000000017004b00000000010000190000062101004041000000000056004b00000000050000190000062105002041000006210080009c000000000105c019000000000001004b000000840000c13d0000001f01200039000006a5011001970000003f01100039000006a505100197000000400100043d0000000005510019000000000015004b00000000080000390000000108004039000006200050009c000001220000213d0000000100800190000001220000c13d000000400050043f00000000052104360000000008620019000000000048004b000000840000213d000000000463034f000006a5062001980000001f0720018f0000000003650019000011e30000613d000000000804034f0000000009050019000000008a08043c0000000009a90436000000000039004b000011df0000c13d000000000007004b000011f00000613d000000000464034f0000000306700210000000000703043300000000076701cf000000000767022f000000000404043b0000010006600089000000000464022f00000000046401cf000000000474019f0000000000430435000000000225001900000000000204350000000002010433000000200020008c000012160000613d000000000002004b0000121a0000c13d00000671010000410000000000100443000000000100041200000004001004430000002001000039000000240010044300000000010004140000061c0010009c0000061c01008041000000c00110021000000683011001c70000800502000039186a18650000040f0000000100200190000012990000613d000000000101043b001100000001001d000012230000013d0000061c033001970000001f0530018f0000061e06300198000000400200043d000000000462001900000de80000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000012110000c13d00000de80000013d0000000002050433001100000002001d000000ff0020008c000012230000a13d000000400400043d001100000004001d0000069d020000410000000000240435000000040240003900000020030000390000000000320435000000240240003900000f9b0000013d00000671010000410000000000100443000000000100041200000004001004430000002001000039000000240010044300000000010004140000061c0010009c0000061c01008041000000c00110021000000683011001c70000800502000039186a18650000040f0000000100200190000012990000613d0000001102000029000000ff0220018f000000000301043b000000ff0430018f000000000142004b0000129a0000c13d0000000e01000029001100000001001d0000000d01000029000000800110008a000e00000001001d0000000201100367000000000101043b000f00000001001d0000061f0010009c000000840000213d0000068b0100004100000000001004430000001001000029000000040010044300000000010004140000061c0010009c0000061c01008041000000c0011002100000068c011001c70000800202000039186a18650000040f0000000100200190000012990000613d000000000101043b000000000001004b000000840000613d000000400300043d0000002401300039000000110200002900000000002104350000069b010000410000000000130435000d00000003001d00000004013000390000000f02000029000000000021043500000000010004140000001002000029000000040020008c0000126f0000613d0000000d020000290000061c0020009c0000061c0200804100000040022002100000061c0010009c0000061c01008041000000c001100210000000000121019f00000627011001c70000001002000029186a18600000040f00000060031002700001061c0030019d0000000100200190000012b20000613d0000000d01000029000006200010009c000001220000213d0000000d01000029000000400010043f0000000e010000290000000201100367000000000601043b0000061f0060009c000000840000213d00000011010000290000000d0200002900000000001204350000061c0020009c0000061c02008041000000400120021000000000020004140000061c0020009c0000061c02008041000000c002200210000000000112019f0000062b011001c70000800d0200003900000003030000390000069c040000410000000005000411186a18600000040f0000000100200190000000840000613d000000400100043d001000000001001d186a130c0000040f000000110200002900000010010000290000000000210435000000400100043d00000000002104350000061c0010009c0000061c01008041000000400110021000000690011001c70000186b0001042e000000000001042f000012a30000a13d000001000010008c000012a60000813d0000004d0010008c000012e10000213d000000000001004b000012bf0000c13d0000000102000039000012ca0000013d0000000001240049000000ff0010008c000012ac0000a13d0000068201000041000000000010043f0000001101000039000000040010043f0000065f010000410000186c000104300000004e0010008c000012e10000813d000000000001004b000012cc0000c13d0000000102000039000012de0000013d0000061c033001970000001f0530018f0000061e06300198000000400200043d000000000462001900000de80000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000012ba0000c13d00000de80000013d0000000a030000390000000102000039000000010010019000000000043300a9000000010300603900000000022300a900000001011002720000000003040019000012c10000c13d000000000002004b000012d80000613d0000000e012000f9000012390000013d0000000a0500003900000001020000390000000004010019000000010040019000000000065500a9000000010500603900000000022500a900000001044002720000000005060019000012cf0000c13d000000000002004b000012de0000c13d0000068201000041000000000010043f0000001201000039000000040010043f0000065f010000410000186c00010430000006a6022001290000000e0020006c000012f30000813d000000400200043d001000000002001d0000069a010000410000000000120435000000040120003900000011020000290000000e04000029186a14e50000040f000000100200002900000000012100490000061c0010009c0000061c0100804100000060011002100000061c0020009c0000061c020080410000004002200210000000000121019f0000186c00010430000000ff0210018f0000004d0020008c000012a60000213d000000000002004b000012fa0000c13d0000000101000039000013030000013d0000000a030000390000000101000039000000010020019000000000043300a9000000010300603900000000011300a900000001022002720000000003040019000012fc0000c13d0000000e0000006b001100000000001d0000123a0000613d0000000e031000b9001100000003001d0000000e023000fa000000000012004b0000123a0000613d000012a60000013d000006a80010009c000013110000813d0000002001100039000000400010043f000000000001042d0000068201000041000000000010043f0000004101000039000000040010043f0000065f010000410000186c00010430000006a90010009c0000131c0000813d0000004001100039000000400010043f000000000001042d0000068201000041000000000010043f0000004101000039000000040010043f0000065f010000410000186c00010430000006aa0010009c000013270000813d000000a001100039000000400010043f000000000001042d0000068201000041000000000010043f0000004101000039000000040010043f0000065f010000410000186c0001043000000000430104340000000001320436000000000003004b000013390000613d000000000200001900000000052100190000000006240019000000000606043300000000006504350000002002200039000000000032004b000013320000413d000000000231001900000000000204350000001f02300039000006a5022001970000000001210019000000000001042d000006600010009c0000135a0000213d000000430010008c0000135a0000a13d00000002020003670000000403200370000000000403043b000006200040009c0000135a0000213d0000002403200370000000000503043b000006200050009c0000135a0000213d0000002303500039000000000013004b0000135a0000813d0000000403500039000000000232034f000000000302043b000006200030009c0000135a0000213d00000024025000390000000005320019000000000015004b0000135a0000213d0000000001040019000000000001042d00000000010000190000186c0001043000000000430204340000066303300197000000000331043600000000040404330000061c04400197000000000043043500000040032000390000000003030433000000000003004b0000000003000039000000010300c039000000400410003900000000003404350000006003200039000000000303043300000663033001970000006004100039000000000034043500000080022000390000000002020433000006630220019700000080031000390000000000230435000000a001100039000000000001042d0000000204000367000000000224034f000000000202043b000000000300003100000000051300490000001f0550008a00000621065001970000062107200197000000000867013f000000000067004b00000000060000190000062106002041000000000052004b00000000050000190000062105004041000006210080009c000000000605c019000000000006004b0000139d0000613d0000000001120019000000000214034f000000000202043b000006200020009c0000139d0000213d0000000003230049000000200110003900000621043001970000062105100197000000000645013f000000000045004b00000000040000190000062104004041000000000031004b00000000030000190000062103002041000006210060009c000000000403c019000000000004004b0000139d0000c13d000000000001042d00000000010000190000186c00010430000006ab0020009c000013cf0000813d00000000040100190000001f01200039000006a5011001970000003f01100039000006a505100197000000400100043d0000000005510019000000000015004b00000000070000390000000107004039000006200050009c000013cf0000213d0000000100700190000013cf0000c13d000000400050043f00000000052104360000000007420019000000000037004b000013d50000213d000006a5062001980000001f0720018f00000002044003670000000003650019000013bf0000613d000000000804034f0000000009050019000000008a08043c0000000009a90436000000000039004b000013bb0000c13d000000000007004b000013cc0000613d000000000464034f0000000306700210000000000703043300000000076701cf000000000767022f000000000404043b0000010006600089000000000464022f00000000046401cf000000000474019f000000000043043500000000022500190000000000020435000000000001042d0000068201000041000000000010043f0000004101000039000000040010043f0000065f010000410000186c0001043000000000010000190000186c000104300003000000000002000300000003001d000200000002001d0000062001100197000000000010043f0000000701000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000207000029000000030a0000290000000100200190000014400000613d0000000003000031000000000601043b000006ab00a0009c000014420000813d0000001f01a00039000006a5011001970000003f01100039000006a502100197000000400100043d0000000002210019000000000012004b00000000050000390000000105004039000006200020009c000014420000213d0000000100500190000014420000c13d000100000006001d000000400020043f0000000002a1043600000000057a0019000000000035004b000014400000213d000006a504a001980000001f05a0018f000000020670036700000000034200190000140b0000613d000000000706034f0000000008020019000000007907043c0000000008980436000000000038004b000014070000c13d000000000005004b000014180000613d000000000446034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004304350000000003a2001900000000000304350000061c0020009c0000061c02008041000000400220021000000000010104330000061c0010009c0000061c010080410000006001100210000000000121019f00000000020004140000061c0020009c0000061c02008041000000c002200210000000000112019f00000658011001c70000801002000039186a18650000040f0000000100200190000014400000613d000000000101043b000000000010043f00000001010000290000000601100039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000014400000613d000000000101043b000000000101041a000000000001004b0000000001000039000000010100c039000000000001042d00000000010000190000186c000104300000068201000041000000000010043f0000004101000039000000040010043f0000065f010000410000186c000104300000000003230436000006a5062001980000001f0720018f00000000056300190000000201100367000014540000613d000000000801034f0000000009030019000000008a08043c0000000009a90436000000000059004b000014500000c13d000000000007004b000014610000613d000000000161034f0000000306700210000000000705043300000000076701cf000000000767022f000000000101043b0000010006600089000000000161022f00000000016101cf000000000171019f0000000000150435000000000123001900000000000104350000001f01200039000006a5011001970000000001130019000000000001042d000000400100043d000006aa0010009c000014760000813d000000a002100039000000400020043f000000800210003900000000000204350000006002100039000000000002043500000040021000390000000000020435000000200210003900000000000204350000000000010435000000000001042d0000068201000041000000000010043f0000004101000039000000040010043f0000065f010000410000186c0001043000030000000000020000062001100197000000000010043f0000000701000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000014c90000613d000000000101043b0000000405100039000000000205041a000000010320019000000001062002700000007f0660618f0000001f0060008c00000000040000390000000104002039000000000043004b000014cb0000c13d000000400100043d0000000004610436000000000003004b000014b50000613d000100000004001d000200000006001d000300000001001d000000000050043f00000000010004140000061c0010009c0000061c01008041000000c0011002100000062b011001c70000801002000039186a18650000040f0000000100200190000014c90000613d0000000206000029000000000006004b000014bb0000613d000000000201043b0000000005000019000000030100002900000001070000290000000003570019000000000402041a000000000043043500000001022000390000002005500039000000000065004b000014ad0000413d000014bd0000013d000006a7022001970000000000240435000000000006004b00000020050000390000000005006039000014bd0000013d000000000500001900000003010000290000003f03500039000006a5023001970000000003120019000000000023004b00000000020000390000000102004039000006200030009c000014d10000213d0000000100200190000014d10000c13d000000400030043f000000000001042d00000000010000190000186c000104300000068201000041000000000010043f0000002201000039000000040010043f0000065f010000410000186c000104300000068201000041000000000010043f0000004101000039000000040010043f0000065f010000410000186c000104300000000043010434000000000003004b0000000003000039000000010300c039000000000332043600000000040404330000066304400197000000000043043500000040022000390000004001100039000000000101043300000663011001970000000000120435000000000001042d00000040051000390000000000450435000000ff0330018f00000020041000390000000000340435000000ff0220018f00000000002104350000006001100039000000000001042d0007000000000002000400000001001d000600000002001d0000000021020434000000000001004b000016070000613d0000061c0010009c0000061c0100804100000060011002100000061c0020009c000500000002001d0000061c020080410000004002200210000000000121019f00000000020004140000061c0020009c0000061c02008041000000c002200210000000000112019f00000658011001c70000801002000039186a18650000040f0000000100200190000015ff0000613d000000000101043b000700000001001d00000004010000290000062001100197000200000001001d000000000010043f0000000701000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000015ff0000613d000000000201043b0000000701000029000000000010043f000400000002001d0000000601200039000300000001001d000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000015ff0000613d000000000101043b000000000101041a000000000001004b0000160f0000c13d00000004010000290000000502100039000000000102041a000006ab0010009c000016010000813d000100000001001d0000000101100039000000000012041b000400000002001d000000000020043f00000000010004140000061c0010009c0000061c01008041000000c0011002100000062b011001c70000801002000039186a18650000040f00000001002001900000000702000029000015ff0000613d000000000101043b0000000101100029000000000021041b0000000401000029000000000101041a000400000001001d000000000020043f0000000301000029000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f00000001002001900000000702000029000015ff0000613d000000000101043b0000000403000029000000000031041b000000000020043f0000000801000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000015ff0000613d000000000801043b00000006010000290000000004010433000006200040009c000016010000213d000000000108041a000000010210019000000001031002700000007f0330618f0000001f0030008c00000000010000390000000101002039000000000012004b0000000507000029000016260000c13d000000200030008c000400000008001d000700000004001d000015920000413d000300000003001d000000000080043f00000000010004140000061c0010009c0000061c01008041000000c0011002100000062b011001c70000801002000039186a18650000040f0000000100200190000015ff0000613d00000007040000290000001f024000390000000502200270000000200040008c0000000002004019000000000301043b00000003010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b00000005070000290000000408000029000015920000813d000000000002041b0000000102200039000000000012004b0000158e0000413d0000001f0040008c000000200a00008a000000200b000039000015c20000a13d000000000080043f00000000010004140000061c0010009c0000061c01008041000000c0011002100000062b011001c70000801002000039186a18650000040f0000000100200190000015ff0000613d0000000709000029000000200a00008a0000000002a90170000000000101043b000000200b000039000015f80000613d000000010320008a000000050330027000000000043100190000002003000039000000010440003900000005070000290000000606000029000000040800002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000015ae0000c13d000000000092004b000015bf0000813d0000000302900210000000f80220018f000006a60220027f000006a60220016700000000036300190000000003030433000000000223016f000000000021041b000000010190021000000001011001bf000015ce0000013d000000000004004b000015c60000613d0000000001070433000015c70000013d000000000100001900000006060000290000000302400210000006a60220027f000006a602200167000000000121016f0000000102400210000000000121019f000000000018041b000000400100043d0000000003b10436000000000206043300000000002304350000004003100039000000000002004b000015de0000613d000000000400001900000000053400190000000006740019000000000606043300000000006504350000002004400039000000000024004b000015d70000413d0000001f042000390000000004a4016f0000000002230019000000000002043500000040024000390000061c0020009c0000061c0200804100000060022002100000061c0010009c0000061c010080410000004001100210000000000112019f00000000020004140000061c0020009c0000061c02008041000000c002200210000000000121019f00000658011001c70000800d0200003900000002030000390000066e040000410000000205000029186a18600000040f0000000100200190000015ff0000613d000000000001042d00000000030b0019000000050700002900000006060000290000000408000029000000000092004b000015b70000413d000015bf0000013d00000000010000190000186c000104300000068201000041000000000010043f0000004101000039000000040010043f0000065f010000410000186c00010430000000400100043d000006700200004100000000002104350000061c0010009c0000061c01008041000000400110021000000625011001c70000186c00010430000000400300043d000700000003001d0000002401300039000000400200003900000000002104350000066d01000041000000000013043500000004013000390000000202000029000000000021043500000044023000390000000601000029186a132d0000040f000000070200002900000000012100490000061c0010009c0000061c010080410000061c0020009c0000061c0200804100000060011002100000004002200210000000000121019f0000186c000104300000068201000041000000000010043f0000002201000039000000040010043f0000065f010000410000186c000104300005000000000002000000400300043d000006aa0030009c000016730000813d000000a002300039000000400020043f00000080023000390000000000020435000000600230003900000000000204350000004002300039000000000002043500000020023000390000000000020435000000000003043500000060021000390000000002020433000100000002001d000500000001001d0000000012010434000300000002001d000200000001001d0000000001010433000400000001001d0000066901000041000000000010044300000000010004140000061c0010009c0000061c01008041000000c0011002100000066a011001c70000800b02000039186a18650000040f0000000100200190000016790000613d00000004020000290000061c04200197000000000601043b000000000346004b00000005010000290000166d0000413d00000080021000390000000002020433000006630520019700000000023500a9000000000046004b0000165e0000613d00000000033200d9000000000053004b0000166d0000c13d00000003030000290000066303300197000000000032001a0000166d0000413d0000000002320019000000010300002900000663033001970000066304200197000000000023004b000000000304801900000000003104350000061c0260019700000002030000290000000000230435000000000001042d0000068201000041000000000010043f0000001101000039000000040010043f0000065f010000410000186c000104300000068201000041000000000010043f0000004101000039000000040010043f0000065f010000410000186c00010430000000000001042f000000000010043f0000000601000039000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f00000001002001900000168c0000613d000000000101043b000000000101041a000000000001004b0000000001000039000000010100c039000000000001042d00000000010000190000186c000104300006000000000002000300000002001d000000000020043f000600000001001d0000000101100039000400000001001d000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000017060000613d0000000603000029000000000101043b000000000101041a000000000001004b000017040000613d000000000203041a000000000002004b000017080000613d000000000021004b000500000001001d000016e20000613d000200000002001d000000000030043f00000000010004140000061c0010009c0000061c01008041000000c0011002100000062b011001c70000801002000039186a18650000040f0000000100200190000017060000613d00000005020000290001000100200092000000000101043b0000000604000029000000000204041a000000010020006c0000170e0000a13d0000000202000029000000010220008a0000000001120019000000000101041a000200000001001d000000000040043f00000000010004140000061c0010009c0000061c01008041000000c0011002100000062b011001c70000801002000039186a18650000040f0000000100200190000017060000613d000000000101043b00000001011000290000000202000029000000000021041b000000000020043f0000000401000029000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000017060000613d000000000101043b0000000502000029000000000021041b0000000603000029000000000103041a000500000001001d000000000001004b000017140000613d000000000030043f00000000010004140000061c0010009c0000061c01008041000000c0011002100000062b011001c70000801002000039186a18650000040f0000000100200190000017060000613d0000000502000029000000010220008a000000000101043b0000000001210019000000000001041b0000000601000029000000000021041b0000000301000029000000000010043f0000000401000029000000200010043f00000000010004140000061c0010009c0000061c01008041000000c00110021000000629011001c70000801002000039186a18650000040f0000000100200190000017060000613d000000000101043b000000000001041b0000000101000039000000000001042d0000000001000019000000000001042d00000000010000190000186c000104300000068201000041000000000010043f0000001101000039000000040010043f0000065f010000410000186c000104300000068201000041000000000010043f0000003201000039000000040010043f0000065f010000410000186c000104300000068201000041000000000010043f0000003101000039000000040010043f0000065f010000410000186c000104300003000000000002000100000002001d000300000001001d000000000101041a000200000001001d0000066901000041000000000010044300000000010004140000061c0010009c0000061c01008041000000c0011002100000066a011001c70000800b02000039186a18650000040f00000001002001900000177c0000613d000000020800002900000080028002700000061c03200197000000000201043b000000000532004b0000000307000029000017760000413d0000000101700039000017350000c13d000000000207041a000017470000013d000000000301041a000000800630027000000000045600a900000000055400d9000000000065004b000017760000c13d0000066305800197000000000054001a000017760000413d00000663033001970000000004540019000000000043004b000000000304801900000623048001970000008002200210000006ac02200197000000000242019f000000000232019f00000001060000290000002003600039000000000403043300000663044001970000066305200197000000000054004b0000000005044019000006ad02200197000000000225019f0000000005060433000000000005004b00000000050000190000066b0500c041000000000252019f000000000027041b000000400260003900000000050204330000008005500210000000000445019f000000000041041b0000000001000039000000010100c039000000400400043d000000000114043600000000030304330000066303300197000000000031043500000000010204330000066301100197000000400240003900000000001204350000061c0040009c0000061c04008041000000400140021000000000020004140000061c0020009c0000061c02008041000000c002200210000000000112019f000006ae011001c70000800d020000390000000103000039000006af04000041186a18600000040f00000001002001900000177d0000613d000000000001042d0000068201000041000000000010043f0000001101000039000000040010043f0000065f010000410000186c00010430000000000001042f00000000010000190000186c000104300000061f04400197000000400510003900000000004504350000002004100039000000000034043500000000002104350000006001100039000000000001042d0006000000000002000000000401041a0000067700400198000017db0000613d000000000002004b000017db0000613d000600000004001d000500000002001d000200000003001d000300000001001d0000000101100039000100000001001d000000000101041a000400000001001d0000066901000041000000000010044300000000010004140000061c0010009c0000061c01008041000000c0011002100000066a011001c70000800b02000039186a18650000040f0000000100200190000017dc0000613d000000060300002900000080023002700000061c02200197000000000101043b000000000421004b000017f70000413d000006630330019700000004050000290000066302500197000017ad0000c13d00000005040000290000000305000029000017c10000013d000000000023004b000017ff0000213d000000800650027000000000056400a900000000044500d9000000000064004b000017f70000c13d000000000035001a000017f70000413d00000000033500190000008001100210000006ac011001970000000305000029000000000405041a000006b004400197000000000114019f000000000015041b000000000032004b00000000030240190000000504000029000000000042004b000017dd0000413d000000000143004b000017ee0000413d0000066301100197000000000205041a000006b202200197000000000112019f000000000015041b000000400100043d00000000004104350000061c0010009c0000061c01008041000000400110021000000000020004140000061c0020009c0000061c02008041000000c002200210000000000112019f0000062b011001c70000800d020000390000000103000039000006b304000041186a18600000040f0000000100200190000017fd0000613d000000000001042d000000000001042f000000400100043d0000000004010019000000040110003900000002030000290000061f00300198000018070000c13d000006b703000041000000000034043500000000002104350000002401400039000000050200002900000000002104350000061c0040009c0000061c04008041000000400140021000000627011001c70000186c000104300000000101000029000000000101041a0000008001100272000017f70000613d00000005043000690000000002140019000000010220008a000000000042004b0000180c0000813d0000068201000041000000000010043f0000001101000039000000040010043f0000065f010000410000186c0001043000000000010000190000186c00010430000000400100043d000006b10200004100000000002104350000061c0010009c0000061c01008041000000400110021000000625011001c70000186c00010430000006b603000041000600000004001d00000000003404350000000503000029000018200000013d00000000021200d9000000400100043d0000000005010019000000040110003900000002040000290000061f004001980000181d0000c13d000006b50400004100000000004504350000000000210435000000240150003900000000003104350000061c0050009c0000061c05008041000000400150021000000627011001c70000186c00010430000006b404000041000600000005001d00000000004504350000000204000029186a177f0000040f000000060200002900000000012100490000061c0010009c0000061c0100804100000060011002100000061c0020009c0000061c020080410000004002200210000000000121019f0000186c00010430000000000001042f0000061c0010009c0000061c0100804100000040011002100000061c0020009c0000061c020080410000006002200210000000000112019f00000000020004140000061c0020009c0000061c02008041000000c002200210000000000112019f00000658011001c70000801002000039186a18650000040f0000000100200190000018400000613d000000000101043b000000000001042d00000000010000190000186c0001043000000000050100190000000000200443000000050030008c000018500000413d000000040100003900000000020000190000000506200210000000000664001900000005066002700000000006060031000000000161043a0000000102200039000000000031004b000018480000413d0000061c0030009c0000061c03008041000000600130021000000000020004140000061c0020009c0000061c02008041000000c002200210000000000112019f000006b8011001c70000000002050019186a18650000040f00000001002001900000185f0000613d000000000101043b000000000001042d000000000001042f00001863002104210000000102000039000000000001042d0000000002000019000000000001042d00001868002104230000000102000039000000000001042d0000000002000019000000000001042d0000186a000004320000186b0001042e0000186c0001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffff0000000000000000000000000000000000000000313ce567000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000655a7c0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffdf0200000000000000000000000000000000000040000000000000000000000000bfa87805ed57dc1f0d489ce33be4c4577d74ccde357eeeee058a32c55c44a53202000000000000000000000000000000000000200000000000000000000000002640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d800000002000000000000000000000000000001400000010000000000000000009b15e16f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a4575b800000000000000000000000000000000000000000000000000000000c0d7865400000000000000000000000000000000000000000000000000000000dc0bd97000000000000000000000000000000000000000000000000000000000e8a1da1600000000000000000000000000000000000000000000000000000000e8a1da1700000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000dc0bd97100000000000000000000000000000000000000000000000000000000e0351e1300000000000000000000000000000000000000000000000000000000c75eea9b00000000000000000000000000000000000000000000000000000000c75eea9c00000000000000000000000000000000000000000000000000000000cf7401f300000000000000000000000000000000000000000000000000000000c0d7865500000000000000000000000000000000000000000000000000000000c4bffe2b00000000000000000000000000000000000000000000000000000000acfecf9000000000000000000000000000000000000000000000000000000000b0f479a000000000000000000000000000000000000000000000000000000000b0f479a100000000000000000000000000000000000000000000000000000000b794658000000000000000000000000000000000000000000000000000000000acfecf9100000000000000000000000000000000000000000000000000000000af58d59f000000000000000000000000000000000000000000000000000000009a4575b900000000000000000000000000000000000000000000000000000000a42a7b8b00000000000000000000000000000000000000000000000000000000a7cd63b70000000000000000000000000000000000000000000000000000000054c8a4f20000000000000000000000000000000000000000000000000000000079ba5096000000000000000000000000000000000000000000000000000000008926f54e000000000000000000000000000000000000000000000000000000008926f54f000000000000000000000000000000000000000000000000000000008da5cb5b0000000000000000000000000000000000000000000000000000000079ba5097000000000000000000000000000000000000000000000000000000007d54534e0000000000000000000000000000000000000000000000000000000054c8a4f30000000000000000000000000000000000000000000000000000000062ddd3c4000000000000000000000000000000000000000000000000000000006d3d1a5800000000000000000000000000000000000000000000000000000000240028e700000000000000000000000000000000000000000000000000000000390775360000000000000000000000000000000000000000000000000000000039077537000000000000000000000000000000000000000000000000000000004c5ef0ed00000000000000000000000000000000000000000000000000000000240028e80000000000000000000000000000000000000000000000000000000024f65ee70000000000000000000000000000000000000000000000000000000001ffc9a700000000000000000000000000000000000000000000000000000000181f5a770000000000000000000000000000000000000000000000000000000021df0da70200000000000000000000000000000000000000000000000000000000000000ed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278dad89dca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000800000000000000000fc949c7b4a13586e39d89eead2f38644f9fb3efb5a0490b14f8fc0ceab44c2515204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599161e670e4b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffff5f000000000000000000000000000000000000000000000000ffffffffffffff9f00000000000000000000000000000000ffffffffffffffffffffffffffffffff8020d124000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000d68af9cc000000000000000000000000000000000000000000000000000000001d5ad3c500000000000000000000000000000000000000000000000000000000fc949c7b4a13586e39d89eead2f38644f9fb3efb5a0490b14f8fc0ceab44c250796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d9553913202000002000000000000000000000000000000040000000000000000000000000000000000000000000000010000000000000000000000000000000000000000ffffffffffffffffffffff000000000000000000000000000000000000000000393b8ad2000000000000000000000000000000000000000000000000000000007d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c28579befe00000000000000000000000000000000000000000000000000000000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e00000000000000000000000000000000000000200000008000000000000000008e4a23d600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000140000000000000000002000000000000000000000000000000000000e00000000000000000000000000350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b0000000000000000000000ff0000000000000000000000000000000000000000036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0000000000000000000000000000000000000000000000000ffffffffffffff7f00000000000000000000000000000000000000000000003fffffffffffffffe0020000000000000000000000000000000000004000000080000000000000000002dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f168400000000000000000000000000000000000000000000000000000000ffffffbffdffffffffffffffffffffffffffffffffffffc000000000000000000000000052d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d7674f23c7c00000000000000000000000000000000000000000000000000000000405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace4e487b71000000000000000000000000000000000000000000000000000000000200000200000000000000000000000000000044000000000000000000000000961c9a4f000000000000000000000000000000000000000000000000000000002cbc26bb000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff0000000000000000000000000000000053ad11d800000000000000000000000000000000000000000000000000000000d0d2597600000000000000000000000000000000000000000000000000000000a8d87a3b00000000000000000000000000000000000000000000000000000000728fe07b000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000042966c6800000000000000000000000000000000000000000000000000000000696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df7a9902c7e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000020000000000000000000000000000000000002000000080000000000000000044676b5284b809a22248eba0da87391d79098be38bb03154be88a58bf4d0917402b543c6000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e02b5c74de00000000000000000000000000000000000000000000000000000000bfa87805ed57dc1f0d489ce33be4c4577d74ccde357eeeee058a32c55c44a533800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf756635f4a7b30000000000000000000000000000000000000000000000000000000083826b2b00000000000000000000000000000000000000000000000000000000a9cb113d0000000000000000000000000000000000000000000000000000000040c10f19000000000000000000000000000000000000000000000000000000009d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0953576f70000000000000000000000000000000000000000000000000000000024eb47e5000000000000000000000000000000000000000000000000000000004275726e4d696e74546f6b656e506f6f6c20312e352e310000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffc9a7000000000000000000000000000000000000000000000000000000000e64dd2900000000000000000000000000000000000000000000000000000000aff2afbf00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000ffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffffc0000000000000000000000000000000000000000000000000ffffffffffffff600000000000000000000000000000000000000000000000010000000000000000000000000000000000000000ffffffff00000000000000000000000000000000ffffffffffffffffffffff00ffffffff0000000000000000000000000000000002000000000000000000000000000000000000600000000000000000000000009ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19ffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff9725942a00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000000000001871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690ad0c8d23a0000000000000000000000000000000000000000000000000000000015279c08000000000000000000000000000000000000000000000000000000001a76572a00000000000000000000000000000000000000000000000000000000f94ebcd1000000000000000000000000000000000000000000000000000000000200000200000000000000000000000000000000000000000000000000000000") diff --git a/core/gethwrappers/ccip/generated_zks/burn_with_from_mint_token_pool/burn_with_from_mint_token_pool.go b/core/gethwrappers/ccip/generated_zks/burn_with_from_mint_token_pool/burn_with_from_mint_token_pool.go new file mode 100644 index 00000000000..177aecc5a21 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/burn_with_from_mint_token_pool/burn_with_from_mint_token_pool.go @@ -0,0 +1,3151 @@ +package burn_with_from_mint_token_pool + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type PoolLockOrBurnInV1 struct { + Receiver []byte + RemoteChainSelector uint64 + OriginalSender common.Address + Amount *big.Int + LocalToken common.Address +} + +type PoolLockOrBurnOutV1 struct { + DestTokenAddress []byte + DestPoolData []byte +} + +type PoolReleaseOrMintInV1 struct { + OriginalSender []byte + RemoteChainSelector uint64 + Receiver common.Address + Amount *big.Int + LocalToken common.Address + SourcePoolAddress []byte + SourcePoolData []byte + OffchainTokenData []byte +} + +type PoolReleaseOrMintOutV1 struct { + DestinationAmount *big.Int +} + +type RateLimiterConfig struct { + IsEnabled bool + Capacity *big.Int + Rate *big.Int +} + +type RateLimiterTokenBucket struct { + Tokens *big.Int + LastUpdated uint32 + IsEnabled bool + Capacity *big.Int + Rate *big.Int +} + +type TokenPoolChainUpdate struct { + RemoteChainSelector uint64 + RemotePoolAddresses [][]byte + RemoteTokenAddress []byte + OutboundRateLimiterConfig RateLimiterConfig + InboundRateLimiterConfig RateLimiterConfig +} + +var BurnWithFromMintTokenPoolMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"contractIBurnMintERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"localTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"allowlist\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllowListNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"CallerIsNotARampOnRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotTransferToSelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"DisabledNonZeroRateLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"expected\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"actual\",\"type\":\"uint8\"}],\"name\":\"InvalidDecimalArgs\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"InvalidRateLimitRate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolData\",\"type\":\"bytes\"}],\"name\":\"InvalidRemoteChainDecimals\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidRemotePoolForChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidSourcePoolAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeProposedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"NonExistentChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"remoteDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"localDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"remoteAmount\",\"type\":\"uint256\"}],\"name\":\"OverflowDetected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerCannotBeZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"PoolAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimitMustBeDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListAdd\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListRemove\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remoteToken\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Locked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Minted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rateLimitAdmin\",\"type\":\"address\"}],\"name\":\"RateLimitAdminSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Released\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"RemotePoolAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"RemotePoolRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"RouterUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensConsumed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"addRemotePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"removes\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"adds\",\"type\":\"address[]\"}],\"name\":\"applyAllowListUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"remoteChainSelectorsToRemove\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes[]\",\"name\":\"remotePoolAddresses\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes\",\"name\":\"remoteTokenAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"internalType\":\"structTokenPool.ChainUpdate[]\",\"name\":\"chainsToAdd\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentInboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentOutboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateLimitAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemotePools\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemoteToken\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRmnProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupportedChains\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"isRemotePool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"isSupportedChain\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isSupportedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"internalType\":\"structPool.LockOrBurnInV1\",\"name\":\"lockOrBurnIn\",\"type\":\"tuple\"}],\"name\":\"lockOrBurn\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destPoolData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.LockOrBurnOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"originalSender\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainTokenData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.ReleaseOrMintInV1\",\"name\":\"releaseOrMintIn\",\"type\":\"tuple\"}],\"name\":\"releaseOrMint\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"destinationAmount\",\"type\":\"uint256\"}],\"internalType\":\"structPool.ReleaseOrMintOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"removeRemotePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundConfig\",\"type\":\"tuple\"}],\"name\":\"setChainRateLimiterConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rateLimitAdmin\",\"type\":\"address\"}],\"name\":\"setRateLimitAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"setRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", + Bin: "0x6101006040523480156200001257600080fd5b5060405162004c5c38038062004c5c833981016040819052620000359162000918565b8484848484336000816200005c57604051639b15e16f60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03848116919091179091558116156200008f576200008f8162000206565b50506001600160a01b0385161580620000af57506001600160a01b038116155b80620000c257506001600160a01b038216155b15620000e1576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b03808616608081905290831660c0526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa92505050801562000151575060408051601f3d908101601f191682019092526200014e9181019062000a3a565b60015b1562000192578060ff168560ff161462000190576040516332ad3e0760e11b815260ff8087166004830152821660248201526044015b60405180910390fd5b505b60ff841660a052600480546001600160a01b0319166001600160a01b038316179055825115801560e052620001dc57604080516000815260208101909152620001dc908462000280565b50620001fb935050506001600160a01b038716905030600019620003dd565b505050505062000b84565b336001600160a01b038216036200023057604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60e051620002a1576040516335f4a7b360e01b815260040160405180910390fd5b60005b82518110156200032c576000838281518110620002c557620002c562000a58565b60209081029190910101519050620002df600282620004c3565b1562000322576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b50600101620002a4565b5060005b8151811015620003d857600082828151811062000351576200035162000a58565b6020026020010151905060006001600160a01b0316816001600160a01b0316036200037d5750620003cf565b6200038a600282620004e3565b15620003cd576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b60010162000330565b505050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa1580156200042f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000455919062000a6e565b62000461919062000a9e565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152919250620004bd91869190620004fa16565b50505050565b6000620004da836001600160a01b038416620005cb565b90505b92915050565b6000620004da836001600160a01b038416620006cf565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649082015260009062000549906001600160a01b03851690849062000721565b805190915015620003d857808060200190518101906200056a919062000ab4565b620003d85760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000187565b60008181526001830160205260408120548015620006c4576000620005f260018362000adf565b8554909150600090620006089060019062000adf565b9050808214620006745760008660000182815481106200062c576200062c62000a58565b906000526020600020015490508087600001848154811062000652576200065262000a58565b6000918252602080832090910192909255918252600188019052604090208390555b855486908062000688576200068862000af5565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050620004dd565b6000915050620004dd565b60008181526001830160205260408120546200071857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620004dd565b506000620004dd565b60606200073284846000856200073a565b949350505050565b6060824710156200079d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000187565b600080866001600160a01b03168587604051620007bb919062000b31565b60006040518083038185875af1925050503d8060008114620007fa576040519150601f19603f3d011682016040523d82523d6000602084013e620007ff565b606091505b50909250905062000813878383876200081e565b979650505050505050565b60608315620008925782516000036200088a576001600160a01b0385163b6200088a5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000187565b508162000732565b620007328383815115620008a95781518083602001fd5b8060405162461bcd60e51b815260040162000187919062000b4f565b6001600160a01b0381168114620008db57600080fd5b50565b805160ff81168114620008f057600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b8051620008f081620008c5565b600080600080600060a086880312156200093157600080fd5b85516200093e81620008c5565b945060206200094f878201620008de565b60408801519095506001600160401b03808211156200096d57600080fd5b818901915089601f8301126200098257600080fd5b815181811115620009975762000997620008f5565b8060051b604051601f19603f83011681018181108582111715620009bf57620009bf620008f5565b60405291825284820192508381018501918c831115620009de57600080fd5b938501935b8285101562000a0757620009f7856200090b565b84529385019392850192620009e3565b80985050505050505062000a1e606087016200090b565b915062000a2e608087016200090b565b90509295509295909350565b60006020828403121562000a4d57600080fd5b620004da82620008de565b634e487b7160e01b600052603260045260246000fd5b60006020828403121562000a8157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115620004dd57620004dd62000a88565b60006020828403121562000ac757600080fd5b8151801515811462000ad857600080fd5b9392505050565b81810381811115620004dd57620004dd62000a88565b634e487b7160e01b600052603160045260246000fd5b60005b8381101562000b2857818101518382015260200162000b0e565b50506000910152565b6000825162000b4581846020870162000b0b565b9190910192915050565b602081526000825180602084015262000b7081604085016020870162000b0b565b601f01601f19169190910160400192915050565b60805160a05160c05160e05161402762000c356000396000818161054801528181611d7b01526127cc0152600081816105220152818161189801526120670152600081816102d901528181610ba201528181611a4101528181611afb01528181611b2f01528181611b6201528181611bc701528181611c200152611cc20152600081816102400152818161029501528181610701015281816121ea0152818161276201526129b701526140276000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80639a4575b911610104578063c0d78655116100a2578063dc0bd97111610071578063dc0bd97114610520578063e0351e1314610546578063e8a1da171461056c578063f2fde38b1461057f57600080fd5b8063c0d78655146104d2578063c4bffe2b146104e5578063c75eea9c146104fa578063cf7401f31461050d57600080fd5b8063acfecf91116100de578063acfecf911461041f578063af58d59f14610432578063b0f479a1146104a1578063b7946580146104bf57600080fd5b80639a4575b9146103ca578063a42a7b8b146103ea578063a7cd63b71461040a57600080fd5b806354c8a4f31161017157806379ba50971161014b57806379ba50971461037e5780637d54534e146103865780638926f54f146103995780638da5cb5b146103ac57600080fd5b806354c8a4f31461033857806362ddd3c41461034d5780636d3d1a581461036057600080fd5b8063240028e8116101ad578063240028e81461028557806324f65ee7146102d257806339077537146103035780634c5ef0ed1461032557600080fd5b806301ffc9a7146101d4578063181f5a77146101fc57806321df0da71461023e575b600080fd5b6101e76101e2366004613177565b610592565b60405190151581526020015b60405180910390f35b60408051808201909152601f81527f4275726e5769746846726f6d4d696e74546f6b656e506f6f6c20312e352e310060208201525b6040516101f3919061321d565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101f3565b6101e7610293366004613252565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016101f3565b61031661031136600461326f565b610677565b604051905181526020016101f3565b6101e76103333660046132c8565b610846565b61034b610346366004613397565b610890565b005b61034b61035b3660046132c8565b61090b565b60095473ffffffffffffffffffffffffffffffffffffffff16610260565b61034b6109a8565b61034b610394366004613252565b610a76565b6101e76103a7366004613403565b610af7565b60015473ffffffffffffffffffffffffffffffffffffffff16610260565b6103dd6103d836600461341e565b610b0e565b6040516101f39190613459565b6103fd6103f8366004613403565b610be7565b6040516101f391906134b0565b610412610d52565b6040516101f39190613532565b61034b61042d3660046132c8565b610d63565b610445610440366004613403565b610e7b565b6040516101f3919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60045473ffffffffffffffffffffffffffffffffffffffff16610260565b6102316104cd366004613403565b610f50565b61034b6104e0366004613252565b611000565b6104ed6110db565b6040516101f3919061358c565b610445610508366004613403565b611193565b61034b61051b366004613714565b611265565b7f0000000000000000000000000000000000000000000000000000000000000000610260565b7f00000000000000000000000000000000000000000000000000000000000000006101e7565b61034b61057a366004613397565b6112e9565b61034b61058d366004613252565b6117fb565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faff2afbf00000000000000000000000000000000000000000000000000000000148061062557507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e64dd2900000000000000000000000000000000000000000000000000000000145b8061067157507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60408051602081019091526000815261068f8261180f565b60006106e860608401356106e36106a960c0870187613759565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a3392505050565b611af7565b905073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166340c10f196107366060860160408701613252565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff909116600482015260248101849052604401600060405180830381600087803b1580156107a357600080fd5b505af11580156107b7573d6000803e3d6000fd5b506107cc925050506060840160408501613252565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f08360405161082a91815260200190565b60405180910390a3604080516020810190915290815292915050565b6000610888838360405161085b9291906137be565b604080519182900390912067ffffffffffffffff8716600090815260076020529190912060050190611d0b565b949350505050565b610898611d26565b61090584848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808802828101820190935287825290935087925086918291850190849080828437600092019190915250611d7992505050565b50505050565b610913611d26565b61091c83610af7565b610963576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024015b60405180910390fd5b6109a38383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f2f92505050565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109f9576040517f02b543c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000008082163390811790935560008054909116815560405173ffffffffffffffffffffffffffffffffffffffff909216929183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610a7e611d26565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f44676b5284b809a22248eba0da87391d79098be38bb03154be88a58bf4d091749060200160405180910390a150565b6000610671600567ffffffffffffffff8416611d0b565b6040805180820190915260608082526020820152610b2b82612029565b610b3882606001356121b5565b6040516060830135815233907f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df79060200160405180910390a26040518060400160405280610b928460200160208101906104cd9190613403565b8152602001610bdf6040805160ff7f000000000000000000000000000000000000000000000000000000000000000016602082015260609101604051602081830303815290604052905090565b905292915050565b67ffffffffffffffff8116600090815260076020526040812060609190610c1090600501612257565b90506000815167ffffffffffffffff811115610c2e57610c2e6135ce565b604051908082528060200260200182016040528015610c6157816020015b6060815260200190600190039081610c4c5790505b50905060005b8251811015610d4a5760086000848381518110610c8657610c866137ce565b602002602001015181526020019081526020016000208054610ca7906137fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd3906137fd565b8015610d205780601f10610cf557610100808354040283529160200191610d20565b820191906000526020600020905b815481529060010190602001808311610d0357829003601f168201915b5050505050828281518110610d3757610d376137ce565b6020908102919091010152600101610c67565b509392505050565b6060610d5e6002612257565b905090565b610d6b611d26565b610d7483610af7565b610db6576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8416600482015260240161095a565b610df68282604051610dc99291906137be565b604080519182900390912067ffffffffffffffff8616600090815260076020529190912060050190612264565b610e32578282826040517f74f23c7c00000000000000000000000000000000000000000000000000000000815260040161095a93929190613899565b8267ffffffffffffffff167f52d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d768383604051610e6e9291906138bd565b60405180910390a2505050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600390910154808416606083015291909104909116608082015261067190612270565b67ffffffffffffffff81166000908152600760205260409020600401805460609190610f7b906137fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa7906137fd565b8015610ff45780601f10610fc957610100808354040283529160200191610ff4565b820191906000526020600020905b815481529060010190602001808311610fd757829003601f168201915b50505050509050919050565b611008611d26565b73ffffffffffffffffffffffffffffffffffffffff8116611055576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f1684910160405180910390a15050565b606060006110e96005612257565b90506000815167ffffffffffffffff811115611107576111076135ce565b604051908082528060200260200182016040528015611130578160200160208202803683370190505b50905060005b825181101561118c57828181518110611151576111516137ce565b602002602001015182828151811061116b5761116b6137ce565b67ffffffffffffffff90921660209283029190910190910152600101611136565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff16151594820194909452600190910154808416606083015291909104909116608082015261067190612270565b60095473ffffffffffffffffffffffffffffffffffffffff1633148015906112a5575060015473ffffffffffffffffffffffffffffffffffffffff163314155b156112de576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815233600482015260240161095a565b6109a3838383612322565b6112f1611d26565b60005b838110156114de576000858583818110611310576113106137ce565b90506020020160208101906113259190613403565b905061133c600567ffffffffffffffff8316612264565b61137e576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8216600482015260240161095a565b67ffffffffffffffff811660009081526007602052604081206113a390600501612257565b905060005b815181101561140f576114068282815181106113c6576113c66137ce565b6020026020010151600760008667ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060050161226490919063ffffffff16565b506001016113a8565b5067ffffffffffffffff8216600090815260076020526040812080547fffffffffffffffffffffff00000000000000000000000000000000000000000090811682556001820183905560028201805490911690556003810182905590611478600483018261310a565b600582016000818161148a8282613144565b505060405167ffffffffffffffff871681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d859916945060200192506114cc915050565b60405180910390a150506001016112f4565b5060005b818110156117f45760008383838181106114fe576114fe6137ce565b905060200281019061151091906138d1565b6115199061399d565b905061152a8160600151600061240c565b6115398160800151600061240c565b806040015151600003611578576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80516115909060059067ffffffffffffffff16612549565b6115d55780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161095a565b805167ffffffffffffffff16600090815260076020908152604091829020825160a08082018552606080870180518601516fffffffffffffffffffffffffffffffff90811680865263ffffffff42168689018190528351511515878b0181905284518a0151841686890181905294518b0151841660809889018190528954740100000000000000000000000000000000000000009283027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff7001000000000000000000000000000000008087027fffffffffffffffffffffffff000000000000000000000000000000000000000094851690981788178216929092178d5592810290971760018c01558c519889018d52898e0180518d01518716808b528a8e019590955280515115158a8f018190528151909d01518716988a01899052518d0151909516979098018790526002890180549a9091029990931617179094169590951790925590920290911760038201559082015160048201906117589082613b14565b5060005b82602001515181101561179c57611794836000015184602001518381518110611787576117876137ce565b6020026020010151611f2f565b60010161175c565b507f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c282600001518360400151846060015185608001516040516117e29493929190613c2e565b60405180910390a150506001016114e2565b5050505050565b611803611d26565b61180c81612555565b50565b61182261029360a0830160808401613252565b6118815761183660a0820160808301613252565b6040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015260240161095a565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016632cbc26bb6118cd6040840160208501613403565b60405160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260809190911b77ffffffffffffffff00000000000000000000000000000000166004820152602401602060405180830381865afa15801561193e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119629190613cc7565b15611999576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119b16119ac6040830160208401613403565b612619565b6119d16119c46040830160208401613403565b61033360a0840184613759565b611a16576119e260a0820182613759565b6040517f24eb47e500000000000000000000000000000000000000000000000000000000815260040161095a9291906138bd565b61180c611a296040830160208401613403565b826060013561273f565b60008151600003611a6557507f0000000000000000000000000000000000000000000000000000000000000000919050565b8151602014611aa257816040517f953576f700000000000000000000000000000000000000000000000000000000815260040161095a919061321d565b600082806020019051810190611ab89190613ce4565b905060ff81111561067157826040517f953576f700000000000000000000000000000000000000000000000000000000815260040161095a919061321d565b60007f000000000000000000000000000000000000000000000000000000000000000060ff168260ff1603611b2d575081610671565b7f000000000000000000000000000000000000000000000000000000000000000060ff168260ff161115611c18576000611b877f000000000000000000000000000000000000000000000000000000000000000084613d2c565b9050604d8160ff161115611bfb576040517fa9cb113d00000000000000000000000000000000000000000000000000000000815260ff80851660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044810185905260640161095a565b611c0681600a613e65565b611c109085613e74565b915050610671565b6000611c44837f0000000000000000000000000000000000000000000000000000000000000000613d2c565b9050604d8160ff161180611c8b5750611c5e81600a613e65565b611c88907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613e74565b84115b15611cf6576040517fa9cb113d00000000000000000000000000000000000000000000000000000000815260ff80851660048301527f00000000000000000000000000000000000000000000000000000000000000001660248201526044810185905260640161095a565b611d0181600a613e65565b6108889085613eaf565b600081815260018301602052604081205415155b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314611d77576040517f2b5c74de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f0000000000000000000000000000000000000000000000000000000000000000611dd0576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251811015611e66576000838281518110611df057611df06137ce565b60200260200101519050611e0e81600261278690919063ffffffff16565b15611e5d5760405173ffffffffffffffffffffffffffffffffffffffff821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b50600101611dd3565b5060005b81518110156109a3576000828281518110611e8757611e876137ce565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ecb5750611f27565b611ed66002826127a8565b15611f255760405173ffffffffffffffffffffffffffffffffffffffff821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101611e6a565b8051600003611f6a576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805160208083019190912067ffffffffffffffff8416600090815260079092526040909120611f9c9060050182612549565b611fd65782826040517f393b8ad200000000000000000000000000000000000000000000000000000000815260040161095a929190613ec6565b6000818152600860205260409020611fee8382613b14565b508267ffffffffffffffff167f7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea83604051610e6e919061321d565b61203c61029360a0830160808401613252565b6120505761183660a0820160808301613252565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016632cbc26bb61209c6040840160208501613403565b60405160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260809190911b77ffffffffffffffff00000000000000000000000000000000166004820152602401602060405180830381865afa15801561210d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121319190613cc7565b15612168576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61218061217b6060830160408401613252565b6127ca565b6121986121936040830160208401613403565b612849565b61180c6121ab6040830160208401613403565b8260600135612997565b6040517f9dc29fac000000000000000000000000000000000000000000000000000000008152306004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639dc29fac90604401600060405180830381600087803b15801561224357600080fd5b505af11580156117f4573d6000803e3d6000fd5b60606000611d1f836129db565b6000611d1f8383612a36565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526122fe82606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff16426122e29190613ee9565b85608001516fffffffffffffffffffffffffffffffff16612b29565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b61232b83610af7565b61236d576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8416600482015260240161095a565b61237882600061240c565b67ffffffffffffffff8316600090815260076020526040902061239b9083612b51565b6123a681600061240c565b67ffffffffffffffff831660009081526007602052604090206123cc9060020182612b51565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b8383836040516123ff93929190613efc565b60405180910390a1505050565b8151156124d75781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff16101580612462575060408201516fffffffffffffffffffffffffffffffff16155b1561249b57816040517f8020d12400000000000000000000000000000000000000000000000000000000815260040161095a9190613f7f565b80156124d3576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b60408201516fffffffffffffffffffffffffffffffff16151580612510575060208201516fffffffffffffffffffffffffffffffff1615155b156124d357816040517fd68af9cc00000000000000000000000000000000000000000000000000000000815260040161095a9190613f7f565b6000611d1f8383612cf3565b3373ffffffffffffffffffffffffffffffffffffffff8216036125a4576040517fdad89dca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61262281610af7565b612664576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8216600482015260240161095a565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925233602483015273ffffffffffffffffffffffffffffffffffffffff16906383826b2b90604401602060405180830381865afa1580156126e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127079190613cc7565b61180c576040517f728fe07b00000000000000000000000000000000000000000000000000000000815233600482015260240161095a565b67ffffffffffffffff821660009081526007602052604090206124d390600201827f0000000000000000000000000000000000000000000000000000000000000000612d42565b6000611d1f8373ffffffffffffffffffffffffffffffffffffffff8416612a36565b6000611d1f8373ffffffffffffffffffffffffffffffffffffffff8416612cf3565b7f00000000000000000000000000000000000000000000000000000000000000001561180c576127fb6002826130c5565b61180c576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161095a565b61285281610af7565b612894576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8216600482015260240161095a565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925273ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa15801561290d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129319190613fbb565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461180c576040517f728fe07b00000000000000000000000000000000000000000000000000000000815233600482015260240161095a565b67ffffffffffffffff821660009081526007602052604090206124d390827f0000000000000000000000000000000000000000000000000000000000000000612d42565b606081600001805480602002602001604051908101604052809291908181526020018280548015610ff457602002820191906000526020600020905b815481526020019060010190808311612a175750505050509050919050565b60008181526001830160205260408120548015612b1f576000612a5a600183613ee9565b8554909150600090612a6e90600190613ee9565b9050808214612ad3576000866000018281548110612a8e57612a8e6137ce565b9060005260206000200154905080876000018481548110612ab157612ab16137ce565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612ae457612ae4613fd8565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610671565b6000915050610671565b6000612b4885612b398486613eaf565b612b439087614007565b6130f4565b95945050505050565b8154600090612b7a90700100000000000000000000000000000000900463ffffffff1642613ee9565b90508015612c1c5760018301548354612bc2916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416612b29565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b60208201518354612c42916fffffffffffffffffffffffffffffffff90811691166130f4565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19906123ff908490613f7f565b6000818152600183016020526040812054612d3a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610671565b506000610671565b825474010000000000000000000000000000000000000000900460ff161580612d69575081155b15612d7357505050565b825460018401546fffffffffffffffffffffffffffffffff80831692911690600090612db990700100000000000000000000000000000000900463ffffffff1642613ee9565b90508015612e795781831115612dfb576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001860154612e359083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16612b29565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b84821015612f305773ffffffffffffffffffffffffffffffffffffffff8416612ed8576040517ff94ebcd1000000000000000000000000000000000000000000000000000000008152600481018390526024810186905260440161095a565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff8516604482015260640161095a565b848310156130435760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16906000908290612f749082613ee9565b612f7e878a613ee9565b612f889190614007565b612f929190613e74565b905073ffffffffffffffffffffffffffffffffffffffff8616612feb576040517f15279c08000000000000000000000000000000000000000000000000000000008152600481018290526024810186905260440161095a565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff8716604482015260640161095a565b61304d8584613ee9565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515611d1f565b60008183106131035781611d1f565b5090919050565b508054613116906137fd565b6000825580601f10613126575050565b601f01602090049060005260206000209081019061180c919061315e565b508054600082559060005260206000209081019061180c91905b5b80821115613173576000815560010161315f565b5090565b60006020828403121561318957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114611d1f57600080fd5b6000815180845260005b818110156131df576020818501810151868301820152016131c3565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000611d1f60208301846131b9565b73ffffffffffffffffffffffffffffffffffffffff8116811461180c57600080fd5b60006020828403121561326457600080fd5b8135611d1f81613230565b60006020828403121561328157600080fd5b813567ffffffffffffffff81111561329857600080fd5b82016101008185031215611d1f57600080fd5b803567ffffffffffffffff811681146132c357600080fd5b919050565b6000806000604084860312156132dd57600080fd5b6132e6846132ab565b9250602084013567ffffffffffffffff8082111561330357600080fd5b818601915086601f83011261331757600080fd5b81358181111561332657600080fd5b87602082850101111561333857600080fd5b6020830194508093505050509250925092565b60008083601f84011261335d57600080fd5b50813567ffffffffffffffff81111561337557600080fd5b6020830191508360208260051b850101111561339057600080fd5b9250929050565b600080600080604085870312156133ad57600080fd5b843567ffffffffffffffff808211156133c557600080fd5b6133d18883890161334b565b909650945060208701359150808211156133ea57600080fd5b506133f78782880161334b565b95989497509550505050565b60006020828403121561341557600080fd5b611d1f826132ab565b60006020828403121561343057600080fd5b813567ffffffffffffffff81111561344757600080fd5b820160a08185031215611d1f57600080fd5b60208152600082516040602084015261347560608401826131b9565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016040850152612b4882826131b9565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015613525577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526135138583516131b9565b945092850192908501906001016134d9565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561358057835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161354e565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561358057835167ffffffffffffffff16835292840192918401916001016135a8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613620576136206135ce565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561366d5761366d6135ce565b604052919050565b801515811461180c57600080fd5b80356fffffffffffffffffffffffffffffffff811681146132c357600080fd5b6000606082840312156136b557600080fd5b6040516060810181811067ffffffffffffffff821117156136d8576136d86135ce565b60405290508082356136e981613675565b81526136f760208401613683565b602082015261370860408401613683565b60408201525092915050565b600080600060e0848603121561372957600080fd5b613732846132ab565b925061374185602086016136a3565b915061375085608086016136a3565b90509250925092565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261378e57600080fd5b83018035915067ffffffffffffffff8211156137a957600080fd5b60200191503681900382131561339057600080fd5b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600181811c9082168061381157607f821691505b60208210810361384a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b67ffffffffffffffff84168152604060208201526000612b48604083018486613850565b602081526000610888602083018486613850565b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee183360301811261390557600080fd5b9190910192915050565b600082601f83011261392057600080fd5b813567ffffffffffffffff81111561393a5761393a6135ce565b61396b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613626565b81815284602083860101111561398057600080fd5b816020850160208301376000918101602001919091529392505050565b600061012082360312156139b057600080fd5b6139b86135fd565b6139c1836132ab565b815260208084013567ffffffffffffffff808211156139df57600080fd5b9085019036601f8301126139f257600080fd5b813581811115613a0457613a046135ce565b8060051b613a13858201613626565b9182528381018501918581019036841115613a2d57600080fd5b86860192505b83831015613a6957823585811115613a4b5760008081fd5b613a593689838a010161390f565b8352509186019190860190613a33565b8087890152505050506040860135925080831115613a8657600080fd5b5050613a943682860161390f565b604083015250613aa736606085016136a3565b6060820152613ab93660c085016136a3565b608082015292915050565b601f8211156109a3576000816000526020600020601f850160051c81016020861015613aed5750805b601f850160051c820191505b81811015613b0c57828155600101613af9565b505050505050565b815167ffffffffffffffff811115613b2e57613b2e6135ce565b613b4281613b3c84546137fd565b84613ac4565b602080601f831160018114613b955760008415613b5f5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613b0c565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613be257888601518255948401946001909101908401613bc3565b5085821015613c1e57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff87168352806020840152613c52818401876131b9565b8551151560408581019190915260208701516fffffffffffffffffffffffffffffffff9081166060870152908701511660808501529150613c909050565b8251151560a083015260208301516fffffffffffffffffffffffffffffffff90811660c084015260408401511660e0830152612b48565b600060208284031215613cd957600080fd5b8151611d1f81613675565b600060208284031215613cf657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff828116828216039081111561067157610671613cfd565b600181815b80851115613d9e57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613d8457613d84613cfd565b80851615613d9157918102915b93841c9390800290613d4a565b509250929050565b600082613db557506001610671565b81613dc257506000610671565b8160018114613dd85760028114613de257613dfe565b6001915050610671565b60ff841115613df357613df3613cfd565b50506001821b610671565b5060208310610133831016604e8410600b8410161715613e21575081810a610671565b613e2b8383613d45565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613e5d57613e5d613cfd565b029392505050565b6000611d1f60ff841683613da6565b600082613eaa577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b808202811582820484141761067157610671613cfd565b67ffffffffffffffff8316815260406020820152600061088860408301846131b9565b8181038181111561067157610671613cfd565b67ffffffffffffffff8416815260e08101613f4860208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c0830152610888565b6060810161067182848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b600060208284031215613fcd57600080fd5b8151611d1f81613230565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b8082018082111561067157610671613cfd56fea164736f6c6343000818000a", +} + +var BurnWithFromMintTokenPoolABI = BurnWithFromMintTokenPoolMetaData.ABI + +var BurnWithFromMintTokenPoolBin = BurnWithFromMintTokenPoolMetaData.Bin + +func DeployBurnWithFromMintTokenPool(auth *bind.TransactOpts, backend bind.ContractBackend, token common.Address, localTokenDecimals uint8, allowlist []common.Address, rmnProxy common.Address, router common.Address) (common.Address, *generated_zks.Transaction, *BurnWithFromMintTokenPool, error) { + parsed, err := BurnWithFromMintTokenPoolMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(BurnWithFromMintTokenPoolZKBin), backend, token, localTokenDecimals, allowlist, rmnProxy, router) + contractReturn := &BurnWithFromMintTokenPool{address: address, abi: *parsed, BurnWithFromMintTokenPoolCaller: BurnWithFromMintTokenPoolCaller{contract: contractBind}, BurnWithFromMintTokenPoolTransactor: BurnWithFromMintTokenPoolTransactor{contract: contractBind}, BurnWithFromMintTokenPoolFilterer: BurnWithFromMintTokenPoolFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(BurnWithFromMintTokenPoolBin), backend, token, localTokenDecimals, allowlist, rmnProxy, router) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &BurnWithFromMintTokenPool{address: address, abi: *parsed, BurnWithFromMintTokenPoolCaller: BurnWithFromMintTokenPoolCaller{contract: contract}, BurnWithFromMintTokenPoolTransactor: BurnWithFromMintTokenPoolTransactor{contract: contract}, BurnWithFromMintTokenPoolFilterer: BurnWithFromMintTokenPoolFilterer{contract: contract}}, nil +} + +type BurnWithFromMintTokenPool struct { + address common.Address + abi abi.ABI + BurnWithFromMintTokenPoolCaller + BurnWithFromMintTokenPoolTransactor + BurnWithFromMintTokenPoolFilterer +} + +type BurnWithFromMintTokenPoolCaller struct { + contract *bind.BoundContract +} + +type BurnWithFromMintTokenPoolTransactor struct { + contract *bind.BoundContract +} + +type BurnWithFromMintTokenPoolFilterer struct { + contract *bind.BoundContract +} + +type BurnWithFromMintTokenPoolSession struct { + Contract *BurnWithFromMintTokenPool + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type BurnWithFromMintTokenPoolCallerSession struct { + Contract *BurnWithFromMintTokenPoolCaller + CallOpts bind.CallOpts +} + +type BurnWithFromMintTokenPoolTransactorSession struct { + Contract *BurnWithFromMintTokenPoolTransactor + TransactOpts bind.TransactOpts +} + +type BurnWithFromMintTokenPoolRaw struct { + Contract *BurnWithFromMintTokenPool +} + +type BurnWithFromMintTokenPoolCallerRaw struct { + Contract *BurnWithFromMintTokenPoolCaller +} + +type BurnWithFromMintTokenPoolTransactorRaw struct { + Contract *BurnWithFromMintTokenPoolTransactor +} + +func NewBurnWithFromMintTokenPool(address common.Address, backend bind.ContractBackend) (*BurnWithFromMintTokenPool, error) { + abi, err := abi.JSON(strings.NewReader(BurnWithFromMintTokenPoolABI)) + if err != nil { + return nil, err + } + contract, err := bindBurnWithFromMintTokenPool(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &BurnWithFromMintTokenPool{address: address, abi: abi, BurnWithFromMintTokenPoolCaller: BurnWithFromMintTokenPoolCaller{contract: contract}, BurnWithFromMintTokenPoolTransactor: BurnWithFromMintTokenPoolTransactor{contract: contract}, BurnWithFromMintTokenPoolFilterer: BurnWithFromMintTokenPoolFilterer{contract: contract}}, nil +} + +func NewBurnWithFromMintTokenPoolCaller(address common.Address, caller bind.ContractCaller) (*BurnWithFromMintTokenPoolCaller, error) { + contract, err := bindBurnWithFromMintTokenPool(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &BurnWithFromMintTokenPoolCaller{contract: contract}, nil +} + +func NewBurnWithFromMintTokenPoolTransactor(address common.Address, transactor bind.ContractTransactor) (*BurnWithFromMintTokenPoolTransactor, error) { + contract, err := bindBurnWithFromMintTokenPool(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &BurnWithFromMintTokenPoolTransactor{contract: contract}, nil +} + +func NewBurnWithFromMintTokenPoolFilterer(address common.Address, filterer bind.ContractFilterer) (*BurnWithFromMintTokenPoolFilterer, error) { + contract, err := bindBurnWithFromMintTokenPool(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &BurnWithFromMintTokenPoolFilterer{contract: contract}, nil +} + +func bindBurnWithFromMintTokenPool(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := BurnWithFromMintTokenPoolMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BurnWithFromMintTokenPool.Contract.BurnWithFromMintTokenPoolCaller.contract.Call(opts, result, method, params...) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.BurnWithFromMintTokenPoolTransactor.contract.Transfer(opts) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.BurnWithFromMintTokenPoolTransactor.contract.Transact(opts, method, params...) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _BurnWithFromMintTokenPool.Contract.contract.Call(opts, result, method, params...) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.contract.Transfer(opts) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.contract.Transact(opts, method, params...) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCaller) GetAllowList(opts *bind.CallOpts) ([]common.Address, error) { + var out []interface{} + err := _BurnWithFromMintTokenPool.contract.Call(opts, &out, "getAllowList") + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) GetAllowList() ([]common.Address, error) { + return _BurnWithFromMintTokenPool.Contract.GetAllowList(&_BurnWithFromMintTokenPool.CallOpts) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCallerSession) GetAllowList() ([]common.Address, error) { + return _BurnWithFromMintTokenPool.Contract.GetAllowList(&_BurnWithFromMintTokenPool.CallOpts) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCaller) GetAllowListEnabled(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _BurnWithFromMintTokenPool.contract.Call(opts, &out, "getAllowListEnabled") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) GetAllowListEnabled() (bool, error) { + return _BurnWithFromMintTokenPool.Contract.GetAllowListEnabled(&_BurnWithFromMintTokenPool.CallOpts) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCallerSession) GetAllowListEnabled() (bool, error) { + return _BurnWithFromMintTokenPool.Contract.GetAllowListEnabled(&_BurnWithFromMintTokenPool.CallOpts) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCaller) GetCurrentInboundRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + var out []interface{} + err := _BurnWithFromMintTokenPool.contract.Call(opts, &out, "getCurrentInboundRateLimiterState", remoteChainSelector) + + if err != nil { + return *new(RateLimiterTokenBucket), err + } + + out0 := *abi.ConvertType(out[0], new(RateLimiterTokenBucket)).(*RateLimiterTokenBucket) + + return out0, err + +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) GetCurrentInboundRateLimiterState(remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + return _BurnWithFromMintTokenPool.Contract.GetCurrentInboundRateLimiterState(&_BurnWithFromMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCallerSession) GetCurrentInboundRateLimiterState(remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + return _BurnWithFromMintTokenPool.Contract.GetCurrentInboundRateLimiterState(&_BurnWithFromMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCaller) GetCurrentOutboundRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + var out []interface{} + err := _BurnWithFromMintTokenPool.contract.Call(opts, &out, "getCurrentOutboundRateLimiterState", remoteChainSelector) + + if err != nil { + return *new(RateLimiterTokenBucket), err + } + + out0 := *abi.ConvertType(out[0], new(RateLimiterTokenBucket)).(*RateLimiterTokenBucket) + + return out0, err + +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) GetCurrentOutboundRateLimiterState(remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + return _BurnWithFromMintTokenPool.Contract.GetCurrentOutboundRateLimiterState(&_BurnWithFromMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCallerSession) GetCurrentOutboundRateLimiterState(remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + return _BurnWithFromMintTokenPool.Contract.GetCurrentOutboundRateLimiterState(&_BurnWithFromMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCaller) GetRateLimitAdmin(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BurnWithFromMintTokenPool.contract.Call(opts, &out, "getRateLimitAdmin") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) GetRateLimitAdmin() (common.Address, error) { + return _BurnWithFromMintTokenPool.Contract.GetRateLimitAdmin(&_BurnWithFromMintTokenPool.CallOpts) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCallerSession) GetRateLimitAdmin() (common.Address, error) { + return _BurnWithFromMintTokenPool.Contract.GetRateLimitAdmin(&_BurnWithFromMintTokenPool.CallOpts) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCaller) GetRemotePools(opts *bind.CallOpts, remoteChainSelector uint64) ([][]byte, error) { + var out []interface{} + err := _BurnWithFromMintTokenPool.contract.Call(opts, &out, "getRemotePools", remoteChainSelector) + + if err != nil { + return *new([][]byte), err + } + + out0 := *abi.ConvertType(out[0], new([][]byte)).(*[][]byte) + + return out0, err + +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) GetRemotePools(remoteChainSelector uint64) ([][]byte, error) { + return _BurnWithFromMintTokenPool.Contract.GetRemotePools(&_BurnWithFromMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCallerSession) GetRemotePools(remoteChainSelector uint64) ([][]byte, error) { + return _BurnWithFromMintTokenPool.Contract.GetRemotePools(&_BurnWithFromMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCaller) GetRemoteToken(opts *bind.CallOpts, remoteChainSelector uint64) ([]byte, error) { + var out []interface{} + err := _BurnWithFromMintTokenPool.contract.Call(opts, &out, "getRemoteToken", remoteChainSelector) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) GetRemoteToken(remoteChainSelector uint64) ([]byte, error) { + return _BurnWithFromMintTokenPool.Contract.GetRemoteToken(&_BurnWithFromMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCallerSession) GetRemoteToken(remoteChainSelector uint64) ([]byte, error) { + return _BurnWithFromMintTokenPool.Contract.GetRemoteToken(&_BurnWithFromMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCaller) GetRmnProxy(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BurnWithFromMintTokenPool.contract.Call(opts, &out, "getRmnProxy") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) GetRmnProxy() (common.Address, error) { + return _BurnWithFromMintTokenPool.Contract.GetRmnProxy(&_BurnWithFromMintTokenPool.CallOpts) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCallerSession) GetRmnProxy() (common.Address, error) { + return _BurnWithFromMintTokenPool.Contract.GetRmnProxy(&_BurnWithFromMintTokenPool.CallOpts) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCaller) GetRouter(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BurnWithFromMintTokenPool.contract.Call(opts, &out, "getRouter") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) GetRouter() (common.Address, error) { + return _BurnWithFromMintTokenPool.Contract.GetRouter(&_BurnWithFromMintTokenPool.CallOpts) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCallerSession) GetRouter() (common.Address, error) { + return _BurnWithFromMintTokenPool.Contract.GetRouter(&_BurnWithFromMintTokenPool.CallOpts) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCaller) GetSupportedChains(opts *bind.CallOpts) ([]uint64, error) { + var out []interface{} + err := _BurnWithFromMintTokenPool.contract.Call(opts, &out, "getSupportedChains") + + if err != nil { + return *new([]uint64), err + } + + out0 := *abi.ConvertType(out[0], new([]uint64)).(*[]uint64) + + return out0, err + +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) GetSupportedChains() ([]uint64, error) { + return _BurnWithFromMintTokenPool.Contract.GetSupportedChains(&_BurnWithFromMintTokenPool.CallOpts) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCallerSession) GetSupportedChains() ([]uint64, error) { + return _BurnWithFromMintTokenPool.Contract.GetSupportedChains(&_BurnWithFromMintTokenPool.CallOpts) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCaller) GetToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BurnWithFromMintTokenPool.contract.Call(opts, &out, "getToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) GetToken() (common.Address, error) { + return _BurnWithFromMintTokenPool.Contract.GetToken(&_BurnWithFromMintTokenPool.CallOpts) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCallerSession) GetToken() (common.Address, error) { + return _BurnWithFromMintTokenPool.Contract.GetToken(&_BurnWithFromMintTokenPool.CallOpts) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCaller) GetTokenDecimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _BurnWithFromMintTokenPool.contract.Call(opts, &out, "getTokenDecimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) GetTokenDecimals() (uint8, error) { + return _BurnWithFromMintTokenPool.Contract.GetTokenDecimals(&_BurnWithFromMintTokenPool.CallOpts) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCallerSession) GetTokenDecimals() (uint8, error) { + return _BurnWithFromMintTokenPool.Contract.GetTokenDecimals(&_BurnWithFromMintTokenPool.CallOpts) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCaller) IsRemotePool(opts *bind.CallOpts, remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) { + var out []interface{} + err := _BurnWithFromMintTokenPool.contract.Call(opts, &out, "isRemotePool", remoteChainSelector, remotePoolAddress) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) IsRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) { + return _BurnWithFromMintTokenPool.Contract.IsRemotePool(&_BurnWithFromMintTokenPool.CallOpts, remoteChainSelector, remotePoolAddress) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCallerSession) IsRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) { + return _BurnWithFromMintTokenPool.Contract.IsRemotePool(&_BurnWithFromMintTokenPool.CallOpts, remoteChainSelector, remotePoolAddress) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCaller) IsSupportedChain(opts *bind.CallOpts, remoteChainSelector uint64) (bool, error) { + var out []interface{} + err := _BurnWithFromMintTokenPool.contract.Call(opts, &out, "isSupportedChain", remoteChainSelector) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) IsSupportedChain(remoteChainSelector uint64) (bool, error) { + return _BurnWithFromMintTokenPool.Contract.IsSupportedChain(&_BurnWithFromMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCallerSession) IsSupportedChain(remoteChainSelector uint64) (bool, error) { + return _BurnWithFromMintTokenPool.Contract.IsSupportedChain(&_BurnWithFromMintTokenPool.CallOpts, remoteChainSelector) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCaller) IsSupportedToken(opts *bind.CallOpts, token common.Address) (bool, error) { + var out []interface{} + err := _BurnWithFromMintTokenPool.contract.Call(opts, &out, "isSupportedToken", token) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) IsSupportedToken(token common.Address) (bool, error) { + return _BurnWithFromMintTokenPool.Contract.IsSupportedToken(&_BurnWithFromMintTokenPool.CallOpts, token) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCallerSession) IsSupportedToken(token common.Address) (bool, error) { + return _BurnWithFromMintTokenPool.Contract.IsSupportedToken(&_BurnWithFromMintTokenPool.CallOpts, token) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _BurnWithFromMintTokenPool.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 + +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) Owner() (common.Address, error) { + return _BurnWithFromMintTokenPool.Contract.Owner(&_BurnWithFromMintTokenPool.CallOpts) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCallerSession) Owner() (common.Address, error) { + return _BurnWithFromMintTokenPool.Contract.Owner(&_BurnWithFromMintTokenPool.CallOpts) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _BurnWithFromMintTokenPool.contract.Call(opts, &out, "supportsInterface", interfaceId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _BurnWithFromMintTokenPool.Contract.SupportsInterface(&_BurnWithFromMintTokenPool.CallOpts, interfaceId) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _BurnWithFromMintTokenPool.Contract.SupportsInterface(&_BurnWithFromMintTokenPool.CallOpts, interfaceId) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _BurnWithFromMintTokenPool.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) TypeAndVersion() (string, error) { + return _BurnWithFromMintTokenPool.Contract.TypeAndVersion(&_BurnWithFromMintTokenPool.CallOpts) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolCallerSession) TypeAndVersion() (string, error) { + return _BurnWithFromMintTokenPool.Contract.TypeAndVersion(&_BurnWithFromMintTokenPool.CallOpts) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.contract.Transact(opts, "acceptOwnership") +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) AcceptOwnership() (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.AcceptOwnership(&_BurnWithFromMintTokenPool.TransactOpts) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.AcceptOwnership(&_BurnWithFromMintTokenPool.TransactOpts) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolTransactor) AddRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.contract.Transact(opts, "addRemotePool", remoteChainSelector, remotePoolAddress) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) AddRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.AddRemotePool(&_BurnWithFromMintTokenPool.TransactOpts, remoteChainSelector, remotePoolAddress) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolTransactorSession) AddRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.AddRemotePool(&_BurnWithFromMintTokenPool.TransactOpts, remoteChainSelector, remotePoolAddress) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolTransactor) ApplyAllowListUpdates(opts *bind.TransactOpts, removes []common.Address, adds []common.Address) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.contract.Transact(opts, "applyAllowListUpdates", removes, adds) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) ApplyAllowListUpdates(removes []common.Address, adds []common.Address) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.ApplyAllowListUpdates(&_BurnWithFromMintTokenPool.TransactOpts, removes, adds) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolTransactorSession) ApplyAllowListUpdates(removes []common.Address, adds []common.Address) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.ApplyAllowListUpdates(&_BurnWithFromMintTokenPool.TransactOpts, removes, adds) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolTransactor) ApplyChainUpdates(opts *bind.TransactOpts, remoteChainSelectorsToRemove []uint64, chainsToAdd []TokenPoolChainUpdate) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.contract.Transact(opts, "applyChainUpdates", remoteChainSelectorsToRemove, chainsToAdd) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) ApplyChainUpdates(remoteChainSelectorsToRemove []uint64, chainsToAdd []TokenPoolChainUpdate) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.ApplyChainUpdates(&_BurnWithFromMintTokenPool.TransactOpts, remoteChainSelectorsToRemove, chainsToAdd) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolTransactorSession) ApplyChainUpdates(remoteChainSelectorsToRemove []uint64, chainsToAdd []TokenPoolChainUpdate) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.ApplyChainUpdates(&_BurnWithFromMintTokenPool.TransactOpts, remoteChainSelectorsToRemove, chainsToAdd) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolTransactor) LockOrBurn(opts *bind.TransactOpts, lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.contract.Transact(opts, "lockOrBurn", lockOrBurnIn) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) LockOrBurn(lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.LockOrBurn(&_BurnWithFromMintTokenPool.TransactOpts, lockOrBurnIn) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolTransactorSession) LockOrBurn(lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.LockOrBurn(&_BurnWithFromMintTokenPool.TransactOpts, lockOrBurnIn) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolTransactor) ReleaseOrMint(opts *bind.TransactOpts, releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.contract.Transact(opts, "releaseOrMint", releaseOrMintIn) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) ReleaseOrMint(releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.ReleaseOrMint(&_BurnWithFromMintTokenPool.TransactOpts, releaseOrMintIn) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolTransactorSession) ReleaseOrMint(releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.ReleaseOrMint(&_BurnWithFromMintTokenPool.TransactOpts, releaseOrMintIn) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolTransactor) RemoveRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.contract.Transact(opts, "removeRemotePool", remoteChainSelector, remotePoolAddress) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) RemoveRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.RemoveRemotePool(&_BurnWithFromMintTokenPool.TransactOpts, remoteChainSelector, remotePoolAddress) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolTransactorSession) RemoveRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.RemoveRemotePool(&_BurnWithFromMintTokenPool.TransactOpts, remoteChainSelector, remotePoolAddress) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolTransactor) SetChainRateLimiterConfig(opts *bind.TransactOpts, remoteChainSelector uint64, outboundConfig RateLimiterConfig, inboundConfig RateLimiterConfig) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.contract.Transact(opts, "setChainRateLimiterConfig", remoteChainSelector, outboundConfig, inboundConfig) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) SetChainRateLimiterConfig(remoteChainSelector uint64, outboundConfig RateLimiterConfig, inboundConfig RateLimiterConfig) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.SetChainRateLimiterConfig(&_BurnWithFromMintTokenPool.TransactOpts, remoteChainSelector, outboundConfig, inboundConfig) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolTransactorSession) SetChainRateLimiterConfig(remoteChainSelector uint64, outboundConfig RateLimiterConfig, inboundConfig RateLimiterConfig) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.SetChainRateLimiterConfig(&_BurnWithFromMintTokenPool.TransactOpts, remoteChainSelector, outboundConfig, inboundConfig) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolTransactor) SetRateLimitAdmin(opts *bind.TransactOpts, rateLimitAdmin common.Address) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.contract.Transact(opts, "setRateLimitAdmin", rateLimitAdmin) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) SetRateLimitAdmin(rateLimitAdmin common.Address) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.SetRateLimitAdmin(&_BurnWithFromMintTokenPool.TransactOpts, rateLimitAdmin) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolTransactorSession) SetRateLimitAdmin(rateLimitAdmin common.Address) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.SetRateLimitAdmin(&_BurnWithFromMintTokenPool.TransactOpts, rateLimitAdmin) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolTransactor) SetRouter(opts *bind.TransactOpts, newRouter common.Address) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.contract.Transact(opts, "setRouter", newRouter) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) SetRouter(newRouter common.Address) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.SetRouter(&_BurnWithFromMintTokenPool.TransactOpts, newRouter) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolTransactorSession) SetRouter(newRouter common.Address) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.SetRouter(&_BurnWithFromMintTokenPool.TransactOpts, newRouter) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.contract.Transact(opts, "transferOwnership", to) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.TransferOwnership(&_BurnWithFromMintTokenPool.TransactOpts, to) +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _BurnWithFromMintTokenPool.Contract.TransferOwnership(&_BurnWithFromMintTokenPool.TransactOpts, to) +} + +type BurnWithFromMintTokenPoolAllowListAddIterator struct { + Event *BurnWithFromMintTokenPoolAllowListAdd + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnWithFromMintTokenPoolAllowListAddIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolAllowListAdd) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolAllowListAdd) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnWithFromMintTokenPoolAllowListAddIterator) Error() error { + return it.fail +} + +func (it *BurnWithFromMintTokenPoolAllowListAddIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnWithFromMintTokenPoolAllowListAdd struct { + Sender common.Address + Raw types.Log +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) FilterAllowListAdd(opts *bind.FilterOpts) (*BurnWithFromMintTokenPoolAllowListAddIterator, error) { + + logs, sub, err := _BurnWithFromMintTokenPool.contract.FilterLogs(opts, "AllowListAdd") + if err != nil { + return nil, err + } + return &BurnWithFromMintTokenPoolAllowListAddIterator{contract: _BurnWithFromMintTokenPool.contract, event: "AllowListAdd", logs: logs, sub: sub}, nil +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) WatchAllowListAdd(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolAllowListAdd) (event.Subscription, error) { + + logs, sub, err := _BurnWithFromMintTokenPool.contract.WatchLogs(opts, "AllowListAdd") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnWithFromMintTokenPoolAllowListAdd) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "AllowListAdd", 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 +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) ParseAllowListAdd(log types.Log) (*BurnWithFromMintTokenPoolAllowListAdd, error) { + event := new(BurnWithFromMintTokenPoolAllowListAdd) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "AllowListAdd", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnWithFromMintTokenPoolAllowListRemoveIterator struct { + Event *BurnWithFromMintTokenPoolAllowListRemove + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnWithFromMintTokenPoolAllowListRemoveIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolAllowListRemove) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolAllowListRemove) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnWithFromMintTokenPoolAllowListRemoveIterator) Error() error { + return it.fail +} + +func (it *BurnWithFromMintTokenPoolAllowListRemoveIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnWithFromMintTokenPoolAllowListRemove struct { + Sender common.Address + Raw types.Log +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) FilterAllowListRemove(opts *bind.FilterOpts) (*BurnWithFromMintTokenPoolAllowListRemoveIterator, error) { + + logs, sub, err := _BurnWithFromMintTokenPool.contract.FilterLogs(opts, "AllowListRemove") + if err != nil { + return nil, err + } + return &BurnWithFromMintTokenPoolAllowListRemoveIterator{contract: _BurnWithFromMintTokenPool.contract, event: "AllowListRemove", logs: logs, sub: sub}, nil +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) WatchAllowListRemove(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolAllowListRemove) (event.Subscription, error) { + + logs, sub, err := _BurnWithFromMintTokenPool.contract.WatchLogs(opts, "AllowListRemove") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnWithFromMintTokenPoolAllowListRemove) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "AllowListRemove", 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 +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) ParseAllowListRemove(log types.Log) (*BurnWithFromMintTokenPoolAllowListRemove, error) { + event := new(BurnWithFromMintTokenPoolAllowListRemove) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "AllowListRemove", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnWithFromMintTokenPoolBurnedIterator struct { + Event *BurnWithFromMintTokenPoolBurned + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnWithFromMintTokenPoolBurnedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolBurned) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolBurned) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnWithFromMintTokenPoolBurnedIterator) Error() error { + return it.fail +} + +func (it *BurnWithFromMintTokenPoolBurnedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnWithFromMintTokenPoolBurned struct { + Sender common.Address + Amount *big.Int + Raw types.Log +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) FilterBurned(opts *bind.FilterOpts, sender []common.Address) (*BurnWithFromMintTokenPoolBurnedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _BurnWithFromMintTokenPool.contract.FilterLogs(opts, "Burned", senderRule) + if err != nil { + return nil, err + } + return &BurnWithFromMintTokenPoolBurnedIterator{contract: _BurnWithFromMintTokenPool.contract, event: "Burned", logs: logs, sub: sub}, nil +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) WatchBurned(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolBurned, sender []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _BurnWithFromMintTokenPool.contract.WatchLogs(opts, "Burned", senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnWithFromMintTokenPoolBurned) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "Burned", 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 +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) ParseBurned(log types.Log) (*BurnWithFromMintTokenPoolBurned, error) { + event := new(BurnWithFromMintTokenPoolBurned) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "Burned", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnWithFromMintTokenPoolChainAddedIterator struct { + Event *BurnWithFromMintTokenPoolChainAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnWithFromMintTokenPoolChainAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolChainAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolChainAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnWithFromMintTokenPoolChainAddedIterator) Error() error { + return it.fail +} + +func (it *BurnWithFromMintTokenPoolChainAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnWithFromMintTokenPoolChainAdded struct { + RemoteChainSelector uint64 + RemoteToken []byte + OutboundRateLimiterConfig RateLimiterConfig + InboundRateLimiterConfig RateLimiterConfig + Raw types.Log +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) FilterChainAdded(opts *bind.FilterOpts) (*BurnWithFromMintTokenPoolChainAddedIterator, error) { + + logs, sub, err := _BurnWithFromMintTokenPool.contract.FilterLogs(opts, "ChainAdded") + if err != nil { + return nil, err + } + return &BurnWithFromMintTokenPoolChainAddedIterator{contract: _BurnWithFromMintTokenPool.contract, event: "ChainAdded", logs: logs, sub: sub}, nil +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) WatchChainAdded(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolChainAdded) (event.Subscription, error) { + + logs, sub, err := _BurnWithFromMintTokenPool.contract.WatchLogs(opts, "ChainAdded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnWithFromMintTokenPoolChainAdded) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "ChainAdded", 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 +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) ParseChainAdded(log types.Log) (*BurnWithFromMintTokenPoolChainAdded, error) { + event := new(BurnWithFromMintTokenPoolChainAdded) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "ChainAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnWithFromMintTokenPoolChainConfiguredIterator struct { + Event *BurnWithFromMintTokenPoolChainConfigured + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnWithFromMintTokenPoolChainConfiguredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolChainConfigured) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolChainConfigured) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnWithFromMintTokenPoolChainConfiguredIterator) Error() error { + return it.fail +} + +func (it *BurnWithFromMintTokenPoolChainConfiguredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnWithFromMintTokenPoolChainConfigured struct { + RemoteChainSelector uint64 + OutboundRateLimiterConfig RateLimiterConfig + InboundRateLimiterConfig RateLimiterConfig + Raw types.Log +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) FilterChainConfigured(opts *bind.FilterOpts) (*BurnWithFromMintTokenPoolChainConfiguredIterator, error) { + + logs, sub, err := _BurnWithFromMintTokenPool.contract.FilterLogs(opts, "ChainConfigured") + if err != nil { + return nil, err + } + return &BurnWithFromMintTokenPoolChainConfiguredIterator{contract: _BurnWithFromMintTokenPool.contract, event: "ChainConfigured", logs: logs, sub: sub}, nil +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) WatchChainConfigured(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolChainConfigured) (event.Subscription, error) { + + logs, sub, err := _BurnWithFromMintTokenPool.contract.WatchLogs(opts, "ChainConfigured") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnWithFromMintTokenPoolChainConfigured) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "ChainConfigured", 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 +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) ParseChainConfigured(log types.Log) (*BurnWithFromMintTokenPoolChainConfigured, error) { + event := new(BurnWithFromMintTokenPoolChainConfigured) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "ChainConfigured", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnWithFromMintTokenPoolChainRemovedIterator struct { + Event *BurnWithFromMintTokenPoolChainRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnWithFromMintTokenPoolChainRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolChainRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolChainRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnWithFromMintTokenPoolChainRemovedIterator) Error() error { + return it.fail +} + +func (it *BurnWithFromMintTokenPoolChainRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnWithFromMintTokenPoolChainRemoved struct { + RemoteChainSelector uint64 + Raw types.Log +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) FilterChainRemoved(opts *bind.FilterOpts) (*BurnWithFromMintTokenPoolChainRemovedIterator, error) { + + logs, sub, err := _BurnWithFromMintTokenPool.contract.FilterLogs(opts, "ChainRemoved") + if err != nil { + return nil, err + } + return &BurnWithFromMintTokenPoolChainRemovedIterator{contract: _BurnWithFromMintTokenPool.contract, event: "ChainRemoved", logs: logs, sub: sub}, nil +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolChainRemoved) (event.Subscription, error) { + + logs, sub, err := _BurnWithFromMintTokenPool.contract.WatchLogs(opts, "ChainRemoved") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnWithFromMintTokenPoolChainRemoved) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "ChainRemoved", 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 +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) ParseChainRemoved(log types.Log) (*BurnWithFromMintTokenPoolChainRemoved, error) { + event := new(BurnWithFromMintTokenPoolChainRemoved) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "ChainRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnWithFromMintTokenPoolConfigChangedIterator struct { + Event *BurnWithFromMintTokenPoolConfigChanged + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnWithFromMintTokenPoolConfigChangedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolConfigChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolConfigChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnWithFromMintTokenPoolConfigChangedIterator) Error() error { + return it.fail +} + +func (it *BurnWithFromMintTokenPoolConfigChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnWithFromMintTokenPoolConfigChanged struct { + Config RateLimiterConfig + Raw types.Log +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) FilterConfigChanged(opts *bind.FilterOpts) (*BurnWithFromMintTokenPoolConfigChangedIterator, error) { + + logs, sub, err := _BurnWithFromMintTokenPool.contract.FilterLogs(opts, "ConfigChanged") + if err != nil { + return nil, err + } + return &BurnWithFromMintTokenPoolConfigChangedIterator{contract: _BurnWithFromMintTokenPool.contract, event: "ConfigChanged", logs: logs, sub: sub}, nil +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) WatchConfigChanged(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolConfigChanged) (event.Subscription, error) { + + logs, sub, err := _BurnWithFromMintTokenPool.contract.WatchLogs(opts, "ConfigChanged") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnWithFromMintTokenPoolConfigChanged) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "ConfigChanged", 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 +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) ParseConfigChanged(log types.Log) (*BurnWithFromMintTokenPoolConfigChanged, error) { + event := new(BurnWithFromMintTokenPoolConfigChanged) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "ConfigChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnWithFromMintTokenPoolLockedIterator struct { + Event *BurnWithFromMintTokenPoolLocked + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnWithFromMintTokenPoolLockedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolLocked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolLocked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnWithFromMintTokenPoolLockedIterator) Error() error { + return it.fail +} + +func (it *BurnWithFromMintTokenPoolLockedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnWithFromMintTokenPoolLocked struct { + Sender common.Address + Amount *big.Int + Raw types.Log +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) FilterLocked(opts *bind.FilterOpts, sender []common.Address) (*BurnWithFromMintTokenPoolLockedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _BurnWithFromMintTokenPool.contract.FilterLogs(opts, "Locked", senderRule) + if err != nil { + return nil, err + } + return &BurnWithFromMintTokenPoolLockedIterator{contract: _BurnWithFromMintTokenPool.contract, event: "Locked", logs: logs, sub: sub}, nil +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) WatchLocked(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolLocked, sender []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _BurnWithFromMintTokenPool.contract.WatchLogs(opts, "Locked", senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnWithFromMintTokenPoolLocked) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "Locked", 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 +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) ParseLocked(log types.Log) (*BurnWithFromMintTokenPoolLocked, error) { + event := new(BurnWithFromMintTokenPoolLocked) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "Locked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnWithFromMintTokenPoolMintedIterator struct { + Event *BurnWithFromMintTokenPoolMinted + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnWithFromMintTokenPoolMintedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolMinted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolMinted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnWithFromMintTokenPoolMintedIterator) Error() error { + return it.fail +} + +func (it *BurnWithFromMintTokenPoolMintedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnWithFromMintTokenPoolMinted struct { + Sender common.Address + Recipient common.Address + Amount *big.Int + Raw types.Log +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) FilterMinted(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*BurnWithFromMintTokenPoolMintedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _BurnWithFromMintTokenPool.contract.FilterLogs(opts, "Minted", senderRule, recipientRule) + if err != nil { + return nil, err + } + return &BurnWithFromMintTokenPoolMintedIterator{contract: _BurnWithFromMintTokenPool.contract, event: "Minted", logs: logs, sub: sub}, nil +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) WatchMinted(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolMinted, sender []common.Address, recipient []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _BurnWithFromMintTokenPool.contract.WatchLogs(opts, "Minted", senderRule, recipientRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnWithFromMintTokenPoolMinted) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "Minted", 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 +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) ParseMinted(log types.Log) (*BurnWithFromMintTokenPoolMinted, error) { + event := new(BurnWithFromMintTokenPoolMinted) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "Minted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnWithFromMintTokenPoolOwnershipTransferRequestedIterator struct { + Event *BurnWithFromMintTokenPoolOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnWithFromMintTokenPoolOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnWithFromMintTokenPoolOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *BurnWithFromMintTokenPoolOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnWithFromMintTokenPoolOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*BurnWithFromMintTokenPoolOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _BurnWithFromMintTokenPool.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &BurnWithFromMintTokenPoolOwnershipTransferRequestedIterator{contract: _BurnWithFromMintTokenPool.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _BurnWithFromMintTokenPool.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnWithFromMintTokenPoolOwnershipTransferRequested) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "OwnershipTransferRequested", 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 +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) ParseOwnershipTransferRequested(log types.Log) (*BurnWithFromMintTokenPoolOwnershipTransferRequested, error) { + event := new(BurnWithFromMintTokenPoolOwnershipTransferRequested) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnWithFromMintTokenPoolOwnershipTransferredIterator struct { + Event *BurnWithFromMintTokenPoolOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnWithFromMintTokenPoolOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnWithFromMintTokenPoolOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *BurnWithFromMintTokenPoolOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnWithFromMintTokenPoolOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*BurnWithFromMintTokenPoolOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _BurnWithFromMintTokenPool.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &BurnWithFromMintTokenPoolOwnershipTransferredIterator{contract: _BurnWithFromMintTokenPool.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _BurnWithFromMintTokenPool.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnWithFromMintTokenPoolOwnershipTransferred) + if err := _BurnWithFromMintTokenPool.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 +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) ParseOwnershipTransferred(log types.Log) (*BurnWithFromMintTokenPoolOwnershipTransferred, error) { + event := new(BurnWithFromMintTokenPoolOwnershipTransferred) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnWithFromMintTokenPoolRateLimitAdminSetIterator struct { + Event *BurnWithFromMintTokenPoolRateLimitAdminSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnWithFromMintTokenPoolRateLimitAdminSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolRateLimitAdminSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolRateLimitAdminSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnWithFromMintTokenPoolRateLimitAdminSetIterator) Error() error { + return it.fail +} + +func (it *BurnWithFromMintTokenPoolRateLimitAdminSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnWithFromMintTokenPoolRateLimitAdminSet struct { + RateLimitAdmin common.Address + Raw types.Log +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) FilterRateLimitAdminSet(opts *bind.FilterOpts) (*BurnWithFromMintTokenPoolRateLimitAdminSetIterator, error) { + + logs, sub, err := _BurnWithFromMintTokenPool.contract.FilterLogs(opts, "RateLimitAdminSet") + if err != nil { + return nil, err + } + return &BurnWithFromMintTokenPoolRateLimitAdminSetIterator{contract: _BurnWithFromMintTokenPool.contract, event: "RateLimitAdminSet", logs: logs, sub: sub}, nil +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) WatchRateLimitAdminSet(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolRateLimitAdminSet) (event.Subscription, error) { + + logs, sub, err := _BurnWithFromMintTokenPool.contract.WatchLogs(opts, "RateLimitAdminSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnWithFromMintTokenPoolRateLimitAdminSet) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "RateLimitAdminSet", 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 +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) ParseRateLimitAdminSet(log types.Log) (*BurnWithFromMintTokenPoolRateLimitAdminSet, error) { + event := new(BurnWithFromMintTokenPoolRateLimitAdminSet) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "RateLimitAdminSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnWithFromMintTokenPoolReleasedIterator struct { + Event *BurnWithFromMintTokenPoolReleased + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnWithFromMintTokenPoolReleasedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolReleased) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolReleased) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnWithFromMintTokenPoolReleasedIterator) Error() error { + return it.fail +} + +func (it *BurnWithFromMintTokenPoolReleasedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnWithFromMintTokenPoolReleased struct { + Sender common.Address + Recipient common.Address + Amount *big.Int + Raw types.Log +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) FilterReleased(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*BurnWithFromMintTokenPoolReleasedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _BurnWithFromMintTokenPool.contract.FilterLogs(opts, "Released", senderRule, recipientRule) + if err != nil { + return nil, err + } + return &BurnWithFromMintTokenPoolReleasedIterator{contract: _BurnWithFromMintTokenPool.contract, event: "Released", logs: logs, sub: sub}, nil +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) WatchReleased(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolReleased, sender []common.Address, recipient []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _BurnWithFromMintTokenPool.contract.WatchLogs(opts, "Released", senderRule, recipientRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnWithFromMintTokenPoolReleased) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "Released", 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 +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) ParseReleased(log types.Log) (*BurnWithFromMintTokenPoolReleased, error) { + event := new(BurnWithFromMintTokenPoolReleased) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "Released", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnWithFromMintTokenPoolRemotePoolAddedIterator struct { + Event *BurnWithFromMintTokenPoolRemotePoolAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnWithFromMintTokenPoolRemotePoolAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolRemotePoolAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolRemotePoolAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnWithFromMintTokenPoolRemotePoolAddedIterator) Error() error { + return it.fail +} + +func (it *BurnWithFromMintTokenPoolRemotePoolAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnWithFromMintTokenPoolRemotePoolAdded struct { + RemoteChainSelector uint64 + RemotePoolAddress []byte + Raw types.Log +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) FilterRemotePoolAdded(opts *bind.FilterOpts, remoteChainSelector []uint64) (*BurnWithFromMintTokenPoolRemotePoolAddedIterator, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _BurnWithFromMintTokenPool.contract.FilterLogs(opts, "RemotePoolAdded", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return &BurnWithFromMintTokenPoolRemotePoolAddedIterator{contract: _BurnWithFromMintTokenPool.contract, event: "RemotePoolAdded", logs: logs, sub: sub}, nil +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) WatchRemotePoolAdded(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolRemotePoolAdded, remoteChainSelector []uint64) (event.Subscription, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _BurnWithFromMintTokenPool.contract.WatchLogs(opts, "RemotePoolAdded", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnWithFromMintTokenPoolRemotePoolAdded) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "RemotePoolAdded", 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 +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) ParseRemotePoolAdded(log types.Log) (*BurnWithFromMintTokenPoolRemotePoolAdded, error) { + event := new(BurnWithFromMintTokenPoolRemotePoolAdded) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "RemotePoolAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnWithFromMintTokenPoolRemotePoolRemovedIterator struct { + Event *BurnWithFromMintTokenPoolRemotePoolRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnWithFromMintTokenPoolRemotePoolRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolRemotePoolRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolRemotePoolRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnWithFromMintTokenPoolRemotePoolRemovedIterator) Error() error { + return it.fail +} + +func (it *BurnWithFromMintTokenPoolRemotePoolRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnWithFromMintTokenPoolRemotePoolRemoved struct { + RemoteChainSelector uint64 + RemotePoolAddress []byte + Raw types.Log +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) FilterRemotePoolRemoved(opts *bind.FilterOpts, remoteChainSelector []uint64) (*BurnWithFromMintTokenPoolRemotePoolRemovedIterator, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _BurnWithFromMintTokenPool.contract.FilterLogs(opts, "RemotePoolRemoved", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return &BurnWithFromMintTokenPoolRemotePoolRemovedIterator{contract: _BurnWithFromMintTokenPool.contract, event: "RemotePoolRemoved", logs: logs, sub: sub}, nil +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) WatchRemotePoolRemoved(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolRemotePoolRemoved, remoteChainSelector []uint64) (event.Subscription, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _BurnWithFromMintTokenPool.contract.WatchLogs(opts, "RemotePoolRemoved", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnWithFromMintTokenPoolRemotePoolRemoved) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "RemotePoolRemoved", 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 +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) ParseRemotePoolRemoved(log types.Log) (*BurnWithFromMintTokenPoolRemotePoolRemoved, error) { + event := new(BurnWithFromMintTokenPoolRemotePoolRemoved) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "RemotePoolRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnWithFromMintTokenPoolRouterUpdatedIterator struct { + Event *BurnWithFromMintTokenPoolRouterUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnWithFromMintTokenPoolRouterUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolRouterUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolRouterUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnWithFromMintTokenPoolRouterUpdatedIterator) Error() error { + return it.fail +} + +func (it *BurnWithFromMintTokenPoolRouterUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnWithFromMintTokenPoolRouterUpdated struct { + OldRouter common.Address + NewRouter common.Address + Raw types.Log +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) FilterRouterUpdated(opts *bind.FilterOpts) (*BurnWithFromMintTokenPoolRouterUpdatedIterator, error) { + + logs, sub, err := _BurnWithFromMintTokenPool.contract.FilterLogs(opts, "RouterUpdated") + if err != nil { + return nil, err + } + return &BurnWithFromMintTokenPoolRouterUpdatedIterator{contract: _BurnWithFromMintTokenPool.contract, event: "RouterUpdated", logs: logs, sub: sub}, nil +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) WatchRouterUpdated(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolRouterUpdated) (event.Subscription, error) { + + logs, sub, err := _BurnWithFromMintTokenPool.contract.WatchLogs(opts, "RouterUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnWithFromMintTokenPoolRouterUpdated) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "RouterUpdated", 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 +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) ParseRouterUpdated(log types.Log) (*BurnWithFromMintTokenPoolRouterUpdated, error) { + event := new(BurnWithFromMintTokenPoolRouterUpdated) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "RouterUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type BurnWithFromMintTokenPoolTokensConsumedIterator struct { + Event *BurnWithFromMintTokenPoolTokensConsumed + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *BurnWithFromMintTokenPoolTokensConsumedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolTokensConsumed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(BurnWithFromMintTokenPoolTokensConsumed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *BurnWithFromMintTokenPoolTokensConsumedIterator) Error() error { + return it.fail +} + +func (it *BurnWithFromMintTokenPoolTokensConsumedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type BurnWithFromMintTokenPoolTokensConsumed struct { + Tokens *big.Int + Raw types.Log +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) FilterTokensConsumed(opts *bind.FilterOpts) (*BurnWithFromMintTokenPoolTokensConsumedIterator, error) { + + logs, sub, err := _BurnWithFromMintTokenPool.contract.FilterLogs(opts, "TokensConsumed") + if err != nil { + return nil, err + } + return &BurnWithFromMintTokenPoolTokensConsumedIterator{contract: _BurnWithFromMintTokenPool.contract, event: "TokensConsumed", logs: logs, sub: sub}, nil +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) WatchTokensConsumed(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolTokensConsumed) (event.Subscription, error) { + + logs, sub, err := _BurnWithFromMintTokenPool.contract.WatchLogs(opts, "TokensConsumed") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(BurnWithFromMintTokenPoolTokensConsumed) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "TokensConsumed", 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 +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPoolFilterer) ParseTokensConsumed(log types.Log) (*BurnWithFromMintTokenPoolTokensConsumed, error) { + event := new(BurnWithFromMintTokenPoolTokensConsumed) + if err := _BurnWithFromMintTokenPool.contract.UnpackLog(event, "TokensConsumed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPool) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _BurnWithFromMintTokenPool.abi.Events["AllowListAdd"].ID: + return _BurnWithFromMintTokenPool.ParseAllowListAdd(log) + case _BurnWithFromMintTokenPool.abi.Events["AllowListRemove"].ID: + return _BurnWithFromMintTokenPool.ParseAllowListRemove(log) + case _BurnWithFromMintTokenPool.abi.Events["Burned"].ID: + return _BurnWithFromMintTokenPool.ParseBurned(log) + case _BurnWithFromMintTokenPool.abi.Events["ChainAdded"].ID: + return _BurnWithFromMintTokenPool.ParseChainAdded(log) + case _BurnWithFromMintTokenPool.abi.Events["ChainConfigured"].ID: + return _BurnWithFromMintTokenPool.ParseChainConfigured(log) + case _BurnWithFromMintTokenPool.abi.Events["ChainRemoved"].ID: + return _BurnWithFromMintTokenPool.ParseChainRemoved(log) + case _BurnWithFromMintTokenPool.abi.Events["ConfigChanged"].ID: + return _BurnWithFromMintTokenPool.ParseConfigChanged(log) + case _BurnWithFromMintTokenPool.abi.Events["Locked"].ID: + return _BurnWithFromMintTokenPool.ParseLocked(log) + case _BurnWithFromMintTokenPool.abi.Events["Minted"].ID: + return _BurnWithFromMintTokenPool.ParseMinted(log) + case _BurnWithFromMintTokenPool.abi.Events["OwnershipTransferRequested"].ID: + return _BurnWithFromMintTokenPool.ParseOwnershipTransferRequested(log) + case _BurnWithFromMintTokenPool.abi.Events["OwnershipTransferred"].ID: + return _BurnWithFromMintTokenPool.ParseOwnershipTransferred(log) + case _BurnWithFromMintTokenPool.abi.Events["RateLimitAdminSet"].ID: + return _BurnWithFromMintTokenPool.ParseRateLimitAdminSet(log) + case _BurnWithFromMintTokenPool.abi.Events["Released"].ID: + return _BurnWithFromMintTokenPool.ParseReleased(log) + case _BurnWithFromMintTokenPool.abi.Events["RemotePoolAdded"].ID: + return _BurnWithFromMintTokenPool.ParseRemotePoolAdded(log) + case _BurnWithFromMintTokenPool.abi.Events["RemotePoolRemoved"].ID: + return _BurnWithFromMintTokenPool.ParseRemotePoolRemoved(log) + case _BurnWithFromMintTokenPool.abi.Events["RouterUpdated"].ID: + return _BurnWithFromMintTokenPool.ParseRouterUpdated(log) + case _BurnWithFromMintTokenPool.abi.Events["TokensConsumed"].ID: + return _BurnWithFromMintTokenPool.ParseTokensConsumed(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (BurnWithFromMintTokenPoolAllowListAdd) Topic() common.Hash { + return common.HexToHash("0x2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d8") +} + +func (BurnWithFromMintTokenPoolAllowListRemove) Topic() common.Hash { + return common.HexToHash("0x800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf7566") +} + +func (BurnWithFromMintTokenPoolBurned) Topic() common.Hash { + return common.HexToHash("0x696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df7") +} + +func (BurnWithFromMintTokenPoolChainAdded) Topic() common.Hash { + return common.HexToHash("0x8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c2") +} + +func (BurnWithFromMintTokenPoolChainConfigured) Topic() common.Hash { + return common.HexToHash("0x0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b") +} + +func (BurnWithFromMintTokenPoolChainRemoved) Topic() common.Hash { + return common.HexToHash("0x5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d859916") +} + +func (BurnWithFromMintTokenPoolConfigChanged) Topic() common.Hash { + return common.HexToHash("0x9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19") +} + +func (BurnWithFromMintTokenPoolLocked) Topic() common.Hash { + return common.HexToHash("0x9f1ec8c880f76798e7b793325d625e9b60e4082a553c98f42b6cda368dd60008") +} + +func (BurnWithFromMintTokenPoolMinted) Topic() common.Hash { + return common.HexToHash("0x9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0") +} + +func (BurnWithFromMintTokenPoolOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (BurnWithFromMintTokenPoolOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (BurnWithFromMintTokenPoolRateLimitAdminSet) Topic() common.Hash { + return common.HexToHash("0x44676b5284b809a22248eba0da87391d79098be38bb03154be88a58bf4d09174") +} + +func (BurnWithFromMintTokenPoolReleased) Topic() common.Hash { + return common.HexToHash("0x2d87480f50083e2b2759522a8fdda59802650a8055e609a7772cf70c07748f52") +} + +func (BurnWithFromMintTokenPoolRemotePoolAdded) Topic() common.Hash { + return common.HexToHash("0x7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea") +} + +func (BurnWithFromMintTokenPoolRemotePoolRemoved) Topic() common.Hash { + return common.HexToHash("0x52d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d76") +} + +func (BurnWithFromMintTokenPoolRouterUpdated) Topic() common.Hash { + return common.HexToHash("0x02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f1684") +} + +func (BurnWithFromMintTokenPoolTokensConsumed) Topic() common.Hash { + return common.HexToHash("0x1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a") +} + +func (_BurnWithFromMintTokenPool *BurnWithFromMintTokenPool) Address() common.Address { + return _BurnWithFromMintTokenPool.address +} + +type BurnWithFromMintTokenPoolInterface interface { + GetAllowList(opts *bind.CallOpts) ([]common.Address, error) + + GetAllowListEnabled(opts *bind.CallOpts) (bool, error) + + GetCurrentInboundRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64) (RateLimiterTokenBucket, error) + + GetCurrentOutboundRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64) (RateLimiterTokenBucket, error) + + GetRateLimitAdmin(opts *bind.CallOpts) (common.Address, error) + + GetRemotePools(opts *bind.CallOpts, remoteChainSelector uint64) ([][]byte, error) + + GetRemoteToken(opts *bind.CallOpts, remoteChainSelector uint64) ([]byte, error) + + GetRmnProxy(opts *bind.CallOpts) (common.Address, error) + + GetRouter(opts *bind.CallOpts) (common.Address, error) + + GetSupportedChains(opts *bind.CallOpts) ([]uint64, error) + + GetToken(opts *bind.CallOpts) (common.Address, error) + + GetTokenDecimals(opts *bind.CallOpts) (uint8, error) + + IsRemotePool(opts *bind.CallOpts, remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) + + IsSupportedChain(opts *bind.CallOpts, remoteChainSelector uint64) (bool, error) + + IsSupportedToken(opts *bind.CallOpts, token common.Address) (bool, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + AddRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) + + ApplyAllowListUpdates(opts *bind.TransactOpts, removes []common.Address, adds []common.Address) (*types.Transaction, error) + + ApplyChainUpdates(opts *bind.TransactOpts, remoteChainSelectorsToRemove []uint64, chainsToAdd []TokenPoolChainUpdate) (*types.Transaction, error) + + LockOrBurn(opts *bind.TransactOpts, lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) + + ReleaseOrMint(opts *bind.TransactOpts, releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) + + RemoveRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) + + SetChainRateLimiterConfig(opts *bind.TransactOpts, remoteChainSelector uint64, outboundConfig RateLimiterConfig, inboundConfig RateLimiterConfig) (*types.Transaction, error) + + SetRateLimitAdmin(opts *bind.TransactOpts, rateLimitAdmin common.Address) (*types.Transaction, error) + + SetRouter(opts *bind.TransactOpts, newRouter common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + FilterAllowListAdd(opts *bind.FilterOpts) (*BurnWithFromMintTokenPoolAllowListAddIterator, error) + + WatchAllowListAdd(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolAllowListAdd) (event.Subscription, error) + + ParseAllowListAdd(log types.Log) (*BurnWithFromMintTokenPoolAllowListAdd, error) + + FilterAllowListRemove(opts *bind.FilterOpts) (*BurnWithFromMintTokenPoolAllowListRemoveIterator, error) + + WatchAllowListRemove(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolAllowListRemove) (event.Subscription, error) + + ParseAllowListRemove(log types.Log) (*BurnWithFromMintTokenPoolAllowListRemove, error) + + FilterBurned(opts *bind.FilterOpts, sender []common.Address) (*BurnWithFromMintTokenPoolBurnedIterator, error) + + WatchBurned(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolBurned, sender []common.Address) (event.Subscription, error) + + ParseBurned(log types.Log) (*BurnWithFromMintTokenPoolBurned, error) + + FilterChainAdded(opts *bind.FilterOpts) (*BurnWithFromMintTokenPoolChainAddedIterator, error) + + WatchChainAdded(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolChainAdded) (event.Subscription, error) + + ParseChainAdded(log types.Log) (*BurnWithFromMintTokenPoolChainAdded, error) + + FilterChainConfigured(opts *bind.FilterOpts) (*BurnWithFromMintTokenPoolChainConfiguredIterator, error) + + WatchChainConfigured(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolChainConfigured) (event.Subscription, error) + + ParseChainConfigured(log types.Log) (*BurnWithFromMintTokenPoolChainConfigured, error) + + FilterChainRemoved(opts *bind.FilterOpts) (*BurnWithFromMintTokenPoolChainRemovedIterator, error) + + WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolChainRemoved) (event.Subscription, error) + + ParseChainRemoved(log types.Log) (*BurnWithFromMintTokenPoolChainRemoved, error) + + FilterConfigChanged(opts *bind.FilterOpts) (*BurnWithFromMintTokenPoolConfigChangedIterator, error) + + WatchConfigChanged(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolConfigChanged) (event.Subscription, error) + + ParseConfigChanged(log types.Log) (*BurnWithFromMintTokenPoolConfigChanged, error) + + FilterLocked(opts *bind.FilterOpts, sender []common.Address) (*BurnWithFromMintTokenPoolLockedIterator, error) + + WatchLocked(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolLocked, sender []common.Address) (event.Subscription, error) + + ParseLocked(log types.Log) (*BurnWithFromMintTokenPoolLocked, error) + + FilterMinted(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*BurnWithFromMintTokenPoolMintedIterator, error) + + WatchMinted(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolMinted, sender []common.Address, recipient []common.Address) (event.Subscription, error) + + ParseMinted(log types.Log) (*BurnWithFromMintTokenPoolMinted, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*BurnWithFromMintTokenPoolOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*BurnWithFromMintTokenPoolOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*BurnWithFromMintTokenPoolOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*BurnWithFromMintTokenPoolOwnershipTransferred, error) + + FilterRateLimitAdminSet(opts *bind.FilterOpts) (*BurnWithFromMintTokenPoolRateLimitAdminSetIterator, error) + + WatchRateLimitAdminSet(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolRateLimitAdminSet) (event.Subscription, error) + + ParseRateLimitAdminSet(log types.Log) (*BurnWithFromMintTokenPoolRateLimitAdminSet, error) + + FilterReleased(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*BurnWithFromMintTokenPoolReleasedIterator, error) + + WatchReleased(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolReleased, sender []common.Address, recipient []common.Address) (event.Subscription, error) + + ParseReleased(log types.Log) (*BurnWithFromMintTokenPoolReleased, error) + + FilterRemotePoolAdded(opts *bind.FilterOpts, remoteChainSelector []uint64) (*BurnWithFromMintTokenPoolRemotePoolAddedIterator, error) + + WatchRemotePoolAdded(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolRemotePoolAdded, remoteChainSelector []uint64) (event.Subscription, error) + + ParseRemotePoolAdded(log types.Log) (*BurnWithFromMintTokenPoolRemotePoolAdded, error) + + FilterRemotePoolRemoved(opts *bind.FilterOpts, remoteChainSelector []uint64) (*BurnWithFromMintTokenPoolRemotePoolRemovedIterator, error) + + WatchRemotePoolRemoved(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolRemotePoolRemoved, remoteChainSelector []uint64) (event.Subscription, error) + + ParseRemotePoolRemoved(log types.Log) (*BurnWithFromMintTokenPoolRemotePoolRemoved, error) + + FilterRouterUpdated(opts *bind.FilterOpts) (*BurnWithFromMintTokenPoolRouterUpdatedIterator, error) + + WatchRouterUpdated(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolRouterUpdated) (event.Subscription, error) + + ParseRouterUpdated(log types.Log) (*BurnWithFromMintTokenPoolRouterUpdated, error) + + FilterTokensConsumed(opts *bind.FilterOpts) (*BurnWithFromMintTokenPoolTokensConsumedIterator, error) + + WatchTokensConsumed(opts *bind.WatchOpts, sink chan<- *BurnWithFromMintTokenPoolTokensConsumed) (event.Subscription, error) + + ParseTokensConsumed(log types.Log) (*BurnWithFromMintTokenPoolTokensConsumed, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var BurnWithFromMintTokenPoolZKBin string = ("0x0004000000000002001f00000000000200000060031002700000066b0030019d0000066b033001970003000000310355000200000001035500000001002001900000005d0000c13d0000008004000039000000400040043f000000040030008c000000850000413d000000000201043b000000e0022002700000068b0020009c000000870000a13d0000068c0020009c000000c80000a13d0000068d0020009c000000f70000213d000006930020009c000001810000213d000006960020009c000005230000613d000006970020009c000000850000c13d0000000002000416000000000002004b000000850000c13d0000000504000039000000000204041a000000800020043f000000000040043f000000000002004b00000a110000c13d000000a002000039000000400020043f0000002004000039000000000500001900000005065002100000003f07600039000006d40770019700000000072700190000066f0070009c000001230000213d000000400070043f00000000005204350000001f0560018f000000a004400039000000000006004b0000003b0000613d000000000131034f00000000036400190000000006040019000000001701043c0000000006760436000000000036004b000000370000c13d000000000005004b000000800100043d000000000001004b0000004d0000613d00000000010000190000000003020433000000000013004b0000102b0000a13d00000005031002100000000005430019000000a00330003900000000030304330000066f0330019700000000003504350000000101100039000000800300043d000000000031004b000000400000413d000000400100043d00000020030000390000000005310436000000000302043300000000003504350000004002100039000000000003004b00000a080000613d000000000500001900000000460404340000066f0660019700000000026204360000000105500039000000000035004b000000560000413d00000a080000013d0000010004000039000000400040043f0000000002000416000000000002004b000000850000c13d0000001f023000390000066c022001970000010002200039000000400020043f0000001f0530018f0000066d0630019800000100026000390000006f0000613d000000000701034f000000007807043c0000000004840436000000000024004b0000006b0000c13d000000000005004b0000007c0000613d000000000161034f0000000304500210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000a00030008c000000850000413d000001000100043d0000066e0010009c000000850000213d000001200200043d001100000002001d000000ff0020008c000001100000a13d0000000001000019000019aa00010430000006a10020009c000000a20000213d000006ab0020009c000001290000a13d000006ac0020009c000001580000213d000006af0020009c000001fa0000613d000006b00020009c000000850000c13d0000000001000416000000000001004b000000850000c13d0000000001000412001900000001001d001800200000003d000080050100003900000044030000390000000004000415000000190440008a0000000504400210000006cb0200004119a819800000040f000000ff0110018f000000800010043f000006cc01000041000019a90001042e000006a20020009c0000013a0000a13d000006a30020009c000001630000213d000006a60020009c000002150000613d000006a70020009c000000850000c13d000000240030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000401100370000000000101043b0000066e0010009c000000850000213d0000000102000039000000000202041a0000066e022001970000000003000411000000000023004b000009e10000c13d0000000902000039000000000302041a0000067203300197000000000313019f000000000032041b000000800010043f00000000010004140000066b0010009c0000066b01008041000000c001100210000006e9011001c70000800d020000390000000103000039000006ea0400004100000a350000013d000006980020009c000001450000a13d000006990020009c0000016c0000213d0000069c0020009c000002980000613d0000069d0020009c000000850000c13d000000240030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000401100370000000000101043b001100000001001d0000066f0010009c000000850000213d19a815a50000040f0000001101000029000000000010043f0000000701000039000000200010043f0000004002000039000000000100001919a8196b0000040f001000000001001d000000400100043d001100000001001d19a814a80000040f00000010050000290000000201500039000000000401041a000006d1004001980000000002000039000000010200c03900000011010000290000004003100039000000000023043500000080024002700000066b0220019700000020031000390000000000230435000006be02400197000000000021043500000003025000390000056e0000013d0000068e0020009c000001e10000213d000006910020009c000005380000613d000006920020009c000000850000c13d0000000001000416000000000001004b000000850000c13d0000000001000412001300000001001d001200600000003d000080050100003900000044030000390000000004000415000000130440008a0000000504400210000006cb0200004119a819800000040f000000000001004b0000000001000039000000010100c039000000800010043f000006cc01000041000019a90001042e000001400200043d0000066f0020009c000000850000213d0000001f04200039000000000034004b000000000500001900000670050080410000067004400197000000000004004b00000000060000190000067006004041000006700040009c000000000605c019000000000006004b000000850000c13d000001000420003900000000040404330000066f0040009c000009b50000a13d000006dc01000041000000000010043f0000004101000039000000040010043f000006bb01000041000019aa00010430000006b10020009c000003fb0000613d000006b20020009c000003410000613d000006b30020009c000000850000c13d0000000001000416000000000001004b000000850000c13d0000000001000412001d00000001001d001c00000000003d0000800501000039000000440300003900000000040004150000001d0440008a000005420000013d000006a80020009c0000040e0000613d000006a90020009c000003550000613d000006aa0020009c000000850000c13d0000000001000416000000000001004b000000850000c13d00000009010000390000033c0000013d0000069e0020009c000004d00000613d0000069f0020009c000003930000613d000006a00020009c000000850000c13d0000000001000416000000000001004b000000850000c13d0000000202000039000000000102041a000000800010043f000000000020043f0000002002000039000000000001004b000009e90000c13d000000a0010000390000000004020019000009f80000013d000006ad0020009c000002310000613d000006ae0020009c000000850000c13d0000000001000416000000000001004b000000850000c13d000000000103001919a8145c0000040f19a815150000040f0000028e0000013d000006a40020009c000002840000613d000006a50020009c000000850000c13d0000000001000416000000000001004b000000850000c13d00000001010000390000033c0000013d0000069a0020009c000003380000613d0000069b0020009c000000850000c13d000000240030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000401100370000000000101043b0000066f0010009c000000850000213d19a815ba0000040f0000002002000039000000400300043d001100000003001d000000000223043619a8144a0000040f00000011020000290000057b0000013d000006940020009c000005490000613d000006950020009c000000850000c13d000000e40030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000402100370000000000202043b001100000002001d0000066f0020009c000000850000213d000000e002000039000000400020043f0000002402100370000000000202043b000000000002004b0000000003000039000000010300c039000000000032004b000000850000c13d000000800020043f0000004402100370000000000202043b000006be0020009c000000850000213d000000a00020043f0000006402100370000000000202043b000006be0020009c000000850000213d000000c00020043f0000014002000039000000400020043f0000008402100370000000000202043b000000000002004b0000000003000039000000010300c039000000000032004b000000850000c13d000000e00020043f000000a402100370000000000202043b000006be0020009c000000850000213d000001000020043f000000c401100370000000000101043b000006be0010009c000000850000213d000001200010043f0000000901000039000000000101041a0000066e021001970000000001000411000000000021004b000001c20000613d0000000102000039000000000202041a0000066e02200197000000000021004b00000df00000c13d0000001101000029000000000010043f0000000601000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000000101041a000000000001004b000003880000613d000000c00100043d000006be01100197000000800200043d000000000002004b00000ed30000c13d000000000001004b000001dd0000c13d000000a00100043d000006be0010019800000ed90000613d000000400200043d001100000002001d000006c00100004100000f460000013d0000068f0020009c000005840000613d000006900020009c000000850000c13d000000240030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000401100370000000000601043b0000066e0060009c000000850000213d0000000101000039000000000101041a0000066e011001970000000005000411000000000015004b000009e10000c13d000000000056004b00000a390000c13d000006b601000041000000800010043f000006b701000041000019aa00010430000000240030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000401100370000000000101043b001100000001001d0000066e0010009c000000850000213d0000000001000412001b00000001001d001a00000000003d0000800501000039000000440300003900000000040004150000001b0440008a0000000504400210000006cb0200004119a819800000040f0000066e01100197000000110010006b00000000010000390000000101006039000000800010043f000006cc01000041000019a90001042e0000000001000416000000000001004b000000850000c13d000000000100041a0000066e021001970000000006000411000000000026004b000009e50000c13d0000000102000039000000000302041a0000067204300197000000000464019f000000000042041b0000067201100197000000000010041b00000000010004140000066e053001970000066b0010009c0000066b01008041000000c001100210000006b4011001c70000800d020000390000000303000039000006ec0400004119a8199e0000040f0000000100200190000000850000613d00000a480000013d000000240030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000402100370000000000202043b001100000002001d0000066f0020009c000000850000213d000000110230006a000006820020009c000000850000213d000001040020008c000000850000413d000000a002000039000000400020043f0000001102000029000f00840020003d0000000f01100360000000800000043f000000000101043b001000000001001d0000066e0010009c000000850000213d000006cb01000041000000000010044300000000010004120000000400100443000000240000044300000000010004140000066b0010009c0000066b01008041000000c001100210000006dd011001c7000080050200003919a819a30000040f0000000100200190000013d70000613d0000000202000367000000000101043b0000066e01100197000000100010006b00000a6b0000c13d0000000f01000029000e0060001000920000000e01200360000000000101043b0000066f0010009c000000850000213d000000400300043d000006df0200004100000000002304350000008001100210000006e001100197000f00000003001d00000004023000390000000000120435000006cb010000410000000000100443000000000100041200000004001004430000004001000039000000240010044300000000010004140000066b0010009c0000066b01008041000000c001100210000006dd011001c7000080050200003919a819a30000040f0000000100200190000013d70000613d000000000201043b00000000010004140000066e02200197000000040020008c00000be30000c13d0000000103000031000000200030008c0000002004000039000000000403401900000c0d0000013d000000240030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000401100370000000000101043b0000066f0010009c000000850000213d19a817b80000040f000000000001004b0000000001000039000000010100c039000000400200043d00000000001204350000066b0020009c0000066b020080410000004001200210000006e8011001c7000019a90001042e000000440030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000402100370000000000202043b001100000002001d0000066f0020009c000000850000213d0000002402100370000000000202043b0000066f0020009c000000850000213d0000002304200039000000000034004b000000850000813d000f00040020003d0000000f01100360000000000101043b001000000001001d0000066f0010009c000000850000213d0000002402200039000d00000002001d000e00100020002d0000000e0030006b000000850000213d0000000101000039000000000101041a0000066e011001970000000002000411000000000012004b000009e10000c13d0000001101000029000000000010043f0000000601000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000000101041a000000000001004b000003880000613d0000001101000029000000000010043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d00000010020000290000001f02200039000006fd02200197000b00000002001d0000003f02200039000006fd02200197000000000101043b000c00000001001d000000400100043d0000000002210019000000000012004b000000000400003900000001040040390000066f0020009c000001230000213d0000000100400190000001230000c13d000000400020043f000000100200002900000000022104360000000e05000029000000000050007c000000850000213d0000001004000029000006fd03400198000e001f00400193000a00000003001d00000000033200190000000f040000290000002004400039000f00000004001d0000000204400367000002ff0000613d000000000504034f0000000006020019000000005705043c0000000006760436000000000036004b000002fb0000c13d0000000e0000006b0000030d0000613d0000000a044003600000000e050000290000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000430435000000100320002900000000000304350000066b0020009c0000066b02008041000000400220021000000000010104330000066b0010009c0000066b010080410000006001100210000000000121019f00000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f000006b4011001c7000080100200003919a819a30000040f0000000100200190000000850000613d0000000c020000290000000503200039000000000201043b000000000103001919a817cc0000040f000000400700043d000000000001004b00000f500000c13d000c00000007001d000000240170003900000040020000390000000000210435000006da01000041000000000017043500000004017000390000001102000029000000000021043500000044037000390000000d01000029000000100200002919a815860000040f0000000c02000029000010450000013d0000000001000416000000000001004b000000850000c13d0000000401000039000000000101041a0000066e01100197000000800010043f000006cc01000041000019a90001042e0000000001000416000000000001004b000000850000c13d000000c001000039000000400010043f0000001f01000039000000800010043f000006f701000041000000a00010043f0000002001000039000000c00010043f0000008001000039000000e00200003919a8144a0000040f000000c00110008a0000066b0010009c0000066b010080410000006001100210000006f8011001c7000019a90001042e000000440030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000402100370000000000202043b001100000002001d0000066f0020009c000000850000213d0000002402100370000000000202043b0000066f0020009c000000850000213d0000002304200039000000000034004b000000850000813d0000000404200039000000000141034f000000000101043b001000000001001d0000066f0010009c000000850000213d0000002402200039000f00000002001d0000001001200029000000000031004b000000850000213d0000000101000039000000000101041a0000066e011001970000000002000411000000000012004b000009e10000c13d0000001101000029000000000010043f0000000601000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000000101041a000000000001004b00000b590000c13d000000400100043d000006ba0200004100000000002104350000000402100039000000110300002900000000003204350000066b0010009c0000066b010080410000004001100210000006bb011001c7000019aa00010430000000240030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000401100370000000000101043b0000066f0010009c000000850000213d000000000010043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b0000000501100039000000000301041a000000400200043d000f00000002001d001100000003001d0000000002320436000e00000002001d000000000010043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000000850000613d0000001105000029000000000005004b0000000e02000029000003c70000613d000000000101043b0000000e020000290000000003000019000000000401041a000000000242043600000001011000390000000103300039000000000053004b000003c10000413d0000000f0120006a0000001f01100039000006fd011001970000000f04100029000000000014004b000000000100003900000001010040390000066f0040009c000001230000213d0000000100100190000001230000c13d000000400040043f0000000f0100002900000000020104330000066f0020009c000001230000213d00000005012002100000003f03100039000006710330019700000000034300190000066f0030009c000001230000213d000000400030043f000d00000004001d0000000005240436000000000002004b000003e90000613d00000060020000390000000003000019000000000435001900000000002404350000002003300039000000000013004b000003e40000413d000c00000005001d0000000f010000290000000001010433000000000001004b00000b620000c13d000000400100043d000000200200003900000000032104360000000d0200002900000000020204330000000000230435000000400310003900000005042002100000000005340019000000000002004b00000bc60000c13d000000000215004900000a090000013d000000240030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000401100370000000000201043b000006f900200198000000850000c13d0000000101000039000006fa0020009c000005460000613d000006fb0020009c000005460000613d000006fc0020009c000000000100c019000000800010043f000006cc01000041000019a90001042e000000440030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000402100370000000000202043b0000066f0020009c000000850000213d0000002305200039000000000035004b000000850000813d0000000405200039000000000551034f000000000905043b0000066f0090009c000000850000213d0000002407200039000000050b90021000000000087b0019000000000038004b000000850000213d0000002402100370000000000202043b0000066f0020009c000000850000213d0000002305200039000000000035004b000000850000813d0000000405200039000000000551034f000000000605043b0000066f0060009c000000850000213d0000002402200039000000050a60021000000000052a0019000000000035004b000000850000213d0000000103000039000000000303041a0000066e03300197000000000c00041100000000003c004b000009e10000c13d0000003f03b000390000067103300197000006d30030009c000001230000213d0000008003300039000f00000003001d000000400030043f000000800090043f000000000009004b000004500000613d000000000371034f000000000303043b0000066e0030009c000000850000213d000000200440003900000000003404350000002007700039000000000087004b000004450000413d000000400300043d000f00000003001d0000003f03a0003900000671033001970000000f033000290000000f0030006c000000000400003900000001040040390000066f0030009c000001230000213d0000000100400190000001230000c13d000000400030043f0000000f030000290000000003630436000e00000003001d000000000006004b0000046a0000613d0000000f03000029000000000421034f000000000404043b0000066e0040009c000000850000213d000000200330003900000000004304350000002002200039000000000052004b000004610000413d000006cb010000410000000000100443000000000100041200000004001004430000006001000039000000240010044300000000010004140000066b0010009c0000066b01008041000000c001100210000006dd011001c7000080050200003919a819a30000040f0000000100200190000013d70000613d000000000101043b000000000001004b00000ade0000613d000000800100043d000000000001004b00000fc60000c13d0000000f010000290000000001010433000000000001004b00000a480000613d00000000030000190000048a0000013d00000001033000390000000f010000290000000001010433000000000013004b00000a480000813d00000005013002100000000e0110002900000000010104330000066e04100198000004850000613d000000000040043f0000000301000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c70000801002000039001000000003001d001100000004001d19a819a30000040f000000110400002900000010030000290000000100200190000000850000613d000000000101043b000000000101041a000000000001004b000004850000c13d0000000203000039000000000103041a0000066f0010009c000001230000213d0000000102100039000000000023041b000006790110009a000000000041041b000000000103041a000d00000001001d000000000040043f0000000301000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f00000011030000290000000100200190000000850000613d000000000101043b0000000d02000029000000000021041b000000400100043d00000000003104350000066b0010009c0000066b01008041000000400110021000000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f0000067a011001c70000800d0200003900000001030000390000067b0400004119a8199e0000040f00000010030000290000000100200190000004850000c13d000000850000013d000000240030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000402100370000000000202043b0000066f0020009c000000850000213d0000000003230049000006820030009c000000850000213d000000a40030008c000000850000413d000000c003000039000000400030043f0000006003000039000000800030043f000000a00030043f001000840020003d0000001001100360000000000101043b001100000001001d0000066e0010009c000000850000213d000006cb01000041000000000010044300000000010004120000000400100443000000240000044300000000010004140000066b0010009c0000066b01008041000000c001100210000006dd011001c7000080050200003919a819a30000040f0000000100200190000013d70000613d0000000202000367000000000101043b0000066e01100197000000110010006b00000a4a0000c13d0000001001000029000f0060001000920000000f01200360000000000101043b0000066f0010009c000000850000213d000000400300043d000006df0200004100000000002304350000008001100210000006e001100197001000000003001d00000004023000390000000000120435000006cb010000410000000000100443000000000100041200000004001004430000004001000039000000240010044300000000010004140000066b0010009c0000066b01008041000000c001100210000006dd011001c7000080050200003919a819a30000040f0000000100200190000013d70000613d000000000201043b00000000010004140000066e02200197000000040020008c00000ae10000c13d0000000103000031000000200030008c0000002004000039000000000403401900000b0b0000013d000000240030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000401100370000000000101043b0000066e0010009c000000850000213d0000000102000039000000000202041a0000066e022001970000000003000411000000000023004b000009e10000c13d000000000001004b00000a250000c13d000006ca01000041000000800010043f000006b701000041000019aa000104300000000001000416000000000001004b000000850000c13d0000000001000412001500000001001d001400400000003d000080050100003900000044030000390000000004000415000000150440008a0000000504400210000006cb0200004119a819800000040f0000066e01100197000000800010043f000006cc01000041000019a90001042e000000240030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000401100370000000000101043b001100000001001d0000066f0010009c000000850000213d19a815a50000040f0000001101000029000000000010043f0000000701000039000000200010043f0000004002000039000000000100001919a8196b0000040f001000000001001d000000400100043d001100000001001d19a814a80000040f0000001005000029000000000405041a000006d1004001980000000002000039000000010200c03900000011010000290000004003100039000000000023043500000080024002700000066b0220019700000020031000390000000000230435000006be0240019700000000002104350000000102500039000000000402041a000000800210003900000080034002700000000000320435000006be034001970000006002100039000000000032043519a8176a0000040f000000400100043d001000000001001d000000110200002919a814790000040f000000100200002900000000012100490000066b0010009c0000066b0100804100000060011002100000066b0020009c0000066b020080410000004002200210000000000121019f000019a90001042e000000440030008c000000850000413d0000000002000416000000000002004b000000850000c13d0000000402100370000000000202043b0000066f0020009c000000850000213d0000002304200039000000000034004b000000850000813d0000000404200039000000000441034f000000000404043b000600000004001d0000066f0040009c000000850000213d000500240020003d000000060200002900000005022002100000000502200029000000000032004b000000850000213d0000002402100370000000000202043b000200000002001d0000066f0020009c000000850000213d00000002020000290000002302200039000000000032004b000000850000813d00000002020000290000000402200039000000000121034f000000000101043b000100000001001d0000066f0010009c000000850000213d0000000201000029000300240010003d000000010100002900000005011002100000000301100029000000000031004b000000850000213d0000000101000039000000000101041a0000066e011001970000000002000411000000000012004b000009e10000c13d000000060000006b00000c530000c13d000000010000006b00000a480000613d000500000000001d0000000501000029000000050110021000000003011000290000000202000367000000000112034f000000000101043b0000000003000031000000020430006a000001430440008a00000670054001970000067006100197000000000756013f000000000056004b00000000050000190000067005004041000000000041004b00000000040000190000067004008041000006700070009c000000000504c019000000000005004b000000850000c13d001000030010002d000000100130006a000f00000001001d000006820010009c000000850000213d0000000f01000029000001200010008c000000850000413d000000400100043d000900000001001d000006bc0010009c000001230000213d0000000901000029000000a001100039000000400010043f0000001001200360000000000101043b0000066f0010009c000000850000213d00000009040000290000000001140436000800000001001d00000010010000290000002001100039000000000112034f000000000101043b0000066f0010009c000000850000213d0000001001100029001100000001001d0000001f01100039000000000031004b0000000004000019000006700400804100000670011001970000067005300197000000000751013f000000000051004b00000000010000190000067001004041000006700070009c000000000104c019000000000001004b000000850000c13d0000001101200360000000000101043b0000066f0010009c000001230000213d00000005091002100000003f049000390000067104400197000000400600043d0000000004460019000e00000006001d000000000064004b000000000700003900000001070040390000066f0040009c000001230000213d0000000100700190000001230000c13d000000400040043f0000000e040000290000000000140435000000110100002900000020081000390000000009980019000000000039004b000000850000213d000000000098004b000006670000813d0000000e0a000029000006240000013d000000200aa000390000000001b7001900000000000104350000000000ca04350000002008800039000000000098004b000006670000813d000000000182034f000000000101043b0000066f0010009c000000850000213d000000110d1000290000003f01d00039000000000031004b000000000400001900000670040080410000067001100197000000000751013f000000000051004b00000000010000190000067001004041000006700070009c000000000104c019000000000001004b000000850000c13d000000200ed000390000000001e2034f000000000b01043b0000066f00b0009c000001230000213d0000001f01b00039000006fd011001970000003f01100039000006fd01100197000000400c00043d00000000011c00190000000000c1004b000000000400003900000001040040390000066f0010009c000001230000213d0000000100400190000001230000c13d0000004004d00039000000400010043f0000000007bc043600000000014b0019000000000031004b000000850000213d0000002001e00039000000000412034f000006fd01b00198000000000e170019000006590000613d000000000f04034f000000000d07001900000000f60f043c000000000d6d04360000000000ed004b000006550000c13d0000001f0db001900000061d0000613d000000000114034f0000000304d0021000000000060e043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f00000000001e04350000061d0000013d00000008010000290000000e04000029000000000041043500000010010000290000004006100039000000000162034f000000000101043b0000066f0010009c000000850000213d00000010071000290000001f01700039000000000031004b000000000400001900000670040080410000067001100197000000000851013f000000000051004b00000000010000190000067001004041000006700080009c000000000104c019000000000001004b000000850000c13d000000000172034f000000000401043b0000066f0040009c000001230000213d0000001f01400039000006fd011001970000003f01100039000006fd01100197000000400500043d0000000001150019000000000051004b000000000800003900000001080040390000066f0010009c000001230000213d0000000100800190000001230000c13d0000002008700039000000400010043f00000000074504360000000001840019000000000031004b000000850000213d000000000882034f000006fd0140019800000000031700190000069f0000613d000000000908034f000000000a070019000000009b09043c000000000aba043600000000003a004b0000069b0000c13d0000001f09400190000006ac0000613d000000000118034f0000000308900210000000000903043300000000098901cf000000000989022f000000000101043b0000010008800089000000000181022f00000000018101cf000000000191019f00000000001304350000000001470019000000000001043500000009010000290000004001100039000600000001001d00000000005104350000000f01000029000000600110008a000006820010009c000000850000213d000000600010008c000000850000413d000000400300043d000006bd0030009c000001230000213d0000006001300039000000400010043f0000002001600039000000000412034f000000000404043b000000000004004b0000000005000039000000010500c039000000000054004b000000850000c13d00000000044304360000002001100039000000000512034f000000000505043b000006be0050009c000000850000213d00000000005404350000002004100039000000000142034f000000000101043b000006be0010009c000000850000213d0000004005300039000000000015043500000009010000290000006001100039000700000001001d00000000003104350000000f01000029000000c00110008a000006820010009c000000850000213d000000600010008c000000850000413d000000400100043d000006bd0010009c000001230000213d0000006003100039000000400030043f0000002003400039000000000432034f000000000404043b000000000004004b0000000005000039000000010500c039000000000054004b000000850000c13d00000000044104360000002003300039000000000532034f000000000505043b000006be0050009c000000850000213d00000000005404350000002003300039000000000232034f000000000302043b000006be0030009c000000850000213d0000004002100039000000000032043500000009030000290000008003300039000400000003001d00000000001304350000000703000029000000000303043300000040053000390000000005050433000006be065001970000000057030434000000000007004b0000070b0000613d000000000006004b0000126e0000613d0000000005050433000006be05500197000000000056004b000007100000413d0000126e0000013d000000000006004b0000125a0000c13d0000000005050433000006be005001980000125a0000c13d0000000002020433000006be022001970000000003010433000000000003004b0000071c0000613d000000000002004b000012750000613d0000000003040433000006be03300197000000000032004b000007210000413d000012750000013d000000000002004b0000125e0000c13d0000000002040433000006be002001980000125e0000c13d000000060100002900000000010104330000000001010433000000000001004b00000a7a0000613d000000090100002900000000010104330000066f01100197001100000001001d000000000010043f0000000601000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000000101041a000000000001004b0000123f0000c13d0000000501000039000000000101041a0000066f0010009c000001230000213d00000001021000390000000503000039000000000023041b000006c20110009a0000001102000029000000000021041b000000000103041a001000000001001d000000000020043f0000000601000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b0000001002000029000000000021041b000000090100002900000000010104330000066f01100197000000000010043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000301043b000000070100002900000000010104330000000024010434001100000004001d000000000004004b0000000004000039000000010400c039001000000004001d000000400400043d000006bc0040009c000001230000213d000f00000003001d0000000002020433000006be0220019700000040011000390000000001010433000b00000001001d000000a001400039000000400010043f000e00000002001d000d00000004001d0000000001240436000c00000001001d000006c301000041000000000010044300000000010004140000066b0010009c0000066b01008041000000c001100210000006c4011001c70000800b0200003919a819a30000040f0000000100200190000013d70000613d0000000b02000029000006be02200197000000000101043b0000000d040000290000004003400039000000100500002900000000005304350000008003400039000000000023043500000060034000390000000e0500002900000000005304350000066b011001970000000c030000290000000000130435000000110000006b0000000003000019000006c50300c0410000000f09000029000000000409041a000006c604400197000000000343019f0000008002200210000000000425019f000000000353019f0000008002100210000000000323019f000000000039041b0000000103900039000000000043041b000000400300043d000006bc0030009c000001230000213d0000000404000029000000000404043300000020054000390000000005050433000000000604043300000040044000390000000004040433000000a007300039000000400070043f0000008007300039000006be0840019700000000008704350000004007300039000000000006004b0000000006000039000000010600c039000000000067043500000020063000390000000000160435000006be015001970000006005300039000000000015043500000000001304350000000003000019000006c50300c0410000000205900039000000000605041a000006c606600197000000000363019f000000000223019f000000000212019f000000000025041b0000008002400210000000000112019f0000000302900039000000000012041b0000000601000029000000000301043300000000540304340000066f0040009c000001230000213d0000000406900039000000000106041a000000010010019000000001071002700000007f0770618f0000001f0070008c00000000020000390000000102002039000000000121013f000000010010019000000df50000c13d000000200070008c001100000006001d001000000004001d000e00000003001d000008000000413d000d00000007001d000f00000005001d000000000060043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000000850000613d00000010040000290000001f024000390000000502200270000000200040008c0000000002004019000000000301043b0000000d010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b00000011060000290000000f05000029000008000000813d000000000002041b0000000102200039000000000012004b000007fc0000413d0000001f0040008c0000081f0000a13d000000000060043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000000850000613d0000001007000029000006fd02700198000000000101043b0000000e080000290000082b0000613d000000010320008a0000000503300270000000000331001900000001043000390000002003000039000000110600002900000000058300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000008170000c13d0000082d0000013d000000000004004b000008230000613d0000000001050433000008240000013d00000000010000190000000302400210000006fe0220027f000006fe02200167000000000121016f0000000102400210000000000121019f000008390000013d00000020030000390000001106000029000000000072004b000008370000813d0000000302700210000000f80220018f000006fe0220027f000006fe0220016700000000038300190000000003030433000000000223016f000000000021041b000000010170021000000001011001bf000000000016041b000000080100002900000000010104330000000002010433000000000002004b0000095c0000613d0000000003000019000c00000003001d0000000502300210000000000121001900000020011000390000000001010433001000000001001d0000000031010434000000000001004b00000a7a0000613d00000009020000290000000002020433001100000002001d0000066b0010009c0000066b0100804100000060011002100000066b0030009c000f00000003001d0000066b0200004100000000020340190000004002200210000000000121019f00000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f000006b4011001c7000080100200003919a819a30000040f0000000100200190000000850000613d00000011020000290000066f02200197000000000101043b001100000001001d000b00000002001d000000000020043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000201043b0000001101000029000000000010043f000e00000002001d0000000601200039000d00000001001d000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000000101041a000000000001004b000010370000c13d0000000e010000290000000502100039000000000102041a0000066f0010009c000001230000213d000a00000001001d0000000101100039000000000012041b000e00000002001d000000000020043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f00000001002001900000001102000029000000850000613d000000000101043b0000000a01100029000000000021041b0000000e01000029000000000101041a000e00000001001d000000000020043f0000000d01000029000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f00000001002001900000001102000029000000850000613d000000000101043b0000000e03000029000000000031041b000000000020043f0000000801000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000401043b000000100100002900000000050104330000066f0050009c000001230000213d000000000104041a000000010010019000000001031002700000007f0330618f0000001f0030008c00000000020000390000000102002039000000000121013f00000001001001900000000f0700002900000df50000c13d000000200030008c001100000004001d000e00000005001d000008ec0000413d000d00000003001d000000000040043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000000850000613d0000000e050000290000001f025000390000000502200270000000200050008c0000000002004019000000000301043b0000000d010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b0000000f070000290000001104000029000008ec0000813d000000000002041b0000000102200039000000000012004b000008e80000413d0000001f0050008c000009180000a13d000000000040043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000000850000613d0000000e08000029000006fd02800198000000000101043b000009560000613d000000010320008a00000005033002700000000003310019000000010430003900000020030000390000000f07000029000000100600002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000009030000c13d000000000082004b000009140000813d0000000302800210000000f80220018f000006fe0220027f000006fe0220016700000000036300190000000003030433000000000223016f000000000021041b000000010180021000000001011001bf0000001104000029000009240000013d000000000005004b0000091c0000613d00000000010704330000091d0000013d000000000100001900000010060000290000000302500210000006fe0220027f000006fe02200167000000000121016f0000000102500210000000000121019f000000000014041b000000400100043d00000020020000390000000003210436000000000206043300000000002304350000004003100039000000000002004b000009350000613d000000000400001900000000053400190000000006740019000000000606043300000000006504350000002004400039000000000024004b0000092e0000413d0000001f04200039000006fd044001970000000002320019000000000002043500000040024000390000066b0020009c0000066b0200804100000060022002100000066b0010009c0000066b010080410000004001100210000000000112019f00000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f000006b4011001c70000800d020000390000000203000039000006c8040000410000000b0500002919a8199e0000040f0000000100200190000000850000613d0000000c030000290000000103300039000000080100002900000000010104330000000002010433000000000023004b000008400000413d0000095c0000013d00000020030000390000000f070000290000001006000029000000000082004b0000090c0000413d000009140000013d00000004010000290000000002010433000000070100002900000000050104330000000601000029000000000301043300000009010000290000000004010433000000400100043d0000002006100039000001000700003900000000007604350000066f0440019700000000004104350000010007100039000000006403043400000000004704350000012003100039000000000004004b000009780000613d000000000700001900000000083700190000000009760019000000000909043300000000009804350000002007700039000000000047004b000009710000413d000000000643001900000000000604350000000076050434000000000006004b0000000006000039000000010600c039000000400810003900000000006804350000000006070433000006be066001970000006007100039000000000067043500000040055000390000000005050433000006be05500197000000800610003900000000005604350000000065020434000000000005004b0000000005000039000000010500c039000000a00710003900000000005704350000000005060433000006be05500197000000c006100039000000000056043500000040022000390000000002020433000006be02200197000000e00510003900000000002504350000001f02400039000006fd02200197000000000212004900000000023200190000066b0020009c0000066b0200804100000060022002100000066b0010009c0000066b010080410000004001100210000000000112019f00000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f000006b4011001c70000800d020000390000000103000039000006c90400004119a8199e0000040f0000000100200190000000850000613d00000005020000290000000102200039000500000002001d000000010020006c000005be0000413d00000a480000013d00000005054002100000003f065000390000067106600197000000400700043d0000000006670019000f00000007001d000000000076004b000000000700003900000001070040390000066f0060009c000001230000213d0000000100700190000001230000c13d0000010007300039000000400060043f0000000f030000290000000003430436000e00000003001d00000120022000390000000003250019000000000073004b000000850000213d000000000004004b000009d40000613d0000000e0400002900000000250204340000066e0050009c000000850000213d0000000004540436000000000032004b000009ce0000413d000001600500043d0000066e0050009c000000850000213d000001800200043d001000000002001d0000066e0020009c000000850000213d0000000003000411000000000003004b00000a4c0000c13d000000400100043d0000068a0200004100000a7c0000013d000006ed01000041000000800010043f000006b701000041000019aa00010430000006eb01000041000000800010043f000006b701000041000019aa00010430000000a005000039000006db0300004100000000040000190000000006050019000000000503041a000000000556043600000001033000390000000104400039000000000014004b000009ec0000413d000000410160008a000006fd04100197000006d30040009c000001230000213d0000008001400039000000400010043f0000000000210435000000a002400039000000800300043d0000000000320435000000c002400039000000000003004b00000a080000613d000000a004000039000000000500001900000000460404340000066e0660019700000000026204360000000105500039000000000035004b00000a020000413d00000000021200490000066b0020009c0000066b0200804100000060022002100000066b0010009c0000066b010080410000004001100210000000000112019f000019a90001042e000000a006000039000006d20400004100000000050000190000000007060019000000000604041a000000000667043600000001044000390000000105500039000000000025004b00000a140000413d000000410270008a000006fd04200197000006d30040009c000001230000213d0000008002400039000000800500043d000000400020043f0000066f0050009c000000280000a13d000001230000013d0000000402000039000000000302041a0000067204300197000000000414019f000000000042041b0000066e02300197000000800020043f000000a00010043f00000000010004140000066b0010009c0000066b01008041000000c001100210000006d5011001c70000800d020000390000000103000039000006d60400004119a8199e0000040f0000000100200190000000850000613d00000a480000013d000000000100041a0000067201100197000000000161019f000000000010041b00000000010004140000066b0010009c0000066b01008041000000c001100210000006b4011001c70000800d020000390000000303000039000006b50400004119a8199e0000040f0000000100200190000000850000613d0000000001000019000019a90001042e000000100100002900000a6c0000013d0000000106000039000000000406041a0000067204400197000000000334019f000000000036041b000000000005004b00000a7a0000613d0000066e0210019800000a7a0000613d000000100000006b00000a7a0000613d000b00000006001d000000800020043f000000c00050043f0000067301000041000000400300043d000d00000003001d00000000001304350000000001000414000000040020008c000c00000002001d00000a820000c13d00000000010004150000001f0110008a00000005011002100000000103000031000000200030008c00000020040000390000000004034019001f00000000003d00000ab00000013d0000000f01000029000000000112034f000000000101043b0000066e0010009c000000850000213d000000400200043d000006de030000410000000000320435000000040320003900000000001304350000066b0020009c0000066b020080410000004001200210000006bb011001c7000019aa00010430000000400100043d000006ca0200004100000000002104350000066b0010009c0000066b01008041000000400110021000000674011001c7000019aa000104300000000d030000290000066b0030009c0000066b0300804100000040033002100000066b0010009c0000066b01008041000000c001100210000000000131019f00000674011001c719a819a30000040f00000060031002700000066b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000d0570002900000a9b0000613d000000000801034f0000000d09000029000000008a08043c0000000009a90436000000000059004b00000a970000c13d000000000006004b00000aa80000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f000300000001035500000000010004150000001e0110008a0000000501100210001e00000000003d000000010020019000000ac70000613d0000001f02400039000000600420018f0000000d02400029000000000042004b000000000400003900000001040040390000066f0020009c000001230000213d0000000100400190000001230000c13d000000400020043f000000200030008c000000850000413d0000000d030000290000000003030433000000ff0030008c000000850000213d0000000501100270000000000103001f0000001101000029000000ff0110018f000000000031004b00000dfd0000c13d0000001101000029000000a00010043f0000000402000039000000000102041a000006720110019700000010011001af000000000012041b0000000f010000290000000001010433000000000001004b0000000001000039000000010100c039000000e00010043f00000e0c0000613d000000400100043d000006770010009c000001230000213d0000002002100039000000400020043f0000000000010435000000e00100043d000000000001004b00000e080000c13d000000400100043d000006f00200004100000a7c0000013d00000010030000290000066b0030009c0000066b0300804100000040033002100000066b0010009c0000066b01008041000000c001100210000000000131019f000006bb011001c719a819a30000040f00000060031002700000066b03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000100570002900000afa0000613d000000000801034f0000001009000029000000008a08043c0000000009a90436000000000059004b00000af60000c13d000000000006004b00000b070000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000c470000613d0000001f01400039000000600210018f0000001001200029000000000021004b000000000200003900000001020040390000066f0010009c000001230000213d0000000100200190000001230000c13d000000400010043f000000200030008c000000850000413d00000010020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b000000850000c13d000000000002004b00000dfb0000c13d0000000f0100002900000020011000390000000201100367000000000101043b001000000001001d0000066e0010009c000000850000213d000006cb010000410000000000100443000000000100041200000004001004430000006001000039000000240010044300000000010004140000066b0010009c0000066b01008041000000c001100210000006dd011001c7000080050200003919a819a30000040f0000000100200190000013d70000613d000000000101043b000000000001004b0000104e0000c13d0000000f010000290000000201100367000000000101043b001000000001001d0000066f0010009c000000850000213d0000001001000029000000000010043f0000000601000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000400200043d000e00000002001d0000000402200039000000000101043b000000000101041a000000000001004b0000111f0000c13d000006e7010000410000000e030000290000000000130435000000100100002900000c410000013d00000000030000310000000f01000029000000100200002919a814dd0000040f0000000002010019000000110100002919a8162c0000040f0000000001000019000019a90001042e0000000002000019001100000002001d0000000502200210001000000002001d0000000e012000290000000001010433000000000010043f0000000801000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000000201041a000000010320019000000001052002700000007f0550618f0000001f0050008c00000000040000390000000104002039000000000043004b00000df50000c13d000000400700043d0000000004570436000000000003004b00000ba00000613d000900000004001d000a00000005001d000b00000007001d000000000010043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000000850000613d0000000a08000029000000000008004b000000200500008a00000ba80000613d000000000201043b00000000010000190000000d060000290000000b0700002900000009090000290000000003190019000000000402041a000000000043043500000001022000390000002001100039000000000081004b00000b980000413d00000bab0000013d000006ff012001970000000000140435000000000005004b00000020010000390000000001006039000000200500008a0000000d0600002900000bab0000013d00000000010000190000000d060000290000000b070000290000003f01100039000000000251016f0000000001720019000000000021004b000000000200003900000001020040390000066f0010009c000001230000213d0000000100200190000001230000c13d000000400010043f00000000010604330000001102000029000000000021004b0000102b0000a13d00000010030000290000000c0130002900000000007104350000000001060433000000000021004b0000102b0000a13d00000001022000390000000f010000290000000001010433000000000012004b00000b630000413d000003ee0000013d00000000040000190000000d0c00002900000bd10000013d0000001f07600039000006fd077001970000000006650019000000000006043500000000057500190000000104400039000000000024004b000003f90000813d0000000006150049000000400660008a0000000003630436000000200cc0003900000000060c043300000000760604340000000005650436000000000006004b00000bc90000613d00000000080000190000000009580019000000000a870019000000000a0a04330000000000a904350000002008800039000000000068004b00000bdb0000413d00000bc90000013d0000000f030000290000066b0030009c0000066b0300804100000040033002100000066b0010009c0000066b01008041000000c001100210000000000131019f000006bb011001c719a819a30000040f00000060031002700000066b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000f0570002900000bfc0000613d000000000801034f0000000f09000029000000008a08043c0000000009a90436000000000059004b00000bf80000c13d000000000006004b00000c090000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000de40000613d0000001f01400039000000600210018f0000000f01200029000000000021004b000000000200003900000001020040390000066f0010009c000001230000213d0000000100200190000001230000c13d000000400010043f000000200030008c000000850000413d0000000f020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b000000850000c13d000000000002004b00000dfb0000c13d0000000e010000290000000201100367000000000101043b000f00000001001d0000066f0010009c000000850000213d0000000f01000029000000000010043f0000000601000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000400200043d000d00000002001d0000000402200039000000000101043b000000000101041a000000000001004b000010b80000c13d000006e7010000410000000d0300002900000000001304350000000f0100002900000000001204350000066b0030009c0000066b030080410000004001300210000006bb011001c7000019aa000104300000001f0530018f0000066d06300198000000400200043d000000000462001900000ec00000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000c4e0000c13d00000ec00000013d0000000002000019000700000002001d000000050120021000000005011000290000000201100367000000000101043b000b00000001001d0000066f0010009c000000850000213d0000000b01000029000000000010043f0000000601000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000000301041a000000000003004b000010d40000613d0000000501000039000000000201041a000000000002004b000013e40000613d000000010130008a000000000023004b00000c8f0000613d000000000012004b0000102b0000a13d000006b80130009a000006b80220009a000000000202041a000000000021041b000000000020043f0000000601000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c70000801002000039001100000003001d19a819a30000040f0000000100200190000000850000613d000000000101043b0000001102000029000000000021041b0000000501000039000000000301041a000000000003004b000010310000613d000000010130008a000006b80230009a000000000002041b0000000502000039000000000012041b0000000b01000029000000000010043f0000000601000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000000001041b0000000b01000029000000000010043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b0000000501100039000000000301041a000000400200043d000f00000002001d001100000003001d0000000002320436000a00000002001d000000000010043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000000850000613d0000001105000029000000000005004b0000000a0200002900000cce0000613d000000000101043b0000000a020000290000000003000019000000000401041a000000000242043600000001011000390000000103300039000000000053004b00000cc80000413d0000000f0120006a0000001f01100039000006fd021001970000000f01200029000000000021004b000000000200003900000001020040390000066f0010009c000001230000213d0000000100200190000001230000c13d000000400010043f0000000f010000290000000001010433000000000001004b00000d730000613d000000000200001900000ce80000013d000000000101043b000000000001041b000000110200002900000001022000390000000f010000290000000001010433000000000012004b00000d730000813d001100000002001d0000000b01000029000000000010043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000301043b0000000f0100002900000000010104330000001102000029000000000021004b0000102b0000a13d00000005012002100000000a011000290000000001010433000c00000001001d000000000010043f000d00000003001d0000000601300039000e00000001001d000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000000101041a000000000001004b00000ce20000613d0000000d020000290000000503200039000000000203041a000000000002004b000013e40000613d000000000021004b001000000001001d000d00000003001d00000d540000613d000900000002001d000000000030043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000000850000613d00000010020000290008000100200092000000000101043b0000000d04000029000000000204041a000000080020006c0000102b0000a13d0000000902000029000000010220008a0000000001120019000000000101041a000900000001001d000000000040043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b00000008011000290000000902000029000000000021041b000000000020043f0000000e01000029000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b0000001002000029000000000021041b0000000d03000029000000000103041a001000000001001d000000000001004b000010310000613d000000000030043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000000850000613d0000001002000029000000010220008a000000000101043b0000000001210019000000000001041b0000000d01000029000000000021041b0000000c01000029000000000010043f0000000e01000029000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f000000010020019000000ce00000c13d000000850000013d0000000b01000029000000000010043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000301043b000000000003041b0000000101300039000000000001041b0000000201300039000000000001041b0000000301300039000000000001041b0000000404300039000000000104041a000000010010019000000001051002700000007f0550618f0000001f0050008c00000000020000390000000102002039000000000121013f000000010010019000000df50000c13d000000000005004b00000db50000613d0000001f0050008c00000db40000a13d000f00000005001d001100000003001d001000000004001d000000000040043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b0000000f020000290000001f02200039000000050220027000000000022100190000000103100039000000000023004b00000db00000813d000000000003041b0000000103300039000000000023004b00000dac0000413d0000001002000029000000000002041b00000000040100190000001103000029000000000004041b0000000501300039000000000201041a000000000001041b000000000002004b00000dcd0000613d001100000002001d000000000010043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b0000001102100029000000000021004b00000dcd0000813d000000000001041b0000000101100039000000000021004b00000dc90000413d000000400100043d0000000b0200002900000000002104350000066b0010009c0000066b01008041000000400110021000000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f0000067a011001c70000800d020000390000000103000039000006b90400004119a8199e0000040f0000000100200190000000850000613d00000007020000290000000102200039000000060020006c00000c540000413d000005bb0000013d0000001f0530018f0000066d06300198000000400200043d000000000462001900000ec00000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000deb0000c13d00000ec00000013d000006cd02000041000001400020043f000001440010043f000006ce01000041000019aa00010430000006dc01000041000000000010043f0000002201000039000000040010043f000006bb01000041000019aa00010430000006e10200004100000a7c0000013d0000002404200039000000000034043500000675030000410000000000320435000000040320003900000000001304350000066b0020009c0000066b02008041000000400120021000000676011001c7000019aa000104300000000f010000290000000001010433000000000001004b00000ef70000c13d000000400300043d0000067c010000410000000000130435000000240130003900000000020004100000000000210435001100000003001d0000000401300039000000000021043500000000010004140000000c02000029000000040020008c00000e1e0000c13d0000000103000031000000200030008c0000002004000039000000000403401900000e490000013d00000011020000290000066b0020009c0000066b0200804100000040022002100000066b0010009c0000066b01008041000000c001100210000000000121019f00000676011001c70000000c0200002919a819a30000040f00000060031002700000066b03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000110570002900000e380000613d000000000801034f0000001109000029000000008a08043c0000000009a90436000000000059004b00000e340000c13d000000000006004b00000e450000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000eb50000613d0000001f01400039000000600210018f0000001101200029000000000021004b000000000200003900000001020040390000066f0010009c000001230000213d0000000100200190000001230000c13d000000400010043f000000200040008c000000850000413d00000011020000290000000002020433000000000002004b000013e40000c13d0000004402100039000000010400008a000000000042043500000020021000390000067d040000410000000000420435000000240410003900000000050004100000000000540435000000440400003900000000004104350000067e0010009c000001230000213d000000c004100039000000400040043f000000a0051000390000067f04000041001000000005001d000000000045043500000080051000390000002004000039000f00000005001d0000000000450435000000000401043300000000010004140000000c05000029000000040050008c00000e880000613d0000066b0020009c0000066b0200804100000040022002100000066b0040009c0000066b040080410000006003400210000000000223019f0000066b0010009c0000066b01008041000000c001100210000000000112019f0000000c0200002919a8199e0000040f000b000100200193000300000001035500000060011002700001066b0010019d0000066b03100197000000000003004b000010650000c13d001100600000003d000e00800000003d000000110100002900000000010104330000000b0000006b000010990000c13d000000000001004b000010cb0000c13d000000400100043d000006850200004100000000002104350000000402100039000000200300003900000000003204350000000f020000290000000002020433000000240310003900000000002304350000004403100039000000000002004b000000100700002900000ea80000613d000000000400001900000000053400190000000006740019000000000606043300000000006504350000002004400039000000000024004b00000ea10000413d0000001f04200039000006fd044001970000000002320019000000000002043500000044024000390000066b0020009c0000066b0200804100000060022002100000066b0010009c0000066b010080410000004001100210000000000112019f000019aa000104300000001f0530018f0000066d06300198000000400200043d000000000462001900000ec00000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000ebc0000c13d000000000005004b00000ecd0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f000000000014043500000060013002100000066b0020009c0000066b020080410000004002200210000000000112019f000019aa00010430000000000001004b00000f430000613d000000a00200043d000006be02200197000000000021004b00000f430000813d0000001101000029000000000010043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000800200003919a818580000040f000001200100043d000006be01100197000000e00200043d000000000002004b00000f840000c13d000000000001004b00000ef30000c13d000001000100043d000006be0010019800000f8a0000613d000000400200043d001100000002001d000006c001000041000010950000013d000000000200001900000eff0000013d000000110200002900000001022000390000000f010000290000000001010433000000000012004b00000e0c0000813d001100000002001d00000005012002100000000e0110002900000000010104330000066e0310019800000ef90000613d000000000030043f0000000301000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c70000801002000039001000000003001d19a819a30000040f00000010040000290000000100200190000000850000613d000000000101043b000000000101041a000000000001004b00000ef90000c13d0000000203000039000000000103041a0000066f0010009c000001230000213d0000000102100039000000000023041b000006790110009a000000000041041b000000000103041a000d00000001001d000000000040043f0000000301000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f00000010030000290000000100200190000000850000613d000000000101043b0000000d02000029000000000021041b000000400100043d00000000003104350000066b0010009c0000066b01008041000000400110021000000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f0000067a011001c70000800d0200003900000001030000390000067b0400004119a8199e0000040f000000010020019000000ef90000c13d000000850000013d000000400200043d001100000002001d000006bf0100004100000000001204350000000402200039000000800100003919a816150000040f00000011010000290000066b0010009c0000066b01008041000000400110021000000689011001c7000019aa000104300000002001700039000000100200002900000000002104350000002001000039000000000017043500000040017000390000000a021000290000000f0300002900000002033003670000000a0000006b00000f610000613d000000000403034f0000000005010019000000004604043c0000000005650436000000000025004b00000f5d0000c13d0000000e0000006b00000f6f0000613d0000000a033003600000000e040000290000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000320435000000100110002900000000000104350000066b0070009c0000066b0700804100000040017002100000000b02000029000006d70020009c000006d7020080410000006002200210000000000112019f00000000020004140000066b0020009c0000066b02008041000000c002200210000000000121019f000006d80110009a0000800d020000390000000203000039000006d904000041000000110500002900000a350000013d000000000001004b000010920000613d000001000200043d000006be02200197000000000021004b000010920000813d0000001101000029000000000010043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b0000000201100039000000e00200003919a818580000040f000000400100043d00000011020000290000000002210436000000800300043d000000000003004b0000000003000039000000010300c0390000000000320435000000a00200043d000006be0220019700000040031000390000000000230435000000c00200043d000006be0220019700000060031000390000000000230435000000e00200043d000000000002004b0000000002000039000000010200c03900000080031000390000000000230435000001000200043d000006be02200197000000a0031000390000000000230435000001200200043d000006be02200197000000c00310003900000000002304350000066b0010009c0000066b01008041000000400110021000000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f000006cf011001c70000800d020000390000000103000039000006d00400004100000a350000013d000000000200001900000fcd0000013d00000010020000290000000102200039000000800100043d000000000012004b0000047f0000813d001000000002001d0000000501200210000000a00110003900000000010104330000066e01100197001100000001001d000000000010043f0000000301000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000000301041a000000000003004b00000fc80000613d0000000201000039000000000201041a000000000002004b000013e40000613d000000010130008a000000000023004b000010050000613d000000000012004b0000102b0000a13d000006ee0130009a000006ee0220009a000000000202041a000000000021041b000000000020043f0000000301000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c70000801002000039000d00000003001d19a819a30000040f0000000d030000290000000100200190000000850000613d000000000101043b000000000031041b0000000201000039000000000301041a000000000003004b000010310000613d000000010130008a000006ee0230009a000000000002041b0000000202000039000000000012041b0000001101000029000000000010043f0000000301000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000000001041b000000400100043d000000110200002900000000002104350000066b0010009c0000066b01008041000000400110021000000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f0000067a011001c70000800d020000390000000103000039000006ef0400004119a8199e0000040f000000010020019000000fc80000c13d000000850000013d000006dc01000041000000000010043f0000003201000039000000040010043f000006bb01000041000019aa00010430000006dc01000041000000000010043f0000003101000039000000040010043f000006bb01000041000019aa00010430000000400300043d001100000003001d000000240130003900000040020000390000000000210435000006c701000041000000000013043500000004013000390000000b0200002900000000002104350000004402300039000000100100002919a8144a0000040f000000110200002900000000012100490000066b0010009c0000066b010080410000066b0020009c0000066b0200804100000060011002100000004002200210000000000121019f000019aa000104300000001001000029000000000010043f0000000301000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b000000000101041a000000000001004b00000b3a0000c13d000000400100043d000006e2020000410000000000210435000000040210003900000010030000290000038d0000013d0000066f0030009c000001230000213d0000001f02300039000006fd022001970000003f02200039000006fd02200197000000400400043d0000000002240019001100000004001d000000000042004b000000000400003900000001040040390000066f0020009c000001230000213d0000000100400190000001230000c13d000000400020043f00000011020000290000000004320436000006fd023001980000001f0330018f000e00000004001d00000000012400190000000304000367000010840000613d000000000504034f0000000e06000029000000005705043c0000000006760436000000000016004b000010800000c13d000000000003004b00000e8c0000613d000000000224034f0000000303300210000000000401043300000000043401cf000000000434022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000242019f000000000021043500000e8c0000013d000000400200043d001100000002001d000006bf0100004100000000001204350000000402200039000000e00100003900000f490000013d000000000001004b0000121e0000c13d000006800100004100000000001004430000000c01000029000000040010044300000000010004140000066b0010009c0000066b01008041000000c00110021000000681011001c7000080020200003919a819a30000040f0000000100200190000013d70000613d000000000101043b000000000001004b0000121a0000c13d000000400100043d00000044021000390000068803000041000000000032043500000024021000390000001d0300003900000000003204350000068502000041000000000021043500000004021000390000002003000039000000000032043500000f4b0000013d0000000401000039000000000301041a000006f1010000410000000d0400002900000000001404350000000f01000029000000000012043500000024014000390000000002000411000000000021043500000000010004140000066e02300197000000040020008c000010da0000c13d0000000103000031000000200030008c00000020040000390000000004034019000011040000013d0000000e020000290000066b0020009c0000066b0200804100000040022002100000066b0010009c0000066b010080410000006001100210000000000121019f000019aa00010430000000400100043d000006ba02000041000000000021043500000004021000390000000b030000290000038d0000013d0000000d030000290000066b0030009c0000066b0300804100000040033002100000066b0010009c0000066b01008041000000c001100210000000000131019f00000676011001c719a819a30000040f00000060031002700000066b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000d05700029000010f30000613d000000000801034f0000000d09000029000000008a08043c0000000009a90436000000000059004b000010ef0000c13d000000000006004b000011000000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f000300000001035500000001002001900000112f0000613d0000001f01400039000000600210018f0000000d01200029000000000021004b000000000200003900000001020040390000066f0010009c000001230000213d0000000100200190000001230000c13d000000400010043f000000200030008c000000850000413d0000000d020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b000000850000c13d000000000002004b0000127b0000c13d000006e4020000410000000000210435000000040210003900000000030004110000038d0000013d0000000401000039000000000301041a000006e3010000410000000e0400002900000000001404350000001001000029000000000012043500000000010004140000066e02300197000000040020008c0000113b0000c13d0000000103000031000000200030008c00000020040000390000000004034019000011650000013d0000001f0530018f0000066d06300198000000400200043d000000000462001900000ec00000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000011360000c13d00000ec00000013d0000000e030000290000066b0030009c0000066b0300804100000040033002100000066b0010009c0000066b01008041000000c001100210000000000131019f000006bb011001c719a819a30000040f00000060031002700000066b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000e05700029000011540000613d000000000801034f0000000e09000029000000008a08043c0000000009a90436000000000059004b000011500000c13d000000000006004b000011610000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000012620000613d0000001f01400039000000600210018f0000000e01200029000000000021004b000000000200003900000001020040390000066f0010009c000001230000213d0000000100200190000001230000c13d000000400010043f000000200030008c000000850000413d0000000e020000290000000002020433000006c50020009c000000850000813d0000000003000411000000000023004b000012bb0000c13d00000002010003670000000f02100360000000000202043b0000066f0020009c000000850000213d0000000f030000290000004003300039000000000131034f000000000101043b001000000001001d000000000020043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b0000001002000029000000110300002919a818c50000040f000006800100004100000000001004430000001101000029000000040010044300000000010004140000066b0010009c0000066b01008041000000c00110021000000681011001c7000080020200003919a819a30000040f0000000100200190000013d70000613d000000000101043b000000000001004b000000850000613d000000400300043d000000240130003900000010020000290000000000210435000006e501000041000000000013043500000000010004100000066e01100197000e00000003001d0000000402300039000000000012043500000000010004140000001102000029000000040020008c000011c20000613d0000000e020000290000066b0020009c0000066b0200804100000040022002100000066b0010009c0000066b01008041000000c001100210000000000121019f00000676011001c7000000110200002919a8199e0000040f00000060031002700001066b0030019d00030000000103550000000100200190000013460000613d0000000e010000290000066f0010009c000001230000213d0000000e02000029000000400020043f000000100100002900000000001204350000066b0020009c0000066b02008041000000400120021000000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f0000067a011001c70000800d020000390000000203000039000006e604000041000000000500041119a8199e0000040f0000000100200190000000850000613d0000000f010000290000000201100367000000000101043b0000066f0010009c000000850000213d19a815ba0000040f000000400200043d001100000002001d0000000002000412001700000002001d001600200000003d001000000001001d000080050100003900000044030000390000000004000415000000170440008a0000000504400210000006cb0200004119a819800000040f000000ff0310018f0000001101000029000000200210003900000000003204350000002002000039000000000021043519a8149d0000040f000000400100043d000e00000001001d19a8149d0000040f0000000e020000290000002001200039000f00000001001d00000011030000290000000000310435000000100100002900000000001204350000000003020019000000400400043d001100000004001d00000020010000390000000002140436000000000103043300000040030000390000000000320435000000600240003919a8144a0000040f000000000201001900000011040000290000000001410049000000200310008a0000000f0100002900000000010104330000004004400039000000000034043519a8144a0000040f000000110200002900000000012100490000066b0020009c0000066b0200804100000040022002100000066b0010009c0000066b010080410000006001100210000000000121019f000019a90001042e00000011010000290000000001010433000000000001004b0000122b0000613d000006820010009c000000850000213d000000200010008c000000850000413d0000000e010000290000000001010433000000000001004b0000000002000039000000010200c039000000000021004b000000850000c13d000000000001004b000012460000613d000000800100043d00000140000004430000016000100443000000a00100043d00000020030000390000018000300443000001a000100443000000c00100043d0000004002000039000001c000200443000001e0001004430000006001000039000000e00200043d000002000010044300000220002004430000010000300443000000040100003900000120001004430000068701000041000019a90001042e00000009010000290000000001010433000000400200043d000006c10300004100000000003204350000066f0110019700000a730000013d000000400100043d00000064021000390000068303000041000000000032043500000044021000390000068403000041000000000032043500000024021000390000002a030000390000000000320435000006850200004100000000002104350000000402100039000000200300003900000000003204350000066b0010009c0000066b01008041000000400110021000000686011001c7000019aa00010430000000400200043d001100000002001d000006c001000041000012710000013d000000400300043d001100000003001d000006c002000041000012780000013d0000001f0530018f0000066d06300198000000400200043d000000000462001900000ec00000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000012690000c13d00000ec00000013d000000400200043d001100000002001d000006bf0100004100000000001204350000000402200039000000000103001900000f490000013d000000400300043d001100000003001d000006bf020000410000000000230435000000040230003900000f490000013d00000002020003670000000e01200360000000000101043b0000066f0010009c000000850000213d0000000e030000290000008003300039000000000332034f000000000303043b0000000004000031000000110540006a000000230550008a00000670065001970000067007300197000000000867013f000000000067004b00000000060000190000067006004041000000000053004b00000000050000190000067005008041000006700080009c000000000605c019000000000006004b000000850000c13d0000001105000029000f00040050003d0000000f05300029000000000252034f000000000302043b0000066f0030009c000000850000213d0000000004340049000000200250003900000670054001970000067006200197000000000756013f000000000056004b00000000050000190000067005004041000000000042004b00000000040000190000067004002041000006700070009c000000000504c019000000000005004b000000850000c13d19a815150000040f000000000001004b000012bf0000c13d0000001101000029000000a4021000390000000f0100002919a814b30000040f000006f603000041000000400500043d001100000005001d0000000000350435000000040350003900000020040000390000000000430435000000240350003919a815860000040f000010440000013d000006e402000041000000000021043500000004021000390000038d0000013d00000002010003670000000e02100360000000000202043b0000066f0020009c000000850000213d0000000e03000029000d00400030003d0000000d01100360000000000101043b000e00000001001d000000000020043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000000850000613d000000000101043b00000002011000390000000e02000029000000100300002919a818c50000040f0000000d01000029000d00600010003d00000002030003670000000d01300360000000000101043b0000000004000031000000110240006a000000230220008a00000670052001970000067006100197000000000756013f000000000056004b00000000050000190000067005004041000000000021004b00000000020000190000067002008041000006700070009c000000000502c019000000000005004b000000850000c13d0000000f01100029000000000213034f000000000202043b0000066f0020009c000000850000213d0000000005240049000000200610003900000670015001970000067007600197000000000817013f000000000017004b00000000010000190000067001004041000000000056004b00000000050000190000067005002041000006700080009c000000000105c019000000000001004b000000850000c13d0000001f01200039000006fd011001970000003f01100039000006fd05100197000000400100043d0000000005510019000000000015004b000000000800003900000001080040390000066f0050009c000001230000213d0000000100800190000001230000c13d000000400050043f00000000052104360000000008620019000000000048004b000000850000213d000000000463034f000006fd062001980000001f0720018f0000000003650019000013200000613d000000000804034f0000000009050019000000008a08043c0000000009a90436000000000039004b0000131c0000c13d000000000007004b0000132d0000613d000000000464034f0000000306700210000000000703043300000000076701cf000000000767022f000000000404043b0000010006600089000000000464022f00000000046401cf000000000474019f0000000000430435000000000225001900000000000204350000000002010433000000200020008c000013530000613d000000000002004b000013570000c13d000006cb010000410000000000100443000000000100041200000004001004430000002001000039000000240010044300000000010004140000066b0010009c0000066b01008041000000c001100210000006dd011001c7000080050200003919a819a30000040f0000000100200190000013d70000613d000000000101043b001100000001001d000013600000013d0000066b033001970000001f0530018f0000066d06300198000000400200043d000000000462001900000ec00000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000134e0000c13d00000ec00000013d0000000002050433001100000002001d000000ff0020008c000013600000a13d000000400400043d001100000004001d000006f50200004100000000002404350000000402400039000000200300003900000000003204350000002402400039000010430000013d000006cb010000410000000000100443000000000100041200000004001004430000002001000039000000240010044300000000010004140000066b0010009c0000066b01008041000000c001100210000006dd011001c7000080050200003919a819a30000040f0000000100200190000013d70000613d0000001102000029000000ff0220018f000000000301043b000000ff0430018f000000000142004b000013d80000c13d0000000e01000029001100000001001d0000000d01000029000000800110008a000e00000001001d0000000201100367000000000101043b000f00000001001d0000066e0010009c000000850000213d000006800100004100000000001004430000001001000029000000040010044300000000010004140000066b0010009c0000066b01008041000000c00110021000000681011001c7000080020200003919a819a30000040f0000000100200190000013d70000613d000000000101043b000000000001004b000000850000613d000000400300043d000000240130003900000011020000290000000000210435000006f3010000410000000000130435000d00000003001d00000004013000390000000f02000029000000000021043500000000010004140000001002000029000000040020008c000013ad0000613d0000000d020000290000066b0020009c0000066b0200804100000040022002100000066b0010009c0000066b01008041000000c001100210000000000121019f00000676011001c7000000100200002919a8199e0000040f00000060031002700001066b0030019d00030000000103550000000100200190000013f00000613d0000000d010000290000066f0010009c000001230000213d0000000d01000029000000400010043f0000000e010000290000000201100367000000000601043b0000066e0060009c000000850000213d00000011010000290000000d0200002900000000001204350000066b0020009c0000066b02008041000000400120021000000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f0000067a011001c70000800d020000390000000303000039000006f404000041000000000500041119a8199e0000040f0000000100200190000000850000613d000000400100043d001000000001001d19a814920000040f000000110200002900000010010000290000000000210435000000400100043d00000000002104350000066b0010009c0000066b010080410000004001100210000006e8011001c7000019a90001042e000000000001042f000013e10000a13d000000ff0010008c000013e40000213d0000004d0010008c0000141f0000213d000000000001004b000013fd0000c13d0000000102000039000014080000013d0000000001240049000000ff0010008c000013ea0000a13d000006dc01000041000000000010043f0000001101000039000000040010043f000006bb01000041000019aa000104300000004e0010008c0000141f0000813d000000000001004b0000140a0000c13d00000001020000390000141c0000013d0000066b033001970000001f0530018f0000066d06300198000000400200043d000000000462001900000ec00000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000013f80000c13d00000ec00000013d0000000a030000390000000102000039000000010010019000000000043300a9000000010300603900000000022300a900000001011002720000000003040019000013ff0000c13d000000000002004b000014160000613d0000000e012000f9000013760000013d0000000a0500003900000001020000390000000004010019000000010040019000000000065500a9000000010500603900000000022500a9000000010440027200000000050600190000140d0000c13d000000000002004b0000141c0000c13d000006dc01000041000000000010043f0000001201000039000000040010043f000006bb01000041000019aa00010430000006fe022001290000000e0020006c000014310000813d000000400200043d001000000002001d000006f2010000410000000000120435000000040120003900000011020000290000000e0400002919a816230000040f000000100200002900000000012100490000066b0010009c0000066b0100804100000060011002100000066b0020009c0000066b020080410000004002200210000000000121019f000019aa00010430000000ff0210018f0000004d0020008c000013e40000213d000000000002004b000014380000c13d0000000101000039000014410000013d0000000a030000390000000101000039000000010020019000000000043300a9000000010300603900000000011300a9000000010220027200000000030400190000143a0000c13d0000000e0000006b001100000000001d000013770000613d0000000e031000b9001100000003001d0000000e023000fa000000000012004b000013770000613d000013e40000013d00000000430104340000000001320436000000000003004b000014560000613d000000000200001900000000052100190000000006240019000000000606043300000000006504350000002002200039000000000032004b0000144f0000413d000000000231001900000000000204350000001f02300039000006fd022001970000000001210019000000000001042d000006820010009c000014770000213d000000430010008c000014770000a13d00000002020003670000000403200370000000000403043b0000066f0040009c000014770000213d0000002403200370000000000503043b0000066f0050009c000014770000213d0000002303500039000000000013004b000014770000813d0000000403500039000000000232034f000000000302043b0000066f0030009c000014770000213d00000024025000390000000005320019000000000015004b000014770000213d0000000001040019000000000001042d0000000001000019000019aa000104300000000043020434000006be03300197000000000331043600000000040404330000066b04400197000000000043043500000040032000390000000003030433000000000003004b0000000003000039000000010300c0390000004004100039000000000034043500000060032000390000000003030433000006be033001970000006004100039000000000034043500000080022000390000000002020433000006be0220019700000080031000390000000000230435000000a001100039000000000001042d000007000010009c000014970000813d0000002001100039000000400010043f000000000001042d000006dc01000041000000000010043f0000004101000039000000040010043f000006bb01000041000019aa00010430000007010010009c000014a20000813d0000004001100039000000400010043f000000000001042d000006dc01000041000000000010043f0000004101000039000000040010043f000006bb01000041000019aa00010430000007020010009c000014ad0000813d000000a001100039000000400010043f000000000001042d000006dc01000041000000000010043f0000004101000039000000040010043f000006bb01000041000019aa000104300000000204000367000000000224034f000000000202043b000000000300003100000000051300490000001f0550008a00000670065001970000067007200197000000000867013f000000000067004b00000000060000190000067006002041000000000052004b00000000050000190000067005004041000006700080009c000000000605c019000000000006004b000014db0000613d0000000001120019000000000214034f000000000202043b0000066f0020009c000014db0000213d0000000003230049000000200110003900000670043001970000067005100197000000000645013f000000000045004b00000000040000190000067004004041000000000031004b00000000030000190000067003002041000006700060009c000000000403c019000000000004004b000014db0000c13d000000000001042d0000000001000019000019aa00010430000007030020009c0000150d0000813d00000000040100190000001f01200039000006fd011001970000003f01100039000006fd05100197000000400100043d0000000005510019000000000015004b000000000700003900000001070040390000066f0050009c0000150d0000213d00000001007001900000150d0000c13d000000400050043f00000000052104360000000007420019000000000037004b000015130000213d000006fd062001980000001f0720018f00000002044003670000000003650019000014fd0000613d000000000804034f0000000009050019000000008a08043c0000000009a90436000000000039004b000014f90000c13d000000000007004b0000150a0000613d000000000464034f0000000306700210000000000703043300000000076701cf000000000767022f000000000404043b0000010006600089000000000464022f00000000046401cf000000000474019f000000000043043500000000022500190000000000020435000000000001042d000006dc01000041000000000010043f0000004101000039000000040010043f000006bb01000041000019aa000104300000000001000019000019aa000104300003000000000002000300000003001d000200000002001d0000066f01100197000000000010043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000207000029000000030a00002900000001002001900000157e0000613d0000000003000031000000000601043b0000070300a0009c000015800000813d0000001f01a00039000006fd011001970000003f01100039000006fd02100197000000400100043d0000000002210019000000000012004b000000000500003900000001050040390000066f0020009c000015800000213d0000000100500190000015800000c13d000100000006001d000000400020043f0000000002a1043600000000057a0019000000000035004b0000157e0000213d000006fd04a001980000001f05a0018f00000002067003670000000003420019000015490000613d000000000706034f0000000008020019000000007907043c0000000008980436000000000038004b000015450000c13d000000000005004b000015560000613d000000000446034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004304350000000003a2001900000000000304350000066b0020009c0000066b02008041000000400220021000000000010104330000066b0010009c0000066b010080410000006001100210000000000121019f00000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f000006b4011001c7000080100200003919a819a30000040f00000001002001900000157e0000613d000000000101043b000000000010043f00000001010000290000000601100039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f00000001002001900000157e0000613d000000000101043b000000000101041a000000000001004b0000000001000039000000010100c039000000000001042d0000000001000019000019aa00010430000006dc01000041000000000010043f0000004101000039000000040010043f000006bb01000041000019aa000104300000000003230436000006fd062001980000001f0720018f00000000056300190000000201100367000015920000613d000000000801034f0000000009030019000000008a08043c0000000009a90436000000000059004b0000158e0000c13d000000000007004b0000159f0000613d000000000161034f0000000306700210000000000705043300000000076701cf000000000767022f000000000101043b0000010006600089000000000161022f00000000016101cf000000000171019f0000000000150435000000000123001900000000000104350000001f01200039000006fd011001970000000001130019000000000001042d000000400100043d000007020010009c000015b40000813d000000a002100039000000400020043f000000800210003900000000000204350000006002100039000000000002043500000040021000390000000000020435000000200210003900000000000204350000000000010435000000000001042d000006dc01000041000000000010043f0000004101000039000000040010043f000006bb01000041000019aa0001043000030000000000020000066f01100197000000000010043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000016070000613d000000000101043b0000000405100039000000000205041a000000010320019000000001062002700000007f0660618f0000001f0060008c00000000040000390000000104002039000000000043004b000016090000c13d000000400100043d0000000004610436000000000003004b000015f30000613d000100000004001d000200000006001d000300000001001d000000000050043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000016070000613d0000000206000029000000000006004b000015f90000613d000000000201043b0000000005000019000000030100002900000001070000290000000003570019000000000402041a000000000043043500000001022000390000002005500039000000000065004b000015eb0000413d000015fb0000013d000006ff022001970000000000240435000000000006004b00000020050000390000000005006039000015fb0000013d000000000500001900000003010000290000003f03500039000006fd023001970000000003120019000000000023004b000000000200003900000001020040390000066f0030009c0000160f0000213d00000001002001900000160f0000c13d000000400030043f000000000001042d0000000001000019000019aa00010430000006dc01000041000000000010043f0000002201000039000000040010043f000006bb01000041000019aa00010430000006dc01000041000000000010043f0000004101000039000000040010043f000006bb01000041000019aa000104300000000043010434000000000003004b0000000003000039000000010300c03900000000033204360000000004040433000006be044001970000000000430435000000400220003900000040011000390000000001010433000006be011001970000000000120435000000000001042d00000040051000390000000000450435000000ff0330018f00000020041000390000000000340435000000ff0220018f00000000002104350000006001100039000000000001042d0007000000000002000400000001001d000600000002001d0000000021020434000000000001004b000017450000613d0000066b0010009c0000066b0100804100000060011002100000066b0020009c000500000002001d0000066b020080410000004002200210000000000121019f00000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f000006b4011001c7000080100200003919a819a30000040f00000001002001900000173d0000613d000000000101043b000700000001001d00000004010000290000066f01100197000200000001001d000000000010043f0000000701000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f00000001002001900000173d0000613d000000000201043b0000000701000029000000000010043f000400000002001d0000000601200039000300000001001d000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f00000001002001900000173d0000613d000000000101043b000000000101041a000000000001004b0000174d0000c13d00000004010000290000000502100039000000000102041a000007030010009c0000173f0000813d000100000001001d0000000101100039000000000012041b000400000002001d000000000020043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f000000010020019000000007020000290000173d0000613d000000000101043b0000000101100029000000000021041b0000000401000029000000000101041a000400000001001d000000000020043f0000000301000029000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f000000010020019000000007020000290000173d0000613d000000000101043b0000000403000029000000000031041b000000000020043f0000000801000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f00000001002001900000173d0000613d000000000801043b000000060100002900000000040104330000066f0040009c0000173f0000213d000000000108041a000000010210019000000001031002700000007f0330618f0000001f0030008c00000000010000390000000101002039000000000012004b0000000507000029000017640000c13d000000200030008c000400000008001d000700000004001d000016d00000413d000300000003001d000000000080043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f00000001002001900000173d0000613d00000007040000290000001f024000390000000502200270000000200040008c0000000002004019000000000301043b00000003010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b00000005070000290000000408000029000016d00000813d000000000002041b0000000102200039000000000012004b000016cc0000413d0000001f0040008c000000200a00008a000000200b000039000017000000a13d000000000080043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f00000001002001900000173d0000613d0000000709000029000000200a00008a0000000002a90170000000000101043b000000200b000039000017360000613d000000010320008a000000050330027000000000043100190000002003000039000000010440003900000005070000290000000606000029000000040800002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000016ec0000c13d000000000092004b000016fd0000813d0000000302900210000000f80220018f000006fe0220027f000006fe0220016700000000036300190000000003030433000000000223016f000000000021041b000000010190021000000001011001bf0000170c0000013d000000000004004b000017040000613d0000000001070433000017050000013d000000000100001900000006060000290000000302400210000006fe0220027f000006fe02200167000000000121016f0000000102400210000000000121019f000000000018041b000000400100043d0000000003b10436000000000206043300000000002304350000004003100039000000000002004b0000171c0000613d000000000400001900000000053400190000000006740019000000000606043300000000006504350000002004400039000000000024004b000017150000413d0000001f042000390000000004a4016f0000000002230019000000000002043500000040024000390000066b0020009c0000066b0200804100000060022002100000066b0010009c0000066b010080410000004001100210000000000112019f00000000020004140000066b0020009c0000066b02008041000000c002200210000000000121019f000006b4011001c70000800d020000390000000203000039000006c804000041000000020500002919a8199e0000040f00000001002001900000173d0000613d000000000001042d00000000030b0019000000050700002900000006060000290000000408000029000000000092004b000016f50000413d000016fd0000013d0000000001000019000019aa00010430000006dc01000041000000000010043f0000004101000039000000040010043f000006bb01000041000019aa00010430000000400100043d000006ca0200004100000000002104350000066b0010009c0000066b01008041000000400110021000000674011001c7000019aa00010430000000400300043d000700000003001d000000240130003900000040020000390000000000210435000006c70100004100000000001304350000000401300039000000020200002900000000002104350000004402300039000000060100002919a8144a0000040f000000070200002900000000012100490000066b0010009c0000066b010080410000066b0020009c0000066b0200804100000060011002100000004002200210000000000121019f000019aa00010430000006dc01000041000000000010043f0000002201000039000000040010043f000006bb01000041000019aa000104300005000000000002000000400300043d000007020030009c000017b10000813d000000a002300039000000400020043f00000080023000390000000000020435000000600230003900000000000204350000004002300039000000000002043500000020023000390000000000020435000000000003043500000060021000390000000002020433000100000002001d000500000001001d0000000012010434000300000002001d000200000001001d0000000001010433000400000001001d000006c301000041000000000010044300000000010004140000066b0010009c0000066b01008041000000c001100210000006c4011001c70000800b0200003919a819a30000040f0000000100200190000017b70000613d00000004020000290000066b04200197000000000601043b000000000346004b0000000501000029000017ab0000413d00000080021000390000000002020433000006be0520019700000000023500a9000000000046004b0000179c0000613d00000000033200d9000000000053004b000017ab0000c13d0000000303000029000006be03300197000000000032001a000017ab0000413d00000000023200190000000103000029000006be03300197000006be04200197000000000023004b000000000304801900000000003104350000066b0260019700000002030000290000000000230435000000000001042d000006dc01000041000000000010043f0000001101000039000000040010043f000006bb01000041000019aa00010430000006dc01000041000000000010043f0000004101000039000000040010043f000006bb01000041000019aa00010430000000000001042f000000000010043f0000000601000039000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000017ca0000613d000000000101043b000000000101041a000000000001004b0000000001000039000000010100c039000000000001042d0000000001000019000019aa000104300006000000000002000300000002001d000000000020043f000600000001001d0000000101100039000400000001001d000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000018440000613d0000000603000029000000000101043b000000000101041a000000000001004b000018420000613d000000000203041a000000000002004b000018460000613d000000000021004b000500000001001d000018200000613d000200000002001d000000000030043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000018440000613d00000005020000290001000100200092000000000101043b0000000604000029000000000204041a000000010020006c0000184c0000a13d0000000202000029000000010220008a0000000001120019000000000101041a000200000001001d000000000040043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000018440000613d000000000101043b00000001011000290000000202000029000000000021041b000000000020043f0000000401000029000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000018440000613d000000000101043b0000000502000029000000000021041b0000000603000029000000000103041a000500000001001d000000000001004b000018520000613d000000000030043f00000000010004140000066b0010009c0000066b01008041000000c0011002100000067a011001c7000080100200003919a819a30000040f0000000100200190000018440000613d0000000502000029000000010220008a000000000101043b0000000001210019000000000001041b0000000601000029000000000021041b0000000301000029000000000010043f0000000401000029000000200010043f00000000010004140000066b0010009c0000066b01008041000000c00110021000000678011001c7000080100200003919a819a30000040f0000000100200190000018440000613d000000000101043b000000000001041b0000000101000039000000000001042d0000000001000019000000000001042d0000000001000019000019aa00010430000006dc01000041000000000010043f0000001101000039000000040010043f000006bb01000041000019aa00010430000006dc01000041000000000010043f0000003201000039000000040010043f000006bb01000041000019aa00010430000006dc01000041000000000010043f0000003101000039000000040010043f000006bb01000041000019aa000104300003000000000002000100000002001d000300000001001d000000000101041a000200000001001d000006c301000041000000000010044300000000010004140000066b0010009c0000066b01008041000000c001100210000006c4011001c70000800b0200003919a819a30000040f0000000100200190000018ba0000613d000000020800002900000080028002700000066b03200197000000000201043b000000000532004b0000000307000029000018b40000413d0000000101700039000018730000c13d000000000207041a000018850000013d000000000301041a000000800630027000000000045600a900000000055400d9000000000065004b000018b40000c13d000006be05800197000000000054001a000018b40000413d000006be033001970000000004540019000000000043004b0000000003048019000006720480019700000080022002100000070402200197000000000242019f000000000232019f000000010600002900000020036000390000000004030433000006be04400197000006be05200197000000000054004b00000000050440190000070502200197000000000225019f0000000005060433000000000005004b0000000005000019000006c50500c041000000000252019f000000000027041b000000400260003900000000050204330000008005500210000000000445019f000000000041041b0000000001000039000000010100c039000000400400043d00000000011404360000000003030433000006be0330019700000000003104350000000001020433000006be01100197000000400240003900000000001204350000066b0040009c0000066b04008041000000400140021000000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f00000706011001c70000800d020000390000000103000039000007070400004119a8199e0000040f0000000100200190000018bb0000613d000000000001042d000006dc01000041000000000010043f0000001101000039000000040010043f000006bb01000041000019aa00010430000000000001042f0000000001000019000019aa000104300000066e04400197000000400510003900000000004504350000002004100039000000000034043500000000002104350000006001100039000000000001042d0006000000000002000000000401041a000006d100400198000019190000613d000000000002004b000019190000613d000600000004001d000500000002001d000200000003001d000300000001001d0000000101100039000100000001001d000000000101041a000400000001001d000006c301000041000000000010044300000000010004140000066b0010009c0000066b01008041000000c001100210000006c4011001c70000800b0200003919a819a30000040f00000001002001900000191a0000613d000000060300002900000080023002700000066b02200197000000000101043b000000000421004b000019350000413d000006be033001970000000405000029000006be02500197000018eb0000c13d00000005040000290000000305000029000018ff0000013d000000000023004b0000193d0000213d000000800650027000000000056400a900000000044500d9000000000064004b000019350000c13d000000000035001a000019350000413d0000000003350019000000800110021000000704011001970000000305000029000000000405041a0000070804400197000000000114019f000000000015041b000000000032004b00000000030240190000000504000029000000000042004b0000191b0000413d000000000143004b0000192c0000413d000006be01100197000000000205041a0000070a02200197000000000112019f000000000015041b000000400100043d00000000004104350000066b0010009c0000066b01008041000000400110021000000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f0000067a011001c70000800d0200003900000001030000390000070b0400004119a8199e0000040f00000001002001900000193b0000613d000000000001042d000000000001042f000000400100043d0000000004010019000000040110003900000002030000290000066e00300198000019450000c13d0000070f03000041000000000034043500000000002104350000002401400039000000050200002900000000002104350000066b0040009c0000066b04008041000000400140021000000676011001c7000019aa000104300000000101000029000000000101041a0000008001100272000019350000613d00000005043000690000000002140019000000010220008a000000000042004b0000194a0000813d000006dc01000041000000000010043f0000001101000039000000040010043f000006bb01000041000019aa000104300000000001000019000019aa00010430000000400100043d000007090200004100000000002104350000066b0010009c0000066b01008041000000400110021000000674011001c7000019aa000104300000070e03000041000600000004001d000000000034043500000005030000290000195e0000013d00000000021200d9000000400100043d0000000005010019000000040110003900000002040000290000066e004001980000195b0000c13d0000070d0400004100000000004504350000000000210435000000240150003900000000003104350000066b0050009c0000066b05008041000000400150021000000676011001c7000019aa000104300000070c04000041000600000005001d0000000000450435000000020400002919a818bd0000040f000000060200002900000000012100490000066b0010009c0000066b0100804100000060011002100000066b0020009c0000066b020080410000004002200210000000000121019f000019aa00010430000000000001042f0000066b0010009c0000066b0100804100000040011002100000066b0020009c0000066b020080410000006002200210000000000112019f00000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f000006b4011001c7000080100200003919a819a30000040f00000001002001900000197e0000613d000000000101043b000000000001042d0000000001000019000019aa0001043000000000050100190000000000200443000000050030008c0000198e0000413d000000040100003900000000020000190000000506200210000000000664001900000005066002700000000006060031000000000161043a0000000102200039000000000031004b000019860000413d0000066b0030009c0000066b03008041000000600130021000000000020004140000066b0020009c0000066b02008041000000c002200210000000000112019f00000710011001c7000000000205001919a819a30000040f00000001002001900000199d0000613d000000000101043b000000000001042d000000000001042f000019a1002104210000000102000039000000000001042d0000000002000019000000000001042d000019a6002104230000000102000039000000000001042d0000000002000019000000000001042d000019a800000432000019a90001042e000019aa00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffff0000000000000000000000000000000000000000313ce567000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000655a7c0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffdf0200000000000000000000000000000000000040000000000000000000000000bfa87805ed57dc1f0d489ce33be4c4577d74ccde357eeeee058a32c55c44a53202000000000000000000000000000000000000200000000000000000000000002640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d8dd62ed3e00000000000000000000000000000000000000000000000000000000095ea7b300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff3f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65641806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b8302000002000000000000000000000000000000240000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f742073756363656564000000000000000000000000000000000000000000005361666545524332303a204552433230206f7065726174696f6e20646964206e08c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000000000000200000000000000000000000000000140000001000000000000000000416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000000000000000000000000000000000000000000640000000000000000000000009b15e16f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a4575b800000000000000000000000000000000000000000000000000000000c0d7865400000000000000000000000000000000000000000000000000000000dc0bd97000000000000000000000000000000000000000000000000000000000e8a1da1600000000000000000000000000000000000000000000000000000000e8a1da1700000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000dc0bd97100000000000000000000000000000000000000000000000000000000e0351e1300000000000000000000000000000000000000000000000000000000c75eea9b00000000000000000000000000000000000000000000000000000000c75eea9c00000000000000000000000000000000000000000000000000000000cf7401f300000000000000000000000000000000000000000000000000000000c0d7865500000000000000000000000000000000000000000000000000000000c4bffe2b00000000000000000000000000000000000000000000000000000000acfecf9000000000000000000000000000000000000000000000000000000000b0f479a000000000000000000000000000000000000000000000000000000000b0f479a100000000000000000000000000000000000000000000000000000000b794658000000000000000000000000000000000000000000000000000000000acfecf9100000000000000000000000000000000000000000000000000000000af58d59f000000000000000000000000000000000000000000000000000000009a4575b900000000000000000000000000000000000000000000000000000000a42a7b8b00000000000000000000000000000000000000000000000000000000a7cd63b70000000000000000000000000000000000000000000000000000000054c8a4f20000000000000000000000000000000000000000000000000000000079ba5096000000000000000000000000000000000000000000000000000000008926f54e000000000000000000000000000000000000000000000000000000008926f54f000000000000000000000000000000000000000000000000000000008da5cb5b0000000000000000000000000000000000000000000000000000000079ba5097000000000000000000000000000000000000000000000000000000007d54534e0000000000000000000000000000000000000000000000000000000054c8a4f30000000000000000000000000000000000000000000000000000000062ddd3c4000000000000000000000000000000000000000000000000000000006d3d1a5800000000000000000000000000000000000000000000000000000000240028e700000000000000000000000000000000000000000000000000000000390775360000000000000000000000000000000000000000000000000000000039077537000000000000000000000000000000000000000000000000000000004c5ef0ed00000000000000000000000000000000000000000000000000000000240028e80000000000000000000000000000000000000000000000000000000024f65ee70000000000000000000000000000000000000000000000000000000001ffc9a700000000000000000000000000000000000000000000000000000000181f5a770000000000000000000000000000000000000000000000000000000021df0da70200000000000000000000000000000000000000000000000000000000000000ed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278dad89dca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000800000000000000000fc949c7b4a13586e39d89eead2f38644f9fb3efb5a0490b14f8fc0ceab44c2515204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599161e670e4b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5f000000000000000000000000000000000000000000000000ffffffffffffff9f00000000000000000000000000000000ffffffffffffffffffffffffffffffff8020d12400000000000000000000000000000000000000000000000000000000d68af9cc000000000000000000000000000000000000000000000000000000001d5ad3c500000000000000000000000000000000000000000000000000000000fc949c7b4a13586e39d89eead2f38644f9fb3efb5a0490b14f8fc0ceab44c250796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d9553913202000002000000000000000000000000000000040000000000000000000000000000000000000000000000010000000000000000000000000000000000000000ffffffffffffffffffffff000000000000000000000000000000000000000000393b8ad2000000000000000000000000000000000000000000000000000000007d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c28579befe00000000000000000000000000000000000000000000000000000000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e00000000000000000000000000000000000000200000008000000000000000008e4a23d600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000140000000000000000002000000000000000000000000000000000000e00000000000000000000000000350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b0000000000000000000000ff0000000000000000000000000000000000000000036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0000000000000000000000000000000000000000000000000ffffffffffffff7f00000000000000000000000000000000000000000000003fffffffffffffffe0020000000000000000000000000000000000004000000080000000000000000002dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f168400000000000000000000000000000000000000000000000000000000ffffffbffdffffffffffffffffffffffffffffffffffffc000000000000000000000000052d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d7674f23c7c00000000000000000000000000000000000000000000000000000000405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace4e487b71000000000000000000000000000000000000000000000000000000000200000200000000000000000000000000000044000000000000000000000000961c9a4f000000000000000000000000000000000000000000000000000000002cbc26bb000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff0000000000000000000000000000000053ad11d800000000000000000000000000000000000000000000000000000000d0d2597600000000000000000000000000000000000000000000000000000000a8d87a3b00000000000000000000000000000000000000000000000000000000728fe07b000000000000000000000000000000000000000000000000000000009dc29fac00000000000000000000000000000000000000000000000000000000696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df7a9902c7e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000020000000000000000000000000000000000002000000080000000000000000044676b5284b809a22248eba0da87391d79098be38bb03154be88a58bf4d0917402b543c6000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e02b5c74de00000000000000000000000000000000000000000000000000000000bfa87805ed57dc1f0d489ce33be4c4577d74ccde357eeeee058a32c55c44a533800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf756635f4a7b30000000000000000000000000000000000000000000000000000000083826b2b00000000000000000000000000000000000000000000000000000000a9cb113d0000000000000000000000000000000000000000000000000000000040c10f19000000000000000000000000000000000000000000000000000000009d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0953576f70000000000000000000000000000000000000000000000000000000024eb47e5000000000000000000000000000000000000000000000000000000004275726e5769746846726f6d4d696e74546f6b656e506f6f6c20312e352e31000000000000000000000000000000000000000000000000c0000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffc9a7000000000000000000000000000000000000000000000000000000000e64dd2900000000000000000000000000000000000000000000000000000000aff2afbf00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000ffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffffc0000000000000000000000000000000000000000000000000ffffffffffffff600000000000000000000000000000000000000000000000010000000000000000000000000000000000000000ffffffff00000000000000000000000000000000ffffffffffffffffffffff00ffffffff0000000000000000000000000000000002000000000000000000000000000000000000600000000000000000000000009ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19ffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff9725942a00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000000000001871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690ad0c8d23a0000000000000000000000000000000000000000000000000000000015279c08000000000000000000000000000000000000000000000000000000001a76572a00000000000000000000000000000000000000000000000000000000f94ebcd1000000000000000000000000000000000000000000000000000000000200000200000000000000000000000000000000000000000000000000000000") diff --git a/core/gethwrappers/ccip/generated_zks/ccip_encoding_utils/ccip_encoding_utils.go b/core/gethwrappers/ccip/generated_zks/ccip_encoding_utils/ccip_encoding_utils.go new file mode 100644 index 00000000000..208c0e37d63 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/ccip_encoding_utils/ccip_encoding_utils.go @@ -0,0 +1,281 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ccip_encoding_utils + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type CCIPHomeOCR3Config struct { + PluginType uint8 + ChainSelector uint64 + FRoleDON uint8 + OffchainConfigVersion uint64 + OfframpAddress []byte + RmnHomeAddress []byte + Nodes []CCIPHomeOCR3Node + OffchainConfig []byte +} + +type CCIPHomeOCR3Node struct { + P2pId [32]byte + SignerKey []byte + TransmitterKey []byte +} + +type IRMNRemoteSignature struct { + R [32]byte + S [32]byte +} + +type InternalGasPriceUpdate struct { + DestChainSelector uint64 + UsdPerUnitGas *big.Int +} + +type InternalMerkleRoot struct { + SourceChainSelector uint64 + OnRampAddress []byte + MinSeqNr uint64 + MaxSeqNr uint64 + MerkleRoot [32]byte +} + +type InternalPriceUpdates struct { + TokenPriceUpdates []InternalTokenPriceUpdate + GasPriceUpdates []InternalGasPriceUpdate +} + +type InternalTokenPriceUpdate struct { + SourceToken common.Address + UsdPerToken *big.Int +} + +type OffRampCommitReport struct { + PriceUpdates InternalPriceUpdates + MerkleRoots []InternalMerkleRoot + RmnSignatures []IRMNRemoteSignature +} + +type RMNRemoteReport struct { + DestChainId *big.Int + DestChainSelector uint64 + RmnRemoteContractAddress common.Address + OfframpAddress common.Address + RmnHomeContractConfigDigest [32]byte + MerkleRoots []InternalMerkleRoot +} + +var EncodingUtilsMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMNRemote.Signature[]\",\"name\":\"rmnSignatures\",\"type\":\"tuple[]\"}],\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"commitReport\",\"type\":\"tuple\"}],\"name\":\"exposeCommitReport\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"FRoleDON\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rmnHomeAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Config[]\",\"name\":\"config\",\"type\":\"tuple[]\"}],\"name\":\"exposeOCR3Config\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"rmnReportVersion\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"destChainId\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnRemoteContractAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"offrampAddress\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"}],\"internalType\":\"structRMNRemote.Report\",\"name\":\"rmnReport\",\"type\":\"tuple\"}],\"name\":\"exposeRmnReport\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", +} + +var EncodingUtilsABI = EncodingUtilsMetaData.ABI + +type EncodingUtils struct { + address common.Address + abi abi.ABI + EncodingUtilsCaller + EncodingUtilsTransactor + EncodingUtilsFilterer +} + +type EncodingUtilsCaller struct { + contract *bind.BoundContract +} + +type EncodingUtilsTransactor struct { + contract *bind.BoundContract +} + +type EncodingUtilsFilterer struct { + contract *bind.BoundContract +} + +type EncodingUtilsSession struct { + Contract *EncodingUtils + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type EncodingUtilsCallerSession struct { + Contract *EncodingUtilsCaller + CallOpts bind.CallOpts +} + +type EncodingUtilsTransactorSession struct { + Contract *EncodingUtilsTransactor + TransactOpts bind.TransactOpts +} + +type EncodingUtilsRaw struct { + Contract *EncodingUtils +} + +type EncodingUtilsCallerRaw struct { + Contract *EncodingUtilsCaller +} + +type EncodingUtilsTransactorRaw struct { + Contract *EncodingUtilsTransactor +} + +func NewEncodingUtils(address common.Address, backend bind.ContractBackend) (*EncodingUtils, error) { + abi, err := abi.JSON(strings.NewReader(EncodingUtilsABI)) + if err != nil { + return nil, err + } + contract, err := bindEncodingUtils(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &EncodingUtils{address: address, abi: abi, EncodingUtilsCaller: EncodingUtilsCaller{contract: contract}, EncodingUtilsTransactor: EncodingUtilsTransactor{contract: contract}, EncodingUtilsFilterer: EncodingUtilsFilterer{contract: contract}}, nil +} + +func NewEncodingUtilsCaller(address common.Address, caller bind.ContractCaller) (*EncodingUtilsCaller, error) { + contract, err := bindEncodingUtils(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &EncodingUtilsCaller{contract: contract}, nil +} + +func NewEncodingUtilsTransactor(address common.Address, transactor bind.ContractTransactor) (*EncodingUtilsTransactor, error) { + contract, err := bindEncodingUtils(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &EncodingUtilsTransactor{contract: contract}, nil +} + +func NewEncodingUtilsFilterer(address common.Address, filterer bind.ContractFilterer) (*EncodingUtilsFilterer, error) { + contract, err := bindEncodingUtils(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &EncodingUtilsFilterer{contract: contract}, nil +} + +func bindEncodingUtils(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := EncodingUtilsMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_EncodingUtils *EncodingUtilsRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _EncodingUtils.Contract.EncodingUtilsCaller.contract.Call(opts, result, method, params...) +} + +func (_EncodingUtils *EncodingUtilsRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EncodingUtils.Contract.EncodingUtilsTransactor.contract.Transfer(opts) +} + +func (_EncodingUtils *EncodingUtilsRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _EncodingUtils.Contract.EncodingUtilsTransactor.contract.Transact(opts, method, params...) +} + +func (_EncodingUtils *EncodingUtilsCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _EncodingUtils.Contract.contract.Call(opts, result, method, params...) +} + +func (_EncodingUtils *EncodingUtilsTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EncodingUtils.Contract.contract.Transfer(opts) +} + +func (_EncodingUtils *EncodingUtilsTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _EncodingUtils.Contract.contract.Transact(opts, method, params...) +} + +func (_EncodingUtils *EncodingUtilsCaller) ExposeCommitReport(opts *bind.CallOpts, commitReport OffRampCommitReport) ([]byte, error) { + var out []interface{} + err := _EncodingUtils.contract.Call(opts, &out, "exposeCommitReport", commitReport) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +func (_EncodingUtils *EncodingUtilsSession) ExposeCommitReport(commitReport OffRampCommitReport) ([]byte, error) { + return _EncodingUtils.Contract.ExposeCommitReport(&_EncodingUtils.CallOpts, commitReport) +} + +func (_EncodingUtils *EncodingUtilsCallerSession) ExposeCommitReport(commitReport OffRampCommitReport) ([]byte, error) { + return _EncodingUtils.Contract.ExposeCommitReport(&_EncodingUtils.CallOpts, commitReport) +} + +func (_EncodingUtils *EncodingUtilsCaller) ExposeOCR3Config(opts *bind.CallOpts, config []CCIPHomeOCR3Config) ([]byte, error) { + var out []interface{} + err := _EncodingUtils.contract.Call(opts, &out, "exposeOCR3Config", config) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +func (_EncodingUtils *EncodingUtilsSession) ExposeOCR3Config(config []CCIPHomeOCR3Config) ([]byte, error) { + return _EncodingUtils.Contract.ExposeOCR3Config(&_EncodingUtils.CallOpts, config) +} + +func (_EncodingUtils *EncodingUtilsCallerSession) ExposeOCR3Config(config []CCIPHomeOCR3Config) ([]byte, error) { + return _EncodingUtils.Contract.ExposeOCR3Config(&_EncodingUtils.CallOpts, config) +} + +func (_EncodingUtils *EncodingUtilsTransactor) ExposeRmnReport(opts *bind.TransactOpts, rmnReportVersion [32]byte, rmnReport RMNRemoteReport) (*types.Transaction, error) { + return _EncodingUtils.contract.Transact(opts, "exposeRmnReport", rmnReportVersion, rmnReport) +} + +func (_EncodingUtils *EncodingUtilsSession) ExposeRmnReport(rmnReportVersion [32]byte, rmnReport RMNRemoteReport) (*types.Transaction, error) { + return _EncodingUtils.Contract.ExposeRmnReport(&_EncodingUtils.TransactOpts, rmnReportVersion, rmnReport) +} + +func (_EncodingUtils *EncodingUtilsTransactorSession) ExposeRmnReport(rmnReportVersion [32]byte, rmnReport RMNRemoteReport) (*types.Transaction, error) { + return _EncodingUtils.Contract.ExposeRmnReport(&_EncodingUtils.TransactOpts, rmnReportVersion, rmnReport) +} + +func (_EncodingUtils *EncodingUtils) Address() common.Address { + return _EncodingUtils.address +} + +type EncodingUtilsInterface interface { + ExposeCommitReport(opts *bind.CallOpts, commitReport OffRampCommitReport) ([]byte, error) + + ExposeOCR3Config(opts *bind.CallOpts, config []CCIPHomeOCR3Config) ([]byte, error) + + ExposeRmnReport(opts *bind.TransactOpts, rmnReportVersion [32]byte, rmnReport RMNRemoteReport) (*types.Transaction, error) + + Address() common.Address +} diff --git a/core/gethwrappers/ccip/generated_zks/ccip_home/ccip_home.go b/core/gethwrappers/ccip/generated_zks/ccip_home/ccip_home.go new file mode 100644 index 00000000000..6b12df734b2 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/ccip_home/ccip_home.go @@ -0,0 +1,1898 @@ +package ccip_home + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type CCIPHomeChainConfig struct { + Readers [][32]byte + FChain uint8 + Config []byte +} + +type CCIPHomeChainConfigArgs struct { + ChainSelector uint64 + ChainConfig CCIPHomeChainConfig +} + +type CCIPHomeOCR3Config struct { + PluginType uint8 + ChainSelector uint64 + FRoleDON uint8 + OffchainConfigVersion uint64 + OfframpAddress []byte + RmnHomeAddress []byte + Nodes []CCIPHomeOCR3Node + OffchainConfig []byte +} + +type CCIPHomeOCR3Node struct { + P2pId [32]byte + SignerKey []byte + TransmitterKey []byte +} + +type CCIPHomeVersionedConfig struct { + Version uint32 + ConfigDigest [32]byte + Config CCIPHomeOCR3Config +} + +var CCIPHomeMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"capabilitiesRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotTransferToSelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ChainSelectorNotSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expectedConfigDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"gotConfigDigest\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"callDonId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"capabilityRegistryDonId\",\"type\":\"uint32\"}],\"name\":\"DONIdMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FChainMustBePositive\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"fChain\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"FRoleDON\",\"type\":\"uint256\"}],\"name\":\"FChainTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node\",\"name\":\"node\",\"type\":\"tuple\"}],\"name\":\"InvalidNode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPluginType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"InvalidSelector\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoOpStateTransitionNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimum\",\"type\":\"uint256\"}],\"name\":\"NotEnoughTransmitters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OfframpAddressCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCapabilitiesRegistryCanCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RMNHomeAddressCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RevokingZeroDigestNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManySigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"ActiveConfigRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"CandidateConfigRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"CapabilityConfigurationSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainConfigRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structCCIPHome.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"ConfigPromoted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"FRoleDON\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rmnHomeAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structCCIPHome.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"chainSelectorRemoves\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPHome.ChainConfigArgs[]\",\"name\":\"chainConfigAdds\",\"type\":\"tuple[]\"}],\"name\":\"applyChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes\",\"name\":\"update\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"beforeCapabilityConfigSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"}],\"name\":\"getActiveDigest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pageIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllChainConfigs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPHome.ChainConfigArgs[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"}],\"name\":\"getAllConfigs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"FRoleDON\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rmnHomeAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPHome.VersionedConfig\",\"name\":\"activeConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"FRoleDON\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rmnHomeAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPHome.VersionedConfig\",\"name\":\"candidateConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"}],\"name\":\"getCandidateDigest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"getCapabilityConfiguration\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"configuration\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCapabilityRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"FRoleDON\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rmnHomeAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPHome.VersionedConfig\",\"name\":\"versionedConfig\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"ok\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"}],\"name\":\"getConfigDigests\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"activeConfigDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"candidateConfigDigest\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNumChainConfigurations\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"digestToPromote\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digestToRevoke\",\"type\":\"bytes32\"}],\"name\":\"promoteCandidateAndRevokeActive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"revokeCandidate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"FRoleDON\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rmnHomeAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"digestToOverwrite\",\"type\":\"bytes32\"}],\"name\":\"setCandidate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"newConfigDigest\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60a06040526006805463ffffffff191690553480156200001e57600080fd5b5060405162004c7a38038062004c7a83398101604081905262000041916200014c565b336000816200006357604051639b15e16f60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b038481169190911790915581161562000096576200009681620000d2565b50506001600160a01b038116620000c0576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b03166080526200017e565b336001600160a01b03821603620000fc57604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000602082840312156200015f57600080fd5b81516001600160a01b03811681146200017757600080fd5b9392505050565b608051614ad2620001a860003960008181610180015281816121eb0152612c450152614ad26000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806379ba5097116100cd578063b74b235611610081578063f2fde38b11610066578063f2fde38b14610356578063f442c89a14610369578063fba64a7c1461037c57600080fd5b8063b74b235614610323578063bae4e0fa1461034357600080fd5b80638318ed5d116100b25780638318ed5d146102d15780638da5cb5b146102f2578063922ea4061461031057600080fd5b806379ba5097146102c15780637ac0d41e146102c957600080fd5b80633df45a72116101245780635a837f97116101095780635a837f97146102785780635f1edd9c1461028d5780637524051a146102ae57600080fd5b80633df45a721461022f5780634851d5491461025057600080fd5b806301ffc9a714610156578063020330e61461017e578063181f5a77146101c557806333d9704a1461020e575b600080fd5b610169610164366004612fb2565b61038f565b60405190151581526020015b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6102016040518060400160405280601281526020017f43434950486f6d6520312e362e302d646576000000000000000000000000000081525081565b6040516101759190613044565b61022161021c366004613091565b610428565b6040516101759291906132d8565b61024261023d3660046132fc565b610922565b604051610175929190613335565b61026361025e3660046132fc565b611222565b60408051928352602083019190915201610175565b61028b61028636600461335a565b611318565b005b6102a061029b3660046132fc565b61162b565b604051908152602001610175565b61028b6102bc366004613091565b6116a2565b61028b61188d565b6102a061195b565b6102016102df3660046133a0565b5060408051602081019091526000815290565b60015473ffffffffffffffffffffffffffffffffffffffff166101a0565b6102a061031e3660046132fc565b61196c565b6103366103313660046133bd565b6119bd565b6040516101759190613456565b6102a06103513660046134f4565b611c22565b61028b610364366004613564565b611e20565b61028b6103773660046135df565b611e34565b61028b61038a36600461366c565b6121d3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f78bea72100000000000000000000000000000000000000000000000000000000148061042257507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b610430612e3b565b6000805b60028110156109145763ffffffff861660009081526005602052604081208591876001811115610466576104666130d2565b6001811115610477576104776130d2565b8152602001908152602001600020826002811061049657610496613729565b60070201600101541480156104aa57508315155b1561090c5763ffffffff86166000908152600560205260408120908660018111156104d7576104d76130d2565b60018111156104e8576104e86130d2565b8152602001908152602001600020816002811061050757610507613729565b6040805160608101825260079290920292909201805463ffffffff1682526001808201546020840152835161010081018552600283018054939592949386938501929190829060ff1687811115610560576105606130d2565b6001811115610571576105716130d2565b8152815467ffffffffffffffff61010082048116602084015260ff690100000000000000000083041660408401526a01000000000000000000009091041660608201526001820180546080909201916105c990613758565b80601f01602080910402602001604051908101604052809291908181526020018280546105f590613758565b80156106425780601f1061061757610100808354040283529160200191610642565b820191906000526020600020905b81548152906001019060200180831161062557829003601f168201915b5050505050815260200160028201805461065b90613758565b80601f016020809104026020016040519081016040528092919081815260200182805461068790613758565b80156106d45780601f106106a9576101008083540402835291602001916106d4565b820191906000526020600020905b8154815290600101906020018083116106b757829003601f168201915b5050505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b8282101561086257838290600052602060002090600302016040518060600160405290816000820154815260200160018201805461073f90613758565b80601f016020809104026020016040519081016040528092919081815260200182805461076b90613758565b80156107b85780601f1061078d576101008083540402835291602001916107b8565b820191906000526020600020905b81548152906001019060200180831161079b57829003601f168201915b505050505081526020016002820180546107d190613758565b80601f01602080910402602001604051908101604052809291908181526020018280546107fd90613758565b801561084a5780601f1061081f5761010080835404028352916020019161084a565b820191906000526020600020905b81548152906001019060200180831161082d57829003601f168201915b50505050508152505081526020019060010190610702565b50505050815260200160048201805461087a90613758565b80601f01602080910402602001604051908101604052809291908181526020018280546108a690613758565b80156108f35780601f106108c8576101008083540402835291602001916108f3565b820191906000526020600020905b8154815290600101906020018083116108d657829003601f168201915b505050505081525050815250509150925092505061091a565b600101610434565b50600090505b935093915050565b61092a612e3b565b610932612e3b565b63ffffffff841660009081526005602052604081208185600181111561095a5761095a6130d2565b600181111561096b5761096b6130d2565b81526020019081526020016000206109838686612490565b63ffffffff166002811061099957610999613729565b6040805160608101825260079290920292909201805463ffffffff1682526001808201546020840152835161010081018552600283018054949593949386019391929091839160ff909116908111156109f4576109f46130d2565b6001811115610a0557610a056130d2565b8152815467ffffffffffffffff61010082048116602084015260ff690100000000000000000083041660408401526a0100000000000000000000909104166060820152600182018054608090920191610a5d90613758565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8990613758565b8015610ad65780601f10610aab57610100808354040283529160200191610ad6565b820191906000526020600020905b815481529060010190602001808311610ab957829003601f168201915b50505050508152602001600282018054610aef90613758565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1b90613758565b8015610b685780601f10610b3d57610100808354040283529160200191610b68565b820191906000526020600020905b815481529060010190602001808311610b4b57829003601f168201915b5050505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015610cf6578382906000526020600020906003020160405180606001604052908160008201548152602001600182018054610bd390613758565b80601f0160208091040260200160405190810160405280929190818152602001828054610bff90613758565b8015610c4c5780601f10610c2157610100808354040283529160200191610c4c565b820191906000526020600020905b815481529060010190602001808311610c2f57829003601f168201915b50505050508152602001600282018054610c6590613758565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9190613758565b8015610cde5780601f10610cb357610100808354040283529160200191610cde565b820191906000526020600020905b815481529060010190602001808311610cc157829003601f168201915b50505050508152505081526020019060010190610b96565b505050508152602001600482018054610d0e90613758565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3a90613758565b8015610d875780601f10610d5c57610100808354040283529160200191610d87565b820191906000526020600020905b815481529060010190602001808311610d6a57829003601f168201915b50505091909252505050905250602081015190915015610da5578092505b63ffffffff8516600090815260056020526040812081866001811115610dcd57610dcd6130d2565b6001811115610dde57610dde6130d2565b8152602001908152602001600020610df687876124e7565b63ffffffff1660028110610e0c57610e0c613729565b6040805160608101825260079290920292909201805463ffffffff1682526001808201546020840152835161010081018552600283018054949593949386019391929091839160ff90911690811115610e6757610e676130d2565b6001811115610e7857610e786130d2565b8152815467ffffffffffffffff61010082048116602084015260ff690100000000000000000083041660408401526a0100000000000000000000909104166060820152600182018054608090920191610ed090613758565b80601f0160208091040260200160405190810160405280929190818152602001828054610efc90613758565b8015610f495780601f10610f1e57610100808354040283529160200191610f49565b820191906000526020600020905b815481529060010190602001808311610f2c57829003601f168201915b50505050508152602001600282018054610f6290613758565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8e90613758565b8015610fdb5780601f10610fb057610100808354040283529160200191610fdb565b820191906000526020600020905b815481529060010190602001808311610fbe57829003601f168201915b5050505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b8282101561116957838290600052602060002090600302016040518060600160405290816000820154815260200160018201805461104690613758565b80601f016020809104026020016040519081016040528092919081815260200182805461107290613758565b80156110bf5780601f10611094576101008083540402835291602001916110bf565b820191906000526020600020905b8154815290600101906020018083116110a257829003601f168201915b505050505081526020016002820180546110d890613758565b80601f016020809104026020016040519081016040528092919081815260200182805461110490613758565b80156111515780601f1061112657610100808354040283529160200191611151565b820191906000526020600020905b81548152906001019060200180831161113457829003601f168201915b50505050508152505081526020019060010190611009565b50505050815260200160048201805461118190613758565b80601f01602080910402602001604051908101604052809291908181526020018280546111ad90613758565b80156111fa5780601f106111cf576101008083540402835291602001916111fa565b820191906000526020600020905b8154815290600101906020018083116111dd57829003601f168201915b50505091909252505050905250602081015190915015611218578092505b50505b9250929050565b63ffffffff8216600090815260056020526040812081908184600181111561124c5761124c6130d2565b600181111561125d5761125d6130d2565b81526020019081526020016000206112758585612490565b63ffffffff166002811061128b5761128b613729565b6007020160010154600560008663ffffffff1663ffffffff16815260200190815260200160002060008560018111156112c6576112c66130d2565b60018111156112d7576112d76130d2565b81526020019081526020016000206112ef86866124e7565b63ffffffff166002811061130557611305613729565b6007020160010154915091509250929050565b611320612542565b8115801561132c575080155b15611363576040517f7b4d1e4f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061136f85856124e7565b63ffffffff86811660009081526005602052604081209290911692508491908660018111156113a0576113a06130d2565b60018111156113b1576113b16130d2565b815260200190815260200160002082600281106113d0576113d0613729565b6007020160010154146114845763ffffffff8516600090815260056020526040812090856001811115611405576114056130d2565b6001811115611416576114166130d2565b8152602001908152602001600020816002811061143557611435613729565b6007020160010154836040517f93df584c00000000000000000000000000000000000000000000000000000000815260040161147b929190918252602082015260400190565b60405180910390fd5b63ffffffff85166000908152600560205260408120818660018111156114ac576114ac6130d2565b60018111156114bd576114bd6130d2565b81526020019081526020016000206114d58787612490565b63ffffffff16600281106114eb576114eb613729565b6007020190508281600101541461153e5760018101546040517f93df584c00000000000000000000000000000000000000000000000000000000815260048101919091526024810184905260440161147b565b6000600180830182905563ffffffff881682526007602052604082209091878381111561156d5761156d6130d2565b600181111561157e5761157e6130d2565b8152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000811663ffffffff918216939093181691909117905582156115f85760405183907f0b31c0055e2d464bef7781994b98c4ff9ef4ae0d05f59feb6a68c42de5e201b890600090a25b60405184907ffc3e98dbbd47c3fa7c1c05b6ec711caeaf70eca4554192b9ada8fc11a37f298e90600090a2505050505050565b63ffffffff8216600090815260056020526040812081836001811115611653576116536130d2565b6001811115611664576116646130d2565b815260200190815260200160002061167c8484612490565b63ffffffff166002811061169257611692613729565b6007020160010154905092915050565b6116aa612542565b806116e1576040517f0849d8cc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006116ed84846124e7565b63ffffffff858116600090815260056020526040812092909116925083919085600181111561171e5761171e6130d2565b600181111561172f5761172f6130d2565b8152602001908152602001600020826002811061174e5761174e613729565b6007020160010154146117f95763ffffffff8416600090815260056020526040812090846001811115611783576117836130d2565b6001811115611794576117946130d2565b815260200190815260200160002081600281106117b3576117b3613729565b6007020160010154826040517f93df584c00000000000000000000000000000000000000000000000000000000815260040161147b929190918252602082015260400190565b60405182907f53f5d9228f0a4173bea6e5931c9b3afe6eeb6692ede1d182952970f152534e3b90600090a263ffffffff841660009081526005602052604081209084600181111561184c5761184c6130d2565b600181111561185d5761185d6130d2565b8152602001908152602001600020816002811061187c5761187c613729565b600702016001016000905550505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146118de576040517f02b543c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000008082163390811790935560008054909116815560405173ffffffffffffffffffffffffffffffffffffffff909216929183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6000611967600361257d565b905090565b63ffffffff8216600090815260056020526040812081836001811115611994576119946130d2565b60018111156119a5576119a56130d2565b815260200190815260200160002061167c84846124e7565b606060006119cb600361257d565b905060006119d984866137da565b90508315806119e85750818110155b15611a28576040805160008082526020820190925290611a1e565b611a0b612eb7565b815260200190600190039081611a035790505b5092505050610422565b6000611a348583613820565b905082811115611a415750815b6000611a4d8383613833565b67ffffffffffffffff811115611a6557611a656137f1565b604051908082528060200260200182016040528015611a9e57816020015b611a8b612eb7565b815260200190600190039081611a835790505b509050825b82811015611c17576000611ab8600383612587565b60408051808201825267ffffffffffffffff83168082526000908152600260209081529083902083518154608081850283018101909652606082018181529697509395928601949093919284929091849190840182828015611b3957602002820191906000526020600020905b815481526020019060010190808311611b25575b5050509183525050600182015460ff166020820152600282018054604090920191611b6390613758565b80601f0160208091040260200160405190810160405280929190818152602001828054611b8f90613758565b8015611bdc5780601f10611bb157610100808354040283529160200191611bdc565b820191906000526020600020905b815481529060010190602001808311611bbf57829003601f168201915b50505091909252505050905283611bf38785613833565b81518110611c0357611c03613729565b602090810291909101015250600101611aa3565b509695505050505050565b6000611c2c612542565b611c3d611c3884613a61565b61259a565b6000611c49868661196c565b9050828114611c8e576040517f93df584c000000000000000000000000000000000000000000000000000000008152600481018290526024810184905260440161147b565b8015611cc05760405183907f53f5d9228f0a4173bea6e5931c9b3afe6eeb6692ede1d182952970f152534e3b90600090a25b60068054600091908290611cd99063ffffffff16613b5d565b91906101000a81548163ffffffff021916908363ffffffff16021790559050611d23878787604051602001611d0e9190613e39565b60405160208183030381529060405284612a08565b63ffffffff881660009081526005602052604081209194509081886001811115611d4f57611d4f6130d2565b6001811115611d6057611d606130d2565b8152602001908152602001600020611d7889896124e7565b63ffffffff1660028110611d8e57611d8e613729565b600702016001810185905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff841617815590508560028201611dd8828261431f565b905050837f94f085b7c57ec2a270befd0b7b2ec7452580040edee8bb0fb04609c81f0359c68388604051611e0d9291906144e6565b60405180910390a2505050949350505050565b611e28612ac8565b611e3181612b19565b50565b611e3c612ac8565b60005b8381101561202257611e83858583818110611e5c57611e5c613729565b9050602002016020810190611e71919061450d565b60039067ffffffffffffffff16612bdd565b611eed57848482818110611e9957611e99613729565b9050602002016020810190611eae919061450d565b6040517f1bd4d2d200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161147b565b60026000868684818110611f0357611f03613729565b9050602002016020810190611f18919061450d565b67ffffffffffffffff1681526020810191909152604001600090812090611f3f8282612efa565b6001820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055611f77600283016000612f18565b5050611fb5858583818110611f8e57611f8e613729565b9050602002016020810190611fa3919061450d565b60039067ffffffffffffffff16612bf5565b507f2a680691fef3b2d105196805935232c661ce703e92d464ef0b94a7bc62d714f0858583818110611fe957611fe9613729565b9050602002016020810190611ffe919061450d565b60405167ffffffffffffffff909116815260200160405180910390a1600101611e3f565b5060005b818110156121cc57600083838381811061204257612042613729565b9050602002810190612054919061452a565b612062906020810190614082565b61206b9061455e565b9050600084848481811061208157612081613729565b9050602002810190612093919061452a565b6120a190602081019061450d565b90506120b08260000151612c01565b816020015160ff166000036120f1576040517fa9b3766e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff81166000908152600260209081526040909120835180518593612121928492910190612f52565b5060208201516001820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff9092169190911790556040820151600282019061216e9082614630565b5061218891506003905067ffffffffffffffff8316612cc3565b507f05dd57854af2c291a94ea52e7c43d80bc3be7fa73022f98b735dea86642fa5e081836040516121ba92919061472c565b60405180910390a15050600101612026565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614612242576040517fac7a7efd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612251600482868861474f565b61225a91614779565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fbae4e0fa00000000000000000000000000000000000000000000000000000000148015906122f057507fffffffff0000000000000000000000000000000000000000000000000000000081167f7524051a0000000000000000000000000000000000000000000000000000000014155b801561233e57507fffffffff0000000000000000000000000000000000000000000000000000000081167f5a837f970000000000000000000000000000000000000000000000000000000014155b15612399576040517f12ba286f0000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008216600482015260240161147b565b60006123a960246004878961474f565b8101906123b691906147c1565b90508263ffffffff168114612407576040517f8a6e4ce800000000000000000000000000000000000000000000000000000000815263ffffffff80831660048301528416602482015260440161147b565b6000803073ffffffffffffffffffffffffffffffffffffffff1688886040516124319291906147da565b6000604051808303816000865af19150503d806000811461246e576040519150601f19603f3d011682016040523d82523d6000602084013e612473565b606091505b509150915081612484573d60208201fd5b50505050505050505050565b63ffffffff82166000908152600760205260408120818360018111156124b8576124b86130d2565b60018111156124c9576124c96130d2565b815260208101919091526040016000205463ffffffff169392505050565b63ffffffff821660009081526007602052604081208183600181111561250f5761250f6130d2565b6001811115612520576125206130d2565b815260208101919091526040016000205463ffffffff16600118905092915050565b33301461257b576040517f371a732800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610422825490565b60006125938383612ccf565b9392505050565b806020015167ffffffffffffffff166000036125e2576040517f698cf8e000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000815160018111156125f7576125f76130d2565b141580156126185750600181516001811115612615576126156130d2565b14155b1561264f576040517f3302dbd700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b608081015151158061268c575060408051600060208201520160405160208183030381529060405280519060200120816080015180519060200120145b156126c3576040517f358c192700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a08101515115806127005750604080516000602082015201604051602081830303815290604052805190602001208160a0015180519060200120145b15612737576040517fdee9857400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516127529060039067ffffffffffffffff16612bdd565b61279a5760208101516040517f1bd4d2d200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161147b565b60408082015160208084015167ffffffffffffffff1660009081526002909152919091206001015460ff91821691168181111561280d576040517f2db22040000000000000000000000000000000000000000000000000000000008152600481018290526024810183905260440161147b565b60c08301515161010081111561284f576040517f1b925da600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61285a8360036137da565b8111612892576040517f4856694e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808267ffffffffffffffff8111156128ae576128ae6137f1565b6040519080825280602002602001820160405280156128d7578160200160208202803683370190505b50905060005b838110156129975760008760c0015182815181106128fd576128fd613729565b60200260200101519050806040015151600014612922578361291e816147ea565b9450505b602081015151158061293357508051155b1561296c57806040517f9fa4031400000000000000000000000000000000000000000000000000000000815260040161147b9190614822565b806000015183838151811061298357612983613729565b6020908102919091010152506001016128dd565b5060006129a58560036137da565b6129b0906001613820565b9050808310156129f6576040517f548dd21f000000000000000000000000000000000000000000000000000000008152600481018490526024810182905260440161147b565b6129ff82612c01565b50505050505050565b6040516000907dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90612a66907f45564d000000000000000000000000000000000000000000000000000000000090469030908a908a908990602001614835565b60408051601f1981840301815290829052612a8591869060200161488e565b60408051808303601f190181529190528051602090910120167e0a0000000000000000000000000000000000000000000000000000000000001795945050505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461257b576040517f2b5c74de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff821603612b68576040517fdad89dca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008181526001830160205260408120541515612593565b60006125938383612cf9565b805115611e31576040517f05a5196600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906305a5196690612c7a9084906004016148bd565b600060405180830381865afa158015612c97573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612cbf919081019061493a565b5050565b60006125938383612dec565b6000826000018281548110612ce657612ce6613729565b9060005260206000200154905092915050565b60008181526001830160205260408120548015612de2576000612d1d600183613833565b8554909150600090612d3190600190613833565b9050808214612d96576000866000018281548110612d5157612d51613729565b9060005260206000200154905080876000018481548110612d7457612d74613729565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612da757612da7614a96565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610422565b6000915050610422565b6000818152600183016020526040812054612e3357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610422565b506000610422565b6040805160608101825260008082526020820152908101612eb26040805161010081019091528060008152602001600067ffffffffffffffff168152602001600060ff168152602001600067ffffffffffffffff168152602001606081526020016060815260200160608152602001606081525090565b905290565b6040518060400160405280600067ffffffffffffffff168152602001612eb2604051806060016040528060608152602001600060ff168152602001606081525090565b5080546000825590600052602060002090810190611e319190612f9d565b508054612f2490613758565b6000825580601f10612f34575050565b601f016020900490600052602060002090810190611e319190612f9d565b828054828255906000526020600020908101928215612f8d579160200282015b82811115612f8d578251825591602001919060010190612f72565b50612f99929150612f9d565b5090565b5b80821115612f995760008155600101612f9e565b600060208284031215612fc457600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461259357600080fd5b60005b8381101561300f578181015183820152602001612ff7565b50506000910152565b60008151808452613030816020860160208601612ff4565b601f01601f19169290920160200192915050565b6020815260006125936020830184613018565b63ffffffff81168114611e3157600080fd5b803561307481613057565b919050565b60028110611e3157600080fd5b803561307481613079565b6000806000606084860312156130a657600080fd5b83356130b181613057565b925060208401356130c181613079565b929592945050506040919091013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60028110613138577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b80518252600060208201516060602085015261315b6060850182613018565b9050604083015184820360408601526131748282613018565b95945050505050565b60008282518085526020808601955060208260051b8401016020860160005b848110156131ca57601f198684030189526131b883835161313c565b9884019892509083019060010161319c565b5090979650505050505050565b63ffffffff8151168252602081015160208301526000604082015160606040850152613207606085018251613101565b602081015167ffffffffffffffff8116608086015250604081015160ff811660a086015250606081015167ffffffffffffffff811660c08601525060808101516101008060e087015261325e610160870183613018565b915060a08301517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08088850301838901526132998483613018565b935060c0850151925080888503016101208901526132b7848461317d565b935060e0850151945080888503016101408901525050506131748183613018565b6040815260006132eb60408301856131d7565b905082151560208301529392505050565b6000806040838503121561330f57600080fd5b823561331a81613057565b9150602083013561332a81613079565b809150509250929050565b60408152600061334860408301856131d7565b828103602084015261317481856131d7565b6000806000806080858703121561337057600080fd5b843561337b81613057565b9350602085013561338b81613079565b93969395505050506040820135916060013590565b6000602082840312156133b257600080fd5b813561259381613057565b600080604083850312156133d057600080fd5b50508035926020909101359150565b60008151808452602080850194506020840160005b83811015613410578151875295820195908201906001016133f4565b509495945050505050565b600081516060845261343060608501826133df565b905060ff6020840151166020850152604083015184820360408601526131748282613018565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156134e6578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805167ffffffffffffffff1684528701518784018790526134d38785018261341b565b958801959350509086019060010161347f565b509098975050505050505050565b6000806000806080858703121561350a57600080fd5b843561351581613057565b9350602085013561352581613079565b9250604085013567ffffffffffffffff81111561354157600080fd5b8501610100818803121561355457600080fd5b9396929550929360600135925050565b60006020828403121561357657600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461259357600080fd5b60008083601f8401126135ac57600080fd5b50813567ffffffffffffffff8111156135c457600080fd5b6020830191508360208260051b850101111561121b57600080fd5b600080600080604085870312156135f557600080fd5b843567ffffffffffffffff8082111561360d57600080fd5b6136198883890161359a565b9096509450602087013591508082111561363257600080fd5b5061363f8782880161359a565b95989497509550505050565b67ffffffffffffffff81168114611e3157600080fd5b80356130748161364b565b6000806000806000806080878903121561368557600080fd5b863567ffffffffffffffff8082111561369d57600080fd5b6136a98a838b0161359a565b909850965060208901359150808211156136c257600080fd5b818901915089601f8301126136d657600080fd5b8135818111156136e557600080fd5b8a60208285010111156136f757600080fd5b60208301965080955050505061370f60408801613661565b915061371d60608801613069565b90509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600181811c9082168061376c57607f821691505b6020821081036137a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417610422576104226137ab565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b80820180821115610422576104226137ab565b81810381811115610422576104226137ab565b6040516060810167ffffffffffffffff81118282101715613869576138696137f1565b60405290565b604051610100810167ffffffffffffffff81118282101715613869576138696137f1565b604051601f8201601f1916810167ffffffffffffffff811182821017156138bc576138bc6137f1565b604052919050565b60ff81168114611e3157600080fd5b8035613074816138c4565b600082601f8301126138ef57600080fd5b813567ffffffffffffffff811115613909576139096137f1565b61391c6020601f19601f84011601613893565b81815284602083860101111561393157600080fd5b816020850160208301376000918101602001919091529392505050565b600067ffffffffffffffff821115613968576139686137f1565b5060051b60200190565b600082601f83011261398357600080fd5b813560206139986139938361394e565b613893565b82815260059290921b840181019181810190868411156139b757600080fd5b8286015b84811015611c1757803567ffffffffffffffff808211156139dc5760008081fd5b8189019150606080601f19848d030112156139f75760008081fd5b6139ff613846565b87840135815260408085013584811115613a195760008081fd5b613a278e8b838901016138de565b838b015250918401359183831115613a3f5760008081fd5b613a4d8d8a858801016138de565b9082015286525050509183019183016139bb565b60006101008236031215613a7457600080fd5b613a7c61386f565b613a8583613086565b8152613a9360208401613661565b6020820152613aa4604084016138d3565b6040820152613ab560608401613661565b6060820152608083013567ffffffffffffffff80821115613ad557600080fd5b613ae1368387016138de565b608084015260a0850135915080821115613afa57600080fd5b613b06368387016138de565b60a084015260c0850135915080821115613b1f57600080fd5b613b2b36838701613972565b60c084015260e0850135915080821115613b4457600080fd5b50613b51368286016138de565b60e08301525092915050565b600063ffffffff808316818103613b7657613b766137ab565b6001019392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613bb557600080fd5b830160208101925035905067ffffffffffffffff811115613bd557600080fd5b80360382131561121b57600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613c4457600080fd5b830160208101925035905067ffffffffffffffff811115613c6457600080fd5b8060051b360382131561121b57600080fd5b60008383855260208086019550808560051b830101846000805b88811015613d3457601f19868503018a5282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1893603018112613cd2578283fd5b8801803585526060613ce687830183613b80565b8289890152613cf88389018284613be4565b925050506040613d0a81840184613b80565b935087830382890152613d1e838583613be4565b9d89019d97505050938601935050600101613c90565b509198975050505050505050565b6000610100613d5984613d5485613086565b613101565b613d6560208401613661565b67ffffffffffffffff166020850152613d80604084016138d3565b60ff166040850152613d9460608401613661565b67ffffffffffffffff166060850152613db06080840184613b80565b826080870152613dc38387018284613be4565b92505050613dd460a0840184613b80565b85830360a0870152613de7838284613be4565b92505050613df860c0840184613c0f565b85830360c0870152613e0b838284613c76565b92505050613e1c60e0840184613b80565b85830360e0870152613e2f838284613be4565b9695505050505050565b6020815260006125936020830184613d42565b600081356104228161364b565b60008135610422816138c4565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613e9b57600080fd5b83018035915067ffffffffffffffff821115613eb657600080fd5b60200191503681900382131561121b57600080fd5b5b81811015612cbf5760008155600101613ecc565b601f821115613f1957806000526020600020601f840160051c81016020851015613f075750805b6121cc601f850160051c830182613ecb565b505050565b67ffffffffffffffff831115613f3657613f366137f1565b613f4a83613f448354613758565b83613ee0565b6000601f841160018114613f9c5760008515613f665750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556121cc565b600083815260209020601f19861690835b82811015613fcd5786850135825560209485019460019092019101613fad565b5086821015614008577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261404f57600080fd5b83018035915067ffffffffffffffff82111561406a57600080fd5b6020019150600581901b360382131561121b57600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18336030181126140b657600080fd5b9190910192915050565b6140ca8154613758565b8015612cbf57601f8111600181146140e457505060009055565b826000526020600020614102601f840160051c820160018301613ecb565b60008085559055505050565b81358155600180820160206141266020860186613e66565b67ffffffffffffffff81111561413e5761413e6137f1565b6141528161414c8654613758565b86613ee0565b6000601f8211600181146141a4576000831561416e5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178655614219565b600086815260209020601f19841690835b828110156141d257868501358255938701939089019087016141b5565b508482101561420d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88660031b161c19848701351681555b505060018360011b0186555b5050505050505061422d6040830183613e66565b61423b818360028601613f1e565b50505050565b6801000000000000000083111561425a5761425a6137f1565b8054838255808410156142d95760038160030260038104831461427f5761427f6137ab565b85600302600381048714614295576142956137ab565b6000858152602081209283019291909101905b828210156142d4578082556142bf600183016140c0565b6142cb600283016140c0565b908301906142a8565b505050505b5060008181526020812083915b85811015614317576143016142fb8487614082565b8361410e565b60209290920191600391909101906001016142e6565b505050505050565b813561432a81613079565b60028110614361577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541660ff82168117835550506143d861439e60208401613e4c565b82547fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff1660089190911b68ffffffffffffffff0016178255565b6144226143e760408401613e59565b82547fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff1660489190911b69ff00000000000000000016178255565b61447461443160608401613e4c565b82547fffffffffffffffffffffffffffff0000000000000000ffffffffffffffffffff1660509190911b71ffffffffffffffff0000000000000000000016178255565b6144816080830183613e66565b61448f818360018601613f1e565b505061449e60a0830183613e66565b6144ac818360028601613f1e565b50506144bb60c083018361401a565b6144c9818360038601614241565b50506144d860e0830183613e66565b61423b818360048601613f1e565b63ffffffff831681526040602082015260006145056040830184613d42565b949350505050565b60006020828403121561451f57600080fd5b81356125938161364b565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18336030181126140b657600080fd5b60006060823603121561457057600080fd5b614578613846565b823567ffffffffffffffff8082111561459057600080fd5b9084019036601f8301126145a357600080fd5b813560206145b36139938361394e565b82815260059290921b840181019181810190368411156145d257600080fd5b948201945b838610156145f0578535825294820194908201906145d7565b8652506145fe8782016138d3565b9085015250604085013591508082111561461757600080fd5b50614624368286016138de565b60408301525092915050565b815167ffffffffffffffff81111561464a5761464a6137f1565b61465e816146588454613758565b84613ee0565b602080601f8311600181146146b1576000841561467b5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614317565b600085815260208120601f198616915b828110156146e0578886015182559484019460019091019084016146c1565b508582101561471c57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff83168152604060208201526000614505604083018461341b565b6000808585111561475f57600080fd5b8386111561476c57600080fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156147b95780818660040360031b1b83161692505b505092915050565b6000602082840312156147d357600080fd5b5035919050565b8183823760009101908152919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361481b5761481b6137ab565b5060010190565b602081526000612593602083018461313c565b8681526020810186905273ffffffffffffffffffffffffffffffffffffffff8516604082015263ffffffff848116606083015260c082019061487a6080840186613101565b80841660a084015250979650505050505050565b600083516148a0818460208801612ff4565b8351908301906148b4818360208801612ff4565b01949350505050565b60208152600061259360208301846133df565b805161307481613057565b600082601f8301126148ec57600080fd5b815160206148fc6139938361394e565b8083825260208201915060208460051b87010193508684111561491e57600080fd5b602086015b84811015611c175780518352918301918301614923565b6000602080838503121561494d57600080fd5b825167ffffffffffffffff8082111561496557600080fd5b818501915085601f83011261497957600080fd5b81516149876139938261394e565b81815260059190911b830184019084810190888311156149a657600080fd5b8585015b83811015614a89578051858111156149c157600080fd5b8601610100818c03601f19018113156149d957600080fd5b6149e161386f565b6149ec8a84016148d0565b81526149fa604084016148d0565b8a820152614a0a606084016148d0565b60408201526080830151606082015260a0830151608082015260c083015160a082015260e08084015189811115614a415760008081fd5b614a4f8f8d838801016148db565b60c084015250918301519188831115614a685760008081fd5b614a768e8c858701016148db565b90820152855250509186019186016149aa565b5098975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", +} + +var CCIPHomeABI = CCIPHomeMetaData.ABI + +var CCIPHomeBin = CCIPHomeMetaData.Bin + +func DeployCCIPHome(auth *bind.TransactOpts, backend bind.ContractBackend, capabilitiesRegistry common.Address) (common.Address, *generated_zks.Transaction, *CCIPHome, error) { + parsed, err := CCIPHomeMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(CCIPHomeZKBin), backend, capabilitiesRegistry) + contractReturn := &CCIPHome{address: address, abi: *parsed, CCIPHomeCaller: CCIPHomeCaller{contract: contractBind}, CCIPHomeTransactor: CCIPHomeTransactor{contract: contractBind}, CCIPHomeFilterer: CCIPHomeFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(CCIPHomeBin), backend, capabilitiesRegistry) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &CCIPHome{address: address, abi: *parsed, CCIPHomeCaller: CCIPHomeCaller{contract: contract}, CCIPHomeTransactor: CCIPHomeTransactor{contract: contract}, CCIPHomeFilterer: CCIPHomeFilterer{contract: contract}}, nil +} + +type CCIPHome struct { + address common.Address + abi abi.ABI + CCIPHomeCaller + CCIPHomeTransactor + CCIPHomeFilterer +} + +type CCIPHomeCaller struct { + contract *bind.BoundContract +} + +type CCIPHomeTransactor struct { + contract *bind.BoundContract +} + +type CCIPHomeFilterer struct { + contract *bind.BoundContract +} + +type CCIPHomeSession struct { + Contract *CCIPHome + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type CCIPHomeCallerSession struct { + Contract *CCIPHomeCaller + CallOpts bind.CallOpts +} + +type CCIPHomeTransactorSession struct { + Contract *CCIPHomeTransactor + TransactOpts bind.TransactOpts +} + +type CCIPHomeRaw struct { + Contract *CCIPHome +} + +type CCIPHomeCallerRaw struct { + Contract *CCIPHomeCaller +} + +type CCIPHomeTransactorRaw struct { + Contract *CCIPHomeTransactor +} + +func NewCCIPHome(address common.Address, backend bind.ContractBackend) (*CCIPHome, error) { + abi, err := abi.JSON(strings.NewReader(CCIPHomeABI)) + if err != nil { + return nil, err + } + contract, err := bindCCIPHome(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &CCIPHome{address: address, abi: abi, CCIPHomeCaller: CCIPHomeCaller{contract: contract}, CCIPHomeTransactor: CCIPHomeTransactor{contract: contract}, CCIPHomeFilterer: CCIPHomeFilterer{contract: contract}}, nil +} + +func NewCCIPHomeCaller(address common.Address, caller bind.ContractCaller) (*CCIPHomeCaller, error) { + contract, err := bindCCIPHome(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &CCIPHomeCaller{contract: contract}, nil +} + +func NewCCIPHomeTransactor(address common.Address, transactor bind.ContractTransactor) (*CCIPHomeTransactor, error) { + contract, err := bindCCIPHome(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &CCIPHomeTransactor{contract: contract}, nil +} + +func NewCCIPHomeFilterer(address common.Address, filterer bind.ContractFilterer) (*CCIPHomeFilterer, error) { + contract, err := bindCCIPHome(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &CCIPHomeFilterer{contract: contract}, nil +} + +func bindCCIPHome(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := CCIPHomeMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_CCIPHome *CCIPHomeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _CCIPHome.Contract.CCIPHomeCaller.contract.Call(opts, result, method, params...) +} + +func (_CCIPHome *CCIPHomeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CCIPHome.Contract.CCIPHomeTransactor.contract.Transfer(opts) +} + +func (_CCIPHome *CCIPHomeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _CCIPHome.Contract.CCIPHomeTransactor.contract.Transact(opts, method, params...) +} + +func (_CCIPHome *CCIPHomeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _CCIPHome.Contract.contract.Call(opts, result, method, params...) +} + +func (_CCIPHome *CCIPHomeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CCIPHome.Contract.contract.Transfer(opts) +} + +func (_CCIPHome *CCIPHomeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _CCIPHome.Contract.contract.Transact(opts, method, params...) +} + +func (_CCIPHome *CCIPHomeCaller) GetActiveDigest(opts *bind.CallOpts, donId uint32, pluginType uint8) ([32]byte, error) { + var out []interface{} + err := _CCIPHome.contract.Call(opts, &out, "getActiveDigest", donId, pluginType) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +func (_CCIPHome *CCIPHomeSession) GetActiveDigest(donId uint32, pluginType uint8) ([32]byte, error) { + return _CCIPHome.Contract.GetActiveDigest(&_CCIPHome.CallOpts, donId, pluginType) +} + +func (_CCIPHome *CCIPHomeCallerSession) GetActiveDigest(donId uint32, pluginType uint8) ([32]byte, error) { + return _CCIPHome.Contract.GetActiveDigest(&_CCIPHome.CallOpts, donId, pluginType) +} + +func (_CCIPHome *CCIPHomeCaller) GetAllChainConfigs(opts *bind.CallOpts, pageIndex *big.Int, pageSize *big.Int) ([]CCIPHomeChainConfigArgs, error) { + var out []interface{} + err := _CCIPHome.contract.Call(opts, &out, "getAllChainConfigs", pageIndex, pageSize) + + if err != nil { + return *new([]CCIPHomeChainConfigArgs), err + } + + out0 := *abi.ConvertType(out[0], new([]CCIPHomeChainConfigArgs)).(*[]CCIPHomeChainConfigArgs) + + return out0, err + +} + +func (_CCIPHome *CCIPHomeSession) GetAllChainConfigs(pageIndex *big.Int, pageSize *big.Int) ([]CCIPHomeChainConfigArgs, error) { + return _CCIPHome.Contract.GetAllChainConfigs(&_CCIPHome.CallOpts, pageIndex, pageSize) +} + +func (_CCIPHome *CCIPHomeCallerSession) GetAllChainConfigs(pageIndex *big.Int, pageSize *big.Int) ([]CCIPHomeChainConfigArgs, error) { + return _CCIPHome.Contract.GetAllChainConfigs(&_CCIPHome.CallOpts, pageIndex, pageSize) +} + +func (_CCIPHome *CCIPHomeCaller) GetAllConfigs(opts *bind.CallOpts, donId uint32, pluginType uint8) (GetAllConfigs, + + error) { + var out []interface{} + err := _CCIPHome.contract.Call(opts, &out, "getAllConfigs", donId, pluginType) + + outstruct := new(GetAllConfigs) + if err != nil { + return *outstruct, err + } + + outstruct.ActiveConfig = *abi.ConvertType(out[0], new(CCIPHomeVersionedConfig)).(*CCIPHomeVersionedConfig) + outstruct.CandidateConfig = *abi.ConvertType(out[1], new(CCIPHomeVersionedConfig)).(*CCIPHomeVersionedConfig) + + return *outstruct, err + +} + +func (_CCIPHome *CCIPHomeSession) GetAllConfigs(donId uint32, pluginType uint8) (GetAllConfigs, + + error) { + return _CCIPHome.Contract.GetAllConfigs(&_CCIPHome.CallOpts, donId, pluginType) +} + +func (_CCIPHome *CCIPHomeCallerSession) GetAllConfigs(donId uint32, pluginType uint8) (GetAllConfigs, + + error) { + return _CCIPHome.Contract.GetAllConfigs(&_CCIPHome.CallOpts, donId, pluginType) +} + +func (_CCIPHome *CCIPHomeCaller) GetCandidateDigest(opts *bind.CallOpts, donId uint32, pluginType uint8) ([32]byte, error) { + var out []interface{} + err := _CCIPHome.contract.Call(opts, &out, "getCandidateDigest", donId, pluginType) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +func (_CCIPHome *CCIPHomeSession) GetCandidateDigest(donId uint32, pluginType uint8) ([32]byte, error) { + return _CCIPHome.Contract.GetCandidateDigest(&_CCIPHome.CallOpts, donId, pluginType) +} + +func (_CCIPHome *CCIPHomeCallerSession) GetCandidateDigest(donId uint32, pluginType uint8) ([32]byte, error) { + return _CCIPHome.Contract.GetCandidateDigest(&_CCIPHome.CallOpts, donId, pluginType) +} + +func (_CCIPHome *CCIPHomeCaller) GetCapabilityConfiguration(opts *bind.CallOpts, arg0 uint32) ([]byte, error) { + var out []interface{} + err := _CCIPHome.contract.Call(opts, &out, "getCapabilityConfiguration", arg0) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +func (_CCIPHome *CCIPHomeSession) GetCapabilityConfiguration(arg0 uint32) ([]byte, error) { + return _CCIPHome.Contract.GetCapabilityConfiguration(&_CCIPHome.CallOpts, arg0) +} + +func (_CCIPHome *CCIPHomeCallerSession) GetCapabilityConfiguration(arg0 uint32) ([]byte, error) { + return _CCIPHome.Contract.GetCapabilityConfiguration(&_CCIPHome.CallOpts, arg0) +} + +func (_CCIPHome *CCIPHomeCaller) GetCapabilityRegistry(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _CCIPHome.contract.Call(opts, &out, "getCapabilityRegistry") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_CCIPHome *CCIPHomeSession) GetCapabilityRegistry() (common.Address, error) { + return _CCIPHome.Contract.GetCapabilityRegistry(&_CCIPHome.CallOpts) +} + +func (_CCIPHome *CCIPHomeCallerSession) GetCapabilityRegistry() (common.Address, error) { + return _CCIPHome.Contract.GetCapabilityRegistry(&_CCIPHome.CallOpts) +} + +func (_CCIPHome *CCIPHomeCaller) GetConfig(opts *bind.CallOpts, donId uint32, pluginType uint8, configDigest [32]byte) (GetConfig, + + error) { + var out []interface{} + err := _CCIPHome.contract.Call(opts, &out, "getConfig", donId, pluginType, configDigest) + + outstruct := new(GetConfig) + if err != nil { + return *outstruct, err + } + + outstruct.VersionedConfig = *abi.ConvertType(out[0], new(CCIPHomeVersionedConfig)).(*CCIPHomeVersionedConfig) + outstruct.Ok = *abi.ConvertType(out[1], new(bool)).(*bool) + + return *outstruct, err + +} + +func (_CCIPHome *CCIPHomeSession) GetConfig(donId uint32, pluginType uint8, configDigest [32]byte) (GetConfig, + + error) { + return _CCIPHome.Contract.GetConfig(&_CCIPHome.CallOpts, donId, pluginType, configDigest) +} + +func (_CCIPHome *CCIPHomeCallerSession) GetConfig(donId uint32, pluginType uint8, configDigest [32]byte) (GetConfig, + + error) { + return _CCIPHome.Contract.GetConfig(&_CCIPHome.CallOpts, donId, pluginType, configDigest) +} + +func (_CCIPHome *CCIPHomeCaller) GetConfigDigests(opts *bind.CallOpts, donId uint32, pluginType uint8) (GetConfigDigests, + + error) { + var out []interface{} + err := _CCIPHome.contract.Call(opts, &out, "getConfigDigests", donId, pluginType) + + outstruct := new(GetConfigDigests) + if err != nil { + return *outstruct, err + } + + outstruct.ActiveConfigDigest = *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + outstruct.CandidateConfigDigest = *abi.ConvertType(out[1], new([32]byte)).(*[32]byte) + + return *outstruct, err + +} + +func (_CCIPHome *CCIPHomeSession) GetConfigDigests(donId uint32, pluginType uint8) (GetConfigDigests, + + error) { + return _CCIPHome.Contract.GetConfigDigests(&_CCIPHome.CallOpts, donId, pluginType) +} + +func (_CCIPHome *CCIPHomeCallerSession) GetConfigDigests(donId uint32, pluginType uint8) (GetConfigDigests, + + error) { + return _CCIPHome.Contract.GetConfigDigests(&_CCIPHome.CallOpts, donId, pluginType) +} + +func (_CCIPHome *CCIPHomeCaller) GetNumChainConfigurations(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _CCIPHome.contract.Call(opts, &out, "getNumChainConfigurations") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_CCIPHome *CCIPHomeSession) GetNumChainConfigurations() (*big.Int, error) { + return _CCIPHome.Contract.GetNumChainConfigurations(&_CCIPHome.CallOpts) +} + +func (_CCIPHome *CCIPHomeCallerSession) GetNumChainConfigurations() (*big.Int, error) { + return _CCIPHome.Contract.GetNumChainConfigurations(&_CCIPHome.CallOpts) +} + +func (_CCIPHome *CCIPHomeCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _CCIPHome.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 + +} + +func (_CCIPHome *CCIPHomeSession) Owner() (common.Address, error) { + return _CCIPHome.Contract.Owner(&_CCIPHome.CallOpts) +} + +func (_CCIPHome *CCIPHomeCallerSession) Owner() (common.Address, error) { + return _CCIPHome.Contract.Owner(&_CCIPHome.CallOpts) +} + +func (_CCIPHome *CCIPHomeCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _CCIPHome.contract.Call(opts, &out, "supportsInterface", interfaceId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_CCIPHome *CCIPHomeSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _CCIPHome.Contract.SupportsInterface(&_CCIPHome.CallOpts, interfaceId) +} + +func (_CCIPHome *CCIPHomeCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _CCIPHome.Contract.SupportsInterface(&_CCIPHome.CallOpts, interfaceId) +} + +func (_CCIPHome *CCIPHomeCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _CCIPHome.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_CCIPHome *CCIPHomeSession) TypeAndVersion() (string, error) { + return _CCIPHome.Contract.TypeAndVersion(&_CCIPHome.CallOpts) +} + +func (_CCIPHome *CCIPHomeCallerSession) TypeAndVersion() (string, error) { + return _CCIPHome.Contract.TypeAndVersion(&_CCIPHome.CallOpts) +} + +func (_CCIPHome *CCIPHomeTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CCIPHome.contract.Transact(opts, "acceptOwnership") +} + +func (_CCIPHome *CCIPHomeSession) AcceptOwnership() (*types.Transaction, error) { + return _CCIPHome.Contract.AcceptOwnership(&_CCIPHome.TransactOpts) +} + +func (_CCIPHome *CCIPHomeTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _CCIPHome.Contract.AcceptOwnership(&_CCIPHome.TransactOpts) +} + +func (_CCIPHome *CCIPHomeTransactor) ApplyChainConfigUpdates(opts *bind.TransactOpts, chainSelectorRemoves []uint64, chainConfigAdds []CCIPHomeChainConfigArgs) (*types.Transaction, error) { + return _CCIPHome.contract.Transact(opts, "applyChainConfigUpdates", chainSelectorRemoves, chainConfigAdds) +} + +func (_CCIPHome *CCIPHomeSession) ApplyChainConfigUpdates(chainSelectorRemoves []uint64, chainConfigAdds []CCIPHomeChainConfigArgs) (*types.Transaction, error) { + return _CCIPHome.Contract.ApplyChainConfigUpdates(&_CCIPHome.TransactOpts, chainSelectorRemoves, chainConfigAdds) +} + +func (_CCIPHome *CCIPHomeTransactorSession) ApplyChainConfigUpdates(chainSelectorRemoves []uint64, chainConfigAdds []CCIPHomeChainConfigArgs) (*types.Transaction, error) { + return _CCIPHome.Contract.ApplyChainConfigUpdates(&_CCIPHome.TransactOpts, chainSelectorRemoves, chainConfigAdds) +} + +func (_CCIPHome *CCIPHomeTransactor) BeforeCapabilityConfigSet(opts *bind.TransactOpts, arg0 [][32]byte, update []byte, arg2 uint64, donId uint32) (*types.Transaction, error) { + return _CCIPHome.contract.Transact(opts, "beforeCapabilityConfigSet", arg0, update, arg2, donId) +} + +func (_CCIPHome *CCIPHomeSession) BeforeCapabilityConfigSet(arg0 [][32]byte, update []byte, arg2 uint64, donId uint32) (*types.Transaction, error) { + return _CCIPHome.Contract.BeforeCapabilityConfigSet(&_CCIPHome.TransactOpts, arg0, update, arg2, donId) +} + +func (_CCIPHome *CCIPHomeTransactorSession) BeforeCapabilityConfigSet(arg0 [][32]byte, update []byte, arg2 uint64, donId uint32) (*types.Transaction, error) { + return _CCIPHome.Contract.BeforeCapabilityConfigSet(&_CCIPHome.TransactOpts, arg0, update, arg2, donId) +} + +func (_CCIPHome *CCIPHomeTransactor) PromoteCandidateAndRevokeActive(opts *bind.TransactOpts, donId uint32, pluginType uint8, digestToPromote [32]byte, digestToRevoke [32]byte) (*types.Transaction, error) { + return _CCIPHome.contract.Transact(opts, "promoteCandidateAndRevokeActive", donId, pluginType, digestToPromote, digestToRevoke) +} + +func (_CCIPHome *CCIPHomeSession) PromoteCandidateAndRevokeActive(donId uint32, pluginType uint8, digestToPromote [32]byte, digestToRevoke [32]byte) (*types.Transaction, error) { + return _CCIPHome.Contract.PromoteCandidateAndRevokeActive(&_CCIPHome.TransactOpts, donId, pluginType, digestToPromote, digestToRevoke) +} + +func (_CCIPHome *CCIPHomeTransactorSession) PromoteCandidateAndRevokeActive(donId uint32, pluginType uint8, digestToPromote [32]byte, digestToRevoke [32]byte) (*types.Transaction, error) { + return _CCIPHome.Contract.PromoteCandidateAndRevokeActive(&_CCIPHome.TransactOpts, donId, pluginType, digestToPromote, digestToRevoke) +} + +func (_CCIPHome *CCIPHomeTransactor) RevokeCandidate(opts *bind.TransactOpts, donId uint32, pluginType uint8, configDigest [32]byte) (*types.Transaction, error) { + return _CCIPHome.contract.Transact(opts, "revokeCandidate", donId, pluginType, configDigest) +} + +func (_CCIPHome *CCIPHomeSession) RevokeCandidate(donId uint32, pluginType uint8, configDigest [32]byte) (*types.Transaction, error) { + return _CCIPHome.Contract.RevokeCandidate(&_CCIPHome.TransactOpts, donId, pluginType, configDigest) +} + +func (_CCIPHome *CCIPHomeTransactorSession) RevokeCandidate(donId uint32, pluginType uint8, configDigest [32]byte) (*types.Transaction, error) { + return _CCIPHome.Contract.RevokeCandidate(&_CCIPHome.TransactOpts, donId, pluginType, configDigest) +} + +func (_CCIPHome *CCIPHomeTransactor) SetCandidate(opts *bind.TransactOpts, donId uint32, pluginType uint8, config CCIPHomeOCR3Config, digestToOverwrite [32]byte) (*types.Transaction, error) { + return _CCIPHome.contract.Transact(opts, "setCandidate", donId, pluginType, config, digestToOverwrite) +} + +func (_CCIPHome *CCIPHomeSession) SetCandidate(donId uint32, pluginType uint8, config CCIPHomeOCR3Config, digestToOverwrite [32]byte) (*types.Transaction, error) { + return _CCIPHome.Contract.SetCandidate(&_CCIPHome.TransactOpts, donId, pluginType, config, digestToOverwrite) +} + +func (_CCIPHome *CCIPHomeTransactorSession) SetCandidate(donId uint32, pluginType uint8, config CCIPHomeOCR3Config, digestToOverwrite [32]byte) (*types.Transaction, error) { + return _CCIPHome.Contract.SetCandidate(&_CCIPHome.TransactOpts, donId, pluginType, config, digestToOverwrite) +} + +func (_CCIPHome *CCIPHomeTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _CCIPHome.contract.Transact(opts, "transferOwnership", to) +} + +func (_CCIPHome *CCIPHomeSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _CCIPHome.Contract.TransferOwnership(&_CCIPHome.TransactOpts, to) +} + +func (_CCIPHome *CCIPHomeTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _CCIPHome.Contract.TransferOwnership(&_CCIPHome.TransactOpts, to) +} + +type CCIPHomeActiveConfigRevokedIterator struct { + Event *CCIPHomeActiveConfigRevoked + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPHomeActiveConfigRevokedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPHomeActiveConfigRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(CCIPHomeActiveConfigRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *CCIPHomeActiveConfigRevokedIterator) Error() error { + return it.fail +} + +func (it *CCIPHomeActiveConfigRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPHomeActiveConfigRevoked struct { + ConfigDigest [32]byte + Raw types.Log +} + +func (_CCIPHome *CCIPHomeFilterer) FilterActiveConfigRevoked(opts *bind.FilterOpts, configDigest [][32]byte) (*CCIPHomeActiveConfigRevokedIterator, error) { + + var configDigestRule []interface{} + for _, configDigestItem := range configDigest { + configDigestRule = append(configDigestRule, configDigestItem) + } + + logs, sub, err := _CCIPHome.contract.FilterLogs(opts, "ActiveConfigRevoked", configDigestRule) + if err != nil { + return nil, err + } + return &CCIPHomeActiveConfigRevokedIterator{contract: _CCIPHome.contract, event: "ActiveConfigRevoked", logs: logs, sub: sub}, nil +} + +func (_CCIPHome *CCIPHomeFilterer) WatchActiveConfigRevoked(opts *bind.WatchOpts, sink chan<- *CCIPHomeActiveConfigRevoked, configDigest [][32]byte) (event.Subscription, error) { + + var configDigestRule []interface{} + for _, configDigestItem := range configDigest { + configDigestRule = append(configDigestRule, configDigestItem) + } + + logs, sub, err := _CCIPHome.contract.WatchLogs(opts, "ActiveConfigRevoked", configDigestRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPHomeActiveConfigRevoked) + if err := _CCIPHome.contract.UnpackLog(event, "ActiveConfigRevoked", 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 +} + +func (_CCIPHome *CCIPHomeFilterer) ParseActiveConfigRevoked(log types.Log) (*CCIPHomeActiveConfigRevoked, error) { + event := new(CCIPHomeActiveConfigRevoked) + if err := _CCIPHome.contract.UnpackLog(event, "ActiveConfigRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPHomeCandidateConfigRevokedIterator struct { + Event *CCIPHomeCandidateConfigRevoked + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPHomeCandidateConfigRevokedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPHomeCandidateConfigRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(CCIPHomeCandidateConfigRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *CCIPHomeCandidateConfigRevokedIterator) Error() error { + return it.fail +} + +func (it *CCIPHomeCandidateConfigRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPHomeCandidateConfigRevoked struct { + ConfigDigest [32]byte + Raw types.Log +} + +func (_CCIPHome *CCIPHomeFilterer) FilterCandidateConfigRevoked(opts *bind.FilterOpts, configDigest [][32]byte) (*CCIPHomeCandidateConfigRevokedIterator, error) { + + var configDigestRule []interface{} + for _, configDigestItem := range configDigest { + configDigestRule = append(configDigestRule, configDigestItem) + } + + logs, sub, err := _CCIPHome.contract.FilterLogs(opts, "CandidateConfigRevoked", configDigestRule) + if err != nil { + return nil, err + } + return &CCIPHomeCandidateConfigRevokedIterator{contract: _CCIPHome.contract, event: "CandidateConfigRevoked", logs: logs, sub: sub}, nil +} + +func (_CCIPHome *CCIPHomeFilterer) WatchCandidateConfigRevoked(opts *bind.WatchOpts, sink chan<- *CCIPHomeCandidateConfigRevoked, configDigest [][32]byte) (event.Subscription, error) { + + var configDigestRule []interface{} + for _, configDigestItem := range configDigest { + configDigestRule = append(configDigestRule, configDigestItem) + } + + logs, sub, err := _CCIPHome.contract.WatchLogs(opts, "CandidateConfigRevoked", configDigestRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPHomeCandidateConfigRevoked) + if err := _CCIPHome.contract.UnpackLog(event, "CandidateConfigRevoked", 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 +} + +func (_CCIPHome *CCIPHomeFilterer) ParseCandidateConfigRevoked(log types.Log) (*CCIPHomeCandidateConfigRevoked, error) { + event := new(CCIPHomeCandidateConfigRevoked) + if err := _CCIPHome.contract.UnpackLog(event, "CandidateConfigRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPHomeCapabilityConfigurationSetIterator struct { + Event *CCIPHomeCapabilityConfigurationSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPHomeCapabilityConfigurationSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPHomeCapabilityConfigurationSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(CCIPHomeCapabilityConfigurationSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *CCIPHomeCapabilityConfigurationSetIterator) Error() error { + return it.fail +} + +func (it *CCIPHomeCapabilityConfigurationSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPHomeCapabilityConfigurationSet struct { + Raw types.Log +} + +func (_CCIPHome *CCIPHomeFilterer) FilterCapabilityConfigurationSet(opts *bind.FilterOpts) (*CCIPHomeCapabilityConfigurationSetIterator, error) { + + logs, sub, err := _CCIPHome.contract.FilterLogs(opts, "CapabilityConfigurationSet") + if err != nil { + return nil, err + } + return &CCIPHomeCapabilityConfigurationSetIterator{contract: _CCIPHome.contract, event: "CapabilityConfigurationSet", logs: logs, sub: sub}, nil +} + +func (_CCIPHome *CCIPHomeFilterer) WatchCapabilityConfigurationSet(opts *bind.WatchOpts, sink chan<- *CCIPHomeCapabilityConfigurationSet) (event.Subscription, error) { + + logs, sub, err := _CCIPHome.contract.WatchLogs(opts, "CapabilityConfigurationSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPHomeCapabilityConfigurationSet) + if err := _CCIPHome.contract.UnpackLog(event, "CapabilityConfigurationSet", 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 +} + +func (_CCIPHome *CCIPHomeFilterer) ParseCapabilityConfigurationSet(log types.Log) (*CCIPHomeCapabilityConfigurationSet, error) { + event := new(CCIPHomeCapabilityConfigurationSet) + if err := _CCIPHome.contract.UnpackLog(event, "CapabilityConfigurationSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPHomeChainConfigRemovedIterator struct { + Event *CCIPHomeChainConfigRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPHomeChainConfigRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPHomeChainConfigRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(CCIPHomeChainConfigRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *CCIPHomeChainConfigRemovedIterator) Error() error { + return it.fail +} + +func (it *CCIPHomeChainConfigRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPHomeChainConfigRemoved struct { + ChainSelector uint64 + Raw types.Log +} + +func (_CCIPHome *CCIPHomeFilterer) FilterChainConfigRemoved(opts *bind.FilterOpts) (*CCIPHomeChainConfigRemovedIterator, error) { + + logs, sub, err := _CCIPHome.contract.FilterLogs(opts, "ChainConfigRemoved") + if err != nil { + return nil, err + } + return &CCIPHomeChainConfigRemovedIterator{contract: _CCIPHome.contract, event: "ChainConfigRemoved", logs: logs, sub: sub}, nil +} + +func (_CCIPHome *CCIPHomeFilterer) WatchChainConfigRemoved(opts *bind.WatchOpts, sink chan<- *CCIPHomeChainConfigRemoved) (event.Subscription, error) { + + logs, sub, err := _CCIPHome.contract.WatchLogs(opts, "ChainConfigRemoved") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPHomeChainConfigRemoved) + if err := _CCIPHome.contract.UnpackLog(event, "ChainConfigRemoved", 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 +} + +func (_CCIPHome *CCIPHomeFilterer) ParseChainConfigRemoved(log types.Log) (*CCIPHomeChainConfigRemoved, error) { + event := new(CCIPHomeChainConfigRemoved) + if err := _CCIPHome.contract.UnpackLog(event, "ChainConfigRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPHomeChainConfigSetIterator struct { + Event *CCIPHomeChainConfigSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPHomeChainConfigSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPHomeChainConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(CCIPHomeChainConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *CCIPHomeChainConfigSetIterator) Error() error { + return it.fail +} + +func (it *CCIPHomeChainConfigSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPHomeChainConfigSet struct { + ChainSelector uint64 + ChainConfig CCIPHomeChainConfig + Raw types.Log +} + +func (_CCIPHome *CCIPHomeFilterer) FilterChainConfigSet(opts *bind.FilterOpts) (*CCIPHomeChainConfigSetIterator, error) { + + logs, sub, err := _CCIPHome.contract.FilterLogs(opts, "ChainConfigSet") + if err != nil { + return nil, err + } + return &CCIPHomeChainConfigSetIterator{contract: _CCIPHome.contract, event: "ChainConfigSet", logs: logs, sub: sub}, nil +} + +func (_CCIPHome *CCIPHomeFilterer) WatchChainConfigSet(opts *bind.WatchOpts, sink chan<- *CCIPHomeChainConfigSet) (event.Subscription, error) { + + logs, sub, err := _CCIPHome.contract.WatchLogs(opts, "ChainConfigSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPHomeChainConfigSet) + if err := _CCIPHome.contract.UnpackLog(event, "ChainConfigSet", 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 +} + +func (_CCIPHome *CCIPHomeFilterer) ParseChainConfigSet(log types.Log) (*CCIPHomeChainConfigSet, error) { + event := new(CCIPHomeChainConfigSet) + if err := _CCIPHome.contract.UnpackLog(event, "ChainConfigSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPHomeConfigPromotedIterator struct { + Event *CCIPHomeConfigPromoted + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPHomeConfigPromotedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPHomeConfigPromoted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(CCIPHomeConfigPromoted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *CCIPHomeConfigPromotedIterator) Error() error { + return it.fail +} + +func (it *CCIPHomeConfigPromotedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPHomeConfigPromoted struct { + ConfigDigest [32]byte + Raw types.Log +} + +func (_CCIPHome *CCIPHomeFilterer) FilterConfigPromoted(opts *bind.FilterOpts, configDigest [][32]byte) (*CCIPHomeConfigPromotedIterator, error) { + + var configDigestRule []interface{} + for _, configDigestItem := range configDigest { + configDigestRule = append(configDigestRule, configDigestItem) + } + + logs, sub, err := _CCIPHome.contract.FilterLogs(opts, "ConfigPromoted", configDigestRule) + if err != nil { + return nil, err + } + return &CCIPHomeConfigPromotedIterator{contract: _CCIPHome.contract, event: "ConfigPromoted", logs: logs, sub: sub}, nil +} + +func (_CCIPHome *CCIPHomeFilterer) WatchConfigPromoted(opts *bind.WatchOpts, sink chan<- *CCIPHomeConfigPromoted, configDigest [][32]byte) (event.Subscription, error) { + + var configDigestRule []interface{} + for _, configDigestItem := range configDigest { + configDigestRule = append(configDigestRule, configDigestItem) + } + + logs, sub, err := _CCIPHome.contract.WatchLogs(opts, "ConfigPromoted", configDigestRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPHomeConfigPromoted) + if err := _CCIPHome.contract.UnpackLog(event, "ConfigPromoted", 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 +} + +func (_CCIPHome *CCIPHomeFilterer) ParseConfigPromoted(log types.Log) (*CCIPHomeConfigPromoted, error) { + event := new(CCIPHomeConfigPromoted) + if err := _CCIPHome.contract.UnpackLog(event, "ConfigPromoted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPHomeConfigSetIterator struct { + Event *CCIPHomeConfigSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPHomeConfigSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPHomeConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(CCIPHomeConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *CCIPHomeConfigSetIterator) Error() error { + return it.fail +} + +func (it *CCIPHomeConfigSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPHomeConfigSet struct { + ConfigDigest [32]byte + Version uint32 + Config CCIPHomeOCR3Config + Raw types.Log +} + +func (_CCIPHome *CCIPHomeFilterer) FilterConfigSet(opts *bind.FilterOpts, configDigest [][32]byte) (*CCIPHomeConfigSetIterator, error) { + + var configDigestRule []interface{} + for _, configDigestItem := range configDigest { + configDigestRule = append(configDigestRule, configDigestItem) + } + + logs, sub, err := _CCIPHome.contract.FilterLogs(opts, "ConfigSet", configDigestRule) + if err != nil { + return nil, err + } + return &CCIPHomeConfigSetIterator{contract: _CCIPHome.contract, event: "ConfigSet", logs: logs, sub: sub}, nil +} + +func (_CCIPHome *CCIPHomeFilterer) WatchConfigSet(opts *bind.WatchOpts, sink chan<- *CCIPHomeConfigSet, configDigest [][32]byte) (event.Subscription, error) { + + var configDigestRule []interface{} + for _, configDigestItem := range configDigest { + configDigestRule = append(configDigestRule, configDigestItem) + } + + logs, sub, err := _CCIPHome.contract.WatchLogs(opts, "ConfigSet", configDigestRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPHomeConfigSet) + if err := _CCIPHome.contract.UnpackLog(event, "ConfigSet", 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 +} + +func (_CCIPHome *CCIPHomeFilterer) ParseConfigSet(log types.Log) (*CCIPHomeConfigSet, error) { + event := new(CCIPHomeConfigSet) + if err := _CCIPHome.contract.UnpackLog(event, "ConfigSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPHomeOwnershipTransferRequestedIterator struct { + Event *CCIPHomeOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPHomeOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPHomeOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(CCIPHomeOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *CCIPHomeOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *CCIPHomeOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPHomeOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_CCIPHome *CCIPHomeFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*CCIPHomeOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _CCIPHome.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &CCIPHomeOwnershipTransferRequestedIterator{contract: _CCIPHome.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_CCIPHome *CCIPHomeFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *CCIPHomeOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _CCIPHome.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPHomeOwnershipTransferRequested) + if err := _CCIPHome.contract.UnpackLog(event, "OwnershipTransferRequested", 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 +} + +func (_CCIPHome *CCIPHomeFilterer) ParseOwnershipTransferRequested(log types.Log) (*CCIPHomeOwnershipTransferRequested, error) { + event := new(CCIPHomeOwnershipTransferRequested) + if err := _CCIPHome.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPHomeOwnershipTransferredIterator struct { + Event *CCIPHomeOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPHomeOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPHomeOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(CCIPHomeOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *CCIPHomeOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *CCIPHomeOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPHomeOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_CCIPHome *CCIPHomeFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*CCIPHomeOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _CCIPHome.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &CCIPHomeOwnershipTransferredIterator{contract: _CCIPHome.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_CCIPHome *CCIPHomeFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *CCIPHomeOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _CCIPHome.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPHomeOwnershipTransferred) + if err := _CCIPHome.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 +} + +func (_CCIPHome *CCIPHomeFilterer) ParseOwnershipTransferred(log types.Log) (*CCIPHomeOwnershipTransferred, error) { + event := new(CCIPHomeOwnershipTransferred) + if err := _CCIPHome.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type GetAllConfigs struct { + ActiveConfig CCIPHomeVersionedConfig + CandidateConfig CCIPHomeVersionedConfig +} +type GetConfig struct { + VersionedConfig CCIPHomeVersionedConfig + Ok bool +} +type GetConfigDigests struct { + ActiveConfigDigest [32]byte + CandidateConfigDigest [32]byte +} + +func (_CCIPHome *CCIPHome) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _CCIPHome.abi.Events["ActiveConfigRevoked"].ID: + return _CCIPHome.ParseActiveConfigRevoked(log) + case _CCIPHome.abi.Events["CandidateConfigRevoked"].ID: + return _CCIPHome.ParseCandidateConfigRevoked(log) + case _CCIPHome.abi.Events["CapabilityConfigurationSet"].ID: + return _CCIPHome.ParseCapabilityConfigurationSet(log) + case _CCIPHome.abi.Events["ChainConfigRemoved"].ID: + return _CCIPHome.ParseChainConfigRemoved(log) + case _CCIPHome.abi.Events["ChainConfigSet"].ID: + return _CCIPHome.ParseChainConfigSet(log) + case _CCIPHome.abi.Events["ConfigPromoted"].ID: + return _CCIPHome.ParseConfigPromoted(log) + case _CCIPHome.abi.Events["ConfigSet"].ID: + return _CCIPHome.ParseConfigSet(log) + case _CCIPHome.abi.Events["OwnershipTransferRequested"].ID: + return _CCIPHome.ParseOwnershipTransferRequested(log) + case _CCIPHome.abi.Events["OwnershipTransferred"].ID: + return _CCIPHome.ParseOwnershipTransferred(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (CCIPHomeActiveConfigRevoked) Topic() common.Hash { + return common.HexToHash("0x0b31c0055e2d464bef7781994b98c4ff9ef4ae0d05f59feb6a68c42de5e201b8") +} + +func (CCIPHomeCandidateConfigRevoked) Topic() common.Hash { + return common.HexToHash("0x53f5d9228f0a4173bea6e5931c9b3afe6eeb6692ede1d182952970f152534e3b") +} + +func (CCIPHomeCapabilityConfigurationSet) Topic() common.Hash { + return common.HexToHash("0x84ad7751b744c9e2ee77da1d902b428aec7f0a343d67a24bbe2142e6f58a8d0f") +} + +func (CCIPHomeChainConfigRemoved) Topic() common.Hash { + return common.HexToHash("0x2a680691fef3b2d105196805935232c661ce703e92d464ef0b94a7bc62d714f0") +} + +func (CCIPHomeChainConfigSet) Topic() common.Hash { + return common.HexToHash("0x05dd57854af2c291a94ea52e7c43d80bc3be7fa73022f98b735dea86642fa5e0") +} + +func (CCIPHomeConfigPromoted) Topic() common.Hash { + return common.HexToHash("0xfc3e98dbbd47c3fa7c1c05b6ec711caeaf70eca4554192b9ada8fc11a37f298e") +} + +func (CCIPHomeConfigSet) Topic() common.Hash { + return common.HexToHash("0x94f085b7c57ec2a270befd0b7b2ec7452580040edee8bb0fb04609c81f0359c6") +} + +func (CCIPHomeOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (CCIPHomeOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (_CCIPHome *CCIPHome) Address() common.Address { + return _CCIPHome.address +} + +type CCIPHomeInterface interface { + GetActiveDigest(opts *bind.CallOpts, donId uint32, pluginType uint8) ([32]byte, error) + + GetAllChainConfigs(opts *bind.CallOpts, pageIndex *big.Int, pageSize *big.Int) ([]CCIPHomeChainConfigArgs, error) + + GetAllConfigs(opts *bind.CallOpts, donId uint32, pluginType uint8) (GetAllConfigs, + + error) + + GetCandidateDigest(opts *bind.CallOpts, donId uint32, pluginType uint8) ([32]byte, error) + + GetCapabilityConfiguration(opts *bind.CallOpts, arg0 uint32) ([]byte, error) + + GetCapabilityRegistry(opts *bind.CallOpts) (common.Address, error) + + GetConfig(opts *bind.CallOpts, donId uint32, pluginType uint8, configDigest [32]byte) (GetConfig, + + error) + + GetConfigDigests(opts *bind.CallOpts, donId uint32, pluginType uint8) (GetConfigDigests, + + error) + + GetNumChainConfigurations(opts *bind.CallOpts) (*big.Int, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + ApplyChainConfigUpdates(opts *bind.TransactOpts, chainSelectorRemoves []uint64, chainConfigAdds []CCIPHomeChainConfigArgs) (*types.Transaction, error) + + BeforeCapabilityConfigSet(opts *bind.TransactOpts, arg0 [][32]byte, update []byte, arg2 uint64, donId uint32) (*types.Transaction, error) + + PromoteCandidateAndRevokeActive(opts *bind.TransactOpts, donId uint32, pluginType uint8, digestToPromote [32]byte, digestToRevoke [32]byte) (*types.Transaction, error) + + RevokeCandidate(opts *bind.TransactOpts, donId uint32, pluginType uint8, configDigest [32]byte) (*types.Transaction, error) + + SetCandidate(opts *bind.TransactOpts, donId uint32, pluginType uint8, config CCIPHomeOCR3Config, digestToOverwrite [32]byte) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + FilterActiveConfigRevoked(opts *bind.FilterOpts, configDigest [][32]byte) (*CCIPHomeActiveConfigRevokedIterator, error) + + WatchActiveConfigRevoked(opts *bind.WatchOpts, sink chan<- *CCIPHomeActiveConfigRevoked, configDigest [][32]byte) (event.Subscription, error) + + ParseActiveConfigRevoked(log types.Log) (*CCIPHomeActiveConfigRevoked, error) + + FilterCandidateConfigRevoked(opts *bind.FilterOpts, configDigest [][32]byte) (*CCIPHomeCandidateConfigRevokedIterator, error) + + WatchCandidateConfigRevoked(opts *bind.WatchOpts, sink chan<- *CCIPHomeCandidateConfigRevoked, configDigest [][32]byte) (event.Subscription, error) + + ParseCandidateConfigRevoked(log types.Log) (*CCIPHomeCandidateConfigRevoked, error) + + FilterCapabilityConfigurationSet(opts *bind.FilterOpts) (*CCIPHomeCapabilityConfigurationSetIterator, error) + + WatchCapabilityConfigurationSet(opts *bind.WatchOpts, sink chan<- *CCIPHomeCapabilityConfigurationSet) (event.Subscription, error) + + ParseCapabilityConfigurationSet(log types.Log) (*CCIPHomeCapabilityConfigurationSet, error) + + FilterChainConfigRemoved(opts *bind.FilterOpts) (*CCIPHomeChainConfigRemovedIterator, error) + + WatchChainConfigRemoved(opts *bind.WatchOpts, sink chan<- *CCIPHomeChainConfigRemoved) (event.Subscription, error) + + ParseChainConfigRemoved(log types.Log) (*CCIPHomeChainConfigRemoved, error) + + FilterChainConfigSet(opts *bind.FilterOpts) (*CCIPHomeChainConfigSetIterator, error) + + WatchChainConfigSet(opts *bind.WatchOpts, sink chan<- *CCIPHomeChainConfigSet) (event.Subscription, error) + + ParseChainConfigSet(log types.Log) (*CCIPHomeChainConfigSet, error) + + FilterConfigPromoted(opts *bind.FilterOpts, configDigest [][32]byte) (*CCIPHomeConfigPromotedIterator, error) + + WatchConfigPromoted(opts *bind.WatchOpts, sink chan<- *CCIPHomeConfigPromoted, configDigest [][32]byte) (event.Subscription, error) + + ParseConfigPromoted(log types.Log) (*CCIPHomeConfigPromoted, error) + + FilterConfigSet(opts *bind.FilterOpts, configDigest [][32]byte) (*CCIPHomeConfigSetIterator, error) + + WatchConfigSet(opts *bind.WatchOpts, sink chan<- *CCIPHomeConfigSet, configDigest [][32]byte) (event.Subscription, error) + + ParseConfigSet(log types.Log) (*CCIPHomeConfigSet, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*CCIPHomeOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *CCIPHomeOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*CCIPHomeOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*CCIPHomeOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *CCIPHomeOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*CCIPHomeOwnershipTransferred, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var CCIPHomeZKBin string = ("0x0004000000000002001b0000000000020000006004100270000007ff0340019700030000003103550002000000010355000007ff0040019d0000000100200190000000220000c13d0000008005000039000000400050043f000000040030008c000000450000413d000000000201043b000000e002200270000008090020009c000000470000a13d0000080a0020009c0000006c0000213d000008110020009c000001d00000a13d000008120020009c000007400000613d000008130020009c0000037a0000613d000008140020009c000000450000c13d0000000001000416000000000001004b000000450000c13d00000000010300191ff91ef90000040f1ff91f3c0000040f000003560000013d0000000002000416000000000002004b000000450000c13d0000001f023000390000080002200197000000a002200039000000400020043f0000001f0430018f0000080105300198000000a002500039000000330000613d000000a006000039000000000701034f000000007807043c0000000006860436000000000026004b0000002f0000c13d000000000004004b000000400000613d000000000151034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000200030008c000000450000413d000000a00100043d000008020010009c000000f10000a13d000000000100001900001ffb00010430000008170020009c000000f70000a13d000008180020009c0000018e0000a13d000008190020009c0000035d0000613d0000081a0020009c000003360000613d0000081b0020009c000000450000c13d000000640030008c000000450000413d0000000002000416000000000002004b000000450000c13d0000000402100370000000000202043b001900000002001d000007ff0020009c000000450000213d0000002402100370000000000202043b001800000002001d000000010020008c000000450000213d0000004401100370000000000301043b00000000010004100000000002000411000000000012004b000007c70000c13d000000000003004b000008e50000c13d0000086401000041000000800010043f000008400100004100001ffb000104300000080b0020009c000001dc0000a13d0000080c0020009c000007570000613d0000080d0020009c000003830000613d0000080e0020009c000000450000c13d000000840030008c000000450000413d0000000002000416000000000002004b000000450000c13d0000000402100370000000000202043b000008230020009c000000450000213d0000002304200039000000000034004b000000450000813d0000000404200039000000000441034f000000000404043b000008230040009c000000450000213d000000050440021000000000024200190000002402200039000000000032004b000000450000213d0000002402100370000000000202043b000008230020009c000000450000213d0000002304200039000000000034004b000000450000813d001800040020003d0000001804100360000000000404043b001900000004001d000008230040009c000000450000213d00000019022000290000002402200039000000000032004b000000450000213d0000004402100370000000000202043b000008230020009c000000450000213d0000006401100370000000000101043b001700000001001d000007ff0010009c000000450000213d001600000005001d000008240100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000007ff0010009c000007ff01008041000000c00110021000000825011001c700008005020000391ff91ff40000040f0000000100200190000018ea0000613d000000000101043b00000802011001970000000002000411000000000012004b00000bd40000c13d0000001901000029000000040010008c000000450000413d000000180100002900000020031000390000000201000367000000000231034f000000000402043b0000082704400197000008280040009c000000c70000613d000008290040009c000000c70000613d0000082a0040009c00000c490000c13d0000001904000029000000240040008c000000450000413d0000000403300039000000000331034f000000400100043d000000000303043b000000170030006c00000c530000c13d00000019030000290000086f043001980000001f0530018f0000000003410019000000db0000613d000000000602034f0000000007010019000000006806043c0000000007870436000000000037004b000000d70000c13d000000000005004b000000e80000613d000000000242034f0000000304500210000000000503043300000000054501cf000000000545022f000000000202043b0000010004400089000000000242022f00000000024201cf000000000252019f00000000002304350000001902100029000000000002043500000000030004140000000002000410000000040020008c00000cf00000c13d0000000101000031000000000200001900000d020000013d0000000003000411000000000003004b0000010b0000c13d000000400100043d0000080802000041000001180000013d0000081e0020009c0000011e0000213d000008210020009c000003110000613d000008220020009c000000450000c13d0000000001000416000000000001004b000000450000c13d0000000001000412001b00000001001d001a00000000003d0000800501000039000000440300003900000000040004150000001b0440008a000000050440021000000824020000411ff91fd10000040f0000037f0000013d00000802001001980000000102000039000000000402041a0000080304400197000000000334019f000000000032041b0000000603000039000000000403041a0000080404400197000000000043041b000003090000c13d000000400100043d00000806020000410000000000210435000007ff0010009c000007ff01008041000000400110021000000807011001c700001ffb000104300000081f0020009c000003220000613d000008200020009c000000450000c13d000000640030008c000000450000413d0000000002000416000000000002004b000000450000c13d0000000402100370000000000202043b001700000002001d000007ff0020009c000000450000213d0000002402100370000000000202043b001600000002001d000000010020008c000000450000213d0000004401100370000000000101043b001500000001001d000000800000043f000000a00000043f000001e001000039000000400010043f000000e00000043f000001000000043f000001200000043f000001400000043f0000006001000039000001600010043f000001800010043f000001a00010043f000001c00010043f000000e001000039000000c00010043f00000001060000390000801002000039001000800000003d00000000050600190000000004000019001900000006001d001800000005001d001400000004001d0000001701000029000000000010043f0000000501000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c71ff91ff40000040f0000000100200190000000450000613d000000000101043b0000001602000029000000000020043f000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b0000001901100029000000000101041a000000150010006c00000000010000390000000101006039000000150000006b0000000002000039000000010200c039000000000112016f000000010010008c000009400000613d000000180200002900000001002001900000000806000039000000000500001900000007040000390000801002000039000001480000c13d000f00000001001d000000400200043d001800000002001d00000040010000390000000001120436001900000001001d000000400220003900000010010000291ff91e450000040f0000000f02000029000000010220018f0000001903000029000000000023043500000018020000290000000001210049000007ff0010009c000007ff010080410000006001100210000007ff0020009c000007ff020080410000004002200210000000000121019f00001ffa0001042e0000081c0020009c000006d50000613d0000081d0020009c000000450000c13d0000000001000416000000000001004b000000450000c13d00000000010300191ff91ef90000040f001700000001001d001900000002001d000007ff01100197001800000001001d000000000010043f0000000501000039000000200010043f000000400200003900000000010000191ff91fbc0000040f00000019020000291ff91f1a0000040f0000001802000029000000000020043f0000000702000039000000200020043f001600000001001d000000000100001900000040020000391ff91fbc0000040f00000019020000291ff91f1a0000040f000000000101041a000007ff0210019700000016010000291ff91f310000040f0000000101100039000000000101041a001600000001001d0000001801000029000000000010043f0000000501000039000000200010043f000000000100001900000040020000391ff91fbc0000040f00000019020000291ff91f1a0000040f001800000001001d000000170100002900000019020000291ff91f900000040f000000000201001900000018010000291ff91f310000040f0000000101100039000000000101041a000000400200043d0000002003200039000000000013043500000016010000290000000000120435000007ff0020009c000007ff02008041000000400120021000000869011001c700001ffa0001042e000008150020009c0000076d0000613d000008160020009c000000450000c13d0000000001000416000000000001004b000000450000c13d0000000301000039000000000101041a000000800010043f000008600100004100001ffa0001042e0000080f0020009c0000078a0000613d000008100020009c000000450000c13d000000840030008c000000450000413d0000000002000416000000000002004b000000450000c13d0000000402100370000000000202043b001900000002001d000007ff0020009c000000450000213d0000002402100370000000000202043b001800000002001d000000010020008c000000450000213d0000004402100370000000000202043b001700000002001d000008230020009c000000450000213d000000170230006a000008360020009c000000450000213d000001040020008c000000450000413d0000006402100370000000000502043b00000000040004110000000002000410000000000024004b000007c70000c13d001500000005001d0000001702000029001600040020003d000000160230006a000008360020009c000000450000213d000001000020008c000000450000413d0000018002000039000000400020043f0000001604100360000000000404043b000000010040008c000000450000213d000000800040043f0000001604000029001400200040003d0000001404100360000000000404043b000008230040009c000000450000213d000000a00040043f0000001404000029001300200040003d0000001304100360000000000404043b000000ff0040008c000000450000213d000000c00040043f0000001304000029001100200040003d0000001104100360000000000404043b000008230040009c000000450000213d000000e00040043f0000001104000029000c00200040003d0000000c04100360000000000404043b000008230040009c000000450000213d00000016054000290000001f04500039000000000034004b000000450000813d000000000451034f000000000404043b000008230040009c000008140000213d0000001f064000390000086f066001970000003f066000390000086f06600197000008430060009c000008140000213d0000018006600039000000400060043f000001800040043f00000020055000390000000006540019000000000036004b000000450000213d000000000651034f0000086f074001980000001f0840018f000001a005700039000002490000613d000001a009000039000000000a06034f00000000ab0a043c0000000009b90436000000000059004b000002450000c13d000000000008004b000002560000613d000000000676034f0000000307800210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000001a0044000390000000000040435000001000020043f0000000c02000029000b00200020003d0000000b02100360000000000202043b000008230020009c000000450000213d00000016062000290000001f02600039000000000032004b000000450000813d000000000261034f000000000202043b000008230020009c000008140000213d0000001f042000390000086f044001970000003f044000390000086f05400197000000400400043d0000000005540019000000000045004b00000000070000390000000107004039000008230050009c000008140000213d0000000100700190000008140000c13d000000400050043f000000000524043600000020066000390000000007620019000000000037004b000000450000213d000000000761034f0000086f082001980000001f0920018f0000000006850019000002850000613d000000000a07034f000000000b05001900000000ac0a043c000000000bcb043600000000006b004b000002810000c13d000000000009004b000002920000613d000000000787034f0000000308900210000000000906043300000000098901cf000000000989022f000000000707043b0000010008800089000000000787022f00000000078701cf000000000797019f000000000076043500000000022500190000000000020435000001200040043f0000000b02000029000a00200020003d0000000a02100360000000000202043b000008230020009c000000450000213d0000001602200029000f00000002001d0000001f02200039000000000032004b000000450000813d0000000f02100360000000000202043b000008230020009c000008140000213d00000005042002100000003f054000390000083805500197000000400600043d0000000005560019000900000006001d000000000065004b00000000060000390000000106004039000008230050009c000008140000213d0000000100600190000008140000c13d000000400050043f000000090500002900000000002504350000000f05000029001200200050003d0000001204400029000e00000004001d000000000034004b000000450000213d000000000002004b00000fcb0000c13d0000000902000029000001400020043f0000000a02000029001200200020003d0000001202100360000000000202043b000008230020009c000000450000213d00000016062000290000001f02600039000000000032004b000000000400001900000835040080410000083502200197000000000002004b00000000050000190000083505004041000008350020009c000000000504c019000000000005004b000000450000c13d000000000261034f000000000202043b000008230020009c000008140000213d0000001f042000390000086f044001970000003f044000390000086f05400197000000400400043d0000000005540019000000000045004b00000000070000390000000107004039000008230050009c000008140000213d0000000100700190000008140000c13d000000400050043f000000000524043600000020066000390000000007620019000000000037004b000000450000213d000000000361034f0000086f062001980000001f0720018f0000000001650019000002f30000613d000000000803034f0000000009050019000000008a08043c0000000009a90436000000000019004b000002ef0000c13d000000000007004b000003000000613d000000000363034f0000000306700210000000000701043300000000076701cf000000000767022f000000000303043b0000010006600089000000000363022f00000000036301cf000000000373019f000000000031043500000000012500190000000000010435000001600040043f000000a00100043d0000082300100198000010b60000c13d000000400100043d0000085d02000041000001180000013d000000800010043f00000140000004430000016000100443000000200100003900000100001004430000012000200443000008050100004100001ffa0001042e000000240030008c000000450000413d0000000002000416000000000002004b000000450000c13d0000000401100370000000000101043b0000086c00100198000000450000c13d0000086d0010009c000000000200003900000001020060390000086e0010009c00000001022061bf000000800020043f000008600100004100001ffa0001042e0000000001000416000000000001004b000000450000c13d000000c001000039000000400010043f0000001201000039000000800010043f0000086a01000041000000a00010043f0000002001000039000000c00010043f0000008001000039000000e0020000391ff91e330000040f000000c00110008a000007ff0010009c000007ff0100804100000060011002100000086b011001c700001ffa0001042e0000000001000416000000000001004b000000450000c13d00000000010300191ff91ef90000040f001900000002001d000007ff01100197001800000001001d000000000010043f0000000501000039000000200010043f000000400200003900000000010000191ff91fbc0000040f00000019020000291ff91f1a0000040f0000001802000029000000000020043f0000000702000039000000200020043f001800000001001d000000000100001900000040020000391ff91fbc0000040f00000019020000291ff91f1a0000040f000000000101041a000007ff0210019700000018010000291ff91f310000040f0000000101100039000000000101041a000000400200043d0000000000120435000007ff0020009c000007ff02008041000000400120021000000857011001c700001ffa0001042e000000840030008c000000450000413d0000000002000416000000000002004b000000450000c13d0000000402100370000000000202043b001900000002001d000007ff0020009c000000450000213d0000002402100370000000000202043b001800000002001d000000010020008c000000450000213d0000006402100370000000000402043b0000004401100370000000000301043b00000000010004100000000002000411000000000012004b000007c70000c13d00000000004301a0000008270000c13d0000086801000041000000800010043f000008400100004100001ffb000104300000000001000416000000000001004b000000450000c13d0000000101000039000000000101041a0000080201100197000000800010043f000008600100004100001ffa0001042e000000440030008c000000450000413d0000000002000416000000000002004b000000450000c13d0000000402100370000000000202043b000008230020009c000000450000213d0000002304200039000000000034004b000000450000813d0000000404200039000000000441034f000000000404043b001500000004001d000008230040009c000000450000213d001400240020003d000000150200002900000005022002100000001402200029000000000032004b000000450000213d0000002402100370000000000202043b001000000002001d000008230020009c000000450000213d00000010020000290000002302200039000000000032004b000000450000813d00000010020000290000000402200039000000000121034f000000000101043b000f00000001001d000008230010009c000000450000213d0000001001000029001200240010003d0000000f0100002900000005011002100000001201100029000000000031004b000000450000213d0000000101000039000000000101041a00000802011001970000000002000411000000000012004b000007cb0000c13d000000150000006b00000aa70000c13d0000000f0000006b000007880000613d001600000000001d0000001601000029000000050110021000000012021000290000000201000367000000000221034f000000000202043b0000000003000031000000100430006a000000630440008a00000835054001970000083506200197000000000756013f000000000056004b00000000050000190000083505004041000000000042004b00000000040000190000083504008041000008350070009c000000000504c019000000000005004b000000450000c13d00000012022000290000002004200039000000000441034f000000000404043b00000000052300490000005f0550008a00000835065001970000083507400197000000000867013f000000000067004b00000000060000190000083506004041000000000054004b00000000050000190000083505008041000008350080009c000000000605c019000000000006004b000000450000c13d00000000042400190000000005430049000008360050009c000000450000213d000000600050008c000000450000413d000000400500043d001900000005001d000008370050009c000008140000213d000000000541034f00000019060000290000006006600039000000400060043f000000000505043b000008230050009c000000450000213d00000000074500190000001f05700039000000000035004b0000000008000019000008350800804100000835095001970000083505300197000000000a59013f000000000059004b000000000900001900000835090040410000083500a0009c000000000908c019000000000009004b000000450000c13d000000000871034f000000000808043b000008230080009c000008140000213d00000005098002100000003f0a900039000008380aa00197000000000a6a00190000082300a0009c000008140000213d0000004000a0043f000000000086043500000020077000390000000008790019000000000038004b000000450000213d000000000087004b000004200000813d00000019090000290000008009900039000000000a71034f000000000a0a043b0000000009a904360000002007700039000000000087004b0000041a0000413d00000019070000290000000006670436001800000006001d0000002006400039000000000761034f000000000707043b000000ff0070008c000000450000213d000000180800002900000000007804350000002006600039000000000661034f000000000606043b000008230060009c000000450000213d00000000074600190000001f04700039000000000034004b000000000600001900000835060080410000083504400197000000000854013f000000000054004b00000000040000190000083504004041000008350080009c000000000406c019000000000004004b000000450000c13d000000000471034f000000000404043b000008230040009c000008140000213d0000001f054000390000086f055001970000003f055000390000086f06500197000000400500043d0000000006650019000000000056004b00000000080000390000000108004039000008230060009c000008140000213d0000000100800190000008140000c13d000000400060043f000000000645043600000020077000390000000008740019000000000038004b000000450000213d000000000771034f0000086f0840019800000000038600190000045e0000613d000000000907034f000000000a060019000000009b09043c000000000aba043600000000003a004b0000045a0000c13d0000001f094001900000046b0000613d000000000787034f0000000308900210000000000903043300000000098901cf000000000989022f000000000707043b0000010008800089000000000787022f00000000078701cf000000000797019f00000000007304350000000003460019000000000003043500000019030000290000004003300039001500000003001d0000000000530435000000000121034f000000000101043b001700000001001d000008230010009c000000450000213d000000190100002900000000010104330000000002010433000000000002004b000005990000613d000000400400043d000008390200004100000000002404350000000402400039000000200300003900000000003204350000000002010433000000240340003900000000002304350000004405400039000000000002004b001400000004001d0000048f0000613d00000000030000190000002001100039000000000401043300000000054504360000000103300039000000000023004b000004890000413d001300000005001d000008240100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000007ff0010009c000007ff01008041000000c00110021000000825011001c700008005020000391ff91ff40000040f0000000100200190000018ea0000613d000000000201043b00000000010004140000080202200197000000040020008c0000001408000029000004a70000c13d00000003010003670000000103000031000004bc0000013d0000001303800069000007ff0030009c000007ff030080410000006003300210000007ff0080009c000007ff0400004100000000040840190000004004400210000000000343019f000007ff0010009c000007ff01008041000000c001100210000000000131019f1ff91ff40000040f0000006003100270000107ff0030019d000007ff033001970003000000010355000000010020019000000e480000613d00000014080000290000086f043001980000000002480019000004c50000613d000000000501034f0000000006080019000000005705043c0000000006760436000000000026004b000004c10000c13d0000001f05300190000004d20000613d000000000141034f0000000304500210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000001f013000390000086f021001970000000001820019000000000021004b00000000020000390000000102004039000008230010009c000008140000213d0000000100200190000008140000c13d000000400010043f000008360030009c000000450000213d000000200030008c000000450000413d0000000004080433000008230040009c000000450000213d000000000283001900000000038400190000001f04300039000000000024004b0000000005000019000008350500804100000835064001970000083504200197000000000746013f000000000046004b00000000060000190000083506004041000008350070009c000000000605c019000000000006004b000000450000c13d0000000056030434000008230060009c000008140000213d00000005076002100000003f0870003900000838088001970000000008180019000008230080009c000008140000213d000000400080043f00000000006104350000000006570019000000000026004b000000450000213d000000000065004b000005990000813d000000200720008a0000050c0000013d0000002001100039000000e00a80003900000000009a04350000000000810435000000000065004b000005990000813d0000000058050434000008230080009c000000450000213d00000000093800190000000008970049000008360080009c000000450000213d000001000080008c000000450000413d000000400800043d0000083a0080009c000008140000213d000001000a8000390000004000a0043f000000200a900039000000000a0a0433000007ff00a0009c000000450000213d000000000aa80436000000400b900039000000000b0b0433000007ff00b0009c000000450000213d0000000000ba0435000000600a900039000000000a0a0433000007ff00a0009c000000450000213d000000400b8000390000000000ab0435000000800a900039000000000a0a0433000000600b8000390000000000ab0435000000a00a900039000000000a0a0433000000800b8000390000000000ab0435000000a00a800039000000c00b900039000000000b0b04330000000000ba0435000000e00a900039000000000a0a04330000082300a0009c000000450000213d000000000b9a00190000003f0ab0003900000000002a004b000000000c000019000008350c008041000008350aa00197000000000d4a013f00000000004a004b000000000a000019000008350a0040410000083500d0009c000000000a0cc01900000000000a004b000000450000c13d000000200ab00039000000000c0a04330000082300c0009c000008140000213d000000050dc002100000003f0ad00039000008380ea00197000000400a00043d000000000eea00190000000000ae004b000000000f000039000000010f0040390000082300e0009c000008140000213d0000000100f00190000008140000c13d0000004000e0043f0000000000ca0435000000400bb00039000000000cbd001900000000002c004b000000450000213d0000000000cb004b000005660000813d000000000d0a0019000000200dd0003900000000be0b04340000000000ed04350000000000cb004b000005610000413d000000c00b8000390000000000ab0435000001000a900039000000000a0a04330000082300a0009c000000450000213d000000000a9a00190000003f09a00039000000000029004b000000000b000019000008350b0080410000083509900197000000000c49013f000000000049004b000000000900001900000835090040410000083500c0009c00000000090bc019000000000009004b000000450000c13d0000002009a00039000000000b0904330000082300b0009c000008140000213d000000050cb002100000003f09c00039000008380d900197000000400900043d000000000dd9001900000000009d004b000000000e000039000000010e0040390000082300d0009c000008140000213d0000000100e00190000008140000c13d0000004000d0043f0000000000b90435000000400aa00039000000000bac001900000000002b004b000000450000213d0000000000ba004b000005060000813d000000000c090019000000200cc0003900000000ad0a04340000000000dc04350000000000ba004b000005930000413d000005060000013d00000018010000290000000001010433000000ff0010019000000da80000613d00000017010000290000082301100197001700000001001d000000000010043f0000000201000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000301043b00000019010000290000000001010433001100000001001d0000000001010433000008230010009c000008140000213d000000000203041a000000000013041b001300000001001d000000000021004b001400000003001d000005ce0000813d000e00000002001d000000000030043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000201043b00000013012000290000000e02200029000000000021004b0000001403000029000005ce0000813d000000000001041b0000000101100039000000000021004b000005ca0000413d000000000030043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b0000001306000029000000000006004b0000001105000029000005e50000613d0000000002000019000000000312001900000020055000390000000004050433000000000043041b0000000102200039000000000062004b000005de0000413d00000014050000290000000101500039000000000201041a000008700220019700000018030000290000000003030433000000ff0330018f000000000232019f000000000021041b000000150100002900000000030104330000000074030434000008230040009c000008140000213d0000000206500039000000000106041a000000010010019000000001051002700000007f0550618f0000001f0050008c00000000020000390000000102002039000000000121013f000000010010019000000c430000c13d000000200050008c001400000006001d001300000004001d001100000003001d000006220000413d000d00000005001d000e00000007001d000000000060043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d00000013040000290000001f024000390000000502200270000000200040008c0000000002004019000000000301043b0000000d010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b00000014060000290000000e07000029000006220000813d000000000002041b0000000102200039000000000012004b0000061e0000413d000000200040008c000006410000413d000000000060043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d00000013070000290000086f02700198000000000101043b00000011080000290000064d0000613d000000010320008a0000000503300270000000000331001900000001043000390000002003000039000000140600002900000000058300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000006390000c13d0000064f0000013d000000000004004b0000064b0000613d0000000301400210000008710110027f00000871011001670000000002070433000000000112016f0000000102400210000000000121019f0000065b0000013d00000000010000190000065b0000013d00000020030000390000001406000029000000000072004b000006590000813d0000000302700210000000f80220018f000008710220027f000008710220016700000000038300190000000003030433000000000223016f000000000021041b000000010170021000000001011001bf000000000016041b0000001701000029000000000010043f0000000401000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b000000000101041a000000000001004b000006880000c13d0000000301000039000000000101041a000008230010009c000008140000213d00000001021000390000000303000039000000000023041b0000083b0110009a0000001702000029000000000021041b000000000103041a001400000001001d000000000020043f0000000401000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b0000001402000029000000000021041b000000400100043d0000002002100039000000400300003900000000003204350000001702000029000000000021043500000019020000290000000004020433000000400210003900000060030000390000000000320435000000a00310003900000000050404330000000000530435000000c003100039000000000005004b000006a00000613d00000000060000190000002004400039000000000704043300000000037304360000000106600039000000000056004b0000069a0000413d00000018040000290000000004040433000000ff0440018f000000600510003900000000004504350000000002230049000000150400002900000000040404330000008005100039000000000025043500000000540404340000000002430436000000000004004b000006b60000613d000000000300001900000000062300190000000007350019000000000707043300000000007604350000002003300039000000000043004b000006af0000413d000000000324001900000000000304350000001f034000390000086f0330019700000000021200490000000002320019000007ff0020009c000007ff020080410000006002200210000007ff0010009c000007ff010080410000004001100210000000000112019f0000000002000414000007ff0020009c000007ff02008041000000c002200210000000000112019f0000083c011001c70000800d0200003900000001030000390000083d040000411ff91fef0000040f0000000100200190000000450000613d00000016020000290000000102200039001600000002001d0000000f0020006c000003bd0000413d000007880000013d000000440030008c000000450000413d0000000002000416000000000002004b000000450000c13d0000000402100370000000000202043b001900000002001d000007ff0020009c000000450000213d0000002401100370000000000101043b001600000001001d000000010010008c000000450000213d000000800000043f000000a00000043f000000e00000043f000001000000043f000001200000043f000001400000043f0000006002000039000001600020043f000001800020043f000001a00020043f000001c00020043f000000e001000039000000c00010043f000001e00000043f000002000000043f0000034001000039000000400010043f000002400000043f000002600000043f000002800000043f000002a00000043f000002c00020043f000002e00020043f000003000020043f000003200020043f0000024001000039000002200010043f0000001901000029000000000010043f0000000501000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b0000001602000029000000000020043f000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b001800000001001d0000001901000029000000000010043f0000000701000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b0000001602000029000000000020043f000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b000000000101041a000007ff01100197000000020010008c00000a830000413d0000083201000041000000000010043f0000003201000039000000040010043f0000082e0100004100001ffb00010430000000240030008c000000450000413d0000000002000416000000000002004b000000450000c13d0000000401100370000000000101043b000007ff0010009c000000450000213d000000a001000039000000400010043f000000800000043f0000002001000039000000a00010043f0000008001000039000000c0020000391ff91e330000040f000000a00110008a000007ff0010009c000007ff01008041000000600110021000000861011001c700001ffa0001042e000000240030008c000000450000413d0000000002000416000000000002004b000000450000c13d0000000401100370000000000101043b000008020010009c000000450000213d0000000102000039000000000202041a00000802022001970000000005000411000000000025004b000007cb0000c13d0000080206100197000000000056004b0000081a0000c13d0000084201000041000000800010043f000008400100004100001ffb000104300000000001000416000000000001004b000000450000c13d000000000100041a00000802021001970000000006000411000000000026004b000007ad0000c13d0000000102000039000000000302041a0000080304300197000000000464019f000000000042041b0000080301100197000000000010041b00000000010004140000080205300197000007ff0010009c000007ff01008041000000c0011002100000083c011001c70000800d02000039000000030300003900000863040000411ff91fef0000040f0000000100200190000000450000613d000000000100001900001ffa0001042e000000440030008c000000450000413d0000000002000416000000000002004b000000450000c13d0000000302000039000000000202041a0000002403100370000000000303043b0000000401100370000000000101043b00000000043100a9000000000001004b0000079b0000613d00000000011400d9000000000031004b000007a70000c13d000000000003004b000007b10000613d000000000024004b000007b10000813d000000000034001a000007a70000413d0000000001340019000000000021004b0000000001028019001200000001001d000000000341004b0000080c0000813d0000083201000041000000000010043f0000001101000039000000040010043f0000082e0100004100001ffb000104300000086201000041000000800010043f000008400100004100001ffb00010430000000a001000039000000400010043f000000800000043f000000400100043d00000020020000390000000003210436000000800200043d0000000000230435000000400310003900000005042002100000000009340019000000000002004b000007cf0000c13d0000000002190049000007ff0020009c000007ff020080410000006002200210000007ff0010009c000007ff010080410000004001100210000000000112019f00001ffa0001042e0000086501000041000000800010043f000008400100004100001ffb000104300000083f01000041000000800010043f000008400100004100001ffb0001043000000080040000390000000008000019000007da0000013d0000001f05a000390000086f0550019700000000069a0019000000000006043500000000099500190000000108800039000000000028004b000007be0000813d0000000005190049000000400550008a00000000035304360000002004400039000000000504043300000000a505043400000823055001970000000005590436000000000a0a043300000040060000390000000000650435000000400b90003900000000de0a0434000000600500003900000000005b0435000000a005900039000000000f0e04330000000000f50435000000c00c90003900000000000f004b000007f60000613d0000000005000019000000200ee0003900000000060e0433000000000c6c043600000001055000390000000000f5004b000007f00000413d00000000050d0433000000ff0550018f000000600690003900000000005604350000000005bc00490000004006a0003900000000060604330000008009900039000000000059043500000000ba0604340000000009ac043600000000000a004b000007d20000613d00000000050000190000000006950019000000000c5b0019000000000c0c04330000000000c6043500000020055000390000000000a5004b000008040000413d000007d20000013d001100000004001d000008230030009c000008140000213d00000005013002100000003f0210003900000838042001970000085e0040009c000009b10000a13d0000083201000041000000000010043f0000004101000039000000040010043f0000082e0100004100001ffb00010430000000000100041a0000080301100197000000000161019f000000000010041b0000000001000414000007ff0010009c000007ff01008041000000c0011002100000083c011001c70000800d0200003900000003030000390000084104000041000007850000013d001600000004001d001700000003001d0000001901000029000000000010043f0000000701000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b0000001802000029000000000020043f000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b000000000101041a001500000001001d0000001901000029000000000010043f0000000501000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b0000001802000029000000000020043f000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d0000001502000029000007ff02200197000000010020008c0000073a0000213d000000010220015f000000000101043b001500000002001d00000007022000c900000000011200190000000101100039000000000101041a000000170010006c00000b7f0000c13d0000001901000029000000000010043f0000000501000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b0000001802000029000000000020043f000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b001500000001001d0000001901000029000000000010043f0000000701000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b0000001802000029000000000020043f000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b000000000101041a000007ff01100197000000010010008c0000073a0000213d00000007011000c900000015011000290000000102100039000000000102041a000000160010006c00000da40000c13d000000000002041b0000001901000029000000000010043f0000000701000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b0000001802000029000000000020043f000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b000000000201041a000000010220015f000000000021041b000000160000006b000008db0000613d0000000001000414000007ff0010009c000007ff01008041000000c0011002100000083c011001c70000800d020000390000000203000039000008660400004100000016050000291ff91fef0000040f0000000100200190000000450000613d0000000001000414000007ff0010009c000007ff01008041000000c0011002100000083c011001c70000800d02000039000000020300003900000867040000410000001705000029000007850000013d001700000003001d0000001901000029000000000010043f0000000701000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b0000001802000029000000000020043f000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b000000000101041a001600000001001d0000001901000029000000000010043f0000000501000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b0000001802000029000000000020043f000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d0000001602000029000007ff02200197000000010020008c0000073a0000213d000000010220015f000000000101043b001600000002001d00000007022000c900000000011200190000000101100039000000000101041a000000170010006c00000b850000c13d0000000001000414000007ff0010009c000007ff01008041000000c0011002100000083c011001c70000800d020000390000000203000039000008480400004100000017050000291ff91fef0000040f0000000100200190000000450000613d00000019010000291ff91f090000040f00000018020000291ff91f1a0000040f00000016020000291ff91f310000040f0000000101100039000000000001041b000000000100001900001ffa0001042e000f00000001001d0000001701000029000000000010043f0000000501000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b0000001602000029000000000020043f000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b000000400200043d001000000002001d000008370020009c000008140000213d000000140310002900000010020000290000006001200039000000400010043f000000000103041a000007ff011001970000000001120436000d00000003001d0000000102300039000000000202041a0000000000210435000000400100043d000e00000001001d0000083a0010009c000008140000213d0000000e010000290000010001100039000000400010043f0000000d010000290000000201100039000000000101041a000000ff0210018f000000010020008c00000aa10000213d000000500310027000000823033001970000000e05000029000000600450003900000000003404350000004803100270000000ff0330018f0000004004500039000000000034043500000000022504360000000801100270000008230110019700000000001204350000000d010000290000000301100039000000000201041a000000010320019000000001042002700000007f0440618f001900000004001d0000001f0040008c00000000040000390000000104002039000000000043004b00000c430000c13d000000400400043d001800000004001d00000019050000290000000004540436001700000004001d000000000003004b00000bd70000613d000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d0000001905000029000000000005004b0000000002000019000000170600002900000bdd0000613d000000000101043b00000000020000190000000003260019000000000401041a000000000043043500000001011000390000002002200039000000000052004b000009a90000413d00000bdd0000013d0000008002400039000000400020043f000000800030043f0000001205000029000000110050006c00000a690000c13d0000001101000029000000120010006b000007b40000a13d00000000030100190000000301000039000000000101041a000000000031004b0000073a0000a13d001400000003001d0000083b0130009a000000000101041a0000082301100197001900000001001d000000000010043f0000000201000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000301043b000000400200043d000008440020009c000008140000213d0000004001200039000000400010043f00000019010000290000000001120436001300000001001d000000400100043d000008370010009c000008140000213d001900000002001d001800000001001d0000006001100039000000400010043f000000000203041a001600000001001d001500000002001d0000000000210435001700000003001d000000000030043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000180600002900000080026000390000001509000029000000000009004b00000a000000613d000000000101043b0000000003000019000000190500002900000017070000290000001608000029000000000401041a000000000242043600000001011000390000000103300039000000000093004b000009f90000413d00000a030000013d0000001905000029000000170700002900000016080000290000000001620049000000410110008a0000086f021001970000000001820019000000000021004b00000000020000390000000102004039000008230010009c000008140000213d0000000100200190000008140000c13d000000400010043f00000000018604360000000102700039000000000202041a000000ff0220018f00000000002104350000000201700039000000000201041a000000010320019000000001082002700000007f0880618f0000001f0080008c00000000040000390000000104002039000000000442013f000000010040019000000c430000c13d000000400700043d0000000004870436000000000003004b00000a410000613d001500000004001d001700000008001d001600000007001d000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d0000001708000029000000000008004b00000a470000613d000000000201043b000000000100001900000019050000290000001806000029000000160700002900000015090000290000000003190019000000000402041a000000000043043500000001022000390000002001100039000000000081004b00000a390000413d00000a4b0000013d00000870012001970000000000140435000000000008004b0000002001000039000000000100603900000a4b0000013d00000000010000190000001905000029000000180600002900000016070000290000003f011000390000086f021001970000000001720019000000000021004b00000000020000390000000102004039000008230010009c000008140000213d0000000100200190000008140000c13d000000400010043f00000040016000390000000000710435000000130100002900000000006104350000001403000029000000110130006a000000800200043d000000000012004b0000073a0000a13d0000000502100210000000a0022000390000000000520435000000800200043d000000000012004b0000073a0000a13d0000000103300039000000120030006c000009bb0000413d000007b40000013d0000085f0040009c000008140000213d000000600300003900000000040000190000004005200039000000400050043f0000000005020436000000400600043d000008370060009c000008140000213d0000006007600039000000400070043f00000040076000390000000000370435000000000736043600000000000704350000000000650435000000a00540003900000000002504350000002004400039000000000014004b000009b70000813d000000400200043d000008440020009c00000a6d0000a13d000008140000013d000000400200043d000e00000002001d000008370020009c000008140000213d00000007011000c900000018031000290000000e020000290000006001200039000000400010043f000000000103041a000007ff011001970000000002120436000c00000003001d0000000101300039000000000101041a000b00000002001d0000000000120435000000400100043d000d00000001001d0000083a0010009c000008140000213d0000000d010000290000010001100039000000400010043f0000000c010000290000000201100039000000000101041a000000ff0210018f000000010020008c00000b9a0000a13d0000083201000041000000000010043f0000002101000039000000040010043f0000082e0100004100001ffb000104300000000002000019001700000002001d00000005012002100000001401100029001900000001001d0000000201100367000000000101043b000008230010009c000000450000213d000000000010043f0000000401000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d00000019020000290000000202200367000000000202043b000000000101043b000000000101041a000000000001004b00000c190000613d000008230020009c000000450000213d000000000020043f0000000201000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000301043b000000000103041a000000000003041b000000000001004b00000aeb0000613d001600000001001d001800000003001d000000000030043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b0000001602100029000000000021004b000000180300002900000aeb0000813d000000000001041b0000000101100039000000000021004b00000ae70000413d0000000101300039000000000001041b0000000203300039000000000103041a000000010010019000000001041002700000007f0440618f0000001f0040008c00000000020000390000000102002039000000000121013f000000010010019000000c430000c13d000000000004004b00000b180000613d0000001f0040008c00000b170000a13d001600000004001d001800000003001d000000000030043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b00000016020000290000001f02200039000000050220027000000000022100190000000103100039000000000023004b00000b140000813d000000000003041b0000000103300039000000000023004b00000b100000413d0000001802000029000000000002041b0000000003010019000000000003041b00000019010000290000000201100367000000000301043b000008230030009c000000450000213d000000000030043f0000000401000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c70000801002000039001800000003001d1ff91ff40000040f00000018030000290000000100200190000000450000613d000000000101043b000000000401041a000000000004004b00000b640000613d0000000301000039000000000201041a000000000002004b000007a70000613d000000010140008a000000000024004b00000b520000613d000000000012004b0000073a0000a13d000008310140009a000008310220009a000000000202041a000000000021041b000000000020043f0000000401000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c70000801002000039001600000004001d1ff91ff40000040f00000001002001900000001803000029000000450000613d000000000101043b0000001602000029000000000021041b0000000301000039000000000401041a000000000004004b00000cea0000613d000000010140008a000008310240009a000000000002041b0000000302000039000000000012041b000000000030043f0000000401000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b000000000001041b00000019010000290000000201100367000000000101043b000008230010009c000000450000213d000000400200043d0000000000120435000007ff0020009c000007ff0200804100000040012002100000000002000414000007ff0020009c000007ff02008041000000c002200210000000000112019f00000830011001c70000800d02000039000000010300003900000833040000411ff91fef0000040f0000000100200190000000450000613d00000017020000290000000102200039000000150020006c00000aa80000413d000003ba0000013d00000019010000291ff91f090000040f00000018020000291ff91f1a0000040f000000150200002900000b8a0000013d00000019010000291ff91f090000040f00000018020000291ff91f1a0000040f00000016020000291ff91f310000040f0000000101100039000000000101041a000000400200043d0000002403200039000000170400002900000000004304350000084703000041000000000032043500000004032000390000000000130435000007ff0020009c000007ff0200804100000040012002100000082c011001c700001ffb00010430000000500310027000000823033001970000000d05000029000000600450003900000000003404350000004803100270000000ff0330018f0000004004500039000000000034043500000000022504360000000801100270000008230110019700000000001204350000000c010000290000000301100039000000000201041a000000010320019000000001042002700000007f0440618f001800000004001d0000001f0040008c00000000040000390000000104002039000000000442013f000000010040019000000c430000c13d000000400400043d001700000004001d00000018050000290000000004540436001500000004001d000000000003004b00000c210000613d000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d0000001805000029000000000005004b0000000002000019000000150600002900000c270000613d000000000101043b00000000020000190000000003260019000000000401041a000000000043043500000001011000390000002002200039000000000052004b00000bcc0000413d00000c270000013d000000400100043d0000082602000041000001180000013d000008700120019700000017020000290000000000120435000000190000006b000000200200003900000000020060390000003f012000390000086f021001970000001801200029000000000021004b00000000020000390000000102004039000008230010009c000008140000213d0000000100200190000008140000c13d000000400010043f0000000e010000290000008001100039000000180200002900000000002104350000000d010000290000000401100039000000000201041a000000010320019000000001042002700000007f0440618f001900000004001d0000001f0040008c00000000040000390000000104002039000000000442013f000000010040019000000c430000c13d000000400400043d001800000004001d00000019050000290000000004540436001700000004001d000000000003004b00000c800000613d000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d0000001905000029000000000005004b0000000002000019000000170600002900000c860000613d000000000101043b00000000020000190000000003260019000000000401041a000000000043043500000001011000390000002002200039000000000052004b00000c110000413d00000c860000013d000008230020009c000000450000213d000000400100043d000008340300004100000000003104350000000403100039000000000023043500000c4e0000013d000008700120019700000015020000290000000000120435000000180000006b000000200200003900000000020060390000003f012000390000086f021001970000001701200029000000000021004b00000000020000390000000102004039000008230010009c000008140000213d0000000100200190000008140000c13d000000400010043f0000000d010000290000008001100039000000170200002900000000002104350000000c010000290000000401100039000000000201041a000000010320019000000001042002700000007f0440618f001800000004001d0000001f0040008c00000000040000390000000104002039000000000442013f000000010040019000000c600000613d0000083201000041000000000010043f0000002201000039000000040010043f0000082e0100004100001ffb00010430000000400100043d0000082d02000041000000000021043500000004021000390000000000420435000007ff0010009c000007ff0100804100000040011002100000082e011001c700001ffb000104300000002402100039000000170400002900000000004204350000082b020000410000000000210435000007ff0230019700000004031000390000000000230435000007ff0010009c000007ff0100804100000040011002100000082c011001c700001ffb00010430000000400400043d001700000004001d00000018050000290000000004540436001500000004001d000000000003004b00000d0f0000613d000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d0000001805000029000000000005004b0000000002000019000000150600002900000d150000613d000000000101043b00000000020000190000000003260019000000000401041a000000000043043500000001011000390000002002200039000000000052004b00000c780000413d00000d150000013d000008700120019700000017020000290000000000120435000000190000006b000000200200003900000000020060390000003f012000390000086f021001970000001801200029000000000021004b00000000020000390000000102004039000008230010009c000008140000213d0000000100200190000008140000c13d000000400010043f0000000e01000029000000a001100039000000180200002900000000002104350000000d010000290000000501100039000000000201041a001400000002001d000008230020009c000008140000213d000000140200002900000005022002100000003f022000390000083802200197000000400300043d0000000002230019000c00000003001d000000000032004b00000000030000390000000103004039000008230020009c000008140000213d0000000100300190000008140000c13d000000400020043f00000014020000290000000c030000290000000000230435000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000140000006b00000dab0000c13d0000000e01000029000000c0011000390000000c0200002900000000002104350000000d010000290000000601100039000000000201041a000000010320019000000001042002700000007f0440618f001900000004001d0000001f0040008c00000000040000390000000104002039000000000442013f000000010040019000000c430000c13d000000400400043d001800000004001d00000019050000290000000004540436001700000004001d000000000003004b00000eff0000613d000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d0000001905000029000000000005004b0000000002000019000000170600002900000f050000613d000000000101043b00000000020000190000000003260019000000000401041a000000000043043500000001011000390000002002200039000000000052004b00000ce20000413d00000f050000013d0000083201000041000000000010043f0000003101000039000000040010043f0000082e0100004100001ffb000104300000001904000029000007ff0040009c000007ff040080410000006004400210000007ff0010009c000007ff010080410000004001100210000000000141019f000007ff0030009c000007ff03008041000000c003300210000000000113019f1ff91fef0000040f000000010220015f00030000000103550000006001100270000107ff0010019d000007ff01100197000000000001004b00000d790000c13d00000001002001900000001602000029000007880000613d000007ff0010009c000007ff010080410000006001100210000007ff0020009c000007ff020080410000004002200210000000000112019f00001ffb00010430000008700120019700000015020000290000000000120435000000180000006b000000200200003900000000020060390000003f012000390000086f021001970000001701200029000000000021004b00000000020000390000000102004039000008230010009c000008140000213d0000000100200190000008140000c13d000000400010043f0000000d01000029000000a001100039000000170200002900000000002104350000000c010000290000000501100039000000000201041a001200000002001d000008230020009c000008140000213d000000120200002900000005022002100000003f022000390000083802200197000000400300043d0000000002230019000a00000003001d000000000032004b00000000030000390000000103004039000008230020009c000008140000213d0000000100300190000008140000c13d000000400020043f00000012020000290000000a030000290000000000230435000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000120000006b00000e620000c13d0000000d01000029000000c0011000390000000a0200002900000000002104350000000c010000290000000601100039000000000201041a000000010320019000000001042002700000007f0440618f001800000004001d0000001f0040008c00000000040000390000000104002039000000000442013f000000010040019000000c430000c13d000000400400043d001700000004001d00000018050000290000000004540436001500000004001d000000000003004b00000f180000613d000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d0000001805000029000000000005004b0000000002000019000000150600002900000f1e0000613d000000000101043b00000000020000190000000003260019000000000401041a000000000043043500000001011000390000002002200039000000000052004b00000d710000413d00000f1e0000013d000008230010009c000008140000213d0000001f031000390000086f033001970000003f033000390000086f04300197000000400300043d0000000004430019000000000034004b00000000050000390000000105004039000008230040009c000008140000213d0000000100500190000008140000c13d000000400040043f00000000031304360000086f041001980000001f0510018f001600000003001d0000000003430019000000030600036700000d960000613d000000000706034f0000001608000029000000007907043c0000000008980436000000000038004b00000d920000c13d000000000005004b00000d040000613d000000000446034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f000000000043043500000d040000013d000000400200043d0000002403200039000000160400002900000b900000013d000000400100043d0000083e02000041000001180000013d000000000101043b001900000001001d001700000000001d0016000c0000002d000000400100043d001800000001001d000008370010009c000008140000213d00000018030000290000006001300039000000400010043f0000001902000029000000000102041a00000000051304360000000101200039000000000201041a000000010320019000000001072002700000007f0770618f0000001f0070008c00000000040000390000000104002039000000000442013f000000010040019000000c430000c13d000000400600043d0000000004760436000000000003004b001500000005001d00000de50000613d001100000004001d001200000007001d001300000006001d000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d0000001205000029000000000005004b00000deb0000613d000000000201043b0000000001000019000000130600002900000011070000290000000003170019000000000402041a000000000043043500000001022000390000002001100039000000000051004b00000ddd0000413d00000ded0000013d00000870012001970000000000140435000000000007004b0000002001000039000000000100603900000ded0000013d000000000100001900000013060000290000003f011000390000086f021001970000000001620019000000000021004b00000000020000390000000102004039000008230010009c000008140000213d0000000100200190000008140000c13d000000400010043f0000001501000029000000000061043500000019010000290000000201100039000000000201041a000000010320019000000001062002700000007f0660618f0000001f0060008c00000000040000390000000104002039000000000442013f000000010040019000000c430000c13d000000400500043d0000000004650436000000000003004b00000e260000613d001200000004001d001300000006001d001500000005001d000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d0000001306000029000000000006004b00000e2c0000613d000000000201043b0000000001000019000000150500002900000012070000290000000003170019000000000402041a000000000043043500000001022000390000002001100039000000000061004b00000e1e0000413d00000e2e0000013d00000870012001970000000000140435000000000006004b0000002001000039000000000100603900000e2e0000013d000000000100001900000015050000290000003f011000390000086f021001970000000001520019000000000021004b00000000020000390000000102004039000008230010009c000008140000213d0000000100200190000008140000c13d00000016020000290000002002200039000000400010043f000000180300002900000040013000390000000000510435001600000002001d00000000003204350000001901000029001900030010003d00000017020000290000000102200039001700000002001d000000140020006c00000daf0000413d00000cb90000013d0000001f0530018f0000080106300198000000400200043d000000000462001900000e530000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000e4f0000c13d000000000005004b00000e600000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000d0a0000013d000000000101043b001800000001001d001500000000001d0014000a0000002d000000400100043d001700000001001d000008370010009c000008140000213d00000017030000290000006001300039000000400010043f0000001802000029000000000102041a00000000051304360000000101200039000000000201041a000000010320019000000001072002700000007f0770618f0000001f0070008c00000000040000390000000104002039000000000442013f000000010040019000000c430000c13d000000400600043d0000000004760436000000000003004b001300000005001d00000e9c0000613d000f00000004001d001000000007001d001100000006001d000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d0000001005000029000000000005004b00000ea20000613d000000000201043b000000000100001900000011060000290000000f070000290000000003170019000000000402041a000000000043043500000001022000390000002001100039000000000051004b00000e940000413d00000ea40000013d00000870012001970000000000140435000000000007004b0000002001000039000000000100603900000ea40000013d000000000100001900000011060000290000003f011000390000086f021001970000000001620019000000000021004b00000000020000390000000102004039000008230010009c000008140000213d0000000100200190000008140000c13d000000400010043f0000001301000029000000000061043500000018010000290000000201100039000000000201041a000000010320019000000001062002700000007f0660618f0000001f0060008c00000000040000390000000104002039000000000442013f000000010040019000000c430000c13d000000400500043d0000000004650436000000000003004b00000edd0000613d001000000004001d001100000006001d001300000005001d000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d0000001106000029000000000006004b00000ee30000613d000000000201043b0000000001000019000000130500002900000010070000290000000003170019000000000402041a000000000043043500000001022000390000002001100039000000000061004b00000ed50000413d00000ee50000013d00000870012001970000000000140435000000000006004b0000002001000039000000000100603900000ee50000013d000000000100001900000013050000290000003f011000390000086f021001970000000001520019000000000021004b00000000020000390000000102004039000008230010009c000008140000213d0000000100200190000008140000c13d00000014020000290000002002200039000000400010043f000000170300002900000040013000390000000000510435001400000002001d00000000003204350000001801000029001800030010003d00000015020000290000000102200039001500000002001d000000120020006c00000e660000413d00000d480000013d000008700120019700000017020000290000000000120435000000190000006b000000200200003900000000020060390000003f012000390000086f021001970000001801200029000000000021004b00000000020000390000000102004039000008230010009c000008140000213d0000000100200190000008140000c13d000000400010043f0000000e02000029000000e00120003900000018030000290000000000310435000000100100002900000040011000390000000000210435000001780000013d000008700120019700000015020000290000000000120435000000180000006b000000200200003900000000020060390000003f012000390000086f021001970000001701200029000000000021004b00000000020000390000000102004039000008230010009c000008140000213d0000000100200190000008140000c13d000000400010043f0000000d02000029000000e001200039000000170300002900000000003104350000000e01000029000000400110003900000000002104350000000b010000290000000001010433001800000001001d0000001901000029000007ff01100197001900000001001d000000000010043f0000000501000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f000000180000006b0000000e030000290000008003006039000e00000003001d0000000100200190000000450000613d000000000101043b0000001602000029000000000020043f000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b001800000001001d0000001901000029000000000010043f0000000701000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b0000001602000029000000000020043f000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b000000000101041a000007ff01100197000000010010008c0000073a0000213d000000400200043d001000000002001d000008370020009c000008140000213d000000010110015f00000007011000c9000000180310002900000010020000290000006001200039000000400010043f000000000103041a000007ff011001970000000002120436000d00000003001d0000000101300039000000000101041a000c00000002001d0000000000120435000000400100043d000f00000001001d0000083a0010009c000008140000213d0000000f010000290000010001100039000000400010043f0000000d010000290000000201100039000000000101041a000000ff0210018f000000010020008c00000aa10000213d000000500310027000000823033001970000000f05000029000000600450003900000000003404350000004803100270000000ff0330018f0000004004500039000000000034043500000000022504360000000801100270000008230110019700000000001204350000000d010000290000000301100039000000000201041a000000010320019000000001042002700000007f0440618f001900000004001d0000001f0040008c00000000040000390000000104002039000000000442013f000000010040019000000c430000c13d000000400400043d001700000004001d00000019050000290000000004540436001800000004001d000000000003004b000010760000613d000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000190000006b00000000020000190000107c0000613d000000000101043b00000000020000190000001803200029000000000401041a000000000043043500000001011000390000002002200039000000190020006c00000fc30000413d0000107c0000013d000d002000300092001000090000002d00000fdb0000013d000000100400002900000020044000390000000002ac0019000000000002043500000040029000390000000000b20435001000000004001d000000000094043500000012020000290000002002200039001200000002001d0000000e0020006c000002bc0000813d0000001202100360000000000202043b000008230020009c000000450000213d0000000f0a2000290000000d02a00069000008360020009c000000450000213d000000600020008c000000450000413d000000400900043d000008370090009c000008140000213d0000006002900039000000400020043f0000002002a00039000000000221034f000000000202043b000000000c290436000000400ba000390000000002b1034f000000000202043b000008230020009c000000450000213d0000000004a200190000003f02400039000000000032004b000000000600001900000835060080410000083502200197000000000002004b00000000070000190000083507004041000008350020009c000000000706c019000000000007004b000000450000c13d0000002002400039000000000621034f000000000d06043b0000082300d0009c000008140000213d0000001f06d000390000086f066001970000003f066000390000086f06600197000000400e00043d00000000066e00190000000000e6004b00000000070000390000000107004039000008230060009c000008140000213d0000000100700190000008140000c13d000000400060043f0000000008de04360000000004d400190000004004400039000000000034004b000000450000213d0000002002200039000000000721034f0000086f06d001980000000004680019000010230000613d000000000207034f000000000f080019000000002502043c000000000f5f043600000000004f004b0000101f0000c13d0000001f02d00190000010300000613d000000000567034f0000000302200210000000000604043300000000062601cf000000000626022f000000000505043b0000010002200089000000000525022f00000000022501cf000000000262019f00000000002404350000000002d8001900000000000204350000000000ec04350000002002b00039000000000221034f000000000202043b000008230020009c000000450000213d0000000004a200190000003f02400039000000000032004b000000000500001900000835050080410000083502200197000000000002004b00000000060000190000083506004041000008350020009c000000000605c019000000000006004b000000450000c13d0000002002400039000000000521034f000000000a05043b0000082300a0009c000008140000213d0000001f05a000390000086f055001970000003f055000390000086f05500197000000400b00043d00000000065b00190000000000b6004b00000000070000390000000107004039000008230060009c000008140000213d0000000100700190000008140000c13d000000400060043f000000000cab04360000000004a400190000004004400039000000000034004b000000450000213d0000002002200039000000000221034f0000086f06a0019800000000046c0019000010680000613d000000000702034f00000000080c0019000000007507043c0000000008580436000000000048004b000010640000c13d0000001f07a0019000000fce0000613d000000000262034f0000000305700210000000000604043300000000065601cf000000000656022f000000000202043b0000010005500089000000000252022f00000000025201cf000000000262019f000000000024043500000fce0000013d000008700120019700000018020000290000000000120435000000190000006b000000200200003900000000020060390000003f012000390000086f021001970000001701200029000000000021004b00000000020000390000000102004039000008230010009c000008140000213d0000000100200190000008140000c13d000000400010043f0000000f010000290000008001100039000000170200002900000000002104350000000d010000290000000401100039000000000201041a000000010320019000000001042002700000007f0440618f001900000004001d0000001f0040008c00000000040000390000000104002039000000000442013f000000010040019000000c430000c13d000000400400043d001700000004001d00000019050000290000000004540436001800000004001d000000000003004b000010c00000613d000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000190000006b0000000002000019000010c60000613d000000000101043b00000000020000190000001803200029000000000401041a000000000043043500000001011000390000002002200039000000190020006c000010ae0000413d000010c60000013d000000800100043d000000010010008c00000aa10000213d000001000100043d0000000012010434000000000002004b000011c20000c13d000000400100043d0000085c02000041000001180000013d000008700120019700000018020000290000000000120435000000190000006b000000200200003900000000020060390000003f012000390000086f021001970000001701200029000000000021004b00000000020000390000000102004039000008230010009c000008140000213d0000000100200190000008140000c13d000000400010043f0000000f01000029000000a001100039000000170200002900000000002104350000000d010000290000000501100039000000000201041a001100000002001d000008230020009c000008140000213d000000110200002900000005022002100000003f022000390000083802200197000000400300043d0000000002230019000b00000003001d000000000032004b00000000030000390000000103004039000008230020009c000008140000213d0000000100300190000008140000c13d000000400020043f00000011020000290000000b030000290000000000230435000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000110000006b000011930000613d000000000101043b001700000001001d001300000000001d0012000b0000002d000000400100043d001600000001001d000008370010009c000008140000213d00000016030000290000006001300039000000400010043f0000001702000029000000000102041a0000000001130436001400000001001d0000000101200039000000000201041a000000010320019000000001042002700000007f0440618f001900000004001d0000001f0040008c00000000040000390000000104002039000000000442013f000000010040019000000c430000c13d000000400400043d001500000004001d00000019050000290000000004540436001800000004001d000000000003004b000011310000613d000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000190000006b000011380000613d000000000201043b00000000010000190000001803100029000000000402041a000000000043043500000001022000390000002001100039000000190010006c000011290000413d000011390000013d000008700120019700000018020000290000000000120435000000190000006b00000020010000390000000001006039000011390000013d00000000010000190000003f011000390000086f021001970000001501200029000000000021004b00000000020000390000000102004039000008230010009c000008140000213d0000000100200190000008140000c13d000000400010043f00000014010000290000001502000029000000000021043500000017010000290000000201100039000000000201041a000000010320019000000001042002700000007f0440618f001900000004001d0000001f0040008c00000000040000390000000104002039000000000442013f000000010040019000000c430000c13d000000400400043d001500000004001d00000019050000290000000004540436001800000004001d000000000003004b000011710000613d000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000190000006b000011780000613d000000000201043b00000000010000190000001803100029000000000402041a000000000043043500000001022000390000002001100039000000190010006c000011690000413d000011790000013d000008700120019700000018020000290000000000120435000000190000006b00000020010000390000000001006039000011790000013d00000000010000190000003f011000390000086f021001970000001501200029000000000021004b00000000020000390000000102004039000008230010009c000008140000213d0000000100200190000008140000c13d00000012020000290000002002200039000000400010043f0000001603000029000000400130003900000015040000290000000000410435001200000002001d00000000003204350000001701000029001700030010003d00000013020000290000000102200039001300000002001d000000110020006c000010fd0000413d0000000f01000029000000c0011000390000000b0200002900000000002104350000000d010000290000000601100039000000000201041a000000010320019000000001042002700000007f0440618f001900000004001d0000001f0040008c00000000040000390000000104002039000000000442013f000000010040019000000c430000c13d000000400400043d001700000004001d00000019050000290000000004540436001800000004001d000000000003004b000012290000613d000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000190000006b00000000020000190000122f0000613d000000000101043b00000000020000190000001803200029000000000401041a000000000043043500000001011000390000002002200039000000190020006c000011ba0000413d0000122f0000013d000007ff0020009c000007ff020080410000006002200210000007ff0010009c000007ff010080410000004001100210000000000112019f0000000002000414000007ff0020009c000007ff02008041000000c002200210000000000112019f0000083c011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b001000000001001d000000400100043d000000200200003900000000022104360000000000020435000008440010009c000008140000213d0000004003100039000000400030043f000007ff0020009c000007ff0200804100000040022002100000000001010433000007ff0010009c000007ff010080410000006001100210000000000121019f0000000002000414000007ff0020009c000007ff02008041000000c002200210000000000112019f0000083c011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b000000100010006b000010bd0000613d000001200100043d0000000012010434000000000002004b000012260000613d000007ff0020009c000007ff020080410000006002200210000007ff0010009c000007ff010080410000004001100210000000000112019f0000000002000414000007ff0020009c000007ff02008041000000c002200210000000000112019f0000083c011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b001000000001001d000000400100043d000000200200003900000000022104360000000000020435000008440010009c000008140000213d0000004003100039000000400030043f000007ff0020009c000007ff0200804100000040022002100000000001010433000007ff0010009c000007ff010080410000006001100210000000000121019f0000000002000414000007ff0020009c000007ff02008041000000c002200210000000000112019f0000083c011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b000000100010006b000013360000c13d000000400100043d0000085b02000041000001180000013d000008700120019700000018020000290000000000120435000000190000006b000000200200003900000000020060390000003f012000390000086f021001970000001701200029000000000021004b00000000020000390000000102004039000008230010009c000008140000213d0000000100200190000008140000c13d000000400010043f0000000f02000029000000e001200039000000170300002900000000003104350000001007000029000000400170003900000000002104350000000c010000290000000003010433000000400100043d00000040020000390000000002210436001900000002001d0000000e020000290000000054020434000007ff044001970000004006100039000000000046043500000000040504330000006005100039000000000045043500000040042000390000000004040433000000800510003900000060020000390000000000250435000000000003004b000001e007006039001000000007001d0000000035040434000000010050008c00000aa10000213d000000a006100039000000000056043500000000030304330000082303300197000000c005100039000000000035043500000040034000390000000003030433000000ff0330018f000000e00510003900000000003504350000006003400039000000000303043300000823033001970000010005100039000000000035043500000080034000390000000005030433000001200610003900000100020000390000000000260435000001a00810003900000000760504340000000000680435000001c005100039000000000006004b0000127d0000613d00000000080000190000000009580019000000000a870019000000000a0a04330000000000a904350000002008800039000000000068004b000012760000413d000000000756001900000000000704350000001f066000390000086f06600197000000a0074000390000000007070433000001400810003900000120096000390000000000980435000000000556001900000000760704340000000005650436000000000006004b000012930000613d00000000080000190000000009580019000000000a870019000000000a0a04330000000000a904350000002008800039000000000068004b0000128c0000413d000000000756001900000000000704350000001f066000390000086f0660019700000000055600190000000006150049000000a00760008a000000c0064000390000000006060433000001600810003900000000007804350000000007060433000000000075043500000005087002100000000008850019000000200a800039000000000007004b000013660000c13d00000000021a0049000000a00220008a000000e003400039000000000303043300000180041000390000000000240435000000006503043400000000045a0436000000000005004b000012b70000613d000000000700001900000000024700190000000003760019000000000303043300000000003204350000002007700039000000000057004b000012b00000413d000000000245001900000000000204350000001f025000390000086f02200197000000000442001900000000021400490000001903000029000000000023043500000010050000290000000032050434000007ff0220019700000000022404360000000003030433000000000032043500000040025000390000000005020433000000400340003900000060020000390000000000230435001900000005001d0000000056050434000000010060008c00000aa10000213d000000600340003900000000006304350000000003050433000008230330019700000080054000390000000000350435000000190200002900000040032000390000000003030433000000ff0330018f000000a0054000390000000000350435000000600320003900000000030304330000082303300197000000c005400039000000000035043500000080032000390000000003030433000000e005400039000001000200003900000000002504350000016007400039000000006503043400000000005704350000018003400039000000000005004b000012f20000613d000000000700001900000000083700190000000009760019000000000909043300000000009804350000002007700039000000000057004b000012eb0000413d000000000635001900000000000604350000001f055000390000086f055001970000001902000029000000a0062000390000000006060433000001000740003900000120085000390000000000870435000000000335001900000000650604340000000003530436000000000005004b000013090000613d000000000700001900000000083700190000000009760019000000000909043300000000009804350000002007700039000000000057004b000013020000413d000000000635001900000000000604350000001f055000390000086f0550019700000000033500190000000005430049000000600650008a0000001902000029000000c00520003900000000050504330000012007400039000000000067043500000000060504330000000000630435000000050760021000000000077300190000002009700039000000000006004b000013a10000c13d0000000002490049000000600220008a0000001903000029000000e00330003900000000030304330000014004400039000000000024043500000000430304340000000002390436000000000003004b0000132f0000613d000000000500001900000000062500190000000007540019000000000707043300000000007604350000002005500039000000000035004b000013280000413d000000000423001900000000000404350000001f033000390000086f0330019700000000021200490000000002320019000007bf0000013d000000a00100043d0000082301100197000000000010043f0000000401000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000a00200043d0000082302200197000000000101043b000000000101041a000000000001004b00000c1b0000613d000000c00100043d001000000001001d000000000020043f0000000201000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d0000001002000029000000ff0420018f000000000101043b0000000101100039000000000101041a000000ff0210018f000000000042004b000013dc0000a13d000000400100043d000000240310003900000000004304350000085a03000041000000000031043500000c590000013d00000000080000190000000009050019000013710000013d0000000002ab001900000000000204350000001f02b000390000086f02200197000000000aa200190000000108800039000000000078004b000012a50000813d000000000b5a0049000000200bb0008a00000020099000390000000000b904350000002006600039000000000b06043300000000dc0b0434000000000cca0436000000000d0d0433000000600200003900000000002c0435000000600fa0003900000000ec0d04340000000000cf0435000000800da0003900000000000c004b0000138a0000613d000000000f0000190000000003df00190000000002fe001900000000020204330000000000230435000000200ff000390000000000cf004b000013830000413d0000000002dc001900000000000204350000001f02c000390000086f022001970000000002d200190000004003b000390000000003030433000000000ba20049000000400aa000390000000000ba043500000000cb030434000000000ab2043600000000000b004b000013690000613d000000000d0000190000000002ad00190000000003dc001900000000030304330000000000320435000000200dd000390000000000bd004b000013990000413d000013690000013d00000000070000190000000008030019000013ac0000013d00000000029a001900000000000204350000001f02a000390000086f0220019700000000099200190000000107700039000000000067004b0000131c0000813d000000000a390049000000200aa0008a00000020088000390000000000a804350000002005500039000000000a05043300000000cb0a0434000000000bb90436000000000c0c0433000000600200003900000000002b0435000000600e90003900000000db0c04340000000000be0435000000800c90003900000000000b004b000013c50000613d000000000e000019000000000fce00190000000002ed0019000000000202043300000000002f0435000000200ee000390000000000be004b000013be0000413d0000000002cb001900000000000204350000001f02b000390000086f022001970000000002c20019000000400aa00039000000000a0a0433000000000b92004900000040099000390000000000b9043500000000ba0a04340000000009a2043600000000000a004b000013a40000613d000000000c00001900000000029c0019000000000dcb0019000000000d0d04330000000000d20435000000200cc000390000000000ac004b000013d40000413d000013a40000013d000001400100043d0000000003010433000001010030008c000013e30000413d000000400100043d0000085902000041000001180000013d00000003054000c9000000030150011a000000000014004b000007a70000c13d000000400100043d000000000053004b000014560000a13d00000005063002100000003f0460003900000838044001970000000004410019000000000014004b00000000050000390000000105004039000008230040009c000008140000213d0000000100500190000008140000c13d000000400040043f00000000043104360000001f0560018f000000000006004b000014020000613d0000000006640019000000000700003100000002077003670000000008040019000000007907043c0000000008980436000000000068004b000013fe0000c13d000000000005004b00000000070000190000000006000019000001400500043d0000000008050433000000000078004b0000073a0000a13d00000005097002100000000005590019000000200550003900000000080504330000004005800039000000000a050433000000000a0a043300000000000a004b000014140000613d000000010660003a000007a70000613d000000200a800039000000000b0a0433000000000b0b043300000000000b004b000014580000613d000000000b08043300000000000b004b000014580000613d0000000005010433000000000075004b0000073a0000a13d00000000054900190000000000b504350000000107700039000000000037004b000014050000413d00000003022000c9000000000026004b000014960000a13d0000000002010433000000000002004b000015900000613d000000400400043d00000839020000410000000000240435000000040240003900000020030000390000000000320435000000000201043300000024034000390000000000230435000f00000004001d001000440040003d000000000002004b000014400000613d00000000030000190000002001100039000000000401043300000010050000290000000005450436001000000005001d0000000103300039000000000023004b000014380000413d000008240100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000007ff0010009c000007ff01008041000000c00110021000000825011001c700008005020000391ff91ff40000040f0000000100200190000018ea0000613d000000000201043b00000000010004140000080202200197000000040020008c0000149f0000c13d00000003010003670000000103000031000014b30000013d0000084502000041000001180000013d000000400100043d0000085802000041000000000021043500000004021000390000002003000039000000000032043500000000030804330000002402100039000000000032043500000000030a0433000000440410003900000060060000390000000000640435000000840410003900000000630304340000000000340435000000a404100039000000000003004b000014730000613d000000000700001900000000084700190000000009760019000000000909043300000000009804350000002007700039000000000037004b0000146c0000413d000000000643001900000000000604350000001f033000390000086f033001970000000006430019000000000226004900000000030504330000006404100039000000000024043500000000430304340000000002360436000000000003004b000014880000613d000000000500001900000000062500190000000007540019000000000707043300000000007604350000002005500039000000000035004b000014810000413d000000000423001900000000000404350000001f033000390000086f0330019700000000021200490000000002320019000007ff0020009c000007ff020080410000006002200210000007ff0010009c000007ff010080410000004001100210000000000112019f00001ffb000104300000000101200039000000400200043d00000024032000390000000000130435000008460100004100000000001204350000000401200039000000000061043500000b950000013d0000000f040000290000001003400069000007ff0030009c000007ff030080410000006003300210000007ff0040009c000007ff040080410000004004400210000000000343019f000007ff0010009c000007ff01008041000000c001100210000000000131019f1ff91ff40000040f0000006003100270000107ff0030019d000007ff0330019700030000000103550000000100200190000018eb0000613d0000086f043001980000001f0530018f0000000f02400029000014bd0000613d000000000601034f0000000f07000029000000006806043c0000000007870436000000000027004b000014b90000c13d000000000005004b000014ca0000613d000000000141034f0000000304500210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000001f013000390000086f021001970000000f01200029000000000021004b00000000020000390000000102004039000008230010009c000008140000213d0000000100200190000008140000c13d000000400010043f000008360030009c000000450000213d000000200030008c000000450000413d0000000f020000290000000004020433000008230040009c000000450000213d0000000f023000290000000f034000290000001f04300039000000000024004b0000000005000019000008350500804100000835064001970000083504200197000000000746013f000000000046004b00000000060000190000083506004041000008350070009c000000000605c019000000000006004b000000450000c13d0000000056030434000008230060009c000008140000213d00000005076002100000003f0870003900000838088001970000000008180019000008230080009c000008140000213d000000400080043f00000000006104350000000006570019000000000026004b000000450000213d000000000065004b000015900000813d000000200720008a0000000058050434000008230080009c000000450000213d00000000093800190000000008970049000008360080009c000000450000213d000001000080008c000000450000413d000000400800043d0000083a0080009c000008140000213d000001000a8000390000004000a0043f000000200a900039000000000a0a0433000007ff00a0009c000000450000213d000000000aa80436000000400b900039000000000b0b0433000007ff00b0009c000000450000213d0000000000ba0435000000600a900039000000000a0a0433000007ff00a0009c000000450000213d000000400b8000390000000000ab0435000000800a900039000000000a0a0433000000600b8000390000000000ab0435000000a00a900039000000000a0a0433000000800b8000390000000000ab0435000000a00a800039000000c00b900039000000000b0b04330000000000ba0435000000e00a900039000000000a0a04330000082300a0009c000000450000213d000000000b9a00190000003f0ab0003900000000002a004b000000000c000019000008350c008041000008350aa00197000000000d4a013f00000000004a004b000000000a000019000008350a0040410000083500d0009c000000000a0cc01900000000000a004b000000450000c13d000000200ab00039000000000c0a04330000082300c0009c000008140000213d000000050dc002100000003f0ad00039000008380ea00197000000400a00043d000000000eea00190000000000ae004b000000000f000039000000010f0040390000082300e0009c000008140000213d0000000100f00190000008140000c13d0000004000e0043f0000000000ca0435000000400bb00039000000000cbd001900000000002c004b000000450000213d0000000000cb004b000015580000813d000000000d0a0019000000200dd0003900000000be0b04340000000000ed04350000000000cb004b000015530000413d000000c00b8000390000000000ab0435000001000a900039000000000a0a04330000082300a0009c000000450000213d000000000a9a00190000003f09a00039000000000029004b000000000b000019000008350b0080410000083509900197000000000c49013f000000000049004b000000000900001900000835090040410000083500c0009c00000000090bc019000000000009004b000000450000c13d0000002009a00039000000000b0904330000082300b0009c000008140000213d000000050cb002100000003f09c00039000008380d900197000000400900043d000000000dd9001900000000009d004b000000000e000039000000010e0040390000082300d0009c000008140000213d0000000100e00190000008140000c13d0000004000d0043f0000000000b90435000000400aa00039000000000bac001900000000002b004b000000450000213d0000000000ba004b0000158a0000813d000000000c090019000000200cc0003900000000ad0a04340000000000dc04350000000000ba004b000015850000413d0000002001100039000000e00a80003900000000009a04350000000000810435000000000065004b000014fe0000413d000000190100002900000018020000291ff91f3c0000040f000000150010006c000018f70000c13d000000150000006b000015a30000613d0000000001000414000007ff0010009c000007ff01008041000000c0011002100000083c011001c70000800d020000390000000203000039000008480400004100000015050000291ff91fef0000040f0000000100200190000000450000613d0000000601000039000000000201041a000007ff03200197000007ff0030009c000007a70000613d0000080402200197000e00010030003d0000000e022001af000000000021041b000000400100043d001500000001001d00000020021000390000002001000039001000000002001d000000000012043500000002010003670000001602100360000000000202043b000000010020008c000000450000213d00000015030000290000004003300039000d00000003001d00000000002304350000001402100360000000000202043b000008230020009c000000450000213d0000001503000029000000600330003900000000002304350000001302100360000000000202043b000000ff0020008c000000450000213d0000001503000029000000800330003900000000002304350000001102100360000000000202043b000008230020009c000000450000213d0000001503000029000000a00330003900000000002304350000000c021003600000001603000029000f00000000003500000000033000790000001f0530008a000000000202043b0000083503200197000808350050019b000000080430014f000000080030006c00000000030000190000083503004041000900000005001d000000000052004b00000000050000190000083505008041000008350040009c000000000305c019000000000003004b000000450000c13d0000001602200029000000000321034f000000000603043b000008230060009c000000450000213d00000020022000390000000f03600069000000000032004b0000000004000019000008350400204100000835033001970000083505200197000000000735013f000000000035004b00000000030000190000083503004041000008350070009c000000000304c019000000000003004b000000450000c13d0000001509000029000000c0039000390000010004000039000000000043043500000140039000390000000000630435000000000521034f0000086f076001980000001f0860018f000001600290003900000000047200190000160a0000613d000000000305034f0000000009020019000000003a03043c0000000009a90436000000000049004b000016060000c13d000000000008004b000016170000613d000000000375034f0000000305800210000000000704043300000000075701cf000000000757022f000000000303043b0000010005500089000000000353022f00000000035301cf000000000373019f0000000000340435000000000326001900000000000304350000000b03100360000000000303043b0000083504300197000000080540014f000000080040006c00000000040000190000083504004041000000090030006c00000000070000190000083507008041000008350050009c000000000407c019000000000004004b000000450000c13d0000001603300029000000000431034f000000000804043b000008230080009c000000450000213d00000020033000390000000f04800069000000000043004b0000000005000019000008350500204100000835044001970000083507300197000000000947013f000000000047004b00000000040000190000083504004041000008350090009c000000000405c019000000000004004b000000450000c13d0000001f046000390000086f0440019700000000022400190000000d0420006a0000001505000029000000e0055000390000000000450435000000000531034f00000000028204360000086f038001980000001f0680018f00000000043200190000164e0000613d000000000705034f0000000009020019000000007a07043c0000000009a90436000000000049004b0000164a0000c13d000000000006004b0000165b0000613d000000000335034f0000000305600210000000000604043300000000065601cf000000000656022f000000000303043b0000010005500089000000000353022f00000000035301cf000000000363019f0000000000340435000000000328001900000000000304350000000a03100360000000000303043b0000083504300197000000080540014f000000080040006c00000000040000190000083504004041000000090030006c00000000060000190000083506008041000008350050009c000000000406c019000000000004004b000000450000c13d0000001604300029000000000341034f000000000303043b000700000003001d000008230030009c000000450000213d0000002007400039000000070300002900000005033002100000000f05300069000000000057004b000000000600001900000835060020410000083505500197000600000007001d0000083507700197000000000957013f000000000057004b00000000050000190000083505004041000008350090009c000000000506c019000000000005004b000000450000c13d0000001f058000390000086f0550019700000000062500190000000d0260006a00000015050000290000010005500039000000000025043500000007050000290000000000560435000500000006001d00000000023600190000002009200039000000000005004b000017400000613d0000000f024000690000007f0220008a000200000002001d000108350020019b000400050000002d000300000000001d000000060f000029000000050290006a000000200220008a00000004030000290000002003300039000400000003001d00000000002304350000000002f1034f000000000202043b0000083503200197000000010430014f000000010030006c00000000030000190000083503004041000000020020006c00000000050000190000083505008041000008350040009c000000000305c019000000000003004b000000450000c13d000000060c2000290000000002c1034f000000000202043b0000000007290436000000200bc000390000000002b1034f000000000202043b0000000f03c000690000001f0a30008a0000083504a001970000083503200197000000000543013f000000000043004b000000000300001900000835030040410000000000a2004b00000000060000190000083506008041000008350050009c000000000306c019000000000003004b000000450000c13d0000000003c20019000000000231034f000000000202043b000008230020009c000000450000213d00000020033000390000000f05200069000000000053004b0000000006000019000008350600204100000835055001970000083508300197000000000e58013f000000000058004b000000000500001900000835050040410000083500e0009c000000000506c019000000000005004b000000450000c13d0000006005000039000000000057043500000060059000390000000000250435000000000831034f0000086f06200198000000800e90003900000000056e0019000016e50000613d000000000308034f00000000070e0019000000003d03043c0000000007d70436000000000057004b000016e10000c13d0000001f03200190000016f20000613d000000000668034f0000000303300210000000000705043300000000073701cf000000000737022f000000000606043b0000010003300089000000000636022f00000000033601cf000000000373019f00000000003504350000000003e2001900000000000304350000002003b00039000000000331034f000000000303043b0000083505300197000000000645013f000000000045004b000000000400001900000835040040410000000000a3004b00000000050000190000083505008041000008350060009c000000000405c019000000000004004b000000450000c13d0000000003c30019000000000431034f000000000404043b000008230040009c000000450000213d00000020033000390000000f05400069000000000053004b0000000006000019000008350600204100000835055001970000083507300197000000000857013f000000000057004b00000000050000190000083505004041000008350080009c000000000506c019000000000005004b000000450000c13d0000001f022000390000086f022001970000000002e20019000000000592004900000040069000390000000000560435000000000331034f00000000024204360000086f064001980000000005620019000017280000613d000000000703034f0000000008020019000000007907043c0000000008980436000000000058004b000017240000c13d0000001f07400190000017350000613d000000000363034f0000000306700210000000000705043300000000076701cf000000000767022f000000000303043b0000010006600089000000000363022f00000000036301cf000000000373019f00000000003504350000001f034000390000086f03300197000000000424001900000000000404350000000009230019000000200ff0003900000003030000290000000103300039000300000003001d000000070030006c000016980000413d0000001202100360000000000202043b0000083503200197000000080430014f000000080030006c00000000030000190000083503004041000000090020006c00000000050000190000083505008041000008350040009c000000000305c019000000000003004b000000450000c13d0000001603200029000000000231034f000000000202043b000008230020009c000000450000213d00000020033000390000000f04200069000000000043004b0000000005000019000008350500204100000835044001970000083506300197000000000746013f000000000046004b00000000040000190000083504004041000008350070009c000000000405c019000000000004004b000000450000c13d0000000d0490006a000000150500002900000120055000390000000000450435000000000431034f00000000012904360000086f052001980000001f0620018f0000000003510019000017720000613d000000000704034f0000000008010019000000007907043c0000000008980436000000000038004b0000176e0000c13d000000000006004b0000177f0000613d000000000454034f0000000305600210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f000000000043043500000000031200190000000000030435000000150400002900000000014100490000001f022000390000086f022001970000000001120019000000200210008a00000000002404350000001f011000390000086f011001970000000002410019000000000012004b00000000010000390000000101004039000d00000002001d000008230020009c000008140000213d0000000100100190000008140000c13d0000000d01000029000000400010043f00000020021000390000084901000041000f00000002001d00000000001204350000084a0100004100000000001004430000000001000414000007ff0010009c000007ff01008041000000c0011002100000084b011001c70000800b020000391ff91ff40000040f0000000100200190000018ea0000613d000000000101043b0000000d04000029000000c0024000390000000e030000290000000000320435000000a00240003900000018030000290000000000320435000000600240003900000000030004110000000000320435000000400240003900000000001204350000001901000029000007ff021001970000008001400039001900000002001d0000000000210435000000c00100003900000000001404350000084c0040009c000008140000213d0000000d030000290000010002300039000000e001300039000000400010043f0000000003030433000000000003004b000017c90000613d000000000400001900000000052400190000000f06400029000000000606043300000000006504350000002004400039000000000034004b000017c20000413d0000000004230019000000000004043500000015050000290000000005050433000000000005004b000017d70000613d000000000600001900000000074600190000001008600029000000000808043300000000008704350000002006600039000000000056004b000017d00000413d00000000044500190000000000040435000000000335001900000000003104350000003f033000390000086f043001970000000003140019000000000043004b00000000040000390000000104004039000008230030009c000008140000213d0000000100400190000008140000c13d000000400030043f000007ff0020009c000007ff0200804100000040022002100000000001010433000007ff0010009c000007ff010080410000006001100210000000000121019f0000000002000414000007ff0020009c000007ff02008041000000c002200210000000000112019f0000083c011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b001500000001001d0000001901000029000000000010043f0000000501000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b0000001802000029000000000020043f000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b001000000001001d0000001901000029000000000010043f0000000701000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b0000001802000029000000000020043f000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b000000000101041a000007ff01100197000000010010008c0000073a0000213d00000015020000290000084d022001970000084e022001c7000000010110015f00000007011000c900000010031000290000000101300039000d00000002001d000000000021041b000000000103041a00000804011001970000000e011001af001500000003001d000000000013041b00000002010003670000001602100360000000000302043b000000010030008c000000450000213d000000140410036000000015020000290000000202200039000000000502041a0000087005500197000000000335019f000000000032041b000000000404043b000008230040009c000000450000213d0000084f0330019700000008044002100000085004400197000000000334019f000000000032041b0000001304100360000000000404043b000000ff0040008c000000450000213d000008510330019700000048044002100000085204400197000000000334019f000000000032041b0000001104100360000000000404043b000008230040009c000000450000213d000008530330019700000050044002100000085404400197000000000334019f000000000032041b0000000c031003600000000002000031000000170420006a000000230440008a000000000303043b00000835053001970000083506400197000000000765013f000000000065004b00000000050000190000083505004041000000000043004b00000000040000190000083504008041000008350070009c000000000504c019000000000005004b000000450000c13d0000001603300029000000000131034f000000000101043b001800000001001d000008230010009c000000450000213d000000180120006a000000200530003900000835021001970000083503500197000000000423013f000000000023004b00000000020000190000083502004041001900000005001d000000000015004b00000000010000190000083501002041000008350040009c000000000201c019000000000002004b000000450000c13d00000015010000290000000301100039001400000001001d000000000101041a000000010010019000000001021002700000007f0220618f001300000002001d0000001f0020008c00000000020000390000000102002039000000000121013f000000010010019000000c430000c13d0000001301000029000000200010008c000018be0000413d0000001401000029000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d00000018030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000013010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b000018be0000813d000000000002041b0000000102200039000000000012004b000018ba0000413d0000001801000029000000200010008c00130001001002180011000300100218000018fb0000413d0000001401000029000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000200200008a00000018032001800000000202000367000000000101043b0000000004000019000018dc0000613d0000001905400029000000000552034f000000000505043b000000000051041b00000001011000390000002004400039000000000034004b000018d40000413d000000180030006c000018e70000813d0000001103000029000000f80330018f000008710330027f00000871033001670000001904400029000000000442034f000000000404043b000000000334016f000000000031041b000000130100002900000001011001bf000019070000013d000000000001042f0000001f0530018f0000080106300198000000400200043d000000000462001900000e530000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000018f20000c13d00000e530000013d000000400200043d0000002403200039000000150400002900000b900000013d0000000202000367000000180000006b000019000000c13d0000000001000019000019070000013d000000010100008a0000001103100250000000000113013f0000001903200360000000000303043b000000000113016f00000013011001af0000001403000029000000000013041b0000000b032003600000000001000031000000170410006a000000230440008a000000000303043b00000835053001970000083506400197000000000765013f000000000065004b00000000050000190000083505004041000000000043004b00000000040000190000083504008041000008350070009c000000000504c019000000000005004b000000450000c13d0000001603300029000000000232034f000000000202043b001800000002001d000008230020009c000000450000213d000000180110006a000000200530003900000835021001970000083503500197000000000423013f000000000023004b00000000020000190000083502004041001900000005001d000000000015004b00000000010000190000083501002041000008350040009c000000000201c019000000000002004b000000450000c13d00000015010000290000000401100039001400000001001d000000000101041a000000010010019000000001021002700000007f0220618f001300000002001d0000001f0020008c00000000020000390000000102002039000000000121013f000000010010019000000c430000c13d0000001301000029000000200010008c0000195e0000413d0000001401000029000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d00000018030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000013010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b0000195e0000813d000000000002041b0000000102200039000000000012004b0000195a0000413d0000001801000029000000200010008c001300010010021800110003001002180000198a0000413d0000001401000029000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000200200008a00000018032001800000000202000367000000000101043b00000000040000190000197c0000613d0000001905400029000000000552034f000000000505043b000000000051041b00000001011000390000002004400039000000000034004b000019740000413d000000180030006c000019870000813d0000001103000029000000f80330018f000008710330027f00000871033001670000001904400029000000000442034f000000000404043b000000000334016f000000000031041b000000130100002900000001011001bf000019960000013d0000000202000367000000180000006b0000198f0000c13d0000000001000019000019960000013d000000010100008a0000001103100250000000000113013f0000001903200360000000000303043b000000000113016f00000013011001af0000001403000029000000000013041b0000000a032003600000000001000031000000170410006a000000230440008a000000000303043b00000835053001970000083506400197000000000765013f000000000065004b00000000050000190000083505004041000000000043004b00000000040000190000083504008041000008350070009c000000000504c019000000000005004b000000450000c13d000c00160030002d0000000c02200360000000000202043b001400000002001d000008230020009c000000450000213d0000001402000029000000050220021000000000012100490000000c02000029000000200520003900000835021001970000083503500197000000000423013f000000000023004b00000000020000190000083502004041000b00000005001d000000000015004b00000000010000190000083501002041000008350040009c000000000201c019000000000002004b000000450000c13d00000015010000290000000503100039000000000103041a0000001402000029001100000003001d000000000023041b000000000021004b00001a4d0000a13d00000003021000c9001900000002001d000000030220011a000000000021004b000007a70000c13d000000140200002900000003012000c9001800000001001d0000085501100197000000030110011a000000000012004b000007a70000c13d0000001101000029000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b00000018021000290000001901100029001900000002001d001000000001001d000000000012004b00001a4d0000813d0000001901000029000000000001041b0000000101100039001800000001001d000000000101041a000000010010019000000001021002700000007f0220618f001300000002001d0000001f0020008c00000000020000390000000102002039000000000121013f000000010010019000000c430000c13d000000130000006b00001a190000613d00000013010000290000001f0010008c00001a170000a13d0000001801000029000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b00000013020000290000001f02200039000000050220027000000000022100190000000103100039000000000023004b00001a140000813d000000000003041b0000000103300039000000000023004b00001a100000413d0000001802000029000000000002041b001800000001001d0000001801000029000000000001041b00000019010000290000000201100039001800000001001d000000000101041a000000010010019000000001021002700000007f0220618f001300000002001d0000001f0020008c00000000020000390000000102002039000000000121013f000000010010019000000c430000c13d000000130000006b00001a480000613d00000013010000290000001f0010008c00001a460000a13d0000001801000029000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000000101043b00000013020000290000001f02200039000000050220027000000000022100190000000103100039000000000023004b00001a430000813d000000000003041b0000000103300039000000000023004b00001a3f0000413d0000001802000029000000000002041b001800000001001d0000001801000029000000000001041b00000019010000290000000301100039001900000001001d000000100010006c000019e90000413d0000001101000029000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000140000006b00001ba20000613d000000000101043b001300000001001d000a00000000001d0011000b0000002d00000002020003670000001101200360000000000301043b00000000010000310000000c0410006a0000007f0440008a00000835054001970000083506300197000000000756013f000000000056004b00000000050000190000083505004041000000000043004b00000000040000190000083504008041000008350070009c000000000504c019000000000005004b000000450000c13d0000000b05300029000000000352034f000000000303043b0000001304000029000000000034041b000700200050003d0000000703200360000000000303043b001000000005001d00000000045100490000001f0440008a00000835054001970000083506300197000000000756013f000000000056004b00000000050000190000083505004041000000000043004b00000000040000190000083504008041000008350070009c000000000504c019000000000005004b000000450000c13d0000001003300029000000000232034f000000000202043b001800000002001d000008230020009c000000450000213d000000180110006a000000200530003900000835021001970000083503500197000000000423013f000000000023004b00000000020000190000083502004041001900000005001d000000000015004b00000000010000190000083501002041000008350040009c000000000201c019000000000002004b000000450000c13d00000013010000290000000101100039000f00000001001d000000000101041a000000010010019000000001021002700000007f0220618f000900000002001d0000001f0020008c00000000020000390000000102002039000000000121013f000000010010019000000c430000c13d0000000901000029000000200010008c00001acc0000413d0000000f01000029000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d00000018030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000009010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b00001acc0000813d000000000002041b0000000102200039000000000012004b00001ac80000413d00000018010000290000001f0010008c0009000100100218000800030010021800001af80000a13d0000000f01000029000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000200200008a00000018032001800000000202000367000000000101043b000000000400001900001aea0000613d0000001905400029000000000552034f000000000505043b000000000051041b00000001011000390000002004400039000000000034004b00001ae20000413d000000180030006c00001af50000813d0000000803000029000000f80330018f000008710330027f00000871033001670000001904400029000000000442034f000000000404043b000000000334016f000000000031041b000000090100002900000001011001bf00001b040000013d0000000202000367000000180000006b00001b030000613d000000010300008a0000000801300250000000000131013f0000001903200360000000000303043b000000000113016f00000009011001af00001b040000013d00000000010000190000000f03000029000000000013041b00000007010000290000002001100039000000000312034f0000000001000031000000100410006a0000001f0440008a000000000303043b00000835053001970000083506400197000000000765013f000000000065004b00000000050000190000083505004041000000000043004b00000000040000190000083504008041000008350070009c000000000504c019000000000005004b000000450000c13d0000001003300029000000000232034f000000000202043b001800000002001d000008230020009c000000450000213d000000180110006a000000200530003900000835021001970000083503500197000000000423013f000000000023004b00000000020000190000083502004041001900000005001d000000000015004b00000000010000190000083501002041000008350040009c000000000201c019000000000002004b000000450000c13d00000013010000290000000201100039001000000001001d000000000101041a000000010010019000000001021002700000007f0220618f000f00000002001d0000001f0020008c00000000020000390000000102002039000000000121013f000000010010019000000c430000c13d0000000f01000029000000200010008c00001b5d0000413d0000001001000029000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d00000018030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b0000000f010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b00001b5d0000813d000000000002041b0000000102200039000000000012004b00001b590000413d0000001801000029000000200010008c000f000100100218000900030010021800001b7c0000413d0000001001000029000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000200200008a0000001802200180000000000101043b00001b870000613d000000020400036700000000030000190000001905300029000000000554034f000000000505043b000000000051041b00000001011000390000002003300039000000000023004b00001b730000413d00001b880000013d000000180000006b00001b960000613d000000010200008a0000000901200250000000000121013f00000019020000290000000202200367000000000202043b000000000112016f0000000f011001af00001b970000013d0000000003000019000000180020006c00001b930000813d0000000902000029000000f80220018f000008710220027f000008710220016700000019033000290000000203300367000000000303043b000000000223016f000000000021041b0000000f0100002900000001011001bf00001b970000013d00000000010000190000001002000029000000000012041b0000001301000029001300030010003d0000001101000029001100200010003d0000000a020000290000000102200039000a00000002001d000000140020006c00001a5e0000413d00000002020003670000001201200360000000000301043b0000000001000031000000170410006a000000230440008a00000835054001970000083506300197000000000756013f000000000056004b00000000050000190000083505004041000000000043004b00000000040000190000083504008041000008350070009c000000000504c019000000000005004b000000450000c13d0000001603300029000000000232034f000000000202043b001800000002001d000008230020009c000000450000213d000000180110006a000000200530003900000835021001970000083503500197000000000423013f000000000023004b00000000020000190000083502004041001900000005001d000000000015004b00000000010000190000083501002041000008350040009c000000000201c019000000000002004b000000450000c13d00000015010000290000000601100039001700000001001d000000000101041a000000010010019000000001021002700000007f0220618f001500000002001d0000001f0020008c00000000020000390000000102002039000000000121013f000000010010019000000c430000c13d0000001501000029000000200010008c00001bf80000413d0000001701000029000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d00000018030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000015010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b00001bf80000813d000000000002041b0000000102200039000000000012004b00001bf40000413d0000001801000029000000200010008c0015000100100218001400030010021800001c240000413d0000001701000029000000000010043f0000000001000414000007ff0010009c000007ff01008041000000c00110021000000830011001c700008010020000391ff91ff40000040f0000000100200190000000450000613d000000200200008a00000018032001800000000202000367000000000101043b000000000400001900001c160000613d0000001905400029000000000552034f000000000505043b000000000051041b00000001011000390000002004400039000000000034004b00001c0e0000413d000000180030006c00001c210000813d0000001403000029000000f80330018f000008710330027f00000871033001670000001904400029000000000442034f000000000404043b000000000334016f000000000031041b000000150100002900000001011001bf00001c300000013d0000000202000367000000180000006b00001c290000c13d000000000100001900001c300000013d000000010100008a0000001403100250000000000113013f0000001903200360000000000303043b000000000113016f00000015011001af0000001703000029000000000013041b000000400400043d0000002001400039000000400300003900000000003104350000000e01000029000007ff01100197001900000004001d00000000001404350000001201000029000000e00110008a000000000312034f000000000303043b000000010030008c000000450000213d00000019040000290000004004400039001700000004001d00000000003404350000002001100039000000000312034f000000000303043b000008230030009c000000450000213d0000001904000029000000600440003900000000003404350000002001100039000000000312034f000000000303043b000000ff0030008c000000450000213d0000001904000029000000800440003900000000003404350000002003100039000000000132034f000000000101043b000008230010009c000000450000213d0000001904000029000000a00440003900000000001404350000001601000029001800000000003500000000011000790000001f0510008a0000002007300039000000000172034f000000000301043b0000083501300197001408350050019b000000140410014f000000140010006c00000000010000190000083501004041001500000005001d000000000053004b00000000050000190000083505008041000008350040009c000000000105c019000000000001004b000000450000c13d0000001601300029000000000312034f000000000303043b000008230030009c000000450000213d00000020041000390000001801300069000000000014004b0000000005000019000008350500204100000835011001970000083506400197000000000816013f000000000016004b00000000010000190000083501004041000008350080009c000000000105c019000000000001004b000000450000c13d0000001906000029000000c0016000390000010005000039000000000051043500000140016000390000000000310435000000000442034f0000086f083001980000001f0930018f0000016005600039000000000685001900001c970000613d000000000a04034f000000000105001900000000ab0a043c0000000001b10436000000000061004b00001c930000c13d000000000009004b00001ca40000613d000000000184034f0000000304900210000000000806043300000000084801cf000000000848022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000181019f0000000000160435000000000153001900000000000104350000002007700039000000000172034f000000000401043b0000083501400197000000140610014f000000140010006c00000000010000190000083501004041000000150040006c00000000080000190000083508008041000008350060009c000000000108c019000000000001004b000000450000c13d0000001601400029000000000412034f000000000904043b000008230090009c000000450000213d00000020041000390000001801900069000000000014004b0000000006000019000008350600204100000835011001970000083508400197000000000a18013f000000000018004b000000000100001900000835010040410000083500a0009c000000000106c019000000000001004b000000450000c13d0000001f013000390000086f011001970000000001510019000000170310006a0000001905000029000000e0055000390000000000350435000000000442034f00000000039104360000086f069001980000001f0890018f000000000563001900001cdc0000613d000000000a04034f000000000103001900000000ab0a043c0000000001b10436000000000051004b00001cd80000c13d000000000008004b00001ce90000613d000000000164034f0000000304800210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000000013900190000000000010435000e00200070003d0000000e01200360000000000401043b0000083501400197000000140510014f000000140010006c00000000010000190000083501004041000000150040006c00000000060000190000083506008041000008350050009c000000000106c019000000000001004b000000450000c13d0000001605400029000000000152034f000000000101043b001300000001001d000008230010009c000000450000213d0000002007500039000000130100002900000005041002100000001801400069000000000017004b000000000600001900000835060020410000083501100197001200000007001d0000083507700197000000000817013f000000000017004b00000000010000190000083501004041000008350080009c000000000106c019000000000001004b000000450000c13d0000001f019000390000086f011001970000000006310019000000170160006a00000019030000290000010003300039000000000013043500000013030000290000000000360435001100000006001d0000000001460019000000200b100039000000000003004b00001dcf0000613d00000018015000690000007f0110008a000c00000001001d000b08350010019b001000110000002d000f00000000001d00000012090000290000001101b0006a000000200110008a00000010030000290000002003300039001000000003001d0000000000130435000000000192034f000000000301043b00000835013001970000000b0410014f0000000b0010006c000000000100001900000835010040410000000c0030006c00000000050000190000083505008041000008350040009c000000000105c019000000000001004b000000450000c13d0000001207300029000000000172034f000000000101043b00000000061b04360000002005700039000000000152034f000000000401043b00000018017000690000001f0d10008a0000083503d001970000083501400197000000000831013f000000000031004b000000000100001900000835010040410000000000d4004b000000000a000019000008350a008041000008350080009c00000000010ac019000000000001004b000000450000c13d0000000001740019000000000412034f000000000c04043b0000082300c0009c000000450000213d00000020041000390000001801c00069000000000014004b000000000800001900000835080020410000083501100197000008350a400197000000000e1a013f00000000001a004b000000000100001900000835010040410000083500e0009c000000000108c019000000000001004b000000450000c13d000000600100003900000000001604350000006001b000390000000000c10435000000000142034f0000086f0ac00198000000800eb000390000000004ae001900001d740000613d000000000801034f00000000060e0019000000008f08043c0000000006f60436000000000046004b00001d700000c13d0000001f06c0019000001d810000613d0000000001a1034f0000000306600210000000000804043300000000086801cf000000000868022f000000000101043b0000010006600089000000000161022f00000000016101cf000000000181019f00000000001404350000000001ec001900000000000104350000002001500039000000000112034f000000000401043b0000083501400197000000000531013f000000000031004b000000000100001900000835010040410000000000d4004b00000000030000190000083503008041000008350050009c000000000103c019000000000001004b000000450000c13d0000000001740019000000000312034f000000000303043b000008230030009c000000450000213d00000020041000390000001801300069000000000014004b0000000005000019000008350500204100000835011001970000083506400197000000000716013f000000000016004b00000000010000190000083501004041000008350070009c000000000105c019000000000001004b000000450000c13d0000001f01c000390000086f011001970000000001e100190000000005b100490000004006b000390000000000560435000000000642034f00000000053104360000086f07300198000000000475001900001db70000613d000000000106034f0000000008050019000000001a01043c0000000008a80436000000000048004b00001db30000c13d0000001f0130019000001dc40000613d000000000676034f0000000301100210000000000704043300000000071701cf000000000717022f000000000606043b0000010001100089000000000616022f00000000011601cf000000000171019f00000000001404350000001f013000390000086f0110019700000000035300190000000000030435000000000b51001900000020099000390000000f030000290000000103300039000f00000003001d000000130030006c00001d270000413d0000000e010000290000002001100039000000000112034f000000000301043b0000083501300197000000140410014f000000140010006c00000000010000190000083501004041000000150030006c00000000050000190000083505008041000008350040009c000000000105c019000000000001004b000000450000c13d0000001601300029000000000312034f000000000303043b000008230030009c000000450000213d00000020041000390000001801300069000000000014004b0000000005000019000008350500204100000835011001970000083506400197000000000716013f000000000016004b00000000010000190000083501004041000008350070009c000000000105c019000000000001004b000000450000c13d0000001701b0006a000000190500002900000120055000390000000000150435000000000542034f00000000023b04360000086f063001980000001f0730018f000000000462001900001e030000613d000000000105034f0000000008020019000000001901043c0000000008980436000000000048004b00001dff0000c13d000000000007004b00001e100000613d000000000165034f0000000305700210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000000123001900000000000104350000001f013000390000086f01100197000000190300002900000000023200490000000001120019000007ff0010009c000007ff010080410000006001100210000007ff0030009c000007ff030080410000004002300210000000000121019f0000000002000414000007ff0020009c000007ff02008041000000c002200210000000000112019f0000083c011001c70000800d02000039000000020300003900000856040000410000000d050000291ff91fef0000040f0000000100200190000000450000613d000000400100043d0000000d020000290000000000210435000007ff0010009c000007ff01008041000000400110021000000857011001c700001ffa0001042e00000000430104340000000001320436000000000003004b00001e3f0000613d000000000200001900000000051200190000000006240019000000000606043300000000006504350000002002200039000000000032004b00001e380000413d000000000213001900000000000204350000001f023000390000086f022001970000000001210019000000000001042d00010000000000020000000043010434000007ff03300197000000000332043600000000040404330000000000430435000000400110003900000000010104330000004004200039000000600300003900000000003404350000000045010434000000020050008c00001ef30000813d00000060062000390000000000560435000000000404043300000823044001970000008005200039000000000045043500000040041000390000000004040433000000ff0440018f000000a0052000390000000000450435000000600410003900000000040404330000082304400197000000c005200039000000000045043500000080041000390000000004040433000000e005200039000001000600003900000000006504350000016005200039000000006404043400000000004504350000018005200039000000000004004b00001e760000613d000000000700001900000000085700190000000009760019000000000909043300000000009804350000002007700039000000000047004b00001e6f0000413d000000000654001900000000000604350000001f064000390000086f06600197000000a0071000390000000007070433000001000820003900000120096000390000000000980435000000000556001900000000760704340000000005650436000000000006004b00001e8c0000613d00000000080000190000000009580019000000000a870019000000000a0a04330000000000a904350000002008800039000000000068004b00001e850000413d000000000756001900000000000704350000001f066000390000086f0660019700000000055600190000000006250049000000600760008a000000c0061000390000000006060433000001200820003900000000007804350000000007060433000000000075043500000005087002100000000008850019000000200a800039000000000007004b000100000001001d00001eda0000613d0000000008000019000000000905001900001eaa0000013d0000000001ab001900000000000104350000001f01b000390000086f01100197000000000aa100190000000108800039000000000078004b00001eda0000813d000000000b5a0049000000200bb0008a00000020099000390000000000b904350000002006600039000000000b06043300000000dc0b0434000000000cca0436000000000d0d0433000000600100003900000000001c0435000000600fa0003900000000ec0d04340000000000cf0435000000800da0003900000000000c004b00001ec30000613d000000000f0000190000000001df00190000000003fe001900000000030304330000000000310435000000200ff000390000000000cf004b00001ebc0000413d0000000001dc001900000000000104350000001f01c000390000086f011001970000000001d100190000004003b000390000000003030433000000000ba10049000000400aa000390000000000ba043500000000cb030434000000000ab1043600000000000b004b00001ea20000613d000000000d0000190000000001ad00190000000003dc001900000000030304330000000000310435000000200dd000390000000000bd004b00001ed20000413d00001ea20000013d00000000012a0049000000600110008a0000000103000029000000e003300039000000000303043300000140022000390000000000120435000000003203043400000000012a0436000000000002004b00001eed0000613d000000000500001900000000061500190000000007530019000000000707043300000000007604350000002005500039000000000025004b00001ee60000413d000000000312001900000000000304350000001f022000390000086f022001970000000001120019000000000001042d0000083201000041000000000010043f0000002101000039000000040010043f0000082e0100004100001ffb00010430000008360010009c00001f070000213d000000430010008c00001f070000a13d00000002020003670000000401200370000000000101043b000007ff0010009c00001f070000213d0000002402200370000000000202043b000000010020008c00001f070000213d000000000001042d000000000100001900001ffb00010430000007ff01100197000000000010043f0000000501000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f000000010020019000001f180000613d000000000101043b000000000001042d000000000100001900001ffb00010430000000020020008c00001f290000813d000000000020043f000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f000000010020019000001f2f0000613d000000000101043b000000000001042d0000083201000041000000000010043f0000002101000039000000040010043f0000082e0100004100001ffb00010430000000000100001900001ffb00010430000000020020008c00001f360000813d00000007022000c90000000001120019000000000001042d0000083201000041000000000010043f0000003201000039000000040010043f0000082e0100004100001ffb000104300003000000000002000300000002001d000007ff01100197000200000001001d000000000010043f0000000501000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f000000010020019000001f820000613d0000000302000029000000020020008c00001f840000813d000000000101043b000000000020043f000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f000000010020019000001f820000613d000000000101043b000100000001001d0000000201000029000000000010043f0000000701000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f000000010020019000001f820000613d000000000101043b0000000302000029000000000020043f000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f000000010020019000001f820000613d000000000101043b000000000101041a000007ff01100197000000020010008c00001f8a0000813d000000010110015f00000007011000c900000001011000290000000101100039000000000101041a000000000001042d000000000100001900001ffb000104300000083201000041000000000010043f0000002101000039000000040010043f0000082e0100004100001ffb000104300000083201000041000000000010043f0000003201000039000000040010043f0000082e0100004100001ffb000104300001000000000002000100000002001d000007ff01100197000000000010043f0000000701000039000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f000000010020019000001fb30000613d0000000102000029000000020020008c00001fb50000813d000000000101043b000000000020043f000000200010043f0000000001000414000007ff0010009c000007ff01008041000000c0011002100000082f011001c700008010020000391ff91ff40000040f000000010020019000001fb30000613d000000000101043b000000000101041a000007ff01100197000000010110015f000000000001042d000000000100001900001ffb000104300000083201000041000000000010043f0000002101000039000000040010043f0000082e0100004100001ffb00010430000000000001042f000007ff0010009c000007ff010080410000004001100210000007ff0020009c000007ff020080410000006002200210000000000112019f0000000002000414000007ff0020009c000007ff02008041000000c002200210000000000112019f0000083c011001c700008010020000391ff91ff40000040f000000010020019000001fcf0000613d000000000101043b000000000001042d000000000100001900001ffb0001043000000000050100190000000000200443000000050030008c00001fdf0000413d000000040100003900000000020000190000000506200210000000000664001900000005066002700000000006060031000000000161043a0000000102200039000000000031004b00001fd70000413d000007ff0030009c000007ff0300804100000060013002100000000002000414000007ff0020009c000007ff02008041000000c002200210000000000112019f00000872011001c700000000020500191ff91ff40000040f000000010020019000001fee0000613d000000000101043b000000000001042d000000000001042f00001ff2002104210000000102000039000000000001042d0000000002000019000000000001042d00001ff7002104230000000102000039000000000001042d0000000002000019000000000001042d00001ff90000043200001ffa0001042e00001ffb0001043000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000002000000000000000000000000000000800000010000000000000000008579befe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000009b15e16f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000079ba509600000000000000000000000000000000000000000000000000000000b74b235500000000000000000000000000000000000000000000000000000000f2fde38a00000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000f442c89a00000000000000000000000000000000000000000000000000000000fba64a7c00000000000000000000000000000000000000000000000000000000b74b235600000000000000000000000000000000000000000000000000000000bae4e0fa000000000000000000000000000000000000000000000000000000008318ed5c000000000000000000000000000000000000000000000000000000008318ed5d000000000000000000000000000000000000000000000000000000008da5cb5b00000000000000000000000000000000000000000000000000000000922ea4060000000000000000000000000000000000000000000000000000000079ba5097000000000000000000000000000000000000000000000000000000007ac0d41e000000000000000000000000000000000000000000000000000000003df45a71000000000000000000000000000000000000000000000000000000005a837f96000000000000000000000000000000000000000000000000000000005a837f97000000000000000000000000000000000000000000000000000000005f1edd9c000000000000000000000000000000000000000000000000000000007524051a000000000000000000000000000000000000000000000000000000003df45a72000000000000000000000000000000000000000000000000000000004851d54900000000000000000000000000000000000000000000000000000000181f5a7600000000000000000000000000000000000000000000000000000000181f5a770000000000000000000000000000000000000000000000000000000033d9704a0000000000000000000000000000000000000000000000000000000001ffc9a700000000000000000000000000000000000000000000000000000000020330e6000000000000000000000000000000000000000000000000ffffffffffffffff310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e0200000200000000000000000000000000000044000000000000000000000000ac7a7efd00000000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000000000005a837f97000000000000000000000000000000000000000000000000000000007524051a00000000000000000000000000000000000000000000000000000000bae4e0fa000000000000000000000000000000000000000000000000000000008a6e4ce800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004400000000000000000000000012ba286f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000020000000000000000000000000000000000004000000000000000000000000002000000000000000000000000000000000000200000000000000000000000003da8a5f161a6c3ff06a60736d0ed24d7963cc6a5c4fafd2fa1dae9bb908e07a64e487b71000000000000000000000000000000000000000000000000000000002a680691fef3b2d105196805935232c661ce703e92d464ef0b94a7bc62d714f01bd4d2d20000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffff9f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe005a5196600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffeff3da8a5f161a6c3ff06a60736d0ed24d7963cc6a5c4fafd2fa1dae9bb908e07a5020000000000000000000000000000000000000000000000000000000000000005dd57854af2c291a94ea52e7c43d80bc3be7fa73022f98b735dea86642fa5e0a9b3766e000000000000000000000000000000000000000000000000000000002b5c74de000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000800000000000000000ed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278dad89dca00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffe7f000000000000000000000000000000000000000000000000ffffffffffffffbf4856694e00000000000000000000000000000000000000000000000000000000548dd21f0000000000000000000000000000000000000000000000000000000093df584c0000000000000000000000000000000000000000000000000000000053f5d9228f0a4173bea6e5931c9b3afe6eeb6692ede1d182952970f152534e3b45564d00000000000000000000000000000000000000000000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b0200000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff1f0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000a000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff0000000000000000000000000000000000000000000000ffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff00000000000000000000000000000000000000000000ff000000000000000000ffffffffffffffffffffffffffff0000000000000000ffffffffffffffffffff0000000000000000000000000000ffffffffffffffff0000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff94f085b7c57ec2a270befd0b7b2ec7452580040edee8bb0fb04609c81f0359c600000000000000000000000000000000000000200000000000000000000000009fa40314000000000000000000000000000000000000000000000000000000001b925da6000000000000000000000000000000000000000000000000000000002db2204000000000000000000000000000000000000000000000000000000000dee9857400000000000000000000000000000000000000000000000000000000358c192700000000000000000000000000000000000000000000000000000000698cf8e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f000000000000000000000000000000000000000000000000ffffffffffffff3f00000000000000000000000000000000000000200000008000000000000000000000000000000000000000000000000000000000000000a0000000000000000002b543c6000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e00849d8cc00000000000000000000000000000000000000000000000000000000371a7328000000000000000000000000000000000000000000000000000000000b31c0055e2d464bef7781994b98c4ff9ef4ae0d05f59feb6a68c42de5e201b8fc3e98dbbd47c3fa7c1c05b6ec711caeaf70eca4554192b9ada8fc11a37f298e7b4d1e4f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000043434950486f6d6520312e362e302d64657600000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffc9a70000000000000000000000000000000000000000000000000000000078bea72100000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0200000200000000000000000000000000000000000000000000000000000000") diff --git a/core/gethwrappers/ccip/generated_zks/ccip_reader_tester/ccip_reader_tester.go b/core/gethwrappers/ccip/generated_zks/ccip_reader_tester/ccip_reader_tester.go new file mode 100644 index 00000000000..9ab3776ef2a --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/ccip_reader_tester/ccip_reader_tester.go @@ -0,0 +1,897 @@ +package ccip_reader_tester + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type IRMNRemoteSignature struct { + R [32]byte + S [32]byte +} + +type InternalEVM2AnyRampMessage struct { + Header InternalRampMessageHeader + Sender common.Address + Data []byte + Receiver []byte + ExtraArgs []byte + FeeToken common.Address + FeeTokenAmount *big.Int + FeeValueJuels *big.Int + TokenAmounts []InternalEVM2AnyTokenTransfer +} + +type InternalEVM2AnyTokenTransfer struct { + SourcePoolAddress common.Address + DestTokenAddress []byte + ExtraData []byte + Amount *big.Int + DestExecData []byte +} + +type InternalGasPriceUpdate struct { + DestChainSelector uint64 + UsdPerUnitGas *big.Int +} + +type InternalMerkleRoot struct { + SourceChainSelector uint64 + OnRampAddress []byte + MinSeqNr uint64 + MaxSeqNr uint64 + MerkleRoot [32]byte +} + +type InternalPriceUpdates struct { + TokenPriceUpdates []InternalTokenPriceUpdate + GasPriceUpdates []InternalGasPriceUpdate +} + +type InternalRampMessageHeader struct { + MessageId [32]byte + SourceChainSelector uint64 + DestChainSelector uint64 + SequenceNumber uint64 + Nonce uint64 +} + +type InternalTokenPriceUpdate struct { + SourceToken common.Address + UsdPerToken *big.Int +} + +type OffRampCommitReport struct { + PriceUpdates InternalPriceUpdates + MerkleRoots []InternalMerkleRoot + RmnSignatures []IRMNRemoteSignature +} + +type OffRampSourceChainConfig struct { + Router common.Address + IsEnabled bool + MinSeqNr uint64 + OnRamp []byte +} + +var CCIPReaderTesterMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeValueJuels\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sourcePoolAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"destExecData\",\"type\":\"bytes\"}],\"internalType\":\"structInternal.EVM2AnyTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structInternal.EVM2AnyRampMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"CCIPMessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"}],\"name\":\"CommitReportAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"name\":\"ExecutionStateChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeValueJuels\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sourcePoolAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"destExecData\",\"type\":\"bytes\"}],\"internalType\":\"structInternal.EVM2AnyTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.EVM2AnyRampMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"emitCCIPMessageSent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMNRemote.Signature[]\",\"name\":\"rmnSignatures\",\"type\":\"tuple[]\"}],\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"report\",\"type\":\"tuple\"}],\"name\":\"emitCommitReportAccepted\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"name\":\"emitExecutionStateChanged\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getExpectedNextSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"getInboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLatestPriceSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"getSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"setDestChainSeqNr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"testNonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"setInboundNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"seqNr\",\"type\":\"uint64\"}],\"name\":\"setLatestPriceSequenceNumber\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"sourceChainConfig\",\"type\":\"tuple\"}],\"name\":\"setSourceChainConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b50611960806100206000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063bfc9b78911610081578063c92236251161005b578063c9223625146101f9578063e83eabba1461020c578063e9d68a8e1461021f57600080fd5b8063bfc9b7891461017e578063c1a5a35514610191578063c7c1cba1146101e657600080fd5b806369600bca116100b257806369600bca1461010f5780639041be3d1461015857806393df28671461016b57600080fd5b80633f4b04aa146100ce5780634bf78697146100fa575b600080fd5b60035467ffffffffffffffff165b60405167ffffffffffffffff90911681526020015b60405180910390f35b61010d610108366004610a4e565b61023f565b005b61010d61011d366004610b89565b600380547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff92909216919091179055565b6100dc610166366004610b89565b610298565b61010d610179366004610bf4565b6102c8565b61010d61018c366004610ea2565b610343565b61010d61019f36600461102d565b67ffffffffffffffff918216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001691909216179055565b61010d6101f4366004611060565b610385565b6100dc6102073660046110f2565b6103e2565b61010d61021a366004611145565b61042e565b61023261022d366004610b89565b610518565b6040516100f19190611265565b80600001516060015167ffffffffffffffff168267ffffffffffffffff167f192442a2b2adb6a7948f097023cb6b57d29d3a7a5dd33e6666d33c39cc456f328360405161028c91906113ab565b60405180910390a35050565b67ffffffffffffffff808216600090815260016020819052604082205491926102c2921690611503565b92915050565b67ffffffffffffffff84166000908152600260205260409081902090518491906102f59085908590611552565b908152604051908190036020019020805467ffffffffffffffff929092167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090921691909117905550505050565b602081015181516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e49261037a929091611656565b60405180910390a150565b848667ffffffffffffffff168867ffffffffffffffff167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b878787876040516103d1949392919061172e565b60405180910390a450505050505050565b67ffffffffffffffff8316600090815260026020526040808220905161040b9085908590611552565b9081526040519081900360200190205467ffffffffffffffff1690509392505050565b67ffffffffffffffff808316600090815260208181526040918290208451815492860151938601519094167501000000000000000000000000000000000000000000027fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff93151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090931673ffffffffffffffffffffffffffffffffffffffff909516949094179190911791909116919091178155606082015182919060018201906105119082611839565b5050505050565b604080516080808201835260008083526020808401829052838501829052606080850181905267ffffffffffffffff87811684528383529286902086519485018752805473ffffffffffffffffffffffffffffffffffffffff8116865274010000000000000000000000000000000000000000810460ff1615159386019390935275010000000000000000000000000000000000000000009092049092169483019490945260018401805493949293918401916105d490611795565b80601f016020809104026020016040519081016040528092919081815260200182805461060090611795565b801561064d5780601f106106225761010080835404028352916020019161064d565b820191906000526020600020905b81548152906001019060200180831161063057829003601f168201915b5050505050815250509050919050565b803567ffffffffffffffff8116811461067557600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156106cc576106cc61067a565b60405290565b604051610120810167ffffffffffffffff811182821017156106cc576106cc61067a565b6040805190810167ffffffffffffffff811182821017156106cc576106cc61067a565b6040516060810167ffffffffffffffff811182821017156106cc576106cc61067a565b6040516080810167ffffffffffffffff811182821017156106cc576106cc61067a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107a6576107a661067a565b604052919050565b600060a082840312156107c057600080fd5b6107c86106a9565b9050813581526107da6020830161065d565b60208201526107eb6040830161065d565b60408201526107fc6060830161065d565b606082015261080d6080830161065d565b608082015292915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461083a57600080fd5b50565b803561067581610818565b600082601f83011261085957600080fd5b813567ffffffffffffffff8111156108735761087361067a565b6108a460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161075f565b8181528460208386010111156108b957600080fd5b816020850160208301376000918101602001919091529392505050565b600067ffffffffffffffff8211156108f0576108f061067a565b5060051b60200190565b600082601f83011261090b57600080fd5b8135602061092061091b836108d6565b61075f565b82815260059290921b8401810191818101908684111561093f57600080fd5b8286015b84811015610a4357803567ffffffffffffffff808211156109645760008081fd5b818901915060a0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d0301121561099d5760008081fd5b6109a56106a9565b6109b088850161083d565b8152604080850135848111156109c65760008081fd5b6109d48e8b83890101610848565b8a84015250606080860135858111156109ed5760008081fd5b6109fb8f8c838a0101610848565b83850152506080915081860135818401525082850135925083831115610a215760008081fd5b610a2f8d8a85880101610848565b908201528652505050918301918301610943565b509695505050505050565b60008060408385031215610a6157600080fd5b610a6a8361065d565b9150602083013567ffffffffffffffff80821115610a8757600080fd5b908401906101a08287031215610a9c57600080fd5b610aa46106d2565b610aae87846107ae565b8152610abc60a0840161083d565b602082015260c083013582811115610ad357600080fd5b610adf88828601610848565b60408301525060e083013582811115610af757600080fd5b610b0388828601610848565b6060830152506101008084013583811115610b1d57600080fd5b610b2989828701610848565b608084015250610b3c610120850161083d565b60a083015261014084013560c083015261016084013560e083015261018084013583811115610b6a57600080fd5b610b76898287016108fa565b8284015250508093505050509250929050565b600060208284031215610b9b57600080fd5b610ba48261065d565b9392505050565b60008083601f840112610bbd57600080fd5b50813567ffffffffffffffff811115610bd557600080fd5b602083019150836020828501011115610bed57600080fd5b9250929050565b60008060008060608587031215610c0a57600080fd5b610c138561065d565b9350610c216020860161065d565b9250604085013567ffffffffffffffff811115610c3d57600080fd5b610c4987828801610bab565b95989497509550505050565b80357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116811461067557600080fd5b600082601f830112610c9257600080fd5b81356020610ca261091b836108d6565b82815260069290921b84018101918181019086841115610cc157600080fd5b8286015b84811015610a435760408189031215610cde5760008081fd5b610ce66106f6565b610cef8261065d565b8152610cfc858301610c55565b81860152835291830191604001610cc5565b600082601f830112610d1f57600080fd5b81356020610d2f61091b836108d6565b82815260059290921b84018101918181019086841115610d4e57600080fd5b8286015b84811015610a4357803567ffffffffffffffff80821115610d735760008081fd5b818901915060a0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d03011215610dac5760008081fd5b610db46106a9565b610dbf88850161065d565b815260408085013584811115610dd55760008081fd5b610de38e8b83890101610848565b8a8401525060609350610df784860161065d565b908201526080610e0885820161065d565b93820193909352920135908201528352918301918301610d52565b600082601f830112610e3457600080fd5b81356020610e4461091b836108d6565b82815260069290921b84018101918181019086841115610e6357600080fd5b8286015b84811015610a435760408189031215610e805760008081fd5b610e886106f6565b813581528482013585820152835291830191604001610e67565b60006020808385031215610eb557600080fd5b823567ffffffffffffffff80821115610ecd57600080fd5b9084019060608287031215610ee157600080fd5b610ee9610719565b823582811115610ef857600080fd5b83016040818903811315610f0b57600080fd5b610f136106f6565b823585811115610f2257600080fd5b8301601f81018b13610f3357600080fd5b8035610f4161091b826108d6565b81815260069190911b8201890190898101908d831115610f6057600080fd5b928a01925b82841015610fb05785848f031215610f7d5760008081fd5b610f856106f6565b8435610f9081610818565b8152610f9d858d01610c55565b818d0152825292850192908a0190610f65565b845250505082870135915084821115610fc857600080fd5b610fd48a838501610c81565b81880152835250508284013582811115610fed57600080fd5b610ff988828601610d0e565b8583015250604083013593508184111561101257600080fd5b61101e87858501610e23565b60408201529695505050505050565b6000806040838503121561104057600080fd5b6110498361065d565b91506110576020840161065d565b90509250929050565b600080600080600080600060e0888a03121561107b57600080fd5b6110848861065d565b96506110926020890161065d565b955060408801359450606088013593506080880135600481106110b457600080fd5b925060a088013567ffffffffffffffff8111156110d057600080fd5b6110dc8a828b01610848565b92505060c0880135905092959891949750929550565b60008060006040848603121561110757600080fd5b6111108461065d565b9250602084013567ffffffffffffffff81111561112c57600080fd5b61113886828701610bab565b9497909650939450505050565b6000806040838503121561115857600080fd5b6111618361065d565b9150602083013567ffffffffffffffff8082111561117e57600080fd5b908401906080828703121561119257600080fd5b61119a61073c565b82356111a581610818565b8152602083013580151581146111ba57600080fd5b60208201526111cb6040840161065d565b60408201526060830135828111156111e257600080fd5b6111ee88828601610848565b6060830152508093505050509250929050565b6000815180845260005b818110156112275760208185018101518683018201520161120b565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815273ffffffffffffffffffffffffffffffffffffffff825116602082015260208201511515604082015267ffffffffffffffff6040830151166060820152600060608301516080808401526112c060a0840182611201565b949350505050565b600082825180855260208086019550808260051b84010181860160005b8481101561139e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018952815160a073ffffffffffffffffffffffffffffffffffffffff825116855285820151818787015261134782870182611201565b915050604080830151868303828801526113618382611201565b9250505060608083015181870152506080808301519250858203818701525061138a8183611201565b9a86019a94505050908301906001016112e5565b5090979650505050505050565b602081526113fc60208201835180518252602081015167ffffffffffffffff808216602085015280604084015116604085015280606084015116606085015280608084015116608085015250505050565b6000602083015161142560c084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516101a08060e08501526114426101c0850183611201565b915060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06101008187860301818801526114808584611201565b945060808801519250818786030161012088015261149e8584611201565b945060a088015192506114ca61014088018473ffffffffffffffffffffffffffffffffffffffff169052565b60c088015161016088015260e08801516101808801528701518685039091018387015290506114f983826112c8565b9695505050505050565b67ffffffffffffffff81811683821601908082111561154b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5092915050565b8183823760009101908152919050565b805160408084528151848201819052600092602091908201906060870190855b818110156115db578351805173ffffffffffffffffffffffffffffffffffffffff1684528501517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16858401529284019291850191600101611582565b50508583015187820388850152805180835290840192506000918401905b8083101561164a578351805167ffffffffffffffff1683528501517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16858301529284019260019290920191908501906115f9565b50979650505050505050565b60006040808301604084528086518083526060925060608601915060608160051b8701016020808a0160005b8481101561170e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018652815160a067ffffffffffffffff8083511687528583015182878901526116d983890182611201565b848d01518316898e01528b8501519092168b890152506080928301519290960191909152509482019490820190600101611682565b5050878203908801526117218189611562565b9998505050505050505050565b84815260006004851061176a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b846020830152608060408301526117846080830185611201565b905082606083015295945050505050565b600181811c908216806117a957607f821691505b6020821081036117e2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f821115611834576000816000526020600020601f850160051c810160208610156118115750805b601f850160051c820191505b818110156118305782815560010161181d565b5050505b505050565b815167ffffffffffffffff8111156118535761185361067a565b611867816118618454611795565b846117e8565b602080601f8311600181146118ba57600084156118845750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555611830565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015611907578886015182559484019460019091019084016118e8565b508582101561194357878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b0190555056fea164736f6c6343000818000a", +} + +var CCIPReaderTesterABI = CCIPReaderTesterMetaData.ABI + +var CCIPReaderTesterBin = CCIPReaderTesterMetaData.Bin + +func DeployCCIPReaderTester(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *generated_zks.Transaction, *CCIPReaderTester, error) { + parsed, err := CCIPReaderTesterMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(CCIPReaderTesterZKBin), backend) + contractReturn := &CCIPReaderTester{address: address, abi: *parsed, CCIPReaderTesterCaller: CCIPReaderTesterCaller{contract: contractBind}, CCIPReaderTesterTransactor: CCIPReaderTesterTransactor{contract: contractBind}, CCIPReaderTesterFilterer: CCIPReaderTesterFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(CCIPReaderTesterBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &CCIPReaderTester{address: address, abi: *parsed, CCIPReaderTesterCaller: CCIPReaderTesterCaller{contract: contract}, CCIPReaderTesterTransactor: CCIPReaderTesterTransactor{contract: contract}, CCIPReaderTesterFilterer: CCIPReaderTesterFilterer{contract: contract}}, nil +} + +type CCIPReaderTester struct { + address common.Address + abi abi.ABI + CCIPReaderTesterCaller + CCIPReaderTesterTransactor + CCIPReaderTesterFilterer +} + +type CCIPReaderTesterCaller struct { + contract *bind.BoundContract +} + +type CCIPReaderTesterTransactor struct { + contract *bind.BoundContract +} + +type CCIPReaderTesterFilterer struct { + contract *bind.BoundContract +} + +type CCIPReaderTesterSession struct { + Contract *CCIPReaderTester + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type CCIPReaderTesterCallerSession struct { + Contract *CCIPReaderTesterCaller + CallOpts bind.CallOpts +} + +type CCIPReaderTesterTransactorSession struct { + Contract *CCIPReaderTesterTransactor + TransactOpts bind.TransactOpts +} + +type CCIPReaderTesterRaw struct { + Contract *CCIPReaderTester +} + +type CCIPReaderTesterCallerRaw struct { + Contract *CCIPReaderTesterCaller +} + +type CCIPReaderTesterTransactorRaw struct { + Contract *CCIPReaderTesterTransactor +} + +func NewCCIPReaderTester(address common.Address, backend bind.ContractBackend) (*CCIPReaderTester, error) { + abi, err := abi.JSON(strings.NewReader(CCIPReaderTesterABI)) + if err != nil { + return nil, err + } + contract, err := bindCCIPReaderTester(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &CCIPReaderTester{address: address, abi: abi, CCIPReaderTesterCaller: CCIPReaderTesterCaller{contract: contract}, CCIPReaderTesterTransactor: CCIPReaderTesterTransactor{contract: contract}, CCIPReaderTesterFilterer: CCIPReaderTesterFilterer{contract: contract}}, nil +} + +func NewCCIPReaderTesterCaller(address common.Address, caller bind.ContractCaller) (*CCIPReaderTesterCaller, error) { + contract, err := bindCCIPReaderTester(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &CCIPReaderTesterCaller{contract: contract}, nil +} + +func NewCCIPReaderTesterTransactor(address common.Address, transactor bind.ContractTransactor) (*CCIPReaderTesterTransactor, error) { + contract, err := bindCCIPReaderTester(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &CCIPReaderTesterTransactor{contract: contract}, nil +} + +func NewCCIPReaderTesterFilterer(address common.Address, filterer bind.ContractFilterer) (*CCIPReaderTesterFilterer, error) { + contract, err := bindCCIPReaderTester(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &CCIPReaderTesterFilterer{contract: contract}, nil +} + +func bindCCIPReaderTester(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := CCIPReaderTesterMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_CCIPReaderTester *CCIPReaderTesterRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _CCIPReaderTester.Contract.CCIPReaderTesterCaller.contract.Call(opts, result, method, params...) +} + +func (_CCIPReaderTester *CCIPReaderTesterRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CCIPReaderTester.Contract.CCIPReaderTesterTransactor.contract.Transfer(opts) +} + +func (_CCIPReaderTester *CCIPReaderTesterRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _CCIPReaderTester.Contract.CCIPReaderTesterTransactor.contract.Transact(opts, method, params...) +} + +func (_CCIPReaderTester *CCIPReaderTesterCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _CCIPReaderTester.Contract.contract.Call(opts, result, method, params...) +} + +func (_CCIPReaderTester *CCIPReaderTesterTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CCIPReaderTester.Contract.contract.Transfer(opts) +} + +func (_CCIPReaderTester *CCIPReaderTesterTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _CCIPReaderTester.Contract.contract.Transact(opts, method, params...) +} + +func (_CCIPReaderTester *CCIPReaderTesterCaller) GetExpectedNextSequenceNumber(opts *bind.CallOpts, destChainSelector uint64) (uint64, error) { + var out []interface{} + err := _CCIPReaderTester.contract.Call(opts, &out, "getExpectedNextSequenceNumber", destChainSelector) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +func (_CCIPReaderTester *CCIPReaderTesterSession) GetExpectedNextSequenceNumber(destChainSelector uint64) (uint64, error) { + return _CCIPReaderTester.Contract.GetExpectedNextSequenceNumber(&_CCIPReaderTester.CallOpts, destChainSelector) +} + +func (_CCIPReaderTester *CCIPReaderTesterCallerSession) GetExpectedNextSequenceNumber(destChainSelector uint64) (uint64, error) { + return _CCIPReaderTester.Contract.GetExpectedNextSequenceNumber(&_CCIPReaderTester.CallOpts, destChainSelector) +} + +func (_CCIPReaderTester *CCIPReaderTesterCaller) GetInboundNonce(opts *bind.CallOpts, sourceChainSelector uint64, sender []byte) (uint64, error) { + var out []interface{} + err := _CCIPReaderTester.contract.Call(opts, &out, "getInboundNonce", sourceChainSelector, sender) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +func (_CCIPReaderTester *CCIPReaderTesterSession) GetInboundNonce(sourceChainSelector uint64, sender []byte) (uint64, error) { + return _CCIPReaderTester.Contract.GetInboundNonce(&_CCIPReaderTester.CallOpts, sourceChainSelector, sender) +} + +func (_CCIPReaderTester *CCIPReaderTesterCallerSession) GetInboundNonce(sourceChainSelector uint64, sender []byte) (uint64, error) { + return _CCIPReaderTester.Contract.GetInboundNonce(&_CCIPReaderTester.CallOpts, sourceChainSelector, sender) +} + +func (_CCIPReaderTester *CCIPReaderTesterCaller) GetLatestPriceSequenceNumber(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _CCIPReaderTester.contract.Call(opts, &out, "getLatestPriceSequenceNumber") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +func (_CCIPReaderTester *CCIPReaderTesterSession) GetLatestPriceSequenceNumber() (uint64, error) { + return _CCIPReaderTester.Contract.GetLatestPriceSequenceNumber(&_CCIPReaderTester.CallOpts) +} + +func (_CCIPReaderTester *CCIPReaderTesterCallerSession) GetLatestPriceSequenceNumber() (uint64, error) { + return _CCIPReaderTester.Contract.GetLatestPriceSequenceNumber(&_CCIPReaderTester.CallOpts) +} + +func (_CCIPReaderTester *CCIPReaderTesterCaller) GetSourceChainConfig(opts *bind.CallOpts, sourceChainSelector uint64) (OffRampSourceChainConfig, error) { + var out []interface{} + err := _CCIPReaderTester.contract.Call(opts, &out, "getSourceChainConfig", sourceChainSelector) + + if err != nil { + return *new(OffRampSourceChainConfig), err + } + + out0 := *abi.ConvertType(out[0], new(OffRampSourceChainConfig)).(*OffRampSourceChainConfig) + + return out0, err + +} + +func (_CCIPReaderTester *CCIPReaderTesterSession) GetSourceChainConfig(sourceChainSelector uint64) (OffRampSourceChainConfig, error) { + return _CCIPReaderTester.Contract.GetSourceChainConfig(&_CCIPReaderTester.CallOpts, sourceChainSelector) +} + +func (_CCIPReaderTester *CCIPReaderTesterCallerSession) GetSourceChainConfig(sourceChainSelector uint64) (OffRampSourceChainConfig, error) { + return _CCIPReaderTester.Contract.GetSourceChainConfig(&_CCIPReaderTester.CallOpts, sourceChainSelector) +} + +func (_CCIPReaderTester *CCIPReaderTesterTransactor) EmitCCIPMessageSent(opts *bind.TransactOpts, destChainSelector uint64, message InternalEVM2AnyRampMessage) (*types.Transaction, error) { + return _CCIPReaderTester.contract.Transact(opts, "emitCCIPMessageSent", destChainSelector, message) +} + +func (_CCIPReaderTester *CCIPReaderTesterSession) EmitCCIPMessageSent(destChainSelector uint64, message InternalEVM2AnyRampMessage) (*types.Transaction, error) { + return _CCIPReaderTester.Contract.EmitCCIPMessageSent(&_CCIPReaderTester.TransactOpts, destChainSelector, message) +} + +func (_CCIPReaderTester *CCIPReaderTesterTransactorSession) EmitCCIPMessageSent(destChainSelector uint64, message InternalEVM2AnyRampMessage) (*types.Transaction, error) { + return _CCIPReaderTester.Contract.EmitCCIPMessageSent(&_CCIPReaderTester.TransactOpts, destChainSelector, message) +} + +func (_CCIPReaderTester *CCIPReaderTesterTransactor) EmitCommitReportAccepted(opts *bind.TransactOpts, report OffRampCommitReport) (*types.Transaction, error) { + return _CCIPReaderTester.contract.Transact(opts, "emitCommitReportAccepted", report) +} + +func (_CCIPReaderTester *CCIPReaderTesterSession) EmitCommitReportAccepted(report OffRampCommitReport) (*types.Transaction, error) { + return _CCIPReaderTester.Contract.EmitCommitReportAccepted(&_CCIPReaderTester.TransactOpts, report) +} + +func (_CCIPReaderTester *CCIPReaderTesterTransactorSession) EmitCommitReportAccepted(report OffRampCommitReport) (*types.Transaction, error) { + return _CCIPReaderTester.Contract.EmitCommitReportAccepted(&_CCIPReaderTester.TransactOpts, report) +} + +func (_CCIPReaderTester *CCIPReaderTesterTransactor) EmitExecutionStateChanged(opts *bind.TransactOpts, sourceChainSelector uint64, sequenceNumber uint64, messageId [32]byte, messageHash [32]byte, state uint8, returnData []byte, gasUsed *big.Int) (*types.Transaction, error) { + return _CCIPReaderTester.contract.Transact(opts, "emitExecutionStateChanged", sourceChainSelector, sequenceNumber, messageId, messageHash, state, returnData, gasUsed) +} + +func (_CCIPReaderTester *CCIPReaderTesterSession) EmitExecutionStateChanged(sourceChainSelector uint64, sequenceNumber uint64, messageId [32]byte, messageHash [32]byte, state uint8, returnData []byte, gasUsed *big.Int) (*types.Transaction, error) { + return _CCIPReaderTester.Contract.EmitExecutionStateChanged(&_CCIPReaderTester.TransactOpts, sourceChainSelector, sequenceNumber, messageId, messageHash, state, returnData, gasUsed) +} + +func (_CCIPReaderTester *CCIPReaderTesterTransactorSession) EmitExecutionStateChanged(sourceChainSelector uint64, sequenceNumber uint64, messageId [32]byte, messageHash [32]byte, state uint8, returnData []byte, gasUsed *big.Int) (*types.Transaction, error) { + return _CCIPReaderTester.Contract.EmitExecutionStateChanged(&_CCIPReaderTester.TransactOpts, sourceChainSelector, sequenceNumber, messageId, messageHash, state, returnData, gasUsed) +} + +func (_CCIPReaderTester *CCIPReaderTesterTransactor) SetDestChainSeqNr(opts *bind.TransactOpts, destChainSelector uint64, sequenceNumber uint64) (*types.Transaction, error) { + return _CCIPReaderTester.contract.Transact(opts, "setDestChainSeqNr", destChainSelector, sequenceNumber) +} + +func (_CCIPReaderTester *CCIPReaderTesterSession) SetDestChainSeqNr(destChainSelector uint64, sequenceNumber uint64) (*types.Transaction, error) { + return _CCIPReaderTester.Contract.SetDestChainSeqNr(&_CCIPReaderTester.TransactOpts, destChainSelector, sequenceNumber) +} + +func (_CCIPReaderTester *CCIPReaderTesterTransactorSession) SetDestChainSeqNr(destChainSelector uint64, sequenceNumber uint64) (*types.Transaction, error) { + return _CCIPReaderTester.Contract.SetDestChainSeqNr(&_CCIPReaderTester.TransactOpts, destChainSelector, sequenceNumber) +} + +func (_CCIPReaderTester *CCIPReaderTesterTransactor) SetInboundNonce(opts *bind.TransactOpts, sourceChainSelector uint64, testNonce uint64, sender []byte) (*types.Transaction, error) { + return _CCIPReaderTester.contract.Transact(opts, "setInboundNonce", sourceChainSelector, testNonce, sender) +} + +func (_CCIPReaderTester *CCIPReaderTesterSession) SetInboundNonce(sourceChainSelector uint64, testNonce uint64, sender []byte) (*types.Transaction, error) { + return _CCIPReaderTester.Contract.SetInboundNonce(&_CCIPReaderTester.TransactOpts, sourceChainSelector, testNonce, sender) +} + +func (_CCIPReaderTester *CCIPReaderTesterTransactorSession) SetInboundNonce(sourceChainSelector uint64, testNonce uint64, sender []byte) (*types.Transaction, error) { + return _CCIPReaderTester.Contract.SetInboundNonce(&_CCIPReaderTester.TransactOpts, sourceChainSelector, testNonce, sender) +} + +func (_CCIPReaderTester *CCIPReaderTesterTransactor) SetLatestPriceSequenceNumber(opts *bind.TransactOpts, seqNr uint64) (*types.Transaction, error) { + return _CCIPReaderTester.contract.Transact(opts, "setLatestPriceSequenceNumber", seqNr) +} + +func (_CCIPReaderTester *CCIPReaderTesterSession) SetLatestPriceSequenceNumber(seqNr uint64) (*types.Transaction, error) { + return _CCIPReaderTester.Contract.SetLatestPriceSequenceNumber(&_CCIPReaderTester.TransactOpts, seqNr) +} + +func (_CCIPReaderTester *CCIPReaderTesterTransactorSession) SetLatestPriceSequenceNumber(seqNr uint64) (*types.Transaction, error) { + return _CCIPReaderTester.Contract.SetLatestPriceSequenceNumber(&_CCIPReaderTester.TransactOpts, seqNr) +} + +func (_CCIPReaderTester *CCIPReaderTesterTransactor) SetSourceChainConfig(opts *bind.TransactOpts, sourceChainSelector uint64, sourceChainConfig OffRampSourceChainConfig) (*types.Transaction, error) { + return _CCIPReaderTester.contract.Transact(opts, "setSourceChainConfig", sourceChainSelector, sourceChainConfig) +} + +func (_CCIPReaderTester *CCIPReaderTesterSession) SetSourceChainConfig(sourceChainSelector uint64, sourceChainConfig OffRampSourceChainConfig) (*types.Transaction, error) { + return _CCIPReaderTester.Contract.SetSourceChainConfig(&_CCIPReaderTester.TransactOpts, sourceChainSelector, sourceChainConfig) +} + +func (_CCIPReaderTester *CCIPReaderTesterTransactorSession) SetSourceChainConfig(sourceChainSelector uint64, sourceChainConfig OffRampSourceChainConfig) (*types.Transaction, error) { + return _CCIPReaderTester.Contract.SetSourceChainConfig(&_CCIPReaderTester.TransactOpts, sourceChainSelector, sourceChainConfig) +} + +type CCIPReaderTesterCCIPMessageSentIterator struct { + Event *CCIPReaderTesterCCIPMessageSent + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPReaderTesterCCIPMessageSentIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPReaderTesterCCIPMessageSent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(CCIPReaderTesterCCIPMessageSent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *CCIPReaderTesterCCIPMessageSentIterator) Error() error { + return it.fail +} + +func (it *CCIPReaderTesterCCIPMessageSentIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPReaderTesterCCIPMessageSent struct { + DestChainSelector uint64 + SequenceNumber uint64 + Message InternalEVM2AnyRampMessage + Raw types.Log +} + +func (_CCIPReaderTester *CCIPReaderTesterFilterer) FilterCCIPMessageSent(opts *bind.FilterOpts, destChainSelector []uint64, sequenceNumber []uint64) (*CCIPReaderTesterCCIPMessageSentIterator, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + var sequenceNumberRule []interface{} + for _, sequenceNumberItem := range sequenceNumber { + sequenceNumberRule = append(sequenceNumberRule, sequenceNumberItem) + } + + logs, sub, err := _CCIPReaderTester.contract.FilterLogs(opts, "CCIPMessageSent", destChainSelectorRule, sequenceNumberRule) + if err != nil { + return nil, err + } + return &CCIPReaderTesterCCIPMessageSentIterator{contract: _CCIPReaderTester.contract, event: "CCIPMessageSent", logs: logs, sub: sub}, nil +} + +func (_CCIPReaderTester *CCIPReaderTesterFilterer) WatchCCIPMessageSent(opts *bind.WatchOpts, sink chan<- *CCIPReaderTesterCCIPMessageSent, destChainSelector []uint64, sequenceNumber []uint64) (event.Subscription, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + var sequenceNumberRule []interface{} + for _, sequenceNumberItem := range sequenceNumber { + sequenceNumberRule = append(sequenceNumberRule, sequenceNumberItem) + } + + logs, sub, err := _CCIPReaderTester.contract.WatchLogs(opts, "CCIPMessageSent", destChainSelectorRule, sequenceNumberRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPReaderTesterCCIPMessageSent) + if err := _CCIPReaderTester.contract.UnpackLog(event, "CCIPMessageSent", 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 +} + +func (_CCIPReaderTester *CCIPReaderTesterFilterer) ParseCCIPMessageSent(log types.Log) (*CCIPReaderTesterCCIPMessageSent, error) { + event := new(CCIPReaderTesterCCIPMessageSent) + if err := _CCIPReaderTester.contract.UnpackLog(event, "CCIPMessageSent", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPReaderTesterCommitReportAcceptedIterator struct { + Event *CCIPReaderTesterCommitReportAccepted + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPReaderTesterCommitReportAcceptedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPReaderTesterCommitReportAccepted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(CCIPReaderTesterCommitReportAccepted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *CCIPReaderTesterCommitReportAcceptedIterator) Error() error { + return it.fail +} + +func (it *CCIPReaderTesterCommitReportAcceptedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPReaderTesterCommitReportAccepted struct { + MerkleRoots []InternalMerkleRoot + PriceUpdates InternalPriceUpdates + Raw types.Log +} + +func (_CCIPReaderTester *CCIPReaderTesterFilterer) FilterCommitReportAccepted(opts *bind.FilterOpts) (*CCIPReaderTesterCommitReportAcceptedIterator, error) { + + logs, sub, err := _CCIPReaderTester.contract.FilterLogs(opts, "CommitReportAccepted") + if err != nil { + return nil, err + } + return &CCIPReaderTesterCommitReportAcceptedIterator{contract: _CCIPReaderTester.contract, event: "CommitReportAccepted", logs: logs, sub: sub}, nil +} + +func (_CCIPReaderTester *CCIPReaderTesterFilterer) WatchCommitReportAccepted(opts *bind.WatchOpts, sink chan<- *CCIPReaderTesterCommitReportAccepted) (event.Subscription, error) { + + logs, sub, err := _CCIPReaderTester.contract.WatchLogs(opts, "CommitReportAccepted") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPReaderTesterCommitReportAccepted) + if err := _CCIPReaderTester.contract.UnpackLog(event, "CommitReportAccepted", 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 +} + +func (_CCIPReaderTester *CCIPReaderTesterFilterer) ParseCommitReportAccepted(log types.Log) (*CCIPReaderTesterCommitReportAccepted, error) { + event := new(CCIPReaderTesterCommitReportAccepted) + if err := _CCIPReaderTester.contract.UnpackLog(event, "CommitReportAccepted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type CCIPReaderTesterExecutionStateChangedIterator struct { + Event *CCIPReaderTesterExecutionStateChanged + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *CCIPReaderTesterExecutionStateChangedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(CCIPReaderTesterExecutionStateChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(CCIPReaderTesterExecutionStateChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *CCIPReaderTesterExecutionStateChangedIterator) Error() error { + return it.fail +} + +func (it *CCIPReaderTesterExecutionStateChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type CCIPReaderTesterExecutionStateChanged struct { + SourceChainSelector uint64 + SequenceNumber uint64 + MessageId [32]byte + MessageHash [32]byte + State uint8 + ReturnData []byte + GasUsed *big.Int + Raw types.Log +} + +func (_CCIPReaderTester *CCIPReaderTesterFilterer) FilterExecutionStateChanged(opts *bind.FilterOpts, sourceChainSelector []uint64, sequenceNumber []uint64, messageId [][32]byte) (*CCIPReaderTesterExecutionStateChangedIterator, error) { + + var sourceChainSelectorRule []interface{} + for _, sourceChainSelectorItem := range sourceChainSelector { + sourceChainSelectorRule = append(sourceChainSelectorRule, sourceChainSelectorItem) + } + var sequenceNumberRule []interface{} + for _, sequenceNumberItem := range sequenceNumber { + sequenceNumberRule = append(sequenceNumberRule, sequenceNumberItem) + } + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _CCIPReaderTester.contract.FilterLogs(opts, "ExecutionStateChanged", sourceChainSelectorRule, sequenceNumberRule, messageIdRule) + if err != nil { + return nil, err + } + return &CCIPReaderTesterExecutionStateChangedIterator{contract: _CCIPReaderTester.contract, event: "ExecutionStateChanged", logs: logs, sub: sub}, nil +} + +func (_CCIPReaderTester *CCIPReaderTesterFilterer) WatchExecutionStateChanged(opts *bind.WatchOpts, sink chan<- *CCIPReaderTesterExecutionStateChanged, sourceChainSelector []uint64, sequenceNumber []uint64, messageId [][32]byte) (event.Subscription, error) { + + var sourceChainSelectorRule []interface{} + for _, sourceChainSelectorItem := range sourceChainSelector { + sourceChainSelectorRule = append(sourceChainSelectorRule, sourceChainSelectorItem) + } + var sequenceNumberRule []interface{} + for _, sequenceNumberItem := range sequenceNumber { + sequenceNumberRule = append(sequenceNumberRule, sequenceNumberItem) + } + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _CCIPReaderTester.contract.WatchLogs(opts, "ExecutionStateChanged", sourceChainSelectorRule, sequenceNumberRule, messageIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(CCIPReaderTesterExecutionStateChanged) + if err := _CCIPReaderTester.contract.UnpackLog(event, "ExecutionStateChanged", 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 +} + +func (_CCIPReaderTester *CCIPReaderTesterFilterer) ParseExecutionStateChanged(log types.Log) (*CCIPReaderTesterExecutionStateChanged, error) { + event := new(CCIPReaderTesterExecutionStateChanged) + if err := _CCIPReaderTester.contract.UnpackLog(event, "ExecutionStateChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (_CCIPReaderTester *CCIPReaderTester) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _CCIPReaderTester.abi.Events["CCIPMessageSent"].ID: + return _CCIPReaderTester.ParseCCIPMessageSent(log) + case _CCIPReaderTester.abi.Events["CommitReportAccepted"].ID: + return _CCIPReaderTester.ParseCommitReportAccepted(log) + case _CCIPReaderTester.abi.Events["ExecutionStateChanged"].ID: + return _CCIPReaderTester.ParseExecutionStateChanged(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (CCIPReaderTesterCCIPMessageSent) Topic() common.Hash { + return common.HexToHash("0x192442a2b2adb6a7948f097023cb6b57d29d3a7a5dd33e6666d33c39cc456f32") +} + +func (CCIPReaderTesterCommitReportAccepted) Topic() common.Hash { + return common.HexToHash("0x35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e4") +} + +func (CCIPReaderTesterExecutionStateChanged) Topic() common.Hash { + return common.HexToHash("0x05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b") +} + +func (_CCIPReaderTester *CCIPReaderTester) Address() common.Address { + return _CCIPReaderTester.address +} + +type CCIPReaderTesterInterface interface { + GetExpectedNextSequenceNumber(opts *bind.CallOpts, destChainSelector uint64) (uint64, error) + + GetInboundNonce(opts *bind.CallOpts, sourceChainSelector uint64, sender []byte) (uint64, error) + + GetLatestPriceSequenceNumber(opts *bind.CallOpts) (uint64, error) + + GetSourceChainConfig(opts *bind.CallOpts, sourceChainSelector uint64) (OffRampSourceChainConfig, error) + + EmitCCIPMessageSent(opts *bind.TransactOpts, destChainSelector uint64, message InternalEVM2AnyRampMessage) (*types.Transaction, error) + + EmitCommitReportAccepted(opts *bind.TransactOpts, report OffRampCommitReport) (*types.Transaction, error) + + EmitExecutionStateChanged(opts *bind.TransactOpts, sourceChainSelector uint64, sequenceNumber uint64, messageId [32]byte, messageHash [32]byte, state uint8, returnData []byte, gasUsed *big.Int) (*types.Transaction, error) + + SetDestChainSeqNr(opts *bind.TransactOpts, destChainSelector uint64, sequenceNumber uint64) (*types.Transaction, error) + + SetInboundNonce(opts *bind.TransactOpts, sourceChainSelector uint64, testNonce uint64, sender []byte) (*types.Transaction, error) + + SetLatestPriceSequenceNumber(opts *bind.TransactOpts, seqNr uint64) (*types.Transaction, error) + + SetSourceChainConfig(opts *bind.TransactOpts, sourceChainSelector uint64, sourceChainConfig OffRampSourceChainConfig) (*types.Transaction, error) + + FilterCCIPMessageSent(opts *bind.FilterOpts, destChainSelector []uint64, sequenceNumber []uint64) (*CCIPReaderTesterCCIPMessageSentIterator, error) + + WatchCCIPMessageSent(opts *bind.WatchOpts, sink chan<- *CCIPReaderTesterCCIPMessageSent, destChainSelector []uint64, sequenceNumber []uint64) (event.Subscription, error) + + ParseCCIPMessageSent(log types.Log) (*CCIPReaderTesterCCIPMessageSent, error) + + FilterCommitReportAccepted(opts *bind.FilterOpts) (*CCIPReaderTesterCommitReportAcceptedIterator, error) + + WatchCommitReportAccepted(opts *bind.WatchOpts, sink chan<- *CCIPReaderTesterCommitReportAccepted) (event.Subscription, error) + + ParseCommitReportAccepted(log types.Log) (*CCIPReaderTesterCommitReportAccepted, error) + + FilterExecutionStateChanged(opts *bind.FilterOpts, sourceChainSelector []uint64, sequenceNumber []uint64, messageId [][32]byte) (*CCIPReaderTesterExecutionStateChangedIterator, error) + + WatchExecutionStateChanged(opts *bind.WatchOpts, sink chan<- *CCIPReaderTesterExecutionStateChanged, sourceChainSelector []uint64, sequenceNumber []uint64, messageId [][32]byte) (event.Subscription, error) + + ParseExecutionStateChanged(log types.Log) (*CCIPReaderTesterExecutionStateChanged, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var CCIPReaderTesterZKBin string = ("0x000100000000000200080000000000020000000000010355000000800b0000390000004000b0043f0000000100200190000000950000c13d00000060021002700000022402200197000000040020008c000005b10000413d000000000301043b000000e003300270000002260030009c0000009d0000a13d000002270030009c000000e70000213d0000022b0030009c000003dd0000613d0000022c0030009c000002f10000613d0000022d0030009c000005b10000c13d000000e40020008c000005b10000413d0000000003000416000000000003004b000005b10000c13d0000000403100370000000000303043b000002340030009c000005b10000213d0000002404100370000000000404043b000002340040009c000005b10000213d0000008405100370000000000605043b000000030060008c000005b10000213d000000a405100370000000000805043b000002340080009c000005b10000213d0000002305800039000000000025004b000005b10000813d0000000409800039000000000591034f000000000705043b000002340070009c0000010b0000213d0000001f0a700039000002500aa001970000003f0aa00039000002500aa001970000023600a0009c0000010b0000213d000000800aa000390000004000a0043f000000800070043f00000000087800190000002408800039000000000028004b000005b10000213d000000000e0b00190000002002900039000000000821034f00000250097001980000001f0a70018f000000a0029000390000004e0000613d000000a00b000039000000000c08034f00000000cd0c043c000000000bdb043600000000002b004b0000004a0000c13d00000000000a004b0000005b0000613d000000000898034f0000000309a00210000000000a020433000000000a9a01cf000000000a9a022f000000000808043b0000010009900089000000000898022f00000000089801cf0000000008a8019f0000000000820435000000a00270003900000000000204350000006402100370000000000702043b000000400200043d00000040082000390000000000e804350000002008200039000000000068043500000000007204350000008007200039000000800600043d0000000000670435000000a007200039000000000006004b000000730000613d00000000080000190000000009780019000000a00a800039000000000a0a04330000000000a904350000002008800039000000000068004b0000006c0000413d00000000077600190000000000070435000000c407100370000000000707043b000000600820003900000000007804350000001f066000390000025005600197000000a005500039000002240050009c00000224050080410000006005500210000002240020009c00000224020080410000004002200210000000000225019f0000004401100370000000000701043b0000000001000414000002240010009c0000022401008041000000c001100210000000000121019f0000023405300197000002340640019700000242011001c70000800d0200003900000004030000390000024304000041088c08820000040f0000000100200190000005b10000613d00000000010000190000088d0001042e0000000001000416000000000001004b000005b10000c13d00000020010000390000010000100443000001200000044300000225010000410000088d0001042e0000022e0030009c000001110000a13d0000022f0030009c000003cd0000613d000002300030009c000002d10000613d000002310030009c000005b10000c13d000000640020008c000005b10000413d0000000003000416000000000003004b000005b10000c13d0000000403100370000000000303043b000800000003001d000002340030009c000005b10000213d0000002403100370000000000303043b000700000003001d000002340030009c000005b10000213d0000004401100370000000000101043b000002340010009c000005b10000213d0000000401100039088c08410000040f0000000803000029000000000030043f0000000203000039000000200030043f000800000001001d000600000002001d00000040020000390000000001000019088c086d0000040f000000060a0000290000001f04a0018f0000025005a00198000000080200002900000000062003670000000002010019000000400100043d0000000003510019000000d20000613d000000000706034f0000000008010019000000007907043c0000000008980436000000000038004b000000ce0000c13d000000000004004b000000df0000613d000000000556034f0000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000003a1001900000000002304350000002002a00039088c086d0000040f000000000201041a00000244022001970000000703000029000003080000013d000002280030009c000005a30000613d000002290030009c0000030c0000613d0000022a0030009c000005b10000c13d000000240020008c000005b10000413d0000000002000416000000000002004b000005b10000c13d0000000401100370000000000101043b000002340010009c000005b10000213d0000010002000039000000400020043f000000800000043f000000a00000043f000000c00000043f0000006002000039000000e00020043f000000000010043f000000200000043f0000000001000414000002240010009c0000022401008041000000c00110021000000235011001c70000801002000039088c08870000040f0000000100200190000005b10000613d000000400500043d000002360050009c000005e90000a13d0000023f01000041000000000010043f0000004101000039000000040010043f00000240010000410000088e00010430000002320030009c000002c80000613d000002330030009c000005b10000c13d000000440020008c000005b10000413d0000000003000416000000000003004b000005b10000c13d0000000403100370000000000303043b000002340030009c000005b10000213d0000002404100370000000000604043b000002340060009c000005b10000213d00000000046200490000023a0040009c000005b10000213d000001a40040008c000005b10000413d0000024007000039000000400070043f0000000404600039000000000441034f000000000404043b000001a00040043f0000002404600039000000000541034f000000000505043b000002340050009c000005b10000213d000001c00050043f0000002004400039000000000541034f000000000505043b000002340050009c000005b10000213d000001e00050043f0000002004400039000000000541034f000000000505043b000002340050009c000005b10000213d000002000050043f0000002004400039000000000541034f000000000505043b000002340050009c000005b10000213d000002200050043f000001a005000039000000800050043f0000002004400039000000000841034f000000000808043b000002370080009c000005b10000213d000000a00080043f0000002008400039000000000481034f000000000404043b000002340040009c000005b10000213d000000000a6400190000002304a00039000000000024004b000005b10000813d000000040ba000390000000004b1034f000000000904043b0000024c0090009c0000010b0000813d0000001f0c900039000002500cc001970000003f0cc00039000002500cc001970000024d00c0009c0000010b0000213d000002400cc000390000004000c0043f000002400090043f000000000a9a0019000000240aa0003900000000002a004b000005b10000213d000000200ab00039000000000ba1034f000002500c9001980000001f0d90018f000002600ac00039000001740000613d000002600e000039000000000f0b034f00000000f40f043c000000000e4e04360000000000ae004b000001700000c13d00000000000d004b000001810000613d0000000004cb034f000000030bd00210000000000c0a0433000000000cbc01cf000000000cbc022f000000000404043b000001000bb000890000000004b4022f0000000004b401cf0000000004c4019f00000000004a043500000260049000390000000000040435000000c00070043f0000002007800039000000000471034f000000000804043b000002340080009c000005b10000213d000000000b6800190000002304b00039000000000024004b000005b10000813d000000040cb000390000000004c1034f000000000804043b000002340080009c0000010b0000213d0000001f0480003900000250044001970000003f044000390000025004400197000000400900043d000000000a49001900000000009a004b000000000d000039000000010d0040390000023400a0009c0000010b0000213d0000000100d001900000010b0000c13d0000004000a0043f000000000d89043600000000048b00190000002404400039000000000024004b000005b10000213d0000002004c000390008000000410353000002500c8001980000001f0e80018f000000000bcd0019000001b10000613d000000080f00035f000000000a0d001900000000f40f043c000000000a4a04360000000000ba004b000001ad0000c13d00000000000e004b000001be0000613d0000000804c0035f000000030ae00210000000000c0b0433000000000cac01cf000000000cac022f000000000404043b000001000aa000890000000004a4022f0000000004a401cf0000000004c4019f00000000004b043500000000048d00190000000000040435000000e00090043f0000002007700039000000000471034f000000000804043b000002340080009c000005b10000213d000000000b6800190000002304b00039000000000024004b000005b10000813d000000040cb000390000000004c1034f000000000804043b000002340080009c0000010b0000213d0000001f0480003900000250044001970000003f044000390000025004400197000000400900043d000000000a49001900000000009a004b000000000d000039000000010d0040390000023400a0009c0000010b0000213d0000000100d001900000010b0000c13d0000004000a0043f000000000d89043600000000048b00190000002404400039000000000024004b000005b10000213d0000002004c000390008000000410353000002500c8001980000001f0e80018f000000000bcd0019000001ee0000613d000000080f00035f000000000a0d001900000000f40f043c000000000a4a04360000000000ba004b000001ea0000c13d00000000000e004b000001fb0000613d0000000804c0035f000000030ae00210000000000c0b0433000000000cac01cf000000000cac022f000000000404043b000001000aa000890000000004a4022f0000000004a401cf0000000004c4019f00000000004b043500000000048d00190000000000040435000001000090043f0000002007700039000000000471034f000000000804043b000002370080009c000005b10000213d000001200080043f0000002004700039000000000441034f000000000404043b000001400040043f0000004004700039000000000441034f000000000404043b000001600040043f0000006004700039000000000441034f000000000704043b000002340070009c000005b10000213d0000000004670019000400000004001d0000002304400039000000000024004b000005b10000813d00000004040000290000000404400039000000000441034f000000000604043b000002340060009c0000010b0000213d00000005076002100000003f047000390000024504400197000000400900043d0000000008490019000100000009001d000000000098004b00000000090000390000000109004039000002340080009c0000010b0000213d00000001009001900000010b0000c13d000000400080043f000000010400002900000000006404350000000404000029000600240040003d0000000604700029000300000004001d000000000024004b000005b10000213d000000000006004b000006da0000c13d0000000101000029000001800010043f000000800100043d00000060011000390000000002010433000000400800043d00000020010000390000000001180436000000800400043d0000000076040434000000000061043500000000010704330000023401100197000000400680003900000000001604350000004001400039000000000101043300000234011001970000006006800039000000000016043500000060014000390000000001010433000002340110019700000080068000390000000000160435000000800140003900000000010104330000023401100197000000a0048000390000000000140435000000a00100043d0000023701100197000000c0048000390000000000140435000000e001800039000000c00400043d0000000000510435000001c00180003900000000750404340000000000510435000800000008001d000001e006800039000000000005004b000002680000613d000000000800001900000000016800190000000004870019000000000404043300000000004104350000002008800039000000000058004b000002610000413d000000000156001900000000000104350000001f015000390000025001100197000000000116001900000008050000290000000004510049000000200440008a0000010005500039000000e00600043d000000000045043500000000760604340000000005610436000000000006004b0000027f0000613d000000000800001900000000015800190000000004870019000000000404043300000000004104350000002008800039000000000068004b000002780000413d000000000165001900000000000104350000001f016000390000025001100197000000000115001900000008050000290000000004510049000000200440008a0000012005500039000001000600043d000000000045043500000000670604340000000005710436000000000007004b000002960000613d000000000800001900000000015800190000000004860019000000000404043300000000004104350000002008800039000000000078004b0000028f0000413d000702340020019b00000000017500190000000000010435000001200100043d00000237011001970000000804000029000001400240003900000000001204350000016001400039000001400200043d00000000002104350000018001400039000001600200043d00000000002104350000001f01700039000002500110019700000000021500190000000001420049000000200110008a000001a004400039000001800500043d00000000001404350000000007050433000000000072043500000005017002100000000001120019000000200b100039000000000007004b000007d90000c13d000000080200002900000000012b0049000002240010009c00000224010080410000006001100210000002240020009c00000224020080410000004002200210000000000121019f0000000002000414000002240020009c0000022402008041000000c002200210000000000121019f00000242011001c700000234053001970000800d0200003900000003030000390000024e0400004100000007060000290000059f0000013d0000000001000416000000000001004b000005b10000c13d0000000301000039000000000101041a0000023401100197000000800010043f0000024f010000410000088d0001042e000000240020008c000005b10000413d0000000002000416000000000002004b000005b10000c13d0000000401100370000000000101043b000002340010009c000005b10000213d000000000010043f0000000101000039000000200010043f0000000001000414000002240010009c0000022401008041000000c00110021000000235011001c70000801002000039088c08870000040f0000000100200190000005b10000613d000000000101043b000000000101041a0000023401100197000002340010009c000005e10000c13d0000023f01000041000000000010043f0000001101000039000000040010043f00000240010000410000088e00010430000000440020008c000005b10000413d0000000002000416000000000002004b000005b10000c13d0000000402100370000000000202043b000002340020009c000005b10000213d0000002401100370000000000101043b000800000001001d000002340010009c000005b10000213d000000000020043f0000000101000039000000200010043f00000040020000390000000001000019088c086d0000040f000000000201041a00000244022001970000000803000029000000000232019f000000000021041b00000000010000190000088d0001042e000000440020008c000005b10000413d0000000003000416000000000003004b000005b10000c13d0000000403100370000000000303043b000002340030009c000005b10000213d0000002404100370000000000504043b000002340050009c000005b10000213d00000000045200490000023a0040009c000005b10000213d000000840040008c000005b10000413d0000010004000039000000400040043f0000000406500039000000000761034f000000000707043b000002370070009c000005b10000213d000000800070043f0000002006600039000000000761034f000000000707043b000000000007004b0000000008000039000000010800c039000000000087004b000005b10000c13d000000a00070043f0000002006600039000000000761034f000000000707043b000002340070009c000005b10000213d000000c00070043f0000002006600039000000000661034f000000000606043b000002340060009c000005b10000213d00000000065600190000002305600039000000000025004b000005b10000813d0000000407600039000000000571034f000000000505043b000002340050009c0000010b0000213d0000001f0850003900000250088001970000003f0880003900000250088001970000023b0080009c0000010b0000213d0000010008800039000000400080043f000001000050043f00000000065600190000002406600039000000000026004b000005b10000213d0000002002700039000000000221034f00000250065001980000001f0750018f00000120016000390000035c0000613d0000012008000039000000000902034f000000009a09043c0000000008a80436000000000018004b000003580000c13d000000000007004b000003690000613d000000000262034f0000000306700210000000000701043300000000076701cf000000000767022f000000000202043b0000010006600089000000000262022f00000000026201cf000000000272019f000000000021043500000120015000390000000000010435000000e00040043f000000000030043f000000200000043f0000000001000414000002240010009c0000022401008041000000c00110021000000235011001c70000801002000039088c08870000040f0000000100200190000005b10000613d000000800200043d0000023702200197000000000101043b000000000301041a0000023c03300197000000000223019f000000a00300043d000000000003004b0000023d030000410000000003006019000000000232019f000000c00300043d000000a8033002100000023e03300197000000000232019f000000000021041b000000e00200043d000600000002001d0000000032020434000700000003001d000800000002001d000002340020009c0000010b0000213d0000000101100039000500000001001d000000000101041a000000010210019000000001011002700000007f0110618f000400000001001d0000001f0010008c00000000010000390000000101002039000000000012004b000006030000c13d0000000401000029000000200010008c000003b90000413d0000000501000029000000000010043f0000000001000414000002240010009c0000022401008041000000c00110021000000239011001c70000801002000039088c08870000040f0000000100200190000005b10000613d00000008030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000004010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b000003b90000813d000000000002041b0000000102200039000000000012004b000003b50000413d00000008010000290000001f0010008c0000067c0000a13d0000000501000029000000000010043f0000000001000414000002240010009c0000022401008041000000c00110021000000239011001c70000801002000039088c08870000040f0000000100200190000005b10000613d000000200200008a0000000802200180000000000101043b000006880000c13d0000002003000039000006950000013d000000240020008c000005b10000413d0000000002000416000000000002004b000005b10000c13d0000000401100370000000000101043b000002340010009c000005b10000213d0000000302000039000000000302041a0000024403300197000000000113019f000000000012041b00000000010000190000088d0001042e000000240320008c000005b10000413d0000000004000416000000000004004b000005b10000c13d0000000404100370000000000404043b000002340040009c000005b10000213d00000000054200490000023a0050009c000005b10000213d000000640050008c000005b10000413d000000e005000039000000400050043f0000000406400039000000000661034f000000000606043b000002340060009c000005b10000213d000000000646001900000000076200490000023a0070009c000005b10000213d000000440070008c000005b10000413d0000012007000039000000400070043f0000000408600039000000000981034f000000000909043b000002340090009c000005b10000213d0000000009690019000000230a90003900000000002a004b000005b10000813d000000040a900039000000000aa1034f000000000b0a043b0000023400b0009c0000010b0000213d000000050ab002100000003f0aa00039000002450aa001970000024600a0009c0000010b0000213d000001200aa000390000004000a0043f0000012000b0043f0000002409900039000000060ab00210000000000a9a001900000000002a004b000005b10000213d00000000000b004b000006610000c13d000000e00070043f0000002007800039000000000771034f000000000707043b000002340070009c000005b10000213d00000000076700190000002306700039000000000026004b000000000800001900000249080080410000024906600197000000000006004b00000000090000190000024909004041000002490060009c000000000908c019000000000009004b000005b10000c13d0000000406700039000000000661034f000000000806043b000002340080009c0000010b0000213d00000005068002100000003f066000390000024509600197000000400600043d0000000009960019000000000069004b000000000a000039000000010a004039000002340090009c0000010b0000213d0000000100a001900000010b0000c13d000000400090043f0000000000860435000000240770003900000006088002100000000008780019000000000028004b000005b10000213d000000000087004b0000045f0000813d0000000009060019000000000a7200490000023a00a0009c000005b10000213d0000004000a0008c000005b10000413d000000400a00043d0000024700a0009c0000010b0000213d000000400ba000390000004000b0043f000000000b71034f000000000b0b043b0000023400b0009c000005b10000213d000000000bba0436000000200c700039000000000cc1034f000000000c0c043b0000024800c0009c000005b10000213d00000020099000390000000000cb04350000000000a904350000004007700039000000000087004b000004450000413d000001000060043f000000800050043f0000002405400039000000000551034f000000000505043b000002340050009c000005b10000213d0000000005450019000500000005001d0000002305500039000000000025004b000000000600001900000249060080410000024905500197000000000005004b00000000070000190000024907004041000002490050009c000000000706c019000000000007004b000005b10000c13d00000005050000290000000405500039000000000551034f000000000505043b000002340050009c0000010b0000213d00000005065002100000003f076000390000024507700197000000400800043d0000000007780019000300000008001d000000000087004b00000000080000390000000108004039000002340070009c0000010b0000213d00000001008001900000010b0000c13d000000400070043f0000000307000029000000000057043500000005050000290000002407500039000400000076001d000000040020006b000005b10000213d0000000005070019000000040070006c0000050b0000813d000800030000002d000700000005001d000000000551034f000000000505043b000002340050009c000005b10000213d000000050550002900000000065300490000023a0060009c000005b10000213d000000a00060008c000005b10000413d000000400b00043d0000024a00b0009c0000010b0000213d000000a006b00039000000400060043f0000002406500039000000000861034f000000000808043b000002340080009c000005b10000213d00000000078b0436000600000007001d000000200c6000390000000006c1034f000000000606043b000002340060009c000005b10000213d00000000055600190000004306500039000000000026004b000000000800001900000249080080410000024906600197000000000006004b00000000090000190000024909004041000002490060009c000000000908c019000000000009004b000005b10000c13d0000002408500039000000000681034f000000000e06043b0000023400e0009c0000010b0000213d0000001f06e0003900000250066001970000003f066000390000025006600197000000400f00043d00000000066f00190000000000f6004b00000000090000390000000109004039000002340060009c0000010b0000213d00000001009001900000010b0000c13d000000400060043f000000000aef04360000000005e500190000004405500039000000000025004b000005b10000213d0000002005800039000000000d51034f0000025009e0019800000000059a0019000004df0000613d00000000080d034f00000000060a0019000000008708043c0000000006760436000000000056004b000004db0000c13d0000001f06e00190000004ec0000613d00000000079d034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000005ea0019000000000005043500000006050000290000000000f504350000002005c00039000000000651034f000000000606043b000002340060009c000005b10000213d0000004007b0003900000000006704350000002005500039000000000651034f000000000606043b000002340060009c000005b10000213d000000080800002900000020088000390000006007b0003900000000006704350000002005500039000000000551034f000000000505043b0000008006b000390000000000560435000800000008001d0000000000b8043500000007050000290000002005500039000000040050006c000004930000413d0000000303000029000000a00030043f0000004403400039000000000331034f000000000303043b000002340030009c000005b10000213d00000000044300190000002303400039000000000023004b000000000500001900000249050080410000024903300197000000000003004b00000000060000190000024906004041000002490030009c000000000605c019000000000006004b000005b10000c13d0000000403400039000000000331034f000000000503043b000002340050009c0000010b0000213d00000005035002100000003f033000390000024506300197000000400300043d0000000006630019000000000036004b00000000070000390000000107004039000002340060009c0000010b0000213d00000001007001900000010b0000c13d000000400060043f0000000000530435000000240440003900000006055002100000000005450019000000000025004b000005b10000213d000000000054004b000005500000813d000000000603001900000000074200490000023a0070009c000005b10000213d000000400070008c000005b10000413d000000400700043d000002470070009c0000010b0000213d00000020066000390000004008700039000000400080043f000000000841034f000000000808043b00000000088704360000002009400039000000000991034f000000000909043b000000000098043500000000007604350000004004400039000000000054004b0000053a0000413d000000c00030043f000000800100043d000800000001001d000000a00600043d000000400100043d00000040020000390000000002210436000700000002001d000000400210003900000000070604330000000000720435000000600810003900000005027002100000000002820019000000000007004b000006a80000c13d00000000031200490000000704000029000000000034043500000008030000290000000056030434000000400300003900000000033204360000004004200039000000000706043300000000007404350000006004200039000000000007004b0000057a0000613d00000000080000190000002006600039000000000906043300000000a909043400000237099001970000000009940436000000000a0a0433000002480aa001970000000000a9043500000040044000390000000108800039000000000078004b0000056e0000413d00000000050504330000000002240049000000000023043500000000030504330000000002340436000000000003004b0000058e0000613d00000000040000190000002005500039000000000605043300000000760604340000023406600197000000000662043600000000070704330000024807700197000000000076043500000040022000390000000104400039000000000034004b000005820000413d0000000002120049000002240020009c00000224020080410000006002200210000002240010009c00000224010080410000004001100210000000000112019f0000000002000414000002240020009c0000022402008041000000c002200210000000000121019f00000242011001c70000800d0200003900000001030000390000024b04000041088c08820000040f0000000100200190000000930000c13d000005b10000013d000000440020008c000005b10000413d0000000003000416000000000003004b000005b10000c13d0000000403100370000000000303043b000800000003001d000002340030009c000005b10000213d0000002401100370000000000101043b000002340010009c000005b30000a13d00000000010000190000088e000104300000000401100039088c08410000040f0000000803000029000000000030043f0000000203000039000000200030043f000800000001001d000700000002001d00000040020000390000000001000019088c086d0000040f000000070a0000290000001f04a0018f0000025005a00198000000080200002900000000062003670000000002010019000000400100043d0000000003510019000005cd0000613d000000000706034f0000000008010019000000007907043c0000000008980436000000000038004b000005c90000c13d000000000004004b000005da0000613d000000000556034f0000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f00000000004304350000000003a1001900000000002304350000002002a00039088c086d0000040f000000000101041a0000023401100197000005e20000013d0000000101100039000000400200043d0000000000120435000002240020009c0000022402008041000000400120021000000241011001c70000088d0001042e000000000101043b0000008002500039000000400020043f000000000201041a00000237032001970000000007350436000000a80320027000000234033001970000004006500039000000000036043500000238002001980000000002000039000000010200c03900000000002704350000000102100039000000000902041a000000010490019000000001089002700000007f0380018f00000000080360190000001f0080008c00000000010000390000000101002039000000000119013f0000000100100190000006090000613d0000023f01000041000000000010043f0000002201000039000000040010043f00000240010000410000088e00010430000500000007001d000600000006001d000700000005001d000000400100043d0000000005810436000000000004004b000800000001001d000006170000c13d00000251029001970000000000250435000000000003004b00000020020000390000000002006039000006370000013d000400000009001d000300000008001d000000000020043f0000000001000414000002240010009c0000022401008041000000c00110021000000239011001c70000801002000039088c08870000040f0000000100200190000005b10000613d0000000402000029000000020020008c000006290000813d00000020050000390000000801000029000006360000013d000000000601043b000000000200001900000008010000290000000307000029000000000302001900000020022000390000000004120019000000000506041a00000000005404350000000106600039000000000072004b0000062d0000413d0000004005300039000000000201001900000000021200490000000002520019088c082f0000040f00000007030000290000006001300039000000080200002900000000002104350000002002000039000000400400043d000800000004001d000000000224043600000000030304330000023703300197000000000032043500000005020000290000000002020433000000000002004b0000000002000039000000010200c03900000040034000390000000000230435000000060200002900000000020204330000023402200197000000600340003900000000002304350000000001010433000000800240003900000080030000390000000000320435000000a002400039088c085b0000040f00000008020000290000000001210049000002240020009c00000224020080410000004002200210000002240010009c00000224010080410000006001100210000000000121019f0000088d0001042e000001400b000039000000000c9200490000023a00c0009c000005b10000213d0000004000c0008c000005b10000413d000000400c00043d0000024700c0009c0000010b0000213d000000400dc000390000004000d0043f000000000d91034f000000000d0d043b0000023700d0009c000005b10000213d000000000ddc0436000000200e900039000000000ee1034f000000000e0e043b0000024800e0009c000005b10000213d0000000000ed0435000000000bcb043600000040099000390000000000a9004b000006620000413d000004170000013d000000080000006b0000000001000019000006810000613d0000000701000029000000000101043300000008040000290000000302400210000002520220027f0000025202200167000000000221016f0000000101400210000006a30000013d000000010320008a0000000503300270000000000431001900000020030000390000000104400039000000060600002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b0000068e0000c13d000000080020006c000006a00000813d00000008020000290000000302200210000000f80220018f000002520220027f000002520220016700000006033000290000000003030433000000000223016f000000000021041b000000010100003900000008020000290000000102200210000000000112019f0000000502000029000000000012041b00000000010000190000088d0001042e000000a009000039000000000b000019000006c10000013d0000000003de001900000000000304350000004003c0003900000000030304330000023403300197000000400420003900000000003404350000006003c00039000000000303043300000234033001970000006004200039000000000034043500000080022000390000008003c00039000000000303043300000000003204350000001f02d00039000002500220019700000000022e0019000000010bb0003900000000007b004b000005600000813d0000000004120049000000600440008a00000000084804360000002006600039000000000c06043300000000d40c043400000234044001970000000004420436000000000d0d04330000000000940435000000a00420003900000000fd0d04340000000000d40435000000c00e20003900000000000d004b000006ab0000613d00000000040000190000000003e4001900000000054f00190000000005050433000000000053043500000020044000390000000000d4004b000006d20000413d000006ab0000013d0002002400200092000500010000002d000006eb0000013d000000050800002900000020088000390000000004d600190000000000040435000000070600002900000080046000390000000000740435000500000008001d000000000068043500000006040000290000002004400039000600000004001d000000030040006c000002340000813d0000000604100360000000000604043b000002340060009c000005b10000213d0000000406600029000800000006001d00000002066000690000023a0060009c000005b10000213d000000a00060008c000005b10000413d000000400400043d000700000004001d0000024a0040009c0000010b0000213d0000000704000029000000a004400039000000400040043f00000008040000290000002406400039000000000461034f000000000704043b000002370070009c000005b10000213d0000000704000029000000000f740436000000200e6000390000000004e1034f000000000604043b000002340060009c000005b10000213d000000080a6000290000004304a00039000000000024004b000000000600001900000249060080410000024904400197000000000004004b00000000070000190000024907004041000002490040009c000000000706c019000000000007004b000005b10000c13d000000240ba000390000000004b1034f000000000704043b000002340070009c0000010b0000213d0000001f0470003900000250044001970000003f044000390000025004400197000000400600043d0000000008460019000000000068004b00000000090000390000000109004039000002340080009c0000010b0000213d00000001009001900000010b0000c13d000000400080043f000000000d76043600000000047a00190000004404400039000000000024004b000005b10000213d0000002004b00039000000000c41034f0000025008700198000000000a8d00190000073a0000613d000000000b0c034f00000000090d001900000000b40b043c00000000094904360000000000a9004b000007360000c13d0000001f09700190000007470000613d00000000048c034f000000030890021000000000090a043300000000098901cf000000000989022f000000000404043b0000010008800089000000000484022f00000000048401cf000000000494019f00000000004a043500000000047d0019000000000004043500000000006f0435000000200ee000390000000004e1034f000000000604043b000002340060009c000005b10000213d00000008096000290000004304900039000000000024004b000000000600001900000249060080410000024904400197000000000004004b00000000070000190000024907004041000002490040009c000000000706c019000000000007004b000005b10000c13d000000240a9000390000000004a1034f000000000704043b000002340070009c0000010b0000213d0000001f0470003900000250044001970000003f044000390000025004400197000000400f00043d00000000064f00190000000000f6004b00000000080000390000000108004039000002340060009c0000010b0000213d00000001008001900000010b0000c13d000000400060043f00000000067f043600000000047900190000004404400039000000000024004b000005b10000213d0000002004a00039000000000a41034f000002500870019800000000098600190000077f0000613d000000000b0a034f000000000c06001900000000b40b043c000000000c4c043600000000009c004b0000077b0000c13d0000001f0b7001900000078c0000613d00000000048a034f0000000308b00210000000000a090433000000000a8a01cf000000000a8a022f000000000404043b0000010008800089000000000484022f00000000048401cf0000000004a4019f000000000049043500000000047600190000000000040435000000070600002900000040046000390000000000f404350000002004e00039000000000441034f000000000404043b000000600660003900000000004604350000004004e00039000000000441034f000000000604043b000002340060009c000005b10000213d00000008096000290000004304900039000000000024004b000000000600001900000249060080410000024904400197000000000004004b00000000070000190000024907004041000002490040009c000000000706c019000000000007004b000005b10000c13d000000240a9000390000000004a1034f000000000d04043b0000023400d0009c0000010b0000213d0000001f04d0003900000250044001970000003f044000390000025004400197000000400700043d0000000006470019000000000076004b00000000080000390000000108004039000002340060009c0000010b0000213d00000001008001900000010b0000c13d000000400060043f0000000006d704360000000004d900190000004404400039000000000024004b000005b10000213d0000002004a00039000000000a41034f0000025008d001980000000009860019000007cb0000613d000000000b0a034f000000000c06001900000000b40b043c000000000c4c043600000000009c004b000007c70000c13d0000001f0bd00190000006dd0000613d00000000048a034f0000000308b00210000000000a090433000000000a8a01cf000000000a8a022f000000000404043b0000010008800089000000000484022f00000000048401cf0000000004a4019f0000000000490435000006dd0000013d000000a0060000390000000009000019000000000a020019000007e50000013d0000000001cb001900000000000104350000001f01c000390000025001100197000000000b1b00190000000109900039000000000079004b000002b30000813d00000000012b0049000000200110008a000000200aa0003900000000001a04350000002005500039000000000c05043300000000410c0434000002370110019700000000011b043600000000040404330000000000610435000000a001b0003900000000fd0404340000000000d10435000000c00eb0003900000000000d004b000007fe0000613d00000000010000190000000004e1001900000000081f00190000000008080433000000000084043500000020011000390000000000d1004b000007f70000413d0000000001de001900000000000104350000001f01d00039000002500110019700000000011e00190000004004c0003900000000040404330000000008b10049000000400db0003900000000008d043500000000fe040434000000000de1043600000000000e004b000008140000613d00000000010000190000000004d1001900000000081f00190000000008080433000000000084043500000020011000390000000000e1004b0000080d0000413d0000000001ed001900000000000104350000006001c0003900000000010104330000006004b0003900000000001404350000001f01e00039000002500110019700000000011d00190000008004c0003900000000040404330000000008b10049000000800bb0003900000000008b043500000000dc040434000000000bc1043600000000000c004b000007dd0000613d00000000010000190000000004b1001900000000081d00190000000008080433000000000084043500000020011000390000000000c1004b000008270000413d000007dd0000013d0000001f0220003900000250022001970000000001120019000000000021004b00000000020000390000000102004039000002340010009c0000083b0000213d00000001002001900000083b0000c13d000000400010043f000000000001042d0000023f01000041000000000010043f0000004101000039000000040010043f00000240010000410000088e000104300000001f03100039000000000023004b0000000004000019000002490400404100000249052001970000024903300197000000000653013f000000000053004b00000000030000190000024903002041000002490060009c000000000304c019000000000003004b000008590000613d0000000003100367000000000303043b000002340030009c000008590000213d00000020011000390000000004310019000000000024004b000008590000213d0000000002030019000000000001042d00000000010000190000088e0001043000000000430104340000000001320436000000000003004b000008670000613d000000000200001900000000052100190000000006240019000000000606043300000000006504350000002002200039000000000032004b000008600000413d000000000231001900000000000204350000001f0230003900000250022001970000000001210019000000000001042d000002240010009c00000224010080410000004001100210000002240020009c00000224020080410000006002200210000000000112019f0000000002000414000002240020009c0000022402008041000000c002200210000000000112019f00000242011001c70000801002000039088c08870000040f0000000100200190000008800000613d000000000101043b000000000001042d00000000010000190000088e0001043000000885002104210000000102000039000000000001042d0000000002000019000000000001042d0000088a002104230000000102000039000000000001042d0000000002000019000000000001042d0000088c000004320000088d0001042e0000088e00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000bfc9b78800000000000000000000000000000000000000000000000000000000c922362400000000000000000000000000000000000000000000000000000000c922362500000000000000000000000000000000000000000000000000000000e83eabba00000000000000000000000000000000000000000000000000000000e9d68a8e00000000000000000000000000000000000000000000000000000000bfc9b78900000000000000000000000000000000000000000000000000000000c1a5a35500000000000000000000000000000000000000000000000000000000c7c1cba10000000000000000000000000000000000000000000000000000000069600bc90000000000000000000000000000000000000000000000000000000069600bca000000000000000000000000000000000000000000000000000000009041be3d0000000000000000000000000000000000000000000000000000000093df2867000000000000000000000000000000000000000000000000000000003f4b04aa000000000000000000000000000000000000000000000000000000004bf78697000000000000000000000000000000000000000000000000ffffffffffffffff0200000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0000000000000000000000ff000000000000000000000000000000000000000002000000000000000000000000000000000000200000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000fffffffffffffeffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000ffffffffffffffff0000000000000000000000000000000000000000004e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000020000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48bffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000fffffffffffffedf000000000000000000000000000000000000000000000000ffffffffffffffbf00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e40000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000fffffffffffffdbf192442a2b2adb6a7948f097023cb6b57d29d3a7a5dd33e6666d33c39cc456f320000000000000000000000000000000000000020000000800000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff") diff --git a/core/gethwrappers/ccip/generated_zks/ether_sender_receiver/ether_sender_receiver.go b/core/gethwrappers/ccip/generated_zks/ether_sender_receiver/ether_sender_receiver.go new file mode 100644 index 00000000000..e5fbe0e0d47 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/ether_sender_receiver/ether_sender_receiver.go @@ -0,0 +1,365 @@ +package ether_sender_receiver + +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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type ClientAny2EVMMessage struct { + MessageId [32]byte + SourceChainSelector uint64 + Sender []byte + Data []byte + DestTokenAmounts []ClientEVMTokenAmount +} + +type ClientEVM2AnyMessage struct { + Receiver []byte + Data []byte + TokenAmounts []ClientEVMTokenAmount + FeeToken common.Address + ExtraArgs []byte +} + +type ClientEVMTokenAmount struct { + Token common.Address + Amount *big.Int +} + +var EtherSenderReceiverMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"gotToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"}],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gotAmounts\",\"type\":\"uint256\"}],\"name\":\"InvalidTokenAmounts\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gotAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"msgValue\",\"type\":\"uint256\"}],\"name\":\"TokenAmountNotEqualToMsgValue\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destinationChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipSend\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destinationChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"i_weth\",\"outputs\":[{\"internalType\":\"contractIWrappedNative\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60c06040523480156200001157600080fd5b5060405162001a9838038062001a98833981016040819052620000349162000169565b806001600160a01b03811662000064576040516335fdcccd60e21b81526000600482015260240160405180910390fd5b806001600160a01b03166080816001600160a01b03168152505050806001600160a01b031663e861e9076040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e4919062000169565b6001600160a01b0390811660a081905260405163095ea7b360e01b8152918316600483015260001960248301529063095ea7b3906044016020604051808303816000875af11580156200013b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016191906200019b565b5050620001bf565b6000602082840312156200017c57600080fd5b81516001600160a01b03811681146200019457600080fd5b9392505050565b600060208284031215620001ae57600080fd5b815180151581146200019457600080fd5b60805160a051611851620002476000396000818161014b015281816104030152818161059401528181610905015281816109cc01528181610a6401528181610b0201528181610bf70152610cbf0152600081816101d6015281816102df01528181610377015281816104ab0152818161060b015281816106ff01526107bf01526118516000f3fe6080604052600436106100745760003560e01c80634dbe7e921161004e5780634dbe7e921461013957806385572ffb1461019257806396f4e9f9146101b4578063b0f479a1146101c757600080fd5b806301ffc9a714610080578063181f5a77146100b557806320487ded1461010b57600080fd5b3661007b57005b600080fd5b34801561008c57600080fd5b506100a061009b3660046110e3565b6101fa565b60405190151581526020015b60405180910390f35b3480156100c157600080fd5b506100fe6040518060400160405280601981526020017f457468657253656e646572526563656976657220312e352e300000000000000081525081565b6040516100ac919061119a565b34801561011757600080fd5b5061012b6101263660046111e2565b610293565b6040519081526020016100ac565b34801561014557600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ac565b34801561019e57600080fd5b506101b26101ad366004611230565b61035f565b005b61012b6101c23660046111e2565b6103e9565b3480156101d357600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061016d565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f85572ffb00000000000000000000000000000000000000000000000000000000148061028d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60008061029f83610844565b6040517f20487ded00000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906320487ded906103169087908590600401611265565b602060405180830381865afa158015610333573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610357919061137a565b949350505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146103d5576040517fd7f733340000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b6103e66103e1826115c5565b610966565b50565b60006103f482610d38565b60006103ff83610844565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040015160008151811061045457610454611672565b6020026020010151602001516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561048b57600080fd5b505af115801561049f573d6000803e3d6000fd5b505050505060006104cd7f000000000000000000000000000000000000000000000000000000000000000090565b73ffffffffffffffffffffffffffffffffffffffff166320487ded86846040518363ffffffff1660e01b8152600401610507929190611265565b602060405180830381865afa158015610524573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610548919061137a565b606083015190915073ffffffffffffffffffffffffffffffffffffffff16156107825760608201516105929073ffffffffffffffffffffffffffffffffffffffff16333084610df0565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16826060015173ffffffffffffffffffffffffffffffffffffffff16146106c257606082015173ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000006040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018490526044016020604051808303816000875af115801561069c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c091906116a1565b505b6040517f96f4e9f900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906396f4e9f9906107369088908690600401611265565b6020604051808303816000875af1158015610755573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610779919061137a565b9250505061028d565b6040517f96f4e9f900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906396f4e9f99047906107f89089908790600401611265565b60206040518083038185885af1158015610816573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061083b919061137a565b95945050505050565b61088c6040518060a00160405280606081526020016060815260200160608152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001606081525090565b6000610897836116c3565b90508060400151516001146108e1578060400151516040517f83b9f0ae0000000000000000000000000000000000000000000000000000000081526004016103cc91815260200190565b604080513360208201520160405160208183030381529060405281602001819052507f0000000000000000000000000000000000000000000000000000000000000000816040015160008151811061093b5761093b611672565b602090810291909101015173ffffffffffffffffffffffffffffffffffffffff909116905292915050565b60008160600151806020019051810190610980919061177f565b90508160800151516001146109ca578160800151516040517f83b9f0ae0000000000000000000000000000000000000000000000000000000081526004016103cc91815260200190565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168260800151600081518110610a1857610a18611672565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1614610ad9578160800151600081518110610a5657610a56611672565b6020026020010151600001517f00000000000000000000000000000000000000000000000000000000000000006040517f0fc746a10000000000000000000000000000000000000000000000000000000081526004016103cc92919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b60008260800151600081518110610af257610af2611672565b60200260200101516020015190507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b8152600401610b5b91815260200190565b600060405180830381600087803b158015610b7557600080fd5b505af1158015610b89573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610be7576040519150601f19603f3d011682016040523d82523d6000602084013e610bec565b606091505b5050905080610d32577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015610c5d57600080fd5b505af1158015610c71573d6000803e3d6000fd5b50506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8781166004830152602482018790527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb925060440190506020604051808303816000875af1158015610d0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3091906116a1565b505b50505050565b6000610d47604083018361179c565b6000818110610d5857610d58611672565b905060400201602001359050600073ffffffffffffffffffffffffffffffffffffffff16826060016020810190610d8f919061180b565b73ffffffffffffffffffffffffffffffffffffffff1614610dec57803414610dec576040517fba2f7467000000000000000000000000000000000000000000000000000000008152600481018290523460248201526044016103cc565b5050565b6040805173ffffffffffffffffffffffffffffffffffffffff8581166024830152848116604483015260648083018590528351808403909101815260849092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610d3292879291600091610ec3918516908490610f72565b805190915015610f6d5780806020019051810190610ee191906116a1565b610f6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016103cc565b505050565b60606103578484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051610fa69190611828565b60006040518083038185875af1925050503d8060008114610fe3576040519150601f19603f3d011682016040523d82523d6000602084013e610fe8565b606091505b5091509150610ff987838387611004565b979650505050505050565b6060831561109a5782516000036110935773ffffffffffffffffffffffffffffffffffffffff85163b611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103cc565b5081610357565b61035783838151156110af5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103cc919061119a565b6000602082840312156110f557600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461112557600080fd5b9392505050565b60005b8381101561114757818101518382015260200161112f565b50506000910152565b6000815180845261116881602086016020860161112c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006111256020830184611150565b803567ffffffffffffffff811681146111c557600080fd5b919050565b600060a082840312156111dc57600080fd5b50919050565b600080604083850312156111f557600080fd5b6111fe836111ad565b9150602083013567ffffffffffffffff81111561121a57600080fd5b611226858286016111ca565b9150509250929050565b60006020828403121561124257600080fd5b813567ffffffffffffffff81111561125957600080fd5b610357848285016111ca565b6000604067ffffffffffffffff851683526020604081850152845160a0604086015261129460e0860182611150565b9050818601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0808784030160608801526112cf8383611150565b6040890151888203830160808a01528051808352908601945060009350908501905b80841015611330578451805173ffffffffffffffffffffffffffffffffffffffff168352860151868301529385019360019390930192908601906112f1565b50606089015173ffffffffffffffffffffffffffffffffffffffff1660a08901526080890151888203830160c08a0152955061136c8187611150565b9a9950505050505050505050565b60006020828403121561138c57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156113e5576113e5611393565b60405290565b60405160a0810167ffffffffffffffff811182821017156113e5576113e5611393565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561145557611455611393565b604052919050565b600082601f83011261146e57600080fd5b813567ffffffffffffffff81111561148857611488611393565b6114b960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161140e565b8181528460208386010111156114ce57600080fd5b816020850160208301376000918101602001919091529392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146103e657600080fd5b80356111c5816114eb565b600082601f83011261152957600080fd5b8135602067ffffffffffffffff82111561154557611545611393565b611553818360051b0161140e565b82815260069290921b8401810191818101908684111561157257600080fd5b8286015b848110156115ba576040818903121561158f5760008081fd5b6115976113c2565b81356115a2816114eb565b81528185013585820152835291830191604001611576565b509695505050505050565b600060a082360312156115d757600080fd5b6115df6113eb565b823581526115ef602084016111ad565b6020820152604083013567ffffffffffffffff8082111561160f57600080fd5b61161b3683870161145d565b6040840152606085013591508082111561163457600080fd5b6116403683870161145d565b6060840152608085013591508082111561165957600080fd5b5061166636828601611518565b60808301525092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156116b357600080fd5b8151801515811461112557600080fd5b600060a082360312156116d557600080fd5b6116dd6113eb565b823567ffffffffffffffff808211156116f557600080fd5b6117013683870161145d565b8352602085013591508082111561171757600080fd5b6117233683870161145d565b6020840152604085013591508082111561173c57600080fd5b61174836838701611518565b60408401526117596060860161150d565b6060840152608085013591508082111561177257600080fd5b506116663682860161145d565b60006020828403121561179157600080fd5b8151611125816114eb565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126117d157600080fd5b83018035915067ffffffffffffffff8211156117ec57600080fd5b6020019150600681901b360382131561180457600080fd5b9250929050565b60006020828403121561181d57600080fd5b8135611125816114eb565b6000825161183a81846020870161112c565b919091019291505056fea164736f6c6343000818000a", +} + +var EtherSenderReceiverABI = EtherSenderReceiverMetaData.ABI + +var EtherSenderReceiverBin = EtherSenderReceiverMetaData.Bin + +func DeployEtherSenderReceiver(auth *bind.TransactOpts, backend bind.ContractBackend, router common.Address) (common.Address, *generated_zks.Transaction, *EtherSenderReceiver, error) { + parsed, err := EtherSenderReceiverMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(EtherSenderReceiverZKBin), backend, router) + contractReturn := &EtherSenderReceiver{address: address, abi: *parsed, EtherSenderReceiverCaller: EtherSenderReceiverCaller{contract: contractBind}, EtherSenderReceiverTransactor: EtherSenderReceiverTransactor{contract: contractBind}, EtherSenderReceiverFilterer: EtherSenderReceiverFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(EtherSenderReceiverBin), backend, router) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &EtherSenderReceiver{address: address, abi: *parsed, EtherSenderReceiverCaller: EtherSenderReceiverCaller{contract: contract}, EtherSenderReceiverTransactor: EtherSenderReceiverTransactor{contract: contract}, EtherSenderReceiverFilterer: EtherSenderReceiverFilterer{contract: contract}}, nil +} + +type EtherSenderReceiver struct { + address common.Address + abi abi.ABI + EtherSenderReceiverCaller + EtherSenderReceiverTransactor + EtherSenderReceiverFilterer +} + +type EtherSenderReceiverCaller struct { + contract *bind.BoundContract +} + +type EtherSenderReceiverTransactor struct { + contract *bind.BoundContract +} + +type EtherSenderReceiverFilterer struct { + contract *bind.BoundContract +} + +type EtherSenderReceiverSession struct { + Contract *EtherSenderReceiver + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type EtherSenderReceiverCallerSession struct { + Contract *EtherSenderReceiverCaller + CallOpts bind.CallOpts +} + +type EtherSenderReceiverTransactorSession struct { + Contract *EtherSenderReceiverTransactor + TransactOpts bind.TransactOpts +} + +type EtherSenderReceiverRaw struct { + Contract *EtherSenderReceiver +} + +type EtherSenderReceiverCallerRaw struct { + Contract *EtherSenderReceiverCaller +} + +type EtherSenderReceiverTransactorRaw struct { + Contract *EtherSenderReceiverTransactor +} + +func NewEtherSenderReceiver(address common.Address, backend bind.ContractBackend) (*EtherSenderReceiver, error) { + abi, err := abi.JSON(strings.NewReader(EtherSenderReceiverABI)) + if err != nil { + return nil, err + } + contract, err := bindEtherSenderReceiver(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &EtherSenderReceiver{address: address, abi: abi, EtherSenderReceiverCaller: EtherSenderReceiverCaller{contract: contract}, EtherSenderReceiverTransactor: EtherSenderReceiverTransactor{contract: contract}, EtherSenderReceiverFilterer: EtherSenderReceiverFilterer{contract: contract}}, nil +} + +func NewEtherSenderReceiverCaller(address common.Address, caller bind.ContractCaller) (*EtherSenderReceiverCaller, error) { + contract, err := bindEtherSenderReceiver(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &EtherSenderReceiverCaller{contract: contract}, nil +} + +func NewEtherSenderReceiverTransactor(address common.Address, transactor bind.ContractTransactor) (*EtherSenderReceiverTransactor, error) { + contract, err := bindEtherSenderReceiver(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &EtherSenderReceiverTransactor{contract: contract}, nil +} + +func NewEtherSenderReceiverFilterer(address common.Address, filterer bind.ContractFilterer) (*EtherSenderReceiverFilterer, error) { + contract, err := bindEtherSenderReceiver(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &EtherSenderReceiverFilterer{contract: contract}, nil +} + +func bindEtherSenderReceiver(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := EtherSenderReceiverMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_EtherSenderReceiver *EtherSenderReceiverRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _EtherSenderReceiver.Contract.EtherSenderReceiverCaller.contract.Call(opts, result, method, params...) +} + +func (_EtherSenderReceiver *EtherSenderReceiverRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EtherSenderReceiver.Contract.EtherSenderReceiverTransactor.contract.Transfer(opts) +} + +func (_EtherSenderReceiver *EtherSenderReceiverRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _EtherSenderReceiver.Contract.EtherSenderReceiverTransactor.contract.Transact(opts, method, params...) +} + +func (_EtherSenderReceiver *EtherSenderReceiverCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _EtherSenderReceiver.Contract.contract.Call(opts, result, method, params...) +} + +func (_EtherSenderReceiver *EtherSenderReceiverTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EtherSenderReceiver.Contract.contract.Transfer(opts) +} + +func (_EtherSenderReceiver *EtherSenderReceiverTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _EtherSenderReceiver.Contract.contract.Transact(opts, method, params...) +} + +func (_EtherSenderReceiver *EtherSenderReceiverCaller) GetFee(opts *bind.CallOpts, destinationChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) { + var out []interface{} + err := _EtherSenderReceiver.contract.Call(opts, &out, "getFee", destinationChainSelector, message) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_EtherSenderReceiver *EtherSenderReceiverSession) GetFee(destinationChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) { + return _EtherSenderReceiver.Contract.GetFee(&_EtherSenderReceiver.CallOpts, destinationChainSelector, message) +} + +func (_EtherSenderReceiver *EtherSenderReceiverCallerSession) GetFee(destinationChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) { + return _EtherSenderReceiver.Contract.GetFee(&_EtherSenderReceiver.CallOpts, destinationChainSelector, message) +} + +func (_EtherSenderReceiver *EtherSenderReceiverCaller) GetRouter(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EtherSenderReceiver.contract.Call(opts, &out, "getRouter") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_EtherSenderReceiver *EtherSenderReceiverSession) GetRouter() (common.Address, error) { + return _EtherSenderReceiver.Contract.GetRouter(&_EtherSenderReceiver.CallOpts) +} + +func (_EtherSenderReceiver *EtherSenderReceiverCallerSession) GetRouter() (common.Address, error) { + return _EtherSenderReceiver.Contract.GetRouter(&_EtherSenderReceiver.CallOpts) +} + +func (_EtherSenderReceiver *EtherSenderReceiverCaller) IWeth(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _EtherSenderReceiver.contract.Call(opts, &out, "i_weth") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_EtherSenderReceiver *EtherSenderReceiverSession) IWeth() (common.Address, error) { + return _EtherSenderReceiver.Contract.IWeth(&_EtherSenderReceiver.CallOpts) +} + +func (_EtherSenderReceiver *EtherSenderReceiverCallerSession) IWeth() (common.Address, error) { + return _EtherSenderReceiver.Contract.IWeth(&_EtherSenderReceiver.CallOpts) +} + +func (_EtherSenderReceiver *EtherSenderReceiverCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _EtherSenderReceiver.contract.Call(opts, &out, "supportsInterface", interfaceId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_EtherSenderReceiver *EtherSenderReceiverSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _EtherSenderReceiver.Contract.SupportsInterface(&_EtherSenderReceiver.CallOpts, interfaceId) +} + +func (_EtherSenderReceiver *EtherSenderReceiverCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _EtherSenderReceiver.Contract.SupportsInterface(&_EtherSenderReceiver.CallOpts, interfaceId) +} + +func (_EtherSenderReceiver *EtherSenderReceiverCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _EtherSenderReceiver.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_EtherSenderReceiver *EtherSenderReceiverSession) TypeAndVersion() (string, error) { + return _EtherSenderReceiver.Contract.TypeAndVersion(&_EtherSenderReceiver.CallOpts) +} + +func (_EtherSenderReceiver *EtherSenderReceiverCallerSession) TypeAndVersion() (string, error) { + return _EtherSenderReceiver.Contract.TypeAndVersion(&_EtherSenderReceiver.CallOpts) +} + +func (_EtherSenderReceiver *EtherSenderReceiverTransactor) CcipReceive(opts *bind.TransactOpts, message ClientAny2EVMMessage) (*types.Transaction, error) { + return _EtherSenderReceiver.contract.Transact(opts, "ccipReceive", message) +} + +func (_EtherSenderReceiver *EtherSenderReceiverSession) CcipReceive(message ClientAny2EVMMessage) (*types.Transaction, error) { + return _EtherSenderReceiver.Contract.CcipReceive(&_EtherSenderReceiver.TransactOpts, message) +} + +func (_EtherSenderReceiver *EtherSenderReceiverTransactorSession) CcipReceive(message ClientAny2EVMMessage) (*types.Transaction, error) { + return _EtherSenderReceiver.Contract.CcipReceive(&_EtherSenderReceiver.TransactOpts, message) +} + +func (_EtherSenderReceiver *EtherSenderReceiverTransactor) CcipSend(opts *bind.TransactOpts, destinationChainSelector uint64, message ClientEVM2AnyMessage) (*types.Transaction, error) { + return _EtherSenderReceiver.contract.Transact(opts, "ccipSend", destinationChainSelector, message) +} + +func (_EtherSenderReceiver *EtherSenderReceiverSession) CcipSend(destinationChainSelector uint64, message ClientEVM2AnyMessage) (*types.Transaction, error) { + return _EtherSenderReceiver.Contract.CcipSend(&_EtherSenderReceiver.TransactOpts, destinationChainSelector, message) +} + +func (_EtherSenderReceiver *EtherSenderReceiverTransactorSession) CcipSend(destinationChainSelector uint64, message ClientEVM2AnyMessage) (*types.Transaction, error) { + return _EtherSenderReceiver.Contract.CcipSend(&_EtherSenderReceiver.TransactOpts, destinationChainSelector, message) +} + +func (_EtherSenderReceiver *EtherSenderReceiverTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _EtherSenderReceiver.contract.RawTransact(opts, nil) +} + +func (_EtherSenderReceiver *EtherSenderReceiverSession) Receive() (*types.Transaction, error) { + return _EtherSenderReceiver.Contract.Receive(&_EtherSenderReceiver.TransactOpts) +} + +func (_EtherSenderReceiver *EtherSenderReceiverTransactorSession) Receive() (*types.Transaction, error) { + return _EtherSenderReceiver.Contract.Receive(&_EtherSenderReceiver.TransactOpts) +} + +func (_EtherSenderReceiver *EtherSenderReceiver) Address() common.Address { + return _EtherSenderReceiver.address +} + +type EtherSenderReceiverInterface interface { + GetFee(opts *bind.CallOpts, destinationChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) + + GetRouter(opts *bind.CallOpts) (common.Address, error) + + IWeth(opts *bind.CallOpts) (common.Address, error) + + SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + CcipReceive(opts *bind.TransactOpts, message ClientAny2EVMMessage) (*types.Transaction, error) + + CcipSend(opts *bind.TransactOpts, destinationChainSelector uint64, message ClientEVM2AnyMessage) (*types.Transaction, error) + + Receive(opts *bind.TransactOpts) (*types.Transaction, error) + + Address() common.Address +} + +var EtherSenderReceiverZKBin string = ("0x0004000000000002000c0000000000020000006004100270000002ed0340019700030000003103550002000000010355000002ed0040019d0000000100200190000001760000c13d0000008004000039000000400040043f000000040030008c000001a60000413d000000000201043b000000e002200270000002f90020009c000001aa0000a13d000002fa0020009c000003560000213d000002fd0020009c000003760000613d000002fe0020009c000004270000c13d000000240030008c000004270000413d0000000002000416000000000002004b000004270000c13d0000000401100370000000000101043b000800000001001d000002f30010009c000004270000213d000000080130006a000003040010009c000004270000213d000000a40010008c000004270000413d000003020100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000002ed0010009c000002ed01008041000000c0011002100000030c011001c700008005020000390bb10bac0000040f000000010020019000000a160000613d000000400200043d000000000101043b000002f0031001970000000001000411000000000031004b000004890000c13d000003130020009c000004830000213d000000a001200039000000400010043f000000080500002900000004035000390000000201000367000000000331034f000000000303043b00000000043204360000002403500039000000000531034f000000000505043b000002f30050009c000004270000213d00000000005404350000002005300039000000000351034f000000000303043b000002f30030009c000004270000213d00000008093000290000002306900039000003050760019700000000030000310000030504300197000000000847013f000000000047004b00000000070000190000030507004041000000000036004b00000000060000190000030506008041000003050080009c000000000706c019000000000007004b000004270000c13d000000040a9000390000000006a1034f000000000606043b000002f30060009c000004830000213d0000001f0760003900000329077001970000003f077000390000032908700197000000400700043d0000000008870019000000000078004b000000000b000039000000010b004039000002f30080009c000004830000213d0000000100b00190000004830000c13d000000400080043f000000000867043600000000096900190000002409900039000000000039004b000004270000213d0000002009a00039000000000a91034f000003290b6001980000001f0c60018f0000000009b80019000000830000613d000000000d0a034f000000000e08001900000000df0d043c000000000efe043600000000009e004b0000007f0000c13d00000000000c004b000000900000613d000000000aba034f000000030bc00210000000000c090433000000000cbc01cf000000000cbc022f000000000a0a043b000001000bb00089000000000aba022f000000000aba01cf000000000aca019f0000000000a9043500000000066800190000000000060435000000400620003900000000007604350000002006500039000000000561034f000000000505043b000002f30050009c000004270000213d00000008095000290000002305900039000000000035004b000000000700001900000305070080410000030505500197000000000845013f000000000045004b00000000050000190000030505004041000003050080009c000000000507c019000000000005004b000004270000c13d000000040a9000390000000005a1034f000000000505043b000002f30050009c000004830000213d0000001f0750003900000329077001970000003f077000390000032908700197000000400700043d0000000008870019000000000078004b000000000b000039000000010b004039000002f30080009c000004830000213d0000000100b00190000004830000c13d000000400080043f000000000857043600000000095900190000002409900039000000000039004b000004270000213d0000002009a00039000000000a91034f000003290b5001980000001f0c50018f0000000009b80019000000cb0000613d000000000d0a034f000000000e08001900000000df0d043c000000000efe043600000000009e004b000000c70000c13d00000000000c004b000000d80000613d000000000aba034f000000030bc00210000000000c090433000000000cbc01cf000000000cbc022f000000000a0a043b000001000bb00089000000000aba022f000000000aba01cf000000000aca019f0000000000a9043500000000055800190000000000050435000000600520003900000000007504350000002006600039000000000661034f000000000606043b000002f30060009c000004270000213d00000008076000290000002306700039000000000036004b000000000800001900000305080080410000030506600197000000000946013f000000000046004b00000000040000190000030504004041000003050090009c000000000408c019000000000004004b000004270000c13d0000000404700039000000000441034f000000000904043b000002f30090009c000004830000213d00000005049002100000003f044000390000030906400197000000400400043d0000000006640019000000000046004b00000000080000390000000108004039000002f30060009c000004830000213d0000000100800190000004830000c13d000000400060043f0000000006940436000000240770003900000006089002100000000008780019000000000038004b000004270000213d000000000009004b000006530000c13d0000008001200039000800000001001d000000000041043500000000010504330000000012010434000003040020009c000004270000213d000000200020008c000004270000413d0000000001010433000700000001001d000002f00010009c000004270000213d0000000001040433000000010010008c0000066d0000c13d00000000010604330000000001010433000600000001001d0000030201000041000000000010044300000000010004120000000400100443000000200100003900000024001004430000000001000414000002ed0010009c000002ed01008041000000c0011002100000030c011001c700008005020000390bb10bac0000040f000000010020019000000a160000613d000000000301034f0000000601000029000002f00410019700000008010000290000000001010433000000000203043b000002f002200197000600000004001d000800000002001d000000000024004b000006790000c13d0000000012010434000000000002004b000003c20000613d000000000101043300000020011000390000000001010433000800000001001d0000030d010000410000000000100443000000060100002900000004001004430000000001000414000002ed0010009c000002ed01008041000000c0011002100000030e011001c700008002020000390bb10bac0000040f000000010020019000000a160000613d000000000101043b000000000001004b000004270000613d000000400200043d00000321010000410000000000120435000500000002001d00000004012000390000000802000029000000000021043500000000010004140000000602000029000000040020008c000001680000613d0000000502000029000002ed0020009c000002ed020080410000004002200210000002ed0010009c000002ed01008041000000c001100210000000000121019f000002f8011001c700000006020000290bb10ba70000040f0000006003100270000102ed0030019d000300000001035500000001002001900000068a0000613d0000000501000029000002f30010009c000004830000213d0000000701000029000002f0021001970000000501000029000000400010043f0000000001000414000700000002001d000000040020008c000006df0000c13d00000001020000390000000101000031000006fc0000013d000000c004000039000000400040043f0000000002000416000000000002004b000004270000c13d0000001f02300039000002ee02200197000000c002200039000000400020043f0000001f0530018f000002ef06300198000000c002600039000001880000613d000000000701034f000000007807043c0000000004840436000000000024004b000001840000c13d000000000005004b000001950000613d000000000161034f0000000304500210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000200030008c000004270000413d000000c00600043d000002f00060009c000004270000213d000000400b00043d000000000006004b000003c80000c13d000002f70100004100000000001b04350000000401b000390000000000010435000002ed00b0009c000002ed0b0080410000004001b00210000002f8011001c700000bb300010430000000000003004b000004270000c13d000000000100001900000bb20001042e000002ff0020009c000003650000613d000003000020009c000003d30000613d000003010020009c000004270000c13d000000440030008c000004270000413d0000000002000416000000000002004b000004270000c13d0000000402100370000000000202043b000800000002001d000002f30020009c000004270000213d0000002402100370000000000202043b000002f30020009c000004270000213d0000000004230049000003040040009c000004270000213d000000a40040008c000004270000413d0000012004000039000000400040043f0000006004000039000000800040043f000000a00040043f000000c00040043f000000e00000043f000001000040043f00000004022000390000000004230049000003040040009c000004270000213d000000a00040008c000004270000413d000001c004000039000000400040043f000000000521034f000000000505043b000002f30050009c000004270000213d00000000062500190000001f05600039000000000035004b000004270000813d000000000561034f000000000505043b000002f30050009c000004830000213d0000001f0750003900000329077001970000003f077000390000032907700197000003080070009c000004830000213d000001c007700039000000400070043f000001c00050043f00000020066000390000000007650019000000000037004b000004270000213d000000000761034f00000329085001980000001f0950018f000001e006800039000001f70000613d000001e00a000039000000000b07034f00000000bc0b043c000000000aca043600000000006a004b000001f30000c13d000000000009004b000002040000613d000000000787034f0000000308900210000000000906043300000000098901cf000000000989022f000000000707043b0000010008800089000000000787022f00000000078701cf000000000797019f0000000000760435000001e0055000390000000000050435000001200040043f0000002004200039000000000541034f000000000505043b000002f30050009c000004270000213d00000000082500190000001f05800039000000000035004b000004270000813d000000000581034f000000000505043b000002f30050009c000004830000213d0000001f0650003900000329066001970000003f066000390000032907600197000000400600043d0000000007760019000000000067004b00000000090000390000000109004039000002f30070009c000004830000213d0000000100900190000004830000c13d000000400070043f000000000756043600000020088000390000000009850019000000000039004b000004270000213d000000000981034f000003290a5001980000001f0b50018f0000000008a70019000002320000613d000000000c09034f000000000d07001900000000ce0c043c000000000ded043600000000008d004b0000022e0000c13d00000000000b004b0000023f0000613d0000000009a9034f000000030ab00210000000000b080433000000000bab01cf000000000bab022f000000000909043b000001000aa000890000000009a9022f0000000009a901cf0000000009b9019f000000000098043500000000055700190000000000050435000001400060043f0000002004400039000000000541034f000000000505043b000002f30050009c000004270000213d00000000062500190000001f05600039000000000035004b000004270000813d000000000561034f000000000805043b000002f30080009c000004830000213d00000005058002100000003f055000390000030907500197000000400500043d0000000007750019000000000057004b00000000090000390000000109004039000002f30070009c000004830000213d0000000100900190000004830000c13d000000400070043f0000000000850435000000200660003900000006078002100000000007670019000000000037004b000004270000213d000000000008004b000006390000c13d000001600050043f0000002004400039000000000541034f000000000505043b000002f00050009c000004270000213d000001800050043f0000002004400039000000000441034f000000000404043b000002f30040009c000004270000213d00000000062400190000001f02600039000000000032004b000000000400001900000305040080410000030502200197000000000002004b00000000050000190000030505004041000003050020009c000000000504c019000000000005004b000004270000c13d000000000261034f000000000202043b000002f30020009c000004830000213d0000001f0420003900000329044001970000003f044000390000032905400197000000400400043d0000000005540019000000000045004b00000000070000390000000107004039000002f30050009c000004830000213d0000000100700190000004830000c13d000000400050043f000000000524043600000020066000390000000007620019000000000037004b000004270000213d000000000361034f00000329062001980000001f0720018f00000000016500190000029f0000613d000000000803034f0000000009050019000000008a08043c0000000009a90436000000000019004b0000029b0000c13d000000000007004b000002ac0000613d000000000363034f0000000306700210000000000701043300000000076701cf000000000767022f000000000303043b0000010006600089000000000363022f00000000036301cf000000000373019f000000000031043500000000012500190000000000010435000001a00040043f000000400100043d000001600200043d0000000002020433000000010020008c000006700000c13d000000200210003900000000030004110000000000320435000000200200003900000000002104350000030a0010009c000004830000213d0000004003100039000000400030043f000001400010043f000003020100004100000000001004430000000001000412000000040010044300000024002004430000000001000414000002ed0010009c000002ed01008041000000c0011002100000030c011001c700008005020000390bb10bac0000040f000000010020019000000a160000613d000001600200043d0000000023020434000000000003004b000003c20000613d0000000002020433000000000101043b000002f0011001970000000000120435000000400400043d000000240140003900000040020000390000000000210435000003110100004100000000001404350000000801000029000002f301100197000000040240003900000000001204350000004401400039000000a002000039000001200300043d0000000000210435000000e40240003900000000310304340000000000120435000600000004001d0000010402400039000000000001004b000002f10000613d000000000400001900000000052400190000000006430019000000000606043300000000006504350000002004400039000000000014004b000002ea0000413d000000000312001900000000000304350000001f011000390000032901100197000000000112001900000006030000290000000002310049000000440220008a0000006403300039000001400400043d000000000023043500000000320404340000000001210436000000000002004b000003080000613d000000000400001900000000051400190000000006430019000000000606043300000000006504350000002004400039000000000024004b000003010000413d000000000321001900000000000304350000001f022000390000032902200197000000000121001900000006040000290000000002410049000000440320008a0000008404400039000001600200043d000000000034043500000000030204330000000001310436000000000003004b000003230000613d0000000004000019000000200220003900000000050204330000000065050434000002f00550019700000000055104360000000006060433000000000065043500000040011000390000000104400039000000000034004b000003180000413d000001800200043d000002f0022001970000000604000029000000a40340003900000000002304350000000002410049000000440220008a000000c403400039000001a00400043d000000000023043500000000230404340000000001310436000800000001001d000700000003001d000000000003004b0000033b0000613d000000000100001900000008031000290000000004120019000000000404043300000000004304350000002001100039000000070010006c000003340000413d000000070200002900000008012000290000000000010435000003020100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000002ed0010009c000002ed01008041000000c0011002100000030c011001c700008005020000390bb10bac0000040f000000010020019000000a160000613d000000000201043b0000000001000414000002f002200197000000040020008c000006970000c13d0000000103000031000000200030008c00000020040000390000000004034019000006ca0000013d000002fb0020009c000003870000613d000002fc0020009c000004270000c13d0000000001000416000000000001004b000004270000c13d0000000001000412000a00000001001d000900000000003d0000800501000039000000440300003900000000040004150000000a0440008a000003800000013d000000240030008c000004270000413d0000000002000416000000000002004b000004270000c13d0000000401100370000000000101043b0000032600100198000004270000c13d000003270010009c00000000020000390000000102006039000003280010009c00000001022061bf000000800020043f000003030100004100000bb20001042e0000000001000416000000000001004b000004270000c13d0000000001000412000c00000001001d000b00200000003d0000800501000039000000440300003900000000040004150000000c0440008a000000050440021000000302020000410bb10b8e0000040f000002f001100197000000800010043f000003030100004100000bb20001042e000800000004001d000000440030008c000004270000413d0000000402100370000000000202043b000700000002001d000002f30020009c000004270000213d0000002402100370000000000202043b000002f30020009c000004270000213d0000000004230049000003040040009c000004270000213d000000a40040008c000004270000413d0000004406200039000000000461034f000000000904043b0000000404200039000000000b4300490000001f05b0008a00000305075001970000030508900197000000000a78013f000000000078004b00000000070000190000030507004041000000000059004b000000000500001900000305050080410000030500a0009c000000000705c019000000000007004b000004270000c13d000000000a4900190000000005a1034f000000000705043b000002f30070009c000004270000213d0000000608700210000000000c8300490000002005a00039000003050dc00197000003050e500197000000000fde013f0000000000de004b000000000d000019000003050d0040410000000000c5004b000000000c000019000003050c0020410000030500f0009c000000000d0cc01900000000000d004b000004270000c13d000000000007004b000004b40000c13d0000032301000041000000000010043f0000003201000039000000040010043f000002f80100004100000bb300010430000000800060043f000002f10100004100000000001b04350000000001000414000000040060008c000003e70000c13d0000000103000031000000200030008c00000020040000390000000004034019000004160000013d0000000001000416000000000001004b000004270000c13d000000c001000039000000400010043f0000001901000039000000800010043f0000032401000041000000a00010043f0000002001000039000000c00010043f0000008001000039000000e0020000390bb10b710000040f000000c00110008a000002ed0010009c000002ed01008041000000600110021000000325011001c700000bb20001042e000002ed00b0009c000002ed0200004100000000020b40190000004002200210000002ed0010009c000002ed01008041000000c001100210000000000121019f000002f2011001c7000700000006001d000000000206001900080000000b001d0bb10bac0000040f000000080b0000290000006003100270000002ed03300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000004040000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000004000000c13d000000000006004b000004110000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000004290000613d00000007060000290000001f01400039000000600110018f0000000004b10019000000000014004b00000000020000390000000102004039000002f30040009c000004830000213d0000000100200190000004830000c13d000800000004001d000000400040043f000000200030008c000004270000413d00000000020b0433000002f00020009c000004470000a13d000000000100001900000bb3000104300000001f0530018f000002ef06300198000000400200043d0000000004620019000004340000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000004300000c13d000000000005004b000004410000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000002ed0020009c000002ed020080410000004002200210000000000112019f00000bb300010430000000a00020043f000000080b0000290000002404b00039000000010500008a0000000000540435000002f40400004100000000004b04350000000404b0003900000000006404350000000004000414000000040020008c000004800000613d000002ed00b0009c000002ed0100004100000000010b40190000004001100210000002ed0040009c000002ed04008041000000c003400210000000000113019f000002f5011001c70bb10ba70000040f000000080b0000290000006003100270000002ed03300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b00190000046d0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000004690000c13d000000000006004b0000047a0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000004a80000613d0000001f01400039000000600110018f0000000001b10019000002f30010009c000004920000a13d0000032301000041000000000010043f0000004101000039000000040010043f000002f80100004100000bb300010430000002f703000041000000000032043500000004032000390000000000130435000002ed0020009c000002ed020080410000004001200210000002f8011001c700000bb300010430000000400010043f000000200030008c000004270000413d00000008010000290000000001010433000000000001004b0000000002000039000000010200c039000000000021004b000004270000c13d000000800100043d00000140000004430000016000100443000000a00100043d00000020020000390000018000200443000001a000100443000001000020044300000002010000390000012000100443000002f60100004100000bb20001042e0000001f0530018f000002ef06300198000000400200043d0000000004620019000004340000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000004af0000c13d000004340000013d000000400ca00039000000000dc1034f000000200c6000390000000006c1034f000000000d0d043b000000000606043b000002f00060009c000004270000213d000000000006004b000004c10000613d000000000e0004160000000000de004b000006330000c13d000001200d0000390000004000d0043f000000600d0000390000008000d0043f000000a000d0043f000000c000d0043f000000e00000043f00060000000d001d0000010000d0043f0000030400b0009c000004270000213d000000a000b0008c000004270000413d000001c00b0000390000004000b0043f000000600cc0008a000000000bc1034f000000000b0b043b000002f300b0009c000004270000213d000000000e4b00190000001f0be0003900000000003b004b000004270000813d000000000be1034f000000000b0b043b00050000000b001d000002f300b0009c000004830000213d000000050b0000290000001f0bb00039000003290bb001970000003f0bb00039000003290bb001970000030800b0009c000004830000213d000001c00bb000390000004000b0043f000000050d000029000001c000d0043f000000200be00039000000000ebd001900000000003e004b000004270000213d0003000000b10353000000050d000029000003290bd001980004001f00d0019300020000000b001d000001e00eb00039000004fa0000613d000001e00f000039000000030b00035f00000000bd0b043c000000000fdf04360000000000ef004b000004f60000c13d000000040000006b000005090000613d000000020d000029000000030bd0035f000000040d000029000000030dd00210000000000f0e0433000000000fdf01cf000000000fdf022f000000000b0b043b000001000dd00089000000000bdb022f000000000bdb01cf000000000bfb019f0000000000be0435000000050b000029000001e00bb0003900000000000b0435000001c00b0000390000012000b0043f000000200bc00039000000000bb1034f000000000b0b043b000002f300b0009c000004270000213d000000000e4b00190000001f0be0003900000000003b004b000004270000813d000000000be1034f000000000b0b043b000002f300b0009c000004830000213d0000001f0cb00039000003290cc001970000003f0cc00039000003290dc00197000000400c00043d000000000ddc001900050000000c001d0000000000cd004b000000000f000039000000010f004039000002f300d0009c000004830000213d0000000100f00190000004830000c13d0000004000d0043f000000050c000029000000000cbc043600040000000c001d000000200de00039000000000edb001900000000003e004b000004270000213d0002000000d10353000003290db001980003001f00b0019300010000000d001d000000040ed000290000053d0000613d000000020f00035f000000040d00002900000000fc0f043c000000000dcd04360000000000ed004b000005390000c13d000000030000006b0000054c0000613d000000010d000029000000020cd0035f000000030d000029000000030dd00210000000000f0e0433000000000fdf01cf000000000fdf022f000000000c0c043b000001000dd00089000000000cdc022f000000000cdc01cf000000000cfc019f0000000000ce0435000000040bb0002900000000000b0435000000050b0000290000014000b0043f000002f30090009c000004270000213d0000001f09a00039000000000039004b000000000a000019000003050a0080410000030509900197000000000009004b000000000b000019000003050b004041000003050090009c000000000b0ac01900000000000b004b000004270000c13d00000005097002100000003f09900039000003090a900197000000400900043d000000000aa9001900000000009a004b000000000b000039000000010b004039000002f300a0009c000004830000213d0000000100b00190000004830000c13d0000004000a0043f00000000007904350000000007580019000000000037004b000004270000213d000000000075004b0000058a0000813d0000000008090019000000000a5300490000030400a0009c000004270000213d0000004000a0008c000004270000413d000000400a00043d0000030a00a0009c000004830000213d000000400ba000390000004000b0043f000000000b51034f000000000b0b043b000002f000b0009c000004270000213d0000002008800039000000000bba0436000000200c500039000000000cc1034f000000000c0c043b0000000000cb04350000000000a804350000004005500039000000000075004b000005720000413d000001600090043f000001800060043f0000008402200039000000000221034f000000000202043b000002f30020009c000004270000213d00000000064200190000001f02600039000000000032004b000000000400001900000305040080410000030502200197000000000002004b00000000050000190000030505004041000003050020009c000000000504c019000000000005004b000004270000c13d000000000261034f000000000202043b000002f30020009c000004830000213d0000001f0420003900000329044001970000003f044000390000032905400197000000400400043d0000000005540019000000000045004b00000000070000390000000107004039000002f30050009c000004830000213d0000000100700190000004830000c13d000000400050043f000000000524043600000020066000390000000007620019000000000037004b000004270000213d000000000361034f00000329062001980000001f0720018f0000000001650019000005c00000613d000000000803034f0000000009050019000000008a08043c0000000009a90436000000000019004b000005bc0000c13d000000000007004b000005cd0000613d000000000363034f0000000306700210000000000701043300000000076701cf000000000767022f000000000303043b0000010006600089000000000363022f00000000036301cf000000000373019f000000000031043500000000012500190000000000010435000001a00040043f000000400100043d000001600200043d0000000002020433000000010020008c000006700000c13d00000020020000390000000002210436000000000300041100000000003204350000030a0010009c000004830000213d0000004002100039000000400020043f000001400010043f0000030201000041000000000010044300000000010004120000000400100443000000200100003900000024001004430000000001000414000002ed0010009c000002ed01008041000000c0011002100000030c011001c700008005020000390bb10bac0000040f000000010020019000000a160000613d000001600200043d0000000023020434000000000003004b000003c20000613d0000000002020433000000000101043b000002f00110019700000000001204350000030201000041000000000010044300000000010004120000000400100443000000200100003900000024001004430000000001000414000002ed0010009c000002ed01008041000000c0011002100000030c011001c700008005020000390bb10bac0000040f000000010020019000000a160000613d000000000101043b000001600200043d0000000023020434000000000003004b000003c20000613d000002f003100197000000000102043300000020011000390000000001010433000400000001001d0000030d010000410000000000100443000500000003001d00000004003004430000000001000414000002ed0010009c000002ed01008041000000c0011002100000030e011001c700008002020000390bb10bac0000040f000000010020019000000a160000613d000000000101043b000000000001004b000004270000613d000000400200043d0000030f01000041000300000002001d000000000012043500000000010004140000000502000029000000040020008c000007c10000613d0000000302000029000002ed0020009c000002ed020080410000004002200210000002ed0010009c000002ed01008041000000c001100210000000000121019f000000040000006b000007b60000c13d000002f2011001c70000000502000029000007bb0000013d0000030601000041000000800010043f0000008400d0043f000000a400e0043f000003070100004100000bb30001043000000000080500190000000009630049000003040090009c000004270000213d000000400090008c000004270000413d000000400900043d0000030a0090009c000004830000213d000000400a9000390000004000a0043f000000000a61034f000000000a0a043b000002f000a0009c000004270000213d0000002008800039000000000aa90436000000200b600039000000000bb1034f000000000b0b043b0000000000ba043500000000009804350000004006600039000000000076004b0000063a0000413d000002640000013d0000000009040019000000000a7300490000030400a0009c000004270000213d0000004000a0008c000004270000413d000000400a00043d0000030a00a0009c000004830000213d000000400ba000390000004000b0043f000000000b71034f000000000b0b043b000002f000b0009c000004270000213d0000002009900039000000000bba0436000000200c700039000000000cc1034f000000000c0c043b0000000000cb04350000000000a904350000004007700039000000000087004b000006540000413d000001090000013d000000400200043d0000030b030000410000048a0000013d0000030b03000041000000000031043500000004031000390000000000230435000002ed0010009c000002ed010080410000004001100210000002f8011001c700000bb3000104300bb10b830000040f00000000010104330000000001010433000000400200043d00000024032000390000000804000029000000000043043500000320030000410000000000320435000002f00110019700000004032000390000000000130435000002ed0020009c000002ed020080410000004001200210000002f5011001c700000bb300010430000002ed033001970000001f0530018f000002ef06300198000000400200043d0000000004620019000004340000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000006920000c13d000004340000013d00000007030000290000001f033000390000032903300197000000060500002900000000035300490000000803300029000002ed0030009c000002ed030080410000006003300210000002ed0050009c000002ed0400004100000000040540190000004004400210000000000343019f000002ed0010009c000002ed01008041000000c001100210000000000131019f0bb10bac0000040f0000006003100270000002ed03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000605700029000006b90000613d000000000801034f0000000609000029000000008a08043c0000000009a90436000000000059004b000006b50000c13d000000000006004b000006c60000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000006e60000613d0000001f01400039000000600210018f0000000601200029000000000021004b00000000020000390000000102004039000002f30010009c000004830000213d0000000100200190000004830000c13d000000400010043f000000200030008c000004270000413d000000060200002900000000020204330000000000210435000002ed0010009c000002ed0100804100000040011002100000031f011001c700000bb20001042e000002ed0010009c000002ed01008041000000c001100210000000080000006b000006f20000c13d0000000702000029000006f70000013d0000001f0530018f000002ef06300198000000400200043d0000000004620019000004340000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000006ed0000c13d000004340000013d0000031e011001c700008009020000390000000803000029000000070400002900000000050000190bb10ba70000040f00030000000103550000006001100270000102ed0010019d000002ed01100197000000000001004b000007250000c13d0000000100200190000001a80000c13d0000030d010000410000000000100443000000060100002900000004001004430000000001000414000002ed0010009c000002ed01008041000000c0011002100000030e011001c700008002020000390bb10bac0000040f000000010020019000000a160000613d000000000101043b000000000001004b000004270000613d000000400200043d0000030f01000041000500000002001d000000000012043500000000010004140000000602000029000000040020008c000007590000613d0000000502000029000002ed0020009c000002ed020080410000004002200210000002ed0010009c000002ed01008041000000c001100210000000000121019f000000080000006b0000074e0000c13d000002f2011001c70000000602000029000007530000013d000002f30010009c000004830000213d0000001f0310003900000329033001970000003f033000390000032904300197000000400300043d0000000004430019000000000034004b00000000050000390000000105004039000002f30040009c000004830000213d0000000100500190000004830000c13d000000400040043f000000000613043600000329031001980000001f0410018f00000000013600190000000305000367000007400000613d000000000705034f000000007807043c0000000006860436000000000016004b0000073c0000c13d000000000004004b000006fe0000613d000000000335034f0000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000006fe0000013d00000310011001c700008009020000390000000803000029000000060400002900000000050000190bb10ba70000040f00030000000103550000006003100270000102ed0030019d00000001002001900000076e0000613d0000000501000029000002f30010009c000004830000213d0000000503000029000000400030043f0000002401300039000000080200002900000000002104350000032201000041000000000013043500000004013000390000000702000029000000000021043500000000010004140000000602000029000000040020008c0000077b0000c13d0000000104000031000000200040008c0000002004008039000007a60000013d000002ed033001970000001f0530018f000002ef06300198000000400200043d0000000004620019000004340000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000007760000c13d000004340000013d0000000502000029000002ed0020009c000002ed020080410000004002200210000002ed0010009c000002ed01008041000000c001100210000000000121019f000002f5011001c700000006020000290bb10ba70000040f0000006003100270000002ed03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000505700029000007950000613d000000000801034f0000000509000029000000008a08043c0000000009a90436000000000059004b000007910000c13d000000000006004b000007a20000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000008540000613d0000001f01400039000000600110018f0000000501100029000002f30010009c000004830000213d000000400010043f000000200040008c000004270000413d00000005010000290000000001010433000000000001004b0000000002000039000000010200c039000000000021004b000001a80000613d000004270000013d00000310011001c700008009020000390000000403000029000000050400002900000000050000190bb10ba70000040f00030000000103550000006003100270000102ed0030019d0000000100200190000008470000613d0000000301000029000002f30010009c000004830000213d0000000301000029000000400010043f000003020100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000002ed0010009c000002ed01008041000000c0011002100000030c011001c700008005020000390bb10bac0000040f000000010020019000000a160000613d000000000101043b000000400600043d000000240260003900000040030000390000000000320435000003110200004100000000002604350000000702000029000002f3032001970000000402600039000300000003001d00000000003204350000004402600039000001200300043d000000a0040000390000000000420435000000e40560003900000000420304340000000000250435000400000006001d0000010403600039000000000002004b000007f30000613d000000000500001900000000063500190000000007540019000000000707043300000000007604350000002005500039000000000025004b000007ec0000413d000000000423001900000000000404350000001f022000390000032902200197000000000223001900000004040000290000000003420049000000440330008a0000006404400039000001400500043d000000000034043500000000430504340000000002320436000000000003004b0000080a0000613d000000000500001900000000062500190000000007540019000000000707043300000000007604350000002005500039000000000035004b000008030000413d000000000432001900000000000404350000001f033000390000032903300197000000000232001900000004050000290000000003520049000000440430008a0000008405500039000001600300043d000000000045043500000000040304330000000002420436000000000004004b000008250000613d0000000005000019000000200330003900000000060304330000000076060434000002f00660019700000000066204360000000007070433000000000076043500000040022000390000000105500039000000000045004b0000081a0000413d000702f00010019b000001800100043d000002f0011001970000000404000029000000a40340003900000000001304350000000001420049000000440110008a000000c403400039000001a00400043d000000000013043500000000430404340000000001320436000000000003004b0000083c0000613d000000000200001900000000051200190000000006240019000000000606043300000000006504350000002002200039000000000032004b000008350000413d0000000002310019000000000002043500000000020004140000000704000029000000040040008c000008600000c13d0000000103000031000000200030008c00000020040000390000000004034019000008930000013d000002ed033001970000001f0530018f000002ef06300198000000400200043d0000000004620019000004340000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000084f0000c13d000004340000013d0000001f0530018f000002ef06300198000000400200043d0000000004620019000004340000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000085b0000c13d000004340000013d0000001f033000390000032903300197000000040400002900000000034300490000000001130019000002ed0010009c000002ed010080410000006001100210000002ed0040009c000002ed0300004100000000030440190000004003300210000000000131019f000002ed0020009c000002ed02008041000000c002200210000000000121019f00000007020000290bb10bac0000040f0000006003100270000002ed03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000405700029000008820000613d000000000801034f0000000409000029000000008a08043c0000000009a90436000000000059004b0000087e0000c13d000000000006004b0000088f0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000009200000613d0000001f01400039000000600210018f0000000401200029000000000021004b00000000020000390000000102004039000002f30010009c000004830000213d0000000100200190000004830000c13d000000400010043f000000200040008c000004270000413d0000000002000410000001800400043d000202f00040019c0000092c0000c13d0000031d01000041000000000010044300000004002004430000000001000414000002ed0010009c000002ed01008041000000c0011002100000030e011001c70000800a020000390bb10bac0000040f000000010020019000000a160000613d000000000301043b000000400600043d0000002401600039000000400200003900000000002104350000031a0100004100000000001604350000000401600039000000030200002900000000002104350000004401600039000001200200043d000000a0040000390000000000410435000000e40560003900000000410204340000000000150435000800000006001d0000010402600039000000000001004b000008cd0000613d000000000500001900000000062500190000000007540019000000000707043300000000007604350000002005500039000000000015004b000008c60000413d000000000412001900000000000404350000001f011000390000032901100197000000000112001900000008040000290000000002410049000000440220008a0000006404400039000001400500043d000000000024043500000000420504340000000001210436000000000002004b000008e40000613d000000000500001900000000061500190000000007540019000000000707043300000000007604350000002005500039000000000025004b000008dd0000413d000000000421001900000000000404350000001f022000390000032902200197000000000121001900000008050000290000000002510049000000440420008a0000008405500039000001600200043d000000000045043500000000040204330000000001410436000000000004004b000008ff0000613d0000000005000019000000200220003900000000060204330000000076060434000002f00660019700000000066104360000000007070433000000000076043500000040011000390000000105500039000000000045004b000008f40000413d000001800200043d000002f0022001970000000805000029000000a40450003900000000002404350000000002510049000000440220008a000000c404500039000001a00500043d000000000024043500000000420504340000000001210436000000000002004b000009150000613d000000000500001900000000061500190000000007540019000000000707043300000000007604350000002005500039000000000025004b0000090e0000413d0000000004210019000000000004043500000000040004140000000705000029000000040050008c000009510000c13d0000000103000031000000200030008c00000020040000390000000004034019000009e50000013d0000001f0530018f000002ef06300198000000400200043d0000000004620019000004340000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000009270000c13d000004340000013d000000040400002900000000050404330000006404100039000100000005001d00000000005404350000004404100039000000000024043500000020021000390000031204000041000000000042043500000024041000390000000005000411000000000054043500000064040000390000000000410435000003130010009c000004830000213d000000a004100039000400000004001d000000400040043f000003140010009c000004830000213d000000e004100039000000400040043f000000200400003900000004050000290000000000450435000000c00410003900000315050000410000000000540435000000000401043300000000010004140000000205000029000000040050008c000009660000c13d0000000102000039000009780000013d0000001f022000390000032902200197000000080500002900000000025200490000000001120019000002ed0010009c000002ed010080410000006001100210000002ed0050009c000002ed0200004100000000020540190000004002200210000000000121019f000002ed0040009c000002ed04008041000000c002400210000000000121019f000000000003004b000009c00000c13d0000000702000029000009c40000013d000002ed0020009c000002ed020080410000004002200210000002ed0040009c000002ed040080410000006003400210000000000223019f000002ed0010009c000002ed01008041000000c001100210000000000112019f00000002020000290bb10ba70000040f000000010220018f00030000000103550000006001100270000102ed0010019d000002ed03100197000000000003004b000009a60000613d000002f30030009c000004830000213d0000001f0130003900000329011001970000003f011000390000032901100197000000400400043d0000000001140019000600000004001d000000000041004b00000000040000390000000104004039000002f30010009c000004830000213d0000000100400190000004830000c13d000000400010043f0000000601000029000000000531043600000329043001980000001f0330018f000800000005001d00000000014500190000000305000367000009990000613d000000000605034f0000000807000029000000006806043c0000000007870436000000000017004b000009950000c13d000000000003004b000009a60000613d000000000445034f0000000303300210000000000501043300000000053501cf000000000535022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000353019f000000000031043500000006010000290000000001010433000000000002004b000009f30000c13d000000000001004b00000a170000c13d000000400300043d000800000003001d00000318010000410000000000130435000000040130003900000020020000390000000000210435000000240230003900000004010000290bb10b710000040f00000008020000290000000001210049000002ed0010009c000002ed01008041000002ed0020009c000002ed0200804100000060011002100000004002200210000000000121019f00000bb3000104300000031e011001c70000800902000039000000070400002900000000050000190bb10ba70000040f0000006003100270000002ed03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000805700029000009d40000613d000000000801034f0000000809000029000000008a08043c0000000009a90436000000000059004b000009d00000c13d000000000006004b000009e10000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000a200000613d0000001f01400039000000600210018f0000000801200029000000000021004b00000000020000390000000102004039000002f30010009c000004830000213d0000000100200190000004830000c13d000000400010043f000000200030008c000004270000413d00000b630000013d000000000001004b00000a300000c13d0000030d010000410000000000100443000000020100002900000004001004430000000001000414000002ed0010009c000002ed01008041000000c0011002100000030e011001c700008002020000390bb10bac0000040f000000010020019000000a160000613d000000000101043b000000000001004b00000a2c0000c13d000000400100043d00000044021000390000031b03000041000000000032043500000024021000390000001d03000039000000000032043500000318020000410000000000210435000000040210003900000020030000390000000000320435000002ed0010009c000002ed0100804100000040011002100000031c011001c700000bb300010430000000000001042f0000000802000029000002ed0020009c000002ed020080410000004002200210000002ed0010009c000002ed010080410000006001100210000000000121019f00000bb3000104300000001f0530018f000002ef06300198000000400200043d0000000004620019000004340000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000a270000c13d000004340000013d00000006010000290000000001010433000000000001004b00000a510000613d000003040010009c000004270000213d000000200010008c000004270000413d00000008010000290000000001010433000000000001004b0000000002000039000000010200c039000000000021004b000004270000c13d000000000001004b00000a510000c13d000000400100043d00000064021000390000031603000041000000000032043500000044021000390000031703000041000000000032043500000024021000390000002a03000039000000000032043500000318020000410000000000210435000000040210003900000020030000390000000000320435000002ed0010009c000002ed01008041000000400110021000000319011001c700000bb300010430000000400100043d000600000001001d000001800100043d000002f002100197000000050020006c00000a590000c13d000800060000002d00000aa90000013d0000000604000029000000240140003900000001030000290000000000310435000002f40100004100000000001404350000000401400039000000070300002900000000003104350000000001000414000000040020008c00000a690000c13d0000000104000031000000200040008c000000200400803900000a930000013d0000000603000029000002ed0030009c000002ed030080410000004003300210000002ed0010009c000002ed01008041000000c001100210000000000131019f000002f5011001c70bb10ba70000040f0000006003100270000002ed03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000060570002900000a820000613d000000000801034f0000000609000029000000008a08043c0000000009a90436000000000059004b00000a7e0000c13d000000000006004b00000a8f0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000b160000613d0000001f01400039000000600110018f0000000602100029000000000012004b00000000010000390000000101004039000800000002001d000002f30020009c000004830000213d0000000100100190000004830000c13d0000000801000029000000400010043f000000200040008c000004270000413d00000006010000290000000001010433000000000001004b0000000002000039000000010200c039000000000021004b000004270000c13d00000008050000290000002401500039000000400200003900000000002104350000031a0100004100000000001504350000000401500039000000030200002900000000002104350000004401500039000001200200043d000000a0030000390000000000310435000000e404500039000000003102043400000000001404350000010402500039000000000001004b00000ac40000613d000000000400001900000000052400190000000006430019000000000606043300000000006504350000002004400039000000000014004b00000abd0000413d000000000312001900000000000304350000001f011000390000032901100197000000000112001900000008030000290000000002310049000000440220008a0000006403300039000001400400043d000000000023043500000000320404340000000001210436000000000002004b00000adb0000613d000000000400001900000000051400190000000006430019000000000606043300000000006504350000002004400039000000000024004b00000ad40000413d000000000321001900000000000304350000001f022000390000032902200197000000000121001900000008040000290000000002410049000000440320008a0000008404400039000001600200043d000000000034043500000000030204330000000001310436000000000003004b00000af60000613d0000000004000019000000200220003900000000050204330000000065050434000002f00550019700000000055104360000000006060433000000000065043500000040011000390000000104400039000000000034004b00000aeb0000413d000001800200043d000002f0022001970000000804000029000000a40340003900000000002304350000000002410049000000440220008a000000c403400039000001a00400043d000000000023043500000000320404340000000001210436000000000002004b00000b0c0000613d000000000400001900000000051400190000000006430019000000000606043300000000006504350000002004400039000000000024004b00000b050000413d0000000003210019000000000003043500000000030004140000000704000029000000040040008c00000b220000c13d0000000104000031000000200040008c000000200400803900000b560000013d0000001f0530018f000002ef06300198000000400200043d0000000004620019000004340000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000b1d0000c13d000004340000013d0000001f0220003900000329022001970000000804000029000800000004001d00000000024200490000000001120019000002ed0010009c000002ed010080410000006001100210000002ed0040009c000002ed0200004100000000020440190000004002200210000000000121019f000002ed0030009c000002ed03008041000000c002300210000000000112019f00000007020000290bb10ba70000040f0000006003100270000002ed03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000080570002900000b450000613d000000000801034f0000000809000029000000008a08043c0000000009a90436000000000059004b00000b410000c13d000000000006004b00000b520000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000b650000613d0000001f01400039000000600210018f0000000801200029000000000021004b00000000020000390000000102004039000002f30010009c000004830000213d0000000100200190000004830000c13d000000400010043f000000200040008c000004270000413d0000000802000029000006d80000013d0000001f0530018f000002ef06300198000000400200043d0000000004620019000004340000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000b6c0000c13d000004340000013d00000000430104340000000001320436000000000003004b00000b7d0000613d000000000200001900000000052100190000000006240019000000000606043300000000006504350000002002200039000000000032004b00000b760000413d000000000231001900000000000204350000001f0230003900000329022001970000000001210019000000000001042d0000000012010434000000000002004b00000b870000613d000000000001042d0000032301000041000000000010043f0000003201000039000000040010043f000002f80100004100000bb300010430000000000001042f00000000050100190000000000200443000000040100003900000005024002700000000002020031000000000121043a0000002004400039000000000031004b00000b910000413d000002ed0030009c000002ed0300804100000060013002100000000002000414000002ed0020009c000002ed02008041000000c002200210000000000112019f0000032a011001c700000000020500190bb10bac0000040f000000010020019000000ba60000613d000000000101043b000000000001042d000000000001042f00000baa002104210000000102000039000000000001042d0000000002000019000000000001042d00000baf002104230000000102000039000000000001042d0000000002000019000000000001042d00000bb10000043200000bb20001042e00000bb30001043000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffffe861e907000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff095ea7b300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000002000000000000000000000000000000c0000001000000000000000000d7f73334000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000000000004dbe7e910000000000000000000000000000000000000000000000000000000096f4e9f80000000000000000000000000000000000000000000000000000000096f4e9f900000000000000000000000000000000000000000000000000000000b0f479a1000000000000000000000000000000000000000000000000000000004dbe7e920000000000000000000000000000000000000000000000000000000085572ffb0000000000000000000000000000000000000000000000000000000001ffc9a700000000000000000000000000000000000000000000000000000000181f5a770000000000000000000000000000000000000000000000000000000020487ded310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e00000000000000000000000000000000000000200000008000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000ba2f7467000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000800000000000000000000000000000000000000000000000000000000000000000fffffffffffffe3f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffffbf83b9f0ae0000000000000000000000000000000000000000000000000000000002000002000000000000000000000000000000440000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000d0e30db000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000400000000000000000000000020487ded0000000000000000000000000000000000000000000000000000000023b872dd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5f000000000000000000000000000000000000000000000000ffffffffffffff1f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646f742073756363656564000000000000000000000000000000000000000000005361666545524332303a204552433230206f7065726174696f6e20646964206e08c379a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008400000000000000000000000096f4e9f900000000000000000000000000000000000000000000000000000000416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000000000000000000000000000000000000000000640000000000000000000000009cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f39020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000fc746a1000000000000000000000000000000000000000000000000000000002e1a7d4d00000000000000000000000000000000000000000000000000000000a9059cbb000000000000000000000000000000000000000000000000000000004e487b7100000000000000000000000000000000000000000000000000000000457468657253656e646572526563656976657220312e352e30000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffc9a70000000000000000000000000000000000000000000000000000000085572ffb00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00200000200000000000000000000000000000000000000000000000000000000") diff --git a/core/gethwrappers/ccip/generated_zks/fee_quoter/fee_quoter.go b/core/gethwrappers/ccip/generated_zks/fee_quoter/fee_quoter.go new file mode 100644 index 00000000000..3533b087129 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/fee_quoter/fee_quoter.go @@ -0,0 +1,3073 @@ +package fee_quoter + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type AuthorizedCallersAuthorizedCallerArgs struct { + AddedCallers []common.Address + RemovedCallers []common.Address +} + +type ClientEVM2AnyMessage struct { + Receiver []byte + Data []byte + TokenAmounts []ClientEVMTokenAmount + FeeToken common.Address + ExtraArgs []byte +} + +type ClientEVMTokenAmount struct { + Token common.Address + Amount *big.Int +} + +type FeeQuoterDestChainConfig struct { + IsEnabled bool + MaxNumberOfTokensPerMsg uint16 + MaxDataBytes uint32 + MaxPerMsgGasLimit uint32 + DestGasOverhead uint32 + DestGasPerPayloadByte uint16 + DestDataAvailabilityOverheadGas uint32 + DestGasPerDataAvailabilityByte uint16 + DestDataAvailabilityMultiplierBps uint16 + DefaultTokenFeeUSDCents uint16 + DefaultTokenDestGasOverhead uint32 + DefaultTxGasLimit uint32 + GasMultiplierWeiPerEth uint64 + NetworkFeeUSDCents uint32 + GasPriceStalenessThreshold uint32 + EnforceOutOfOrder bool + ChainFamilySelector [4]byte +} + +type FeeQuoterDestChainConfigArgs struct { + DestChainSelector uint64 + DestChainConfig FeeQuoterDestChainConfig +} + +type FeeQuoterPremiumMultiplierWeiPerEthArgs struct { + Token common.Address + PremiumMultiplierWeiPerEth uint64 +} + +type FeeQuoterStaticConfig struct { + MaxFeeJuelsPerMsg *big.Int + LinkToken common.Address + TokenPriceStalenessThreshold uint32 +} + +type FeeQuoterTokenPriceFeedConfig struct { + DataFeedAddress common.Address + TokenDecimals uint8 + IsEnabled bool +} + +type FeeQuoterTokenPriceFeedUpdate struct { + SourceToken common.Address + FeedConfig FeeQuoterTokenPriceFeedConfig +} + +type FeeQuoterTokenTransferFeeConfig struct { + MinFeeUSDCents uint32 + MaxFeeUSDCents uint32 + DeciBps uint16 + DestGasOverhead uint32 + DestBytesOverhead uint32 + IsEnabled bool +} + +type FeeQuoterTokenTransferFeeConfigArgs struct { + DestChainSelector uint64 + TokenTransferFeeConfigs []FeeQuoterTokenTransferFeeConfigSingleTokenArgs +} + +type FeeQuoterTokenTransferFeeConfigRemoveArgs struct { + DestChainSelector uint64 + Token common.Address +} + +type FeeQuoterTokenTransferFeeConfigSingleTokenArgs struct { + Token common.Address + TokenTransferFeeConfig FeeQuoterTokenTransferFeeConfig +} + +type InternalEVM2AnyTokenTransfer struct { + SourcePoolAddress common.Address + DestTokenAddress []byte + ExtraData []byte + Amount *big.Int + DestExecData []byte +} + +type InternalGasPriceUpdate struct { + DestChainSelector uint64 + UsdPerUnitGas *big.Int +} + +type InternalPriceUpdates struct { + TokenPriceUpdates []InternalTokenPriceUpdate + GasPriceUpdates []InternalGasPriceUpdate +} + +type InternalTimestampedPackedUint224 struct { + Value *big.Int + Timestamp uint32 +} + +type InternalTokenPriceUpdate struct { + SourceToken common.Address + UsdPerToken *big.Int +} + +type KeystoneFeedsPermissionHandlerPermission struct { + Forwarder common.Address + WorkflowName [10]byte + ReportName [2]byte + WorkflowOwner common.Address + IsAllowed bool +} + +var FeeQuoterMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint96\",\"name\":\"maxFeeJuelsPerMsg\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"linkToken\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"tokenPriceStalenessThreshold\",\"type\":\"uint32\"}],\"internalType\":\"structFeeQuoter.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"priceUpdaters\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"feeTokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"dataFeedAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedConfig\",\"name\":\"feedConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedUpdate[]\",\"name\":\"tokenPriceFeeds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"minFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"deciBps\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigSingleTokenArgs[]\",\"name\":\"tokenTransferFeeConfigs\",\"type\":\"tuple[]\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigArgs[]\",\"name\":\"tokenTransferFeeConfigArgs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"premiumMultiplierWeiPerEth\",\"type\":\"uint64\"}],\"internalType\":\"structFeeQuoter.PremiumMultiplierWeiPerEthArgs[]\",\"name\":\"premiumMultiplierWeiPerEthArgs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasPriceStalenessThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CannotTransferToSelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DataFeedValueOutOfUint224Range\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"DestinationChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExtraArgOutOfOrderExecutionMustBeTrue\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"FeeTokenNotSupported\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"}],\"name\":\"InvalidDestBytesOverhead\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidDestChainConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidEVMAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExtraArgsTag\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minFeeUSDCents\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint256\"}],\"name\":\"InvalidFeeRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStaticConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgFeeJuels\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeeJuelsPerMsg\",\"type\":\"uint256\"}],\"name\":\"MessageFeeTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MessageGasLimitTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualSize\",\"type\":\"uint256\"}],\"name\":\"MessageTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerCannotBeZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"workflowOwner\",\"type\":\"address\"},{\"internalType\":\"bytes10\",\"name\":\"workflowName\",\"type\":\"bytes10\"},{\"internalType\":\"bytes2\",\"name\":\"reportName\",\"type\":\"bytes2\"}],\"name\":\"ReportForwarderUnauthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SourceTokenDataTooLarge\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePassed\",\"type\":\"uint256\"}],\"name\":\"StaleGasPrice\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotSupported\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"UnauthorizedCaller\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"numberOfTokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint256\"}],\"name\":\"UnsupportedNumberOfTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AuthorizedCallerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AuthorizedCallerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasPriceStalenessThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"indexed\":false,\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"name\":\"DestChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasPriceStalenessThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"indexed\":false,\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"name\":\"DestChainConfigUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"}],\"name\":\"FeeTokenAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"}],\"name\":\"FeeTokenRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"premiumMultiplierWeiPerEth\",\"type\":\"uint64\"}],\"name\":\"PremiumMultiplierWeiPerEthUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"dataFeedAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"structFeeQuoter.TokenPriceFeedConfig\",\"name\":\"priceFeedConfig\",\"type\":\"tuple\"}],\"name\":\"PriceFeedPerTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"reportId\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bytes10\",\"name\":\"workflowName\",\"type\":\"bytes10\"},{\"internalType\":\"bytes2\",\"name\":\"reportName\",\"type\":\"bytes2\"},{\"internalType\":\"address\",\"name\":\"workflowOwner\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isAllowed\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"structKeystoneFeedsPermissionHandler.Permission\",\"name\":\"permission\",\"type\":\"tuple\"}],\"name\":\"ReportPermissionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenTransferFeeConfigDeleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"minFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"deciBps\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"structFeeQuoter.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"name\":\"TokenTransferFeeConfigUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"UsdPerTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChain\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"UsdPerUnitGasUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"FEE_BASE_DECIMALS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"KEYSTONE_PRICE_DECIMALS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addedCallers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"removedCallers\",\"type\":\"address[]\"}],\"internalType\":\"structAuthorizedCallers.AuthorizedCallerArgs\",\"name\":\"authorizedCallerArgs\",\"type\":\"tuple\"}],\"name\":\"applyAuthorizedCallerUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasPriceStalenessThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"applyDestChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"feeTokensToRemove\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"feeTokensToAdd\",\"type\":\"address[]\"}],\"name\":\"applyFeeTokensUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"premiumMultiplierWeiPerEth\",\"type\":\"uint64\"}],\"internalType\":\"structFeeQuoter.PremiumMultiplierWeiPerEthArgs[]\",\"name\":\"premiumMultiplierWeiPerEthArgs\",\"type\":\"tuple[]\"}],\"name\":\"applyPremiumMultiplierWeiPerEthUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"minFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"deciBps\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigSingleTokenArgs[]\",\"name\":\"tokenTransferFeeConfigs\",\"type\":\"tuple[]\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigArgs[]\",\"name\":\"tokenTransferFeeConfigArgs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigRemoveArgs[]\",\"name\":\"tokensToUseDefaultFeeConfigs\",\"type\":\"tuple[]\"}],\"name\":\"applyTokenTransferFeeConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"fromTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"toToken\",\"type\":\"address\"}],\"name\":\"convertTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllAuthorizedCallers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getDestChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasPriceStalenessThreshold\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getDestinationChainGasPrice\",\"outputs\":[{\"components\":[{\"internalType\":\"uint224\",\"name\":\"value\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"}],\"internalType\":\"structInternal.TimestampedPackedUint224\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPremiumMultiplierWeiPerEth\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"premiumMultiplierWeiPerEth\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint96\",\"name\":\"maxFeeJuelsPerMsg\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"linkToken\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"tokenPriceStalenessThreshold\",\"type\":\"uint32\"}],\"internalType\":\"structFeeQuoter.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getTokenAndGasPrices\",\"outputs\":[{\"internalType\":\"uint224\",\"name\":\"tokenPrice\",\"type\":\"uint224\"},{\"internalType\":\"uint224\",\"name\":\"gasPriceValue\",\"type\":\"uint224\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenPrice\",\"outputs\":[{\"components\":[{\"internalType\":\"uint224\",\"name\":\"value\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"}],\"internalType\":\"structInternal.TimestampedPackedUint224\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenPriceFeedConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"dataFeedAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"getTokenPrices\",\"outputs\":[{\"components\":[{\"internalType\":\"uint224\",\"name\":\"value\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"}],\"internalType\":\"structInternal.TimestampedPackedUint224[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenTransferFeeConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"minFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"deciBps\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"getValidatedFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getValidatedTokenPrice\",\"outputs\":[{\"internalType\":\"uint224\",\"name\":\"\",\"type\":\"uint224\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"onReport\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sourcePoolAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"destExecData\",\"type\":\"bytes\"}],\"internalType\":\"structInternal.EVM2AnyTokenTransfer[]\",\"name\":\"onRampTokenTransfers\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"sourceTokenAmounts\",\"type\":\"tuple[]\"}],\"name\":\"processMessageArgs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"msgFeeJuels\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOutOfOrderExecution\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"convertedExtraArgs\",\"type\":\"bytes\"},{\"internalType\":\"bytes[]\",\"name\":\"destExecDataPerToken\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bytes10\",\"name\":\"workflowName\",\"type\":\"bytes10\"},{\"internalType\":\"bytes2\",\"name\":\"reportName\",\"type\":\"bytes2\"},{\"internalType\":\"address\",\"name\":\"workflowOwner\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isAllowed\",\"type\":\"bool\"}],\"internalType\":\"structKeystoneFeedsPermissionHandler.Permission[]\",\"name\":\"permissions\",\"type\":\"tuple[]\"}],\"name\":\"setReportPermissions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"}],\"name\":\"updatePrices\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"dataFeedAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedConfig\",\"name\":\"feedConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedUpdate[]\",\"name\":\"tokenPriceFeedUpdates\",\"type\":\"tuple[]\"}],\"name\":\"updateTokenPriceFeeds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60e06040523480156200001157600080fd5b50604051620078f0380380620078f083398101604081905262000034916200189c565b85336000816200005757604051639b15e16f60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03848116919091179091558116156200008a576200008a81620001d0565b5050604080518082018252828152815160008152602080820190935291810191909152620000b8906200024a565b5060208701516001600160a01b03161580620000dc575086516001600160601b0316155b80620000f05750604087015163ffffffff16155b156200010f5760405163d794ef9560e01b815260040160405180910390fd5b6020878101516001600160a01b031660a05287516001600160601b031660805260408089015163ffffffff1660c052805160008152918201905262000155908662000399565b6200016084620004e1565b6200016b81620005d9565b620001768262000a45565b60408051600080825260208201909252620001c391859190620001bc565b6040805180820190915260008082526020820152815260200190600190039081620001945790505b5062000b11565b5050505050505062001b5a565b336001600160a01b03821603620001fa57604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b602081015160005b8151811015620002da576000828281518110620002735762000273620019bb565b602090810291909101015190506200028d60028262000e97565b15620002d0576040516001600160a01b03821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b5060010162000252565b50815160005b815181101562000393576000828281518110620003015762000301620019bb565b6020026020010151905060006001600160a01b0316816001600160a01b0316036200033f576040516342bcdf7f60e11b815260040160405180910390fd5b6200034c60028262000eb7565b506040516001600160a01b03821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a150600101620002e0565b50505050565b60005b82518110156200043a57620003d8838281518110620003bf57620003bf620019bb565b6020026020010151600b62000ece60201b90919060201c565b156200043157828181518110620003f357620003f3620019bb565b60200260200101516001600160a01b03167f1795838dc8ab2ffc5f431a1729a6afa0b587f982f7b2be0b9d7187a1ef547f9160405160405180910390a25b6001016200039c565b5060005b8151811015620004dc576200047a828281518110620004615762000461620019bb565b6020026020010151600b62000eb760201b90919060201c565b15620004d357818181518110620004955762000495620019bb565b60200260200101516001600160a01b03167fdf1b1bd32a69711488d71554706bb130b1fc63a5fa1a2cd85e8440f84065ba2360405160405180910390a25b6001016200043e565b505050565b60005b8151811015620005d5576000828281518110620005055762000505620019bb565b6020908102919091018101518051818301516001600160a01b0380831660008181526007875260409081902084518154868a0180518589018051949098166001600160a81b03199093168317600160a01b60ff928316021760ff60a81b1916600160a81b9415159490940293909317909355835190815291511697810197909752915115159186019190915292945090929091907fe6a7a17d710bf0b2cd05e5397dc6f97a5da4ee79e31e234bf5f965ee2bd9a5bf9060600160405180910390a2505050806001019050620004e4565b5050565b60005b8151811015620005d5576000828281518110620005fd57620005fd620019bb565b6020026020010151905060008383815181106200061e576200061e620019bb565b6020026020010151600001519050600082602001519050816001600160401b03166000148062000657575061016081015163ffffffff16155b806200067957506102008101516001600160e01b031916630a04b54b60e21b14155b80620006995750806060015163ffffffff1681610160015163ffffffff16115b15620006c85760405163c35aa79d60e01b81526001600160401b03831660048201526024015b60405180910390fd5b6001600160401b038216600090815260096020526040812060010154600160a81b900460e01b6001600160e01b03191690036200074857816001600160401b03167f525e3d4e0c31cef19cf9426af8d2c0ddd2d576359ca26bed92aac5fadda46265826040516200073a9190620019d1565b60405180910390a26200078c565b816001600160401b03167f283b699f411baff8f1c29fe49f32a828c8151596244b8e7e4c164edd6569a83582604051620007839190620019d1565b60405180910390a25b8060096000846001600160401b03166001600160401b0316815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548161ffff021916908361ffff16021790555060408201518160000160036101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160076101000a81548163ffffffff021916908363ffffffff160217905550608082015181600001600b6101000a81548163ffffffff021916908363ffffffff16021790555060a082015181600001600f6101000a81548161ffff021916908361ffff16021790555060c08201518160000160116101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160000160156101000a81548161ffff021916908361ffff1602179055506101008201518160000160176101000a81548161ffff021916908361ffff1602179055506101208201518160000160196101000a81548161ffff021916908361ffff16021790555061014082015181600001601b6101000a81548163ffffffff021916908363ffffffff1602179055506101608201518160010160006101000a81548163ffffffff021916908363ffffffff1602179055506101808201518160010160046101000a8154816001600160401b0302191690836001600160401b031602179055506101a082015181600101600c6101000a81548163ffffffff021916908363ffffffff1602179055506101c08201518160010160106101000a81548163ffffffff021916908363ffffffff1602179055506101e08201518160010160146101000a81548160ff0219169083151502179055506102008201518160010160156101000a81548163ffffffff021916908360e01c0217905550905050505050806001019050620005dc565b60005b8151811015620005d557600082828151811062000a695762000a69620019bb565b6020026020010151600001519050600083838151811062000a8e5762000a8e620019bb565b6020908102919091018101518101516001600160a01b03841660008181526008845260409081902080546001600160401b0319166001600160401b0385169081179091559051908152919350917fbb77da6f7210cdd16904228a9360133d1d7dfff99b1bc75f128da5b53e28f97d910160405180910390a2505060010162000a48565b60005b825181101562000dd157600083828151811062000b355762000b35620019bb565b6020026020010151905060008160000151905060005b82602001515181101562000dc25760008360200151828151811062000b745762000b74620019bb565b602002602001015160200151905060008460200151838151811062000b9d5762000b9d620019bb565b6020026020010151600001519050816020015163ffffffff16826000015163ffffffff161062000bf857815160208301516040516305a7b3d160e11b815263ffffffff928316600482015291166024820152604401620006bf565b602063ffffffff16826080015163ffffffff16101562000c495760808201516040516312766e0160e11b81526001600160a01b038316600482015263ffffffff9091166024820152604401620006bf565b6001600160401b0384166000818152600a602090815260408083206001600160a01b0386168085529083529281902086518154938801518389015160608a015160808b015160a08c01511515600160901b0260ff60901b1963ffffffff928316600160701b021664ffffffffff60701b199383166a01000000000000000000000263ffffffff60501b1961ffff90961668010000000000000000029590951665ffffffffffff60401b19968416640100000000026001600160401b0319909b16939097169290921798909817939093169390931717919091161792909217909155519091907f94967ae9ea7729ad4f54021c1981765d2b1d954f7c92fbec340aa0a54f46b8b59062000daf908690600060c08201905063ffffffff80845116835280602085015116602084015261ffff60408501511660408401528060608501511660608401528060808501511660808401525060a0830151151560a083015292915050565b60405180910390a3505060010162000b4b565b50505080600101905062000b14565b5060005b8151811015620004dc57600082828151811062000df65762000df6620019bb565b6020026020010151600001519050600083838151811062000e1b5762000e1b620019bb565b6020908102919091018101518101516001600160401b0384166000818152600a845260408082206001600160a01b038516808452955280822080546001600160981b03191690555192945090917f4de5b1bcbca6018c11303a2c3f4a4b4f22a1c741d8c4ba430d246ac06c5ddf8b9190a3505060010162000dd5565b600062000eae836001600160a01b03841662000ee5565b90505b92915050565b600062000eae836001600160a01b03841662000fe9565b600062000eae836001600160a01b0384166200103b565b6000818152600183016020526040812054801562000fde57600062000f0c60018362001b22565b855490915060009062000f229060019062001b22565b905081811462000f8e57600086600001828154811062000f465762000f46620019bb565b906000526020600020015490508087600001848154811062000f6c5762000f6c620019bb565b6000918252602080832090910192909255918252600188019052604090208390555b855486908062000fa25762000fa262001b44565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505062000eb1565b600091505062000eb1565b6000818152600183016020526040812054620010325750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000eb1565b50600062000eb1565b6000818152600183016020526040812054801562000fde5760006200106260018362001b22565b8554909150600090620010789060019062001b22565b905080821462000f8e57600086600001828154811062000f465762000f46620019bb565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715620010d757620010d76200109c565b60405290565b604080519081016001600160401b0381118282101715620010d757620010d76200109c565b60405160c081016001600160401b0381118282101715620010d757620010d76200109c565b60405161022081016001600160401b0381118282101715620010d757620010d76200109c565b604051601f8201601f191681016001600160401b03811182821017156200117857620011786200109c565b604052919050565b80516001600160a01b03811681146200119857600080fd5b919050565b805163ffffffff811681146200119857600080fd5b600060608284031215620011c557600080fd5b620011cf620010b2565b82519091506001600160601b0381168114620011ea57600080fd5b8152620011fa6020830162001180565b60208201526200120d604083016200119d565b604082015292915050565b60006001600160401b038211156200123457620012346200109c565b5060051b60200190565b600082601f8301126200125057600080fd5b8151602062001269620012638362001218565b6200114d565b8083825260208201915060208460051b8701019350868411156200128c57600080fd5b602086015b84811015620012b357620012a58162001180565b835291830191830162001291565b509695505050505050565b805180151581146200119857600080fd5b600082601f830112620012e157600080fd5b81516020620012f4620012638362001218565b82815260079290921b840181019181810190868411156200131457600080fd5b8286015b84811015620012b3578088036080811215620013345760008081fd5b6200133e620010dd565b620013498362001180565b8152606080601f1984011215620013605760008081fd5b6200136a620010b2565b92506200137987850162001180565b835260408085015160ff81168114620013925760008081fd5b84890152620013a3858301620012be565b90840152508086019190915283529183019160800162001318565b80516001600160401b03811681146200119857600080fd5b805161ffff811681146200119857600080fd5b600082601f830112620013fb57600080fd5b815160206200140e620012638362001218565b82815260059290921b840181019181810190868411156200142e57600080fd5b8286015b84811015620012b35780516001600160401b03808211156200145357600080fd5b908801906040601f19838c0381018213156200146e57600080fd5b62001478620010dd565b62001485898601620013be565b815282850151848111156200149957600080fd5b8086019550508c603f860112620014af57600080fd5b888501519350620014c4620012638562001218565b84815260e09094028501830193898101908e861115620014e357600080fd5b958401955b85871015620015bc57868f0360e08112156200150357600080fd5b6200150d620010dd565b620015188962001180565b815260c086830112156200152b57600080fd5b6200153562001102565b9150620015448d8a016200119d565b825262001553878a016200119d565b8d8301526200156560608a01620013d6565b878301526200157760808a016200119d565b60608301526200158a60a08a016200119d565b60808301526200159d60c08a01620012be565b60a0830152808d0191909152825260e09690960195908a0190620014e8565b828b01525087525050509284019250830162001432565b600082601f830112620015e557600080fd5b81516020620015f8620012638362001218565b82815260069290921b840181019181810190868411156200161857600080fd5b8286015b84811015620012b35760408189031215620016375760008081fd5b62001641620010dd565b6200164c8262001180565b81526200165b858301620013be565b818601528352918301916040016200161c565b80516001600160e01b0319811681146200119857600080fd5b600082601f8301126200169957600080fd5b81516020620016ac620012638362001218565b8281526102409283028501820192828201919087851115620016cd57600080fd5b8387015b858110156200188f5780890382811215620016ec5760008081fd5b620016f6620010dd565b6200170183620013be565b815261022080601f1984011215620017195760008081fd5b6200172362001127565b925062001732888501620012be565b8352604062001743818601620013d6565b898501526060620017568187016200119d565b82860152608091506200176b8287016200119d565b9085015260a06200177e8682016200119d565b8286015260c0915062001793828701620013d6565b9085015260e0620017a68682016200119d565b828601526101009150620017bc828701620013d6565b90850152610120620017d0868201620013d6565b828601526101409150620017e6828701620013d6565b90850152610160620017fa8682016200119d565b828601526101809150620018108287016200119d565b908501526101a062001824868201620013be565b828601526101c091506200183a8287016200119d565b908501526101e06200184e8682016200119d565b82860152610200915062001864828701620012be565b90850152620018758583016200166e565b9084015250808701919091528452928401928101620016d1565b5090979650505050505050565b6000806000806000806000610120888a031215620018b957600080fd5b620018c58989620011b2565b60608901519097506001600160401b0380821115620018e357600080fd5b620018f18b838c016200123e565b975060808a01519150808211156200190857600080fd5b620019168b838c016200123e565b965060a08a01519150808211156200192d57600080fd5b6200193b8b838c01620012cf565b955060c08a01519150808211156200195257600080fd5b620019608b838c01620013e9565b945060e08a01519150808211156200197757600080fd5b620019858b838c01620015d3565b93506101008a01519150808211156200199d57600080fd5b50620019ac8a828b0162001687565b91505092959891949750929550565b634e487b7160e01b600052603260045260246000fd5b81511515815261022081016020830151620019f2602084018261ffff169052565b50604083015162001a0b604084018263ffffffff169052565b50606083015162001a24606084018263ffffffff169052565b50608083015162001a3d608084018263ffffffff169052565b5060a083015162001a5460a084018261ffff169052565b5060c083015162001a6d60c084018263ffffffff169052565b5060e083015162001a8460e084018261ffff169052565b506101008381015161ffff9081169184019190915261012080850151909116908301526101408084015163ffffffff9081169184019190915261016080850151821690840152610180808501516001600160401b0316908401526101a0808501518216908401526101c080850151909116908301526101e080840151151590830152610200928301516001600160e01b031916929091019190915290565b8181038181111562000eb157634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60805160a05160c051615d4362001bad600039600081816102fa01526117ba0152600081816102be01528181610ed50152610f3501526000818161028a01528181610f5e0152610fce0152615d436000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c806379ba509711610104578063bf78e03f116100a2578063d8694ccd11610071578063d8694ccd14610ad6578063f2fde38b14610ae9578063fbe3f77814610afc578063ffdb4b3714610b0f57600080fd5b8063bf78e03f146109d5578063cdc73d5114610ab3578063d02641a014610abb578063d63d3af214610ace57600080fd5b806382b49eb0116100de57806382b49eb0146108175780638da5cb5b1461098757806391a2749a146109af578063a69c64c0146109c257600080fd5b806379ba5097146107e95780637afac322146107f1578063805f21321461080457600080fd5b806341ed29e71161017c578063514e8cff1161014b578063514e8cff146104845780636cb5f3dd146105275780636def4ce71461053a578063770e2dc4146107d657600080fd5b806341ed29e7146103ee578063430d138c1461040157806345ac924d146104245780634ab35b0b1461044457600080fd5b8063181f5a77116101b8578063181f5a77146103735780632451a627146103bc578063325c868e146103d15780633937306f146103d957600080fd5b806241e5be146101de578063061877e31461020457806306285c691461025d575b600080fd5b6101f16101ec36600461440b565b610b57565b6040519081526020015b60405180910390f35b610244610212366004614447565b73ffffffffffffffffffffffffffffffffffffffff1660009081526008602052604090205467ffffffffffffffff1690565b60405167ffffffffffffffff90911681526020016101fb565b610327604080516060810182526000808252602082018190529181019190915260405180606001604052807f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff16815250905090565b6040805182516bffffffffffffffffffffffff16815260208084015173ffffffffffffffffffffffffffffffffffffffff16908201529181015163ffffffff16908201526060016101fb565b6103af6040518060400160405280601381526020017f46656551756f74657220312e362e302d6465760000000000000000000000000081525081565b6040516101fb91906144c6565b6103c4610bc5565b6040516101fb91906144d9565b6101f1602481565b6103ec6103e7366004614533565b610bd6565b005b6103ec6103fc3660046146df565b610e8b565b61041461040f3660046148ca565b610ecd565b6040516101fb94939291906149be565b610437610432366004614a5d565b6110dd565b6040516101fb9190614a9f565b610457610452366004614447565b6111a8565b6040517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90911681526020016101fb565b61051a610492366004614b1a565b60408051808201909152600080825260208201525067ffffffffffffffff166000908152600560209081526040918290208251808401909352547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811683527c0100000000000000000000000000000000000000000000000000000000900463ffffffff169082015290565b6040516101fb9190614b35565b6103ec610535366004614bc6565b6111b3565b6107c9610548366004614b1a565b6040805161022081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e081018290526102008101919091525067ffffffffffffffff908116600090815260096020908152604091829020825161022081018452815460ff8082161515835261ffff61010080840482169685019690965263ffffffff630100000084048116978501979097526701000000000000008304871660608501526b0100000000000000000000008304871660808501526f010000000000000000000000000000008304811660a0850152710100000000000000000000000000000000008304871660c08501527501000000000000000000000000000000000000000000808404821660e08087019190915277010000000000000000000000000000000000000000000000850483169786019790975279010000000000000000000000000000000000000000000000000084049091166101208501527b01000000000000000000000000000000000000000000000000000000909204861661014084015260019093015480861661016084015264010000000081049096166101808301526c01000000000000000000000000860485166101a083015270010000000000000000000000000000000086049094166101c082015274010000000000000000000000000000000000000000850490911615156101e08201527fffffffff0000000000000000000000000000000000000000000000000000000092909304901b1661020082015290565b6040516101fb9190614de6565b6103ec6107e4366004614fe4565b6111c7565b6103ec6111d9565b6103ec6107ff3660046152fe565b6112a7565b6103ec610812366004615362565b6112b9565b6109276108253660046153ce565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091525067ffffffffffffffff919091166000908152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff94909416835292815290829020825160c081018452905463ffffffff8082168352640100000000820481169383019390935268010000000000000000810461ffff16938201939093526a01000000000000000000008304821660608201526e01000000000000000000000000000083049091166080820152720100000000000000000000000000000000000090910460ff16151560a082015290565b6040516101fb9190600060c08201905063ffffffff80845116835280602085015116602084015261ffff60408501511660408401528060608501511660608401528060808501511660808401525060a0830151151560a083015292915050565b60015460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101fb565b6103ec6109bd3660046153f8565b6116f5565b6103ec6109d0366004615489565b611706565b610a766109e3366004614447565b60408051606080820183526000808352602080840182905292840181905273ffffffffffffffffffffffffffffffffffffffff9485168152600783528390208351918201845254938416815260ff74010000000000000000000000000000000000000000850481169282019290925275010000000000000000000000000000000000000000009093041615159082015290565b60408051825173ffffffffffffffffffffffffffffffffffffffff16815260208084015160ff1690820152918101511515908201526060016101fb565b6103c4611717565b61051a610ac9366004614447565b611723565b6101f1601281565b6101f1610ae436600461554e565b6118d8565b6103ec610af7366004614447565b611e10565b6103ec610b0a3660046155b2565b611e21565b610b22610b1d3660046156d2565b611e32565b604080517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff9384168152929091166020830152016101fb565b6000610b6282611eea565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16610b8985611eea565b610bb1907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168561572b565b610bbb9190615742565b90505b9392505050565b6060610bd16002611f84565b905090565b610bde611f91565b6000610bea828061577d565b9050905060005b81811015610d34576000610c05848061577d565b83818110610c1557610c156157e5565b905060400201803603810190610c2b9190615840565b604080518082018252602080840180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff908116845263ffffffff42818116858701908152885173ffffffffffffffffffffffffffffffffffffffff9081166000908152600690975295889020965190519092167c010000000000000000000000000000000000000000000000000000000002919092161790935584519051935194955016927f52f50aa6d1a95a4595361ecf953d095f125d442e4673716dede699e049de148a92610d239290917bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a250600101610bf1565b506000610d44602084018461577d565b9050905060005b81811015610e85576000610d62602086018661577d565b83818110610d7257610d726157e5565b905060400201803603810190610d88919061587d565b604080518082018252602080840180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff908116845263ffffffff42818116858701908152885167ffffffffffffffff9081166000908152600590975295889020965190519092167c010000000000000000000000000000000000000000000000000000000002919092161790935584519051935194955016927fdd84a3fa9ef9409f550d54d6affec7e9c480c878c6ab27b78912a03e1b371c6e92610e749290917bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a250600101610d4b565b50505050565b610e93611fd6565b60005b8151811015610ec957610ec1828281518110610eb457610eb46157e5565b6020026020010151612027565b600101610e96565b5050565b6000806060807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1603610f2e578a9350610f5c565b610f598c8c7f0000000000000000000000000000000000000000000000000000000000000000610b57565b93505b7f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff16841115611000576040517f6a92a483000000000000000000000000000000000000000000000000000000008152600481018590526bffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660248201526044015b60405180910390fd5b67ffffffffffffffff8d1660009081526009602052604081206001015463ffffffff169061102f8c8c846121f9565b9050806020015194506110458f8b8b8b8b6123a2565b925085856110c5836040805182516024820152602092830151151560448083019190915282518083039091018152606490910190915290810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f181dcf100000000000000000000000000000000000000000000000000000000017905290565b95509550955050509950995099509995505050505050565b60608160008167ffffffffffffffff8111156110fb576110fb61456e565b60405190808252806020026020018201604052801561114057816020015b60408051808201909152600080825260208201528152602001906001900390816111195790505b50905060005b8281101561119d57611178868683818110611163576111636157e5565b9050602002016020810190610ac99190614447565b82828151811061118a5761118a6157e5565b6020908102919091010152600101611146565b509150505b92915050565b60006111a282611eea565b6111bb611fd6565b6111c481612725565b50565b6111cf611fd6565b610ec98282612bf7565b60005473ffffffffffffffffffffffffffffffffffffffff16331461122a576040517f02b543c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000008082163390811790935560008054909116815560405173ffffffffffffffffffffffffffffffffffffffff909216929183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6112af611fd6565b610ec9828261306d565b60008060006112fd87878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506131b492505050565b92509250925061130f338385846131cf565b600061131d858701876158a0565b905060005b81518110156116ea57600060076000848481518110611343576113436157e5565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff908116835282820193909352604091820160002082516060810184529054938416815260ff740100000000000000000000000000000000000000008504811692820192909252750100000000000000000000000000000000000000000090930416151590820181905290915061143e578282815181106113e7576113e76157e5565b6020908102919091010151516040517f06439c6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610ff7565b600061148b6012836020015186868151811061145c5761145c6157e5565b6020026020010151602001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16613327565b9050600660008585815181106114a3576114a36157e5565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001601c9054906101000a900463ffffffff1663ffffffff16848481518110611515576115156157e5565b60200260200101516040015163ffffffff1610156115345750506116e2565b6040518060400160405280827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152602001858581518110611575576115756157e5565b60200260200101516040015163ffffffff16815250600660008686815181106115a0576115a06157e5565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff168252818101929092526040016000208251929091015163ffffffff167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092169190911790558351849084908110611638576116386157e5565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff167f52f50aa6d1a95a4595361ecf953d095f125d442e4673716dede699e049de148a8286868151811061168e5761168e6157e5565b6020026020010151604001516040516116d79291907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216825263ffffffff16602082015260400190565b60405180910390a250505b600101611322565b505050505050505050565b6116fd611fd6565b6111c4816133ea565b61170e611fd6565b6111c481613576565b6060610bd1600b611f84565b604080518082019091526000808252602082015273ffffffffffffffffffffffffffffffffffffffff82166000908152600660209081526040918290208251808401909352547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116835263ffffffff7c010000000000000000000000000000000000000000000000000000000090910481169183018290527f000000000000000000000000000000000000000000000000000000000000000016906117e59042615967565b10156117f15792915050565b73ffffffffffffffffffffffffffffffffffffffff80841660009081526007602090815260409182902082516060810184529054938416815260ff74010000000000000000000000000000000000000000850481169282019290925275010000000000000000000000000000000000000000009093041615801591830191909152806118925750805173ffffffffffffffffffffffffffffffffffffffff16155b1561189e575092915050565b60006118a982613660565b9050826020015163ffffffff16816020015163ffffffff1610156118cd57826118cf565b805b95945050505050565b67ffffffffffffffff8083166000908152600960209081526040808320815161022081018352815460ff808216151580845261ffff61010080850482169886019890985263ffffffff630100000085048116978601979097526701000000000000008404871660608601526b0100000000000000000000008404871660808601526f010000000000000000000000000000008404811660a0860152710100000000000000000000000000000000008404871660c08601527501000000000000000000000000000000000000000000808504821660e08088019190915277010000000000000000000000000000000000000000000000860483169987019990995279010000000000000000000000000000000000000000000000000085049091166101208601527b01000000000000000000000000000000000000000000000000000000909304861661014085015260019094015480861661016085015264010000000081049098166101808401526c01000000000000000000000000880485166101a084015270010000000000000000000000000000000088049094166101c083015274010000000000000000000000000000000000000000870490931615156101e08201527fffffffff000000000000000000000000000000000000000000000000000000009290950490921b16610200840152909190611b12576040517f99ac52f200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff85166004820152602401610ff7565b611b2d611b256080850160608601614447565b600b906137f2565b611b8c57611b416080840160608501614447565b6040517f2502348c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610ff7565b6000611b9b604085018561577d565b9150611bf7905082611bb0602087018761597a565b905083611bbd888061597a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061382192505050565b6000611c11611c0c6080870160608801614447565b611eea565b90506000611c2487856101c001516138de565b9050600080808515611c6457611c58878b611c4560808d0160608e01614447565b88611c5360408f018f61577d565b6139de565b91945092509050611c84565b6101a0870151611c819063ffffffff16662386f26fc1000061572b565b92505b61010087015160009061ffff1615611cc857611cc5886dffffffffffffffffffffffffffff607088901c16611cbc60208e018e61597a565b90508a86613cb6565b90505b61018088015160009067ffffffffffffffff16611cf1611ceb60808e018e61597a565b8c613d66565b600001518563ffffffff168b60a0015161ffff168e8060200190611d15919061597a565b611d2092915061572b565b8c6080015163ffffffff16611d3591906159df565b611d3f91906159df565b611d4991906159df565b611d63906dffffffffffffffffffffffffffff891661572b565b611d6d919061572b565b9050867bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168282600860008f6060016020810190611da79190614447565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002054611de29067ffffffffffffffff168961572b565b611dec91906159df565b611df691906159df565b611e009190615742565b9c9b505050505050505050505050565b611e18611fd6565b6111c481613e27565b611e29611fd6565b6111c481613eeb565b67ffffffffffffffff8116600090815260096020526040812054819060ff16611e93576040517f99ac52f200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610ff7565b611e9c84611eea565b67ffffffffffffffff8416600090815260096020526040902060010154611ede908590700100000000000000000000000000000000900463ffffffff166138de565b915091505b9250929050565b600080611ef683611723565b9050806020015163ffffffff1660001480611f2e575080517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16155b15611f7d576040517f06439c6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610ff7565b5192915050565b60606000610bbe8361403d565b611f9c6002336137f2565b611fd4576040517fd86ad9cf000000000000000000000000000000000000000000000000000000008152336004820152602401610ff7565b565b60015473ffffffffffffffffffffffffffffffffffffffff163314611fd4576040517f2b5c74de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006120e082600001518360600151846020015185604001516040805173ffffffffffffffffffffffffffffffffffffffff80871660208301528516918101919091527fffffffffffffffffffff00000000000000000000000000000000000000000000831660608201527fffff0000000000000000000000000000000000000000000000000000000000008216608082015260009060a001604051602081830303815290604052805190602001209050949350505050565b60808301516000828152600460205260409081902080549215157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909316929092179091555190915081907f32a4ba3fa3351b11ad555d4c8ec70a744e8705607077a946807030d64b6ab1a3906121ed908590600060a08201905073ffffffffffffffffffffffffffffffffffffffff8084511683527fffffffffffffffffffff0000000000000000000000000000000000000000000060208501511660208401527fffff00000000000000000000000000000000000000000000000000000000000060408501511660408401528060608501511660608401525060808301511515608083015292915050565b60405180910390a25050565b6040805180820190915260008082526020820152600083900361223a57506040805180820190915267ffffffffffffffff8216815260006020820152610bbe565b600061224684866159f2565b905060006122578560048189615a38565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050507fffffffff0000000000000000000000000000000000000000000000000000000082167fe7e230f000000000000000000000000000000000000000000000000000000000016122f457808060200190518101906122eb9190615a62565b92505050610bbe565b7f6859a837000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316016123705760405180604001604052808280602001905181019061235c9190615a8e565b815260006020909101529250610bbe915050565b6040517f5247fdce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff808616600090815260096020526040902060010154606091750100000000000000000000000000000000000000000090910460e01b9085908111156123f2576123f261456e565b60405190808252806020026020018201604052801561242557816020015b60608152602001906001900390816124105790505b50915060005b8581101561271a576000858583818110612447576124476157e5565b61245d9260206040909202019081019150614447565b90506000888884818110612473576124736157e5565b90506020028101906124859190615aa7565b61249390604081019061597a565b91505060208111156125435767ffffffffffffffff8a166000908152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020546e010000000000000000000000000000900463ffffffff16811115612543576040517f36f536ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610ff7565b6125b3848a8a86818110612559576125596157e5565b905060200281019061256b9190615aa7565b61257990602081019061597a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061409992505050565b67ffffffffffffffff8a166000908152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684528252808320815160c081018352905463ffffffff8082168352640100000000820481169483019490945268010000000000000000810461ffff16928201929092526a01000000000000000000008204831660608201526e010000000000000000000000000000820490921660808301527201000000000000000000000000000000000000900460ff16151560a082018190529091906126c55767ffffffffffffffff8c166000908152600960205260409020547b01000000000000000000000000000000000000000000000000000000900463ffffffff166126cb565b81606001515b6040805163ffffffff8316602082015291925001604051602081830303815290604052878681518110612700576127006157e5565b60200260200101819052505050505080600101905061242b565b505095945050505050565b60005b8151811015610ec9576000828281518110612745576127456157e5565b602002602001015190506000838381518110612763576127636157e5565b60200260200101516000015190506000826020015190508167ffffffffffffffff166000148061279c575061016081015163ffffffff16155b806127ee57506102008101517fffffffff00000000000000000000000000000000000000000000000000000000167f2812d52c0000000000000000000000000000000000000000000000000000000014155b8061280d5750806060015163ffffffff1681610160015163ffffffff16115b15612850576040517fc35aa79d00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610ff7565b67ffffffffffffffff82166000908152600960205260408120600101547501000000000000000000000000000000000000000000900460e01b7fffffffff000000000000000000000000000000000000000000000000000000001690036128f8578167ffffffffffffffff167f525e3d4e0c31cef19cf9426af8d2c0ddd2d576359ca26bed92aac5fadda46265826040516128eb9190614de6565b60405180910390a261293b565b8167ffffffffffffffff167f283b699f411baff8f1c29fe49f32a828c8151596244b8e7e4c164edd6569a835826040516129329190614de6565b60405180910390a25b80600960008467ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548161ffff021916908361ffff16021790555060408201518160000160036101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160076101000a81548163ffffffff021916908363ffffffff160217905550608082015181600001600b6101000a81548163ffffffff021916908363ffffffff16021790555060a082015181600001600f6101000a81548161ffff021916908361ffff16021790555060c08201518160000160116101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160000160156101000a81548161ffff021916908361ffff1602179055506101008201518160000160176101000a81548161ffff021916908361ffff1602179055506101208201518160000160196101000a81548161ffff021916908361ffff16021790555061014082015181600001601b6101000a81548163ffffffff021916908363ffffffff1602179055506101608201518160010160006101000a81548163ffffffff021916908363ffffffff1602179055506101808201518160010160046101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506101a082015181600101600c6101000a81548163ffffffff021916908363ffffffff1602179055506101c08201518160010160106101000a81548163ffffffff021916908363ffffffff1602179055506101e08201518160010160146101000a81548160ff0219169083151502179055506102008201518160010160156101000a81548163ffffffff021916908360e01c0217905550905050505050806001019050612728565b60005b8251811015612f84576000838281518110612c1757612c176157e5565b6020026020010151905060008160000151905060005b826020015151811015612f7657600083602001518281518110612c5257612c526157e5565b6020026020010151602001519050600084602001518381518110612c7857612c786157e5565b6020026020010151600001519050816020015163ffffffff16826000015163ffffffff1610612cea57815160208301516040517f0b4f67a200000000000000000000000000000000000000000000000000000000815263ffffffff928316600482015291166024820152604401610ff7565b602063ffffffff16826080015163ffffffff161015612d5f5760808201516040517f24ecdc0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015263ffffffff9091166024820152604401610ff7565b67ffffffffffffffff84166000818152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529083529281902086518154938801518389015160608a015160808b015160a08c015115157201000000000000000000000000000000000000027fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff63ffffffff9283166e01000000000000000000000000000002167fffffffffffffffffffffffffff0000000000ffffffffffffffffffffffffffff9383166a0100000000000000000000027fffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffff61ffff9096166801000000000000000002959095167fffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffff968416640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909b16939097169290921798909817939093169390931717919091161792909217909155519091907f94967ae9ea7729ad4f54021c1981765d2b1d954f7c92fbec340aa0a54f46b8b590612f64908690600060c08201905063ffffffff80845116835280602085015116602084015261ffff60408501511660408401528060608501511660608401528060808501511660808401525060a0830151151560a083015292915050565b60405180910390a35050600101612c2d565b505050806001019050612bfa565b5060005b8151811015613068576000828281518110612fa557612fa56157e5565b60200260200101516000015190506000838381518110612fc757612fc76157e5565b60209081029190910181015181015167ffffffffffffffff84166000818152600a8452604080822073ffffffffffffffffffffffffffffffffffffffff8516808452955280822080547fffffffffffffffffffffffffff000000000000000000000000000000000000001690555192945090917f4de5b1bcbca6018c11303a2c3f4a4b4f22a1c741d8c4ba430d246ac06c5ddf8b9190a35050600101612f88565b505050565b60005b8251811015613110576130a683828151811061308e5761308e6157e5565b6020026020010151600b6140eb90919063ffffffff16565b15613108578281815181106130bd576130bd6157e5565b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f1795838dc8ab2ffc5f431a1729a6afa0b587f982f7b2be0b9d7187a1ef547f9160405160405180910390a25b600101613070565b5060005b81518110156130685761314a828281518110613132576131326157e5565b6020026020010151600b61410d90919063ffffffff16565b156131ac57818181518110613161576131616157e5565b602002602001015173ffffffffffffffffffffffffffffffffffffffff167fdf1b1bd32a69711488d71554706bb130b1fc63a5fa1a2cd85e8440f84065ba2360405160405180910390a25b600101613114565b6040810151604a820151605e90920151909260609290921c91565b6040805173ffffffffffffffffffffffffffffffffffffffff868116602080840191909152908616828401527fffffffffffffffffffff00000000000000000000000000000000000000000000851660608301527fffff00000000000000000000000000000000000000000000000000000000000084166080808401919091528351808403909101815260a09092018352815191810191909120600081815260049092529190205460ff16613320576040517f097e17ff00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8087166004830152851660248201527fffffffffffffffffffff00000000000000000000000000000000000000000000841660448201527fffff00000000000000000000000000000000000000000000000000000000000083166064820152608401610ff7565b5050505050565b6000806133348486615ae5565b9050600060248260ff16111561336e57613352602460ff8416615967565b61335d90600a615c1e565b6133679085615742565b9050613394565b61337c60ff83166024615967565b61338790600a615c1e565b613391908561572b565b90505b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111156118cf576040517f10cb51d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160005b815181101561348557600082828151811061340f5761340f6157e5565b6020026020010151905061342d81600261412f90919063ffffffff16565b1561347c5760405173ffffffffffffffffffffffffffffffffffffffff821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b506001016133f2565b50815160005b8151811015610e855760008282815181106134a8576134a86157e5565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613518576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61352360028261410d565b5060405173ffffffffffffffffffffffffffffffffffffffff821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a15060010161348b565b60005b8151811015610ec9576000828281518110613596576135966157e5565b602002602001015160000151905060008383815181106135b8576135b86157e5565b60209081029190910181015181015173ffffffffffffffffffffffffffffffffffffffff841660008181526008845260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051908152919350917fbb77da6f7210cdd16904228a9360133d1d7dfff99b1bc75f128da5b53e28f97d910160405180910390a25050600101613579565b60408051808201909152600080825260208201526000826000015190506000808273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156136cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136ef9190615c44565b509350509250506000821215613731576040517f10cb51d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006137b08473ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613781573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137a59190615c94565b876020015185613327565b604080518082019091527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff909116815263ffffffff909216602083015250949350505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610bbe565b836040015163ffffffff1683111561387a5760408085015190517f8693378900000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260248101849052604401610ff7565b836020015161ffff168211156138cf5760208401516040517fd88dddd60000000000000000000000000000000000000000000000000000000081526004810184905261ffff9091166024820152604401610ff7565b610e8584610200015182614099565b67ffffffffffffffff821660009081526005602090815260408083208151808301909252547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116825263ffffffff7c0100000000000000000000000000000000000000000000000000000000909104811692820192909252908316156139d6576000816020015163ffffffff16426139739190615967565b90508363ffffffff168111156139d4576040517ff08bcb3e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8616600482015263ffffffff8516602482015260448101829052606401610ff7565b505b519392505050565b6000808083815b81811015613ca8576000878783818110613a0157613a016157e5565b905060400201803603810190613a179190615cb1565b67ffffffffffffffff8c166000908152600a60209081526040808320845173ffffffffffffffffffffffffffffffffffffffff168452825291829020825160c081018452905463ffffffff8082168352640100000000820481169383019390935268010000000000000000810461ffff16938201939093526a01000000000000000000008304821660608201526e01000000000000000000000000000083049091166080820152720100000000000000000000000000000000000090910460ff16151560a0820181905291925090613b37576101208d0151613b049061ffff16662386f26fc1000061572b565b613b0e90886159df565b96508c610140015186613b219190615cea565b9550613b2e602086615cea565b94505050613ca0565b604081015160009061ffff1615613bf05760008c73ffffffffffffffffffffffffffffffffffffffff16846000015173ffffffffffffffffffffffffffffffffffffffff1614613b93578351613b8c90611eea565b9050613b96565b508a5b620186a0836040015161ffff16613bd88660200151847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661415190919063ffffffff16565b613be2919061572b565b613bec9190615742565b9150505b6060820151613bff9088615cea565b9650816080015186613c119190615cea565b8251909650600090613c309063ffffffff16662386f26fc1000061572b565b905080821015613c4f57613c44818a6159df565b985050505050613ca0565b6000836020015163ffffffff16662386f26fc10000613c6e919061572b565b905080831115613c8e57613c82818b6159df565b99505050505050613ca0565b613c98838b6159df565b995050505050505b6001016139e5565b505096509650969350505050565b60008063ffffffff8316613ccc6101208661572b565b613cd8876101e06159df565b613ce291906159df565b613cec91906159df565b905060008760c0015163ffffffff168860e0015161ffff1683613d0f919061572b565b613d1991906159df565b61010089015190915061ffff16613d406dffffffffffffffffffffffffffff89168361572b565b613d4a919061572b565b613d5a90655af3107a400061572b565b98975050505050505050565b60408051808201909152600080825260208201526000613d92858585610160015163ffffffff166121f9565b9050826060015163ffffffff1681600001511115613ddc576040517f4c4fc93a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826101e001518015613df057508060200151155b15610bbb576040517fee433e9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff821603613e76576040517fdad89dca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60005b8151811015610ec9576000828281518110613f0b57613f0b6157e5565b60209081029190910181015180518183015173ffffffffffffffffffffffffffffffffffffffff80831660008181526007875260409081902084518154868a0180518589018051949098167fffffffffffffffffffffff00000000000000000000000000000000000000000090931683177401000000000000000000000000000000000000000060ff92831602177fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000009415159490940293909317909355835190815291511697810197909752915115159186019190915292945090929091907fe6a7a17d710bf0b2cd05e5397dc6f97a5da4ee79e31e234bf5f965ee2bd9a5bf9060600160405180910390a2505050806001019050613eee565b60608160000180548060200260200160405190810160405280929190818152602001828054801561408d57602002820191906000526020600020905b815481526020019060010190808311614079575b50505050509050919050565b7fd7ed2ad4000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831601610ec9576130688161418e565b6000610bbe8373ffffffffffffffffffffffffffffffffffffffff8416614241565b6000610bbe8373ffffffffffffffffffffffffffffffffffffffff841661433b565b6000610bbe8373ffffffffffffffffffffffffffffffffffffffff841661438a565b6000670de0b6b3a7640000614184837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff861661572b565b610bbe9190615742565b600081516020146141cd57816040517f8d666f60000000000000000000000000000000000000000000000000000000008152600401610ff791906144c6565b6000828060200190518101906141e39190615a8e565b905073ffffffffffffffffffffffffffffffffffffffff811180614208575061040081105b156111a257826040517f8d666f60000000000000000000000000000000000000000000000000000000008152600401610ff791906144c6565b6000818152600183016020526040812054801561432a576000614265600183615967565b855490915060009061427990600190615967565b90508082146142de576000866000018281548110614299576142996157e5565b90600052602060002001549050808760000184815481106142bc576142bc6157e5565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806142ef576142ef615d07565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506111a2565b60009150506111a2565b5092915050565b6000818152600183016020526040812054614382575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556111a2565b5060006111a2565b6000818152600183016020526040812054801561432a5760006143ae600183615967565b85549091506000906143c290600190615967565b90508181146142de576000866000018281548110614299576142996157e5565b803573ffffffffffffffffffffffffffffffffffffffff8116811461440657600080fd5b919050565b60008060006060848603121561442057600080fd5b614429846143e2565b92506020840135915061443e604085016143e2565b90509250925092565b60006020828403121561445957600080fd5b610bbe826143e2565b6000815180845260005b818110156144885760208185018101518683018201520161446c565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000610bbe6020830184614462565b6020808252825182820181905260009190848201906040850190845b8181101561452757835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016144f5565b50909695505050505050565b60006020828403121561454557600080fd5b813567ffffffffffffffff81111561455c57600080fd5b820160408185031215610bbe57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156145c0576145c061456e565b60405290565b6040805190810167ffffffffffffffff811182821017156145c0576145c061456e565b604051610220810167ffffffffffffffff811182821017156145c0576145c061456e565b60405160c0810167ffffffffffffffff811182821017156145c0576145c061456e565b6040516060810167ffffffffffffffff811182821017156145c0576145c061456e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561469a5761469a61456e565b604052919050565b600067ffffffffffffffff8211156146bc576146bc61456e565b5060051b60200190565b80151581146111c457600080fd5b8035614406816146c6565b600060208083850312156146f257600080fd5b823567ffffffffffffffff81111561470957600080fd5b8301601f8101851361471a57600080fd5b803561472d614728826146a2565b614653565b81815260a0918202830184019184820191908884111561474c57600080fd5b938501935b8385101561481f5780858a0312156147695760008081fd5b61477161459d565b61477a866143e2565b8152868601357fffffffffffffffffffff00000000000000000000000000000000000000000000811681146147af5760008081fd5b818801526040868101357fffff000000000000000000000000000000000000000000000000000000000000811681146147e85760008081fd5b9082015260606147f98782016143e2565b9082015260808681013561480c816146c6565b9082015283529384019391850191614751565b50979650505050505050565b803567ffffffffffffffff8116811461440657600080fd5b60008083601f84011261485557600080fd5b50813567ffffffffffffffff81111561486d57600080fd5b602083019150836020828501011115611ee357600080fd5b60008083601f84011261489757600080fd5b50813567ffffffffffffffff8111156148af57600080fd5b6020830191508360208260051b8501011115611ee357600080fd5b600080600080600080600080600060c08a8c0312156148e857600080fd5b6148f18a61482b565b98506148ff60208b016143e2565b975060408a0135965060608a013567ffffffffffffffff8082111561492357600080fd5b61492f8d838e01614843565b909850965060808c013591508082111561494857600080fd5b6149548d838e01614885565b909650945060a08c013591508082111561496d57600080fd5b818c0191508c601f83011261498157600080fd5b81358181111561499057600080fd5b8d60208260061b85010111156149a557600080fd5b6020830194508093505050509295985092959850929598565b8481526000602085151581840152608060408401526149e06080840186614462565b8381036060850152845180825282820190600581901b8301840184880160005b83811015614a4c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018552614a3a838351614462565b94870194925090860190600101614a00565b50909b9a5050505050505050505050565b60008060208385031215614a7057600080fd5b823567ffffffffffffffff811115614a8757600080fd5b614a9385828601614885565b90969095509350505050565b602080825282518282018190526000919060409081850190868401855b82811015614b0d57614afd84835180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16825260209081015163ffffffff16910152565b9284019290850190600101614abc565b5091979650505050505050565b600060208284031215614b2c57600080fd5b610bbe8261482b565b81517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16815260208083015163ffffffff1690820152604081016111a2565b803561ffff8116811461440657600080fd5b803563ffffffff8116811461440657600080fd5b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461440657600080fd5b60006020808385031215614bd957600080fd5b823567ffffffffffffffff811115614bf057600080fd5b8301601f81018513614c0157600080fd5b8035614c0f614728826146a2565b8181526102409182028301840191848201919088841115614c2f57600080fd5b938501935b8385101561481f5784890381811215614c4d5760008081fd5b614c556145c6565b614c5e8761482b565b8152610220807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084011215614c935760008081fd5b614c9b6145e9565b9250614ca88989016146d4565b83526040614cb7818a01614b70565b8a8501526060614cc8818b01614b82565b8286015260809150614cdb828b01614b82565b9085015260a0614cec8a8201614b82565b8286015260c09150614cff828b01614b70565b9085015260e0614d108a8201614b82565b828601526101009150614d24828b01614b70565b90850152610120614d368a8201614b70565b828601526101409150614d4a828b01614b70565b90850152610160614d5c8a8201614b82565b828601526101809150614d70828b01614b82565b908501526101a0614d828a820161482b565b828601526101c09150614d96828b01614b82565b908501526101e0614da88a8201614b82565b828601526102009150614dbc828b016146d4565b90850152614dcb898301614b96565b90840152508088019190915283529384019391850191614c34565b81511515815261022081016020830151614e06602084018261ffff169052565b506040830151614e1e604084018263ffffffff169052565b506060830151614e36606084018263ffffffff169052565b506080830151614e4e608084018263ffffffff169052565b5060a0830151614e6460a084018261ffff169052565b5060c0830151614e7c60c084018263ffffffff169052565b5060e0830151614e9260e084018261ffff169052565b506101008381015161ffff9081169184019190915261012080850151909116908301526101408084015163ffffffff90811691840191909152610160808501518216908401526101808085015167ffffffffffffffff16908401526101a0808501518216908401526101c080850151909116908301526101e080840151151590830152610200808401517fffffffff000000000000000000000000000000000000000000000000000000008116828501525b505092915050565b600082601f830112614f5d57600080fd5b81356020614f6d614728836146a2565b82815260069290921b84018101918181019086841115614f8c57600080fd5b8286015b84811015614fd95760408189031215614fa95760008081fd5b614fb16145c6565b614fba8261482b565b8152614fc78583016143e2565b81860152835291830191604001614f90565b509695505050505050565b60008060408385031215614ff757600080fd5b67ffffffffffffffff8335111561500d57600080fd5b83601f84358501011261501f57600080fd5b61502f61472884358501356146a2565b8335840180358083526020808401939260059290921b9091010186101561505557600080fd5b602085358601015b85358601803560051b016020018110156152625767ffffffffffffffff8135111561508757600080fd5b8035863587010160407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828a030112156150c057600080fd5b6150c86145c6565b6150d46020830161482b565b815267ffffffffffffffff604083013511156150ef57600080fd5b88603f60408401358401011261510457600080fd5b61511a61472860206040850135850101356146a2565b6020604084810135850182810135808552928401939260e00201018b101561514157600080fd5b6040808501358501015b6040858101358601602081013560e00201018110156152435760e0818d03121561517457600080fd5b61517c6145c6565b615185826143e2565b815260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838f030112156151b957600080fd5b6151c161460d565b6151cd60208401614b82565b81526151db60408401614b82565b60208201526151ec60608401614b70565b60408201526151fd60808401614b82565b606082015261520e60a08401614b82565b608082015261522060c08401356146c6565b60c083013560a0820152602082810191909152908452929092019160e00161514b565b508060208401525050808552505060208301925060208101905061505d565b5092505067ffffffffffffffff6020840135111561527f57600080fd5b61528f8460208501358501614f4c565b90509250929050565b600082601f8301126152a957600080fd5b813560206152b9614728836146a2565b8083825260208201915060208460051b8701019350868411156152db57600080fd5b602086015b84811015614fd9576152f1816143e2565b83529183019183016152e0565b6000806040838503121561531157600080fd5b823567ffffffffffffffff8082111561532957600080fd5b61533586838701615298565b9350602085013591508082111561534b57600080fd5b5061535885828601615298565b9150509250929050565b6000806000806040858703121561537857600080fd5b843567ffffffffffffffff8082111561539057600080fd5b61539c88838901614843565b909650945060208701359150808211156153b557600080fd5b506153c287828801614843565b95989497509550505050565b600080604083850312156153e157600080fd5b6153ea8361482b565b915061528f602084016143e2565b60006020828403121561540a57600080fd5b813567ffffffffffffffff8082111561542257600080fd5b908301906040828603121561543657600080fd5b61543e6145c6565b82358281111561544d57600080fd5b61545987828601615298565b82525060208301358281111561546e57600080fd5b61547a87828601615298565b60208301525095945050505050565b6000602080838503121561549c57600080fd5b823567ffffffffffffffff8111156154b357600080fd5b8301601f810185136154c457600080fd5b80356154d2614728826146a2565b81815260069190911b820183019083810190878311156154f157600080fd5b928401925b82841015615543576040848903121561550f5760008081fd5b6155176145c6565b615520856143e2565b815261552d86860161482b565b81870152825260409390930192908401906154f6565b979650505050505050565b6000806040838503121561556157600080fd5b61556a8361482b565b9150602083013567ffffffffffffffff81111561558657600080fd5b830160a0818603121561559857600080fd5b809150509250929050565b60ff811681146111c457600080fd5b600060208083850312156155c557600080fd5b823567ffffffffffffffff8111156155dc57600080fd5b8301601f810185136155ed57600080fd5b80356155fb614728826146a2565b81815260079190911b8201830190838101908783111561561a57600080fd5b928401925b828410156155435783880360808112156156395760008081fd5b6156416145c6565b61564a866143e2565b81526060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08401121561567e5760008081fd5b615686614630565b92506156938888016143e2565b83526040808801356156a4816155a3565b848a015290870135906156b6826146c6565b830152808701919091528252608093909301929084019061561f565b600080604083850312156156e557600080fd5b6156ee836143e2565b915061528f6020840161482b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176111a2576111a26156fc565b600082615778577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126157b257600080fd5b83018035915067ffffffffffffffff8211156157cd57600080fd5b6020019150600681901b3603821315611ee357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116811461440657600080fd5b60006040828403121561585257600080fd5b61585a6145c6565b615863836143e2565b815261587160208401615814565b60208201529392505050565b60006040828403121561588f57600080fd5b6158976145c6565b6158638361482b565b600060208083850312156158b357600080fd5b823567ffffffffffffffff8111156158ca57600080fd5b8301601f810185136158db57600080fd5b80356158e9614728826146a2565b8181526060918202830184019184820191908884111561590857600080fd5b938501935b8385101561481f5780858a0312156159255760008081fd5b61592d614630565b615936866143e2565b8152615943878701615814565b878201526040615954818801614b82565b908201528352938401939185019161590d565b818103818111156111a2576111a26156fc565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126159af57600080fd5b83018035915067ffffffffffffffff8211156159ca57600080fd5b602001915036819003821315611ee357600080fd5b808201808211156111a2576111a26156fc565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015614f445760049490940360031b84901b1690921692915050565b60008085851115615a4857600080fd5b83861115615a5557600080fd5b5050820193919092039150565b600060408284031215615a7457600080fd5b615a7c6145c6565b825181526020830151615871816146c6565b600060208284031215615aa057600080fd5b5051919050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112615adb57600080fd5b9190910192915050565b60ff81811683821601908111156111a2576111a26156fc565b600181815b80851115615b5757817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615b3d57615b3d6156fc565b80851615615b4a57918102915b93841c9390800290615b03565b509250929050565b600082615b6e575060016111a2565b81615b7b575060006111a2565b8160018114615b915760028114615b9b57615bb7565b60019150506111a2565b60ff841115615bac57615bac6156fc565b50506001821b6111a2565b5060208310610133831016604e8410600b8410161715615bda575081810a6111a2565b615be48383615afe565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615c1657615c166156fc565b029392505050565b6000610bbe8383615b5f565b805169ffffffffffffffffffff8116811461440657600080fd5b600080600080600060a08688031215615c5c57600080fd5b615c6586615c2a565b9450602086015193506040860151925060608601519150615c8860808701615c2a565b90509295509295909350565b600060208284031215615ca657600080fd5b8151610bbe816155a3565b600060408284031215615cc357600080fd5b615ccb6145c6565b615cd4836143e2565b8152602083013560208201528091505092915050565b63ffffffff818116838216019080821115614334576143346156fc565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", +} + +var FeeQuoterABI = FeeQuoterMetaData.ABI + +var FeeQuoterBin = FeeQuoterMetaData.Bin + +func DeployFeeQuoter(auth *bind.TransactOpts, backend bind.ContractBackend, staticConfig FeeQuoterStaticConfig, priceUpdaters []common.Address, feeTokens []common.Address, tokenPriceFeeds []FeeQuoterTokenPriceFeedUpdate, tokenTransferFeeConfigArgs []FeeQuoterTokenTransferFeeConfigArgs, premiumMultiplierWeiPerEthArgs []FeeQuoterPremiumMultiplierWeiPerEthArgs, destChainConfigArgs []FeeQuoterDestChainConfigArgs) (common.Address, *generated_zks.Transaction, *FeeQuoter, error) { + parsed, err := FeeQuoterMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(FeeQuoterZKBin), backend, staticConfig, priceUpdaters, feeTokens, tokenPriceFeeds, tokenTransferFeeConfigArgs, premiumMultiplierWeiPerEthArgs, destChainConfigArgs) + contractReturn := &FeeQuoter{address: address, abi: *parsed, FeeQuoterCaller: FeeQuoterCaller{contract: contractBind}, FeeQuoterTransactor: FeeQuoterTransactor{contract: contractBind}, FeeQuoterFilterer: FeeQuoterFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(FeeQuoterBin), backend, staticConfig, priceUpdaters, feeTokens, tokenPriceFeeds, tokenTransferFeeConfigArgs, premiumMultiplierWeiPerEthArgs, destChainConfigArgs) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &FeeQuoter{address: address, abi: *parsed, FeeQuoterCaller: FeeQuoterCaller{contract: contract}, FeeQuoterTransactor: FeeQuoterTransactor{contract: contract}, FeeQuoterFilterer: FeeQuoterFilterer{contract: contract}}, nil +} + +type FeeQuoter struct { + address common.Address + abi abi.ABI + FeeQuoterCaller + FeeQuoterTransactor + FeeQuoterFilterer +} + +type FeeQuoterCaller struct { + contract *bind.BoundContract +} + +type FeeQuoterTransactor struct { + contract *bind.BoundContract +} + +type FeeQuoterFilterer struct { + contract *bind.BoundContract +} + +type FeeQuoterSession struct { + Contract *FeeQuoter + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type FeeQuoterCallerSession struct { + Contract *FeeQuoterCaller + CallOpts bind.CallOpts +} + +type FeeQuoterTransactorSession struct { + Contract *FeeQuoterTransactor + TransactOpts bind.TransactOpts +} + +type FeeQuoterRaw struct { + Contract *FeeQuoter +} + +type FeeQuoterCallerRaw struct { + Contract *FeeQuoterCaller +} + +type FeeQuoterTransactorRaw struct { + Contract *FeeQuoterTransactor +} + +func NewFeeQuoter(address common.Address, backend bind.ContractBackend) (*FeeQuoter, error) { + abi, err := abi.JSON(strings.NewReader(FeeQuoterABI)) + if err != nil { + return nil, err + } + contract, err := bindFeeQuoter(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &FeeQuoter{address: address, abi: abi, FeeQuoterCaller: FeeQuoterCaller{contract: contract}, FeeQuoterTransactor: FeeQuoterTransactor{contract: contract}, FeeQuoterFilterer: FeeQuoterFilterer{contract: contract}}, nil +} + +func NewFeeQuoterCaller(address common.Address, caller bind.ContractCaller) (*FeeQuoterCaller, error) { + contract, err := bindFeeQuoter(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &FeeQuoterCaller{contract: contract}, nil +} + +func NewFeeQuoterTransactor(address common.Address, transactor bind.ContractTransactor) (*FeeQuoterTransactor, error) { + contract, err := bindFeeQuoter(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &FeeQuoterTransactor{contract: contract}, nil +} + +func NewFeeQuoterFilterer(address common.Address, filterer bind.ContractFilterer) (*FeeQuoterFilterer, error) { + contract, err := bindFeeQuoter(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &FeeQuoterFilterer{contract: contract}, nil +} + +func bindFeeQuoter(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := FeeQuoterMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_FeeQuoter *FeeQuoterRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _FeeQuoter.Contract.FeeQuoterCaller.contract.Call(opts, result, method, params...) +} + +func (_FeeQuoter *FeeQuoterRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _FeeQuoter.Contract.FeeQuoterTransactor.contract.Transfer(opts) +} + +func (_FeeQuoter *FeeQuoterRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _FeeQuoter.Contract.FeeQuoterTransactor.contract.Transact(opts, method, params...) +} + +func (_FeeQuoter *FeeQuoterCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _FeeQuoter.Contract.contract.Call(opts, result, method, params...) +} + +func (_FeeQuoter *FeeQuoterTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _FeeQuoter.Contract.contract.Transfer(opts) +} + +func (_FeeQuoter *FeeQuoterTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _FeeQuoter.Contract.contract.Transact(opts, method, params...) +} + +func (_FeeQuoter *FeeQuoterCaller) FEEBASEDECIMALS(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _FeeQuoter.contract.Call(opts, &out, "FEE_BASE_DECIMALS") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_FeeQuoter *FeeQuoterSession) FEEBASEDECIMALS() (*big.Int, error) { + return _FeeQuoter.Contract.FEEBASEDECIMALS(&_FeeQuoter.CallOpts) +} + +func (_FeeQuoter *FeeQuoterCallerSession) FEEBASEDECIMALS() (*big.Int, error) { + return _FeeQuoter.Contract.FEEBASEDECIMALS(&_FeeQuoter.CallOpts) +} + +func (_FeeQuoter *FeeQuoterCaller) KEYSTONEPRICEDECIMALS(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _FeeQuoter.contract.Call(opts, &out, "KEYSTONE_PRICE_DECIMALS") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_FeeQuoter *FeeQuoterSession) KEYSTONEPRICEDECIMALS() (*big.Int, error) { + return _FeeQuoter.Contract.KEYSTONEPRICEDECIMALS(&_FeeQuoter.CallOpts) +} + +func (_FeeQuoter *FeeQuoterCallerSession) KEYSTONEPRICEDECIMALS() (*big.Int, error) { + return _FeeQuoter.Contract.KEYSTONEPRICEDECIMALS(&_FeeQuoter.CallOpts) +} + +func (_FeeQuoter *FeeQuoterCaller) ConvertTokenAmount(opts *bind.CallOpts, fromToken common.Address, fromTokenAmount *big.Int, toToken common.Address) (*big.Int, error) { + var out []interface{} + err := _FeeQuoter.contract.Call(opts, &out, "convertTokenAmount", fromToken, fromTokenAmount, toToken) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_FeeQuoter *FeeQuoterSession) ConvertTokenAmount(fromToken common.Address, fromTokenAmount *big.Int, toToken common.Address) (*big.Int, error) { + return _FeeQuoter.Contract.ConvertTokenAmount(&_FeeQuoter.CallOpts, fromToken, fromTokenAmount, toToken) +} + +func (_FeeQuoter *FeeQuoterCallerSession) ConvertTokenAmount(fromToken common.Address, fromTokenAmount *big.Int, toToken common.Address) (*big.Int, error) { + return _FeeQuoter.Contract.ConvertTokenAmount(&_FeeQuoter.CallOpts, fromToken, fromTokenAmount, toToken) +} + +func (_FeeQuoter *FeeQuoterCaller) GetAllAuthorizedCallers(opts *bind.CallOpts) ([]common.Address, error) { + var out []interface{} + err := _FeeQuoter.contract.Call(opts, &out, "getAllAuthorizedCallers") + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +func (_FeeQuoter *FeeQuoterSession) GetAllAuthorizedCallers() ([]common.Address, error) { + return _FeeQuoter.Contract.GetAllAuthorizedCallers(&_FeeQuoter.CallOpts) +} + +func (_FeeQuoter *FeeQuoterCallerSession) GetAllAuthorizedCallers() ([]common.Address, error) { + return _FeeQuoter.Contract.GetAllAuthorizedCallers(&_FeeQuoter.CallOpts) +} + +func (_FeeQuoter *FeeQuoterCaller) GetDestChainConfig(opts *bind.CallOpts, destChainSelector uint64) (FeeQuoterDestChainConfig, error) { + var out []interface{} + err := _FeeQuoter.contract.Call(opts, &out, "getDestChainConfig", destChainSelector) + + if err != nil { + return *new(FeeQuoterDestChainConfig), err + } + + out0 := *abi.ConvertType(out[0], new(FeeQuoterDestChainConfig)).(*FeeQuoterDestChainConfig) + + return out0, err + +} + +func (_FeeQuoter *FeeQuoterSession) GetDestChainConfig(destChainSelector uint64) (FeeQuoterDestChainConfig, error) { + return _FeeQuoter.Contract.GetDestChainConfig(&_FeeQuoter.CallOpts, destChainSelector) +} + +func (_FeeQuoter *FeeQuoterCallerSession) GetDestChainConfig(destChainSelector uint64) (FeeQuoterDestChainConfig, error) { + return _FeeQuoter.Contract.GetDestChainConfig(&_FeeQuoter.CallOpts, destChainSelector) +} + +func (_FeeQuoter *FeeQuoterCaller) GetDestinationChainGasPrice(opts *bind.CallOpts, destChainSelector uint64) (InternalTimestampedPackedUint224, error) { + var out []interface{} + err := _FeeQuoter.contract.Call(opts, &out, "getDestinationChainGasPrice", destChainSelector) + + if err != nil { + return *new(InternalTimestampedPackedUint224), err + } + + out0 := *abi.ConvertType(out[0], new(InternalTimestampedPackedUint224)).(*InternalTimestampedPackedUint224) + + return out0, err + +} + +func (_FeeQuoter *FeeQuoterSession) GetDestinationChainGasPrice(destChainSelector uint64) (InternalTimestampedPackedUint224, error) { + return _FeeQuoter.Contract.GetDestinationChainGasPrice(&_FeeQuoter.CallOpts, destChainSelector) +} + +func (_FeeQuoter *FeeQuoterCallerSession) GetDestinationChainGasPrice(destChainSelector uint64) (InternalTimestampedPackedUint224, error) { + return _FeeQuoter.Contract.GetDestinationChainGasPrice(&_FeeQuoter.CallOpts, destChainSelector) +} + +func (_FeeQuoter *FeeQuoterCaller) GetFeeTokens(opts *bind.CallOpts) ([]common.Address, error) { + var out []interface{} + err := _FeeQuoter.contract.Call(opts, &out, "getFeeTokens") + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +func (_FeeQuoter *FeeQuoterSession) GetFeeTokens() ([]common.Address, error) { + return _FeeQuoter.Contract.GetFeeTokens(&_FeeQuoter.CallOpts) +} + +func (_FeeQuoter *FeeQuoterCallerSession) GetFeeTokens() ([]common.Address, error) { + return _FeeQuoter.Contract.GetFeeTokens(&_FeeQuoter.CallOpts) +} + +func (_FeeQuoter *FeeQuoterCaller) GetPremiumMultiplierWeiPerEth(opts *bind.CallOpts, token common.Address) (uint64, error) { + var out []interface{} + err := _FeeQuoter.contract.Call(opts, &out, "getPremiumMultiplierWeiPerEth", token) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +func (_FeeQuoter *FeeQuoterSession) GetPremiumMultiplierWeiPerEth(token common.Address) (uint64, error) { + return _FeeQuoter.Contract.GetPremiumMultiplierWeiPerEth(&_FeeQuoter.CallOpts, token) +} + +func (_FeeQuoter *FeeQuoterCallerSession) GetPremiumMultiplierWeiPerEth(token common.Address) (uint64, error) { + return _FeeQuoter.Contract.GetPremiumMultiplierWeiPerEth(&_FeeQuoter.CallOpts, token) +} + +func (_FeeQuoter *FeeQuoterCaller) GetStaticConfig(opts *bind.CallOpts) (FeeQuoterStaticConfig, error) { + var out []interface{} + err := _FeeQuoter.contract.Call(opts, &out, "getStaticConfig") + + if err != nil { + return *new(FeeQuoterStaticConfig), err + } + + out0 := *abi.ConvertType(out[0], new(FeeQuoterStaticConfig)).(*FeeQuoterStaticConfig) + + return out0, err + +} + +func (_FeeQuoter *FeeQuoterSession) GetStaticConfig() (FeeQuoterStaticConfig, error) { + return _FeeQuoter.Contract.GetStaticConfig(&_FeeQuoter.CallOpts) +} + +func (_FeeQuoter *FeeQuoterCallerSession) GetStaticConfig() (FeeQuoterStaticConfig, error) { + return _FeeQuoter.Contract.GetStaticConfig(&_FeeQuoter.CallOpts) +} + +func (_FeeQuoter *FeeQuoterCaller) GetTokenAndGasPrices(opts *bind.CallOpts, token common.Address, destChainSelector uint64) (GetTokenAndGasPrices, + + error) { + var out []interface{} + err := _FeeQuoter.contract.Call(opts, &out, "getTokenAndGasPrices", token, destChainSelector) + + outstruct := new(GetTokenAndGasPrices) + if err != nil { + return *outstruct, err + } + + outstruct.TokenPrice = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.GasPriceValue = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +func (_FeeQuoter *FeeQuoterSession) GetTokenAndGasPrices(token common.Address, destChainSelector uint64) (GetTokenAndGasPrices, + + error) { + return _FeeQuoter.Contract.GetTokenAndGasPrices(&_FeeQuoter.CallOpts, token, destChainSelector) +} + +func (_FeeQuoter *FeeQuoterCallerSession) GetTokenAndGasPrices(token common.Address, destChainSelector uint64) (GetTokenAndGasPrices, + + error) { + return _FeeQuoter.Contract.GetTokenAndGasPrices(&_FeeQuoter.CallOpts, token, destChainSelector) +} + +func (_FeeQuoter *FeeQuoterCaller) GetTokenPrice(opts *bind.CallOpts, token common.Address) (InternalTimestampedPackedUint224, error) { + var out []interface{} + err := _FeeQuoter.contract.Call(opts, &out, "getTokenPrice", token) + + if err != nil { + return *new(InternalTimestampedPackedUint224), err + } + + out0 := *abi.ConvertType(out[0], new(InternalTimestampedPackedUint224)).(*InternalTimestampedPackedUint224) + + return out0, err + +} + +func (_FeeQuoter *FeeQuoterSession) GetTokenPrice(token common.Address) (InternalTimestampedPackedUint224, error) { + return _FeeQuoter.Contract.GetTokenPrice(&_FeeQuoter.CallOpts, token) +} + +func (_FeeQuoter *FeeQuoterCallerSession) GetTokenPrice(token common.Address) (InternalTimestampedPackedUint224, error) { + return _FeeQuoter.Contract.GetTokenPrice(&_FeeQuoter.CallOpts, token) +} + +func (_FeeQuoter *FeeQuoterCaller) GetTokenPriceFeedConfig(opts *bind.CallOpts, token common.Address) (FeeQuoterTokenPriceFeedConfig, error) { + var out []interface{} + err := _FeeQuoter.contract.Call(opts, &out, "getTokenPriceFeedConfig", token) + + if err != nil { + return *new(FeeQuoterTokenPriceFeedConfig), err + } + + out0 := *abi.ConvertType(out[0], new(FeeQuoterTokenPriceFeedConfig)).(*FeeQuoterTokenPriceFeedConfig) + + return out0, err + +} + +func (_FeeQuoter *FeeQuoterSession) GetTokenPriceFeedConfig(token common.Address) (FeeQuoterTokenPriceFeedConfig, error) { + return _FeeQuoter.Contract.GetTokenPriceFeedConfig(&_FeeQuoter.CallOpts, token) +} + +func (_FeeQuoter *FeeQuoterCallerSession) GetTokenPriceFeedConfig(token common.Address) (FeeQuoterTokenPriceFeedConfig, error) { + return _FeeQuoter.Contract.GetTokenPriceFeedConfig(&_FeeQuoter.CallOpts, token) +} + +func (_FeeQuoter *FeeQuoterCaller) GetTokenPrices(opts *bind.CallOpts, tokens []common.Address) ([]InternalTimestampedPackedUint224, error) { + var out []interface{} + err := _FeeQuoter.contract.Call(opts, &out, "getTokenPrices", tokens) + + if err != nil { + return *new([]InternalTimestampedPackedUint224), err + } + + out0 := *abi.ConvertType(out[0], new([]InternalTimestampedPackedUint224)).(*[]InternalTimestampedPackedUint224) + + return out0, err + +} + +func (_FeeQuoter *FeeQuoterSession) GetTokenPrices(tokens []common.Address) ([]InternalTimestampedPackedUint224, error) { + return _FeeQuoter.Contract.GetTokenPrices(&_FeeQuoter.CallOpts, tokens) +} + +func (_FeeQuoter *FeeQuoterCallerSession) GetTokenPrices(tokens []common.Address) ([]InternalTimestampedPackedUint224, error) { + return _FeeQuoter.Contract.GetTokenPrices(&_FeeQuoter.CallOpts, tokens) +} + +func (_FeeQuoter *FeeQuoterCaller) GetTokenTransferFeeConfig(opts *bind.CallOpts, destChainSelector uint64, token common.Address) (FeeQuoterTokenTransferFeeConfig, error) { + var out []interface{} + err := _FeeQuoter.contract.Call(opts, &out, "getTokenTransferFeeConfig", destChainSelector, token) + + if err != nil { + return *new(FeeQuoterTokenTransferFeeConfig), err + } + + out0 := *abi.ConvertType(out[0], new(FeeQuoterTokenTransferFeeConfig)).(*FeeQuoterTokenTransferFeeConfig) + + return out0, err + +} + +func (_FeeQuoter *FeeQuoterSession) GetTokenTransferFeeConfig(destChainSelector uint64, token common.Address) (FeeQuoterTokenTransferFeeConfig, error) { + return _FeeQuoter.Contract.GetTokenTransferFeeConfig(&_FeeQuoter.CallOpts, destChainSelector, token) +} + +func (_FeeQuoter *FeeQuoterCallerSession) GetTokenTransferFeeConfig(destChainSelector uint64, token common.Address) (FeeQuoterTokenTransferFeeConfig, error) { + return _FeeQuoter.Contract.GetTokenTransferFeeConfig(&_FeeQuoter.CallOpts, destChainSelector, token) +} + +func (_FeeQuoter *FeeQuoterCaller) GetValidatedFee(opts *bind.CallOpts, destChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) { + var out []interface{} + err := _FeeQuoter.contract.Call(opts, &out, "getValidatedFee", destChainSelector, message) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_FeeQuoter *FeeQuoterSession) GetValidatedFee(destChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) { + return _FeeQuoter.Contract.GetValidatedFee(&_FeeQuoter.CallOpts, destChainSelector, message) +} + +func (_FeeQuoter *FeeQuoterCallerSession) GetValidatedFee(destChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) { + return _FeeQuoter.Contract.GetValidatedFee(&_FeeQuoter.CallOpts, destChainSelector, message) +} + +func (_FeeQuoter *FeeQuoterCaller) GetValidatedTokenPrice(opts *bind.CallOpts, token common.Address) (*big.Int, error) { + var out []interface{} + err := _FeeQuoter.contract.Call(opts, &out, "getValidatedTokenPrice", token) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_FeeQuoter *FeeQuoterSession) GetValidatedTokenPrice(token common.Address) (*big.Int, error) { + return _FeeQuoter.Contract.GetValidatedTokenPrice(&_FeeQuoter.CallOpts, token) +} + +func (_FeeQuoter *FeeQuoterCallerSession) GetValidatedTokenPrice(token common.Address) (*big.Int, error) { + return _FeeQuoter.Contract.GetValidatedTokenPrice(&_FeeQuoter.CallOpts, token) +} + +func (_FeeQuoter *FeeQuoterCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _FeeQuoter.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 + +} + +func (_FeeQuoter *FeeQuoterSession) Owner() (common.Address, error) { + return _FeeQuoter.Contract.Owner(&_FeeQuoter.CallOpts) +} + +func (_FeeQuoter *FeeQuoterCallerSession) Owner() (common.Address, error) { + return _FeeQuoter.Contract.Owner(&_FeeQuoter.CallOpts) +} + +func (_FeeQuoter *FeeQuoterCaller) ProcessMessageArgs(opts *bind.CallOpts, destChainSelector uint64, feeToken common.Address, feeTokenAmount *big.Int, extraArgs []byte, onRampTokenTransfers []InternalEVM2AnyTokenTransfer, sourceTokenAmounts []ClientEVMTokenAmount) (ProcessMessageArgs, + + error) { + var out []interface{} + err := _FeeQuoter.contract.Call(opts, &out, "processMessageArgs", destChainSelector, feeToken, feeTokenAmount, extraArgs, onRampTokenTransfers, sourceTokenAmounts) + + outstruct := new(ProcessMessageArgs) + if err != nil { + return *outstruct, err + } + + outstruct.MsgFeeJuels = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.IsOutOfOrderExecution = *abi.ConvertType(out[1], new(bool)).(*bool) + outstruct.ConvertedExtraArgs = *abi.ConvertType(out[2], new([]byte)).(*[]byte) + outstruct.DestExecDataPerToken = *abi.ConvertType(out[3], new([][]byte)).(*[][]byte) + + return *outstruct, err + +} + +func (_FeeQuoter *FeeQuoterSession) ProcessMessageArgs(destChainSelector uint64, feeToken common.Address, feeTokenAmount *big.Int, extraArgs []byte, onRampTokenTransfers []InternalEVM2AnyTokenTransfer, sourceTokenAmounts []ClientEVMTokenAmount) (ProcessMessageArgs, + + error) { + return _FeeQuoter.Contract.ProcessMessageArgs(&_FeeQuoter.CallOpts, destChainSelector, feeToken, feeTokenAmount, extraArgs, onRampTokenTransfers, sourceTokenAmounts) +} + +func (_FeeQuoter *FeeQuoterCallerSession) ProcessMessageArgs(destChainSelector uint64, feeToken common.Address, feeTokenAmount *big.Int, extraArgs []byte, onRampTokenTransfers []InternalEVM2AnyTokenTransfer, sourceTokenAmounts []ClientEVMTokenAmount) (ProcessMessageArgs, + + error) { + return _FeeQuoter.Contract.ProcessMessageArgs(&_FeeQuoter.CallOpts, destChainSelector, feeToken, feeTokenAmount, extraArgs, onRampTokenTransfers, sourceTokenAmounts) +} + +func (_FeeQuoter *FeeQuoterCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _FeeQuoter.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_FeeQuoter *FeeQuoterSession) TypeAndVersion() (string, error) { + return _FeeQuoter.Contract.TypeAndVersion(&_FeeQuoter.CallOpts) +} + +func (_FeeQuoter *FeeQuoterCallerSession) TypeAndVersion() (string, error) { + return _FeeQuoter.Contract.TypeAndVersion(&_FeeQuoter.CallOpts) +} + +func (_FeeQuoter *FeeQuoterTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _FeeQuoter.contract.Transact(opts, "acceptOwnership") +} + +func (_FeeQuoter *FeeQuoterSession) AcceptOwnership() (*types.Transaction, error) { + return _FeeQuoter.Contract.AcceptOwnership(&_FeeQuoter.TransactOpts) +} + +func (_FeeQuoter *FeeQuoterTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _FeeQuoter.Contract.AcceptOwnership(&_FeeQuoter.TransactOpts) +} + +func (_FeeQuoter *FeeQuoterTransactor) ApplyAuthorizedCallerUpdates(opts *bind.TransactOpts, authorizedCallerArgs AuthorizedCallersAuthorizedCallerArgs) (*types.Transaction, error) { + return _FeeQuoter.contract.Transact(opts, "applyAuthorizedCallerUpdates", authorizedCallerArgs) +} + +func (_FeeQuoter *FeeQuoterSession) ApplyAuthorizedCallerUpdates(authorizedCallerArgs AuthorizedCallersAuthorizedCallerArgs) (*types.Transaction, error) { + return _FeeQuoter.Contract.ApplyAuthorizedCallerUpdates(&_FeeQuoter.TransactOpts, authorizedCallerArgs) +} + +func (_FeeQuoter *FeeQuoterTransactorSession) ApplyAuthorizedCallerUpdates(authorizedCallerArgs AuthorizedCallersAuthorizedCallerArgs) (*types.Transaction, error) { + return _FeeQuoter.Contract.ApplyAuthorizedCallerUpdates(&_FeeQuoter.TransactOpts, authorizedCallerArgs) +} + +func (_FeeQuoter *FeeQuoterTransactor) ApplyDestChainConfigUpdates(opts *bind.TransactOpts, destChainConfigArgs []FeeQuoterDestChainConfigArgs) (*types.Transaction, error) { + return _FeeQuoter.contract.Transact(opts, "applyDestChainConfigUpdates", destChainConfigArgs) +} + +func (_FeeQuoter *FeeQuoterSession) ApplyDestChainConfigUpdates(destChainConfigArgs []FeeQuoterDestChainConfigArgs) (*types.Transaction, error) { + return _FeeQuoter.Contract.ApplyDestChainConfigUpdates(&_FeeQuoter.TransactOpts, destChainConfigArgs) +} + +func (_FeeQuoter *FeeQuoterTransactorSession) ApplyDestChainConfigUpdates(destChainConfigArgs []FeeQuoterDestChainConfigArgs) (*types.Transaction, error) { + return _FeeQuoter.Contract.ApplyDestChainConfigUpdates(&_FeeQuoter.TransactOpts, destChainConfigArgs) +} + +func (_FeeQuoter *FeeQuoterTransactor) ApplyFeeTokensUpdates(opts *bind.TransactOpts, feeTokensToRemove []common.Address, feeTokensToAdd []common.Address) (*types.Transaction, error) { + return _FeeQuoter.contract.Transact(opts, "applyFeeTokensUpdates", feeTokensToRemove, feeTokensToAdd) +} + +func (_FeeQuoter *FeeQuoterSession) ApplyFeeTokensUpdates(feeTokensToRemove []common.Address, feeTokensToAdd []common.Address) (*types.Transaction, error) { + return _FeeQuoter.Contract.ApplyFeeTokensUpdates(&_FeeQuoter.TransactOpts, feeTokensToRemove, feeTokensToAdd) +} + +func (_FeeQuoter *FeeQuoterTransactorSession) ApplyFeeTokensUpdates(feeTokensToRemove []common.Address, feeTokensToAdd []common.Address) (*types.Transaction, error) { + return _FeeQuoter.Contract.ApplyFeeTokensUpdates(&_FeeQuoter.TransactOpts, feeTokensToRemove, feeTokensToAdd) +} + +func (_FeeQuoter *FeeQuoterTransactor) ApplyPremiumMultiplierWeiPerEthUpdates(opts *bind.TransactOpts, premiumMultiplierWeiPerEthArgs []FeeQuoterPremiumMultiplierWeiPerEthArgs) (*types.Transaction, error) { + return _FeeQuoter.contract.Transact(opts, "applyPremiumMultiplierWeiPerEthUpdates", premiumMultiplierWeiPerEthArgs) +} + +func (_FeeQuoter *FeeQuoterSession) ApplyPremiumMultiplierWeiPerEthUpdates(premiumMultiplierWeiPerEthArgs []FeeQuoterPremiumMultiplierWeiPerEthArgs) (*types.Transaction, error) { + return _FeeQuoter.Contract.ApplyPremiumMultiplierWeiPerEthUpdates(&_FeeQuoter.TransactOpts, premiumMultiplierWeiPerEthArgs) +} + +func (_FeeQuoter *FeeQuoterTransactorSession) ApplyPremiumMultiplierWeiPerEthUpdates(premiumMultiplierWeiPerEthArgs []FeeQuoterPremiumMultiplierWeiPerEthArgs) (*types.Transaction, error) { + return _FeeQuoter.Contract.ApplyPremiumMultiplierWeiPerEthUpdates(&_FeeQuoter.TransactOpts, premiumMultiplierWeiPerEthArgs) +} + +func (_FeeQuoter *FeeQuoterTransactor) ApplyTokenTransferFeeConfigUpdates(opts *bind.TransactOpts, tokenTransferFeeConfigArgs []FeeQuoterTokenTransferFeeConfigArgs, tokensToUseDefaultFeeConfigs []FeeQuoterTokenTransferFeeConfigRemoveArgs) (*types.Transaction, error) { + return _FeeQuoter.contract.Transact(opts, "applyTokenTransferFeeConfigUpdates", tokenTransferFeeConfigArgs, tokensToUseDefaultFeeConfigs) +} + +func (_FeeQuoter *FeeQuoterSession) ApplyTokenTransferFeeConfigUpdates(tokenTransferFeeConfigArgs []FeeQuoterTokenTransferFeeConfigArgs, tokensToUseDefaultFeeConfigs []FeeQuoterTokenTransferFeeConfigRemoveArgs) (*types.Transaction, error) { + return _FeeQuoter.Contract.ApplyTokenTransferFeeConfigUpdates(&_FeeQuoter.TransactOpts, tokenTransferFeeConfigArgs, tokensToUseDefaultFeeConfigs) +} + +func (_FeeQuoter *FeeQuoterTransactorSession) ApplyTokenTransferFeeConfigUpdates(tokenTransferFeeConfigArgs []FeeQuoterTokenTransferFeeConfigArgs, tokensToUseDefaultFeeConfigs []FeeQuoterTokenTransferFeeConfigRemoveArgs) (*types.Transaction, error) { + return _FeeQuoter.Contract.ApplyTokenTransferFeeConfigUpdates(&_FeeQuoter.TransactOpts, tokenTransferFeeConfigArgs, tokensToUseDefaultFeeConfigs) +} + +func (_FeeQuoter *FeeQuoterTransactor) OnReport(opts *bind.TransactOpts, metadata []byte, report []byte) (*types.Transaction, error) { + return _FeeQuoter.contract.Transact(opts, "onReport", metadata, report) +} + +func (_FeeQuoter *FeeQuoterSession) OnReport(metadata []byte, report []byte) (*types.Transaction, error) { + return _FeeQuoter.Contract.OnReport(&_FeeQuoter.TransactOpts, metadata, report) +} + +func (_FeeQuoter *FeeQuoterTransactorSession) OnReport(metadata []byte, report []byte) (*types.Transaction, error) { + return _FeeQuoter.Contract.OnReport(&_FeeQuoter.TransactOpts, metadata, report) +} + +func (_FeeQuoter *FeeQuoterTransactor) SetReportPermissions(opts *bind.TransactOpts, permissions []KeystoneFeedsPermissionHandlerPermission) (*types.Transaction, error) { + return _FeeQuoter.contract.Transact(opts, "setReportPermissions", permissions) +} + +func (_FeeQuoter *FeeQuoterSession) SetReportPermissions(permissions []KeystoneFeedsPermissionHandlerPermission) (*types.Transaction, error) { + return _FeeQuoter.Contract.SetReportPermissions(&_FeeQuoter.TransactOpts, permissions) +} + +func (_FeeQuoter *FeeQuoterTransactorSession) SetReportPermissions(permissions []KeystoneFeedsPermissionHandlerPermission) (*types.Transaction, error) { + return _FeeQuoter.Contract.SetReportPermissions(&_FeeQuoter.TransactOpts, permissions) +} + +func (_FeeQuoter *FeeQuoterTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _FeeQuoter.contract.Transact(opts, "transferOwnership", to) +} + +func (_FeeQuoter *FeeQuoterSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _FeeQuoter.Contract.TransferOwnership(&_FeeQuoter.TransactOpts, to) +} + +func (_FeeQuoter *FeeQuoterTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _FeeQuoter.Contract.TransferOwnership(&_FeeQuoter.TransactOpts, to) +} + +func (_FeeQuoter *FeeQuoterTransactor) UpdatePrices(opts *bind.TransactOpts, priceUpdates InternalPriceUpdates) (*types.Transaction, error) { + return _FeeQuoter.contract.Transact(opts, "updatePrices", priceUpdates) +} + +func (_FeeQuoter *FeeQuoterSession) UpdatePrices(priceUpdates InternalPriceUpdates) (*types.Transaction, error) { + return _FeeQuoter.Contract.UpdatePrices(&_FeeQuoter.TransactOpts, priceUpdates) +} + +func (_FeeQuoter *FeeQuoterTransactorSession) UpdatePrices(priceUpdates InternalPriceUpdates) (*types.Transaction, error) { + return _FeeQuoter.Contract.UpdatePrices(&_FeeQuoter.TransactOpts, priceUpdates) +} + +func (_FeeQuoter *FeeQuoterTransactor) UpdateTokenPriceFeeds(opts *bind.TransactOpts, tokenPriceFeedUpdates []FeeQuoterTokenPriceFeedUpdate) (*types.Transaction, error) { + return _FeeQuoter.contract.Transact(opts, "updateTokenPriceFeeds", tokenPriceFeedUpdates) +} + +func (_FeeQuoter *FeeQuoterSession) UpdateTokenPriceFeeds(tokenPriceFeedUpdates []FeeQuoterTokenPriceFeedUpdate) (*types.Transaction, error) { + return _FeeQuoter.Contract.UpdateTokenPriceFeeds(&_FeeQuoter.TransactOpts, tokenPriceFeedUpdates) +} + +func (_FeeQuoter *FeeQuoterTransactorSession) UpdateTokenPriceFeeds(tokenPriceFeedUpdates []FeeQuoterTokenPriceFeedUpdate) (*types.Transaction, error) { + return _FeeQuoter.Contract.UpdateTokenPriceFeeds(&_FeeQuoter.TransactOpts, tokenPriceFeedUpdates) +} + +type FeeQuoterAuthorizedCallerAddedIterator struct { + Event *FeeQuoterAuthorizedCallerAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *FeeQuoterAuthorizedCallerAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(FeeQuoterAuthorizedCallerAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(FeeQuoterAuthorizedCallerAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *FeeQuoterAuthorizedCallerAddedIterator) Error() error { + return it.fail +} + +func (it *FeeQuoterAuthorizedCallerAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type FeeQuoterAuthorizedCallerAdded struct { + Caller common.Address + Raw types.Log +} + +func (_FeeQuoter *FeeQuoterFilterer) FilterAuthorizedCallerAdded(opts *bind.FilterOpts) (*FeeQuoterAuthorizedCallerAddedIterator, error) { + + logs, sub, err := _FeeQuoter.contract.FilterLogs(opts, "AuthorizedCallerAdded") + if err != nil { + return nil, err + } + return &FeeQuoterAuthorizedCallerAddedIterator{contract: _FeeQuoter.contract, event: "AuthorizedCallerAdded", logs: logs, sub: sub}, nil +} + +func (_FeeQuoter *FeeQuoterFilterer) WatchAuthorizedCallerAdded(opts *bind.WatchOpts, sink chan<- *FeeQuoterAuthorizedCallerAdded) (event.Subscription, error) { + + logs, sub, err := _FeeQuoter.contract.WatchLogs(opts, "AuthorizedCallerAdded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(FeeQuoterAuthorizedCallerAdded) + if err := _FeeQuoter.contract.UnpackLog(event, "AuthorizedCallerAdded", 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 +} + +func (_FeeQuoter *FeeQuoterFilterer) ParseAuthorizedCallerAdded(log types.Log) (*FeeQuoterAuthorizedCallerAdded, error) { + event := new(FeeQuoterAuthorizedCallerAdded) + if err := _FeeQuoter.contract.UnpackLog(event, "AuthorizedCallerAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type FeeQuoterAuthorizedCallerRemovedIterator struct { + Event *FeeQuoterAuthorizedCallerRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *FeeQuoterAuthorizedCallerRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(FeeQuoterAuthorizedCallerRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(FeeQuoterAuthorizedCallerRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *FeeQuoterAuthorizedCallerRemovedIterator) Error() error { + return it.fail +} + +func (it *FeeQuoterAuthorizedCallerRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type FeeQuoterAuthorizedCallerRemoved struct { + Caller common.Address + Raw types.Log +} + +func (_FeeQuoter *FeeQuoterFilterer) FilterAuthorizedCallerRemoved(opts *bind.FilterOpts) (*FeeQuoterAuthorizedCallerRemovedIterator, error) { + + logs, sub, err := _FeeQuoter.contract.FilterLogs(opts, "AuthorizedCallerRemoved") + if err != nil { + return nil, err + } + return &FeeQuoterAuthorizedCallerRemovedIterator{contract: _FeeQuoter.contract, event: "AuthorizedCallerRemoved", logs: logs, sub: sub}, nil +} + +func (_FeeQuoter *FeeQuoterFilterer) WatchAuthorizedCallerRemoved(opts *bind.WatchOpts, sink chan<- *FeeQuoterAuthorizedCallerRemoved) (event.Subscription, error) { + + logs, sub, err := _FeeQuoter.contract.WatchLogs(opts, "AuthorizedCallerRemoved") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(FeeQuoterAuthorizedCallerRemoved) + if err := _FeeQuoter.contract.UnpackLog(event, "AuthorizedCallerRemoved", 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 +} + +func (_FeeQuoter *FeeQuoterFilterer) ParseAuthorizedCallerRemoved(log types.Log) (*FeeQuoterAuthorizedCallerRemoved, error) { + event := new(FeeQuoterAuthorizedCallerRemoved) + if err := _FeeQuoter.contract.UnpackLog(event, "AuthorizedCallerRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type FeeQuoterDestChainAddedIterator struct { + Event *FeeQuoterDestChainAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *FeeQuoterDestChainAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(FeeQuoterDestChainAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(FeeQuoterDestChainAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *FeeQuoterDestChainAddedIterator) Error() error { + return it.fail +} + +func (it *FeeQuoterDestChainAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type FeeQuoterDestChainAdded struct { + DestChainSelector uint64 + DestChainConfig FeeQuoterDestChainConfig + Raw types.Log +} + +func (_FeeQuoter *FeeQuoterFilterer) FilterDestChainAdded(opts *bind.FilterOpts, destChainSelector []uint64) (*FeeQuoterDestChainAddedIterator, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + + logs, sub, err := _FeeQuoter.contract.FilterLogs(opts, "DestChainAdded", destChainSelectorRule) + if err != nil { + return nil, err + } + return &FeeQuoterDestChainAddedIterator{contract: _FeeQuoter.contract, event: "DestChainAdded", logs: logs, sub: sub}, nil +} + +func (_FeeQuoter *FeeQuoterFilterer) WatchDestChainAdded(opts *bind.WatchOpts, sink chan<- *FeeQuoterDestChainAdded, destChainSelector []uint64) (event.Subscription, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + + logs, sub, err := _FeeQuoter.contract.WatchLogs(opts, "DestChainAdded", destChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(FeeQuoterDestChainAdded) + if err := _FeeQuoter.contract.UnpackLog(event, "DestChainAdded", 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 +} + +func (_FeeQuoter *FeeQuoterFilterer) ParseDestChainAdded(log types.Log) (*FeeQuoterDestChainAdded, error) { + event := new(FeeQuoterDestChainAdded) + if err := _FeeQuoter.contract.UnpackLog(event, "DestChainAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type FeeQuoterDestChainConfigUpdatedIterator struct { + Event *FeeQuoterDestChainConfigUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *FeeQuoterDestChainConfigUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(FeeQuoterDestChainConfigUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(FeeQuoterDestChainConfigUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *FeeQuoterDestChainConfigUpdatedIterator) Error() error { + return it.fail +} + +func (it *FeeQuoterDestChainConfigUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type FeeQuoterDestChainConfigUpdated struct { + DestChainSelector uint64 + DestChainConfig FeeQuoterDestChainConfig + Raw types.Log +} + +func (_FeeQuoter *FeeQuoterFilterer) FilterDestChainConfigUpdated(opts *bind.FilterOpts, destChainSelector []uint64) (*FeeQuoterDestChainConfigUpdatedIterator, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + + logs, sub, err := _FeeQuoter.contract.FilterLogs(opts, "DestChainConfigUpdated", destChainSelectorRule) + if err != nil { + return nil, err + } + return &FeeQuoterDestChainConfigUpdatedIterator{contract: _FeeQuoter.contract, event: "DestChainConfigUpdated", logs: logs, sub: sub}, nil +} + +func (_FeeQuoter *FeeQuoterFilterer) WatchDestChainConfigUpdated(opts *bind.WatchOpts, sink chan<- *FeeQuoterDestChainConfigUpdated, destChainSelector []uint64) (event.Subscription, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + + logs, sub, err := _FeeQuoter.contract.WatchLogs(opts, "DestChainConfigUpdated", destChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(FeeQuoterDestChainConfigUpdated) + if err := _FeeQuoter.contract.UnpackLog(event, "DestChainConfigUpdated", 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 +} + +func (_FeeQuoter *FeeQuoterFilterer) ParseDestChainConfigUpdated(log types.Log) (*FeeQuoterDestChainConfigUpdated, error) { + event := new(FeeQuoterDestChainConfigUpdated) + if err := _FeeQuoter.contract.UnpackLog(event, "DestChainConfigUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type FeeQuoterFeeTokenAddedIterator struct { + Event *FeeQuoterFeeTokenAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *FeeQuoterFeeTokenAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(FeeQuoterFeeTokenAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(FeeQuoterFeeTokenAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *FeeQuoterFeeTokenAddedIterator) Error() error { + return it.fail +} + +func (it *FeeQuoterFeeTokenAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type FeeQuoterFeeTokenAdded struct { + FeeToken common.Address + Raw types.Log +} + +func (_FeeQuoter *FeeQuoterFilterer) FilterFeeTokenAdded(opts *bind.FilterOpts, feeToken []common.Address) (*FeeQuoterFeeTokenAddedIterator, error) { + + var feeTokenRule []interface{} + for _, feeTokenItem := range feeToken { + feeTokenRule = append(feeTokenRule, feeTokenItem) + } + + logs, sub, err := _FeeQuoter.contract.FilterLogs(opts, "FeeTokenAdded", feeTokenRule) + if err != nil { + return nil, err + } + return &FeeQuoterFeeTokenAddedIterator{contract: _FeeQuoter.contract, event: "FeeTokenAdded", logs: logs, sub: sub}, nil +} + +func (_FeeQuoter *FeeQuoterFilterer) WatchFeeTokenAdded(opts *bind.WatchOpts, sink chan<- *FeeQuoterFeeTokenAdded, feeToken []common.Address) (event.Subscription, error) { + + var feeTokenRule []interface{} + for _, feeTokenItem := range feeToken { + feeTokenRule = append(feeTokenRule, feeTokenItem) + } + + logs, sub, err := _FeeQuoter.contract.WatchLogs(opts, "FeeTokenAdded", feeTokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(FeeQuoterFeeTokenAdded) + if err := _FeeQuoter.contract.UnpackLog(event, "FeeTokenAdded", 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 +} + +func (_FeeQuoter *FeeQuoterFilterer) ParseFeeTokenAdded(log types.Log) (*FeeQuoterFeeTokenAdded, error) { + event := new(FeeQuoterFeeTokenAdded) + if err := _FeeQuoter.contract.UnpackLog(event, "FeeTokenAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type FeeQuoterFeeTokenRemovedIterator struct { + Event *FeeQuoterFeeTokenRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *FeeQuoterFeeTokenRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(FeeQuoterFeeTokenRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(FeeQuoterFeeTokenRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *FeeQuoterFeeTokenRemovedIterator) Error() error { + return it.fail +} + +func (it *FeeQuoterFeeTokenRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type FeeQuoterFeeTokenRemoved struct { + FeeToken common.Address + Raw types.Log +} + +func (_FeeQuoter *FeeQuoterFilterer) FilterFeeTokenRemoved(opts *bind.FilterOpts, feeToken []common.Address) (*FeeQuoterFeeTokenRemovedIterator, error) { + + var feeTokenRule []interface{} + for _, feeTokenItem := range feeToken { + feeTokenRule = append(feeTokenRule, feeTokenItem) + } + + logs, sub, err := _FeeQuoter.contract.FilterLogs(opts, "FeeTokenRemoved", feeTokenRule) + if err != nil { + return nil, err + } + return &FeeQuoterFeeTokenRemovedIterator{contract: _FeeQuoter.contract, event: "FeeTokenRemoved", logs: logs, sub: sub}, nil +} + +func (_FeeQuoter *FeeQuoterFilterer) WatchFeeTokenRemoved(opts *bind.WatchOpts, sink chan<- *FeeQuoterFeeTokenRemoved, feeToken []common.Address) (event.Subscription, error) { + + var feeTokenRule []interface{} + for _, feeTokenItem := range feeToken { + feeTokenRule = append(feeTokenRule, feeTokenItem) + } + + logs, sub, err := _FeeQuoter.contract.WatchLogs(opts, "FeeTokenRemoved", feeTokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(FeeQuoterFeeTokenRemoved) + if err := _FeeQuoter.contract.UnpackLog(event, "FeeTokenRemoved", 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 +} + +func (_FeeQuoter *FeeQuoterFilterer) ParseFeeTokenRemoved(log types.Log) (*FeeQuoterFeeTokenRemoved, error) { + event := new(FeeQuoterFeeTokenRemoved) + if err := _FeeQuoter.contract.UnpackLog(event, "FeeTokenRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type FeeQuoterOwnershipTransferRequestedIterator struct { + Event *FeeQuoterOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *FeeQuoterOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(FeeQuoterOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(FeeQuoterOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *FeeQuoterOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *FeeQuoterOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type FeeQuoterOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_FeeQuoter *FeeQuoterFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*FeeQuoterOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _FeeQuoter.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &FeeQuoterOwnershipTransferRequestedIterator{contract: _FeeQuoter.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_FeeQuoter *FeeQuoterFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *FeeQuoterOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _FeeQuoter.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(FeeQuoterOwnershipTransferRequested) + if err := _FeeQuoter.contract.UnpackLog(event, "OwnershipTransferRequested", 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 +} + +func (_FeeQuoter *FeeQuoterFilterer) ParseOwnershipTransferRequested(log types.Log) (*FeeQuoterOwnershipTransferRequested, error) { + event := new(FeeQuoterOwnershipTransferRequested) + if err := _FeeQuoter.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type FeeQuoterOwnershipTransferredIterator struct { + Event *FeeQuoterOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *FeeQuoterOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(FeeQuoterOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(FeeQuoterOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *FeeQuoterOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *FeeQuoterOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type FeeQuoterOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_FeeQuoter *FeeQuoterFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*FeeQuoterOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _FeeQuoter.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &FeeQuoterOwnershipTransferredIterator{contract: _FeeQuoter.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_FeeQuoter *FeeQuoterFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *FeeQuoterOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _FeeQuoter.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(FeeQuoterOwnershipTransferred) + if err := _FeeQuoter.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 +} + +func (_FeeQuoter *FeeQuoterFilterer) ParseOwnershipTransferred(log types.Log) (*FeeQuoterOwnershipTransferred, error) { + event := new(FeeQuoterOwnershipTransferred) + if err := _FeeQuoter.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type FeeQuoterPremiumMultiplierWeiPerEthUpdatedIterator struct { + Event *FeeQuoterPremiumMultiplierWeiPerEthUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *FeeQuoterPremiumMultiplierWeiPerEthUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(FeeQuoterPremiumMultiplierWeiPerEthUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(FeeQuoterPremiumMultiplierWeiPerEthUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *FeeQuoterPremiumMultiplierWeiPerEthUpdatedIterator) Error() error { + return it.fail +} + +func (it *FeeQuoterPremiumMultiplierWeiPerEthUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type FeeQuoterPremiumMultiplierWeiPerEthUpdated struct { + Token common.Address + PremiumMultiplierWeiPerEth uint64 + Raw types.Log +} + +func (_FeeQuoter *FeeQuoterFilterer) FilterPremiumMultiplierWeiPerEthUpdated(opts *bind.FilterOpts, token []common.Address) (*FeeQuoterPremiumMultiplierWeiPerEthUpdatedIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _FeeQuoter.contract.FilterLogs(opts, "PremiumMultiplierWeiPerEthUpdated", tokenRule) + if err != nil { + return nil, err + } + return &FeeQuoterPremiumMultiplierWeiPerEthUpdatedIterator{contract: _FeeQuoter.contract, event: "PremiumMultiplierWeiPerEthUpdated", logs: logs, sub: sub}, nil +} + +func (_FeeQuoter *FeeQuoterFilterer) WatchPremiumMultiplierWeiPerEthUpdated(opts *bind.WatchOpts, sink chan<- *FeeQuoterPremiumMultiplierWeiPerEthUpdated, token []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _FeeQuoter.contract.WatchLogs(opts, "PremiumMultiplierWeiPerEthUpdated", tokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(FeeQuoterPremiumMultiplierWeiPerEthUpdated) + if err := _FeeQuoter.contract.UnpackLog(event, "PremiumMultiplierWeiPerEthUpdated", 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 +} + +func (_FeeQuoter *FeeQuoterFilterer) ParsePremiumMultiplierWeiPerEthUpdated(log types.Log) (*FeeQuoterPremiumMultiplierWeiPerEthUpdated, error) { + event := new(FeeQuoterPremiumMultiplierWeiPerEthUpdated) + if err := _FeeQuoter.contract.UnpackLog(event, "PremiumMultiplierWeiPerEthUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type FeeQuoterPriceFeedPerTokenUpdatedIterator struct { + Event *FeeQuoterPriceFeedPerTokenUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *FeeQuoterPriceFeedPerTokenUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(FeeQuoterPriceFeedPerTokenUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(FeeQuoterPriceFeedPerTokenUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *FeeQuoterPriceFeedPerTokenUpdatedIterator) Error() error { + return it.fail +} + +func (it *FeeQuoterPriceFeedPerTokenUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type FeeQuoterPriceFeedPerTokenUpdated struct { + Token common.Address + PriceFeedConfig FeeQuoterTokenPriceFeedConfig + Raw types.Log +} + +func (_FeeQuoter *FeeQuoterFilterer) FilterPriceFeedPerTokenUpdated(opts *bind.FilterOpts, token []common.Address) (*FeeQuoterPriceFeedPerTokenUpdatedIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _FeeQuoter.contract.FilterLogs(opts, "PriceFeedPerTokenUpdated", tokenRule) + if err != nil { + return nil, err + } + return &FeeQuoterPriceFeedPerTokenUpdatedIterator{contract: _FeeQuoter.contract, event: "PriceFeedPerTokenUpdated", logs: logs, sub: sub}, nil +} + +func (_FeeQuoter *FeeQuoterFilterer) WatchPriceFeedPerTokenUpdated(opts *bind.WatchOpts, sink chan<- *FeeQuoterPriceFeedPerTokenUpdated, token []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _FeeQuoter.contract.WatchLogs(opts, "PriceFeedPerTokenUpdated", tokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(FeeQuoterPriceFeedPerTokenUpdated) + if err := _FeeQuoter.contract.UnpackLog(event, "PriceFeedPerTokenUpdated", 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 +} + +func (_FeeQuoter *FeeQuoterFilterer) ParsePriceFeedPerTokenUpdated(log types.Log) (*FeeQuoterPriceFeedPerTokenUpdated, error) { + event := new(FeeQuoterPriceFeedPerTokenUpdated) + if err := _FeeQuoter.contract.UnpackLog(event, "PriceFeedPerTokenUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type FeeQuoterReportPermissionSetIterator struct { + Event *FeeQuoterReportPermissionSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *FeeQuoterReportPermissionSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(FeeQuoterReportPermissionSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(FeeQuoterReportPermissionSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *FeeQuoterReportPermissionSetIterator) Error() error { + return it.fail +} + +func (it *FeeQuoterReportPermissionSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type FeeQuoterReportPermissionSet struct { + ReportId [32]byte + Permission KeystoneFeedsPermissionHandlerPermission + Raw types.Log +} + +func (_FeeQuoter *FeeQuoterFilterer) FilterReportPermissionSet(opts *bind.FilterOpts, reportId [][32]byte) (*FeeQuoterReportPermissionSetIterator, error) { + + var reportIdRule []interface{} + for _, reportIdItem := range reportId { + reportIdRule = append(reportIdRule, reportIdItem) + } + + logs, sub, err := _FeeQuoter.contract.FilterLogs(opts, "ReportPermissionSet", reportIdRule) + if err != nil { + return nil, err + } + return &FeeQuoterReportPermissionSetIterator{contract: _FeeQuoter.contract, event: "ReportPermissionSet", logs: logs, sub: sub}, nil +} + +func (_FeeQuoter *FeeQuoterFilterer) WatchReportPermissionSet(opts *bind.WatchOpts, sink chan<- *FeeQuoterReportPermissionSet, reportId [][32]byte) (event.Subscription, error) { + + var reportIdRule []interface{} + for _, reportIdItem := range reportId { + reportIdRule = append(reportIdRule, reportIdItem) + } + + logs, sub, err := _FeeQuoter.contract.WatchLogs(opts, "ReportPermissionSet", reportIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(FeeQuoterReportPermissionSet) + if err := _FeeQuoter.contract.UnpackLog(event, "ReportPermissionSet", 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 +} + +func (_FeeQuoter *FeeQuoterFilterer) ParseReportPermissionSet(log types.Log) (*FeeQuoterReportPermissionSet, error) { + event := new(FeeQuoterReportPermissionSet) + if err := _FeeQuoter.contract.UnpackLog(event, "ReportPermissionSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type FeeQuoterTokenTransferFeeConfigDeletedIterator struct { + Event *FeeQuoterTokenTransferFeeConfigDeleted + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *FeeQuoterTokenTransferFeeConfigDeletedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(FeeQuoterTokenTransferFeeConfigDeleted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(FeeQuoterTokenTransferFeeConfigDeleted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *FeeQuoterTokenTransferFeeConfigDeletedIterator) Error() error { + return it.fail +} + +func (it *FeeQuoterTokenTransferFeeConfigDeletedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type FeeQuoterTokenTransferFeeConfigDeleted struct { + DestChainSelector uint64 + Token common.Address + Raw types.Log +} + +func (_FeeQuoter *FeeQuoterFilterer) FilterTokenTransferFeeConfigDeleted(opts *bind.FilterOpts, destChainSelector []uint64, token []common.Address) (*FeeQuoterTokenTransferFeeConfigDeletedIterator, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _FeeQuoter.contract.FilterLogs(opts, "TokenTransferFeeConfigDeleted", destChainSelectorRule, tokenRule) + if err != nil { + return nil, err + } + return &FeeQuoterTokenTransferFeeConfigDeletedIterator{contract: _FeeQuoter.contract, event: "TokenTransferFeeConfigDeleted", logs: logs, sub: sub}, nil +} + +func (_FeeQuoter *FeeQuoterFilterer) WatchTokenTransferFeeConfigDeleted(opts *bind.WatchOpts, sink chan<- *FeeQuoterTokenTransferFeeConfigDeleted, destChainSelector []uint64, token []common.Address) (event.Subscription, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _FeeQuoter.contract.WatchLogs(opts, "TokenTransferFeeConfigDeleted", destChainSelectorRule, tokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(FeeQuoterTokenTransferFeeConfigDeleted) + if err := _FeeQuoter.contract.UnpackLog(event, "TokenTransferFeeConfigDeleted", 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 +} + +func (_FeeQuoter *FeeQuoterFilterer) ParseTokenTransferFeeConfigDeleted(log types.Log) (*FeeQuoterTokenTransferFeeConfigDeleted, error) { + event := new(FeeQuoterTokenTransferFeeConfigDeleted) + if err := _FeeQuoter.contract.UnpackLog(event, "TokenTransferFeeConfigDeleted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type FeeQuoterTokenTransferFeeConfigUpdatedIterator struct { + Event *FeeQuoterTokenTransferFeeConfigUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *FeeQuoterTokenTransferFeeConfigUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(FeeQuoterTokenTransferFeeConfigUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(FeeQuoterTokenTransferFeeConfigUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *FeeQuoterTokenTransferFeeConfigUpdatedIterator) Error() error { + return it.fail +} + +func (it *FeeQuoterTokenTransferFeeConfigUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type FeeQuoterTokenTransferFeeConfigUpdated struct { + DestChainSelector uint64 + Token common.Address + TokenTransferFeeConfig FeeQuoterTokenTransferFeeConfig + Raw types.Log +} + +func (_FeeQuoter *FeeQuoterFilterer) FilterTokenTransferFeeConfigUpdated(opts *bind.FilterOpts, destChainSelector []uint64, token []common.Address) (*FeeQuoterTokenTransferFeeConfigUpdatedIterator, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _FeeQuoter.contract.FilterLogs(opts, "TokenTransferFeeConfigUpdated", destChainSelectorRule, tokenRule) + if err != nil { + return nil, err + } + return &FeeQuoterTokenTransferFeeConfigUpdatedIterator{contract: _FeeQuoter.contract, event: "TokenTransferFeeConfigUpdated", logs: logs, sub: sub}, nil +} + +func (_FeeQuoter *FeeQuoterFilterer) WatchTokenTransferFeeConfigUpdated(opts *bind.WatchOpts, sink chan<- *FeeQuoterTokenTransferFeeConfigUpdated, destChainSelector []uint64, token []common.Address) (event.Subscription, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _FeeQuoter.contract.WatchLogs(opts, "TokenTransferFeeConfigUpdated", destChainSelectorRule, tokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(FeeQuoterTokenTransferFeeConfigUpdated) + if err := _FeeQuoter.contract.UnpackLog(event, "TokenTransferFeeConfigUpdated", 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 +} + +func (_FeeQuoter *FeeQuoterFilterer) ParseTokenTransferFeeConfigUpdated(log types.Log) (*FeeQuoterTokenTransferFeeConfigUpdated, error) { + event := new(FeeQuoterTokenTransferFeeConfigUpdated) + if err := _FeeQuoter.contract.UnpackLog(event, "TokenTransferFeeConfigUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type FeeQuoterUsdPerTokenUpdatedIterator struct { + Event *FeeQuoterUsdPerTokenUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *FeeQuoterUsdPerTokenUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(FeeQuoterUsdPerTokenUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(FeeQuoterUsdPerTokenUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *FeeQuoterUsdPerTokenUpdatedIterator) Error() error { + return it.fail +} + +func (it *FeeQuoterUsdPerTokenUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type FeeQuoterUsdPerTokenUpdated struct { + Token common.Address + Value *big.Int + Timestamp *big.Int + Raw types.Log +} + +func (_FeeQuoter *FeeQuoterFilterer) FilterUsdPerTokenUpdated(opts *bind.FilterOpts, token []common.Address) (*FeeQuoterUsdPerTokenUpdatedIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _FeeQuoter.contract.FilterLogs(opts, "UsdPerTokenUpdated", tokenRule) + if err != nil { + return nil, err + } + return &FeeQuoterUsdPerTokenUpdatedIterator{contract: _FeeQuoter.contract, event: "UsdPerTokenUpdated", logs: logs, sub: sub}, nil +} + +func (_FeeQuoter *FeeQuoterFilterer) WatchUsdPerTokenUpdated(opts *bind.WatchOpts, sink chan<- *FeeQuoterUsdPerTokenUpdated, token []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + + logs, sub, err := _FeeQuoter.contract.WatchLogs(opts, "UsdPerTokenUpdated", tokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(FeeQuoterUsdPerTokenUpdated) + if err := _FeeQuoter.contract.UnpackLog(event, "UsdPerTokenUpdated", 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 +} + +func (_FeeQuoter *FeeQuoterFilterer) ParseUsdPerTokenUpdated(log types.Log) (*FeeQuoterUsdPerTokenUpdated, error) { + event := new(FeeQuoterUsdPerTokenUpdated) + if err := _FeeQuoter.contract.UnpackLog(event, "UsdPerTokenUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type FeeQuoterUsdPerUnitGasUpdatedIterator struct { + Event *FeeQuoterUsdPerUnitGasUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *FeeQuoterUsdPerUnitGasUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(FeeQuoterUsdPerUnitGasUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(FeeQuoterUsdPerUnitGasUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *FeeQuoterUsdPerUnitGasUpdatedIterator) Error() error { + return it.fail +} + +func (it *FeeQuoterUsdPerUnitGasUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type FeeQuoterUsdPerUnitGasUpdated struct { + DestChain uint64 + Value *big.Int + Timestamp *big.Int + Raw types.Log +} + +func (_FeeQuoter *FeeQuoterFilterer) FilterUsdPerUnitGasUpdated(opts *bind.FilterOpts, destChain []uint64) (*FeeQuoterUsdPerUnitGasUpdatedIterator, error) { + + var destChainRule []interface{} + for _, destChainItem := range destChain { + destChainRule = append(destChainRule, destChainItem) + } + + logs, sub, err := _FeeQuoter.contract.FilterLogs(opts, "UsdPerUnitGasUpdated", destChainRule) + if err != nil { + return nil, err + } + return &FeeQuoterUsdPerUnitGasUpdatedIterator{contract: _FeeQuoter.contract, event: "UsdPerUnitGasUpdated", logs: logs, sub: sub}, nil +} + +func (_FeeQuoter *FeeQuoterFilterer) WatchUsdPerUnitGasUpdated(opts *bind.WatchOpts, sink chan<- *FeeQuoterUsdPerUnitGasUpdated, destChain []uint64) (event.Subscription, error) { + + var destChainRule []interface{} + for _, destChainItem := range destChain { + destChainRule = append(destChainRule, destChainItem) + } + + logs, sub, err := _FeeQuoter.contract.WatchLogs(opts, "UsdPerUnitGasUpdated", destChainRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(FeeQuoterUsdPerUnitGasUpdated) + if err := _FeeQuoter.contract.UnpackLog(event, "UsdPerUnitGasUpdated", 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 +} + +func (_FeeQuoter *FeeQuoterFilterer) ParseUsdPerUnitGasUpdated(log types.Log) (*FeeQuoterUsdPerUnitGasUpdated, error) { + event := new(FeeQuoterUsdPerUnitGasUpdated) + if err := _FeeQuoter.contract.UnpackLog(event, "UsdPerUnitGasUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type GetTokenAndGasPrices struct { + TokenPrice *big.Int + GasPriceValue *big.Int +} +type ProcessMessageArgs struct { + MsgFeeJuels *big.Int + IsOutOfOrderExecution bool + ConvertedExtraArgs []byte + DestExecDataPerToken [][]byte +} + +func (_FeeQuoter *FeeQuoter) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _FeeQuoter.abi.Events["AuthorizedCallerAdded"].ID: + return _FeeQuoter.ParseAuthorizedCallerAdded(log) + case _FeeQuoter.abi.Events["AuthorizedCallerRemoved"].ID: + return _FeeQuoter.ParseAuthorizedCallerRemoved(log) + case _FeeQuoter.abi.Events["DestChainAdded"].ID: + return _FeeQuoter.ParseDestChainAdded(log) + case _FeeQuoter.abi.Events["DestChainConfigUpdated"].ID: + return _FeeQuoter.ParseDestChainConfigUpdated(log) + case _FeeQuoter.abi.Events["FeeTokenAdded"].ID: + return _FeeQuoter.ParseFeeTokenAdded(log) + case _FeeQuoter.abi.Events["FeeTokenRemoved"].ID: + return _FeeQuoter.ParseFeeTokenRemoved(log) + case _FeeQuoter.abi.Events["OwnershipTransferRequested"].ID: + return _FeeQuoter.ParseOwnershipTransferRequested(log) + case _FeeQuoter.abi.Events["OwnershipTransferred"].ID: + return _FeeQuoter.ParseOwnershipTransferred(log) + case _FeeQuoter.abi.Events["PremiumMultiplierWeiPerEthUpdated"].ID: + return _FeeQuoter.ParsePremiumMultiplierWeiPerEthUpdated(log) + case _FeeQuoter.abi.Events["PriceFeedPerTokenUpdated"].ID: + return _FeeQuoter.ParsePriceFeedPerTokenUpdated(log) + case _FeeQuoter.abi.Events["ReportPermissionSet"].ID: + return _FeeQuoter.ParseReportPermissionSet(log) + case _FeeQuoter.abi.Events["TokenTransferFeeConfigDeleted"].ID: + return _FeeQuoter.ParseTokenTransferFeeConfigDeleted(log) + case _FeeQuoter.abi.Events["TokenTransferFeeConfigUpdated"].ID: + return _FeeQuoter.ParseTokenTransferFeeConfigUpdated(log) + case _FeeQuoter.abi.Events["UsdPerTokenUpdated"].ID: + return _FeeQuoter.ParseUsdPerTokenUpdated(log) + case _FeeQuoter.abi.Events["UsdPerUnitGasUpdated"].ID: + return _FeeQuoter.ParseUsdPerUnitGasUpdated(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (FeeQuoterAuthorizedCallerAdded) Topic() common.Hash { + return common.HexToHash("0xeb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef") +} + +func (FeeQuoterAuthorizedCallerRemoved) Topic() common.Hash { + return common.HexToHash("0xc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda77580") +} + +func (FeeQuoterDestChainAdded) Topic() common.Hash { + return common.HexToHash("0x525e3d4e0c31cef19cf9426af8d2c0ddd2d576359ca26bed92aac5fadda46265") +} + +func (FeeQuoterDestChainConfigUpdated) Topic() common.Hash { + return common.HexToHash("0x283b699f411baff8f1c29fe49f32a828c8151596244b8e7e4c164edd6569a835") +} + +func (FeeQuoterFeeTokenAdded) Topic() common.Hash { + return common.HexToHash("0xdf1b1bd32a69711488d71554706bb130b1fc63a5fa1a2cd85e8440f84065ba23") +} + +func (FeeQuoterFeeTokenRemoved) Topic() common.Hash { + return common.HexToHash("0x1795838dc8ab2ffc5f431a1729a6afa0b587f982f7b2be0b9d7187a1ef547f91") +} + +func (FeeQuoterOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (FeeQuoterOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (FeeQuoterPremiumMultiplierWeiPerEthUpdated) Topic() common.Hash { + return common.HexToHash("0xbb77da6f7210cdd16904228a9360133d1d7dfff99b1bc75f128da5b53e28f97d") +} + +func (FeeQuoterPriceFeedPerTokenUpdated) Topic() common.Hash { + return common.HexToHash("0xe6a7a17d710bf0b2cd05e5397dc6f97a5da4ee79e31e234bf5f965ee2bd9a5bf") +} + +func (FeeQuoterReportPermissionSet) Topic() common.Hash { + return common.HexToHash("0x32a4ba3fa3351b11ad555d4c8ec70a744e8705607077a946807030d64b6ab1a3") +} + +func (FeeQuoterTokenTransferFeeConfigDeleted) Topic() common.Hash { + return common.HexToHash("0x4de5b1bcbca6018c11303a2c3f4a4b4f22a1c741d8c4ba430d246ac06c5ddf8b") +} + +func (FeeQuoterTokenTransferFeeConfigUpdated) Topic() common.Hash { + return common.HexToHash("0x94967ae9ea7729ad4f54021c1981765d2b1d954f7c92fbec340aa0a54f46b8b5") +} + +func (FeeQuoterUsdPerTokenUpdated) Topic() common.Hash { + return common.HexToHash("0x52f50aa6d1a95a4595361ecf953d095f125d442e4673716dede699e049de148a") +} + +func (FeeQuoterUsdPerUnitGasUpdated) Topic() common.Hash { + return common.HexToHash("0xdd84a3fa9ef9409f550d54d6affec7e9c480c878c6ab27b78912a03e1b371c6e") +} + +func (_FeeQuoter *FeeQuoter) Address() common.Address { + return _FeeQuoter.address +} + +type FeeQuoterInterface interface { + FEEBASEDECIMALS(opts *bind.CallOpts) (*big.Int, error) + + KEYSTONEPRICEDECIMALS(opts *bind.CallOpts) (*big.Int, error) + + ConvertTokenAmount(opts *bind.CallOpts, fromToken common.Address, fromTokenAmount *big.Int, toToken common.Address) (*big.Int, error) + + GetAllAuthorizedCallers(opts *bind.CallOpts) ([]common.Address, error) + + GetDestChainConfig(opts *bind.CallOpts, destChainSelector uint64) (FeeQuoterDestChainConfig, error) + + GetDestinationChainGasPrice(opts *bind.CallOpts, destChainSelector uint64) (InternalTimestampedPackedUint224, error) + + GetFeeTokens(opts *bind.CallOpts) ([]common.Address, error) + + GetPremiumMultiplierWeiPerEth(opts *bind.CallOpts, token common.Address) (uint64, error) + + GetStaticConfig(opts *bind.CallOpts) (FeeQuoterStaticConfig, error) + + GetTokenAndGasPrices(opts *bind.CallOpts, token common.Address, destChainSelector uint64) (GetTokenAndGasPrices, + + error) + + GetTokenPrice(opts *bind.CallOpts, token common.Address) (InternalTimestampedPackedUint224, error) + + GetTokenPriceFeedConfig(opts *bind.CallOpts, token common.Address) (FeeQuoterTokenPriceFeedConfig, error) + + GetTokenPrices(opts *bind.CallOpts, tokens []common.Address) ([]InternalTimestampedPackedUint224, error) + + GetTokenTransferFeeConfig(opts *bind.CallOpts, destChainSelector uint64, token common.Address) (FeeQuoterTokenTransferFeeConfig, error) + + GetValidatedFee(opts *bind.CallOpts, destChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) + + GetValidatedTokenPrice(opts *bind.CallOpts, token common.Address) (*big.Int, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + ProcessMessageArgs(opts *bind.CallOpts, destChainSelector uint64, feeToken common.Address, feeTokenAmount *big.Int, extraArgs []byte, onRampTokenTransfers []InternalEVM2AnyTokenTransfer, sourceTokenAmounts []ClientEVMTokenAmount) (ProcessMessageArgs, + + error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + ApplyAuthorizedCallerUpdates(opts *bind.TransactOpts, authorizedCallerArgs AuthorizedCallersAuthorizedCallerArgs) (*types.Transaction, error) + + ApplyDestChainConfigUpdates(opts *bind.TransactOpts, destChainConfigArgs []FeeQuoterDestChainConfigArgs) (*types.Transaction, error) + + ApplyFeeTokensUpdates(opts *bind.TransactOpts, feeTokensToRemove []common.Address, feeTokensToAdd []common.Address) (*types.Transaction, error) + + ApplyPremiumMultiplierWeiPerEthUpdates(opts *bind.TransactOpts, premiumMultiplierWeiPerEthArgs []FeeQuoterPremiumMultiplierWeiPerEthArgs) (*types.Transaction, error) + + ApplyTokenTransferFeeConfigUpdates(opts *bind.TransactOpts, tokenTransferFeeConfigArgs []FeeQuoterTokenTransferFeeConfigArgs, tokensToUseDefaultFeeConfigs []FeeQuoterTokenTransferFeeConfigRemoveArgs) (*types.Transaction, error) + + OnReport(opts *bind.TransactOpts, metadata []byte, report []byte) (*types.Transaction, error) + + SetReportPermissions(opts *bind.TransactOpts, permissions []KeystoneFeedsPermissionHandlerPermission) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + UpdatePrices(opts *bind.TransactOpts, priceUpdates InternalPriceUpdates) (*types.Transaction, error) + + UpdateTokenPriceFeeds(opts *bind.TransactOpts, tokenPriceFeedUpdates []FeeQuoterTokenPriceFeedUpdate) (*types.Transaction, error) + + FilterAuthorizedCallerAdded(opts *bind.FilterOpts) (*FeeQuoterAuthorizedCallerAddedIterator, error) + + WatchAuthorizedCallerAdded(opts *bind.WatchOpts, sink chan<- *FeeQuoterAuthorizedCallerAdded) (event.Subscription, error) + + ParseAuthorizedCallerAdded(log types.Log) (*FeeQuoterAuthorizedCallerAdded, error) + + FilterAuthorizedCallerRemoved(opts *bind.FilterOpts) (*FeeQuoterAuthorizedCallerRemovedIterator, error) + + WatchAuthorizedCallerRemoved(opts *bind.WatchOpts, sink chan<- *FeeQuoterAuthorizedCallerRemoved) (event.Subscription, error) + + ParseAuthorizedCallerRemoved(log types.Log) (*FeeQuoterAuthorizedCallerRemoved, error) + + FilterDestChainAdded(opts *bind.FilterOpts, destChainSelector []uint64) (*FeeQuoterDestChainAddedIterator, error) + + WatchDestChainAdded(opts *bind.WatchOpts, sink chan<- *FeeQuoterDestChainAdded, destChainSelector []uint64) (event.Subscription, error) + + ParseDestChainAdded(log types.Log) (*FeeQuoterDestChainAdded, error) + + FilterDestChainConfigUpdated(opts *bind.FilterOpts, destChainSelector []uint64) (*FeeQuoterDestChainConfigUpdatedIterator, error) + + WatchDestChainConfigUpdated(opts *bind.WatchOpts, sink chan<- *FeeQuoterDestChainConfigUpdated, destChainSelector []uint64) (event.Subscription, error) + + ParseDestChainConfigUpdated(log types.Log) (*FeeQuoterDestChainConfigUpdated, error) + + FilterFeeTokenAdded(opts *bind.FilterOpts, feeToken []common.Address) (*FeeQuoterFeeTokenAddedIterator, error) + + WatchFeeTokenAdded(opts *bind.WatchOpts, sink chan<- *FeeQuoterFeeTokenAdded, feeToken []common.Address) (event.Subscription, error) + + ParseFeeTokenAdded(log types.Log) (*FeeQuoterFeeTokenAdded, error) + + FilterFeeTokenRemoved(opts *bind.FilterOpts, feeToken []common.Address) (*FeeQuoterFeeTokenRemovedIterator, error) + + WatchFeeTokenRemoved(opts *bind.WatchOpts, sink chan<- *FeeQuoterFeeTokenRemoved, feeToken []common.Address) (event.Subscription, error) + + ParseFeeTokenRemoved(log types.Log) (*FeeQuoterFeeTokenRemoved, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*FeeQuoterOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *FeeQuoterOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*FeeQuoterOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*FeeQuoterOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *FeeQuoterOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*FeeQuoterOwnershipTransferred, error) + + FilterPremiumMultiplierWeiPerEthUpdated(opts *bind.FilterOpts, token []common.Address) (*FeeQuoterPremiumMultiplierWeiPerEthUpdatedIterator, error) + + WatchPremiumMultiplierWeiPerEthUpdated(opts *bind.WatchOpts, sink chan<- *FeeQuoterPremiumMultiplierWeiPerEthUpdated, token []common.Address) (event.Subscription, error) + + ParsePremiumMultiplierWeiPerEthUpdated(log types.Log) (*FeeQuoterPremiumMultiplierWeiPerEthUpdated, error) + + FilterPriceFeedPerTokenUpdated(opts *bind.FilterOpts, token []common.Address) (*FeeQuoterPriceFeedPerTokenUpdatedIterator, error) + + WatchPriceFeedPerTokenUpdated(opts *bind.WatchOpts, sink chan<- *FeeQuoterPriceFeedPerTokenUpdated, token []common.Address) (event.Subscription, error) + + ParsePriceFeedPerTokenUpdated(log types.Log) (*FeeQuoterPriceFeedPerTokenUpdated, error) + + FilterReportPermissionSet(opts *bind.FilterOpts, reportId [][32]byte) (*FeeQuoterReportPermissionSetIterator, error) + + WatchReportPermissionSet(opts *bind.WatchOpts, sink chan<- *FeeQuoterReportPermissionSet, reportId [][32]byte) (event.Subscription, error) + + ParseReportPermissionSet(log types.Log) (*FeeQuoterReportPermissionSet, error) + + FilterTokenTransferFeeConfigDeleted(opts *bind.FilterOpts, destChainSelector []uint64, token []common.Address) (*FeeQuoterTokenTransferFeeConfigDeletedIterator, error) + + WatchTokenTransferFeeConfigDeleted(opts *bind.WatchOpts, sink chan<- *FeeQuoterTokenTransferFeeConfigDeleted, destChainSelector []uint64, token []common.Address) (event.Subscription, error) + + ParseTokenTransferFeeConfigDeleted(log types.Log) (*FeeQuoterTokenTransferFeeConfigDeleted, error) + + FilterTokenTransferFeeConfigUpdated(opts *bind.FilterOpts, destChainSelector []uint64, token []common.Address) (*FeeQuoterTokenTransferFeeConfigUpdatedIterator, error) + + WatchTokenTransferFeeConfigUpdated(opts *bind.WatchOpts, sink chan<- *FeeQuoterTokenTransferFeeConfigUpdated, destChainSelector []uint64, token []common.Address) (event.Subscription, error) + + ParseTokenTransferFeeConfigUpdated(log types.Log) (*FeeQuoterTokenTransferFeeConfigUpdated, error) + + FilterUsdPerTokenUpdated(opts *bind.FilterOpts, token []common.Address) (*FeeQuoterUsdPerTokenUpdatedIterator, error) + + WatchUsdPerTokenUpdated(opts *bind.WatchOpts, sink chan<- *FeeQuoterUsdPerTokenUpdated, token []common.Address) (event.Subscription, error) + + ParseUsdPerTokenUpdated(log types.Log) (*FeeQuoterUsdPerTokenUpdated, error) + + FilterUsdPerUnitGasUpdated(opts *bind.FilterOpts, destChain []uint64) (*FeeQuoterUsdPerUnitGasUpdatedIterator, error) + + WatchUsdPerUnitGasUpdated(opts *bind.WatchOpts, sink chan<- *FeeQuoterUsdPerUnitGasUpdated, destChain []uint64) (event.Subscription, error) + + ParseUsdPerUnitGasUpdated(log types.Log) (*FeeQuoterUsdPerUnitGasUpdated, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var FeeQuoterZKBin string = ("0x0003000000000002002e0000000000020002000000010355000000600310027000000a090030019d00000a090330019700000001002001900000009b0000c13d0000008002000039000000400020043f000000040030008c000000bc0000413d000000000401043b000000e00440027000000a500040009c000000be0000213d00000a660040009c0000020d0000a13d00000a670040009c000002310000213d00000a6d0040009c0000050a0000213d00000a700040009c000007190000613d00000a710040009c000000bc0000c13d000000c40030008c000000bc0000413d0000000002000416000000000002004b000000bc0000c13d0000000402100370000000000202043b002600000002001d00000a0f0020009c000000bc0000213d0000002402100370000000000202043b002500000002001d00000a0e0020009c000000bc0000213d0000006402100370000000000202043b00000a0f0020009c000000bc0000213d0000002304200039000000000034004b000000bc0000813d0000000404200039000000000441034f000000000404043b002400000004001d00000a0f0040009c000000bc0000213d0000002404200039002100000004001d002000240040002d000000200030006b000000bc0000213d0000008402100370000000000202043b002300000002001d00000a0f0020009c000000bc0000213d00000023020000290000002302200039000000000032004b000000bc0000813d00000023020000290000000402200039000000000221034f000000000202043b001f00000002001d00000a0f0020009c000000bc0000213d000000230200002900000024042000390000001f020000290000000502200210002200000004001d001e00000002001d0000000002420019000000000032004b000000bc0000213d000000a402100370000000000202043b00000a0f0020009c000000bc0000213d0000002304200039000000000034004b000000bc0000813d0000000404200039000000000441034f000000000404043b001d00000004001d00000a0f0040009c000000bc0000213d001c00240020003d0000001d0200002900000006022002100000001c02200029000000000032004b000000bc0000213d0000004401100370000000000101043b001800000001001d00000a8b0100004100000000001004430000000001000412000000040010044300000020010000390000002400100443000000000100041400000a090010009c00000a0901008041000000c00110021000000a8c011001c700008005020000392820281b0000040f000000010020019000001a910000613d000000000301043b000000250130014f00000a0e00100198000000810000613d00000025010000290000001802000029282020620000040f001800000001001d00000a8b010000410000000000100443000000000100041200000004001004430000002400000443000000000100041400000a090010009c00000a0901008041000000c00110021000000a8c011001c700008005020000392820281b0000040f000000010020019000001a910000613d000000000101043b00000a0d01100197000000180010006b000013100000a13d000000400200043d0000002403200039000000000013043500000ab201000041000000000012043500000004012000390000001803000029000013a20000013d000000e004000039000000400040043f0000000002000416000000000002004b000000bc0000c13d0000001f0230003900000a0a02200197000000e002200039000000400020043f0000001f0530018f00000a0b06300198000000e002600039000000ad0000613d000000000701034f000000007807043c0000000004840436000000000024004b000000a90000c13d000000000005004b000000ba0000613d000000000161034f0000000304500210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000001200030008c000000dc0000813d0000000001000019000028220001043000000a510040009c000002200000a13d00000a520040009c0000037b0000213d00000a580040009c000005190000213d00000a5b0040009c000007bf0000613d00000a5c0040009c000000bc0000c13d0000000001000416000000000001004b000000bc0000c13d0000000b02000039000000000102041a000000800010043f000000000020043f000000000001004b0000021e0000613d000000a00400003900000aa10200004100000000030000190000000005040019000000000402041a000000000445043600000001022000390000000103300039000000000013004b000000d40000413d00000ab60000013d000000400100043d002600000001001d00000a0c0010009c000000e60000a13d00000aaa01000041000000000010043f0000004101000039000000040010043f00000a3d01000041000028220001043000000026010000290000006001100039000000400010043f000000e00100043d00000a0d0010009c000000bc0000213d00000026020000290000000001120436002500000001001d000001000100043d00000a0e0010009c000000bc0000213d00000025020000290000000000120435000001200100043d00000a090010009c000000bc0000213d00000026020000290000004002200039002400000002001d0000000000120435000001400200043d00000a0f0020009c000000bc0000213d000000e001300039000000ff04200039000000000014004b000000bc0000813d000000e004200039000000000404043300000a0f0040009c000000e00000213d00000005054002100000003f0650003900000a1006600197000000400700043d0000000006670019002300000007001d000000000076004b0000000007000039000000010700403900000a0f0060009c000000e00000213d0000000100700190000000e00000c13d000000400060043f0000002306000029000000000046043500000100022000390000000005250019000000000015004b000000bc0000213d000000000004004b000001240000613d0000002304000029000000002602043400000a0e0060009c000000bc0000213d00000020044000390000000000640435000000000052004b0000011d0000413d000001600200043d00000a0f0020009c000000bc0000213d0000001f04200039000000000034004b000000000500001900000a110500804100000a1104400197000000000004004b000000000600001900000a110600404100000a110040009c000000000605c019000000000006004b000000bc0000c13d000000e004200039000000000404043300000a0f0040009c000000e00000213d00000005054002100000003f0650003900000a1006600197000000400700043d0000000006670019002200000007001d000000000076004b0000000007000039000000010700403900000a0f0060009c000000e00000213d0000000100700190000000e00000c13d000000400060043f00000022060000290000000006460436001e00000006001d00000100022000390000000005250019000000000015004b000000bc0000213d000000000004004b000001560000613d0000002204000029000000002602043400000a0e0060009c000000bc0000213d00000020044000390000000000640435000000000052004b0000014f0000413d000001800200043d00000a0f0020009c000000bc0000213d0000001f04200039000000000034004b000000000500001900000a110500804100000a1104400197000000000004004b000000000600001900000a110600404100000a110040009c000000000605c019000000000006004b000000bc0000c13d000000e004200039000000000504043300000a0f0050009c000000e00000213d00000005045002100000003f0440003900000a1004400197000000400600043d0000000004460019001d00000006001d000000000064004b0000000006000039000000010600403900000a0f0040009c000000e00000213d0000000100600190000000e00000c13d000000400040043f0000001d040000290000000004540436001c00000004001d000001000220003900000007045002100000000004240019000000000014004b000000bc0000213d000000000005004b000012e40000c13d000001a00200043d00000a0f0020009c000000bc0000213d0000001f04200039000000000034004b000000000500001900000a110500804100000a1104400197000000000004004b000000000600001900000a110600404100000a110040009c000000000605c019000000000006004b000000bc0000c13d000000e004200039002100000004001d000000000704043300000a0f0070009c000000e00000213d00000005067002100000003f0460003900000a1005400197000000400400043d0000000005540019000000000045004b0000000008000039000000010800403900000a0f0050009c000000e00000213d0000000100800190000000e00000c13d000000400050043f002e00000004001d00000000007404350000010005200039002000000056001d000000200010006b000000bc0000213d000000000007004b000014190000c13d000001c00200043d00000a0f0020009c000000bc0000213d0000001f04200039000000000034004b000000000500001900000a110500404100000a1104400197000000000004004b000000000600001900000a110600204100000a110040009c000000000605c019000000000006004b000000bc0000613d000000e004200039000000000504043300000a0f0050009c000000e00000213d00000005045002100000003f0440003900000a1004400197000000400600043d0000000004460019001a00000006001d000000000064004b0000000006000039000000010600403900000a0f0040009c000000e00000213d0000000100600190000000e00000c13d000000400040043f0000001a04000029002d00000004001d0000000000540435000001000220003900000006045002100000000004240019000000000014004b000000bc0000213d000000000005004b000016f30000c13d000001e00200043d00000a0f0020009c000000bc0000213d0000001f04200039000000000034004b000000000300001900000a110300404100000a1104400197000000000004004b000000000500001900000a110500204100000a110040009c000000000503c019000000000005004b000000bc0000613d000000e003200039000000000403043300000a0f0040009c000000e00000213d00000005034002100000003f0330003900000a1003300197000000400500043d0000000003350019001900000005001d000000000053004b0000000005000039000000010500403900000a0f0030009c000000e00000213d0000000100500190000000e00000c13d000000400030043f00000019030000290000000003430436001800000003001d000001000220003900000240034000c90000000003230019000000000013004b000000bc0000213d000000000004004b000017c80000c13d000000400100043d001f00000001001d0000000001000411000000000001004b00001a920000c13d00000a4f010000410000001f02000029000000000012043500000a090020009c00000a0902008041000000400120021000000a4e011001c7000028220001043000000a720040009c000003960000a13d00000a730040009c0000047d0000213d00000a760040009c000005f00000613d00000a770040009c000000bc0000c13d0000000001000416000000000001004b000000bc0000c13d0000000202000039000000000102041a000000800010043f000000000020043f000000000001004b00000aac0000c13d000000200200003900000ab70000013d00000a5d0040009c000003dd0000a13d00000a5e0040009c000004a70000213d00000a610040009c000006040000613d00000a620040009c000000bc0000c13d0000000001000416000000000001004b000000bc0000c13d0000000101000039000000000101041a00000a0e01100197000000800010043f00000aa001000041000028210001042e00000a680040009c000005240000213d00000a6b0040009c000007e80000613d00000a6c0040009c000000bc0000c13d000000240030008c000000bc0000413d0000000002000416000000000002004b000000bc0000c13d0000000402100370000000000202043b00000a0f0020009c000000bc0000213d0000002304200039000000000034004b000000bc0000813d0000000404200039000000000441034f000000000504043b00000a0f0050009c000000e00000213d00000005045002100000003f0440003900000a100440019700000a7d0040009c000000e00000213d0000008004400039000000400040043f000000800050043f000000240220003900000240045000c90000000004240019000000000034004b000000bc0000213d000000000005004b00000c800000c13d0000000101000039000000000101041a00000a0e011001970000000002000411000000000012004b00000adf0000c13d000000800100043d000000000001004b00000aaa0000613d002600000000001d00000026010000290000000501100210000000a0011000390000000001010433000000001201043400000a0f0420019800000f090000613d00000000030104330000016001300039002500000001001d000000000101043300000a090110019800000f090000613d0000020002300039002400000002001d000000000202043300000a270220019700000a280020009c00000f090000c13d0000006002300039002200000002001d000000000202043300000a0902200197000000000021004b00000f090000213d002100000003001d000000000040043f0000000901000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c70000801002000039002300000004001d2820281b0000040f0000000100200190000000bc0000613d0000002306000029000000000101043b0000000101100039000000000101041a00000021050000290000000042050434000000000002004b0000000003000039000000010300c039000000400200043d0000000003320436002000000004001d00000000040404330000ffff0440018f00000000004304350000004003500039001f00000003001d000000000303043300000a0903300197000000400420003900000000003404350000002203000029000000000303043300000a0903300197000000600420003900000000003404350000008003500039001e00000003001d000000000303043300000a090330019700000080042000390000000000340435000000a003500039001d00000003001d00000000030304330000ffff0330018f000000a0042000390000000000340435000000c003500039001c00000003001d000000000303043300000a0903300197000000c0042000390000000000340435000000e003500039001b00000003001d00000000030304330000ffff0330018f000000e00420003900000000003404350000010003500039001a00000003001d00000000030304330000ffff0330018f000001000420003900000000003404350000012003500039001800000003001d00000000030304330000ffff0330018f000001200420003900000000003404350000014003500039001600000003001d000000000303043300000a0903300197000001400420003900000000003404350000002503000029000000000303043300000a0903300197000001600420003900000000003404350000018003500039001900000003001d000000000303043300000a0f0330019700000180042000390000000000340435000001a003500039001700000003001d000000000303043300000a0903300197000001a0042000390000000000340435000001c003500039001500000003001d000000000303043300000a0903300197000001c0042000390000000000340435000001e003500039001400000003001d0000000003030433000000000003004b0000000003000039000000010300c039000001e00420003900000000003404350000002403000029000000000303043300000a27033001970000020004200039000000000034043500000a090020009c00000a0902008041000000400220021000000a2900100198000002ff0000613d000000000100041400000a090010009c00000a0901008041000000c001100210000000000121019f00000aae011001c70000800d02000039000000020300003900000a2a04000041000003080000013d000000000100041400000a090010009c00000a0901008041000000c001100210000000000121019f00000aae011001c70000800d02000039000000020300003900000a2b040000410000000005060019282028160000040f0000000100200190000000bc0000613d0000002301000029000000000010043f0000000901000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d00000021020000290000000002020433000000000002004b000000000101043b000000000201041a00000a2c02200197000000010220c1bf00000020030000290000000003030433000000080330021000000a2d03300197000000000232019f0000001f030000290000000003030433000000180330021000000a2e03300197000000000232019f00000022030000290000000003030433000000380330021000000a2f03300197000000000232019f0000001e030000290000000003030433000000580330021000000a3003300197000000000232019f0000001d030000290000000003030433000000780330021000000a3103300197000000000232019f0000001c030000290000000003030433000000880330021000000a3203300197000000000232019f0000001b030000290000000003030433000000a80330021000000a3303300197000000000232019f0000001a030000290000000003030433000000b80330021000000a3403300197000000000232019f00000018030000290000000003030433000000c80330021000000a3503300197000000000232019f00000016030000290000000003030433000000d80330021000000a3603300197000000000232019f000000000021041b00000001011000390000002502000029000000000202043300000a0902200197000000000301041a00000a3703300197000000000223019f00000019030000290000000003030433000000200330021000000a3803300197000000000232019f00000017030000290000000003030433000000600330021000000a3903300197000000000232019f00000015030000290000000003030433000000800330021000000a3a03300197000000000232019f00000014030000290000000003030433000000000003004b00000a3b030000410000000003006019000000000232019f00000024030000290000000003030433000000380330027000000a2903300197000000000232019f000000000021041b0000002602000029002600010020003d000000800100043d000000260010006b000002610000413d00000aaa0000013d00000a530040009c000005c10000213d00000a560040009c000008080000613d00000a570040009c000000bc0000c13d000000240030008c000000bc0000413d0000000002000416000000000002004b000000bc0000c13d0000000401100370000000000601043b00000a0e0060009c000000bc0000213d0000000101000039000000000101041a00000a0e011001970000000005000411000000000015004b00000acb0000c13d000000000056004b00000acf0000c13d00000a8101000041000000800010043f00000a7f01000041000028220001043000000a780040009c00000a770000613d00000a790040009c000009ac0000613d00000a7a0040009c000000bc0000c13d0000000001000416000000000001004b000000bc0000c13d282023a40000040f000000400100043d002600000001001d28201f760000040f0000000001000412002c00000001001d002b00000000003d0000800501000039000000440300003900000000040004150000002c0440008a000000050440021000000a8b02000041282027f80000040f00000a0d02100197002400000002001d00000026010000290000000001210436002500000001001d0000000001000412002a00000001001d002900200000003d00000000040004150000002a0440008a0000000504400210000080050100003900000a8b020000410000004403000039282027f80000040f00000a0e01100197000000250200002900000000001204350000000001000412002800000001001d002700400000003d0000000004000415000000280440008a0000000504400210000080050100003900000a8b020000410000004403000039282027f80000040f0000002602000029000000400220003900000a09011001970000000000120435000000400100043d000000240300002900000000033104360000002504000029000000000404043300000a0e044001970000000000430435000000000202043300000a09022001970000004003100039000000000023043500000a090010009c00000a0901008041000000400110021000000abc011001c7000028210001042e00000a630040009c00000a8f0000613d00000a640040009c000009c00000613d00000a650040009c000000bc0000c13d000000440030008c000000bc0000413d0000000004000416000000000004004b000000bc0000c13d0000000404100370000000000604043b00000a0f0060009c000000bc0000213d0000002304600039000000000034004b000000bc0000813d0000000405600039000000000451034f000000000404043b00000a0f0040009c000000bc0000213d00000000064600190000002406600039000000000036004b000000bc0000213d0000002406100370000000000606043b00000a0f0060009c000000bc0000213d0000002307600039000000000037004b000000bc0000813d002400040060003d0000002407100360000000000707043b002500000007001d00000a0f0070009c000000bc0000213d0000002406600039002300000006001d002600250060002d000000260030006b000000bc0000213d0000001f0340003900000abd033001970000003f0330003900000abd0330019700000a7d0030009c000000e00000213d0000008003300039000000400030043f0000002003500039000000000331034f000000800040043f00000abd054001980000001f0640018f000000a0015000390000041f0000613d000000a007000039000000000803034f000000008908043c0000000007970436000000000017004b0000041b0000c13d000000000006004b0000042c0000613d000000000353034f0000000305600210000000000601043300000000065601cf000000000656022f000000000303043b0000010005500089000000000353022f00000000035301cf000000000363019f0000000000310435000000a0014000390000000000010435000000de0100043d002200000001001d00000aa303100197000000400100043d0000008004100039000000ca0500043d000000c00600043d0000000000340435002100000006001d00000a220360019700000060041000390000000000340435000000000221043600000060045002700000004003100039002000000004001d0000000000430435000000000300041100000a0e03300197000000000032043500000aa40010009c000000e00000213d000000a003100039000000400030043f00000a090020009c00000a09020080410000004002200210000000000101043300000a090010009c00000a09010080410000006001100210000000000121019f000000000200041400000a090020009c00000a0902008041000000c002200210000000000112019f00000a20011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b000000000010043f0000000401000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b000000000101041a000000ff00100190000010c40000c13d000000400200043d002600000002001d00000aa801000041000000000012043500000004012000390000000002000411000000200300002900000021040000290000002205000029282027800000040f0000002602000029000000000121004900000a090010009c00000a0901008041000000600110021000000a090020009c00000a09020080410000004002200210000000000121019f000028220001043000000a740040009c000006450000613d00000a750040009c000000bc0000c13d000000240030008c000000bc0000413d0000000002000416000000000002004b000000bc0000c13d0000000401100370000000000101043b002000000001001d00000a0f0010009c000000bc0000213d000000200130006a00000a120010009c000000bc0000213d000000440010008c000000bc0000413d0000000001000411000000000010043f0000000301000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b000000000101041a000000000001004b00000ae70000c13d000000400100043d00000ab802000041000000000021043500000004021000390000000003000411000005ea0000013d00000a5f0040009c0000064c0000613d00000a600040009c000000bc0000c13d000000240030008c000000bc0000413d0000000002000416000000000002004b000000bc0000c13d0000000402100370000000000202043b00000a0f0020009c000000bc0000213d0000002304200039000000000034004b000000bc0000813d0000000404200039000000000441034f000000000504043b00000a0f0050009c000000e00000213d00000005045002100000003f0440003900000a100440019700000a7d0040009c000000e00000213d0000008004400039000000400040043f000000800050043f000000240220003900000006045002100000000004240019000000000034004b000000bc0000213d000000000005004b00000bf00000c13d0000000101000039000000000101041a00000a0e011001970000000002000411000000000012004b00000adf0000c13d000000800100043d000000000001004b00000aaa0000613d002600000000001d00000026010000290000000501100210000000a001100039000000000101043300000020021000390000000002020433002400000002001d000000000101043300000a0e01100197002500000001001d000000000010043f0000000801000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000240200002900000a0f02200197000000000101043b000000000301041a00000a3e03300197000000000323019f000000000031041b000000400100043d000000000021043500000a090010009c00000a09010080410000004001100210000000000200041400000a090020009c00000a0902008041000000c002200210000000000112019f00000a1b011001c70000800d02000039000000020300003900000a3f040000410000002505000029282028160000040f0000000100200190000000bc0000613d0000002602000029002600010020003d000000800100043d000000260010006b000004d50000413d00000aaa0000013d00000a6e0040009c000008ae0000613d00000a6f0040009c000000bc0000c13d000000240030008c000000bc0000413d0000000002000416000000000002004b000000bc0000c13d0000000401100370000000000101043b00000a0e0010009c000000bc0000213d282025cf0000040f00000a880000013d00000a590040009c000008f20000613d00000a5a0040009c000000bc0000c13d0000000001000416000000000001004b000000bc0000c13d0000001201000039000000800010043f00000aa001000041000028210001042e00000a690040009c000009050000613d00000a6a0040009c000000bc0000c13d000000440030008c000000bc0000413d0000000002000416000000000002004b000000bc0000c13d0000000402100370000000000202043b002500000002001d00000a0f0020009c000000bc0000213d00000025020000290000002302200039000000000032004b000000bc0000813d00000025020000290000000402200039000000000221034f000000000202043b00000a0f0020009c000000e00000213d00000005052002100000003f0450003900000a100440019700000a7d0040009c000000e00000213d0000008004400039000000400040043f000000800020043f00000025040000290000002404400039002400000045001d000000240030006b000000bc0000213d000000000002004b00000d160000c13d0000002402100370000000000202043b00000a0f0020009c000000bc0000213d0000002304200039000000000034004b000000000500001900000a110500404100000a1104400197000000000004004b000000000600001900000a110600204100000a110040009c000000000605c019000000000006004b000000bc0000613d0000000404200039000000000441034f000000000504043b00000a0f0050009c000000e00000213d00000005045002100000003f0440003900000a1004400197000000400600043d0000000004460019001f00000006001d000000000064004b0000000006000039000000010600403900000a0f0040009c000000e00000213d0000000100600190000000e00000c13d000000400040043f0000001f040000290000000004540436001e00000004001d000000240220003900000006045002100000000004240019000000000034004b000000bc0000213d000000000005004b000010410000c13d0000000101000039000000000101041a00000a0e011001970000000002000411000000000012004b00000adf0000c13d000000800100043d000000000001004b000011df0000c13d0000001f010000290000000001010433000000000001004b00000aaa0000613d002600000000001d000000260100002900000005011002100000001e01100029000000000101043300000020021000390000000002020433002500000002001d000000000101043300000a0f01100197002400000001001d000000000010043f0000000a01000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000250200002900000a0e02200197000000000101043b002500000002001d000000000020043f000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b000000000001041b000000000100041400000a090010009c00000a0901008041000000c00110021000000a20011001c70000800d02000039000000030300003900000a4b0400004100000024050000290000002506000029282028160000040f0000000100200190000000bc0000613d0000002602000029002600010020003d0000001f010000290000000001010433000000260010006b000005860000413d00000aaa0000013d00000a540040009c000009380000613d00000a550040009c000000bc0000c13d000000440030008c000000bc0000413d0000000002000416000000000002004b000000bc0000c13d0000000402100370000000000202043b002600000002001d00000a0e0020009c000000bc0000213d0000002401100370000000000101043b002500000001001d00000a0f0010009c000000bc0000213d0000002501000029000000000010043f0000000901000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b000000000101041a000000ff0010019000000bd60000c13d000000400100043d00000a7c02000041000000000021043500000004021000390000002503000029000000000032043500000a090010009c00000a0901008041000000400110021000000a3d011001c700002822000104300000000001000416000000000001004b000000bc0000c13d000000c001000039000000400010043f0000001301000039000000800010043f00000aba01000041000000a00010043f0000002001000039000000c00010043f0000008001000039000000e00200003928201fb50000040f000000c00110008a00000a090010009c00000a0901008041000000600110021000000abb011001c7000028210001042e000000440030008c000000bc0000413d0000000002000416000000000002004b000000bc0000c13d0000000402100370000000000202043b00000a0f0020009c000000bc0000213d0000002401100370000000000101043b002600000001001d00000a0e0010009c000000bc0000213d0000014001000039000000400010043f000000800000043f000000a00000043f000000c00000043f000000e00000043f000001000000043f000001200000043f000000000020043f0000000a01000039000000200010043f00000040020000390000000001000019282027e30000040f0000002602000029282023940000040f002600000001001d000000400100043d002500000001001d28201f8c0000040f0000002601000029000000000101041a00000a88001001980000000002000039000000010200c0390000002504000029000000a0034000390000000000230435000000700210027000000a090220019700000080034000390000000000230435000000500210027000000a09022001970000006003400039000000000023043500000040021002700000ffff0220018f00000040034000390000000000230435000000200210027000000a09022001970000002003400039000000000023043500000a090110019700000000001404350000000002040019000000400100043d002600000001001d282020350000040f00000abd0000013d0000000001000416000000000001004b000000bc0000c13d0000002401000039000000800010043f00000aa001000041000028210001042e000000240030008c000000bc0000413d0000000002000416000000000002004b000000bc0000c13d0000000402100370000000000202043b00000a0f0020009c000000bc0000213d000000000423004900000a120040009c000000bc0000213d000000440040008c000000bc0000413d000000c005000039000000400050043f0000000404200039000000000641034f000000000606043b00000a0f0060009c000000bc0000213d00000000062600190000002307600039000000000037004b000000bc0000813d0000000407600039000000000771034f000000000807043b00000a0f0080009c000000e00000213d00000005078002100000003f0970003900000a100990019700000a140090009c000000e00000213d000000c009900039000000400090043f000000c00080043f00000024066000390000000007670019000000000037004b000000bc0000213d000000000008004b000006810000613d000000000861034f000000000808043b00000a0e0080009c000000bc0000213d000000200550003900000000008504350000002006600039000000000076004b000006780000413d000000c005000039000000800050043f0000002004400039000000000441034f000000000404043b00000a0f0040009c000000bc0000213d00000000022400190000002304200039000000000034004b000000000500001900000a110500804100000a1104400197000000000004004b000000000600001900000a110600404100000a110040009c000000000605c019000000000006004b000000bc0000c13d0000000404200039000000000441034f000000000404043b00000a0f0040009c000000e00000213d00000005054002100000003f0650003900000a1006600197000000400700043d0000000006670019002300000007001d000000000076004b0000000007000039000000010700403900000a0f0060009c000000e00000213d0000000100700190000000e00000c13d000000400060043f00000023060000290000000004460436002200000004001d00000024022000390000000004250019000000000034004b000000bc0000213d000000000042004b000006bb0000813d0000002303000029000000000521034f000000000505043b00000a0e0050009c000000bc0000213d000000200330003900000000005304350000002002200039000000000042004b000006b20000413d0000002301000029000000a00010043f0000000101000039000000000101041a00000a0e011001970000000002000411000000000012004b00000adf0000c13d00000023010000290000000001010433000000000001004b0000127d0000c13d000000800100043d002300000001001d0000000021010434002400000002001d000000000001004b00000aaa0000613d002600000000001d000000260100002900000005011002100000002401100029000000000101043300000a0e0110019800001b800000613d002500000001001d000000000010043f0000000301000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b000000000101041a000000000001004b000007000000c13d0000000201000039000000000101041a00000a0f0010009c000000e00000213d00000001021000390000000203000039000000000023041b00000a1d0110009a0000002502000029000000000021041b000000000103041a002200000001001d000000000020043f0000000301000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b0000002202000029000000000021041b000000400100043d0000002502000029000000000021043500000a090010009c00000a09010080410000004001100210000000000200041400000a090020009c00000a0902008041000000c002200210000000000112019f00000a1b011001c70000800d02000039000000010300003900000a1e04000041282028160000040f0000000100200190000000bc0000613d0000002602000029002600010020003d00000023010000290000000001010433000000260010006b000006ce0000413d00000aaa0000013d000000240030008c000000bc0000413d0000000002000416000000000002004b000000bc0000c13d0000000402100370000000000202043b00000a0f0020009c000000bc0000213d0000002304200039000000000034004b000000bc0000813d0000000404200039000000000441034f000000000504043b00000a0f0050009c000000e00000213d00000005045002100000003f0440003900000a100440019700000a7d0040009c000000e00000213d0000008004400039000000400040043f000000800050043f0000002402200039000000a0045000c90000000004240019000000000034004b000000bc0000213d000000000005004b00000c0b0000c13d0000000101000039000000000101041a00000a0e011001970000000002000411000000000012004b00000adf0000c13d000000800100043d000000000001004b00000aaa0000613d002600000000001d00000026010000290000000501100210000000a00110003900000000040104330000004001400039002300000001001d000000000101043300000aa3021001970000000053040434002500000004001d0000006001400039002400000001001d0000000004010433002200000005001d0000000005050433000000400100043d0000008006100039000000000026043500000a22025001970000006005100039000000000025043500000a0e024001970000004004100039000000000024043500000a0e03300197000000200210003900000000003204350000008003000039000000000031043500000aa40010009c000000e00000213d000000a003100039000000400030043f00000a090020009c00000a09020080410000004002200210000000000101043300000a090010009c00000a09010080410000006001100210000000000121019f000000000200041400000a090020009c00000a0902008041000000c002200210000000000112019f00000a20011001c700008010020000392820281b0000040f00000001002001900000002503000029000000bc0000613d000000000101043b0000008002300039002000000002001d0000000002020433001f00000002001d002100000001001d000000000010043f0000000401000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f00000025040000290000000100200190000000bc0000613d000000000101043b000000000201041a00000abe022001970000001f0000006b000000010220c1bf000000000021041b000000000104043300000a0e01100197000000400200043d00000000011204360000002203000029000000000303043300000a220330019700000000003104350000002301000029000000000101043300000aa301100197000000400320003900000000001304350000002401000029000000000101043300000a0e011001970000006003200039000000000013043500000020010000290000000001010433000000000001004b0000000001000039000000010100c0390000008003200039000000000013043500000a090020009c00000a09020080410000004001200210000000000200041400000a090020009c00000a0902008041000000c002200210000000000112019f00000ab5011001c70000800d02000039000000020300003900000ab6040000410000002105000029282028160000040f0000000100200190000000bc0000613d0000002602000029002600010020003d000000800100043d000000260010006b000007430000413d00000aaa0000013d000000240030008c000000bc0000413d0000000002000416000000000002004b000000bc0000c13d0000000401100370000000000101043b002600000001001d00000a0e0010009c000000bc0000213d282023a40000040f0000002601000029000000000010043f0000000701000039000000200010043f00000040020000390000000001000019282027e30000040f002600000001001d000000400100043d002500000001001d28201f760000040f0000002601000029000000000101041a00000a8d001001980000000002000039000000010200c039000000250400002900000040034000390000000000230435000000a002100270000000ff0220018f0000002003400039000000000023043500000a0e0110019700000000001404350000000002040019000000400100043d002600000001001d282020530000040f00000abd0000013d000000240030008c000000bc0000413d0000000002000416000000000002004b000000bc0000c13d0000000401100370000000000101043b002600000001001d00000a0f0010009c000000bc0000213d282023d30000040f0000002601000029000000000010043f0000000501000039000000200010043f00000040020000390000000001000019282027e30000040f002600000001001d000000400100043d002500000001001d28201f810000040f0000002601000029000000000101041a00000025040000290000002002400039000000e003100270000000000032043500000a160110019700000000001404350000000001040019000008fc0000013d000000440030008c000000bc0000413d0000000002000416000000000002004b000000bc0000c13d0000000402100370000000000202043b002600000002001d00000a0f0020009c000000bc0000213d0000002401100370000000000101043b002500000001001d00000a0f0010009c000000bc0000213d000000250130006a00000a120010009c000000bc0000213d000000a40010008c000000bc0000413d0000002601000029000000000010043f0000000901000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000400200043d00000a150020009c000000e00000213d000000000101043b0000022003200039000000400030043f000000000301041a000000d80430027000000a09044001970000014005200039002400000005001d0000000000450435000000c8043002700000ffff0440018f0000012005200039002300000005001d0000000000450435000000b8043002700000ffff0440018f0000010005200039001e00000005001d0000000000450435000000a8043002700000ffff0440018f000000e005200039001500000005001d0000000000450435000000880430027000000a0904400197000000c005200039001600000005001d000000000045043500000078043002700000ffff0440018f000000a005200039001800000005001d0000000000450435000000580430027000000a09044001970000008005200039001700000005001d0000000000450435000000380430027000000a09044001970000006005200039001b00000005001d0000000000450435000000180430027000000a09044001970000004005200039002200000005001d000000000045043500000008043002700000ffff0440018f0000002005200039002100000005001d0000000000450435000000ff033001900000000004000039000000010400c03900000000004204350000000101100039000000000101041a000001600520003900000a0904100197001900000005001d0000000000450435000000380410021000000a27044001970000020005200039002000000005001d000000000045043500000a23001001980000000004000039000000010400c039000001e005200039001a00000005001d0000000000450435000000800410027000000a0904400197000001c005200039001f00000005001d0000000000450435000000600410027000000a0904400197000001a005200039001d00000005001d00000000004504350000018002200039000000200110027000000a0f01100197001c00000002001d0000000000120435000000000003004b00000da80000613d00000025010000290000006401100039001400000001001d0000000201100367000000000101043b00000a0e0010009c000000bc0000213d000000000010043f0000000c01000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d0000000202000367000000000101043b000000000101041a000000000001004b00000f0f0000c13d0000001401200360000000000101043b00000a0e0010009c000000bc0000213d000000400200043d00000a9f0300004100000000003204350000000403200039000000000013043500000a090020009c00000a0902008041000000400120021000000a3d011001c70000282200010430000000240030008c000000bc0000413d0000000002000416000000000002004b000000bc0000c13d0000000402100370000000000202043b00000a0f0020009c000000bc0000213d0000002304200039000000000034004b000000bc0000813d0000000404200039000000000141034f000000000101043b002000000001001d00000a0f0010009c000000bc0000213d001f00240020003d000000200100002900000005021002100000001f01200029000000000031004b000000bc0000213d0000003f0120003900000a100310019700000a7d0030009c000000e00000213d0000008001300039000000400010043f0000002004000029000000800040043f000000000004004b00000c3e0000c13d00000020020000390000000003210436000000800200043d00000000002304350000004004100039000000000002004b000008e90000613d000000800300003900000000050000190000000006010019000000000704001900000020033000390000000004030433000000008404043400000a160440019700000000004704350000006004600039000000000608043300000a0906600197000000000064043500000040047000390000000105500039000000000025004b0000000006070019000008da0000413d000000000214004900000a090020009c00000a0902008041000000600220021000000a090010009c00000a09010080410000004001100210000000000112019f000028210001042e000000240030008c000000bc0000413d0000000002000416000000000002004b000000bc0000c13d0000000401100370000000000101043b00000a0e0010009c000000bc0000213d282024360000040f000000400200043d002600000002001d28201fd70000040f000000260100002900000a090010009c00000a0901008041000000400110021000000a7b011001c7000028210001042e000000240030008c000000bc0000413d0000000002000416000000000002004b000000bc0000c13d0000000401100370000000000101043b002600000001001d00000a0f0010009c000000bc0000213d28201fa90000040f00000200021000390000000000020435000001e0021000390000000000020435000001c0021000390000000000020435000001a00210003900000000000204350000018002100039000000000002043500000160021000390000000000020435000001400210003900000000000204350000012002100039000000000002043500000100021000390000000000020435000000e0021000390000000000020435000000c0021000390000000000020435000000a0021000390000000000020435000000800210003900000000000204350000006002100039000000000002043500000040021000390000000000020435000000000101043600000000000104350000002601000029282023b50000040f282023e20000040f0000000002010019000000400100043d002600000001001d28201fde0000040f00000abd0000013d000000240030008c000000bc0000413d0000000002000416000000000002004b000000bc0000c13d0000000402100370000000000202043b00000a0f0020009c000000bc0000213d0000002304200039000000000034004b000000bc0000813d0000000404200039000000000441034f000000000504043b00000a0f0050009c000000e00000213d00000005045002100000003f0440003900000a100440019700000a7d0040009c000000e00000213d0000008004400039000000400040043f000000800050043f000000240220003900000007045002100000000004240019000000000034004b000000bc0000213d000000000005004b00000c4f0000c13d0000000101000039000000000101041a00000a0e011001970000000002000411000000000012004b00000adf0000c13d000000800100043d000000000001004b00000aaa0000613d002600000000001d00000026010000290000000501100210000000a001100039000000000101043300000020021000390000000002020433002400000002001d000000000101043300000a0e01100197002500000001001d000000000010043f0000000701000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b000000000201041a00000a2202200197000000240600002900000020036000390000000004030433000000a00440021000000a2304400197000000000242019f00000040046000390000000005040433000000000005004b00000a24050000410000000005006019000000000252019f000000000506043300000a0e05500197000000000252019f000000000021041b000000400100043d00000000025104360000000003030433000000ff0330018f00000000003204350000000002040433000000000002004b0000000002000039000000010200c0390000004003100039000000000023043500000a090010009c00000a09010080410000004001100210000000000200041400000a090020009c00000a0902008041000000c002200210000000000112019f00000a25011001c70000800d02000039000000020300003900000a26040000410000002505000029282028160000040f0000000100200190000000bc0000613d0000002602000029002600010020003d000000800100043d000000260010006b000009620000413d00000aaa0000013d000000240030008c000000bc0000413d0000000002000416000000000002004b000000bc0000c13d0000000401100370000000000101043b00000a0e0010009c000000bc0000213d000000000010043f0000000801000039000000200010043f00000040020000390000000001000019282027e30000040f000000000101041a00000a0f01100197000000800010043f00000aa001000041000028210001042e000000440030008c000000bc0000413d0000000004000416000000000004004b000000bc0000c13d0000000404100370000000000404043b00000a0f0040009c000000bc0000213d0000002305400039000000000035004b000000bc0000813d0000000405400039000000000551034f000000000605043b00000a0f0060009c000000e00000213d00000005056002100000003f0750003900000a100770019700000a7d0070009c000000e00000213d0000008007700039000000400070043f000000800060043f00000024044000390000000005450019000000000035004b000000bc0000213d000000000006004b000009e80000613d000000000641034f000000000606043b00000a0e0060009c000000bc0000213d000000200220003900000000006204350000002004400039000000000054004b000009df0000413d0000002402100370000000000202043b00000a0f0020009c000000bc0000213d0000002304200039000000000034004b000000000500001900000a110500804100000a1104400197000000000004004b000000000600001900000a110600404100000a110040009c000000000605c019000000000006004b000000bc0000c13d0000000404200039000000000441034f000000000404043b00000a0f0040009c000000e00000213d00000005054002100000003f0650003900000a1006600197000000400700043d0000000006670019002300000007001d000000000076004b0000000007000039000000010700403900000a0f0060009c000000e00000213d0000000100700190000000e00000c13d000000400060043f00000023060000290000000006460436002200000006001d00000024022000390000000005250019000000000035004b000000bc0000213d000000000004004b00000a1e0000613d0000002303000029000000000421034f000000000404043b00000a0e0040009c000000bc0000213d000000200330003900000000004304350000002002200039000000000052004b00000a150000413d0000000101000039000000000101041a00000a0e011001970000000002000411000000000012004b00000adf0000c13d000000800100043d000000000001004b0000105f0000c13d00000023010000290000000001010433000000000001004b00000aaa0000613d002600000000001d00000a330000013d0000002602000029002600010020003d00000023010000290000000001010433000000260010006b00000aaa0000813d000000260100002900000005011002100000002201100029002400000001001d000000000101043300000a0e01100197002500000001001d000000000010043f0000000c01000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b000000000101041a000000000001004b00000a2d0000c13d0000000b03000039000000000103041a00000a0f0010009c000000e00000213d0000000102100039000000000023041b00000a1f0110009a0000002502000029000000000021041b000000000103041a002100000001001d000000000020043f0000000c01000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b0000002102000029000000000021041b00000023010000290000000001010433000000260010006c00001e580000a13d00000024010000290000000001010433000000000200041400000a0e0510019700000a090020009c00000a0902008041000000c00120021000000a20011001c70000800d02000039000000020300003900000a2104000041282028160000040f000000010020019000000a2d0000c13d000000bc0000013d000000640030008c000000bc0000413d0000000002000416000000000002004b000000bc0000c13d0000000402100370000000000402043b00000a0e0040009c000000bc0000213d0000004402100370000000000302043b00000a0e0030009c000000bc0000213d0000002401100370000000000201043b0000000001040019282020620000040f000000400200043d000000000012043500000a090020009c00000a0902008041000000400120021000000a9a011001c7000028210001042e0000000001000416000000000001004b000000bc0000c13d000000000100041a00000a0e021001970000000006000411000000000026004b00000ac70000c13d0000000102000039000000000302041a00000a1704300197000000000464019f000000000042041b00000a1701100197000000000010041b000000000100041400000a0e0530019700000a090010009c00000a0901008041000000c00110021000000a20011001c70000800d02000039000000030300003900000aad04000041282028160000040f0000000100200190000000bc0000613d0000000001000019000028210001042e000000a00400003900000ab90200004100000000030000190000000005040019000000000402041a000000000445043600000001022000390000000103300039000000000013004b00000aaf0000413d000000600250008a000000800100003928201f970000040f000000400100043d002600000001001d000000800200003928201fc70000040f0000002602000029000000000121004900000a090010009c00000a0901008041000000600110021000000a090020009c00000a09020080410000004002200210000000000121019f000028210001042e00000aac01000041000000800010043f00000a7f01000041000028220001043000000a7e01000041000000800010043f00000a7f010000410000282200010430000000000100041a00000a1701100197000000000161019f000000000010041b000000000100041400000a090010009c00000a0901008041000000c00110021000000a20011001c70000800d02000039000000030300003900000a8004000041282028160000040f0000000100200190000000bc0000613d00000aaa0000013d000000400100043d00000a7e02000041000000000021043500000a090010009c00000a0901008041000000400110021000000a4e011001c700002822000104300000002004000029002600040040003d00000002020003670000002601200360000000000301043b00000000010000310000000004410049000000230440008a00000a110540019700000a1106300197000000000756013f000000000056004b000000000500001900000a1105004041000000000043004b000000000400001900000a110400804100000a110070009c000000000504c019000000000005004b000000bc0000c13d0000002603300029000000000232034f000000000202043b001d00000002001d00000a0f0020009c000000bc0000213d0000001d02000029000000060220021000000000012100490000002002300039000000000012004b000000000300001900000a110300204100000a110110019700000a1102200197000000000412013f000000000012004b000000000100001900000a110100404100000a110040009c000000000103c019000000000001004b000000bc0000c13d00000a84010000410000000000100443000000000100041400000a090010009c00000a0901008041000000c00110021000000a85011001c70000800b020000392820281b0000040f000000010020019000001a910000613d000000000101043b001e00000001001d001f0a090010019b0000001d0000006b00000fbc0000c13d0000002601000029001d00200010003d00000002020003670000001d01200360000000000301043b0000000001000031000000200410006a000000230440008a00000a110540019700000a1106300197000000000756013f000000000056004b000000000500001900000a1105004041000000000043004b000000000400001900000a110400804100000a110070009c000000000504c019000000000005004b000000bc0000c13d0000002603300029000000000232034f000000000202043b001c00000002001d00000a0f0020009c000000bc0000213d0000001c02000029000000060220021000000000012100490000002002300039000000000012004b000000000300001900000a110300204100000a110110019700000a1102200197000000000412013f000000000012004b000000000100001900000a110100404100000a110040009c000000000103c019000000000001004b000000bc0000c13d0000001c0000006b00000aaa0000613d000000000900001900000002010003670000001d02100360000000000302043b0000000002000031000000200420006a000000230440008a00000a110540019700000a1106300197000000000756013f000000000056004b000000000500001900000a1105004041000000000043004b000000000400001900000a110400804100000a110070009c000000000504c019000000000005004b000000bc0000c13d0000002604300029000000000341034f000000000303043b00000a0f0030009c000000bc0000213d00000006053002100000000005520049000000200440003900000a110650019700000a1107400197000000000867013f000000000067004b000000000600001900000a1106004041000000000054004b000000000500001900000a110500204100000a110080009c000000000605c019000000000006004b000000bc0000c13d000000000039004b00001e580000813d00000006039002100000000003340019000000000232004900000a120020009c000000bc0000213d000000400020008c000000bc0000413d000000400400043d00000a130040009c000000e00000213d0000004002400039000000400020043f000000000231034f000000000202043b00000a0f0020009c000000bc0000213d00000000052404360000002002300039000000000121034f000000000101043b00000a160010009c000000bc0000213d002500000005001d0000000000150435000000400300043d00000a130030009c000000e00000213d0000004002300039000000400020043f002200000003001d00000000021304360000001f01000029002100000002001d0000000000120435000000000104043300000a0f01100197000000000010043f0000000501000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c70000801002000039002300000009001d002400000004001d2820281b0000040f000000240400002900000001002001900000002505000029000000bc0000613d0000002202000029000000000202043300000a160220019700000021030000290000000003030433000000e003300210000000000223019f000000000101043b000000000021041b00000000020404330000000001050433000000400300043d00000020043000390000001e05000029000000000054043500000a1601100197000000000013043500000a090030009c00000a09030080410000004001300210000000000300041400000a090030009c00000a0903008041000000c003300210000000000113019f00000a19011001c700000a0f052001970000800d02000039000000020300003900000ab704000041282028160000040f00000023090000290000000100200190000000bc0000613d00000001099000390000001c0090006c00000b520000413d00000aaa0000013d0000002601000029282025cf0000040f0000002502000029000000000020043f0000000902000039000000200020043f002600000001001d00000040020000390000000001000019282027e30000040f0000000101100039000000000101041a000000800110027000000a090210019700000025010000292820278d0000040f000000400200043d000000200320003900000000001304350000002601000029000000000012043500000a090020009c00000a0902008041000000400120021000000a7b011001c7000028210001042e000000a005000039000000000623004900000a120060009c000000bc0000213d000000400060008c000000bc0000413d000000400600043d00000a130060009c000000e00000213d0000004007600039000000400070043f000000000721034f000000000707043b00000a0e0070009c000000bc0000213d00000000077604360000002008200039000000000881034f000000000808043b00000a0f0080009c000000bc0000213d000000000087043500000000056504360000004002200039000000000042004b00000bf10000413d000004cb0000013d000000a005000039000000000623004900000a120060009c000000bc0000213d000000a00060008c000000bc0000413d000000400600043d00000aa40060009c000000e00000213d000000a007600039000000400070043f000000000721034f000000000707043b00000a0e0070009c000000bc0000213d00000000087604360000002007200039000000000971034f000000000909043b00000ab300900198000000bc0000c13d00000000009804350000002007700039000000000871034f000000000808043b00000ab400800198000000bc0000c13d000000400960003900000000008904350000002007700039000000000871034f000000000808043b00000a0e0080009c000000bc0000213d000000600960003900000000008904350000002007700039000000000771034f000000000707043b000000000007004b0000000008000039000000010800c039000000000087004b000000bc0000c13d000000800860003900000000007804350000000005650436000000a002200039000000000042004b00000c0c0000413d000007390000013d00000a140030009c000000e00000213d00000000030000190000004004100039000000400040043f000000200410003900000000000404350000000000010435000000a00430003900000000001404350000002003300039000000000023004b00000dae0000813d000000400100043d00000a130010009c00000c410000a13d000000e00000013d000000a005000039000000000623004900000a120060009c000000bc0000213d000000800060008c000000bc0000413d000000400600043d00000a130060009c000000e00000213d0000004007600039000000400070043f000000000721034f000000000707043b00000a0e0070009c000000bc0000213d0000000007760436000000400800043d00000a0c0080009c000000e00000213d0000006009800039000000400090043f0000002009200039000000000a91034f000000000a0a043b00000a0e00a0009c000000bc0000213d000000000aa804360000002009900039000000000b91034f000000000b0b043b000000ff00b0008c000000bc0000213d0000000000ba04350000002009900039000000000991034f000000000909043b000000000009004b000000000a000039000000010a00c0390000000000a9004b000000bc0000c13d000000400a80003900000000009a0435000000000087043500000000056504360000008002200039000000000042004b00000c500000413d000009580000013d000000a005000039000000000623004900000a120060009c000000bc0000213d000002400060008c000000bc0000413d000000400600043d00000a130060009c000000e00000213d0000004007600039000000400070043f000000000721034f000000000707043b00000a0f0070009c000000bc0000213d0000000007760436000000400800043d00000a150080009c000000e00000213d0000022009800039000000400090043f0000002009200039000000000a91034f000000000a0a043b00000000000a004b000000000b000039000000010b00c0390000000000ba004b000000bc0000c13d000000000aa804360000002009900039000000000b91034f000000000b0b043b0000ffff00b0008c000000bc0000213d0000000000ba04350000002009900039000000000a91034f000000000a0a043b00000a0900a0009c000000bc0000213d000000400b8000390000000000ab04350000002009900039000000000a91034f000000000a0a043b00000a0900a0009c000000bc0000213d000000600b8000390000000000ab04350000002009900039000000000a91034f000000000a0a043b00000a0900a0009c000000bc0000213d000000800b8000390000000000ab04350000002009900039000000000a91034f000000000a0a043b0000ffff00a0008c000000bc0000213d000000a00b8000390000000000ab04350000002009900039000000000a91034f000000000a0a043b00000a0900a0009c000000bc0000213d000000c00b8000390000000000ab04350000002009900039000000000a91034f000000000a0a043b0000ffff00a0008c000000bc0000213d000000e00b8000390000000000ab04350000002009900039000000000a91034f000000000a0a043b0000ffff00a0008c000000bc0000213d000001000b8000390000000000ab04350000002009900039000000000a91034f000000000a0a043b0000ffff00a0008c000000bc0000213d000001200b8000390000000000ab04350000002009900039000000000a91034f000000000a0a043b00000a0900a0009c000000bc0000213d000001400b8000390000000000ab04350000002009900039000000000a91034f000000000a0a043b00000a0900a0009c000000bc0000213d000001600b8000390000000000ab04350000002009900039000000000a91034f000000000a0a043b00000a0f00a0009c000000bc0000213d000001800b8000390000000000ab04350000002009900039000000000a91034f000000000a0a043b00000a0900a0009c000000bc0000213d000001a00b8000390000000000ab04350000002009900039000000000a91034f000000000a0a043b00000a0900a0009c000000bc0000213d000001c00b8000390000000000ab04350000002009900039000000000a91034f000000000a0a043b00000000000a004b000000000b000039000000010b00c0390000000000ba004b000000bc0000c13d000001e00b8000390000000000ab04350000002009900039000000000991034f000000000909043b00000a1600900198000000bc0000c13d000002000a80003900000000009a0435000000000087043500000000056504360000024002200039000000000042004b00000c810000413d000002570000013d000000a006000039002300240030009200000d1f0000013d00000026020000290000000000a2043500000000068604360000002004400039000000240040006c0000054b0000813d000000000241034f000000000202043b00000a0f0020009c000000bc0000213d0000002502200029000000230520006900000a120050009c000000bc0000213d000000400050008c000000bc0000413d000000400800043d00000a130080009c000000e00000213d0000004005800039000000400050043f0000002405200039000000000751034f000000000707043b00000a0f0070009c000000bc0000213d0000000007780436002600000007001d0000002005500039000000000551034f000000000505043b00000a0f0050009c000000bc0000213d00000000022500190000004305200039000000000035004b000000000700001900000a110700804100000a1105500197000000000005004b000000000900001900000a110900404100000a110050009c000000000907c019000000000009004b000000bc0000c13d0000002405200039000000000551034f000000000c05043b00000a0f00c0009c000000e00000213d0000000505c002100000003f0550003900000a1005500197000000400a00043d000000000b5a00190000000000ab004b0000000005000039000000010500403900000a0f00b0009c000000e00000213d0000000100500190000000e00000c13d0000004000b0043f0000000000ca0435000000440b200039000000e002c000c9000000000cb2001900000000003c004b000000bc0000213d0000000000cb004b00000d190000813d000000000d0a00190000000002b3004900000a120020009c000000bc0000213d000000e00020008c000000bc0000413d000000400e00043d00000a1300e0009c000000e00000213d0000004002e00039000000400020043f0000000002b1034f000000000202043b00000a0e0020009c000000bc0000213d000000000f2e0436000000400200043d00000a140020009c000000e00000213d000000c005200039000000400050043f0000002005b00039000000000751034f000000000707043b00000a090070009c000000bc0000213d00000000077204360000002005500039000000000951034f000000000909043b00000a090090009c000000bc0000213d00000000009704350000002005500039000000000751034f000000000707043b0000ffff0070008c000000bc0000213d000000400920003900000000007904350000002005500039000000000751034f000000000707043b00000a090070009c000000bc0000213d000000600920003900000000007904350000002005500039000000000751034f000000000707043b00000a090070009c000000bc0000213d000000800920003900000000007904350000002005500039000000000551034f000000000505043b000000000005004b0000000007000039000000010700c039000000000075004b000000bc0000c13d000000200dd00039000000a007200039000000000057043500000000002f04350000000000ed0435000000e00bb000390000000000cb004b00000d620000413d00000d190000013d000000400100043d00000a7c02000041000000000021043500000004021000390000002603000029000005ea0000013d0000000002000019002300000002001d0000000502200210002200000002001d0000001f012000290000000201100367000000000101043b002600000001001d00000a0e0010009c000000bc0000213d000000400100043d00000a130010009c000000e00000213d0000004002100039000000400020043f0000002002100039000000000002043500000000000104350000002601000029000000000010043f0000000601000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000400300043d00000a130030009c000000e00000213d000000000101043b0000004002300039000000400020043f000000000101041a00000a1602100197002500000003001d0000000002230436000000e001100270002100000002001d002400000001001d000000000012043500000a84010000410000000000100443000000000100041400000a090010009c00000a0901008041000000c00110021000000a85011001c70000800b020000392820281b0000040f000000010020019000001a910000613d000000000101043b00240024001000740000175c0000413d00000a8b0100004100000000001004430000000001000412000000040010044300000040010000390000002400100443000000000100041400000a090010009c00000a0901008041000000c00110021000000a8c011001c700008005020000392820281b0000040f000000010020019000001a910000613d000000000101043b00000a0901100197000000240010006b00000dff0000813d0000002302000029000000250500002900000ef70000013d0000002601000029000000000010043f0000000701000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f00000001002001900000002505000029000000bc0000613d000000400200043d00000a0c0020009c000000e00000213d000000000101043b0000006003200039000000400030043f000000000301041a000000400120003900000a8d003001980000000004000039000000010400c039000000000041043500000a0e013001970000000006120436000000a003300270000000ff0330018f000000000036043500000ef60000613d000000000001004b00000ef60000613d000000400100043d00000a130010009c000000e00000213d0000004003100039000000400030043f0000002003100039000000000003043500000000000104350000000002020433000000400b00043d00000a8e0100004100000000051b0436000000000100041400000a0e02200197000000040020008c002600000006001d00000e370000c13d0000000103000031000000a00030008c000000a004000039000000000403401900000e660000013d001d00000005001d00000a0900b0009c00000a090300004100000000030b4019000000400330021000000a090010009c00000a0901008041000000c001100210000000000131019f00000a4e011001c7001e00000002001d00240000000b001d2820281b0000040f000000240b000029000000600310027000000a0903300197000000a00030008c000000a0040000390000000004034019000000e00640019000000000056b001900000e530000613d000000000701034f00000000080b0019000000007907043c0000000008980436000000000058004b00000e4f0000c13d0000001f0740019000000e600000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000100000003001f0000000100200190000013a40000613d00000026060000290000001e020000290000001d050000290000001f01400039000001e00110018f000000000ab1001900000000001a004b0000000001000039000000010100403900000a0f00a0009c000000e00000213d0000000100100190000000e00000c13d0000004000a0043f000000a00030008c000000bc0000413d00000000010b043300000a8f0010009c000000bc0000213d0000008001b00039000000000101043300000a8f0010009c000000bc0000213d000000000805043300000a110080009c000012760000813d0000006001b00039000000000701043300000a900100004100000000001a04350000000001000414000000040020008c000000200400003900000eb40000613d001d00000008001d001e00000007001d00000a0900a0009c00000a090300004100000000030a4019000000400330021000000a090010009c00000a0901008041000000c001100210000000000131019f00000a4e011001c700240000000a001d2820281b0000040f000000240a000029000000600310027000000a0903300197000000200030008c00000020040000390000000004034019000000200640019000000000056a001900000ea10000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000058004b00000e9d0000c13d0000001f0740019000000eae0000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000100000003001f0000000100200190000013b00000613d00000026060000290000001e070000290000001d080000290000001f01400039000000600110018f0000000001a1001900000a0f0010009c000000e00000213d000000400010043f000000200030008c000000bc0000413d00000000020a0433000000ff0020008c000000bc0000213d0000000003060433000000ff0330018f0000000003230019000000ff0030008c0000175c0000213d000000240230008c00000ed80000213d000000010200003900000ed10000613d00000024033000890000000a04000039000000010030019000000000054400a9000000010400603900000000022400a90000000103300272000000000405001900000eca0000c13d000000000008004b00000f040000613d00000000038200a900000000048300d9000000000024004b00000ee60000613d0000175c0000013d0000004d0020008c0000175c0000213d00000001030000390000000a04000039000000010020019000000000054400a9000000010400603900000000033400a90000000102200272000000000405001900000edc0000c13d000000000003004b00001f160000613d00000000033800d900000a160030009c0000172c0000213d00000a130010009c0000002505000029000000e00000213d0000004002100039000000400020043f00000a09027001970000002004100039000000000024043500000000003104350000002103000029000000000303043300000a0903300197000000000032004b00000000050180190000002302000029000000800100043d000000000021004b00001e580000a13d0000002201000029000000a0011000390000000000510435000000800100043d000000000021004b00001e580000a13d0000000102200039000000200020006c00000daf0000413d0000105d0000013d000000000300001900000a130010009c000000250500002900000eeb0000a13d000000e00000013d000000400100043d00000a3c02000041000000000021043500000004021000390000000000420435000005eb0000013d00000025010000290000000405100039000000140100002900120020001000920000001201200360000000000401043b0000000003000031001300000005001d00000000015300490000001f0110008a00000a110510019700000a1106400197000000000756013f000000000056004b000000000600001900000a1106004041000000000014004b000000000800001900000a110800804100000a110070009c000000000608c019000000000006004b000000bc0000c13d0000001304400029000000000642034f000000000606043b001100000006001d00000a0f0060009c000000bc0000213d0000001106000029000000060660021000000000066300490000002004400039000000000064004b000000000700001900000a110700204100000a110660019700000a1104400197000000000864013f000000000064004b000000000400001900000a110400404100000a110080009c000000000407c019000000000004004b000000bc0000c13d0000001204000029000000200640008a000000000462034f000000000404043b00000a1107400197000000000857013f000000000057004b000000000700001900000a1107004041000000000014004b000000000900001900000a110900804100000a110080009c000000000709c019000000000007004b000000bc0000c13d0000001307400029000000000472034f000000000404043b00000a0f0040009c000000bc0000213d00000000084300490000002007700039000000000087004b000000000900001900000a110900204100000a110880019700000a1107700197000000000a87013f000000000087004b000000000700001900000a110700404100000a1100a0009c000000000709c019000000000007004b000000bc0000c13d000000200660008a000000000662034f000000000606043b00000a1107600197000000000857013f000000000057004b000000000500001900000a1105004041000000000016004b000000000100001900000a110100804100000a110080009c000000000501c019000000000005004b000000bc0000c13d0000001301600029000000000512034f000000000605043b00000a0f0060009c000000bc0000213d0000000005630049000000200710003900000a110150019700000a1108700197000000000918013f000000000018004b000000000100001900000a1101004041000000000057004b000000000500001900000a110500204100000a110090009c000000000105c019000000000001004b000000bc0000c13d0000001f0160003900000abd011001970000003f0110003900000abd05100197000000400100043d0000000005510019000000000015004b0000000008000039000000010800403900000a0f0050009c000000e00000213d0000000100800190000000e00000c13d000000400050043f00000000056104360000000008760019000000000038004b000000bc0000213d000000000772034f00000abd086001980000001f0960018f000000000385001900000fa10000613d000000000a07034f000000000b05001900000000ac0a043c000000000bcb043600000000003b004b00000f9d0000c13d000000000009004b00000fae0000613d000000000787034f0000000308900210000000000903043300000000098901cf000000000989022f000000000707043b0000010008800089000000000787022f00000000078701cf000000000797019f0000000000730435000000000365001900000000000304350000002203000029000000000303043300000a0903300197000000000043004b000015e40000813d000000400100043d0000002402100039000000000042043500000a9e0200004100000000002104350000000402100039000015f00000013d000000000900001900000002010003670000002602100360000000000302043b0000000002000031000000200420006a000000230440008a00000a110540019700000a1106300197000000000756013f000000000056004b000000000500001900000a1105004041000000000043004b000000000400001900000a110400804100000a110070009c000000000504c019000000000005004b000000bc0000c13d0000002604300029000000000341034f000000000303043b00000a0f0030009c000000bc0000213d00000006053002100000000005520049000000200440003900000a110650019700000a1107400197000000000867013f000000000067004b000000000600001900000a1106004041000000000054004b000000000500001900000a110500204100000a110080009c000000000605c019000000000006004b000000bc0000c13d000000000039004b00001e580000813d00000006039002100000000003340019000000000232004900000a120020009c000000bc0000213d000000400020008c000000bc0000413d000000400400043d00000a130040009c000000e00000213d0000004002400039000000400020043f000000000231034f000000000202043b00000a0e0020009c000000bc0000213d00000000052404360000002002300039000000000121034f000000000101043b00000a160010009c000000bc0000213d002500000005001d0000000000150435000000400300043d00000a130030009c000000e00000213d0000004002300039000000400020043f002200000003001d00000000021304360000001f01000029002100000002001d0000000000120435000000000104043300000a0e01100197000000000010043f0000000601000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c70000801002000039002300000009001d002400000004001d2820281b0000040f000000240400002900000001002001900000002505000029000000bc0000613d0000002202000029000000000202043300000a160220019700000021030000290000000003030433000000e003300210000000000223019f000000000101043b000000000021041b00000000020404330000000001050433000000400300043d00000020043000390000001e05000029000000000054043500000a1601100197000000000013043500000a090030009c00000a09030080410000004001300210000000000300041400000a090030009c00000a0903008041000000c003300210000000000113019f00000a19011001c700000a0e052001970000800d02000039000000020300003900000aa704000041282028160000040f00000023090000290000000100200190000000bc0000613d00000001099000390000001d0090006c00000fbd0000413d00000b230000013d0000001f05000029000000000623004900000a120060009c000000bc0000213d000000400060008c000000bc0000413d000000400600043d00000a130060009c000000e00000213d0000004007600039000000400070043f000000000721034f000000000707043b00000a0f0070009c000000bc0000213d00000000077604360000002008200039000000000881034f000000000808043b00000a0e0080009c000000bc0000213d0000002005500039000000000087043500000000006504350000004002200039000000000042004b000010420000413d000005780000013d000000400100043d000008d00000013d0000000002000019000010660000013d00000026020000290000000102200039000000800100043d000000000012004b00000a270000813d002600000002001d0000000501200210000000a001100039002400000001001d000000000101043300000a0e01100197002500000001001d000000000010043f0000000c01000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b000000000301041a000000000003004b000010610000613d0000000b01000039000000000201041a000000000002004b0000175c0000613d000000010130008a000000000023004b0000109f0000613d000000000012004b00001e580000a13d00000aa90130009a00000aa90220009a000000000202041a000000000021041b000000000020043f0000000c01000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c70000801002000039002100000003001d2820281b0000040f00000021030000290000000100200190000000bc0000613d000000000101043b000000000031041b0000000b01000039000000000301041a000000000003004b00001b2c0000613d000000010130008a00000aa90230009a000000000002041b0000000b02000039000000000012041b0000002501000029000000000010043f0000000c01000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b000000000001041b000000800100043d000000260010006c00001e580000a13d00000024010000290000000001010433000000000200041400000a0e0510019700000a090020009c00000a0902008041000000c00120021000000a20011001c70000800d02000039000000020300003900000aab04000041282028160000040f0000000100200190000010610000c13d000000bc0000013d0000002501000029000000200010008c000000bc0000413d000000240100002900000020021000390000000201000367000000000221034f000000000202043b00000a0f0020009c000000bc0000213d00000023022000290000001f03200039000000260030006c000000bc0000813d000000000321034f000000000403043b00000a0f0040009c000000e00000213d00000005034002100000003f0330003900000a1003300197000000400500043d0000000003350019002500000005001d000000000053004b0000000005000039000000010500403900000a0f0030009c000000e00000213d0000000100500190000000e00000c13d000000400030043f00000025030000290000000003430436002100000003001d000000200220003900000060034000c90000000003230019000000260030006c000000bc0000213d000000000004004b00000aaa0000613d0000002504000029000000260520006900000a120050009c000000bc0000213d000000600050008c000000bc0000413d000000400500043d00000a0c0050009c000000e00000213d0000006006500039000000400060043f000000000621034f000000000606043b00000a0e0060009c000000bc0000213d00000000076504360000002006200039000000000861034f000000000808043b00000a160080009c000000bc0000213d00000000008704350000002006600039000000000661034f000000000606043b00000a090060009c000000bc0000213d00000020044000390000004007500039000000000067043500000000005404350000006002200039000000000032004b000010ef0000413d00000025010000290000000001010433000000000001004b00000aaa0000613d002600000000001d0000111c0000013d0000002602000029002600010020003d00000025010000290000000001010433000000260010006b00000aaa0000813d000000260100002900000005011002100000002101100029002400000001001d0000000001010433000000000101043300000a0e01100197000000000010043f0000000701000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000400200043d00000a0c0020009c000000e00000213d000000000101043b0000006003200039000000400030043f000000000101041a000000400320003900000a8d001001980000000004000039000000010400c039000000000043043500000a0e031001970000000002320436000000a003100270000000ff0430018f0000000000420435000017210000613d00000025020000290000000002020433000000260020006c00001e580000a13d00000aa50110019700000aa60010009c0000175c0000213d000000240100002900000000010104330000002002100039000000000202043300000a16022001970000001203300039000000ff0430018f000000240340008c000011630000213d00000001030000390000115c0000613d00000024044000890000000a05000039000000010040019000000000065500a9000000010500603900000000033500a900000001044002720000000005060019000011550000c13d000000000002004b000011dd0000613d00000000042300a900000000022400d9000000000032004b000011710000613d0000175c0000013d0000004d0030008c0000175c0000213d00000001040000390000000a05000039000000010030019000000000065500a9000000010500603900000000044500a900000001033002720000000005060019000011670000c13d000000000004004b00001f160000613d00000000044200d9002200000004001d00000a160040009c0000172b0000213d00000040021000390000000002020433002300000002001d000000000101043300000a0e01100197000000000010043f0000000601000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000230200002900000a0902200197000000000101043b000000000101041a000000e001100270000000000012004b000011160000413d00000025010000290000000001010433000000260010006c00001e580000a13d000000400100043d002300000001001d00000a130010009c000000e00000213d000000240100002900000000010104330000004001100039000000000101043300000023030000290000004002300039000000400020043f0000002202000029000000000223043600000a0901100197002000000002001d000000000012043500000025010000290000000001010433000000260010006c00001e580000a13d00000024010000290000000001010433000000000101043300000a0e01100197000000000010043f0000000601000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d0000002302000029000000000202043300000a160220019700000020030000290000000003030433000000e003300210000000000223019f000000000101043b000000000021041b00000025010000290000000001010433000000260010006c00001e580000a13d0000002401000029000000000101043300000000020104330000004001100039000000000101043300000a0901100197000000400300043d000000200430003900000000001404350000002201000029000000000013043500000a090030009c00000a09030080410000004001300210000000000300041400000a090030009c00000a0903008041000000c003300210000000000113019f00000a0e0520019700000a19011001c70000800d02000039000000020300003900000aa704000041282028160000040f0000000100200190000011160000c13d000000bc0000013d002200000000001d000011740000013d0000000002000019000011e50000013d0000001d020000290000000102200039000000000012004b000005810000813d001d00000002001d0000000502200210000000a00220003900000000030204330000002002300039002000000002001d00000000020204330000000004020433000000000004004b000011e10000613d000000000103043300250a0f0010019b0000000004000019000000050140021000000000011200190000002001100039000000000201043300000020012000390000000006010433000000005106043400000a0901100197000000000305043300000a0903300197000000000031004b00001d950000813d002300000005001d002100000004001d000000000102043300260a0e0010019b002200000006001d0000008001600039002400000001001d000000000101043300000a09011001970000001f0010008c0000139b0000a13d0000002501000029000000000010043f0000000a01000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f00000001002001900000002603000029000000bc0000613d000000000101043b000000000030043f000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f00000026060000290000000100200190000000bc0000613d00000023090000290000000002090433000000200220021000000a4202200197000000000101043b000000000301041a00000a4303300197000000000223019f000000220a0000290000004003a000390000000004030433000000400440021000000a4404400197000000000242019f0000006004a000390000000005040433000000500550021000000a4505500197000000000252019f00000024080000290000000005080433000000700550021000000a4605500197000000000252019f000000a005a000390000000007050433000000000007004b00000a47070000410000000007006019000000000272019f00000000070a043300000a0907700197000000000272019f000000000021041b000000400100043d0000000002710436000000000709043300000a0907700197000000000072043500000000020304330000ffff0220018f00000040031000390000000000230435000000000204043300000a090220019700000060031000390000000000230435000000000208043300000a0902200197000000800310003900000000002304350000000002050433000000000002004b0000000002000039000000010200c039000000a003100039000000000023043500000a090010009c00000a09010080410000004001100210000000000200041400000a090020009c00000a0902008041000000c002200210000000000112019f00000a48011001c70000800d02000039000000030300003900000a49040000410000002505000029282028160000040f0000000100200190000000bc0000613d00000021040000290000000104400039000000200100002900000000020104330000000001020433000000000014004b000011f20000413d000000800100043d000011e10000013d00000a910100004100000000001a043500000a0900a0009c00000a090a0080410000004001a0021000000a4e011001c700002822000104300000000002000019000012850000013d0000002502000029000000010220003900000023010000290000000001010433000000000012004b000006c70000813d002500000002001d00000005012002100000002201100029000000000101043300000a0e01100197002600000001001d000000000010043f0000000301000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b000000000101041a002400000001001d000000000001004b0000127f0000613d0000000201000039000000000201041a000000000002004b0000175c0000613d0000002403000029000000010130008a000000000032004b000012be0000613d000000000012004b00001e580000a13d00000a1a0130009a00000a1a0220009a000000000202041a000000000021041b000000000020043f0000000301000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b0000002402000029000000000021041b0000000201000039000000000301041a000000000003004b00001b2c0000613d000000010130008a00000a1a0230009a000000000002041b0000000202000039000000000012041b0000002601000029000000000010043f0000000301000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b000000000001041b000000400100043d0000002602000029000000000021043500000a090010009c00000a09010080410000004001100210000000000200041400000a090020009c00000a0902008041000000c002200210000000000112019f00000a1b011001c70000800d02000039000000010300003900000a1c04000041282028160000040f00000001002001900000127f0000c13d000000bc0000013d0000001c05000029000000000621004900000a120060009c000000bc0000213d000000800060008c000000bc0000413d000000400600043d00000a130060009c000000e00000213d0000004007600039000000400070043f000000009702043400000a0e0070009c000000bc0000213d0000000007760436000000400800043d00000a0c0080009c000000e00000213d000000600a8000390000004000a0043f000000000909043300000a0e0090009c000000bc0000213d0000000009980436000000400a200039000000000a0a0433000000ff00a0008c000000bc0000213d0000000000a9043500000060092000390000000009090433000000000009004b000000000a000039000000010a00c0390000000000a9004b000000bc0000c13d000000400a80003900000000009a0435000000000087043500000000056504360000008002200039000000000042004b000012e50000413d000001810000013d0000002601000029000000000010043f0000000901000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b000000400200043d00000a130020009c000000e00000213d0000000101100039000000000101041a0000004003200039000000400030043f000000200320003900000000000304350000000000020435000000240000006b000013ce0000c13d000000400200043d001700000002001d00000a130020009c000000e00000213d00000a090110019700000017030000290000004002300039000000400020043f0000000000130435001500000000001d000000000100001900000017020000290000002002200039001600000002001d00000000001204350000002601000029000000000010043f0000000901000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b0000001e020000290000003f0220003900000a1002200197000000400300043d0000000002230019001b00000003001d000000000032004b0000000003000039000000010300403900000a0f0020009c000000e00000213d0000000100300190000000e00000c13d0000000101100039000000000101041a000000400020043f0000001f020000290000001b030000290000000003230436001a00000003001d000000000002004b0000149c0000c13d000000400400043d000000200240003900000a97010000410000000000120435000000170100002900000000010104330000002403400039000000000013043500000016010000290000000001010433000000000001004b0000000001000039000000010100c039000000440340003900000000001304350000004401000039000000000014043500000a7d0040009c000000e00000213d0000008001400039000000400010043f000000c003400039000000800500003900000000005304350000001503000029000000010330018f000000a0054000390000000000350435000000180300002900000000003104350000010003400039000000000504043300000000005304350000012003400039000000000005004b000013890000613d000000000600001900000000073600190000000008260019000000000808043300000000008704350000002006600039000000000056004b000013820000413d000000000235001900000000000204350000001f0550003900000abd0550019700000000033500190000000005130049000000e00440003900000000005404350000001b0400002900000000040404330000000000430435000000050540021000000000055300190000002007500039000000000004004b000016c10000c13d0000000002170049000008ea0000013d000000400200043d0000002403200039000000000013043500000a4a01000041000000000012043500000004012000390000002603000029000000000031043500001d9c0000013d0000001f0530018f00000a0b06300198000000400200043d0000000004620019000013bb0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000013ab0000c13d000013bb0000013d0000001f0530018f00000a0b06300198000000400200043d0000000004620019000013bb0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000013b70000c13d000000000005004b000013c80000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000a090020009c00000a09020080410000004002200210000000000112019f000028220001043000000024020000290000000301200210000000200110008900000a270310021f000000040020008c00000a270300804100000002050003670000002101500360000000000401043b000000040620008c000000bc0000413d00000024010000290000001b0110003900000abd011001970000003f0110003900000abd02100197000000400100043d0000000002210019000000000012004b0000000007000039000000010700403900000a0f0020009c000000e00000213d0000000100700190000000e00000c13d000000400020043f00000000026104360000002009000029000000000090007c000000bc0000213d00000021070000290000000407700039000000000775034f00000abd086001980000001f0660018f0000000005820019000013f90000613d000000000907034f000000000a020019000000009b09043c000000000aba043600000000005a004b000013f50000c13d000000000334016f000000000006004b000014070000613d000000000487034f0000000306600210000000000705043300000000076701cf000000000767022f000000000404043b0000010006600089000000000464022f00000000046401cf000000000474019f000000000045043500000024041000290000001c04400039000000000004043500000a970030009c000015f60000613d00000a980030009c00001ded0000c13d000000000101043300000a120010009c000000bc0000213d000000200010008c000000bc0000413d000000400100043d001700000001001d00000a130010009c000000e00000213d00000000010204330000132f0000013d001f00c00030003d000014200000013d00000020044000390000000000a904350000000000840435000000200050006c000001aa0000813d000000005205043400000a0f0020009c000000bc0000213d00000021022000290000001f0620006900000a120060009c000000bc0000213d000000400060008c000000bc0000413d000000400800043d00000a130080009c000000e00000213d0000004006800039000000400060043f0000002006200039000000000606043300000a0f0060009c000000bc0000213d00000000096804360000004006200039000000000606043300000a0f0060009c000000bc0000213d00000000022600190000003f06200039000000000016004b000000000700001900000a110700804100000a1106600197000000000006004b000000000a00001900000a110a00404100000a110060009c000000000a07c01900000000000a004b000000bc0000c13d0000002006200039000000000c06043300000a0f00c0009c000000e00000213d0000000506c002100000003f0660003900000a1006600197000000400a00043d00000000066a00190000000000a6004b0000000007000039000000010700403900000a0f0060009c000000e00000213d0000000100700190000000e00000c13d000000400060043f0000000000ca0435000000400b200039000000e002c000c9000000000cb2001900000000001c004b000000bc0000213d0000000000cb004b0000141b0000813d000000000d0a00190000000002b1004900000a120020009c000000bc0000213d000000e00020008c000000bc0000413d000000400e00043d00000a1300e0009c000000e00000213d0000004002e00039000000400020043f00000000620b043400000a0e0020009c000000bc0000213d000000000f2e0436000000400200043d00000a140020009c000000e00000213d000000c007200039000000400070043f000000000606043300000a090060009c000000bc0000213d00000000066204360000004007b00039000000000707043300000a090070009c000000bc0000213d00000000007604350000006006b0003900000000060604330000ffff0060008c000000bc0000213d000000400720003900000000006704350000008006b00039000000000606043300000a090060009c000000bc0000213d00000060072000390000000000670435000000a006b00039000000000606043300000a090060009c000000bc0000213d00000080072000390000000000670435000000c006b000390000000006060433000000000006004b0000000007000039000000010700c039000000000076004b000000bc0000c13d000000200dd00039000000a007200039000000000067043500000000002f04350000000000ed0435000000e00bb000390000000000cb004b0000145e0000413d0000141b0000013d000000600200003900000000030000190000001a050000290000001e06000029000000000453001900000000002404350000002003300039000000000063004b000014a00000413d00190a290010019b00000000040000190000001d0040006c00001e580000813d002400000004001d00000006014002100000001c011000290000000202000367000000000112034f000000000101043b002100000001001d00000a0e0010009c000000bc0000213d00000024010000290000000501100210002000000001001d001e00220010002d0000001e01200360000000000101043b0000000003000031000000220430006a0000009f0440008a00000a110540019700000a1106100197000000000756013f000000000056004b000000000500001900000a1105004041000000000041004b000000000600001900000a110600804100000a110070009c000000000506c019000000000005004b000000bc0000c13d00000022051000290000004006500039000000000662034f000000000606043b00000000075300490000001f0770008a00000a110870019700000a1109600197000000000a89013f000000000089004b000000000800001900000a1108004041000000000076004b000000000700001900000a110700804100000a1100a0009c000000000807c019000000000008004b000000bc0000c13d0000000005560019000000000652034f000000000606043b002500000006001d00000a0f0060009c000000bc0000213d000000250630006a0000002005500039000000000065004b000000000700001900000a110700204100000a110660019700000a1105500197000000000865013f000000000065004b000000000500001900000a110500404100000a110080009c000000000507c019000000000005004b000000bc0000c13d0000002505000029000000200050008c000015190000a13d0000002601000029000000000010043f0000000a01000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b0000002102000029000000000020043f000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b000000000101041a000000700110027000000a0901100197000000250010006b0000172e0000213d0000000003000031000000230130006a00000002020003670000001e05200360000000c30410008a000000000105043b000000000041004b000000000500001900000a110500804100000a110440019700000a1106100197000000000746013f000000000046004b000000000400001900000a110400404100000a110070009c000000000405c019000000000004004b000000bc0000c13d00000022011000290000002004100039000000000442034f000000000404043b00000000051300490000001f0550008a00000a110650019700000a1107400197000000000867013f000000000067004b000000000600001900000a1106004041000000000054004b000000000500001900000a110500804100000a110080009c000000000605c019000000000006004b000000bc0000c13d0000000001140019000000000412034f000000000504043b00000a0f0050009c000000bc0000213d0000000004530049000000200610003900000a110140019700000a1107600197000000000817013f000000000017004b000000000100001900000a1101004041000000000046004b000000000400001900000a110400204100000a110080009c000000000104c019000000000001004b000000bc0000c13d0000001f0150003900000abd011001970000003f0110003900000abd04100197000000400100043d0000000004410019000000000014004b0000000007000039000000010700403900000a0f0040009c000000e00000213d0000000100700190000000e00000c13d000000400040043f00000000045104360000000007650019000000000037004b000000bc0000213d000000000362034f00000abd065001980000000002640019000015690000613d000000000703034f0000000008040019000000007907043c0000000008980436000000000028004b000015650000c13d0000001f07500190000015760000613d000000000363034f0000000306700210000000000702043300000000076701cf000000000767022f000000000303043b0000010006600089000000000363022f00000000036301cf000000000373019f000000000032043500000000025400190000000000020435000000190200002900000ab00020009c000015820000c13d0000000002010433000000200020008c000016e00000c13d0000000002040433000004000220008a00000a830020009c000017340000813d0000002601000029000000000010043f0000000a01000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b0000002102000029000000000020043f000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000400200043d00000a140020009c000000e00000213d000000000101043b000000c003200039000000400030043f000000000101041a000000a00320003900000a88001001980000000004000039000000010400c0390000000000430435000000700310027000000a09033001970000008004200039000000000034043500000040031002700000ffff0330018f00000040042000390000000000340435000000200310027000000a09033001970000002004200039000000000034043500000a090310019700000000003204350000006003200039000000500110027000000a09021001970000000000230435000015cc0000c13d0000002601000029000000000010043f0000000901000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b000000000101041a000000d80110027000000a0902100197000000400100043d000000200310003900000000002304350000002002000039000000000021043500000a130010009c000000e00000213d0000004002100039000000400020043f0000001b0300002900000000020304330000002404000029000000000042004b00001e580000a13d00000020050000290000001a0250002900000000001204350000000001030433000000000041004b00001e580000a13d00000001044000390000001f0040006c000014a70000413d0000135d0000013d000000210300002900000000030304330000ffff0330018f000000110030006c0000160d0000813d000000400100043d0000002402100039000000000032043500000a9d02000041000000000021043500000004021000390000001103000029000000000032043500000a090010009c00000a0901008041000000400110021000000a41011001c70000282200010430000000000301043300000a120030009c000000bc0000213d000000400030008c000000bc0000413d000000400300043d001700000003001d00000a130030009c000000e00000213d00000017040000290000004003400039000000400030043f0000000002020433000000000024043500000040011000390000000001010433000000000001004b0000000002000039000000010200c039001500000002001d000000000021004b000000bc0000c13d000013350000013d0000002003000029000000000303043300000a270330019700000a280030009c000016190000c13d0000000003010433000000200030008c000016e00000c13d0000000003050433000004000330008a00000a830030009c0000170c0000813d0000001401200360000000000101043b00000a0e0010009c000000bc0000213d282025cf0000040f0000001f020000290000000002020433002200000002001d0000002602000029000000000020043f0000000502000039000000200020043f000600000001001d000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000400200043d002100000002001d00000a130020009c000000e00000213d000000220200002900200a090020019c000000000101043b00000021030000290000004002300039000000400020043f000000000101041a0000002002300039000000e004100270002200000004001d000000000042043500000a1601100197000100000001001d00000000001304350000174e0000c13d000000110000006b000018500000c13d0000001d01000029000000000101043300000a090110019700220a89001000d5001d00000000001d001f00000000001d0000000002000031000000130320006a0000001401000029000000400610008a0000000201000367000000000461034f0000001f0530008a000000000404043b0000001e0300002900000000030304330000ffff03300190002600000000001d000017620000c13d000000000054004b000000000300001900000a110300804100000a110750019700000a1108400197000000000978013f000000000078004b000000000800001900000a110800404100000a110090009c000000000803c019000000000008004b000000bc0000c13d000000170300002900000000030304330000001304400029000000000841034f000000000808043b00000a0f0080009c000000bc0000213d00000000098200490000002004400039000000000094004b000000000a00001900000a110a00204100000a110990019700000a1104400197000000000b94013f000000000094004b000000000400001900000a110400404100000a1100b0009c00000000040ac019000000000004004b000000bc0000c13d000000180400002900000000040404330000ffff0940018f00000000048900a9000000000008004b000016850000613d00000a960880019700000a960a40019700000000088a00d9000000000089004b0000175c0000c13d0000006006600039000000000661034f000000000606043b00000a1108600197000000000978013f000000000078004b000000000700001900000a1107004041000000000056004b000000000500001900000a110500804100000a110090009c000000000705c019000000000007004b000000bc0000c13d0000001306600029000000000561034f000000000505043b00000a0f0050009c000000bc0000213d0000000007520049000000200860003900000a110670019700000a1109800197000000000a69013f000000000069004b000000000600001900000a1106004041000000000078004b000000000700001900000a110700204100000a1100a0009c000000000607c019000000000006004b000000bc0000c13d000000400600043d00000a130060009c000000e00000213d0000004007600039000000400070043f000000200760003900000000000704350000000000060435000000400700043d00000a130070009c000000e00000213d000000190600002900000000060604330000004009700039000000400090043f000000200970003900000000000904350000000000070435000000000005004b00001da40000c13d000000400500043d00000a130050009c000000e00000213d00000a090260019700001de80000013d000000000500001900000000060300190000001b0d000029000016cd0000013d000000000987001900000000000904350000001f0880003900000abd0880019700000000078700190000000105500039000000000045004b000013990000813d0000000008370049000000200880008a00000020066000390000000000860435000000200dd0003900000000080d043300000000980804340000000007870436000000000008004b000016c50000613d000000000a000019000000000b7a0019000000000ca90019000000000c0c04330000000000cb0435000000200aa0003900000000008a004b000016d80000413d000016c50000013d000000400400043d002600000004001d00000a82020000410000000000240435000000040240003900000020030000390000000000320435000000240240003928201fb50000040f0000002602000029000000000121004900000a090010009c00000a090100804100000a090020009c00000a090200804100000060011002100000004002200210000000000121019f00002822000104300000001a05000029000000000621004900000a120060009c000000bc0000213d000000400060008c000000bc0000413d000000400600043d00000a130060009c000000e00000213d0000004007600039000000400070043f000000008702043400000a0e0070009c000000bc0000213d0000000007760436000000000808043300000a0f0080009c000000bc0000213d0000002005500039000000000087043500000000006504350000004002200039000000000042004b000016f40000413d000001d50000013d000000400200043d00000a820300004100000000003204350000000403200039000000200400003900000000004304350000000001010433000000240320003900000000001304350000004403200039000000000001004b000017480000613d000000000400001900000000063400190000000007540019000000000707043300000000007604350000002004400039000000000014004b000017190000413d000017480000013d00000025010000290000002602000029282023c60000040f00000000010104330000000001010433000000400200043d00000a9203000041000000000032043500000a0e01100197000008a70000013d000000400100043d00000a910200004100000ae10000013d000000400100043d00000ab102000041000000000021043500000004021000390000002103000029000005ea0000013d000000400200043d00000a820300004100000000003204350000000403200039000000200500003900000000005304350000000001010433000000240320003900000000001304350000004403200039000000000001004b000017480000613d000000000500001900000000063500190000000007450019000000000707043300000000007604350000002005500039000000000015004b000017410000413d0000001f0410003900000abd04400197000000000131001900000000000104350000004401400039000004750000013d00000a84010000410000000000100443000000000100041400000a090010009c00000a0901008041000000c00110021000000a85011001c70000800b020000392820281b0000040f000000010020019000001a910000613d000000000101043b000000220110006c000017b60000813d00000aaa01000041000000000010043f0000001101000039000000040010043f00000a3d010000410000282200010430000000000054004b000000000700001900000a110700804100000a110850019700000a1109400197000000000a89013f000000000089004b000000000800001900000a110800404100000a1100a0009c000000000807c019000000000008004b000000bc0000c13d0000001308400029000000000781034f000000000707043b00000a0f0070009c000000bc0000213d00000000097200490000002008800039000000000098004b000000000a00001900000a110a00204100000a110990019700000a1108800197000000000b98013f000000000098004b000000000800001900000a110800404100000a1100b0009c00000000080ac019000000000008004b000000bc0000c13d000000110900002900000120089000c9000000000009004b0000178a0000613d00000011098000fa000001200090008c0000175c0000c13d000001e007700039000000000087001a0000175c0000413d00000000078700190000001f0070002a0000175c0000413d0000001f0870002a000000150700002900000000070704330000ffff0970018f00000000078900a9000017990000613d00000000088700d9000000000098004b0000175c0000c13d0000001608000029000000000808043300000a0908800197000000000078001a0000175c0000413d000000000878001a002600000000001d000016570000613d0000000107000029000000700970027000000000079800a900000000088700d9000000000098004b0000175c0000c13d000000000007004b002600000000001d000016570000613d00000000083700a900000000077800d9000000000037004b0000175c0000c13d000000000008004b002600000000001d000016570000613d00260a95008000d500000026038000f900000a950030009c000016570000613d0000175c0000013d000000200010006c0000184b0000a13d000000400200043d0000004403200039000000000013043500000024012000390000002003000029000000000031043500000a8601000041000000000012043500000004012000390000002603000029000000000031043500000a090020009c00000a0902008041000000400120021000000a87011001c700002822000104300000001804000029000000000521004900000a120050009c000000bc0000213d000002400050008c000000bc0000413d000000400500043d00000a130050009c000000e00000213d0000004006500039000000400060043f000000008602043400000a0f0060009c000000bc0000213d0000000006650436000000400700043d00000a150070009c000000e00000213d0000022009700039000000400090043f0000000008080433000000000008004b0000000009000039000000010900c039000000000098004b000000bc0000c13d0000000008870436000000400920003900000000090904330000ffff0090008c000000bc0000213d00000000009804350000006008200039000000000808043300000a090080009c000000bc0000213d000000400970003900000000008904350000008008200039000000000808043300000a090080009c000000bc0000213d00000060097000390000000000890435000000a008200039000000000808043300000a090080009c000000bc0000213d00000080097000390000000000890435000000c00820003900000000080804330000ffff0080008c000000bc0000213d000000a0097000390000000000890435000000e008200039000000000808043300000a090080009c000000bc0000213d000000c0097000390000000000890435000001000820003900000000080804330000ffff0080008c000000bc0000213d000000e0097000390000000000890435000001200820003900000000080804330000ffff0080008c000000bc0000213d00000100097000390000000000890435000001400820003900000000080804330000ffff0080008c000000bc0000213d000001200970003900000000008904350000016008200039000000000808043300000a090080009c000000bc0000213d000001400970003900000000008904350000018008200039000000000808043300000a090080009c000000bc0000213d00000160097000390000000000890435000001a008200039000000000808043300000a0f0080009c000000bc0000213d00000180097000390000000000890435000001c008200039000000000808043300000a090080009c000000bc0000213d000001a0097000390000000000890435000001e008200039000000000808043300000a090080009c000000bc0000213d000001c009700039000000000089043500000200082000390000000008080433000000000008004b0000000009000039000000010900c039000000000098004b000000bc0000c13d000001e00970003900000000008904350000022008200039000000000808043300000a1600800198000000bc0000c13d00000200097000390000000000890435000000000076043500000000045404360000024002200039000000000032004b000017c90000413d000002000000013d0000002101000029000000000101043300010a160010019b000000110000006b000016440000613d00000002010003670000001402100360000000000202043b000800000002001d00000a0e0020009c000000bc0000213d0000001202100360000000000302043b0000000002000031000000250420006a000000230440008a00000a110540019700000a1106300197000000000756013f000000000056004b000000000500001900000a1105004041000000000043004b000000000400001900000a110400804100000a110070009c000000000504c019000000000005004b000000bc0000c13d0000001303300029000000000131034f000000000101043b000c00000001001d00000a0f0010009c000000bc0000213d0000000c0100002900000006011002100000000001120049000000200530003900000a110210019700000a1103500197000000000423013f000000000023004b000000000200001900000a1102004041000b00000005001d000000000015004b000000000100001900000a110100204100000a110040009c000000000201c019000000000002004b000000bc0000c13d0000000c0000006b001d00000000001d001f00000000001d002200000000001d0000164a0000613d002100000000001d001f00000000001d001d00000000001d002200000000001d0000188f0000013d00000021020000290000000102200039002100000002001d0000000c0020006c0000164a0000813d000000210100002900000006011002100000000b01100029000000000210007900000a120020009c000000bc0000213d000000400020008c000000bc0000413d000000400200043d002500000002001d00000a130020009c000000e00000213d00000025020000290000004002200039000000400020043f0000000202000367000000000312034f000000000303043b00000a0e0030009c000000bc0000213d000000250400002900000000033404360000002001100039000000000112034f000000000101043b001000000003001d00000000001304350000002601000029000000000010043f0000000a01000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b0000002502000029000000000202043300000a0e02200197000000000020043f000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000400200043d002000000002001d00000a140020009c000000e00000213d000000000101043b0000002004000029000000c002400039000000400020043f000000000201041a000000a00140003900000a88002001980000000003000039000000010300c039000000000031043500000a09012001970000000003140436000000700120027000000a09011001970000008005400039001200000005001d0000000000150435000000200120027000000a0901100197000d00000003001d0000000000130435000000500120027000000a09011001970000006003400039000f00000003001d0000000000130435000000400440003900000040022002700000ffff0320018f000e00000004001d0000000000340435000018f80000613d000000000003004b0000190e0000613d0000002502000029000000000202043300000a0e04200197002500000004001d000000080040006c000019100000c13d000000060000006b0000198f0000613d00000010010000290000000001010433000000060300002900001a5d0000013d000000230100002900000000010104330000ffff0110018f00000a89011000d1000000220010002a0000175c0000413d0000001d0200002900000a09022001970000002403000029000000000303043300000a09033001970000000002230019001d00000002001d00000a090020009c0000175c0000213d0000001f0200002900000a090220019700000a8a0020009c0000175c0000213d002200220010002d001f00200020003d0000188a0000013d000000000200001900001a690000013d000000400100043d00000a130010009c000000e00000213d0000004002100039000000400020043f0000002002100039000000000002043500000000000104350000002501000029000000000010043f0000000601000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000400200043d000a00000002001d00000a130020009c000000e00000213d000000000101043b0000000a030000290000004002300039000000400020043f000000000101041a00000a16021001970000000002230436000000e001100270000900000002001d000700000001001d000000000012043500000a84010000410000000000100443000000000100041400000a090010009c00000a0901008041000000c00110021000000a85011001c70000800b020000392820281b0000040f000000010020019000001a910000613d000000000101043b00070007001000740000175c0000413d00000a8b0100004100000000001004430000000001000412000000040010044300000040010000390000002400100443000000000100041400000a090010009c00000a0901008041000000c00110021000000a8c011001c700008005020000392820281b0000040f000000010020019000001a910000613d000000000101043b00000a0901100197000000070010006b00001a530000413d0000002501000029000000000010043f0000000701000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000400200043d00000a0c0020009c000000e00000213d000000000101043b0000006003200039000000400030043f000000000301041a000000400120003900000a8d003001980000000004000039000000010400c039000000000041043500000a0e013001970000000004120436000000a003300270000000ff0330018f000400000004001d000000000034043500001a530000613d000000000001004b00001a530000613d000000400100043d00000a130010009c000000e00000213d0000004003100039000000400030043f0000002003100039000000000003043500000000000104350000000002020433000000400300043d00000a8e01000041000700000003001d0000000001130436000200000001001d000000000100041400000a0e02200197000300000002001d000000040020008c000019910000c13d0000000103000031000000a00030008c000000a0040000390000000004034019000019ba0000013d000000000200001900001a650000013d000000070200002900000a090020009c00000a0902008041000000400220021000000a090010009c00000a0901008041000000c001100210000000000121019f00000a4e011001c700000003020000292820281b0000040f000000600310027000000a0903300197000000a00030008c000000a0040000390000000004034019000000e0064001900000000705600029000019aa0000613d000000000701034f0000000708000029000000007907043c0000000008980436000000000058004b000019a60000c13d0000001f07400190000019b70000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000100000003001f000000010020019000001df00000613d0000001f01400039000001e00110018f0000000702100029000000000012004b00000000010000390000000101004039000500000002001d00000a0f0020009c000000e00000213d0000000100100190000000e00000c13d0000000501000029000000400010043f000000a00030008c000000bc0000413d0000000701000029000000000101043300000a8f0010009c000000bc0000213d00000007010000290000008001100039000000000101043300000a8f0010009c000000bc0000213d00000002010000290000000001010433000200000001001d00000a110010009c00001dfc0000813d000000070100002900000060011000390000000001010433000700000001001d00000a90010000410000000502000029000000000012043500000000010004140000000302000029000000040020008c000000200400003900001a0c0000613d000000050200002900000a090020009c00000a0902008041000000400220021000000a090010009c00000a0901008041000000c001100210000000000121019f00000a4e011001c700000003020000292820281b0000040f000000600310027000000a0903300197000000200030008c0000002004000039000000000403401900000020064001900000000505600029000019fc0000613d000000000701034f0000000508000029000000007907043c0000000008980436000000000058004b000019f80000c13d0000001f0740019000001a090000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000100000003001f000000010020019000001dff0000613d0000001f01400039000000600110018f000000050110002900000a0f0010009c000000e00000213d000000400010043f000000200030008c000000bc0000413d00000005020000290000000002020433000000ff0020008c000000bc0000213d00000004030000290000000003030433000000ff0330018f0000000003230019000000ff0030008c0000175c0000213d000000240230008c00001a320000213d000000010200003900001a2b0000613d00000024033000890000000a04000039000000010030019000000000054400a9000000010400603900000000022400a90000000103300272000000000405001900001a240000c13d000000020000006b00001a8d0000613d00000002032000b900000002043000fa000000000024004b00001a400000613d0000175c0000013d0000004d0020008c0000175c0000213d00000001030000390000000a04000039000000010020019000000000054400a9000000010400603900000000033400a90000000102200272000000000405001900001a360000c13d000000000003004b00001f160000613d00000002033000f900000a160030009c0000172c0000213d00000a130010009c000000e00000213d0000004002100039000000400020043f000000070200002900000a09022001970000002004100039000000000024043500000000003104350000000903000029000000000303043300000a0903300197000000000032004b00000000020100190000000a02004029000a00000002001d000900200020003d0000000901000029000000000101043300000a090010019800001da10000613d0000000a01000029000000000101043300000a160310019800001da10000613d0000001001000029000000000101043300000000023100a900000000033200d9000000000013004b0000175c0000c13d0000000f0100002900000000010104330000000e0300002900000000030304330000ffff0330018f00000a930220012a00000000023200a900000a940220012a0000001d0300002900000a090330019700000a09011001970000000001310019001d00000001001d00000a090010009c0000175c0000213d0000001f0100002900000a09011001970000001203000029000000000303043300000a09033001970000000001130019001f00000001001d00000a090010009c0000175c0000213d0000002001000029000000000101043300000a090110019700000a89011000d1000000000012004b00001a850000413d0000000d01000029000000000101043300000a090110019700000a89011000d1000000000012004b00001a890000a13d000000220010002a0000175c0000413d002200220010002d0000188a0000013d000000220020002a0000175c0000413d002200220020002d0000188a0000013d000000000300001900000a130010009c00001a440000a13d000000e00000013d000000000001042f0000000102000039000000000302041a00000a1703300197000000000113019f000000000012041b0000001f0100002900000a180010009c000000e00000213d0000001f010000290000002002100039001b00000002001d000000400020043f0000000000010435000000400100043d001700000001001d00000a130010009c000000e00000213d00000017030000290000004001300039000000400010043f00000020013000390000001f020000290000000000210435000000230100002900000000001304350000000001020433000000000001004b00001ac10000c13d00000023010000290000000001010433000000000001004b00001b320000c13d0000002501000029000000000101043300000a0e0110019800001abe0000613d0000002602000029000000000202043300000a0d0020019800001abe0000613d0000002402000029000000000202043300000a090020019800001b870000c13d000000400100043d00000a4d0200004100000ae10000013d002100000000001d00001ac90000013d0000002102000029002100010020003d0000001f010000290000000001010433000000210010006b00001b830000813d000000210100002900000005011002100000001b01100029000000000101043300000a0e01100197002000000001001d000000000010043f0000000301000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b000000000101041a002300000001001d000000000001004b00001ac30000613d0000000201000039000000000201041a000000000002004b0000175c0000613d0000002303000029000000010130008a000000000032004b00001b050000613d000000000012004b00001e580000a13d000000230100002900000a1a0110009a00000a1a0220009a000000000202041a000000000021041b000000000020043f0000000301000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b0000002302000029000000000021041b0000000201000039000000000101041a002300000001001d000000000001004b00001b2c0000613d0000002301000029000000010110008a000000230200002900000a1a0220009a000000000002041b0000000202000039000000000012041b0000002001000029000000000010043f0000000301000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b000000000001041b000000400100043d0000002002000029000000000021043500000a090010009c00000a09010080410000004001100210000000000200041400000a090020009c00000a0902008041000000c002200210000000000112019f00000a1b011001c70000800d02000039000000010300003900000a1c04000041282028160000040f000000010020019000001ac30000c13d000000bc0000013d00000aaa01000041000000000010043f0000003101000039000000040010043f00000a3d0100004100002822000104300000002301000029001f00200010003d002000000000001d000000200100002900000005011002100000001f01100029000000000101043300210a0e0010019c00001b800000613d0000002101000029000000000010043f0000000301000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b000000000101041a000000000001004b00001b670000c13d0000000201000039000000000101041a00000a0f0010009c000000e00000213d00000001021000390000000203000039000000000023041b00000a1d0110009a0000002102000029000000000021041b000000000103041a001b00000001001d000000000020043f0000000301000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b0000001b02000029000000000021041b000000400100043d0000002102000029000000000021043500000a090010009c00000a09010080410000004001100210000000000200041400000a090020009c00000a0902008041000000c002200210000000000112019f00000a1b011001c70000800d02000039000000010300003900000a1e04000041282028160000040f0000000100200190000000bc0000613d0000002002000029002000010020003d00000023010000290000000001010433000000200010006b00001b350000413d00001ab20000013d000000400100043d00000aa20200004100000ae10000013d00000017010000290000000001010433002300000001001d00001aae0000013d000000a00010043f0000002601000029000000000101043300000a0d01100197000000800010043f0000002401000029000000000101043300000a0901100197000000c00010043f000000400100043d00000a180010009c000000e00000213d0000002002100039000000400020043f000000000001043500000022010000290000000001010433000000000001004b00001e0b0000c13d0000001d010000290000000001010433000000000001004b00001be90000613d002600000000001d000000260100002900000005011002100000001c01100029000000000101043300000020021000390000000002020433002400000002001d000000000101043300000a0e01100197002500000001001d000000000010043f0000000701000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b000000000201041a00000a2202200197000000240600002900000020036000390000000004030433000000a00440021000000a2304400197000000000242019f00000040046000390000000005040433000000000005004b00000a24050000410000000005006019000000000252019f000000000506043300000a0e05500197000000000252019f000000000021041b000000400100043d00000000025104360000000003030433000000ff0330018f00000000003204350000000002040433000000000002004b0000000002000039000000010200c0390000004003100039000000000023043500000a090010009c00000a09010080410000004001100210000000000200041400000a090020009c00000a0902008041000000c002200210000000000112019f00000a25011001c70000800d02000039000000020300003900000a26040000410000002505000029282028160000040f0000000100200190000000bc0000613d0000002602000029002600010020003d0000001d010000290000000001010433000000260010006b00001b9f0000413d00000019010000290000000001010433000000000001004b00001cb10000613d002400000000001d0000002401000029000000050110021000000018011000290000000001010433000000001201043400250a0f0020019c00001e5e0000613d0000000001010433002600000001001d0000016001100039002200000001001d000000000101043300000a090110019800001e5e0000613d00000026020000290000020002200039002300000002001d000000000202043300000a270220019700000a280020009c00001e5e0000c13d00000026020000290000006002200039002100000002001d000000000202043300000a0902200197000000000021004b00001e5e0000213d0000002501000029000000000010043f0000000901000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b0000000101100039000000000101041a002000000001001d000000400100043d001f00000001001d000000260200002928201f1f0000040f0000001f02000029000000000121004900000a090020009c00000a090200804100000a090010009c00000a090100804100000040022002100000006001100210000000000121019f000000200200002900000a290020019800001c350000613d000000000200041400000a090020009c00000a0902008041000000c002200210000000000112019f00000a20011001c70000800d02000039000000020300003900000a2a0400004100001c3e0000013d000000000200041400000a090020009c00000a0902008041000000c002200210000000000112019f00000a20011001c70000800d02000039000000020300003900000a2b040000410000002505000029282028160000040f0000000100200190000000bc0000613d0000002501000029000000000010043f0000000901000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d00000026040000290000000032040434000000000002004b000000000101043b000000000201041a00000a2c02200197000000010220c1bf0000000003030433000000080330021000000a2d03300197000000000232019f00000040034000390000000003030433000000180330021000000a2e03300197000000000232019f00000021030000290000000003030433000000380330021000000a2f03300197000000000232019f00000080034000390000000003030433000000580330021000000a3003300197000000000232019f000000a0034000390000000003030433000000780330021000000a3103300197000000000232019f000000c0034000390000000003030433000000880330021000000a3203300197000000000232019f000000e0034000390000000003030433000000a80330021000000a3303300197000000000232019f00000100034000390000000003030433000000b80330021000000a3403300197000000000232019f00000120034000390000000003030433000000c80330021000000a3503300197000000000232019f00000140034000390000000003030433000000d80330021000000a3603300197000000000232019f000000000021041b00000001011000390000002202000029000000000202043300000a0902200197000000000301041a00000a3703300197000000000223019f00000180034000390000000003030433000000200330021000000a3803300197000000000232019f000001a0034000390000000003030433000000600330021000000a3903300197000000000232019f000001c0034000390000000003030433000000800330021000000a3a03300197000000000232019f000001e0034000390000000003030433000000000003004b00000a3b030000410000000003006019000000000232019f00000023030000290000000003030433000000380330027000000a2903300197000000000232019f000000000021041b0000002402000029002400010020003d00000019010000290000000001010433000000240010006b00001bee0000413d001a002d0000002d0000001a010000290000000001010433000000000001004b00001ced0000613d0000001a01000029002300200010003d002600000000001d000000260100002900000005011002100000002301100029000000000101043300000020021000390000000002020433002400000002001d000000000101043300000a0e01100197002500000001001d000000000010043f0000000801000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000240200002900000a0f02200197000000000101043b000000000301041a00000a3e03300197000000000323019f000000000031041b000000400100043d000000000021043500000a090010009c00000a09010080410000004001100210000000000200041400000a090020009c00000a0902008041000000c002200210000000000112019f00000a1b011001c70000800d02000039000000020300003900000a3f040000410000002505000029282028160000040f0000000100200190000000bc0000613d0000002602000029002600010020003d0000001a010000290000000001010433000000260010006b00001cb80000413d000000400100043d001c00000001001d00000a180010009c000000e00000213d0000001c010000290000002002100039001b00000002001d000000400020043f00000000000104350000002e01000029001d00000001001d0000000021010434001e00000002001d000000000001004b00001ea00000613d001f00000000001d00001d020000013d0000001f02000029001f00010020003d0000001f0010006b00001e610000813d0000001f0200002900000005022002100000001e0220002900000000030204330000002002300039002000000002001d00000000020204330000000004020433000000000004004b00001cfe0000613d000000000103043300230a0f0010019b002600000000001d0000002601000029000000050110021000000000011200190000002001100039000000000201043300000020012000390000000001010433002400000001001d000000003101043400000a0901100197002200000003001d000000000303043300000a0903300197000000000031004b00001d950000813d000000000102043300250a0e0010019b00000024010000290000008001100039002100000001001d000000000101043300000a09011001970000001f0010008c00001eb00000a13d0000002301000029000000000010043f0000000a01000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b0000002502000029000000000020043f000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d00000022080000290000000002080433000000200220021000000a4202200197000000000101043b000000000301041a00000a4303300197000000000223019f000000240900002900000040039000390000000004030433000000400440021000000a4404400197000000000242019f00000060049000390000000005040433000000500550021000000a4505500197000000000252019f00000021070000290000000005070433000000700550021000000a4605500197000000000252019f000000a0059000390000000006050433000000000006004b00000a47060000410000000006006019000000000262019f000000000609043300000a0906600197000000000262019f000000000021041b000000400100043d0000000002610436000000000608043300000a0906600197000000000062043500000000020304330000ffff0220018f00000040031000390000000000230435000000000204043300000a090220019700000060031000390000000000230435000000000207043300000a0902200197000000800310003900000000002304350000000002050433000000000002004b0000000002000039000000010200c039000000a003100039000000000023043500000a090010009c00000a09010080410000004001100210000000000200041400000a090020009c00000a0902008041000000c002200210000000000112019f00000a48011001c70000800d02000039000000030300003900000a490400004100000023050000290000002506000029282028160000040f0000000100200190000000bc0000613d0000002603000029002600010030003d000000200100002900000000020104330000000001020433000000260010006b00001d0f0000413d0000001d01000029000000000101043300001cfe0000013d000000400200043d0000002404200039000000000034043500000a400300004100000000003204350000000403200039000000000013043500000a090020009c00000a0902008041000000400120021000000a41011001c70000282200010430000000400100043d00000a9202000041000005e70000013d000000000681034f0000000307500210000000200770008900000a270970021f000000040b50008c00000a2709008041000000000a06043b000000bc0000413d0000001b0650003900000abd066001970000003f0660003900000abd07600197000000400600043d0000000007760019000000000067004b000000000c000039000000010c00403900000a0f0070009c000000e00000213d0000000100c00190000000e00000c13d000000400070043f0000000007b60436000000000c85001900000000002c004b000000bc0000213d0000000402800039000000000821034f00000abd0cb001980000001f0bb0018f0000000002c7001900001dca0000613d000000000d08034f000000000e07001900000000df0d043c000000000efe043600000000002e004b00001dc60000c13d00000000099a016f00000000000b004b00001dd80000613d0000000008c8034f000000030ab00210000000000b020433000000000bab01cf000000000bab022f000000000808043b000001000aa000890000000008a8022f0000000008a801cf0000000008b8019f000000000082043500000000026500190000001c02200039000000000002043500000a970090009c00001eb80000613d00000a980090009c00001ded0000c13d000000000206043300000a120020009c000000bc0000213d000000200020008c000000bc0000413d000000400500043d00000a130050009c000000e00000213d00000000020704330000004006500039000000400060043f0000000000250435000000000600001900001ecb0000013d000000400100043d00000aaf0200004100000ae10000013d0000001f0530018f00000a0b06300198000000400200043d0000000004620019000013bb0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001df70000c13d000013bb0000013d00000a91010000410000000502000029000002070000013d0000001f0530018f00000a0b06300198000000400200043d0000000004620019000013bb0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001e060000c13d000013bb0000013d002600000000001d00001e130000013d0000002602000029002600010020003d00000022010000290000000001010433000000260010006b00001b9a0000813d000000260100002900000005011002100000001e01100029002400000001001d000000000101043300000a0e01100197002500000001001d000000000010043f0000000c01000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b000000000101041a000000000001004b00001e0d0000c13d0000000b01000039000000000101041a00000a0f0010009c000000e00000213d00000001021000390000000b03000039000000000023041b00000a1f0110009a0000002502000029000000000021041b000000000103041a002300000001001d000000000020043f0000000c01000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b0000002302000029000000000021041b00000022010000290000000001010433000000260010006c00001e580000a13d00000024010000290000000001010433000000000200041400000a0e0510019700000a090020009c00000a0902008041000000c00120021000000a20011001c70000800d02000039000000020300003900000a2104000041282028160000040f000000010020019000001e0d0000c13d000000bc0000013d00000aaa01000041000000000010043f0000003201000039000000040010043f00000a3d010000410000282200010430000000400100043d00000a3c02000041000005e70000013d0000001c010000290000000001010433000000000001004b00001ea00000613d002600000000001d000000260100002900000005011002100000001b01100029000000000101043300000020021000390000000002020433002500000002001d000000000101043300000a0f01100197002400000001001d000000000010043f0000000a01000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000250200002900000a0e02200197000000000101043b002500000002001d000000000020043f000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b000000000001041b000000000100041400000a090010009c00000a0901008041000000c00110021000000a20011001c70000800d02000039000000030300003900000a4b0400004100000024050000290000002506000029282028160000040f0000000100200190000000bc0000613d0000002602000029002600010020003d0000001c010000290000000001010433000000260010006b00001e660000413d000000800100043d00000140000004430000016000100443000000a00100043d00000020020000390000018000200443000001a000100443000000c00100043d0000004003000039000001c000300443000001e00010044300000100002004430000000301000039000001200010044300000a4c01000041000028210001042e000000400200043d0000002403200039000000000013043500000a4a01000041000000000012043500000004012000390000002503000029000013a20000013d000000000206043300000a120020009c000000bc0000213d000000400020008c000000bc0000413d000000400500043d00000a130050009c000000e00000213d0000004002500039000000400020043f0000000002070433000000000025043500000040066000390000000006060433000000000006004b0000000007000039000000010700c039000000000076004b000000bc0000c13d000000200550003900000000006504350000001b05000029000000000505043300000a0905500197000000000052004b00001ed50000a13d000000400100043d00000a9c0200004100000ae10000013d000000000006004b00001ede0000c13d0000001a050000290000000005050433000000000005004b00001ede0000613d000000400100043d00000a9b0200004100000ae10000013d00000a09033001970000001d033000290000000003430019000000000032001a0000175c0000413d000000010400002900000a9904400198002500000000001d00001ef60000613d000000000332001900000000024300a900000000044200d9000000000034004b0000175c0000c13d000000000002004b002500000000001d00001ef60000613d0000001c03000029000000000303043300000a0f0330019700250000002300ad00000025022000f9000000000032004b0000175c0000c13d0000001401100360000000000101043b00000a0e0010009c000000bc0000213d000000000010043f0000000801000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000000bc0000613d000000000101043b000000000101041a00000a0f0210019700000022012000b9000000220000006b00001f0f0000613d00000022031000fa000000000023004b0000175c0000c13d000000250010002a0000175c0000413d0000002501100029000000260010002a0000175c0000413d000000060000006b00001f1c0000c13d00000aaa01000041000000000010043f0000001201000039000000040010043f00000a3d010000410000282200010430000000260110002900000006011000fa00000a880000013d0000000043020434000000000003004b0000000003000039000000010300c039000000000331043600000000040404330000ffff0440018f00000000004304350000004003200039000000000303043300000a0903300197000000400410003900000000003404350000006003200039000000000303043300000a0903300197000000600410003900000000003404350000008003200039000000000303043300000a090330019700000080041000390000000000340435000000a00320003900000000030304330000ffff0330018f000000a0041000390000000000340435000000c003200039000000000303043300000a0903300197000000c0041000390000000000340435000000e00320003900000000030304330000ffff0330018f000000e0041000390000000000340435000001000320003900000000030304330000ffff0330018f00000100041000390000000000340435000001200320003900000000030304330000ffff0330018f000001200410003900000000003404350000014003200039000000000303043300000a0903300197000001400410003900000000003404350000016003200039000000000303043300000a0903300197000001600410003900000000003404350000018003200039000000000303043300000a0f0330019700000180041000390000000000340435000001a003200039000000000303043300000a0903300197000001a0041000390000000000340435000001c003200039000000000303043300000a0903300197000001c0041000390000000000340435000001e0032000390000000003030433000000000003004b0000000003000039000000010300c039000001e00410003900000000003404350000020002200039000000000202043300000a2702200197000002000310003900000000002304350000022001100039000000000001042d00000abf0010009c00001f7b0000813d0000006001100039000000400010043f000000000001042d00000aaa01000041000000000010043f0000004101000039000000040010043f00000a3d01000041000028220001043000000ac00010009c00001f860000813d0000004001100039000000400010043f000000000001042d00000aaa01000041000000000010043f0000004101000039000000040010043f00000a3d01000041000028220001043000000ac10010009c00001f910000813d000000c001100039000000400010043f000000000001042d00000aaa01000041000000000010043f0000004101000039000000040010043f00000a3d0100004100002822000104300000001f0220003900000abd022001970000000001120019000000000021004b0000000002000039000000010200403900000a0f0010009c00001fa30000213d000000010020019000001fa30000c13d000000400010043f000000000001042d00000aaa01000041000000000010043f0000004101000039000000040010043f00000a3d010000410000282200010430000000400100043d00000ac20010009c00001faf0000813d0000022002100039000000400020043f000000000001042d00000aaa01000041000000000010043f0000004101000039000000040010043f00000a3d01000041000028220001043000000000430104340000000001320436000000000003004b00001fc10000613d000000000200001900000000052100190000000006240019000000000606043300000000006504350000002002200039000000000032004b00001fba0000413d000000000231001900000000000204350000001f0230003900000abd022001970000000001210019000000000001042d00000020030000390000000004310436000000000302043300000000003404350000004001100039000000000003004b00001fd60000613d00000000040000190000002002200039000000000502043300000a0e0550019700000000015104360000000104400039000000000034004b00001fcf0000413d000000000001042d000000003101043400000a16011001970000000001120436000000000203043300000a09022001970000000000210435000000000001042d0000000043020434000000000003004b0000000003000039000000010300c039000000000331043600000000040404330000ffff0440018f00000000004304350000004003200039000000000303043300000a0903300197000000400410003900000000003404350000006003200039000000000303043300000a0903300197000000600410003900000000003404350000008003200039000000000303043300000a090330019700000080041000390000000000340435000000a00320003900000000030304330000ffff0330018f000000a0041000390000000000340435000000c003200039000000000303043300000a0903300197000000c0041000390000000000340435000000e00320003900000000030304330000ffff0330018f000000e0041000390000000000340435000001000320003900000000030304330000ffff0330018f00000100041000390000000000340435000001200320003900000000030304330000ffff0330018f000001200410003900000000003404350000014003200039000000000303043300000a0903300197000001400410003900000000003404350000016003200039000000000303043300000a0903300197000001600410003900000000003404350000018003200039000000000303043300000a0f0330019700000180041000390000000000340435000001a003200039000000000303043300000a0903300197000001a0041000390000000000340435000001c003200039000000000303043300000a0903300197000001c0041000390000000000340435000001e0032000390000000003030433000000000003004b0000000003000039000000010300c039000001e00410003900000000003404350000020002200039000000000202043300000a2702200197000002000310003900000000002304350000022001100039000000000001042d000000004302043400000a09033001970000000003310436000000000404043300000a09044001970000000000430435000000400320003900000000030304330000ffff0330018f000000400410003900000000003404350000006003200039000000000303043300000a0903300197000000600410003900000000003404350000008003200039000000000303043300000a090330019700000080041000390000000000340435000000a0022000390000000002020433000000000002004b0000000002000039000000010200c039000000a0031000390000000000230435000000c001100039000000000001042d000000004302043400000a0e0330019700000000033104360000000004040433000000ff0440018f000000000043043500000040022000390000000002020433000000000002004b0000000002000039000000010200c039000000400310003900000000002304350000006001100039000000000001042d0009000000000002000500000003001d000900000002001d000000400200043d00000ac00020009c0000231e0000813d0000004003200039000000400030043f00000020032000390000000000030435000000000002043500000a0e01100197000400000001001d000000000010043f0000000601000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000023240000613d000000400300043d00000a130030009c0000231e0000213d000000000101043b0000004002300039000000400020043f000000000101041a00000a1602100197000800000003001d0000000002230436000000e001100270000600000002001d000700000001001d000000000012043500000a84010000410000000000100443000000000100041400000a090010009c00000a0901008041000000c00110021000000a85011001c70000800b020000392820281b0000040f0000000100200190000023260000613d000000000101043b0007000700100074000023270000413d00000a8b0100004100000000001004430000000001000412000000040010044300000040010000390000002400100443000000000100041400000a090010009c00000a0901008041000000c00110021000000a8c011001c700008005020000392820281b0000040f0000000100200190000023260000613d000000000101043b00000a0901100197000000070010006b000020b00000813d00000008050000290000000601000029000000000101043300000a0900100198000021b50000c13d0000232d0000013d0000000401000029000000000010043f0000000701000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f00000001002001900000000805000029000023240000613d000000400200043d00000a0c0020009c0000231e0000213d000000000101043b0000006003200039000000400030043f000000000301041a000000400120003900000a8d003001980000000004000039000000010400c039000000000041043500000a0e013001970000000006120436000000a003300270000000ff0330018f0000000000360435000020e80000613d000000000001004b000020e80000613d000000400100043d00000a130010009c0000231e0000213d0000004003100039000000400030043f0000002003100039000000000003043500000000000104350000000002020433000000400c00043d00000a8e0100004100000000051c0436000000000100041400000a0e02200197000000040020008c000700000006001d000020ed0000c13d0000000103000031000000a00030008c000000a00400003900000000040340190000211d0000013d0000000601000029000000000101043300000a0900100198000021b50000c13d0000232d0000013d000100000005001d00000a0900c0009c00000a090300004100000000030c4019000000400330021000000a090010009c00000a0901008041000000c001100210000000000131019f00000a4e011001c7000200000002001d00030000000c001d2820281b0000040f000000030c000029000000600310027000000a0903300197000000a00030008c000000a00400003900000000040340190000001f0640018f000000e00740019000000000057c00190000210a0000613d000000000801034f00000000090c0019000000008a08043c0000000009a90436000000000059004b000021060000c13d000000000006004b000021170000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0000000100200190000023520000613d0000000706000029000000020200002900000001050000290000001f01400039000001e00110018f000000000bc1001900000000001b004b0000000001000039000000010100403900000a0f00b0009c0000231e0000213d00000001001001900000231e0000c13d0000004000b0043f000000a00030008c000023240000413d00000000010c043300000a8f0010009c000023240000213d0000008001c00039000000000101043300000a8f0010009c000023240000213d000000000805043300000a110080009c0000233e0000813d0000006001c00039000000000701043300000a900100004100000000001b04350000000001000414000000040020008c0000213d0000c13d00000020040000390000216d0000013d000100000008001d000200000007001d00000a0900b0009c00000a090300004100000000030b4019000000400330021000000a090010009c00000a0901008041000000c001100210000000000131019f00000a4e011001c700030000000b001d2820281b0000040f000000030b000029000000600310027000000a0903300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b00190000215a0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000021560000c13d000000000006004b000021670000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00000001002001900000235e0000613d0000000706000029000000020700002900000001080000290000001f01400039000000600110018f0000000001b1001900000a0f0010009c0000231e0000213d000000400010043f000000200030008c000023240000413d00000000020b0433000000ff0020008c000023240000213d0000000003060433000000ff0330018f0000000003230019000000ff0030008c000023270000213d000000240230008c000021820000213d000021910000c13d00000001020000390000219b0000013d0000004d0020008c000023270000213d0000000a040000390000000103000039000000010020019000000000054400a9000000010400603900000000033400a900000001022002720000000004050019000021860000c13d000000000003004b0000234c0000613d00000000033800d9000021a10000013d0000000a0400003900000001020000390000002403300089000000010030019000000000054400a9000000010400603900000000022400a900000001033002720000000004050019000021940000c13d000000000008004b000023150000613d00000000038200a900000000048300d9000000000024004b000023270000c13d00000a160030009c000023450000213d00000a130010009c00000008050000290000231e0000213d0000004002100039000000400020043f00000a09027001970000002004100039000000000024043500000000003104350000000603000029000000000303043300000a0903300197000000000032004b00000000050180190000002001500039000000000101043300000a09001001980000232d0000613d000000000105043300000a16011001980000232d0000613d00080009001000bd000000090000006b000021bf0000613d000000090300002900000008023000f9000000000012004b000023270000c13d000000400100043d00000a130010009c0000231e0000213d0000004002100039000000400020043f000000200210003900000000000204350000000000010435000000050100002900000a0e01100197000500000001001d000000000010043f0000000601000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000023240000613d000000400300043d00000a130030009c0000231e0000213d000000000101043b0000004002300039000000400020043f000000000101041a00000a1602100197000900000003001d0000000002230436000000e001100270000600000002001d000700000001001d000000000012043500000a84010000410000000000100443000000000100041400000a090010009c00000a0901008041000000c00110021000000a85011001c70000800b020000392820281b0000040f0000000100200190000023260000613d000000000101043b0007000700100074000023270000413d00000a8b0100004100000000001004430000000001000412000000040010044300000040010000390000002400100443000000000100041400000a090010009c00000a0901008041000000c00110021000000a8c011001c700008005020000392820281b0000040f0000000100200190000023260000613d000000000101043b00000a0901100197000000070010006b0000220b0000813d00000009050000290000000601000029000000000101043300000a0900100198000023100000c13d000023330000013d0000000501000029000000000010043f0000000701000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f00000001002001900000000905000029000023240000613d000000400200043d00000a0c0020009c0000231e0000213d000000000101043b0000006003200039000000400030043f000000000301041a000000400120003900000a8d003001980000000004000039000000010400c039000000000041043500000a0e013001970000000006120436000000a003300270000000ff0330018f0000000000360435000022430000613d000000000001004b000022430000613d000000400100043d00000a130010009c0000231e0000213d0000004003100039000000400030043f0000002003100039000000000003043500000000000104350000000002020433000000400c00043d00000a8e0100004100000000051c0436000000000100041400000a0e02200197000000040020008c000700000006001d000022480000c13d0000000103000031000000a00030008c000000a0040000390000000004034019000022780000013d0000000601000029000000000101043300000a0900100198000023100000c13d000023330000013d000200000005001d00000a0900c0009c00000a090300004100000000030c4019000000400330021000000a090010009c00000a0901008041000000c001100210000000000131019f00000a4e011001c7000300000002001d00040000000c001d2820281b0000040f000000040c000029000000600310027000000a0903300197000000a00030008c000000a00400003900000000040340190000001f0640018f000000e00740019000000000057c0019000022650000613d000000000801034f00000000090c0019000000008a08043c0000000009a90436000000000059004b000022610000c13d000000000006004b000022720000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00000001002001900000236a0000613d0000000706000029000000030200002900000002050000290000001f01400039000001e00110018f000000000bc1001900000000001b004b0000000001000039000000010100403900000a0f00b0009c0000231e0000213d00000001001001900000231e0000c13d0000004000b0043f000000a00030008c000023240000413d00000000010c043300000a8f0010009c000023240000213d0000008001c00039000000000101043300000a8f0010009c000023240000213d000000000805043300000a110080009c0000233e0000813d0000006001c00039000000000701043300000a900100004100000000001b04350000000001000414000000040020008c000022980000c13d0000002004000039000022c80000013d000200000008001d000300000007001d00000a0900b0009c00000a090300004100000000030b4019000000400330021000000a090010009c00000a0901008041000000c001100210000000000131019f00000a4e011001c700040000000b001d2820281b0000040f000000040b000029000000600310027000000a0903300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000022b50000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000022b10000c13d000000000006004b000022c20000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0000000100200190000023760000613d0000000706000029000000030700002900000002080000290000001f01400039000000600110018f0000000001b1001900000a0f0010009c0000231e0000213d000000400010043f000000200030008c000023240000413d00000000020b0433000000ff0020008c000023240000213d0000000003060433000000ff0330018f0000000003230019000000ff0030008c000023270000213d000000240230008c000022dd0000213d000022ec0000c13d0000000102000039000022f60000013d0000004d0020008c000023270000213d0000000a040000390000000103000039000000010020019000000000054400a9000000010400603900000000033400a900000001022002720000000004050019000022e10000c13d000000000003004b0000234c0000613d00000000033800d9000022fc0000013d0000000a0400003900000001020000390000002403300089000000010030019000000000054400a9000000010400603900000000022400a900000001033002720000000004050019000022ef0000c13d000000000008004b0000231a0000613d00000000038200a900000000048300d9000000000024004b000023270000c13d00000a160030009c000023450000213d00000a130010009c00000009050000290000231e0000213d0000004002100039000000400020043f00000a09027001970000002004100039000000000024043500000000003104350000000603000029000000000303043300000a0903300197000000000032004b00000000050180190000002001500039000000000101043300000a0900100198000023330000613d000000000105043300000a1601100198000023330000613d00000008011000f9000000000001042d000000000300001900000a130010009c0000000805000029000021a60000a13d0000231e0000013d000000000300001900000a130010009c0000000905000029000023010000a13d00000aaa01000041000000000010043f0000004101000039000000040010043f00000a3d01000041000028220001043000000000010000190000282200010430000000000001042f00000aaa01000041000000000010043f0000001101000039000000040010043f00000a3d010000410000282200010430000000400100043d00000a9202000041000000000021043500000004021000390000000403000029000023380000013d000000400100043d00000a9202000041000000000021043500000004021000390000000503000029000000000032043500000a090010009c00000a0901008041000000400110021000000a3d011001c7000028220001043000000a910100004100000000001b043500000a0900b0009c00000a090b0080410000004001b0021000000a4e011001c7000028220001043000000a9102000041000000000021043500000a090010009c00000a0901008041000000400110021000000a4e011001c7000028220001043000000aaa01000041000000000010043f0000001201000039000000040010043f00000a3d0100004100002822000104300000001f0530018f00000a0b06300198000000400200043d0000000004620019000023810000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000023590000c13d000023810000013d0000001f0530018f00000a0b06300198000000400200043d0000000004620019000023810000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000023650000c13d000023810000013d0000001f0530018f00000a0b06300198000000400200043d0000000004620019000023810000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000023710000c13d000023810000013d0000001f0530018f00000a0b06300198000000400200043d0000000004620019000023810000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000237d0000c13d000000000005004b0000238e0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000a090020009c00000a09020080410000004002200210000000000112019f000028220001043000000a0e02200197000000000020043f000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000023a20000613d000000000101043b000000000001042d00000000010000190000282200010430000000400100043d00000abf0010009c000023af0000813d0000006002100039000000400020043f00000040021000390000000000020435000000200210003900000000000204350000000000010435000000000001042d00000aaa01000041000000000010043f0000004101000039000000040010043f00000a3d01000041000028220001043000000a0f01100197000000000010043f0000000901000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000023c40000613d000000000101043b000000000001042d000000000100001900002822000104300000000003010433000000000023004b000023cd0000a13d000000050220021000000000012100190000002001100039000000000001042d00000aaa01000041000000000010043f0000003201000039000000040010043f00000a3d010000410000282200010430000000400100043d00000ac00010009c000023dc0000813d0000004002100039000000400020043f000000200210003900000000000204350000000000010435000000000001042d00000aaa01000041000000000010043f0000004101000039000000040010043f00000a3d0100004100002822000104300000000002010019000000400100043d00000ac20010009c000024300000813d0000022003100039000000400030043f000000000302041a000000d80430027000000a090440019700000140051000390000000000450435000000c8043002700000ffff0440018f00000120051000390000000000450435000000b8043002700000ffff0440018f00000100051000390000000000450435000000a8043002700000ffff0440018f000000e0051000390000000000450435000000880430027000000a0904400197000000c005100039000000000045043500000078043002700000ffff0440018f000000a0051000390000000000450435000000580430027000000a090440019700000080051000390000000000450435000000380430027000000a090440019700000060051000390000000000450435000000180430027000000a09044001970000004005100039000000000045043500000008043002700000ffff0440018f00000020051000390000000000450435000000ff003001900000000003000039000000010300c03900000000003104350000000102200039000000000202041a000001600310003900000a09042001970000000000430435000000380320021000000a27033001970000020004100039000000000034043500000a23002001980000000003000039000000010300c039000001e0041000390000000000340435000000800320027000000a0903300197000001c0041000390000000000340435000000600320027000000a0903300197000001a0041000390000000000340435000000200220027000000a0f0220019700000180031000390000000000230435000000000001042d00000aaa01000041000000000010043f0000004101000039000000040010043f00000a3d0100004100002822000104300006000000000002000000400200043d00000ac00020009c000025820000813d0000004003200039000000400030043f00000020032000390000000000030435000000000002043500000a0e01100197000400000001001d000000000010043f0000000601000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000025880000613d000000400300043d00000a130030009c000025820000213d000000000101043b0000004002300039000000400020043f000000000101041a00000a1602100197000600000003001d0000000002230436000000e001100270000300000002001d000500000001001d000000000012043500000a84010000410000000000100443000000000100041400000a090010009c00000a0901008041000000c00110021000000a85011001c70000800b020000392820281b0000040f00000001002001900000258a0000613d000000000101043b00050005001000740000258b0000413d00000a8b0100004100000000001004430000000001000412000000040010044300000040010000390000002400100443000000000100041400000a090010009c00000a0901008041000000c00110021000000a8c011001c700008005020000392820281b0000040f00000001002001900000258a0000613d000000000101043b00000a0901100197000000050010006b0000247e0000813d0000000605000029000024b60000013d0000000401000029000000000010043f0000000701000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f00000001002001900000000605000029000025880000613d000000400200043d00000a0c0020009c000025820000213d000000000101043b0000006003200039000000400030043f000000000301041a000000400120003900000a8d003001980000000004000039000000010400c039000000000041043500000a0e013001970000000006120436000000a003300270000000ff0330018f0000000000360435000024b60000613d000000000001004b000024b60000613d000000400100043d00000a130010009c000025820000213d0000004003100039000000400030043f0000002003100039000000000003043500000000000104350000000002020433000000400c00043d00000a8e0100004100000000051c0436000000000100041400000a0e02200197000000040020008c000500000006001d000024b80000c13d0000000103000031000000a00030008c000000a0040000390000000004034019000024e80000013d0000000001050019000000000001042d000100000005001d00000a0900c0009c00000a090300004100000000030c4019000000400330021000000a090010009c00000a0901008041000000c001100210000000000131019f00000a4e011001c7000200000002001d00040000000c001d2820281b0000040f000000040c000029000000600310027000000a0903300197000000a00030008c000000a00400003900000000040340190000001f0640018f000000e00740019000000000057c0019000024d50000613d000000000801034f00000000090c0019000000008a08043c0000000009a90436000000000059004b000024d10000c13d000000000006004b000024e20000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00000001002001900000259f0000613d0000000506000029000000020200002900000001050000290000001f01400039000001e00110018f000000000bc1001900000000001b004b0000000001000039000000010100403900000a0f00b0009c000025820000213d0000000100100190000025820000c13d0000004000b0043f000000a00030008c000025880000413d00000000010c043300000a8f0010009c000025880000213d0000008001c00039000000000101043300000a8f0010009c000025880000213d000000000805043300000a110080009c000025910000813d0000006001c00039000000000701043300000a900100004100000000001b04350000000001000414000000040020008c000025080000c13d0000002004000039000025380000013d000100000008001d000200000007001d00000a0900b0009c00000a090300004100000000030b4019000000400330021000000a090010009c00000a0901008041000000c001100210000000000131019f00000a4e011001c700040000000b001d2820281b0000040f000000040b000029000000600310027000000a0903300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000025250000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000025210000c13d000000000006004b000025320000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0000000100200190000025ab0000613d0000000506000029000000020700002900000001080000290000001f01400039000000600110018f0000000001b1001900000a0f0010009c000025820000213d000000400010043f000000200030008c000025880000413d00000000020b0433000000ff0020008c000025880000213d0000000003060433000000ff0330018f0000000003230019000000ff0030008c0000258b0000213d000000240230008c0000254d0000213d0000255c0000c13d0000000102000039000025660000013d0000004d0020008c0000258b0000213d0000000a040000390000000103000039000000010020019000000000054400a9000000010400603900000000033400a900000001022002720000000004050019000025510000c13d000000000003004b000025c90000613d00000000033800d90000256c0000013d0000000a0400003900000001020000390000002403300089000000010030019000000000054400a9000000010400603900000000022400a9000000010330027200000000040500190000255f0000c13d000000000008004b0000257e0000613d00000000038200a900000000048300d9000000000024004b0000258b0000c13d00000a160030009c000025980000213d00000a130010009c0000000605000029000025820000213d0000004002100039000000400020043f00000a09027001970000002004100039000000000024043500000000003104350000000303000029000000000303043300000a0903300197000000000032004b00000000050180190000000001050019000000000001042d000000000300001900000a130010009c0000000605000029000025710000a13d00000aaa01000041000000000010043f0000004101000039000000040010043f00000a3d01000041000028220001043000000000010000190000282200010430000000000001042f00000aaa01000041000000000010043f0000001101000039000000040010043f00000a3d01000041000028220001043000000a910100004100000000001b043500000a0900b0009c00000a090b0080410000004001b0021000000a4e011001c7000028220001043000000a9102000041000000000021043500000a090010009c00000a0901008041000000400110021000000a4e011001c700002822000104300000001f0530018f00000a0b06300198000000400200043d0000000004620019000025b60000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000025a60000c13d000025b60000013d0000001f0530018f00000a0b06300198000000400200043d0000000004620019000025b60000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000025b20000c13d000000000005004b000025c30000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000a090020009c00000a09020080410000004002200210000000000112019f000028220001043000000aaa01000041000000000010043f0000001201000039000000040010043f00000a3d0100004100002822000104300007000000000002000000400200043d00000ac00020009c000027280000813d0000004003200039000000400030043f00000020032000390000000000030435000000000002043500000a0e01100197000400000001001d000000000010043f0000000601000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f00000001002001900000272e0000613d000000400300043d00000a130030009c000027280000213d000000000101043b0000004002300039000000400020043f000000000101041a00000a1602100197000700000003001d0000000002230436000000e001100270000500000002001d000600000001001d000000000012043500000a84010000410000000000100443000000000100041400000a090010009c00000a0901008041000000c00110021000000a85011001c70000800b020000392820281b0000040f0000000100200190000027300000613d000000000101043b00060006001000740000273c0000413d00000a8b0100004100000000001004430000000001000412000000040010044300000040010000390000002400100443000000000100041400000a090010009c00000a0901008041000000c00110021000000a8c011001c700008005020000392820281b0000040f0000000100200190000027300000613d000000000101043b00000a0901100197000000060010006b0000261b0000813d00000007050000290000000501000029000000000101043300000a0900100198000027200000c13d000027310000013d0000000401000029000000000010043f0000000701000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f000000010020019000000007050000290000272e0000613d000000400200043d00000a0c0020009c000027280000213d000000000101043b0000006003200039000000400030043f000000000301041a000000400120003900000a8d003001980000000004000039000000010400c039000000000041043500000a0e013001970000000006120436000000a003300270000000ff0330018f0000000000360435000026530000613d000000000001004b000026530000613d000000400100043d00000a130010009c000027280000213d0000004003100039000000400030043f0000002003100039000000000003043500000000000104350000000002020433000000400c00043d00000a8e0100004100000000051c0436000000000100041400000a0e02200197000000040020008c000600000006001d000026580000c13d0000000103000031000000a00030008c000000a0040000390000000004034019000026880000013d0000000501000029000000000101043300000a0900100198000027200000c13d000027310000013d000100000005001d00000a0900c0009c00000a090300004100000000030c4019000000400330021000000a090010009c00000a0901008041000000c001100210000000000131019f00000a4e011001c7000200000002001d00030000000c001d2820281b0000040f000000030c000029000000600310027000000a0903300197000000a00030008c000000a00400003900000000040340190000001f0640018f000000e00740019000000000057c0019000026750000613d000000000801034f00000000090c0019000000008a08043c0000000009a90436000000000059004b000026710000c13d000000000006004b000026820000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0000000100200190000027500000613d0000000606000029000000020200002900000001050000290000001f01400039000001e00110018f000000000bc1001900000000001b004b0000000001000039000000010100403900000a0f00b0009c000027280000213d0000000100100190000027280000c13d0000004000b0043f000000a00030008c0000272e0000413d00000000010c043300000a8f0010009c0000272e0000213d0000008001c00039000000000101043300000a8f0010009c0000272e0000213d000000000805043300000a110080009c000027420000813d0000006001c00039000000000701043300000a900100004100000000001b04350000000001000414000000040020008c000026a80000c13d0000002004000039000026d80000013d000100000008001d000200000007001d00000a0900b0009c00000a090300004100000000030b4019000000400330021000000a090010009c00000a0901008041000000c001100210000000000131019f00000a4e011001c700030000000b001d2820281b0000040f000000030b000029000000600310027000000a0903300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000026c50000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000026c10000c13d000000000006004b000026d20000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00000001002001900000275c0000613d0000000606000029000000020700002900000001080000290000001f01400039000000600110018f0000000001b1001900000a0f0010009c000027280000213d000000400010043f000000200030008c0000272e0000413d00000000020b0433000000ff0020008c0000272e0000213d0000000003060433000000ff0330018f0000000003230019000000ff0030008c0000273c0000213d000000240230008c000026ed0000213d000026fc0000c13d0000000102000039000027060000013d0000004d0020008c0000273c0000213d0000000a040000390000000103000039000000010020019000000000054400a9000000010400603900000000033400a900000001022002720000000004050019000026f10000c13d000000000003004b0000277a0000613d00000000033800d90000270c0000013d0000000a0400003900000001020000390000002403300089000000010030019000000000054400a9000000010400603900000000022400a900000001033002720000000004050019000026ff0000c13d000000000008004b000027240000613d00000000038200a900000000048300d9000000000024004b0000273c0000c13d00000a160030009c000027490000213d00000a130010009c0000000705000029000027280000213d0000004002100039000000400020043f00000a09027001970000002004100039000000000024043500000000003104350000000503000029000000000303043300000a0903300197000000000032004b00000000050180190000002001500039000000000101043300000a0900100198000027310000613d000000000105043300000a1601100198000027310000613d000000000001042d000000000300001900000a130010009c0000000705000029000027110000a13d00000aaa01000041000000000010043f0000004101000039000000040010043f00000a3d01000041000028220001043000000000010000190000282200010430000000000001042f000000400100043d00000a9202000041000000000021043500000004021000390000000403000029000000000032043500000a090010009c00000a0901008041000000400110021000000a3d011001c7000028220001043000000aaa01000041000000000010043f0000001101000039000000040010043f00000a3d01000041000028220001043000000a910100004100000000001b043500000a0900b0009c00000a090b0080410000004001b0021000000a4e011001c7000028220001043000000a9102000041000000000021043500000a090010009c00000a0901008041000000400110021000000a4e011001c700002822000104300000001f0530018f00000a0b06300198000000400200043d0000000004620019000027670000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000027570000c13d000027670000013d0000001f0530018f00000a0b06300198000000400200043d0000000004620019000027670000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000027630000c13d000000000005004b000027740000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000a090020009c00000a09020080410000004002200210000000000112019f000028220001043000000aaa01000041000000000010043f0000001201000039000000040010043f00000a3d01000041000028220001043000000aa3055001970000006006100039000000000056043500000a22044001970000004005100039000000000045043500000a0e033001970000002004100039000000000034043500000a0e0220019700000000002104350000008001100039000000000001042d0004000000000002000400000002001d00000a0f01100197000100000001001d000000000010043f0000000501000039000000200010043f000000000100041400000a090010009c00000a0901008041000000c00110021000000a19011001c700008010020000392820281b0000040f0000000100200190000027c40000613d000000400300043d00000ac00030009c000027c60000813d000000000101043b0000004002300039000000400020043f000000000101041a0000002002300039000000e004100270000000000042043500000a16011001970000000000130435000000040200002900000a0902200198000027c30000613d000300000004001d000400000002001d000200000003001d00000a84010000410000000000100443000000000100041400000a090010009c00000a0901008041000000c00110021000000a85011001c70000800b020000392820281b0000040f0000000100200190000027cc0000613d000000000101043b000000030110006c0000000404000029000027cd0000413d000000000041004b0000000202000029000027d30000213d000000000102043300000a1601100197000000000001042d0000000001000019000028220001043000000aaa01000041000000000010043f0000004101000039000000040010043f00000a3d010000410000282200010430000000000001042f00000aaa01000041000000000010043f0000001101000039000000040010043f00000a3d010000410000282200010430000000400200043d000000440320003900000000001304350000002401200039000000000041043500000a8601000041000000000012043500000004012000390000000103000029000000000031043500000a090020009c00000a0902008041000000400120021000000a87011001c70000282200010430000000000001042f00000a090010009c00000a0901008041000000400110021000000a090020009c00000a09020080410000006002200210000000000112019f000000000200041400000a090020009c00000a0902008041000000c002200210000000000112019f00000a20011001c700008010020000392820281b0000040f0000000100200190000027f60000613d000000000101043b000000000001042d0000000001000019000028220001043000000000050100190000000000200443000000050030008c000028060000413d000000040100003900000000020000190000000506200210000000000664001900000005066002700000000006060031000000000161043a0000000102200039000000000031004b000027fe0000413d00000a090030009c00000a09030080410000006001300210000000000200041400000a090020009c00000a0902008041000000c002200210000000000112019f00000ac3011001c700000000020500192820281b0000040f0000000100200190000028150000613d000000000101043b000000000001042d000000000001042f00002819002104210000000102000039000000000001042d0000000002000019000000000001042d0000281e002104230000000102000039000000000001042d0000000002000019000000000001042d0000282000000432000028210001042e0000282200010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000000000000000000000000000ffffffffffffff9f0000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffbf000000000000000000000000000000000000000000000000ffffffffffffff3f000000000000000000000000000000000000000000000000fffffffffffffddf00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffdf0200000000000000000000000000000000000040000000000000000000000000bfa87805ed57dc1f0d489ce33be4c4577d74ccde357eeeee058a32c55c44a5330200000000000000000000000000000000000020000000000000000000000000c3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda77580bfa87805ed57dc1f0d489ce33be4c4577d74ccde357eeeee058a32c55c44a532eb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdeffe8a4859c7bd88fc0f24184464406785daae8e84cb1860cc4a4eff72e05fe2470200000000000000000000000000000000000000000000000000000000000000df1b1bd32a69711488d71554706bb130b1fc63a5fa1a2cd85e8440f84065ba23ffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000ff000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000200000000000000000000000000000000000060000000000000000000000000e6a7a17d710bf0b2cd05e5397dc6f97a5da4ee79e31e234bf5f965ee2bd9a5bfffffffff000000000000000000000000000000000000000000000000000000002812d52c0000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000283b699f411baff8f1c29fe49f32a828c8151596244b8e7e4c164edd6569a835525e3d4e0c31cef19cf9426af8d2c0ddd2d576359ca26bed92aac5fadda46265ff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffff0000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000ffffffff0000000000000000000000000000000000000000000000000000ffff0000000000000000000000000000000000000000000000000000ffffffff0000000000000000000000000000000000000000000000000000ffff00000000000000000000000000000000000000000000000000000000ffff00000000000000000000000000000000000000000000000000000000ffff0000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000000000ffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff0000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000c35aa79d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000bb77da6f7210cdd16904228a9360133d1d7dfff99b1bc75f128da5b53e28f97d0b4f67a2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000ffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000ffff0000000000000000000000000000000000000000000000000000ffffffff000000000000000000000000000000000000000000000000ffffffff0000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000002000000000000000000000000000000000000c000000000000000000000000094967ae9ea7729ad4f54021c1981765d2b1d954f7c92fbec340aa0a54f46b8b524ecdc02000000000000000000000000000000000000000000000000000000004de5b1bcbca6018c11303a2c3f4a4b4f22a1c741d8c4ba430d246ac06c5ddf8b0000000200000000000000000000000000000100000001000000000000000000d794ef950000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000009b15e16f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000079ba509600000000000000000000000000000000000000000000000000000000bf78e03e00000000000000000000000000000000000000000000000000000000d8694ccc00000000000000000000000000000000000000000000000000000000fbe3f77700000000000000000000000000000000000000000000000000000000fbe3f77800000000000000000000000000000000000000000000000000000000ffdb4b3700000000000000000000000000000000000000000000000000000000d8694ccd00000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000d026419f00000000000000000000000000000000000000000000000000000000d02641a000000000000000000000000000000000000000000000000000000000d63d3af200000000000000000000000000000000000000000000000000000000bf78e03f00000000000000000000000000000000000000000000000000000000cdc73d510000000000000000000000000000000000000000000000000000000082b49eaf0000000000000000000000000000000000000000000000000000000091a274990000000000000000000000000000000000000000000000000000000091a2749a00000000000000000000000000000000000000000000000000000000a69c64c00000000000000000000000000000000000000000000000000000000082b49eb0000000000000000000000000000000000000000000000000000000008da5cb5b0000000000000000000000000000000000000000000000000000000079ba5097000000000000000000000000000000000000000000000000000000007afac32200000000000000000000000000000000000000000000000000000000805f21320000000000000000000000000000000000000000000000000000000041ed29e600000000000000000000000000000000000000000000000000000000514e8cfe000000000000000000000000000000000000000000000000000000006def4ce6000000000000000000000000000000000000000000000000000000006def4ce700000000000000000000000000000000000000000000000000000000770e2dc400000000000000000000000000000000000000000000000000000000514e8cff000000000000000000000000000000000000000000000000000000006cb5f3dd0000000000000000000000000000000000000000000000000000000045ac924c0000000000000000000000000000000000000000000000000000000045ac924d000000000000000000000000000000000000000000000000000000004ab35b0b0000000000000000000000000000000000000000000000000000000041ed29e700000000000000000000000000000000000000000000000000000000430d138c00000000000000000000000000000000000000000000000000000000181f5a7600000000000000000000000000000000000000000000000000000000325c868d00000000000000000000000000000000000000000000000000000000325c868e000000000000000000000000000000000000000000000000000000003937306f00000000000000000000000000000000000000000000000000000000181f5a77000000000000000000000000000000000000000000000000000000002451a627000000000000000000000000000000000000000000000000000000000041e5be00000000000000000000000000000000000000000000000000000000061877e30000000000000000000000000000000000000000000000000000000006285c69000000000000000000000000000000000000004000000000000000000000000099ac52f200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f2b5c74de000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000800000000000000000ed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278dad89dca000000000000000000000000000000000000000000000000000000008d666f6000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffc00796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d955391320200000200000000000000000000000000000004000000000000000000000000f08bcb3e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000ff000000000000000000000000000000000000000000000000000000000000000000000000000000000000002386f26fc1000000000000000000000000000000000000000000000000000000000000ffffffdf310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e020000020000000000000000000000000000004400000000000000000000000000000000000000000000ff000000000000000000000000000000000000000000feaf968c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffff313ce5670000000000000000000000000000000000000000000000000000000010cb51d10000000000000000000000000000000000000000000000000000000006439c6b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000186a000000000000000000000000000000000000000000000000000005af3107a400000000000000000000000000000000000ffffffffffffffffffffffffffffffff181dcf100000000000000000000000000000000000000000000000000000000097a657c900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffff0000000000000000000000000000000000000020000000000000000000000000ee433e99000000000000000000000000000000000000000000000000000000004c4fc93a00000000000000000000000000000000000000000000000000000000d88dddd60000000000000000000000000000000000000000000000000000000086933789000000000000000000000000000000000000000000000000000000002502348c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000008000000000000000000175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db98579befe00000000000000000000000000000000000000000000000000000000ffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5f0000000000000000000000fe00000000000000000000000000000000000000000000000000000000000000ed000000000000000000000000000000000000000052f50aa6d1a95a4595361ecf953d095f125d442e4673716dede699e049de148a097e17ff00000000000000000000000000000000000000000000000000000000fe8a4859c7bd88fc0f24184464406785daae8e84cb1860cc4a4eff72e05fe2484e487b71000000000000000000000000000000000000000000000000000000001795838dc8ab2ffc5f431a1729a6afa0b587f982f7b2be0b9d7187a1ef547f9102b543c6000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e002000000000000000000000000000000000002200000000000000000000000005247fdce00000000000000000000000000000000000000000000000000000000000000000000002812d52c00000000000000000000000000000000000000000036f536ca000000000000000000000000000000000000000000000000000000006a92a4830000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02000000000000000000000000000000000000a000000000000000000000000032a4ba3fa3351b11ad555d4c8ec70a744e8705607077a946807030d64b6ab1a3dd84a3fa9ef9409f550d54d6affec7e9c480c878c6ab27b78912a03e1b371c6ed86ad9cf00000000000000000000000000000000000000000000000000000000405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace46656551756f74657220312e362e302d646576000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000060000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000ffffffffffffffa0000000000000000000000000000000000000000000000000ffffffffffffffc0000000000000000000000000000000000000000000000000ffffffffffffff40000000000000000000000000000000000000000000000000fffffffffffffde002000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000") diff --git a/core/gethwrappers/ccip/generated_zks/generated_zks.go b/core/gethwrappers/ccip/generated_zks/generated_zks.go new file mode 100644 index 00000000000..03d9c50e74f --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/generated_zks.go @@ -0,0 +1,106 @@ +package generated_zks + +import ( + "context" + "fmt" + + "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/ethclient" + zkSyncAccounts "github.com/zksync-sdk/zksync2-go/accounts" + zkSyncClient "github.com/zksync-sdk/zksync2-go/clients" + zktypes "github.com/zksync-sdk/zksync2-go/types" +) + +func IsZKSync(backend bind.ContractBackend) bool { + client, ok := backend.(*ethclient.Client) + if !ok { + return false + } + zkclient := zkSyncClient.NewClient(client.Client()) + // we dont care about the address + // we only care if the method is available + _, err := zkclient.MainContractAddress(context.Background()) + if err != nil { + return false + } + return true +} + +type Transaction struct { + *types.Transaction + Hash_zks common.Hash +} + +func (tx *Transaction) Hash() common.Hash { + return tx.Hash_zks +} + +func ConvertZkTxToEthTx(resp zktypes.TransactionResponse) *Transaction { + // make this legacy fee ? + dtx := &types.DynamicFeeTx{ + ChainID: resp.ChainID.ToInt(), + Nonce: uint64(resp.Nonce), + GasTipCap: resp.MaxPriorityFeePerGas.ToInt(), + GasFeeCap: resp.MaxFeePerGas.ToInt(), + To: &resp.To, + Value: resp.Value.ToInt(), + Data: resp.Data, + Gas: uint64(resp.Gas), + } + + tx := types.NewTx(dtx) + customTransaction := Transaction{Transaction: tx, Hash_zks: resp.Hash} + return &customTransaction +} + +func getZKAuthFromEthAuth(auth *bind.TransactOpts) *zkSyncAccounts.TransactOpts { + return &zkSyncAccounts.TransactOpts{ + Nonce: auth.Nonce, + Value: auth.Value, + GasPrice: auth.GasPrice, + GasFeeCap: auth.GasFeeCap, + GasTipCap: auth.GasTipCap, + GasLimit: auth.GasLimit, + } +} + +func DeployContract(auth *bind.TransactOpts, contractAbi *abi.ABI, contractBytes []byte, backend bind.ContractBackend, params ...interface{}) (common.Address, *Transaction, *bind.BoundContract, error) { + client, ok := backend.(*ethclient.Client) + if !ok { + return common.Address{}, nil, nil, fmt.Errorf("backend is not an *ethclient.Client") + } + zkclient := zkSyncClient.NewClient(client.Client()) + + walletValue := auth.Context.Value("wallet") + wallet, ok := walletValue.(*zkSyncAccounts.Wallet) + if !ok || wallet == nil { + return common.Address{}, nil, nil, fmt.Errorf("wallet not found in context or invalid type") + } + + constructor, _ := contractAbi.Pack("", params...) + + hash, err := wallet.DeployWithCreate(getZKAuthFromEthAuth(auth), zkSyncAccounts.CreateTransaction{ + Bytecode: contractBytes, + Calldata: constructor, + }) + if err != nil { + return common.Address{}, nil, nil, fmt.Errorf("Error deploying contract: %v", err) + } + + receipt, err := zkclient.WaitMined(context.Background(), hash) + if err != nil { + return common.Address{}, nil, nil, fmt.Errorf("Error waiting for contract deployment: %v", err) + } + + tx, _, err := zkclient.TransactionByHash(context.Background(), hash) + if err != nil { + return common.Address{}, nil, nil, fmt.Errorf("Error getting transaction by hash: %v", err) + } + + address := receipt.ContractAddress + contractBind := bind.NewBoundContract(address, *contractAbi, backend, backend, backend) + return address, ConvertZkTxToEthTx(*tx), contractBind, nil +} diff --git a/core/gethwrappers/ccip/generated_zks/lock_release_token_pool/lock_release_token_pool.go b/core/gethwrappers/ccip/generated_zks/lock_release_token_pool/lock_release_token_pool.go new file mode 100644 index 00000000000..d9b6e6f3218 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/lock_release_token_pool/lock_release_token_pool.go @@ -0,0 +1,3691 @@ +package lock_release_token_pool + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type PoolLockOrBurnInV1 struct { + Receiver []byte + RemoteChainSelector uint64 + OriginalSender common.Address + Amount *big.Int + LocalToken common.Address +} + +type PoolLockOrBurnOutV1 struct { + DestTokenAddress []byte + DestPoolData []byte +} + +type PoolReleaseOrMintInV1 struct { + OriginalSender []byte + RemoteChainSelector uint64 + Receiver common.Address + Amount *big.Int + LocalToken common.Address + SourcePoolAddress []byte + SourcePoolData []byte + OffchainTokenData []byte +} + +type PoolReleaseOrMintOutV1 struct { + DestinationAmount *big.Int +} + +type RateLimiterConfig struct { + IsEnabled bool + Capacity *big.Int + Rate *big.Int +} + +type RateLimiterTokenBucket struct { + Tokens *big.Int + LastUpdated uint32 + IsEnabled bool + Capacity *big.Int + Rate *big.Int +} + +type TokenPoolChainUpdate struct { + RemoteChainSelector uint64 + RemotePoolAddresses [][]byte + RemoteTokenAddress []byte + OutboundRateLimiterConfig RateLimiterConfig + InboundRateLimiterConfig RateLimiterConfig +} + +var LockReleaseTokenPoolMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"localTokenDecimals\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"allowlist\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"acceptLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllowListNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"CallerIsNotARampOnRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotTransferToSelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"DisabledNonZeroRateLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientLiquidity\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"expected\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"actual\",\"type\":\"uint8\"}],\"name\":\"InvalidDecimalArgs\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"InvalidRateLimitRate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolData\",\"type\":\"bytes\"}],\"name\":\"InvalidRemoteChainDecimals\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidRemotePoolForChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidSourcePoolAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LiquidityNotAccepted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeProposedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"NonExistentChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"remoteDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"localDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"remoteAmount\",\"type\":\"uint256\"}],\"name\":\"OverflowDetected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerCannotBeZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"PoolAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimitMustBeDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListAdd\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListRemove\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remoteToken\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"LiquidityTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Locked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Minted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rateLimitAdmin\",\"type\":\"address\"}],\"name\":\"RateLimitAdminSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Released\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"RemotePoolAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"RemotePoolRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"RouterUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensConsumed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"addRemotePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"removes\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"adds\",\"type\":\"address[]\"}],\"name\":\"applyAllowListUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"remoteChainSelectorsToRemove\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes[]\",\"name\":\"remotePoolAddresses\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes\",\"name\":\"remoteTokenAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"internalType\":\"structTokenPool.ChainUpdate[]\",\"name\":\"chainsToAdd\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"canAcceptLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentInboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentOutboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateLimitAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRebalancer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemotePools\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemoteToken\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRmnProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupportedChains\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"isRemotePool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"isSupportedChain\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isSupportedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"internalType\":\"structPool.LockOrBurnInV1\",\"name\":\"lockOrBurnIn\",\"type\":\"tuple\"}],\"name\":\"lockOrBurn\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destPoolData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.LockOrBurnOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"provideLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"originalSender\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainTokenData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.ReleaseOrMintInV1\",\"name\":\"releaseOrMintIn\",\"type\":\"tuple\"}],\"name\":\"releaseOrMint\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"destinationAmount\",\"type\":\"uint256\"}],\"internalType\":\"structPool.ReleaseOrMintOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"removeRemotePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundConfig\",\"type\":\"tuple\"}],\"name\":\"setChainRateLimiterConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rateLimitAdmin\",\"type\":\"address\"}],\"name\":\"setRateLimitAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rebalancer\",\"type\":\"address\"}],\"name\":\"setRebalancer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"setRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x6101206040523480156200001257600080fd5b506040516200511f3803806200511f8339810160408190526200003591620005bb565b8585858584336000816200005c57604051639b15e16f60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03848116919091179091558116156200008f576200008f81620001f3565b50506001600160a01b0385161580620000af57506001600160a01b038116155b80620000c257506001600160a01b038216155b15620000e1576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b03808616608081905290831660c0526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa92505050801562000151575060408051601f3d908101601f191682019092526200014e91810190620006ee565b60015b1562000191578060ff168560ff16146200018f576040516332ad3e0760e11b815260ff80871660048301528216602482015260440160405180910390fd5b505b60ff841660a052600480546001600160a01b0319166001600160a01b038316179055825115801560e052620001db57604080516000815260208101909152620001db90846200026d565b5050505091151561010052506200075a945050505050565b336001600160a01b038216036200021d57604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60e0516200028e576040516335f4a7b360e01b815260040160405180910390fd5b60005b825181101562000319576000838281518110620002b257620002b26200070c565b60209081029190910101519050620002cc600282620003ca565b156200030f576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b5060010162000291565b5060005b8151811015620003c55760008282815181106200033e576200033e6200070c565b6020026020010151905060006001600160a01b0316816001600160a01b0316036200036a5750620003bc565b62000377600282620003ea565b15620003ba576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b6001016200031d565b505050565b6000620003e1836001600160a01b03841662000401565b90505b92915050565b6000620003e1836001600160a01b03841662000505565b60008181526001830160205260408120548015620004fa5760006200042860018362000722565b85549091506000906200043e9060019062000722565b9050808214620004aa5760008660000182815481106200046257620004626200070c565b90600052602060002001549050808760000184815481106200048857620004886200070c565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080620004be57620004be62000744565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050620003e4565b6000915050620003e4565b60008181526001830160205260408120546200054e57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620003e4565b506000620003e4565b6001600160a01b03811681146200056d57600080fd5b50565b805160ff811681146200058257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b8051620005828162000557565b805180151581146200058257600080fd5b60008060008060008060c08789031215620005d557600080fd5b8651620005e28162000557565b95506020620005f388820162000570565b60408901519096506001600160401b03808211156200061157600080fd5b818a0191508a601f8301126200062657600080fd5b8151818111156200063b576200063b62000587565b8060051b604051601f19603f8301168101818110858211171562000663576200066362000587565b60405291825284820192508381018501918d8311156200068257600080fd5b938501935b82851015620006ab576200069b856200059d565b8452938501939285019262000687565b809950505050505050620006c2606088016200059d565b9250620006d260808801620005aa565b9150620006e260a088016200059d565b90509295509295509295565b6000602082840312156200070157600080fd5b620003e18262000570565b634e487b7160e01b600052603260045260246000fd5b81810381811115620003e457634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60805160a05160c05160e051610100516148f46200082b600039600081816105a40152611ac601526000818161063e015281816123180152612e3101526000818161061801528181611e35015261260401526000818161036701528181610e6b01528181611fde01528181612098015281816120cc015281816120ff01528181612164015281816121bd015261225f0152600081816102ce015281816103230152818161077f015281816108510152818161094501528181611b8801528181612dc7015261301c01526148f46000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c80638da5cb5b11610145578063c0d78655116100bd578063dc0bd9711161008c578063e8a1da1711610071578063e8a1da1714610662578063eb521a4c14610675578063f2fde38b1461068857600080fd5b8063dc0bd97114610616578063e0351e131461063c57600080fd5b8063c0d78655146105c8578063c4bffe2b146105db578063c75eea9c146105f0578063cf7401f31461060357600080fd5b8063acfecf9111610114578063b0f479a1116100f9578063b0f479a114610571578063b79465801461058f578063bb98546b146105a257600080fd5b8063acfecf91146104ef578063af58d59f1461050257600080fd5b80638da5cb5b1461047c5780639a4575b91461049a578063a42a7b8b146104ba578063a7cd63b7146104da57600080fd5b80634c5ef0ed116101d85780636cfd1553116101a757806379ba50971161018c57806379ba50971461044e5780637d54534e146104565780638926f54f1461046957600080fd5b80636cfd15531461041d5780636d3d1a581461043057600080fd5b80634c5ef0ed146103d157806354c8a4f3146103e457806362ddd3c4146103f7578063663200871461040a57600080fd5b8063240028e811610214578063240028e81461031357806324f65ee7146103605780633907753714610391578063432a6ba3146103b357600080fd5b806301ffc9a7146102465780630a861f2a1461026e578063181f5a771461028357806321df0da7146102cc575b600080fd5b6102596102543660046139e3565b61069b565b60405190151581526020015b60405180910390f35b61028161027c366004613a25565b6106f7565b005b6102bf6040518060400160405280601a81526020017f4c6f636b52656c65617365546f6b656e506f6f6c20312e352e3100000000000081525081565b6040516102659190613aac565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610265565b610259610321366004613ae1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610265565b6103a461039f366004613afe565b6108a8565b60405190518152602001610265565b600a5473ffffffffffffffffffffffffffffffffffffffff166102ee565b6102596103df366004613b57565b6109f6565b6102816103f2366004613c26565b610a40565b610281610405366004613b57565b610abb565b610281610418366004613c92565b610b53565b61028161042b366004613ae1565b610c2f565b60095473ffffffffffffffffffffffffffffffffffffffff166102ee565b610281610c7e565b610281610464366004613ae1565b610d4c565b610259610477366004613cbe565b610dcd565b60015473ffffffffffffffffffffffffffffffffffffffff166102ee565b6104ad6104a8366004613cd9565b610de4565b6040516102659190613d14565b6104cd6104c8366004613cbe565b610eb0565b6040516102659190613d6b565b6104e261101b565b6040516102659190613ded565b6102816104fd366004613b57565b61102c565b610515610510366004613cbe565b611144565b604051610265919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60045473ffffffffffffffffffffffffffffffffffffffff166102ee565b6102bf61059d366004613cbe565b611219565b7f0000000000000000000000000000000000000000000000000000000000000000610259565b6102816105d6366004613ae1565b6112c9565b6105e36113a4565b6040516102659190613e47565b6105156105fe366004613cbe565b61145c565b610281610611366004613fcf565b61152e565b7f00000000000000000000000000000000000000000000000000000000000000006102ee565b7f0000000000000000000000000000000000000000000000000000000000000000610259565b610281610670366004613c26565b6115b2565b610281610683366004613a25565b611ac4565b610281610696366004613ae1565b611be0565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fe1d405660000000000000000000000000000000000000000000000000000000014806106f157506106f182611bf4565b92915050565b600a5473ffffffffffffffffffffffffffffffffffffffff16331461074f576040517f8e4a23d60000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015281907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156107db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ff9190614014565b1015610837576040517fbb55fd2700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61087873ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163383611cd8565b604051819033907fc2c3f06e49b9f15e7b4af9055e183b0d73362e033ad82a07dec9bf984017171990600090a350565b6040805160208101909152600081526108c082611dac565b600061091960608401356109146108da60c087018761402d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611fd092505050565b612094565b905061096c61092e6060850160408601613ae1565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169083611cd8565b61097c6060840160408501613ae1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2d87480f50083e2b2759522a8fdda59802650a8055e609a7772cf70c07748f52836040516109da91815260200190565b60405180910390a3604080516020810190915290815292915050565b6000610a388383604051610a0b929190614092565b604080519182900390912067ffffffffffffffff87166000908152600760205291909120600501906122a8565b949350505050565b610a486122c3565b610ab58484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060408051602080880282810182019093528782529093508792508691829185019084908082843760009201919091525061231692505050565b50505050565b610ac36122c3565b610acc83610dcd565b610b0e576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610746565b610b4e8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506124cc92505050565b505050565b610b5b6122c3565b6040517f0a861f2a0000000000000000000000000000000000000000000000000000000081526004810182905273ffffffffffffffffffffffffffffffffffffffff831690630a861f2a90602401600060405180830381600087803b158015610bc357600080fd5b505af1158015610bd7573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff167f6fa7abcf1345d1d478e5ea0da6b5f26a90eadb0546ef15ed3833944fbfd1db6282604051610c2391815260200190565b60405180910390a25050565b610c376122c3565b600a80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314610ccf576040517f02b543c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000008082163390811790935560008054909116815560405173ffffffffffffffffffffffffffffffffffffffff909216929183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610d546122c3565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f44676b5284b809a22248eba0da87391d79098be38bb03154be88a58bf4d091749060200160405180910390a150565b60006106f1600567ffffffffffffffff84166122a8565b6040805180820190915260608082526020820152610e01826125c6565b6040516060830135815233907f9f1ec8c880f76798e7b793325d625e9b60e4082a553c98f42b6cda368dd600089060200160405180910390a26040518060400160405280610e5b84602001602081019061059d9190613cbe565b8152602001610ea86040805160ff7f000000000000000000000000000000000000000000000000000000000000000016602082015260609101604051602081830303815290604052905090565b905292915050565b67ffffffffffffffff8116600090815260076020526040812060609190610ed990600501612752565b90506000815167ffffffffffffffff811115610ef757610ef7613e89565b604051908082528060200260200182016040528015610f2a57816020015b6060815260200190600190039081610f155790505b50905060005b82518110156110135760086000848381518110610f4f57610f4f6140a2565b602002602001015181526020019081526020016000208054610f70906140d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9c906140d1565b8015610fe95780601f10610fbe57610100808354040283529160200191610fe9565b820191906000526020600020905b815481529060010190602001808311610fcc57829003601f168201915b5050505050828281518110611000576110006140a2565b6020908102919091010152600101610f30565b509392505050565b60606110276002612752565b905090565b6110346122c3565b61103d83610dcd565b61107f576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610746565b6110bf8282604051611092929190614092565b604080519182900390912067ffffffffffffffff861660009081526007602052919091206005019061275f565b6110fb578282826040517f74f23c7c0000000000000000000000000000000000000000000000000000000081526004016107469392919061416d565b8267ffffffffffffffff167f52d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d768383604051611137929190614191565b60405180910390a2505050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff1615159482019490945260039091015480841660608301529190910490911660808201526106f19061276b565b67ffffffffffffffff81166000908152600760205260409020600401805460609190611244906140d1565b80601f0160208091040260200160405190810160405280929190818152602001828054611270906140d1565b80156112bd5780601f10611292576101008083540402835291602001916112bd565b820191906000526020600020905b8154815290600101906020018083116112a057829003601f168201915b50505050509050919050565b6112d16122c3565b73ffffffffffffffffffffffffffffffffffffffff811661131e576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f1684910160405180910390a15050565b606060006113b26005612752565b90506000815167ffffffffffffffff8111156113d0576113d0613e89565b6040519080825280602002602001820160405280156113f9578160200160208202803683370190505b50905060005b82518110156114555782818151811061141a5761141a6140a2565b6020026020010151828281518110611434576114346140a2565b67ffffffffffffffff909216602092830291909101909101526001016113ff565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff1615159482019490945260019091015480841660608301529190910490911660808201526106f19061276b565b60095473ffffffffffffffffffffffffffffffffffffffff16331480159061156e575060015473ffffffffffffffffffffffffffffffffffffffff163314155b156115a7576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610746565b610b4e83838361281d565b6115ba6122c3565b60005b838110156117a75760008585838181106115d9576115d96140a2565b90506020020160208101906115ee9190613cbe565b9050611605600567ffffffffffffffff831661275f565b611647576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610746565b67ffffffffffffffff8116600090815260076020526040812061166c90600501612752565b905060005b81518110156116d8576116cf82828151811061168f5761168f6140a2565b6020026020010151600760008667ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060050161275f90919063ffffffff16565b50600101611671565b5067ffffffffffffffff8216600090815260076020526040812080547fffffffffffffffffffffff000000000000000000000000000000000000000000908116825560018201839055600282018054909116905560038101829055906117416004830182613976565b600582016000818161175382826139b0565b505060405167ffffffffffffffff871681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d85991694506020019250611795915050565b60405180910390a150506001016115bd565b5060005b81811015611abd5760008383838181106117c7576117c76140a2565b90506020028101906117d991906141a5565b6117e290614271565b90506117f381606001516000612907565b61180281608001516000612907565b806040015151600003611841576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80516118599060059067ffffffffffffffff16612a44565b61189e5780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610746565b805167ffffffffffffffff16600090815260076020908152604091829020825160a08082018552606080870180518601516fffffffffffffffffffffffffffffffff90811680865263ffffffff42168689018190528351511515878b0181905284518a0151841686890181905294518b0151841660809889018190528954740100000000000000000000000000000000000000009283027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff7001000000000000000000000000000000008087027fffffffffffffffffffffffff000000000000000000000000000000000000000094851690981788178216929092178d5592810290971760018c01558c519889018d52898e0180518d01518716808b528a8e019590955280515115158a8f018190528151909d01518716988a01899052518d0151909516979098018790526002890180549a909102999093161717909416959095179092559092029091176003820155908201516004820190611a2190826143e8565b5060005b826020015151811015611a6557611a5d836000015184602001518381518110611a5057611a506140a2565b60200260200101516124cc565b600101611a25565b507f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c28260000151836040015184606001518560800151604051611aab9493929190614502565b60405180910390a150506001016117ab565b5050505050565b7f0000000000000000000000000000000000000000000000000000000000000000611b1b576040517fe93f8fa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a5473ffffffffffffffffffffffffffffffffffffffff163314611b6e576040517f8e4a23d6000000000000000000000000000000000000000000000000000000008152336004820152602401610746565b611bb073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016333084612a50565b604051819033907fc17cea59c2955cb181b03393209566960365771dbba9dc3d510180e7cb31208890600090a350565b611be86122c3565b611bf181612aae565b50565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faff2afbf000000000000000000000000000000000000000000000000000000001480611c8757507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e64dd2900000000000000000000000000000000000000000000000000000000145b806106f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a7000000000000000000000000000000000000000000000000000000001492915050565b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b4e9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612b72565b611dbf61032160a0830160808401613ae1565b611e1e57611dd360a0820160808301613ae1565b6040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610746565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016632cbc26bb611e6a6040840160208501613cbe565b60405160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260809190911b77ffffffffffffffff00000000000000000000000000000000166004820152602401602060405180830381865afa158015611edb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eff919061459b565b15611f36576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f4e611f496040830160208401613cbe565b612c7e565b611f6e611f616040830160208401613cbe565b6103df60a084018461402d565b611fb357611f7f60a082018261402d565b6040517f24eb47e5000000000000000000000000000000000000000000000000000000008152600401610746929190614191565b611bf1611fc66040830160208401613cbe565b8260600135612da4565b6000815160000361200257507f0000000000000000000000000000000000000000000000000000000000000000919050565b815160201461203f57816040517f953576f70000000000000000000000000000000000000000000000000000000081526004016107469190613aac565b6000828060200190518101906120559190614014565b905060ff8111156106f157826040517f953576f70000000000000000000000000000000000000000000000000000000081526004016107469190613aac565b60007f000000000000000000000000000000000000000000000000000000000000000060ff168260ff16036120ca5750816106f1565b7f000000000000000000000000000000000000000000000000000000000000000060ff168260ff1611156121b55760006121247f0000000000000000000000000000000000000000000000000000000000000000846145e7565b9050604d8160ff161115612198576040517fa9cb113d00000000000000000000000000000000000000000000000000000000815260ff80851660048301527f000000000000000000000000000000000000000000000000000000000000000016602482015260448101859052606401610746565b6121a381600a614720565b6121ad908561472f565b9150506106f1565b60006121e1837f00000000000000000000000000000000000000000000000000000000000000006145e7565b9050604d8160ff16118061222857506121fb81600a614720565b612225907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61472f565b84115b15612293576040517fa9cb113d00000000000000000000000000000000000000000000000000000000815260ff80851660048301527f000000000000000000000000000000000000000000000000000000000000000016602482015260448101859052606401610746565b61229e81600a614720565b610a38908561476a565b600081815260018301602052604081205415155b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314612314576040517f2b5c74de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f000000000000000000000000000000000000000000000000000000000000000061236d576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b825181101561240357600083828151811061238d5761238d6140a2565b602002602001015190506123ab816002612deb90919063ffffffff16565b156123fa5760405173ffffffffffffffffffffffffffffffffffffffff821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b50600101612370565b5060005b8151811015610b4e576000828281518110612424576124246140a2565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361246857506124c4565b612473600282612e0d565b156124c25760405173ffffffffffffffffffffffffffffffffffffffff821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101612407565b8051600003612507576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805160208083019190912067ffffffffffffffff84166000908152600790925260409091206125399060050182612a44565b6125735782826040517f393b8ad2000000000000000000000000000000000000000000000000000000008152600401610746929190614781565b600081815260086020526040902061258b83826143e8565b508267ffffffffffffffff167f7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea836040516111379190613aac565b6125d961032160a0830160808401613ae1565b6125ed57611dd360a0820160808301613ae1565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016632cbc26bb6126396040840160208501613cbe565b60405160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260809190911b77ffffffffffffffff00000000000000000000000000000000166004820152602401602060405180830381865afa1580156126aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126ce919061459b565b15612705576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61271d6127186060830160408401613ae1565b612e2f565b6127356127306040830160208401613cbe565b612eae565b611bf16127486040830160208401613cbe565b8260600135612ffc565b606060006122bc83613040565b60006122bc838361309b565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526127f982606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff16426127dd91906147a4565b85608001516fffffffffffffffffffffffffffffffff1661318e565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b61282683610dcd565b612868576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610746565b612873826000612907565b67ffffffffffffffff8316600090815260076020526040902061289690836131b6565b6128a1816000612907565b67ffffffffffffffff831660009081526007602052604090206128c790600201826131b6565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b8383836040516128fa939291906147b7565b60405180910390a1505050565b8151156129d25781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff1610158061295d575060408201516fffffffffffffffffffffffffffffffff16155b1561299657816040517f8020d124000000000000000000000000000000000000000000000000000000008152600401610746919061483a565b80156129ce576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b60408201516fffffffffffffffffffffffffffffffff16151580612a0b575060208201516fffffffffffffffffffffffffffffffff1615155b156129ce57816040517fd68af9cc000000000000000000000000000000000000000000000000000000008152600401610746919061483a565b60006122bc8383613358565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610ab59085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611d2a565b3373ffffffffffffffffffffffffffffffffffffffff821603612afd576040517fdad89dca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000612bd4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166133a79092919063ffffffff16565b805190915015610b4e5780806020019051810190612bf2919061459b565b610b4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610746565b612c8781610dcd565b612cc9576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610746565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925233602483015273ffffffffffffffffffffffffffffffffffffffff16906383826b2b90604401602060405180830381865afa158015612d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6c919061459b565b611bf1576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610746565b67ffffffffffffffff821660009081526007602052604090206129ce90600201827f00000000000000000000000000000000000000000000000000000000000000006133b6565b60006122bc8373ffffffffffffffffffffffffffffffffffffffff841661309b565b60006122bc8373ffffffffffffffffffffffffffffffffffffffff8416613358565b7f000000000000000000000000000000000000000000000000000000000000000015611bf157612e60600282613739565b611bf1576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610746565b612eb781610dcd565b612ef9576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610746565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925273ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa158015612f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f969190614876565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611bf1576040517f728fe07b000000000000000000000000000000000000000000000000000000008152336004820152602401610746565b67ffffffffffffffff821660009081526007602052604090206129ce90827f00000000000000000000000000000000000000000000000000000000000000006133b6565b6060816000018054806020026020016040519081016040528092919081815260200182805480156112bd57602002820191906000526020600020905b81548152602001906001019080831161307c5750505050509050919050565b600081815260018301602052604081205480156131845760006130bf6001836147a4565b85549091506000906130d3906001906147a4565b90508082146131385760008660000182815481106130f3576130f36140a2565b9060005260206000200154905080876000018481548110613116576131166140a2565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061314957613149614893565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506106f1565b60009150506106f1565b60006131ad8561319e848661476a565b6131a890876148c2565b613768565b95945050505050565b81546000906131df90700100000000000000000000000000000000900463ffffffff16426147a4565b905080156132815760018301548354613227916fffffffffffffffffffffffffffffffff8082169281169185917001000000000000000000000000000000009091041661318e565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b602082015183546132a7916fffffffffffffffffffffffffffffffff9081169116613768565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19906128fa90849061483a565b600081815260018301602052604081205461339f575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556106f1565b5060006106f1565b6060610a38848460008561377e565b825474010000000000000000000000000000000000000000900460ff1615806133dd575081155b156133e757505050565b825460018401546fffffffffffffffffffffffffffffffff8083169291169060009061342d90700100000000000000000000000000000000900463ffffffff16426147a4565b905080156134ed578183111561346f576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018601546134a99083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1661318e565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b848210156135a45773ffffffffffffffffffffffffffffffffffffffff841661354c576040517ff94ebcd10000000000000000000000000000000000000000000000000000000081526004810183905260248101869052604401610746565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff85166044820152606401610746565b848310156136b75760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff169060009082906135e890826147a4565b6135f2878a6147a4565b6135fc91906148c2565b613606919061472f565b905073ffffffffffffffffffffffffffffffffffffffff861661365f576040517f15279c080000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610746565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff87166044820152606401610746565b6136c185846147a4565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260018301602052604081205415156122bc565b600081831061377757816122bc565b5090919050565b606082471015613810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610746565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161383991906148d5565b60006040518083038185875af1925050503d8060008114613876576040519150601f19603f3d011682016040523d82523d6000602084013e61387b565b606091505b509150915061388c87838387613897565b979650505050505050565b6060831561392d5782516000036139265773ffffffffffffffffffffffffffffffffffffffff85163b613926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610746565b5081610a38565b610a3883838151156139425781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107469190613aac565b508054613982906140d1565b6000825580601f10613992575050565b601f016020900490600052602060002090810190611bf191906139ca565b5080546000825590600052602060002090810190611bf191905b5b808211156139df57600081556001016139cb565b5090565b6000602082840312156139f557600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146122bc57600080fd5b600060208284031215613a3757600080fd5b5035919050565b60005b83811015613a59578181015183820152602001613a41565b50506000910152565b60008151808452613a7a816020860160208601613a3e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122bc6020830184613a62565b73ffffffffffffffffffffffffffffffffffffffff81168114611bf157600080fd5b600060208284031215613af357600080fd5b81356122bc81613abf565b600060208284031215613b1057600080fd5b813567ffffffffffffffff811115613b2757600080fd5b820161010081850312156122bc57600080fd5b803567ffffffffffffffff81168114613b5257600080fd5b919050565b600080600060408486031215613b6c57600080fd5b613b7584613b3a565b9250602084013567ffffffffffffffff80821115613b9257600080fd5b818601915086601f830112613ba657600080fd5b813581811115613bb557600080fd5b876020828501011115613bc757600080fd5b6020830194508093505050509250925092565b60008083601f840112613bec57600080fd5b50813567ffffffffffffffff811115613c0457600080fd5b6020830191508360208260051b8501011115613c1f57600080fd5b9250929050565b60008060008060408587031215613c3c57600080fd5b843567ffffffffffffffff80821115613c5457600080fd5b613c6088838901613bda565b90965094506020870135915080821115613c7957600080fd5b50613c8687828801613bda565b95989497509550505050565b60008060408385031215613ca557600080fd5b8235613cb081613abf565b946020939093013593505050565b600060208284031215613cd057600080fd5b6122bc82613b3a565b600060208284031215613ceb57600080fd5b813567ffffffffffffffff811115613d0257600080fd5b820160a081850312156122bc57600080fd5b602081526000825160406020840152613d306060840182613a62565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08483030160408501526131ad8282613a62565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015613de0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452613dce858351613a62565b94509285019290850190600101613d94565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613e3b57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101613e09565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613e3b57835167ffffffffffffffff1683529284019291840191600101613e63565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613edb57613edb613e89565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613f2857613f28613e89565b604052919050565b8015158114611bf157600080fd5b80356fffffffffffffffffffffffffffffffff81168114613b5257600080fd5b600060608284031215613f7057600080fd5b6040516060810181811067ffffffffffffffff82111715613f9357613f93613e89565b6040529050808235613fa481613f30565b8152613fb260208401613f3e565b6020820152613fc360408401613f3e565b60408201525092915050565b600080600060e08486031215613fe457600080fd5b613fed84613b3a565b9250613ffc8560208601613f5e565b915061400b8560808601613f5e565b90509250925092565b60006020828403121561402657600080fd5b5051919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261406257600080fd5b83018035915067ffffffffffffffff82111561407d57600080fd5b602001915036819003821315613c1f57600080fd5b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600181811c908216806140e557607f821691505b60208210810361411e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b67ffffffffffffffff841681526040602082015260006131ad604083018486614124565b602081526000610a38602083018486614124565b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18336030181126141d957600080fd5b9190910192915050565b600082601f8301126141f457600080fd5b813567ffffffffffffffff81111561420e5761420e613e89565b61423f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613ee1565b81815284602083860101111561425457600080fd5b816020850160208301376000918101602001919091529392505050565b6000610120823603121561428457600080fd5b61428c613eb8565b61429583613b3a565b815260208084013567ffffffffffffffff808211156142b357600080fd5b9085019036601f8301126142c657600080fd5b8135818111156142d8576142d8613e89565b8060051b6142e7858201613ee1565b918252838101850191858101903684111561430157600080fd5b86860192505b8383101561433d5782358581111561431f5760008081fd5b61432d3689838a01016141e3565b8352509186019190860190614307565b808789015250505050604086013592508083111561435a57600080fd5b5050614368368286016141e3565b60408301525061437b3660608501613f5e565b606082015261438d3660c08501613f5e565b608082015292915050565b601f821115610b4e576000816000526020600020601f850160051c810160208610156143c15750805b601f850160051c820191505b818110156143e0578281556001016143cd565b505050505050565b815167ffffffffffffffff81111561440257614402613e89565b6144168161441084546140d1565b84614398565b602080601f83116001811461446957600084156144335750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556143e0565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156144b657888601518255948401946001909101908401614497565b50858210156144f257878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff8716835280602084015261452681840187613a62565b8551151560408581019190915260208701516fffffffffffffffffffffffffffffffff90811660608701529087015116608085015291506145649050565b8251151560a083015260208301516fffffffffffffffffffffffffffffffff90811660c084015260408401511660e08301526131ad565b6000602082840312156145ad57600080fd5b81516122bc81613f30565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff82811682821603908111156106f1576106f16145b8565b600181815b8085111561465957817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561463f5761463f6145b8565b8085161561464c57918102915b93841c9390800290614605565b509250929050565b600082614670575060016106f1565b8161467d575060006106f1565b8160018114614693576002811461469d576146b9565b60019150506106f1565b60ff8411156146ae576146ae6145b8565b50506001821b6106f1565b5060208310610133831016604e8410600b84101617156146dc575081810a6106f1565b6146e68383614600565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115614718576147186145b8565b029392505050565b60006122bc60ff841683614661565b600082614765577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b80820281158282048414176106f1576106f16145b8565b67ffffffffffffffff83168152604060208201526000610a386040830184613a62565b818103818111156106f1576106f16145b8565b67ffffffffffffffff8416815260e0810161480360208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c0830152610a38565b606081016106f182848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b60006020828403121561488857600080fd5b81516122bc81613abf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b808201808211156106f1576106f16145b8565b600082516141d9818460208701613a3e56fea164736f6c6343000818000a", +} + +var LockReleaseTokenPoolABI = LockReleaseTokenPoolMetaData.ABI + +var LockReleaseTokenPoolBin = LockReleaseTokenPoolMetaData.Bin + +func DeployLockReleaseTokenPool(auth *bind.TransactOpts, backend bind.ContractBackend, token common.Address, localTokenDecimals uint8, allowlist []common.Address, rmnProxy common.Address, acceptLiquidity bool, router common.Address) (common.Address, *generated_zks.Transaction, *LockReleaseTokenPool, error) { + parsed, err := LockReleaseTokenPoolMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(LockReleaseTokenPoolZKBin), backend, token, localTokenDecimals, allowlist, rmnProxy, acceptLiquidity, router) + contractReturn := &LockReleaseTokenPool{address: address, abi: *parsed, LockReleaseTokenPoolCaller: LockReleaseTokenPoolCaller{contract: contractBind}, LockReleaseTokenPoolTransactor: LockReleaseTokenPoolTransactor{contract: contractBind}, LockReleaseTokenPoolFilterer: LockReleaseTokenPoolFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(LockReleaseTokenPoolBin), backend, token, localTokenDecimals, allowlist, rmnProxy, acceptLiquidity, router) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &LockReleaseTokenPool{address: address, abi: *parsed, LockReleaseTokenPoolCaller: LockReleaseTokenPoolCaller{contract: contract}, LockReleaseTokenPoolTransactor: LockReleaseTokenPoolTransactor{contract: contract}, LockReleaseTokenPoolFilterer: LockReleaseTokenPoolFilterer{contract: contract}}, nil +} + +type LockReleaseTokenPool struct { + address common.Address + abi abi.ABI + LockReleaseTokenPoolCaller + LockReleaseTokenPoolTransactor + LockReleaseTokenPoolFilterer +} + +type LockReleaseTokenPoolCaller struct { + contract *bind.BoundContract +} + +type LockReleaseTokenPoolTransactor struct { + contract *bind.BoundContract +} + +type LockReleaseTokenPoolFilterer struct { + contract *bind.BoundContract +} + +type LockReleaseTokenPoolSession struct { + Contract *LockReleaseTokenPool + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type LockReleaseTokenPoolCallerSession struct { + Contract *LockReleaseTokenPoolCaller + CallOpts bind.CallOpts +} + +type LockReleaseTokenPoolTransactorSession struct { + Contract *LockReleaseTokenPoolTransactor + TransactOpts bind.TransactOpts +} + +type LockReleaseTokenPoolRaw struct { + Contract *LockReleaseTokenPool +} + +type LockReleaseTokenPoolCallerRaw struct { + Contract *LockReleaseTokenPoolCaller +} + +type LockReleaseTokenPoolTransactorRaw struct { + Contract *LockReleaseTokenPoolTransactor +} + +func NewLockReleaseTokenPool(address common.Address, backend bind.ContractBackend) (*LockReleaseTokenPool, error) { + abi, err := abi.JSON(strings.NewReader(LockReleaseTokenPoolABI)) + if err != nil { + return nil, err + } + contract, err := bindLockReleaseTokenPool(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &LockReleaseTokenPool{address: address, abi: abi, LockReleaseTokenPoolCaller: LockReleaseTokenPoolCaller{contract: contract}, LockReleaseTokenPoolTransactor: LockReleaseTokenPoolTransactor{contract: contract}, LockReleaseTokenPoolFilterer: LockReleaseTokenPoolFilterer{contract: contract}}, nil +} + +func NewLockReleaseTokenPoolCaller(address common.Address, caller bind.ContractCaller) (*LockReleaseTokenPoolCaller, error) { + contract, err := bindLockReleaseTokenPool(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &LockReleaseTokenPoolCaller{contract: contract}, nil +} + +func NewLockReleaseTokenPoolTransactor(address common.Address, transactor bind.ContractTransactor) (*LockReleaseTokenPoolTransactor, error) { + contract, err := bindLockReleaseTokenPool(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &LockReleaseTokenPoolTransactor{contract: contract}, nil +} + +func NewLockReleaseTokenPoolFilterer(address common.Address, filterer bind.ContractFilterer) (*LockReleaseTokenPoolFilterer, error) { + contract, err := bindLockReleaseTokenPool(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &LockReleaseTokenPoolFilterer{contract: contract}, nil +} + +func bindLockReleaseTokenPool(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := LockReleaseTokenPoolMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _LockReleaseTokenPool.Contract.LockReleaseTokenPoolCaller.contract.Call(opts, result, method, params...) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.LockReleaseTokenPoolTransactor.contract.Transfer(opts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.LockReleaseTokenPoolTransactor.contract.Transact(opts, method, params...) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _LockReleaseTokenPool.Contract.contract.Call(opts, result, method, params...) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.contract.Transfer(opts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.contract.Transact(opts, method, params...) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCaller) CanAcceptLiquidity(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _LockReleaseTokenPool.contract.Call(opts, &out, "canAcceptLiquidity") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) CanAcceptLiquidity() (bool, error) { + return _LockReleaseTokenPool.Contract.CanAcceptLiquidity(&_LockReleaseTokenPool.CallOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCallerSession) CanAcceptLiquidity() (bool, error) { + return _LockReleaseTokenPool.Contract.CanAcceptLiquidity(&_LockReleaseTokenPool.CallOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCaller) GetAllowList(opts *bind.CallOpts) ([]common.Address, error) { + var out []interface{} + err := _LockReleaseTokenPool.contract.Call(opts, &out, "getAllowList") + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) GetAllowList() ([]common.Address, error) { + return _LockReleaseTokenPool.Contract.GetAllowList(&_LockReleaseTokenPool.CallOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCallerSession) GetAllowList() ([]common.Address, error) { + return _LockReleaseTokenPool.Contract.GetAllowList(&_LockReleaseTokenPool.CallOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCaller) GetAllowListEnabled(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _LockReleaseTokenPool.contract.Call(opts, &out, "getAllowListEnabled") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) GetAllowListEnabled() (bool, error) { + return _LockReleaseTokenPool.Contract.GetAllowListEnabled(&_LockReleaseTokenPool.CallOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCallerSession) GetAllowListEnabled() (bool, error) { + return _LockReleaseTokenPool.Contract.GetAllowListEnabled(&_LockReleaseTokenPool.CallOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCaller) GetCurrentInboundRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + var out []interface{} + err := _LockReleaseTokenPool.contract.Call(opts, &out, "getCurrentInboundRateLimiterState", remoteChainSelector) + + if err != nil { + return *new(RateLimiterTokenBucket), err + } + + out0 := *abi.ConvertType(out[0], new(RateLimiterTokenBucket)).(*RateLimiterTokenBucket) + + return out0, err + +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) GetCurrentInboundRateLimiterState(remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + return _LockReleaseTokenPool.Contract.GetCurrentInboundRateLimiterState(&_LockReleaseTokenPool.CallOpts, remoteChainSelector) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCallerSession) GetCurrentInboundRateLimiterState(remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + return _LockReleaseTokenPool.Contract.GetCurrentInboundRateLimiterState(&_LockReleaseTokenPool.CallOpts, remoteChainSelector) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCaller) GetCurrentOutboundRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + var out []interface{} + err := _LockReleaseTokenPool.contract.Call(opts, &out, "getCurrentOutboundRateLimiterState", remoteChainSelector) + + if err != nil { + return *new(RateLimiterTokenBucket), err + } + + out0 := *abi.ConvertType(out[0], new(RateLimiterTokenBucket)).(*RateLimiterTokenBucket) + + return out0, err + +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) GetCurrentOutboundRateLimiterState(remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + return _LockReleaseTokenPool.Contract.GetCurrentOutboundRateLimiterState(&_LockReleaseTokenPool.CallOpts, remoteChainSelector) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCallerSession) GetCurrentOutboundRateLimiterState(remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + return _LockReleaseTokenPool.Contract.GetCurrentOutboundRateLimiterState(&_LockReleaseTokenPool.CallOpts, remoteChainSelector) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCaller) GetRateLimitAdmin(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _LockReleaseTokenPool.contract.Call(opts, &out, "getRateLimitAdmin") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) GetRateLimitAdmin() (common.Address, error) { + return _LockReleaseTokenPool.Contract.GetRateLimitAdmin(&_LockReleaseTokenPool.CallOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCallerSession) GetRateLimitAdmin() (common.Address, error) { + return _LockReleaseTokenPool.Contract.GetRateLimitAdmin(&_LockReleaseTokenPool.CallOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCaller) GetRebalancer(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _LockReleaseTokenPool.contract.Call(opts, &out, "getRebalancer") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) GetRebalancer() (common.Address, error) { + return _LockReleaseTokenPool.Contract.GetRebalancer(&_LockReleaseTokenPool.CallOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCallerSession) GetRebalancer() (common.Address, error) { + return _LockReleaseTokenPool.Contract.GetRebalancer(&_LockReleaseTokenPool.CallOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCaller) GetRemotePools(opts *bind.CallOpts, remoteChainSelector uint64) ([][]byte, error) { + var out []interface{} + err := _LockReleaseTokenPool.contract.Call(opts, &out, "getRemotePools", remoteChainSelector) + + if err != nil { + return *new([][]byte), err + } + + out0 := *abi.ConvertType(out[0], new([][]byte)).(*[][]byte) + + return out0, err + +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) GetRemotePools(remoteChainSelector uint64) ([][]byte, error) { + return _LockReleaseTokenPool.Contract.GetRemotePools(&_LockReleaseTokenPool.CallOpts, remoteChainSelector) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCallerSession) GetRemotePools(remoteChainSelector uint64) ([][]byte, error) { + return _LockReleaseTokenPool.Contract.GetRemotePools(&_LockReleaseTokenPool.CallOpts, remoteChainSelector) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCaller) GetRemoteToken(opts *bind.CallOpts, remoteChainSelector uint64) ([]byte, error) { + var out []interface{} + err := _LockReleaseTokenPool.contract.Call(opts, &out, "getRemoteToken", remoteChainSelector) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) GetRemoteToken(remoteChainSelector uint64) ([]byte, error) { + return _LockReleaseTokenPool.Contract.GetRemoteToken(&_LockReleaseTokenPool.CallOpts, remoteChainSelector) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCallerSession) GetRemoteToken(remoteChainSelector uint64) ([]byte, error) { + return _LockReleaseTokenPool.Contract.GetRemoteToken(&_LockReleaseTokenPool.CallOpts, remoteChainSelector) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCaller) GetRmnProxy(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _LockReleaseTokenPool.contract.Call(opts, &out, "getRmnProxy") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) GetRmnProxy() (common.Address, error) { + return _LockReleaseTokenPool.Contract.GetRmnProxy(&_LockReleaseTokenPool.CallOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCallerSession) GetRmnProxy() (common.Address, error) { + return _LockReleaseTokenPool.Contract.GetRmnProxy(&_LockReleaseTokenPool.CallOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCaller) GetRouter(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _LockReleaseTokenPool.contract.Call(opts, &out, "getRouter") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) GetRouter() (common.Address, error) { + return _LockReleaseTokenPool.Contract.GetRouter(&_LockReleaseTokenPool.CallOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCallerSession) GetRouter() (common.Address, error) { + return _LockReleaseTokenPool.Contract.GetRouter(&_LockReleaseTokenPool.CallOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCaller) GetSupportedChains(opts *bind.CallOpts) ([]uint64, error) { + var out []interface{} + err := _LockReleaseTokenPool.contract.Call(opts, &out, "getSupportedChains") + + if err != nil { + return *new([]uint64), err + } + + out0 := *abi.ConvertType(out[0], new([]uint64)).(*[]uint64) + + return out0, err + +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) GetSupportedChains() ([]uint64, error) { + return _LockReleaseTokenPool.Contract.GetSupportedChains(&_LockReleaseTokenPool.CallOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCallerSession) GetSupportedChains() ([]uint64, error) { + return _LockReleaseTokenPool.Contract.GetSupportedChains(&_LockReleaseTokenPool.CallOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCaller) GetToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _LockReleaseTokenPool.contract.Call(opts, &out, "getToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) GetToken() (common.Address, error) { + return _LockReleaseTokenPool.Contract.GetToken(&_LockReleaseTokenPool.CallOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCallerSession) GetToken() (common.Address, error) { + return _LockReleaseTokenPool.Contract.GetToken(&_LockReleaseTokenPool.CallOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCaller) GetTokenDecimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _LockReleaseTokenPool.contract.Call(opts, &out, "getTokenDecimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) GetTokenDecimals() (uint8, error) { + return _LockReleaseTokenPool.Contract.GetTokenDecimals(&_LockReleaseTokenPool.CallOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCallerSession) GetTokenDecimals() (uint8, error) { + return _LockReleaseTokenPool.Contract.GetTokenDecimals(&_LockReleaseTokenPool.CallOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCaller) IsRemotePool(opts *bind.CallOpts, remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) { + var out []interface{} + err := _LockReleaseTokenPool.contract.Call(opts, &out, "isRemotePool", remoteChainSelector, remotePoolAddress) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) IsRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) { + return _LockReleaseTokenPool.Contract.IsRemotePool(&_LockReleaseTokenPool.CallOpts, remoteChainSelector, remotePoolAddress) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCallerSession) IsRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) { + return _LockReleaseTokenPool.Contract.IsRemotePool(&_LockReleaseTokenPool.CallOpts, remoteChainSelector, remotePoolAddress) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCaller) IsSupportedChain(opts *bind.CallOpts, remoteChainSelector uint64) (bool, error) { + var out []interface{} + err := _LockReleaseTokenPool.contract.Call(opts, &out, "isSupportedChain", remoteChainSelector) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) IsSupportedChain(remoteChainSelector uint64) (bool, error) { + return _LockReleaseTokenPool.Contract.IsSupportedChain(&_LockReleaseTokenPool.CallOpts, remoteChainSelector) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCallerSession) IsSupportedChain(remoteChainSelector uint64) (bool, error) { + return _LockReleaseTokenPool.Contract.IsSupportedChain(&_LockReleaseTokenPool.CallOpts, remoteChainSelector) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCaller) IsSupportedToken(opts *bind.CallOpts, token common.Address) (bool, error) { + var out []interface{} + err := _LockReleaseTokenPool.contract.Call(opts, &out, "isSupportedToken", token) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) IsSupportedToken(token common.Address) (bool, error) { + return _LockReleaseTokenPool.Contract.IsSupportedToken(&_LockReleaseTokenPool.CallOpts, token) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCallerSession) IsSupportedToken(token common.Address) (bool, error) { + return _LockReleaseTokenPool.Contract.IsSupportedToken(&_LockReleaseTokenPool.CallOpts, token) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _LockReleaseTokenPool.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 + +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) Owner() (common.Address, error) { + return _LockReleaseTokenPool.Contract.Owner(&_LockReleaseTokenPool.CallOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCallerSession) Owner() (common.Address, error) { + return _LockReleaseTokenPool.Contract.Owner(&_LockReleaseTokenPool.CallOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _LockReleaseTokenPool.contract.Call(opts, &out, "supportsInterface", interfaceId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _LockReleaseTokenPool.Contract.SupportsInterface(&_LockReleaseTokenPool.CallOpts, interfaceId) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _LockReleaseTokenPool.Contract.SupportsInterface(&_LockReleaseTokenPool.CallOpts, interfaceId) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _LockReleaseTokenPool.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) TypeAndVersion() (string, error) { + return _LockReleaseTokenPool.Contract.TypeAndVersion(&_LockReleaseTokenPool.CallOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolCallerSession) TypeAndVersion() (string, error) { + return _LockReleaseTokenPool.Contract.TypeAndVersion(&_LockReleaseTokenPool.CallOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _LockReleaseTokenPool.contract.Transact(opts, "acceptOwnership") +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) AcceptOwnership() (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.AcceptOwnership(&_LockReleaseTokenPool.TransactOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.AcceptOwnership(&_LockReleaseTokenPool.TransactOpts) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactor) AddRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _LockReleaseTokenPool.contract.Transact(opts, "addRemotePool", remoteChainSelector, remotePoolAddress) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) AddRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.AddRemotePool(&_LockReleaseTokenPool.TransactOpts, remoteChainSelector, remotePoolAddress) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactorSession) AddRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.AddRemotePool(&_LockReleaseTokenPool.TransactOpts, remoteChainSelector, remotePoolAddress) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactor) ApplyAllowListUpdates(opts *bind.TransactOpts, removes []common.Address, adds []common.Address) (*types.Transaction, error) { + return _LockReleaseTokenPool.contract.Transact(opts, "applyAllowListUpdates", removes, adds) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) ApplyAllowListUpdates(removes []common.Address, adds []common.Address) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.ApplyAllowListUpdates(&_LockReleaseTokenPool.TransactOpts, removes, adds) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactorSession) ApplyAllowListUpdates(removes []common.Address, adds []common.Address) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.ApplyAllowListUpdates(&_LockReleaseTokenPool.TransactOpts, removes, adds) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactor) ApplyChainUpdates(opts *bind.TransactOpts, remoteChainSelectorsToRemove []uint64, chainsToAdd []TokenPoolChainUpdate) (*types.Transaction, error) { + return _LockReleaseTokenPool.contract.Transact(opts, "applyChainUpdates", remoteChainSelectorsToRemove, chainsToAdd) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) ApplyChainUpdates(remoteChainSelectorsToRemove []uint64, chainsToAdd []TokenPoolChainUpdate) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.ApplyChainUpdates(&_LockReleaseTokenPool.TransactOpts, remoteChainSelectorsToRemove, chainsToAdd) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactorSession) ApplyChainUpdates(remoteChainSelectorsToRemove []uint64, chainsToAdd []TokenPoolChainUpdate) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.ApplyChainUpdates(&_LockReleaseTokenPool.TransactOpts, remoteChainSelectorsToRemove, chainsToAdd) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactor) LockOrBurn(opts *bind.TransactOpts, lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) { + return _LockReleaseTokenPool.contract.Transact(opts, "lockOrBurn", lockOrBurnIn) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) LockOrBurn(lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.LockOrBurn(&_LockReleaseTokenPool.TransactOpts, lockOrBurnIn) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactorSession) LockOrBurn(lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.LockOrBurn(&_LockReleaseTokenPool.TransactOpts, lockOrBurnIn) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactor) ProvideLiquidity(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) { + return _LockReleaseTokenPool.contract.Transact(opts, "provideLiquidity", amount) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) ProvideLiquidity(amount *big.Int) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.ProvideLiquidity(&_LockReleaseTokenPool.TransactOpts, amount) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactorSession) ProvideLiquidity(amount *big.Int) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.ProvideLiquidity(&_LockReleaseTokenPool.TransactOpts, amount) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactor) ReleaseOrMint(opts *bind.TransactOpts, releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) { + return _LockReleaseTokenPool.contract.Transact(opts, "releaseOrMint", releaseOrMintIn) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) ReleaseOrMint(releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.ReleaseOrMint(&_LockReleaseTokenPool.TransactOpts, releaseOrMintIn) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactorSession) ReleaseOrMint(releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.ReleaseOrMint(&_LockReleaseTokenPool.TransactOpts, releaseOrMintIn) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactor) RemoveRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _LockReleaseTokenPool.contract.Transact(opts, "removeRemotePool", remoteChainSelector, remotePoolAddress) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) RemoveRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.RemoveRemotePool(&_LockReleaseTokenPool.TransactOpts, remoteChainSelector, remotePoolAddress) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactorSession) RemoveRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.RemoveRemotePool(&_LockReleaseTokenPool.TransactOpts, remoteChainSelector, remotePoolAddress) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactor) SetChainRateLimiterConfig(opts *bind.TransactOpts, remoteChainSelector uint64, outboundConfig RateLimiterConfig, inboundConfig RateLimiterConfig) (*types.Transaction, error) { + return _LockReleaseTokenPool.contract.Transact(opts, "setChainRateLimiterConfig", remoteChainSelector, outboundConfig, inboundConfig) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) SetChainRateLimiterConfig(remoteChainSelector uint64, outboundConfig RateLimiterConfig, inboundConfig RateLimiterConfig) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.SetChainRateLimiterConfig(&_LockReleaseTokenPool.TransactOpts, remoteChainSelector, outboundConfig, inboundConfig) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactorSession) SetChainRateLimiterConfig(remoteChainSelector uint64, outboundConfig RateLimiterConfig, inboundConfig RateLimiterConfig) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.SetChainRateLimiterConfig(&_LockReleaseTokenPool.TransactOpts, remoteChainSelector, outboundConfig, inboundConfig) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactor) SetRateLimitAdmin(opts *bind.TransactOpts, rateLimitAdmin common.Address) (*types.Transaction, error) { + return _LockReleaseTokenPool.contract.Transact(opts, "setRateLimitAdmin", rateLimitAdmin) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) SetRateLimitAdmin(rateLimitAdmin common.Address) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.SetRateLimitAdmin(&_LockReleaseTokenPool.TransactOpts, rateLimitAdmin) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactorSession) SetRateLimitAdmin(rateLimitAdmin common.Address) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.SetRateLimitAdmin(&_LockReleaseTokenPool.TransactOpts, rateLimitAdmin) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactor) SetRebalancer(opts *bind.TransactOpts, rebalancer common.Address) (*types.Transaction, error) { + return _LockReleaseTokenPool.contract.Transact(opts, "setRebalancer", rebalancer) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) SetRebalancer(rebalancer common.Address) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.SetRebalancer(&_LockReleaseTokenPool.TransactOpts, rebalancer) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactorSession) SetRebalancer(rebalancer common.Address) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.SetRebalancer(&_LockReleaseTokenPool.TransactOpts, rebalancer) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactor) SetRouter(opts *bind.TransactOpts, newRouter common.Address) (*types.Transaction, error) { + return _LockReleaseTokenPool.contract.Transact(opts, "setRouter", newRouter) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) SetRouter(newRouter common.Address) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.SetRouter(&_LockReleaseTokenPool.TransactOpts, newRouter) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactorSession) SetRouter(newRouter common.Address) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.SetRouter(&_LockReleaseTokenPool.TransactOpts, newRouter) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactor) TransferLiquidity(opts *bind.TransactOpts, from common.Address, amount *big.Int) (*types.Transaction, error) { + return _LockReleaseTokenPool.contract.Transact(opts, "transferLiquidity", from, amount) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) TransferLiquidity(from common.Address, amount *big.Int) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.TransferLiquidity(&_LockReleaseTokenPool.TransactOpts, from, amount) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactorSession) TransferLiquidity(from common.Address, amount *big.Int) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.TransferLiquidity(&_LockReleaseTokenPool.TransactOpts, from, amount) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _LockReleaseTokenPool.contract.Transact(opts, "transferOwnership", to) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.TransferOwnership(&_LockReleaseTokenPool.TransactOpts, to) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.TransferOwnership(&_LockReleaseTokenPool.TransactOpts, to) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactor) WithdrawLiquidity(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) { + return _LockReleaseTokenPool.contract.Transact(opts, "withdrawLiquidity", amount) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolSession) WithdrawLiquidity(amount *big.Int) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.WithdrawLiquidity(&_LockReleaseTokenPool.TransactOpts, amount) +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolTransactorSession) WithdrawLiquidity(amount *big.Int) (*types.Transaction, error) { + return _LockReleaseTokenPool.Contract.WithdrawLiquidity(&_LockReleaseTokenPool.TransactOpts, amount) +} + +type LockReleaseTokenPoolAllowListAddIterator struct { + Event *LockReleaseTokenPoolAllowListAdd + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *LockReleaseTokenPoolAllowListAddIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolAllowListAdd) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolAllowListAdd) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *LockReleaseTokenPoolAllowListAddIterator) Error() error { + return it.fail +} + +func (it *LockReleaseTokenPoolAllowListAddIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type LockReleaseTokenPoolAllowListAdd struct { + Sender common.Address + Raw types.Log +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) FilterAllowListAdd(opts *bind.FilterOpts) (*LockReleaseTokenPoolAllowListAddIterator, error) { + + logs, sub, err := _LockReleaseTokenPool.contract.FilterLogs(opts, "AllowListAdd") + if err != nil { + return nil, err + } + return &LockReleaseTokenPoolAllowListAddIterator{contract: _LockReleaseTokenPool.contract, event: "AllowListAdd", logs: logs, sub: sub}, nil +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) WatchAllowListAdd(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolAllowListAdd) (event.Subscription, error) { + + logs, sub, err := _LockReleaseTokenPool.contract.WatchLogs(opts, "AllowListAdd") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(LockReleaseTokenPoolAllowListAdd) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "AllowListAdd", 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 +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) ParseAllowListAdd(log types.Log) (*LockReleaseTokenPoolAllowListAdd, error) { + event := new(LockReleaseTokenPoolAllowListAdd) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "AllowListAdd", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type LockReleaseTokenPoolAllowListRemoveIterator struct { + Event *LockReleaseTokenPoolAllowListRemove + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *LockReleaseTokenPoolAllowListRemoveIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolAllowListRemove) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolAllowListRemove) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *LockReleaseTokenPoolAllowListRemoveIterator) Error() error { + return it.fail +} + +func (it *LockReleaseTokenPoolAllowListRemoveIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type LockReleaseTokenPoolAllowListRemove struct { + Sender common.Address + Raw types.Log +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) FilterAllowListRemove(opts *bind.FilterOpts) (*LockReleaseTokenPoolAllowListRemoveIterator, error) { + + logs, sub, err := _LockReleaseTokenPool.contract.FilterLogs(opts, "AllowListRemove") + if err != nil { + return nil, err + } + return &LockReleaseTokenPoolAllowListRemoveIterator{contract: _LockReleaseTokenPool.contract, event: "AllowListRemove", logs: logs, sub: sub}, nil +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) WatchAllowListRemove(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolAllowListRemove) (event.Subscription, error) { + + logs, sub, err := _LockReleaseTokenPool.contract.WatchLogs(opts, "AllowListRemove") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(LockReleaseTokenPoolAllowListRemove) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "AllowListRemove", 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 +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) ParseAllowListRemove(log types.Log) (*LockReleaseTokenPoolAllowListRemove, error) { + event := new(LockReleaseTokenPoolAllowListRemove) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "AllowListRemove", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type LockReleaseTokenPoolBurnedIterator struct { + Event *LockReleaseTokenPoolBurned + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *LockReleaseTokenPoolBurnedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolBurned) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolBurned) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *LockReleaseTokenPoolBurnedIterator) Error() error { + return it.fail +} + +func (it *LockReleaseTokenPoolBurnedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type LockReleaseTokenPoolBurned struct { + Sender common.Address + Amount *big.Int + Raw types.Log +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) FilterBurned(opts *bind.FilterOpts, sender []common.Address) (*LockReleaseTokenPoolBurnedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _LockReleaseTokenPool.contract.FilterLogs(opts, "Burned", senderRule) + if err != nil { + return nil, err + } + return &LockReleaseTokenPoolBurnedIterator{contract: _LockReleaseTokenPool.contract, event: "Burned", logs: logs, sub: sub}, nil +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) WatchBurned(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolBurned, sender []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _LockReleaseTokenPool.contract.WatchLogs(opts, "Burned", senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(LockReleaseTokenPoolBurned) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "Burned", 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 +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) ParseBurned(log types.Log) (*LockReleaseTokenPoolBurned, error) { + event := new(LockReleaseTokenPoolBurned) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "Burned", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type LockReleaseTokenPoolChainAddedIterator struct { + Event *LockReleaseTokenPoolChainAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *LockReleaseTokenPoolChainAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolChainAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolChainAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *LockReleaseTokenPoolChainAddedIterator) Error() error { + return it.fail +} + +func (it *LockReleaseTokenPoolChainAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type LockReleaseTokenPoolChainAdded struct { + RemoteChainSelector uint64 + RemoteToken []byte + OutboundRateLimiterConfig RateLimiterConfig + InboundRateLimiterConfig RateLimiterConfig + Raw types.Log +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) FilterChainAdded(opts *bind.FilterOpts) (*LockReleaseTokenPoolChainAddedIterator, error) { + + logs, sub, err := _LockReleaseTokenPool.contract.FilterLogs(opts, "ChainAdded") + if err != nil { + return nil, err + } + return &LockReleaseTokenPoolChainAddedIterator{contract: _LockReleaseTokenPool.contract, event: "ChainAdded", logs: logs, sub: sub}, nil +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) WatchChainAdded(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolChainAdded) (event.Subscription, error) { + + logs, sub, err := _LockReleaseTokenPool.contract.WatchLogs(opts, "ChainAdded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(LockReleaseTokenPoolChainAdded) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "ChainAdded", 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 +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) ParseChainAdded(log types.Log) (*LockReleaseTokenPoolChainAdded, error) { + event := new(LockReleaseTokenPoolChainAdded) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "ChainAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type LockReleaseTokenPoolChainConfiguredIterator struct { + Event *LockReleaseTokenPoolChainConfigured + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *LockReleaseTokenPoolChainConfiguredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolChainConfigured) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolChainConfigured) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *LockReleaseTokenPoolChainConfiguredIterator) Error() error { + return it.fail +} + +func (it *LockReleaseTokenPoolChainConfiguredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type LockReleaseTokenPoolChainConfigured struct { + RemoteChainSelector uint64 + OutboundRateLimiterConfig RateLimiterConfig + InboundRateLimiterConfig RateLimiterConfig + Raw types.Log +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) FilterChainConfigured(opts *bind.FilterOpts) (*LockReleaseTokenPoolChainConfiguredIterator, error) { + + logs, sub, err := _LockReleaseTokenPool.contract.FilterLogs(opts, "ChainConfigured") + if err != nil { + return nil, err + } + return &LockReleaseTokenPoolChainConfiguredIterator{contract: _LockReleaseTokenPool.contract, event: "ChainConfigured", logs: logs, sub: sub}, nil +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) WatchChainConfigured(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolChainConfigured) (event.Subscription, error) { + + logs, sub, err := _LockReleaseTokenPool.contract.WatchLogs(opts, "ChainConfigured") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(LockReleaseTokenPoolChainConfigured) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "ChainConfigured", 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 +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) ParseChainConfigured(log types.Log) (*LockReleaseTokenPoolChainConfigured, error) { + event := new(LockReleaseTokenPoolChainConfigured) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "ChainConfigured", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type LockReleaseTokenPoolChainRemovedIterator struct { + Event *LockReleaseTokenPoolChainRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *LockReleaseTokenPoolChainRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolChainRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolChainRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *LockReleaseTokenPoolChainRemovedIterator) Error() error { + return it.fail +} + +func (it *LockReleaseTokenPoolChainRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type LockReleaseTokenPoolChainRemoved struct { + RemoteChainSelector uint64 + Raw types.Log +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) FilterChainRemoved(opts *bind.FilterOpts) (*LockReleaseTokenPoolChainRemovedIterator, error) { + + logs, sub, err := _LockReleaseTokenPool.contract.FilterLogs(opts, "ChainRemoved") + if err != nil { + return nil, err + } + return &LockReleaseTokenPoolChainRemovedIterator{contract: _LockReleaseTokenPool.contract, event: "ChainRemoved", logs: logs, sub: sub}, nil +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolChainRemoved) (event.Subscription, error) { + + logs, sub, err := _LockReleaseTokenPool.contract.WatchLogs(opts, "ChainRemoved") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(LockReleaseTokenPoolChainRemoved) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "ChainRemoved", 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 +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) ParseChainRemoved(log types.Log) (*LockReleaseTokenPoolChainRemoved, error) { + event := new(LockReleaseTokenPoolChainRemoved) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "ChainRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type LockReleaseTokenPoolConfigChangedIterator struct { + Event *LockReleaseTokenPoolConfigChanged + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *LockReleaseTokenPoolConfigChangedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolConfigChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolConfigChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *LockReleaseTokenPoolConfigChangedIterator) Error() error { + return it.fail +} + +func (it *LockReleaseTokenPoolConfigChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type LockReleaseTokenPoolConfigChanged struct { + Config RateLimiterConfig + Raw types.Log +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) FilterConfigChanged(opts *bind.FilterOpts) (*LockReleaseTokenPoolConfigChangedIterator, error) { + + logs, sub, err := _LockReleaseTokenPool.contract.FilterLogs(opts, "ConfigChanged") + if err != nil { + return nil, err + } + return &LockReleaseTokenPoolConfigChangedIterator{contract: _LockReleaseTokenPool.contract, event: "ConfigChanged", logs: logs, sub: sub}, nil +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) WatchConfigChanged(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolConfigChanged) (event.Subscription, error) { + + logs, sub, err := _LockReleaseTokenPool.contract.WatchLogs(opts, "ConfigChanged") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(LockReleaseTokenPoolConfigChanged) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "ConfigChanged", 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 +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) ParseConfigChanged(log types.Log) (*LockReleaseTokenPoolConfigChanged, error) { + event := new(LockReleaseTokenPoolConfigChanged) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "ConfigChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type LockReleaseTokenPoolLiquidityAddedIterator struct { + Event *LockReleaseTokenPoolLiquidityAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *LockReleaseTokenPoolLiquidityAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolLiquidityAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolLiquidityAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *LockReleaseTokenPoolLiquidityAddedIterator) Error() error { + return it.fail +} + +func (it *LockReleaseTokenPoolLiquidityAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type LockReleaseTokenPoolLiquidityAdded struct { + Provider common.Address + Amount *big.Int + Raw types.Log +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) FilterLiquidityAdded(opts *bind.FilterOpts, provider []common.Address, amount []*big.Int) (*LockReleaseTokenPoolLiquidityAddedIterator, error) { + + var providerRule []interface{} + for _, providerItem := range provider { + providerRule = append(providerRule, providerItem) + } + var amountRule []interface{} + for _, amountItem := range amount { + amountRule = append(amountRule, amountItem) + } + + logs, sub, err := _LockReleaseTokenPool.contract.FilterLogs(opts, "LiquidityAdded", providerRule, amountRule) + if err != nil { + return nil, err + } + return &LockReleaseTokenPoolLiquidityAddedIterator{contract: _LockReleaseTokenPool.contract, event: "LiquidityAdded", logs: logs, sub: sub}, nil +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) WatchLiquidityAdded(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolLiquidityAdded, provider []common.Address, amount []*big.Int) (event.Subscription, error) { + + var providerRule []interface{} + for _, providerItem := range provider { + providerRule = append(providerRule, providerItem) + } + var amountRule []interface{} + for _, amountItem := range amount { + amountRule = append(amountRule, amountItem) + } + + logs, sub, err := _LockReleaseTokenPool.contract.WatchLogs(opts, "LiquidityAdded", providerRule, amountRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(LockReleaseTokenPoolLiquidityAdded) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "LiquidityAdded", 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 +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) ParseLiquidityAdded(log types.Log) (*LockReleaseTokenPoolLiquidityAdded, error) { + event := new(LockReleaseTokenPoolLiquidityAdded) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "LiquidityAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type LockReleaseTokenPoolLiquidityRemovedIterator struct { + Event *LockReleaseTokenPoolLiquidityRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *LockReleaseTokenPoolLiquidityRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolLiquidityRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolLiquidityRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *LockReleaseTokenPoolLiquidityRemovedIterator) Error() error { + return it.fail +} + +func (it *LockReleaseTokenPoolLiquidityRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type LockReleaseTokenPoolLiquidityRemoved struct { + Provider common.Address + Amount *big.Int + Raw types.Log +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) FilterLiquidityRemoved(opts *bind.FilterOpts, provider []common.Address, amount []*big.Int) (*LockReleaseTokenPoolLiquidityRemovedIterator, error) { + + var providerRule []interface{} + for _, providerItem := range provider { + providerRule = append(providerRule, providerItem) + } + var amountRule []interface{} + for _, amountItem := range amount { + amountRule = append(amountRule, amountItem) + } + + logs, sub, err := _LockReleaseTokenPool.contract.FilterLogs(opts, "LiquidityRemoved", providerRule, amountRule) + if err != nil { + return nil, err + } + return &LockReleaseTokenPoolLiquidityRemovedIterator{contract: _LockReleaseTokenPool.contract, event: "LiquidityRemoved", logs: logs, sub: sub}, nil +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) WatchLiquidityRemoved(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolLiquidityRemoved, provider []common.Address, amount []*big.Int) (event.Subscription, error) { + + var providerRule []interface{} + for _, providerItem := range provider { + providerRule = append(providerRule, providerItem) + } + var amountRule []interface{} + for _, amountItem := range amount { + amountRule = append(amountRule, amountItem) + } + + logs, sub, err := _LockReleaseTokenPool.contract.WatchLogs(opts, "LiquidityRemoved", providerRule, amountRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(LockReleaseTokenPoolLiquidityRemoved) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "LiquidityRemoved", 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 +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) ParseLiquidityRemoved(log types.Log) (*LockReleaseTokenPoolLiquidityRemoved, error) { + event := new(LockReleaseTokenPoolLiquidityRemoved) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "LiquidityRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type LockReleaseTokenPoolLiquidityTransferredIterator struct { + Event *LockReleaseTokenPoolLiquidityTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *LockReleaseTokenPoolLiquidityTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolLiquidityTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolLiquidityTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *LockReleaseTokenPoolLiquidityTransferredIterator) Error() error { + return it.fail +} + +func (it *LockReleaseTokenPoolLiquidityTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type LockReleaseTokenPoolLiquidityTransferred struct { + From common.Address + Amount *big.Int + Raw types.Log +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) FilterLiquidityTransferred(opts *bind.FilterOpts, from []common.Address) (*LockReleaseTokenPoolLiquidityTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _LockReleaseTokenPool.contract.FilterLogs(opts, "LiquidityTransferred", fromRule) + if err != nil { + return nil, err + } + return &LockReleaseTokenPoolLiquidityTransferredIterator{contract: _LockReleaseTokenPool.contract, event: "LiquidityTransferred", logs: logs, sub: sub}, nil +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) WatchLiquidityTransferred(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolLiquidityTransferred, from []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + + logs, sub, err := _LockReleaseTokenPool.contract.WatchLogs(opts, "LiquidityTransferred", fromRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(LockReleaseTokenPoolLiquidityTransferred) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "LiquidityTransferred", 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 +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) ParseLiquidityTransferred(log types.Log) (*LockReleaseTokenPoolLiquidityTransferred, error) { + event := new(LockReleaseTokenPoolLiquidityTransferred) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "LiquidityTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type LockReleaseTokenPoolLockedIterator struct { + Event *LockReleaseTokenPoolLocked + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *LockReleaseTokenPoolLockedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolLocked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolLocked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *LockReleaseTokenPoolLockedIterator) Error() error { + return it.fail +} + +func (it *LockReleaseTokenPoolLockedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type LockReleaseTokenPoolLocked struct { + Sender common.Address + Amount *big.Int + Raw types.Log +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) FilterLocked(opts *bind.FilterOpts, sender []common.Address) (*LockReleaseTokenPoolLockedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _LockReleaseTokenPool.contract.FilterLogs(opts, "Locked", senderRule) + if err != nil { + return nil, err + } + return &LockReleaseTokenPoolLockedIterator{contract: _LockReleaseTokenPool.contract, event: "Locked", logs: logs, sub: sub}, nil +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) WatchLocked(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolLocked, sender []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _LockReleaseTokenPool.contract.WatchLogs(opts, "Locked", senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(LockReleaseTokenPoolLocked) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "Locked", 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 +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) ParseLocked(log types.Log) (*LockReleaseTokenPoolLocked, error) { + event := new(LockReleaseTokenPoolLocked) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "Locked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type LockReleaseTokenPoolMintedIterator struct { + Event *LockReleaseTokenPoolMinted + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *LockReleaseTokenPoolMintedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolMinted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolMinted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *LockReleaseTokenPoolMintedIterator) Error() error { + return it.fail +} + +func (it *LockReleaseTokenPoolMintedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type LockReleaseTokenPoolMinted struct { + Sender common.Address + Recipient common.Address + Amount *big.Int + Raw types.Log +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) FilterMinted(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*LockReleaseTokenPoolMintedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _LockReleaseTokenPool.contract.FilterLogs(opts, "Minted", senderRule, recipientRule) + if err != nil { + return nil, err + } + return &LockReleaseTokenPoolMintedIterator{contract: _LockReleaseTokenPool.contract, event: "Minted", logs: logs, sub: sub}, nil +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) WatchMinted(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolMinted, sender []common.Address, recipient []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _LockReleaseTokenPool.contract.WatchLogs(opts, "Minted", senderRule, recipientRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(LockReleaseTokenPoolMinted) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "Minted", 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 +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) ParseMinted(log types.Log) (*LockReleaseTokenPoolMinted, error) { + event := new(LockReleaseTokenPoolMinted) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "Minted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type LockReleaseTokenPoolOwnershipTransferRequestedIterator struct { + Event *LockReleaseTokenPoolOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *LockReleaseTokenPoolOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *LockReleaseTokenPoolOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *LockReleaseTokenPoolOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type LockReleaseTokenPoolOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*LockReleaseTokenPoolOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _LockReleaseTokenPool.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &LockReleaseTokenPoolOwnershipTransferRequestedIterator{contract: _LockReleaseTokenPool.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _LockReleaseTokenPool.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(LockReleaseTokenPoolOwnershipTransferRequested) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "OwnershipTransferRequested", 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 +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) ParseOwnershipTransferRequested(log types.Log) (*LockReleaseTokenPoolOwnershipTransferRequested, error) { + event := new(LockReleaseTokenPoolOwnershipTransferRequested) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type LockReleaseTokenPoolOwnershipTransferredIterator struct { + Event *LockReleaseTokenPoolOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *LockReleaseTokenPoolOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *LockReleaseTokenPoolOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *LockReleaseTokenPoolOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type LockReleaseTokenPoolOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*LockReleaseTokenPoolOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _LockReleaseTokenPool.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &LockReleaseTokenPoolOwnershipTransferredIterator{contract: _LockReleaseTokenPool.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _LockReleaseTokenPool.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(LockReleaseTokenPoolOwnershipTransferred) + if err := _LockReleaseTokenPool.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 +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) ParseOwnershipTransferred(log types.Log) (*LockReleaseTokenPoolOwnershipTransferred, error) { + event := new(LockReleaseTokenPoolOwnershipTransferred) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type LockReleaseTokenPoolRateLimitAdminSetIterator struct { + Event *LockReleaseTokenPoolRateLimitAdminSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *LockReleaseTokenPoolRateLimitAdminSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolRateLimitAdminSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolRateLimitAdminSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *LockReleaseTokenPoolRateLimitAdminSetIterator) Error() error { + return it.fail +} + +func (it *LockReleaseTokenPoolRateLimitAdminSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type LockReleaseTokenPoolRateLimitAdminSet struct { + RateLimitAdmin common.Address + Raw types.Log +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) FilterRateLimitAdminSet(opts *bind.FilterOpts) (*LockReleaseTokenPoolRateLimitAdminSetIterator, error) { + + logs, sub, err := _LockReleaseTokenPool.contract.FilterLogs(opts, "RateLimitAdminSet") + if err != nil { + return nil, err + } + return &LockReleaseTokenPoolRateLimitAdminSetIterator{contract: _LockReleaseTokenPool.contract, event: "RateLimitAdminSet", logs: logs, sub: sub}, nil +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) WatchRateLimitAdminSet(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolRateLimitAdminSet) (event.Subscription, error) { + + logs, sub, err := _LockReleaseTokenPool.contract.WatchLogs(opts, "RateLimitAdminSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(LockReleaseTokenPoolRateLimitAdminSet) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "RateLimitAdminSet", 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 +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) ParseRateLimitAdminSet(log types.Log) (*LockReleaseTokenPoolRateLimitAdminSet, error) { + event := new(LockReleaseTokenPoolRateLimitAdminSet) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "RateLimitAdminSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type LockReleaseTokenPoolReleasedIterator struct { + Event *LockReleaseTokenPoolReleased + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *LockReleaseTokenPoolReleasedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolReleased) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolReleased) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *LockReleaseTokenPoolReleasedIterator) Error() error { + return it.fail +} + +func (it *LockReleaseTokenPoolReleasedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type LockReleaseTokenPoolReleased struct { + Sender common.Address + Recipient common.Address + Amount *big.Int + Raw types.Log +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) FilterReleased(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*LockReleaseTokenPoolReleasedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _LockReleaseTokenPool.contract.FilterLogs(opts, "Released", senderRule, recipientRule) + if err != nil { + return nil, err + } + return &LockReleaseTokenPoolReleasedIterator{contract: _LockReleaseTokenPool.contract, event: "Released", logs: logs, sub: sub}, nil +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) WatchReleased(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolReleased, sender []common.Address, recipient []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _LockReleaseTokenPool.contract.WatchLogs(opts, "Released", senderRule, recipientRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(LockReleaseTokenPoolReleased) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "Released", 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 +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) ParseReleased(log types.Log) (*LockReleaseTokenPoolReleased, error) { + event := new(LockReleaseTokenPoolReleased) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "Released", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type LockReleaseTokenPoolRemotePoolAddedIterator struct { + Event *LockReleaseTokenPoolRemotePoolAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *LockReleaseTokenPoolRemotePoolAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolRemotePoolAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolRemotePoolAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *LockReleaseTokenPoolRemotePoolAddedIterator) Error() error { + return it.fail +} + +func (it *LockReleaseTokenPoolRemotePoolAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type LockReleaseTokenPoolRemotePoolAdded struct { + RemoteChainSelector uint64 + RemotePoolAddress []byte + Raw types.Log +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) FilterRemotePoolAdded(opts *bind.FilterOpts, remoteChainSelector []uint64) (*LockReleaseTokenPoolRemotePoolAddedIterator, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _LockReleaseTokenPool.contract.FilterLogs(opts, "RemotePoolAdded", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return &LockReleaseTokenPoolRemotePoolAddedIterator{contract: _LockReleaseTokenPool.contract, event: "RemotePoolAdded", logs: logs, sub: sub}, nil +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) WatchRemotePoolAdded(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolRemotePoolAdded, remoteChainSelector []uint64) (event.Subscription, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _LockReleaseTokenPool.contract.WatchLogs(opts, "RemotePoolAdded", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(LockReleaseTokenPoolRemotePoolAdded) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "RemotePoolAdded", 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 +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) ParseRemotePoolAdded(log types.Log) (*LockReleaseTokenPoolRemotePoolAdded, error) { + event := new(LockReleaseTokenPoolRemotePoolAdded) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "RemotePoolAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type LockReleaseTokenPoolRemotePoolRemovedIterator struct { + Event *LockReleaseTokenPoolRemotePoolRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *LockReleaseTokenPoolRemotePoolRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolRemotePoolRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolRemotePoolRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *LockReleaseTokenPoolRemotePoolRemovedIterator) Error() error { + return it.fail +} + +func (it *LockReleaseTokenPoolRemotePoolRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type LockReleaseTokenPoolRemotePoolRemoved struct { + RemoteChainSelector uint64 + RemotePoolAddress []byte + Raw types.Log +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) FilterRemotePoolRemoved(opts *bind.FilterOpts, remoteChainSelector []uint64) (*LockReleaseTokenPoolRemotePoolRemovedIterator, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _LockReleaseTokenPool.contract.FilterLogs(opts, "RemotePoolRemoved", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return &LockReleaseTokenPoolRemotePoolRemovedIterator{contract: _LockReleaseTokenPool.contract, event: "RemotePoolRemoved", logs: logs, sub: sub}, nil +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) WatchRemotePoolRemoved(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolRemotePoolRemoved, remoteChainSelector []uint64) (event.Subscription, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _LockReleaseTokenPool.contract.WatchLogs(opts, "RemotePoolRemoved", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(LockReleaseTokenPoolRemotePoolRemoved) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "RemotePoolRemoved", 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 +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) ParseRemotePoolRemoved(log types.Log) (*LockReleaseTokenPoolRemotePoolRemoved, error) { + event := new(LockReleaseTokenPoolRemotePoolRemoved) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "RemotePoolRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type LockReleaseTokenPoolRouterUpdatedIterator struct { + Event *LockReleaseTokenPoolRouterUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *LockReleaseTokenPoolRouterUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolRouterUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolRouterUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *LockReleaseTokenPoolRouterUpdatedIterator) Error() error { + return it.fail +} + +func (it *LockReleaseTokenPoolRouterUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type LockReleaseTokenPoolRouterUpdated struct { + OldRouter common.Address + NewRouter common.Address + Raw types.Log +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) FilterRouterUpdated(opts *bind.FilterOpts) (*LockReleaseTokenPoolRouterUpdatedIterator, error) { + + logs, sub, err := _LockReleaseTokenPool.contract.FilterLogs(opts, "RouterUpdated") + if err != nil { + return nil, err + } + return &LockReleaseTokenPoolRouterUpdatedIterator{contract: _LockReleaseTokenPool.contract, event: "RouterUpdated", logs: logs, sub: sub}, nil +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) WatchRouterUpdated(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolRouterUpdated) (event.Subscription, error) { + + logs, sub, err := _LockReleaseTokenPool.contract.WatchLogs(opts, "RouterUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(LockReleaseTokenPoolRouterUpdated) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "RouterUpdated", 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 +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) ParseRouterUpdated(log types.Log) (*LockReleaseTokenPoolRouterUpdated, error) { + event := new(LockReleaseTokenPoolRouterUpdated) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "RouterUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type LockReleaseTokenPoolTokensConsumedIterator struct { + Event *LockReleaseTokenPoolTokensConsumed + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *LockReleaseTokenPoolTokensConsumedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolTokensConsumed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(LockReleaseTokenPoolTokensConsumed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *LockReleaseTokenPoolTokensConsumedIterator) Error() error { + return it.fail +} + +func (it *LockReleaseTokenPoolTokensConsumedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type LockReleaseTokenPoolTokensConsumed struct { + Tokens *big.Int + Raw types.Log +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) FilterTokensConsumed(opts *bind.FilterOpts) (*LockReleaseTokenPoolTokensConsumedIterator, error) { + + logs, sub, err := _LockReleaseTokenPool.contract.FilterLogs(opts, "TokensConsumed") + if err != nil { + return nil, err + } + return &LockReleaseTokenPoolTokensConsumedIterator{contract: _LockReleaseTokenPool.contract, event: "TokensConsumed", logs: logs, sub: sub}, nil +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) WatchTokensConsumed(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolTokensConsumed) (event.Subscription, error) { + + logs, sub, err := _LockReleaseTokenPool.contract.WatchLogs(opts, "TokensConsumed") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(LockReleaseTokenPoolTokensConsumed) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "TokensConsumed", 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 +} + +func (_LockReleaseTokenPool *LockReleaseTokenPoolFilterer) ParseTokensConsumed(log types.Log) (*LockReleaseTokenPoolTokensConsumed, error) { + event := new(LockReleaseTokenPoolTokensConsumed) + if err := _LockReleaseTokenPool.contract.UnpackLog(event, "TokensConsumed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (_LockReleaseTokenPool *LockReleaseTokenPool) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _LockReleaseTokenPool.abi.Events["AllowListAdd"].ID: + return _LockReleaseTokenPool.ParseAllowListAdd(log) + case _LockReleaseTokenPool.abi.Events["AllowListRemove"].ID: + return _LockReleaseTokenPool.ParseAllowListRemove(log) + case _LockReleaseTokenPool.abi.Events["Burned"].ID: + return _LockReleaseTokenPool.ParseBurned(log) + case _LockReleaseTokenPool.abi.Events["ChainAdded"].ID: + return _LockReleaseTokenPool.ParseChainAdded(log) + case _LockReleaseTokenPool.abi.Events["ChainConfigured"].ID: + return _LockReleaseTokenPool.ParseChainConfigured(log) + case _LockReleaseTokenPool.abi.Events["ChainRemoved"].ID: + return _LockReleaseTokenPool.ParseChainRemoved(log) + case _LockReleaseTokenPool.abi.Events["ConfigChanged"].ID: + return _LockReleaseTokenPool.ParseConfigChanged(log) + case _LockReleaseTokenPool.abi.Events["LiquidityAdded"].ID: + return _LockReleaseTokenPool.ParseLiquidityAdded(log) + case _LockReleaseTokenPool.abi.Events["LiquidityRemoved"].ID: + return _LockReleaseTokenPool.ParseLiquidityRemoved(log) + case _LockReleaseTokenPool.abi.Events["LiquidityTransferred"].ID: + return _LockReleaseTokenPool.ParseLiquidityTransferred(log) + case _LockReleaseTokenPool.abi.Events["Locked"].ID: + return _LockReleaseTokenPool.ParseLocked(log) + case _LockReleaseTokenPool.abi.Events["Minted"].ID: + return _LockReleaseTokenPool.ParseMinted(log) + case _LockReleaseTokenPool.abi.Events["OwnershipTransferRequested"].ID: + return _LockReleaseTokenPool.ParseOwnershipTransferRequested(log) + case _LockReleaseTokenPool.abi.Events["OwnershipTransferred"].ID: + return _LockReleaseTokenPool.ParseOwnershipTransferred(log) + case _LockReleaseTokenPool.abi.Events["RateLimitAdminSet"].ID: + return _LockReleaseTokenPool.ParseRateLimitAdminSet(log) + case _LockReleaseTokenPool.abi.Events["Released"].ID: + return _LockReleaseTokenPool.ParseReleased(log) + case _LockReleaseTokenPool.abi.Events["RemotePoolAdded"].ID: + return _LockReleaseTokenPool.ParseRemotePoolAdded(log) + case _LockReleaseTokenPool.abi.Events["RemotePoolRemoved"].ID: + return _LockReleaseTokenPool.ParseRemotePoolRemoved(log) + case _LockReleaseTokenPool.abi.Events["RouterUpdated"].ID: + return _LockReleaseTokenPool.ParseRouterUpdated(log) + case _LockReleaseTokenPool.abi.Events["TokensConsumed"].ID: + return _LockReleaseTokenPool.ParseTokensConsumed(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (LockReleaseTokenPoolAllowListAdd) Topic() common.Hash { + return common.HexToHash("0x2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d8") +} + +func (LockReleaseTokenPoolAllowListRemove) Topic() common.Hash { + return common.HexToHash("0x800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf7566") +} + +func (LockReleaseTokenPoolBurned) Topic() common.Hash { + return common.HexToHash("0x696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df7") +} + +func (LockReleaseTokenPoolChainAdded) Topic() common.Hash { + return common.HexToHash("0x8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c2") +} + +func (LockReleaseTokenPoolChainConfigured) Topic() common.Hash { + return common.HexToHash("0x0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b") +} + +func (LockReleaseTokenPoolChainRemoved) Topic() common.Hash { + return common.HexToHash("0x5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d859916") +} + +func (LockReleaseTokenPoolConfigChanged) Topic() common.Hash { + return common.HexToHash("0x9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19") +} + +func (LockReleaseTokenPoolLiquidityAdded) Topic() common.Hash { + return common.HexToHash("0xc17cea59c2955cb181b03393209566960365771dbba9dc3d510180e7cb312088") +} + +func (LockReleaseTokenPoolLiquidityRemoved) Topic() common.Hash { + return common.HexToHash("0xc2c3f06e49b9f15e7b4af9055e183b0d73362e033ad82a07dec9bf9840171719") +} + +func (LockReleaseTokenPoolLiquidityTransferred) Topic() common.Hash { + return common.HexToHash("0x6fa7abcf1345d1d478e5ea0da6b5f26a90eadb0546ef15ed3833944fbfd1db62") +} + +func (LockReleaseTokenPoolLocked) Topic() common.Hash { + return common.HexToHash("0x9f1ec8c880f76798e7b793325d625e9b60e4082a553c98f42b6cda368dd60008") +} + +func (LockReleaseTokenPoolMinted) Topic() common.Hash { + return common.HexToHash("0x9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0") +} + +func (LockReleaseTokenPoolOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (LockReleaseTokenPoolOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (LockReleaseTokenPoolRateLimitAdminSet) Topic() common.Hash { + return common.HexToHash("0x44676b5284b809a22248eba0da87391d79098be38bb03154be88a58bf4d09174") +} + +func (LockReleaseTokenPoolReleased) Topic() common.Hash { + return common.HexToHash("0x2d87480f50083e2b2759522a8fdda59802650a8055e609a7772cf70c07748f52") +} + +func (LockReleaseTokenPoolRemotePoolAdded) Topic() common.Hash { + return common.HexToHash("0x7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea") +} + +func (LockReleaseTokenPoolRemotePoolRemoved) Topic() common.Hash { + return common.HexToHash("0x52d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d76") +} + +func (LockReleaseTokenPoolRouterUpdated) Topic() common.Hash { + return common.HexToHash("0x02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f1684") +} + +func (LockReleaseTokenPoolTokensConsumed) Topic() common.Hash { + return common.HexToHash("0x1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a") +} + +func (_LockReleaseTokenPool *LockReleaseTokenPool) Address() common.Address { + return _LockReleaseTokenPool.address +} + +type LockReleaseTokenPoolInterface interface { + CanAcceptLiquidity(opts *bind.CallOpts) (bool, error) + + GetAllowList(opts *bind.CallOpts) ([]common.Address, error) + + GetAllowListEnabled(opts *bind.CallOpts) (bool, error) + + GetCurrentInboundRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64) (RateLimiterTokenBucket, error) + + GetCurrentOutboundRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64) (RateLimiterTokenBucket, error) + + GetRateLimitAdmin(opts *bind.CallOpts) (common.Address, error) + + GetRebalancer(opts *bind.CallOpts) (common.Address, error) + + GetRemotePools(opts *bind.CallOpts, remoteChainSelector uint64) ([][]byte, error) + + GetRemoteToken(opts *bind.CallOpts, remoteChainSelector uint64) ([]byte, error) + + GetRmnProxy(opts *bind.CallOpts) (common.Address, error) + + GetRouter(opts *bind.CallOpts) (common.Address, error) + + GetSupportedChains(opts *bind.CallOpts) ([]uint64, error) + + GetToken(opts *bind.CallOpts) (common.Address, error) + + GetTokenDecimals(opts *bind.CallOpts) (uint8, error) + + IsRemotePool(opts *bind.CallOpts, remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) + + IsSupportedChain(opts *bind.CallOpts, remoteChainSelector uint64) (bool, error) + + IsSupportedToken(opts *bind.CallOpts, token common.Address) (bool, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + AddRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) + + ApplyAllowListUpdates(opts *bind.TransactOpts, removes []common.Address, adds []common.Address) (*types.Transaction, error) + + ApplyChainUpdates(opts *bind.TransactOpts, remoteChainSelectorsToRemove []uint64, chainsToAdd []TokenPoolChainUpdate) (*types.Transaction, error) + + LockOrBurn(opts *bind.TransactOpts, lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) + + ProvideLiquidity(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) + + ReleaseOrMint(opts *bind.TransactOpts, releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) + + RemoveRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) + + SetChainRateLimiterConfig(opts *bind.TransactOpts, remoteChainSelector uint64, outboundConfig RateLimiterConfig, inboundConfig RateLimiterConfig) (*types.Transaction, error) + + SetRateLimitAdmin(opts *bind.TransactOpts, rateLimitAdmin common.Address) (*types.Transaction, error) + + SetRebalancer(opts *bind.TransactOpts, rebalancer common.Address) (*types.Transaction, error) + + SetRouter(opts *bind.TransactOpts, newRouter common.Address) (*types.Transaction, error) + + TransferLiquidity(opts *bind.TransactOpts, from common.Address, amount *big.Int) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + WithdrawLiquidity(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) + + FilterAllowListAdd(opts *bind.FilterOpts) (*LockReleaseTokenPoolAllowListAddIterator, error) + + WatchAllowListAdd(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolAllowListAdd) (event.Subscription, error) + + ParseAllowListAdd(log types.Log) (*LockReleaseTokenPoolAllowListAdd, error) + + FilterAllowListRemove(opts *bind.FilterOpts) (*LockReleaseTokenPoolAllowListRemoveIterator, error) + + WatchAllowListRemove(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolAllowListRemove) (event.Subscription, error) + + ParseAllowListRemove(log types.Log) (*LockReleaseTokenPoolAllowListRemove, error) + + FilterBurned(opts *bind.FilterOpts, sender []common.Address) (*LockReleaseTokenPoolBurnedIterator, error) + + WatchBurned(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolBurned, sender []common.Address) (event.Subscription, error) + + ParseBurned(log types.Log) (*LockReleaseTokenPoolBurned, error) + + FilterChainAdded(opts *bind.FilterOpts) (*LockReleaseTokenPoolChainAddedIterator, error) + + WatchChainAdded(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolChainAdded) (event.Subscription, error) + + ParseChainAdded(log types.Log) (*LockReleaseTokenPoolChainAdded, error) + + FilterChainConfigured(opts *bind.FilterOpts) (*LockReleaseTokenPoolChainConfiguredIterator, error) + + WatchChainConfigured(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolChainConfigured) (event.Subscription, error) + + ParseChainConfigured(log types.Log) (*LockReleaseTokenPoolChainConfigured, error) + + FilterChainRemoved(opts *bind.FilterOpts) (*LockReleaseTokenPoolChainRemovedIterator, error) + + WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolChainRemoved) (event.Subscription, error) + + ParseChainRemoved(log types.Log) (*LockReleaseTokenPoolChainRemoved, error) + + FilterConfigChanged(opts *bind.FilterOpts) (*LockReleaseTokenPoolConfigChangedIterator, error) + + WatchConfigChanged(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolConfigChanged) (event.Subscription, error) + + ParseConfigChanged(log types.Log) (*LockReleaseTokenPoolConfigChanged, error) + + FilterLiquidityAdded(opts *bind.FilterOpts, provider []common.Address, amount []*big.Int) (*LockReleaseTokenPoolLiquidityAddedIterator, error) + + WatchLiquidityAdded(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolLiquidityAdded, provider []common.Address, amount []*big.Int) (event.Subscription, error) + + ParseLiquidityAdded(log types.Log) (*LockReleaseTokenPoolLiquidityAdded, error) + + FilterLiquidityRemoved(opts *bind.FilterOpts, provider []common.Address, amount []*big.Int) (*LockReleaseTokenPoolLiquidityRemovedIterator, error) + + WatchLiquidityRemoved(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolLiquidityRemoved, provider []common.Address, amount []*big.Int) (event.Subscription, error) + + ParseLiquidityRemoved(log types.Log) (*LockReleaseTokenPoolLiquidityRemoved, error) + + FilterLiquidityTransferred(opts *bind.FilterOpts, from []common.Address) (*LockReleaseTokenPoolLiquidityTransferredIterator, error) + + WatchLiquidityTransferred(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolLiquidityTransferred, from []common.Address) (event.Subscription, error) + + ParseLiquidityTransferred(log types.Log) (*LockReleaseTokenPoolLiquidityTransferred, error) + + FilterLocked(opts *bind.FilterOpts, sender []common.Address) (*LockReleaseTokenPoolLockedIterator, error) + + WatchLocked(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolLocked, sender []common.Address) (event.Subscription, error) + + ParseLocked(log types.Log) (*LockReleaseTokenPoolLocked, error) + + FilterMinted(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*LockReleaseTokenPoolMintedIterator, error) + + WatchMinted(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolMinted, sender []common.Address, recipient []common.Address) (event.Subscription, error) + + ParseMinted(log types.Log) (*LockReleaseTokenPoolMinted, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*LockReleaseTokenPoolOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*LockReleaseTokenPoolOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*LockReleaseTokenPoolOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*LockReleaseTokenPoolOwnershipTransferred, error) + + FilterRateLimitAdminSet(opts *bind.FilterOpts) (*LockReleaseTokenPoolRateLimitAdminSetIterator, error) + + WatchRateLimitAdminSet(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolRateLimitAdminSet) (event.Subscription, error) + + ParseRateLimitAdminSet(log types.Log) (*LockReleaseTokenPoolRateLimitAdminSet, error) + + FilterReleased(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*LockReleaseTokenPoolReleasedIterator, error) + + WatchReleased(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolReleased, sender []common.Address, recipient []common.Address) (event.Subscription, error) + + ParseReleased(log types.Log) (*LockReleaseTokenPoolReleased, error) + + FilterRemotePoolAdded(opts *bind.FilterOpts, remoteChainSelector []uint64) (*LockReleaseTokenPoolRemotePoolAddedIterator, error) + + WatchRemotePoolAdded(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolRemotePoolAdded, remoteChainSelector []uint64) (event.Subscription, error) + + ParseRemotePoolAdded(log types.Log) (*LockReleaseTokenPoolRemotePoolAdded, error) + + FilterRemotePoolRemoved(opts *bind.FilterOpts, remoteChainSelector []uint64) (*LockReleaseTokenPoolRemotePoolRemovedIterator, error) + + WatchRemotePoolRemoved(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolRemotePoolRemoved, remoteChainSelector []uint64) (event.Subscription, error) + + ParseRemotePoolRemoved(log types.Log) (*LockReleaseTokenPoolRemotePoolRemoved, error) + + FilterRouterUpdated(opts *bind.FilterOpts) (*LockReleaseTokenPoolRouterUpdatedIterator, error) + + WatchRouterUpdated(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolRouterUpdated) (event.Subscription, error) + + ParseRouterUpdated(log types.Log) (*LockReleaseTokenPoolRouterUpdated, error) + + FilterTokensConsumed(opts *bind.FilterOpts) (*LockReleaseTokenPoolTokensConsumedIterator, error) + + WatchTokensConsumed(opts *bind.WatchOpts, sink chan<- *LockReleaseTokenPoolTokensConsumed) (event.Subscription, error) + + ParseTokensConsumed(log types.Log) (*LockReleaseTokenPoolTokensConsumed, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var LockReleaseTokenPoolZKBin string = ("0x000400000000000200210000000000020000006003100270000006cc0030019d000006cc03300197000300000031035500020000000103550000000100200190000000280000c13d0000008002000039000000400020043f000000040030008c000000500000413d000000000401043b000000e004400270000006df0040009c000000520000a13d000006e00040009c000000690000213d000006ed0040009c000000d60000a13d000006ee0040009c0000031b0000a13d000006ef0040009c000005ff0000613d000006f00040009c000005010000613d000006f10040009c000000500000c13d0000000001000416000000000001004b000000500000c13d0000000001000412001700000001001d001600800000003d000080050100003900000044030000390000000004000415000000170440008a000003540000013d0000012004000039000000400040043f0000000002000416000000000002004b000000500000c13d0000001f02300039000006cd022001970000012002200039000000400020043f0000001f0530018f000006ce0630019800000120026000390000003a0000613d000000000701034f000000007807043c0000000004840436000000000024004b000000360000c13d000000000005004b000000470000613d000000000161034f0000000304500210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000c00030008c000000500000413d000001200100043d000006cf0010009c000000500000213d000001400200043d001100000002001d000000ff0020008c000000bd0000a13d000000000100001900001b2e00010430000006f90040009c000000880000a13d000006fa0040009c000001750000a13d000006fb0040009c0000035d0000a13d000006fc0040009c00000a380000613d000006fd0040009c0000054d0000613d000006fe0040009c000000500000c13d000000240030008c000000500000413d0000000002000416000000000002004b000000500000c13d0000000401100370000000000101043b000006d00010009c000000500000213d1b2c193c0000040f0000046c0000013d000006e10040009c0000012f0000a13d000006e20040009c000003460000a13d000006e30040009c000006080000613d000006e40040009c0000051a0000613d000006e50040009c000000500000c13d000000240030008c000000500000413d0000000002000416000000000002004b000000500000c13d0000000401100370000000000601043b000006cf0060009c000000500000213d0000000101000039000000000101041a000006cf011001970000000005000411000000000015004b00000a510000c13d000000000056004b00000aee0000c13d0000071301000041000000800010043f000007140100004100001b2e00010430000007060040009c0000023d0000213d0000070c0040009c000003660000213d0000070f0040009c0000056b0000613d000007100040009c000000500000c13d000000240030008c000000500000413d0000000002000416000000000002004b000000500000c13d0000000401100370000000000201043b0000000a01000039000000000101041a000006cf011001970000000003000411000000000031004b00000a920000c13d001100000002001d000007150100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000006cc0010009c000006cc01008041000000c00110021000000716011001c700008005020000391b2c1b270000040f0000000100200190000013b30000613d000000000301043b000000400b00043d000007600100004100000000001b04350000000401b00039000000000200041000000000002104350000000001000414001000000003001d000006cf02300197000000040020008c00000afb0000c13d0000000103000031000000200030008c0000002004000039000000000403401900000b270000013d000001600200043d000006d00020009c000000500000213d0000001f04200039000000000034004b0000000005000019000006d105008041000006d104400197000000000004004b0000000006000019000006d106004041000006d10040009c000000000605c019000000000006004b000000500000c13d00000120042000390000000004040433000006d00040009c0000037e0000a13d0000074101000041000000000010043f0000004101000039000000040010043f000007180100004100001b2e00010430000006f40040009c000002540000213d000006f70040009c000003b10000613d000006f80040009c000000500000c13d000000240030008c000000500000413d0000000002000416000000000002004b000000500000c13d0000000402100370000000000202043b000006d00020009c000000500000213d0000000003230049000007200030009c000000500000213d000000a40030008c000000500000413d000000c003000039000000400030043f0000006003000039000000800030043f000000a00030043f001000840020003d0000001001100360000000000101043b001100000001001d000006cf0010009c000000500000213d000007150100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000006cc0010009c000006cc01008041000000c00110021000000716011001c700008005020000391b2c1b270000040f0000000100200190000013b30000613d0000000202000367000000000101043b000006cf01100197000000110010006b00000b3a0000c13d0000001001000029000f0060001000920000000f01200360000000000101043b000006d00010009c000000500000213d000000400300043d0000074302000041000000000023043500000080011002100000074401100197001000000003001d000000040230003900000000001204350000071501000041000000000010044300000000010004120000000400100443000000400100003900000024001004430000000001000414000006cc0010009c000006cc01008041000000c00110021000000716011001c700008005020000391b2c1b270000040f0000000100200190000013b30000613d000000000201043b0000000001000414000006cf02200197000000040020008c00000bac0000c13d0000000103000031000000200030008c0000002004000039000000000403401900000bd60000013d000006e80040009c000002650000213d000006eb0040009c000003b60000613d000006ec0040009c000000500000c13d0000000002000416000000000002004b000000500000c13d0000000504000039000000000204041a000000800020043f000000000040043f000000000002004b00000a550000c13d000000a002000039000000400020043f000000000400001900000005064002100000003f0560003900000738055001970000000005250019000006d00050009c000000d00000213d000000400050043f00000000044204360000001f0560018f000000000006004b000001530000613d000000000131034f00000000036400190000000006040019000000001701043c0000000006760436000000000036004b0000014f0000c13d000000000005004b000000800100043d000000000001004b000001650000613d00000000010000190000000003020433000000000013004b000010ed0000a13d00000005031002100000000005340019000000a0033000390000000003030433000006d00330019700000000003504350000000101100039000000800300043d000000000031004b000001580000413d000000400100043d00000020030000390000000005310436000000000302043300000000003504350000004002100039000000000003004b00000a890000613d00000000050000190000000046040434000006d00660019700000000026204360000000105500039000000000035004b0000016e0000413d00000a890000013d000007010040009c000002c50000213d000007040040009c000004660000613d000007050040009c000000500000c13d000000440030008c000000500000413d0000000004000416000000000004004b000000500000c13d0000000404100370000000000404043b000006d00040009c000000500000213d0000002305400039000000000035004b000000500000813d0000000405400039000000000551034f000000000905043b000006d00090009c000000500000213d0000002407400039000000050b90021000000000087b0019000000000038004b000000500000213d0000002404100370000000000404043b000006d00040009c000000500000213d0000002305400039000000000035004b000000500000813d0000000405400039000000000551034f000000000605043b000006d00060009c000000500000213d0000002404400039000000050a60021000000000054a0019000000000035004b000000500000213d0000000103000039000000000303041a000006cf03300197000000000c00041100000000003c004b00000a510000c13d0000003f03b00039000006d203300197000007400030009c000000d00000213d0000008003300039000f00000003001d000000400030043f000000800090043f000000000009004b000001bd0000613d000000000371034f000000000303043b000006cf0030009c000000500000213d000000200220003900000000003204350000002007700039000000000087004b000001b20000413d000000400200043d000f00000002001d0000003f02a00039000006d2022001970000000f022000290000000f0020006c00000000030000390000000103004039000006d00020009c000000d00000213d0000000100300190000000d00000c13d000000400020043f0000000f020000290000000002620436000e00000002001d000000000006004b000001d70000613d0000000f02000029000000000341034f000000000303043b000006cf0030009c000000500000213d000000200220003900000000003204350000002004400039000000000054004b000001ce0000413d0000071501000041000000000010044300000000010004120000000400100443000000600100003900000024001004430000000001000414000006cc0010009c000006cc01008041000000c00110021000000716011001c700008005020000391b2c1b270000040f0000000100200190000013b30000613d000000000101043b000000000001004b00000d510000613d000000800100043d000000000001004b000010880000c13d0000000f010000290000000001010433000000000001004b00000b950000613d0000000003000019000001f70000013d00000001033000390000000f010000290000000001010433000000000013004b00000b950000813d00000005013002100000000e011000290000000001010433000006cf04100198000001f20000613d000000000040043f0000000301000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c70000801002000039001000000003001d001100000004001d1b2c1b270000040f000000110400002900000010030000290000000100200190000000500000613d000000000101043b000000000101041a000000000001004b000001f20000c13d0000000203000039000000000103041a000006d00010009c000000d00000213d0000000102100039000000000023041b000006da0110009a000000000041041b000000000103041a000d00000001001d000000000040043f0000000301000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f00000011030000290000000100200190000000500000613d000000000101043b0000000d02000029000000000021041b000000400100043d0000000000310435000006cc0010009c000006cc0100804100000040011002100000000002000414000006cc0020009c000006cc02008041000000c002200210000000000112019f000006db011001c70000800d020000390000000103000039000006dc040000411b2c1b220000040f00000010030000290000000100200190000001f20000c13d000000500000013d000007070040009c000003750000213d0000070a0040009c0000057c0000613d0000070b0040009c000000500000c13d0000000001000416000000000001004b000000500000c13d0000000001000412001b00000001001d001a00200000003d0000800501000039000000440300003900000000040004150000001b0440008a000000050440021000000715020000411b2c1b040000040f000000ff0110018f000000800010043f000007300100004100001b2d0001042e000006f50040009c000003cb0000613d000006f60040009c000000500000c13d0000000001000416000000000001004b000000500000c13d0000000202000039000000000102041a000000800010043f000000000020043f0000002002000039000000000001004b00000a6a0000c13d000000a001000039000000000402001900000a790000013d000006e90040009c000004330000613d000006ea0040009c000000500000c13d000000e40030008c000000500000413d0000000002000416000000000002004b000000500000c13d0000000402100370000000000202043b001100000002001d000006d00020009c000000500000213d000000e002000039000000400020043f0000002402100370000000000202043b000000000002004b0000000003000039000000010300c039000000000032004b000000500000c13d000000800020043f0000004402100370000000000202043b000007220020009c000000500000213d000000a00020043f0000006402100370000000000202043b000007220020009c000000500000213d000000c00020043f0000014002000039000000400020043f0000008402100370000000000202043b000000000002004b0000000003000039000000010300c039000000000032004b000000500000c13d000000e00020043f000000a402100370000000000202043b000007220020009c000000500000213d000001000020043f000000c401100370000000000101043b000007220010009c000000500000213d000001200010043f0000000901000039000000000101041a000006cf021001970000000001000411000000000021004b000002a60000613d0000000102000039000000000202041a000006cf02200197000000000021004b00000f6e0000c13d0000001101000029000000000010043f0000000601000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000101043b000000000101041a000000000001004b000004e50000613d000000c00100043d0000072201100197000000800200043d000000000002004b00000f870000c13d000000000001004b000002c10000c13d000000a00100043d000007220010019800000f8d0000613d000000400200043d001100000002001d0000072501000041000010090000013d000007020040009c000004760000613d000007030040009c000000500000c13d000000440030008c000000500000413d0000000002000416000000000002004b000000500000c13d0000000402100370000000000202043b001100000002001d000006cf0020009c000000500000213d0000002401100370000000000301043b0000000101000039000000000101041a000006cf011001970000000002000411000000000012004b00000a510000c13d001000000003001d00000750010000410000000000100443000000110100002900000004001004430000000001000414000006cc0010009c000006cc01008041000000c00110021000000751011001c700008002020000391b2c1b270000040f0000000100200190000013b30000613d000000000101043b000000000001004b000000500000613d000000400500043d0000075201000041000000000015043500000004015000390000001004000029000000000041043500000000010004140000001102000029000000040020008c000003090000613d000006cc0050009c000006cc0200004100000000020540190000004002200210000006cc0010009c000006cc01008041000000c001100210000000000121019f00000718011001c70000001102000029000f00000005001d1b2c1b220000040f0000000f0500002900000010040000290000006003100270000106cc0030019d0003000000010355000000010020019000000b970000613d000006d00050009c000000d00000213d000000400050043f0000000000450435000006cc0050009c000006cc0500804100000040015002100000000002000414000006cc0020009c000006cc02008041000000c002200210000000000112019f000006db011001c70000800d0200003900000002030000390000075304000041000000110500002900000b920000013d000006f20040009c000004b20000613d000006f30040009c000000500000c13d000000240030008c000000500000413d0000000002000416000000000002004b000000500000c13d0000000401100370000000000101043b001100000001001d000006d00010009c000000500000213d1b2c15740000040f0000001101000029000000000010043f0000000701000039000000200010043f000000400200003900000000010000191b2c1aef0000040f001000000001001d000000400100043d001100000001001d1b2c142f0000040f00000010050000290000000201500039000000000401041a00000734004001980000000002000039000000010200c0390000001101000029000000400310003900000000002304350000008002400270000006cc0220019700000020031000390000000000230435000007220240019700000000002104350000000302500039000004580000013d000006e60040009c000004f00000613d000006e70040009c000000500000c13d0000000001000416000000000001004b000000500000c13d0000000001000412001300000001001d001200600000003d000080050100003900000044030000390000000004000415000000130440008a000000050440021000000715020000411b2c1b040000040f000000000001004b0000000001000039000000010100c039000000800010043f000007300100004100001b2d0001042e000006ff0040009c0000053b0000613d000007000040009c000000500000c13d0000000001000416000000000001004b000000500000c13d0000000901000039000006030000013d0000070d0040009c000005970000613d0000070e0040009c000000500000c13d0000000001000416000000000001004b000000500000c13d0000000001000412001f00000001001d001e00000000003d0000800501000039000000440300003900000000040004150000001f0440008a000004fa0000013d000007080040009c000005ab0000613d000007090040009c000000500000c13d0000000001000416000000000001004b000000500000c13d0000000a01000039000006030000013d00000005054002100000003f06500039000006d206600197000000400700043d0000000006670019000f00000007001d000000000076004b00000000070000390000000107004039000006d00060009c000000d00000213d0000000100700190000000d00000c13d0000012007300039000000400060043f0000000f030000290000000003430436000e00000003001d00000140022000390000000003250019000000000073004b000000500000213d000000000004004b0000039d0000613d0000000e040000290000000025020434000006cf0050009c000000500000213d0000000004540436000000000032004b000003970000413d000001800300043d000006cf0030009c000000500000213d000001a00400043d000000000004004b0000000002000039000000010200c039000c00000004001d000000000024004b000000500000c13d000001c00200043d001000000002001d000006cf0020009c000000500000213d0000000002000411000000000002004b00000b690000c13d000000400100043d000006de0200004100000ba60000013d0000000001000416000000000001004b000000500000c13d0000000101000039000006030000013d000000240030008c000000500000413d0000000002000416000000000002004b000000500000c13d0000000401100370000000000101043b000006cf0010009c000000500000213d0000000102000039000000000202041a000006cf022001970000000003000411000000000023004b00000a510000c13d000000000001004b00000ad40000c13d0000072f01000041000000800010043f000007140100004100001b2e00010430000000240030008c000000500000413d0000000002000416000000000002004b000000500000c13d0000000401100370000000000101043b000006d00010009c000000500000213d000000000010043f0000000701000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000101043b0000000501100039000000000301041a000000400200043d000f00000002001d001100000003001d0000000002320436000e00000002001d000000000010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006db011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d0000001105000029000000000005004b0000000e02000029000003ff0000613d000000000101043b0000000e020000290000000003000019000000000401041a000000000242043600000001011000390000000103300039000000000053004b000003f90000413d0000000f0120006a0000001f0110003900000769011001970000000f04100029000000000014004b00000000010000390000000101004039000006d00040009c000000d00000213d0000000100100190000000d00000c13d000000400040043f0000000f010000290000000002010433000006d00020009c000000d00000213d00000005012002100000003f03100039000006d2033001970000000003430019000006d00030009c000000d00000213d000000400030043f000d00000004001d0000000005240436000000000002004b000004210000613d00000060020000390000000003000019000000000435001900000000002404350000002003300039000000000013004b0000041c0000413d000c00000005001d0000000f010000290000000001010433000000000001004b00000c240000c13d000000400100043d000000200200003900000000032104360000000d0200002900000000020204330000000000230435000000400310003900000005042002100000000005340019000000000002004b00000d540000c13d000000000215004900000a8a0000013d000000240030008c000000500000413d0000000002000416000000000002004b000000500000c13d0000000401100370000000000101043b001100000001001d000006d00010009c000000500000213d1b2c15740000040f0000001101000029000000000010043f0000000701000039000000200010043f000000400200003900000000010000191b2c1aef0000040f001000000001001d000000400100043d001100000001001d1b2c142f0000040f0000001005000029000000000405041a00000734004001980000000002000039000000010200c0390000001101000029000000400310003900000000002304350000008002400270000006cc0220019700000020031000390000000000230435000007220240019700000000002104350000000102500039000000000402041a0000008002100039000000800340027000000000003204350000072203400197000000600210003900000000003204351b2c18220000040f000000400100043d001000000001001d00000011020000291b2c14690000040f0000001002000029000005110000013d0000000001000416000000000001004b000000500000c13d00000000010300191b2c144c0000040f1b2c14e40000040f000000000001004b0000000001000039000000010100c039000000400200043d0000000000120435000006cc0020009c000006cc0200804100000040012002100000074b011001c700001b2d0001042e000000440030008c000000500000413d0000000002000416000000000002004b000000500000c13d0000000402100370000000000202043b001100000002001d000006d00020009c000000500000213d0000002402100370000000000202043b000006d00020009c000000500000213d0000002304200039000000000034004b000000500000813d0000000404200039000000000141034f000000000101043b001000000001001d000006d00010009c000000500000213d0000002402200039000f00000002001d0000001001200029000000000031004b000000500000213d0000000101000039000000000101041a000006cf011001970000000002000411000000000012004b00000a510000c13d0000001101000029000000000010043f0000000601000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000101043b000000000101041a000000000001004b000004e50000613d00000000030000310000000f0100002900000010020000291b2c14ac0000040f000000000201001900000011010000291b2c16e40000040f000000000100001900001b2d0001042e000000440030008c000000500000413d0000000002000416000000000002004b000000500000c13d0000000402100370000000000202043b001100000002001d000006d00020009c000000500000213d0000002402100370000000000202043b000006d00020009c000000500000213d0000002304200039000000000034004b000000500000813d000f00040020003d0000000f01100360000000000101043b001000000001001d000006d00010009c000000500000213d0000002402200039000d00000002001d000e00100020002d0000000e0030006b000000500000213d0000000101000039000000000101041a000006cf011001970000000002000411000000000012004b00000a510000c13d0000001101000029000000000010043f0000000601000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000101043b000000000101041a000000000001004b00000c880000c13d000000400100043d0000071f020000410000000000210435000000040210003900000011030000290000000000320435000006cc0010009c000006cc01008041000000400110021000000718011001c700001b2e000104300000000001000416000000000001004b000000500000c13d0000000001000412001500000001001d001400400000003d000080050100003900000044030000390000000004000415000000150440008a000000050440021000000715020000411b2c1b040000040f000006cf01100197000000800010043f000007300100004100001b2d0001042e000000240030008c000000500000413d0000000002000416000000000002004b000000500000c13d0000000401100370000000000101043b000006d00010009c000000500000213d1b2c15890000040f0000002002000039000000400300043d001100000003001d00000000022304361b2c143a0000040f00000011020000290000000001210049000006cc0010009c000006cc010080410000006001100210000006cc0020009c000006cc020080410000004002200210000000000121019f00001b2d0001042e000000240030008c000000500000413d0000000003000416000000000003004b000000500000c13d0000000401100370000000000101043b001100000001001d000007150100004100000000001004430000000001000412000000040010044300000024002004430000000001000414000006cc0010009c000006cc01008041000000c00110021000000716011001c700008005020000391b2c1b270000040f0000000100200190000013b30000613d000000400300043d000000000101043b000000000001004b00000a9b0000c13d0000071c010000410000000000130435000006cc0030009c000006cc030080410000004001300210000006d5011001c700001b2e00010430000000240030008c000000500000413d0000000002000416000000000002004b000000500000c13d0000000401100370000000000101043b001100000001001d000006cf0010009c000000500000213d1b2c16d50000040f0000000a01000039000000000201041a000006d30220019700000011022001af000000000021041b000000000100001900001b2d0001042e000000240030008c000000500000413d0000000002000416000000000002004b000000500000c13d0000000401100370000000000101043b000006cf0010009c000000500000213d0000000102000039000000000202041a000006cf022001970000000003000411000000000023004b00000a510000c13d0000000902000039000000000302041a000006d303300197000000000313019f000000000032041b000000800010043f0000000001000414000006cc0010009c000006cc01008041000000c0011002100000074c011001c70000800d0200003900000001030000390000074d0400004100000ae40000013d000000240030008c000000500000413d0000000002000416000000000002004b000000500000c13d0000000401100370000000000201043b0000076300200198000000500000c13d0000000101000039000007640020009c00000acd0000213d000007670020009c000006050000613d000007680020009c000006050000613d00000ad10000013d000000240030008c000000500000413d0000000002000416000000000002004b000000500000c13d0000000401100370000000000101043b001100000001001d000006cf0010009c000000500000213d0000000001000412001d00000001001d001c00000000003d0000800501000039000000440300003900000000040004150000001d0440008a000000050440021000000715020000411b2c1b040000040f000006cf01100197000000110010006b00000000010000390000000101006039000000800010043f000007300100004100001b2d0001042e0000000001000416000000000001004b000000500000c13d000000c001000039000000400010043f0000001a01000039000000800010043f0000075d01000041000000a00010043f0000002001000039000000c00010043f0000008001000039000000e0020000391b2c143a0000040f000000c00110008a000006cc0010009c000006cc0100804100000060011002100000075e011001c700001b2d0001042e000000240030008c000000500000413d0000000002000416000000000002004b000000500000c13d0000000402100370000000000202043b001100000002001d000006d00020009c000000500000213d000000110230006a000007200020009c000000500000213d000001040020008c000000500000413d000000a002000039000000400020043f0000001102000029000f00840020003d0000000f01100360000000800000043f000000000101043b001000000001001d000006cf0010009c000000500000213d000007150100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000006cc0010009c000006cc01008041000000c00110021000000716011001c700008005020000391b2c1b270000040f0000000100200190000013b30000613d0000000202000367000000000101043b000e00000001001d000006cf01100197000000100010006b00000b5a0000c13d0000000f01000029000d0060001000920000000d01200360000000000101043b000006d00010009c000000500000213d000000400300043d0000074302000041000000000023043500000080011002100000074401100197000f00000003001d000000040230003900000000001204350000071501000041000000000010044300000000010004120000000400100443000000400100003900000024001004430000000001000414000006cc0010009c000006cc01008041000000c00110021000000716011001c700008005020000391b2c1b270000040f0000000100200190000013b30000613d000000000201043b0000000001000414000006cf02200197000000040020008c00000d7d0000c13d0000000103000031000000200030008c0000002004000039000000000403401900000da70000013d0000000001000416000000000001004b000000500000c13d0000000401000039000000000101041a000006cf01100197000000800010043f000007300100004100001b2d0001042e000000440030008c000000500000413d0000000002000416000000000002004b000000500000c13d0000000402100370000000000202043b000006d00020009c000000500000213d0000002304200039000000000034004b000000500000813d0000000404200039000000000441034f000000000404043b000600000004001d000006d00040009c000000500000213d000500240020003d000000060200002900000005022002100000000502200029000000000032004b000000500000213d0000002402100370000000000202043b000200000002001d000006d00020009c000000500000213d00000002020000290000002302200039000000000032004b000000500000813d00000002020000290000000402200039000000000121034f000000000101043b000100000001001d000006d00010009c000000500000213d0000000201000029000300240010003d000000010100002900000005011002100000000301100029000000000031004b000000500000213d0000000101000039000000000101041a000006cf011001970000000002000411000000000012004b00000a510000c13d000000060000006b00000ddd0000c13d000000010000006b00000b950000613d000500000000001d0000000501000029000000050110021000000003011000290000000202000367000000000112034f000000000101043b0000000003000031000000020430006a000001430440008a000006d105400197000006d106100197000000000756013f000000000056004b0000000005000019000006d105004041000000000041004b0000000004000019000006d104008041000006d10070009c000000000504c019000000000005004b000000500000c13d001000030010002d000000100130006a000f00000001001d000007200010009c000000500000213d0000000f01000029000001200010008c000000500000413d000000400100043d000900000001001d0000071a0010009c000000d00000213d0000000901000029000000a001100039000000400010043f0000001001200360000000000101043b000006d00010009c000000500000213d00000009040000290000000001140436000800000001001d00000010010000290000002001100039000000000112034f000000000101043b000006d00010009c000000500000213d0000001001100029001100000001001d0000001f01100039000000000031004b0000000004000019000006d104008041000006d101100197000006d105300197000000000751013f000000000051004b0000000001000019000006d101004041000006d10070009c000000000104c019000000000001004b000000500000c13d0000001101200360000000000101043b000006d00010009c000000d00000213d00000005091002100000003f04900039000006d204400197000000400600043d0000000004460019000e00000006001d000000000064004b00000000070000390000000107004039000006d00040009c000000d00000213d0000000100700190000000d00000c13d000000400040043f0000000e040000290000000000140435000000110100002900000020081000390000000009980019000000000039004b000000500000213d000000000098004b000006eb0000813d0000000e0a000029000006a80000013d000000200aa000390000000001b7001900000000000104350000000000ca04350000002008800039000000000098004b000006eb0000813d000000000182034f000000000101043b000006d00010009c000000500000213d000000110d1000290000003f01d00039000000000031004b0000000004000019000006d104008041000006d101100197000000000751013f000000000051004b0000000001000019000006d101004041000006d10070009c000000000104c019000000000001004b000000500000c13d000000200ed000390000000001e2034f000000000b01043b000006d000b0009c000000d00000213d0000001f01b0003900000769011001970000003f011000390000076901100197000000400c00043d00000000011c00190000000000c1004b00000000040000390000000104004039000006d00010009c000000d00000213d0000000100400190000000d00000c13d0000004004d00039000000400010043f0000000007bc043600000000014b0019000000000031004b000000500000213d0000002001e00039000000000412034f0000076901b00198000000000e170019000006dd0000613d000000000f04034f000000000d07001900000000f60f043c000000000d6d04360000000000ed004b000006d90000c13d0000001f0db00190000006a10000613d000000000114034f0000000304d0021000000000060e043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f00000000001e0435000006a10000013d00000008010000290000000e04000029000000000041043500000010010000290000004006100039000000000162034f000000000101043b000006d00010009c000000500000213d00000010071000290000001f01700039000000000031004b0000000004000019000006d104008041000006d101100197000000000851013f000000000051004b0000000001000019000006d101004041000006d10080009c000000000104c019000000000001004b000000500000c13d000000000172034f000000000401043b000006d00040009c000000d00000213d0000001f0140003900000769011001970000003f011000390000076901100197000000400500043d0000000001150019000000000051004b00000000080000390000000108004039000006d00010009c000000d00000213d0000000100800190000000d00000c13d0000002008700039000000400010043f00000000074504360000000001840019000000000031004b000000500000213d000000000882034f00000769014001980000000003170019000007230000613d000000000908034f000000000a070019000000009b09043c000000000aba043600000000003a004b0000071f0000c13d0000001f09400190000007300000613d000000000118034f0000000308900210000000000903043300000000098901cf000000000989022f000000000101043b0000010008800089000000000181022f00000000018101cf000000000191019f00000000001304350000000001470019000000000001043500000009010000290000004001100039000600000001001d00000000005104350000000f01000029000000600110008a000007200010009c000000500000213d000000600010008c000000500000413d000000400300043d000007210030009c000000d00000213d0000006001300039000000400010043f0000002001600039000000000412034f000000000404043b000000000004004b0000000005000039000000010500c039000000000054004b000000500000c13d00000000044304360000002001100039000000000512034f000000000505043b000007220050009c000000500000213d00000000005404350000002004100039000000000142034f000000000101043b000007220010009c000000500000213d0000004005300039000000000015043500000009010000290000006001100039000700000001001d00000000003104350000000f01000029000000c00110008a000007200010009c000000500000213d000000600010008c000000500000413d000000400100043d000007210010009c000000d00000213d0000006003100039000000400030043f0000002003400039000000000432034f000000000404043b000000000004004b0000000005000039000000010500c039000000000054004b000000500000c13d00000000044104360000002003300039000000000532034f000000000505043b000007220050009c000000500000213d00000000005404350000002003300039000000000232034f000000000302043b000007220030009c000000500000213d0000004002100039000000000032043500000009030000290000008003300039000400000003001d0000000000130435000000070300002900000000030304330000004005300039000000000505043300000722065001970000000057030434000000000007004b0000078f0000613d000000000006004b000012880000613d00000000050504330000072205500197000000000056004b000007940000413d000012880000013d000000000006004b000012740000c13d00000000050504330000072200500198000012740000c13d000000000202043300000722022001970000000003010433000000000003004b000007a00000613d000000000002004b0000128f0000613d00000000030404330000072203300197000000000032004b000007a50000413d0000128f0000013d000000000002004b000012780000c13d00000000020404330000072200200198000012780000c13d000000060100002900000000010104330000000001010433000000000001004b00000ba40000613d00000009010000290000000001010433000006d001100197001100000001001d000000000010043f0000000601000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000101043b000000000101041a000000000001004b0000126d0000c13d0000000501000039000000000101041a000006d00010009c000000d00000213d00000001021000390000000503000039000000000023041b000007270110009a0000001102000029000000000021041b000000000103041a001000000001001d000000000020043f0000000601000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000101043b0000001002000029000000000021041b00000009010000290000000001010433000006d001100197000000000010043f0000000701000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000301043b000000070100002900000000010104330000000024010434001100000004001d000000000004004b0000000004000039000000010400c039001000000004001d000000400400043d0000071a0040009c000000d00000213d000f00000003001d0000000002020433000007220220019700000040011000390000000001010433000b00000001001d000000a001400039000000400010043f000e00000002001d000d00000004001d0000000001240436000c00000001001d000007280100004100000000001004430000000001000414000006cc0010009c000006cc01008041000000c00110021000000729011001c70000800b020000391b2c1b270000040f0000000100200190000013b30000613d0000000b020000290000072202200197000000000101043b0000000d040000290000004003400039000000100500002900000000005304350000008003400039000000000023043500000060034000390000000e050000290000000000530435000006cc011001970000000c030000290000000000130435000000110000006b00000000030000190000072a0300c0410000000f09000029000000000409041a0000072b04400197000000000343019f0000008002200210000000000425019f000000000353019f0000008002100210000000000323019f000000000039041b0000000103900039000000000043041b000000400300043d0000071a0030009c000000d00000213d0000000404000029000000000404043300000020054000390000000005050433000000000604043300000040044000390000000004040433000000a007300039000000400070043f0000008007300039000007220840019700000000008704350000004007300039000000000006004b0000000006000039000000010600c039000000000067043500000020063000390000000000160435000007220150019700000060053000390000000000150435000000000013043500000000030000190000072a0300c0410000000205900039000000000605041a0000072b06600197000000000363019f000000000223019f000000000212019f000000000025041b0000008002400210000000000112019f0000000302900039000000000012041b000000060100002900000000030104330000000065030434000006d00050009c000000d00000213d0000000404900039000000000104041a000000010010019000000001071002700000007f0770618f0000001f0070008c00000000020000390000000102002039000000000121013f000000010010019000000f7f0000c13d000000200070008c001100000004001d001000000005001d000e00000003001d000008840000413d000d00000007001d000f00000006001d000000000040043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006db011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d00000010050000290000001f025000390000000502200270000000200050008c0000000002004019000000000301043b0000000d010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b00000011040000290000000f06000029000008840000813d000000000002041b0000000102200039000000000012004b000008800000413d0000001f0050008c000008a20000a13d000000000040043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006db011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d00000010060000290000076902600198000000000101043b0000000e07000029000008ae0000613d000000010320008a000000050330027000000000033100190000000104300039000000200300003900000000057300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b0000089a0000c13d000008af0000013d000000000005004b000008a60000613d0000000001060433000008a70000013d000000000100001900000003025002100000076a0220027f0000076a02200167000000000121016f0000000102500210000000000121019f000008bc0000013d0000002003000039000000000062004b000008b90000813d0000000302600210000000f80220018f0000076a0220027f0000076a0220016700000000037300190000000003030433000000000223016f000000000021041b000000010160021000000001011001bf0000001104000029000000000014041b000000080100002900000000010104330000000002010433000000000002004b000009df0000613d0000000003000019000c00000003001d0000000502300210000000000121001900000020011000390000000001010433001000000001001d0000000031010434000000000001004b00000ba40000613d00000009020000290000000002020433001100000002001d000006cc0010009c000006cc010080410000006001100210000006cc0030009c000f00000003001d000006cc0200004100000000020340190000004002200210000000000121019f0000000002000414000006cc0020009c000006cc02008041000000c002200210000000000112019f00000711011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d0000001102000029000006d002200197000000000101043b001100000001001d000b00000002001d000000000020043f0000000701000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000201043b0000001101000029000000000010043f000e00000002001d0000000601200039000d00000001001d000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000101043b000000000101041a000000000001004b000011120000c13d0000000e010000290000000502100039000000000102041a000006d00010009c000000d00000213d000a00000001001d0000000101100039000000000012041b000e00000002001d000000000020043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006db011001c700008010020000391b2c1b270000040f00000001002001900000001102000029000000500000613d000000000101043b0000000a01100029000000000021041b0000000e01000029000000000101041a000e00000001001d000000000020043f0000000d01000029000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f00000001002001900000001102000029000000500000613d000000000101043b0000000e03000029000000000031041b000000000020043f0000000801000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000401043b00000010010000290000000005010433000006d00050009c000000d00000213d000000000104041a000000010010019000000001031002700000007f0330618f0000001f0030008c00000000020000390000000102002039000000000121013f00000001001001900000000f0700002900000f7f0000c13d000000200030008c001100000004001d000e00000005001d0000096f0000413d000d00000003001d000000000040043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006db011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d0000000e050000290000001f025000390000000502200270000000200050008c0000000002004019000000000301043b0000000d010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b0000000f0700002900000011040000290000096f0000813d000000000002041b0000000102200039000000000012004b0000096b0000413d0000001f0050008c0000099b0000a13d000000000040043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006db011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d0000000e080000290000076902800198000000000101043b000009d90000613d000000010320008a00000005033002700000000003310019000000010430003900000020030000390000000f07000029000000100600002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000009860000c13d000000000082004b000009970000813d0000000302800210000000f80220018f0000076a0220027f0000076a0220016700000000036300190000000003030433000000000223016f000000000021041b000000010180021000000001011001bf0000001104000029000009a70000013d000000000005004b0000099f0000613d0000000001070433000009a00000013d0000000001000019000000100600002900000003025002100000076a0220027f0000076a02200167000000000121016f0000000102500210000000000121019f000000000014041b000000400100043d00000020020000390000000003210436000000000206043300000000002304350000004003100039000000000002004b000009b80000613d000000000400001900000000053400190000000006740019000000000606043300000000006504350000002004400039000000000024004b000009b10000413d0000001f042000390000076904400197000000000232001900000000000204350000004002400039000006cc0020009c000006cc020080410000006002200210000006cc0010009c000006cc010080410000004001100210000000000112019f0000000002000414000006cc0020009c000006cc02008041000000c002200210000000000112019f00000711011001c70000800d0200003900000002030000390000072d040000410000000b050000291b2c1b220000040f0000000100200190000000500000613d0000000c030000290000000103300039000000080100002900000000010104330000000002010433000000000023004b000008c30000413d000009df0000013d00000020030000390000000f070000290000001006000029000000000082004b0000098f0000413d000009970000013d00000004010000290000000002010433000000070100002900000000050104330000000601000029000000000301043300000009010000290000000004010433000000400100043d000000200610003900000100070000390000000000760435000006d00440019700000000004104350000010007100039000000006403043400000000004704350000012003100039000000000004004b000009fb0000613d000000000700001900000000083700190000000009760019000000000909043300000000009804350000002007700039000000000047004b000009f40000413d000000000643001900000000000604350000000076050434000000000006004b0000000006000039000000010600c039000000400810003900000000006804350000000006070433000007220660019700000060071000390000000000670435000000400550003900000000050504330000072205500197000000800610003900000000005604350000000065020434000000000005004b0000000005000039000000010500c039000000a007100039000000000057043500000000050604330000072205500197000000c0061000390000000000560435000000400220003900000000020204330000072202200197000000e00510003900000000002504350000001f02400039000007690220019700000000021200490000000002320019000006cc0020009c000006cc020080410000006002200210000006cc0010009c000006cc010080410000004001100210000000000112019f0000000002000414000006cc0020009c000006cc02008041000000c002200210000000000112019f00000711011001c70000800d0200003900000001030000390000072e040000411b2c1b220000040f0000000100200190000000500000613d00000005020000290000000102200039000500000002001d000000010020006c000006420000413d00000b950000013d0000000001000416000000000001004b000000500000c13d000000000100041a000006cf021001970000000006000411000000000026004b00000a970000c13d0000000102000039000000000302041a000006d304300197000000000464019f000000000042041b000006d301100197000000000010041b0000000001000414000006cf05300197000006cc0010009c000006cc01008041000000c00110021000000711011001c70000800d0200003900000003030000390000074f0400004100000b920000013d0000075401000041000000800010043f000007140100004100001b2e00010430000000a007000039000007350400004100000000060000190000000005070019000000000704041a000000000775043600000001044000390000000106600039000000000026004b00000a580000413d000007360250009a000007370020009c000000d00000413d000000410250008a00000769022001970000008002200039000000800400043d000000400020043f000006d00040009c000000d00000213d000001410000013d000000a0050000390000073f0300004100000000040000190000000006050019000000000503041a000000000556043600000001033000390000000104400039000000000014004b00000a6d0000413d000000410160008a0000076904100197000007400040009c000000d00000213d0000008001400039000000400010043f0000000000210435000000a002400039000000800300043d0000000000320435000000c002400039000000000003004b00000a890000613d000000a00400003900000000050000190000000046040434000006cf0660019700000000026204360000000105500039000000000035004b00000a830000413d0000000002120049000006cc0020009c000006cc020080410000006002200210000006cc0010009c000006cc010080410000004001100210000000000112019f00001b2d0001042e0000071701000041000000800010043f000000840030043f0000075f0100004100001b2e000104300000074e01000041000000800010043f000007140100004100001b2e000104300000000a01000039000000000101041a000006cf011001970000000004000411000000000041004b00000ae50000c13d00000020013000390000071902000041000000000021043500000064013000390000001102000029000000000021043500000044013000390000000002000410000000000021043500000024013000390000000000410435000000640100003900000000001304350000071a0030009c000000d00000213d000000a001300039000000400010043f000007150100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000006cc0010009c000006cc01008041000000c00110021000000716011001c70000800502000039001000000003001d1b2c1b270000040f0000000100200190000013b30000613d000000000101043b00000010020000291b2c18700000040f0000000001000414000006cc0010009c000006cc01008041000000c00110021000000711011001c70000800d0200003900000003030000390000071b0400004100000b900000013d000007650020009c000006050000613d000007660020009c000006050000613d000000800000043f000007300100004100001b2d0001042e0000000402000039000000000302041a000006d304300197000000000414019f000000000042041b000006cf02300197000000800020043f000000a00010043f0000000001000414000006cc0010009c000006cc01008041000000c00110021000000739011001c70000800d0200003900000001030000390000073a0400004100000b920000013d0000071701000041000000000013043500000004013000390000000000410435000006cc0030009c000006cc03008041000000400130021000000718011001c700001b2e00010430000000000100041a000006d301100197000000000161019f000000000010041b0000000001000414000006cc0010009c000006cc01008041000000c00110021000000711011001c70000800d020000390000000303000039000007120400004100000b920000013d000006cc00b0009c000006cc0300004100000000030b40190000004003300210000006cc0010009c000006cc01008041000000c001100210000000000131019f00000718011001c7000f0000000b001d1b2c1b270000040f0000000f0b0000290000006003100270000006cc03300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b001900000b160000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00000b120000c13d000000000006004b00000b230000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000b3c0000613d0000001f01400039000000600210018f0000000001b20019000000000021004b00000000020000390000000102004039000006d00010009c000000d00000213d0000000100200190000000d00000c13d000000400010043f000000200030008c000000500000413d00000000020b04330000001103000029000000000032004b00000b850000813d000007620200004100000ba60000013d000000100100002900000b5b0000013d0000001f0530018f000006ce06300198000000400200043d000000000462001900000b470000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000b430000c13d000000000005004b00000b540000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000006cc0020009c000006cc020080410000004002200210000000000112019f00001b2e000104300000000f01000029000000000112034f000000000101043b000006cf0010009c000000500000213d000000400200043d0000074203000041000000000032043500000004032000390000000000130435000006cc0020009c000006cc02008041000000400120021000000718011001c700001b2e000104300000000104000039000000000504041a000006d305500197000000000225019f000000000024041b000000000003004b00000ba40000613d000006cf0210019800000ba40000613d000000100000006b00000ba40000613d000000800010043f000000c00030043f000006d401000041000000400300043d000d00000003001d00000000001304350000000001000414000000040020008c00000cf50000c13d0000000001000415000000210110008a00000005011002100000000103000031000000200030008c0000002004000039000000000403401900000d220000013d000000100100002900000000020004111b2c15f20000040f0000000001000414000006cc0010009c000006cc01008041000000c00110021000000711011001c70000800d0200003900000003030000390000076104000041000000000500041100000011060000291b2c1b220000040f0000000100200190000000500000613d000000000100001900001b2d0001042e000006cc033001970000001f0530018f000006ce06300198000000400200043d000000000462001900000b470000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000b9f0000c13d00000b470000013d000000400100043d0000072f020000410000000000210435000006cc0010009c000006cc010080410000004001100210000006d5011001c700001b2e000104300000001003000029000006cc0030009c000006cc030080410000004003300210000006cc0010009c000006cc01008041000000c001100210000000000131019f00000718011001c71b2c1b270000040f0000006003100270000006cc03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000100570002900000bc50000613d000000000801034f0000001009000029000000008a08043c0000000009a90436000000000059004b00000bc10000c13d000000000006004b00000bd20000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000d710000613d0000001f01400039000000600210018f0000001001200029000000000021004b00000000020000390000000102004039000006d00010009c000000d00000213d0000000100200190000000d00000c13d000000400010043f000000200030008c000000500000413d00000010020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b000000500000c13d000000000002004b00000f850000c13d0000000f0100002900000020011000390000000201100367000000000101043b001000000001001d000006cf0010009c000000500000213d0000071501000041000000000010044300000000010004120000000400100443000000600100003900000024001004430000000001000414000006cc0010009c000006cc01008041000000c00110021000000716011001c700008005020000391b2c1b270000040f0000000100200190000013b30000613d000000000101043b000000000001004b000011290000c13d0000000f010000290000000201100367000000000101043b001000000001001d000006d00010009c000000500000213d0000001001000029000000000010043f0000000601000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000400200043d000e00000002001d0000000402200039000000000101043b000000000101041a000000000001004b000011a50000c13d0000074a010000410000000e030000290000000000130435000000100100002900000ddb0000013d0000000002000019001100000002001d0000000502200210001000000002001d0000000e012000290000000001010433000000000010043f0000000801000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000101043b000000000201041a000000010320019000000001052002700000007f0550618f0000001f0050008c00000000040000390000000104002039000000000043004b00000f7f0000c13d000000400700043d0000000004570436000000000003004b00000c620000613d000900000004001d000a00000005001d000b00000007001d000000000010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006db011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d0000000a08000029000000000008004b000000200500008a00000c6a0000613d000000000201043b00000000010000190000000d060000290000000b0700002900000009090000290000000003190019000000000402041a000000000043043500000001022000390000002001100039000000000081004b00000c5a0000413d00000c6d0000013d0000076b012001970000000000140435000000000005004b00000020010000390000000001006039000000200500008a0000000d0600002900000c6d0000013d00000000010000190000000d060000290000000b070000290000003f01100039000000000251016f0000000001720019000000000021004b00000000020000390000000102004039000006d00010009c000000d00000213d0000000100200190000000d00000c13d000000400010043f00000000010604330000001102000029000000000021004b000010ed0000a13d00000010030000290000000c0130002900000000007104350000000001060433000000000021004b000010ed0000a13d00000001022000390000000f010000290000000001010433000000000012004b00000c250000413d000004260000013d0000001101000029000000000010043f0000000701000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d00000010020000290000001f022000390000076902200197000b00000002001d0000003f022000390000076902200197000000000101043b000c00000001001d000000400100043d0000000002210019000000000012004b00000000040000390000000104004039000006d00020009c000000d00000213d0000000100400190000000d00000c13d000000400020043f000000100200002900000000022104360000000e05000029000000000050007c000000500000213d00000010040000290000076903400198000e001f00400193000a00000003001d00000000033200190000000f040000290000002004400039000f00000004001d000000020440036700000cbc0000613d000000000504034f0000000006020019000000005705043c0000000006760436000000000036004b00000cb80000c13d0000000e0000006b00000cca0000613d0000000a044003600000000e050000290000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f000000000043043500000010032000290000000000030435000006cc0020009c000006cc0200804100000040022002100000000001010433000006cc0010009c000006cc010080410000006001100210000000000121019f0000000002000414000006cc0020009c000006cc02008041000000c002200210000000000112019f00000711011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d0000000c020000290000000503200039000000000201043b00000000010300191b2c19500000040f000000400700043d000000000001004b000010130000c13d000c00000007001d0000002401700039000000400200003900000000002104350000073e01000041000000000017043500000004017000390000001102000029000000000021043500000044037000390000000d0100002900000010020000291b2c15550000040f0000000c02000029000011200000013d0000000d03000029000006cc0030009c000006cc030080410000004003300210000006cc0010009c000006cc01008041000000c001100210000000000131019f000006d5011001c71b2c1b270000040f0000006003100270000006cc03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000d0570002900000d0e0000613d000000000801034f0000000d09000029000000008a08043c0000000009a90436000000000059004b00000d0a0000c13d000000000006004b00000d1b0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000001000415000000200110008a0000000501100210000000010020019000000d390000613d0000001f02400039000000600420018f0000000d02400029000000000042004b00000000040000390000000104004039000006d00020009c000000d00000213d0000000100400190000000d00000c13d000000400020043f000000200030008c000000500000413d0000000d030000290000000003030433000000ff0030008c000000500000213d0000000501100270000000000103001f0000001101000029000000ff0110018f000000000031004b00000fab0000c13d0000001101000029000000a00010043f0000000401000039000000000201041a000006d30220019700000010022001af000000000021041b0000000f010000290000000001010433000000000001004b0000000001000039000000010100c039000000e00010043f0000000001000019000010fa0000613d000000400100043d000006d80010009c000000d00000213d0000002002100039000000400020043f0000000000010435000000e00100043d000000000001004b00000fb60000c13d000000400100043d000007570200004100000ba60000013d00000000040000190000000d0c00002900000d5f0000013d0000001f0760003900000769077001970000000006650019000000000006043500000000057500190000000104400039000000000024004b000004310000813d0000000006150049000000400660008a0000000003630436000000200cc0003900000000060c043300000000760604340000000005650436000000000006004b00000d570000613d00000000080000190000000009580019000000000a870019000000000a0a04330000000000a904350000002008800039000000000068004b00000d690000413d00000d570000013d0000001f0530018f000006ce06300198000000400200043d000000000462001900000b470000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000d780000c13d00000b470000013d0000000f03000029000006cc0030009c000006cc030080410000004003300210000006cc0010009c000006cc01008041000000c001100210000000000131019f00000718011001c71b2c1b270000040f0000006003100270000006cc03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000f0570002900000d960000613d000000000801034f0000000f09000029000000008a08043c0000000009a90436000000000059004b00000d920000c13d000000000006004b00000da30000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000f730000613d0000001f01400039000000600210018f0000000f01200029000000000021004b00000000020000390000000102004039000006d00010009c000000d00000213d0000000100200190000000d00000c13d000000400010043f000000200030008c000000500000413d0000000f020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b000000500000c13d000000000002004b00000f850000c13d0000000d010000290000000201100367000000000101043b000f00000001001d000006d00010009c000000500000213d0000000f01000029000000000010043f0000000601000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000400200043d000c00000002001d0000000402200039000000000101043b000000000101041a000000000001004b000011470000c13d0000074a010000410000000c0300002900000000001304350000000f01000029000000000012043500000ae90000013d0000000002000019000700000002001d000000050120021000000005011000290000000201100367000000000101043b000b00000001001d000006d00010009c000000500000213d0000000b01000029000000000010043f0000000601000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000101043b000000000301041a000000000003004b0000115a0000613d0000000501000039000000000201041a000000000002004b000013c00000613d000000010130008a000000000023004b00000e190000613d000000000012004b000010ed0000a13d0000071d0130009a0000071d0220009a000000000202041a000000000021041b000000000020043f0000000601000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c70000801002000039001100000003001d1b2c1b270000040f0000000100200190000000500000613d000000000101043b0000001102000029000000000021041b0000000501000039000000000301041a000000000003004b000010f30000613d000000010130008a0000071d0230009a000000000002041b0000000502000039000000000012041b0000000b01000029000000000010043f0000000601000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000101043b000000000001041b0000000b01000029000000000010043f0000000701000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000101043b0000000501100039000000000301041a000000400200043d000f00000002001d001100000003001d0000000002320436000a00000002001d000000000010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006db011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d0000001105000029000000000005004b0000000a0200002900000e580000613d000000000101043b0000000a020000290000000003000019000000000401041a000000000242043600000001011000390000000103300039000000000053004b00000e520000413d0000000f0120006a0000001f0110003900000769021001970000000f01200029000000000021004b00000000020000390000000102004039000006d00010009c000000d00000213d0000000100200190000000d00000c13d000000400010043f0000000f010000290000000001010433000000000001004b00000efd0000613d000000000200001900000e700000013d000000110200002900000001022000390000000f010000290000000001010433000000000012004b00000efd0000813d001100000002001d0000000b01000029000000000010043f0000000701000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000301043b0000000f0100002900000000010104330000001102000029000000000021004b000010ed0000a13d00000005012002100000000a011000290000000001010433000c00000001001d000000000010043f000d00000003001d0000000601300039000e00000001001d000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000101043b000000000101041a000000000001004b00000e6a0000613d0000000d020000290000000503200039000000000203041a000000000002004b000013c00000613d000000000021004b001000000001001d000d00000003001d00000edc0000613d000900000002001d000000000030043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006db011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d00000010020000290008000100200092000000000101043b0000000d04000029000000000204041a000000080020006c000010ed0000a13d0000000902000029000000010220008a0000000001120019000000000101041a000900000001001d000000000040043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006db011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000101043b00000008011000290000000902000029000000000021041b000000000020043f0000000e01000029000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000101043b0000001002000029000000000021041b0000000d03000029000000000103041a001000000001001d000000000001004b000010f30000613d000000000030043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006db011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d0000001002000029000000010220008a000000000101043b0000000001210019000000000001041b0000000d01000029000000000021041b0000000c01000029000000000010043f0000000e01000029000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000101043b000000000001041b00000e6a0000013d0000000b01000029000000000010043f0000000701000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000301043b000000000003041b0000000101300039000000000001041b0000000201300039000000000001041b0000000301300039000000000001041b0000000404300039000000000104041a000000010010019000000001051002700000007f0550618f0000001f0050008c00000000020000390000000102002039000000000121013f000000010010019000000f7f0000c13d000000000005004b00000f3f0000613d0000001f0050008c00000f3e0000a13d000f00000005001d001100000003001d001000000004001d000000000040043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006db011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000101043b0000000f020000290000001f02200039000000050220027000000000022100190000000103100039000000000023004b00000f3a0000813d000000000003041b0000000103300039000000000023004b00000f360000413d0000001002000029000000000002041b00000000040100190000001103000029000000000004041b0000000501300039000000000201041a000000000001041b000000000002004b00000f570000613d001100000002001d000000000010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006db011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000101043b0000001102100029000000000021004b00000f570000813d000000000001041b0000000101100039000000000021004b00000f530000413d000000400100043d0000000b020000290000000000210435000006cc0010009c000006cc0100804100000040011002100000000002000414000006cc0020009c000006cc02008041000000c002200210000000000112019f000006db011001c70000800d0200003900000001030000390000071e040000411b2c1b220000040f0000000100200190000000500000613d00000007020000290000000102200039000000060020006c00000dde0000413d0000063f0000013d0000071702000041000001400020043f000001440010043f000007310100004100001b2e000104300000001f0530018f000006ce06300198000000400200043d000000000462001900000b470000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000f7a0000c13d00000b470000013d0000074101000041000000000010043f0000002201000039000000040010043f000007180100004100001b2e00010430000007450200004100000ba60000013d000000000001004b000010060000613d000000a00200043d0000072202200197000000000021004b000010060000813d0000001101000029000000000010043f0000000701000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000101043b00000080020000391b2c19dc0000040f000001200100043d0000072201100197000000e00200043d000000000002004b000010460000c13d000000000001004b00000fa70000c13d000001000100043d00000722001001980000104c0000613d000000400200043d001100000002001d0000072501000041000011430000013d00000024042000390000000000340435000006d603000041000000000032043500000004032000390000000000130435000006cc0020009c000006cc020080410000004001200210000006d7011001c700001b2e000104300000000f020000290000000002020433000000000002004b000010fa0000613d000000000200001900000fc20000013d000000110200002900000001022000390000000f010000290000000001010433000000000012004b000010f90000813d001100000002001d00000005012002100000000e011000290000000001010433000006cf0310019800000fbc0000613d000000000030043f0000000301000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c70000801002000039001000000003001d1b2c1b270000040f00000010040000290000000100200190000000500000613d000000000101043b000000000101041a000000000001004b00000fbc0000c13d0000000203000039000000000103041a000006d00010009c000000d00000213d0000000102100039000000000023041b000006da0110009a000000000041041b000000000103041a000d00000001001d000000000040043f0000000301000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f00000010030000290000000100200190000000500000613d000000000101043b0000000d02000029000000000021041b000000400100043d0000000000310435000006cc0010009c000006cc0100804100000040011002100000000002000414000006cc0020009c000006cc02008041000000c002200210000000000112019f000006db011001c70000800d020000390000000103000039000006dc040000411b2c1b220000040f000000010020019000000fbc0000c13d000000500000013d000000400200043d001100000002001d00000723010000410000000000120435000000040220003900000080010000391b2c15e40000040f0000001101000029000006cc0010009c000006cc01008041000000400110021000000724011001c700001b2e000104300000002001700039000000100200002900000000002104350000002001000039000000000017043500000040017000390000000a021000290000000f0300002900000002033003670000000a0000006b000010240000613d000000000403034f0000000005010019000000004604043c0000000005650436000000000025004b000010200000c13d0000000e0000006b000010320000613d0000000a033003600000000e040000290000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000032043500000010011000290000000000010435000006cc0070009c000006cc0700804100000040017002100000000b020000290000073b0020009c0000073b020080410000006002200210000000000112019f0000000002000414000006cc0020009c000006cc02008041000000c002200210000000000121019f0000073c0110009a0000800d0200003900000002030000390000073d04000041000003190000013d000000000001004b000011400000613d000001000200043d0000072202200197000000000021004b000011400000813d0000001101000029000000000010043f0000000701000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000101043b0000000201100039000000e0020000391b2c19dc0000040f000000400100043d00000011020000290000000002210436000000800300043d000000000003004b0000000003000039000000010300c0390000000000320435000000a00200043d000007220220019700000040031000390000000000230435000000c00200043d000007220220019700000060031000390000000000230435000000e00200043d000000000002004b0000000002000039000000010200c03900000080031000390000000000230435000001000200043d0000072202200197000000a0031000390000000000230435000001200200043d0000072202200197000000c0031000390000000000230435000006cc0010009c000006cc0100804100000040011002100000000002000414000006cc0020009c000006cc02008041000000c002200210000000000112019f00000732011001c70000800d020000390000000103000039000007330400004100000ae40000013d00000000020000190000108f0000013d00000010020000290000000102200039000000800100043d000000000012004b000001ec0000813d001000000002001d0000000501200210000000a0011000390000000001010433000006cf01100197001100000001001d000000000010043f0000000301000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000101043b000000000301041a000000000003004b0000108a0000613d0000000201000039000000000201041a000000000002004b000013c00000613d000000010130008a000000000023004b000010c70000613d000000000012004b000010ed0000a13d000007550130009a000007550220009a000000000202041a000000000021041b000000000020043f0000000301000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c70000801002000039000d00000003001d1b2c1b270000040f0000000d030000290000000100200190000000500000613d000000000101043b000000000031041b0000000201000039000000000301041a000000000003004b000010f30000613d000000010130008a000007550230009a000000000002041b0000000202000039000000000012041b0000001101000029000000000010043f0000000301000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000101043b000000000001041b000000400100043d00000011020000290000000000210435000006cc0010009c000006cc0100804100000040011002100000000002000414000006cc0020009c000006cc02008041000000c002200210000000000112019f000006db011001c70000800d02000039000000010300003900000756040000411b2c1b220000040f00000001002001900000108a0000c13d000000500000013d0000074101000041000000000010043f0000003201000039000000040010043f000007180100004100001b2e000104300000074101000041000000000010043f0000003101000039000000040010043f000007180100004100001b2e00010430000000e00100043d0000000c05000029000001000050043f000000800200043d00000140000004430000016000200443000000a00200043d00000020030000390000018000300443000001a0002004430000004002000039000000c00400043d000001c000200443000001e000400443000000600200003900000200002004430000022000100443000000800100003900000240001004430000026000500443000001000030044300000005010000390000012000100443000006dd0100004100001b2d0001042e000000400300043d001100000003001d0000002401300039000000400200003900000000002104350000072c01000041000000000013043500000004013000390000000b020000290000000000210435000000440230003900000010010000291b2c143a0000040f00000011020000290000000001210049000006cc0010009c000006cc01008041000006cc0020009c000006cc0200804100000060011002100000004002200210000000000121019f00001b2e000104300000001001000029000000000010043f0000000301000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000101043b000000000101041a000000000001004b00000c050000c13d000000400100043d0000074602000041000000000021043500000004021000390000001003000029000004ea0000013d000000400200043d001100000002001d000007230100004100000000001204350000000402200039000000e0010000390000100c0000013d0000000401000039000000000301041a00000758010000410000000c0400002900000000001404350000000f0100002900000000001204350000002401400039000000000200041100000000002104350000000001000414000006cf02300197000000040020008c000011600000c13d0000000103000031000000200030008c000000200400003900000000040340190000118a0000013d000000400100043d0000071f02000041000000000021043500000004021000390000000b03000029000004ea0000013d0000000c03000029000006cc0030009c000006cc030080410000004003300210000006cc0010009c000006cc01008041000000c001100210000000000131019f000006d7011001c71b2c1b270000040f0000006003100270000006cc03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000c05700029000011790000613d000000000801034f0000000c09000029000000008a08043c0000000009a90436000000000059004b000011750000c13d000000000006004b000011860000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000011b50000613d0000001f01400039000000600210018f0000000c01200029000000000021004b00000000020000390000000102004039000006d00010009c000000d00000213d0000000100200190000000d00000c13d000000400010043f000000200030008c000000500000413d0000000c020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b000000500000c13d000000000002004b000012950000c13d0000074802000041000000000021043500000004021000390000000003000411000004ea0000013d0000000401000039000000000301041a00000747010000410000000e040000290000000000140435000000100100002900000000001204350000000001000414000006cf02300197000000040020008c000011c10000c13d0000000103000031000000200030008c00000020040000390000000004034019000011eb0000013d0000001f0530018f000006ce06300198000000400200043d000000000462001900000b470000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000011bc0000c13d00000b470000013d0000000e03000029000006cc0030009c000006cc030080410000004003300210000006cc0010009c000006cc01008041000000c001100210000000000131019f00000718011001c71b2c1b270000040f0000006003100270000006cc03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000e05700029000011da0000613d000000000801034f0000000e09000029000000008a08043c0000000009a90436000000000059004b000011d60000c13d000000000006004b000011e70000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f000300000001035500000001002001900000127c0000613d0000001f01400039000000600210018f0000000e01200029000000000021004b00000000020000390000000102004039000006d00010009c000000d00000213d0000000100200190000000d00000c13d000000400010043f000000200030008c000000500000413d0000000e0200002900000000020204330000072a0020009c000000500000813d0000000003000411000000000023004b000012d50000c13d00000002010003670000000f02100360000000000202043b000006d00020009c000000500000213d0000000f030000290000004003300039000000000131034f000000000101043b001000000001001d000000000020043f0000000701000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000101043b000000100200002900000011030000291b2c1a490000040f000000400100043d00000010020000290000000000210435000006cc0010009c000006cc0100804100000040011002100000000002000414000006cc0020009c000006cc02008041000000c002200210000000000112019f000006db011001c70000800d020000390000000203000039000007490400004100000000050004111b2c1b220000040f0000000100200190000000500000613d0000000f010000290000000201100367000000000101043b000006d00010009c000000500000213d1b2c15890000040f000000400200043d001100000002001d0000000002000412001900000002001d001800200000003d001000000001001d000080050100003900000044030000390000000004000415000000190440008a000000050440021000000715020000411b2c1b040000040f000000ff0310018f000000110100002900000020021000390000000000320435000000200200003900000000002104351b2c14240000040f000000400100043d000e00000001001d1b2c14240000040f0000000e020000290000002001200039000f00000001001d00000011030000290000000000310435000000100100002900000000001204350000000003020019000000400400043d001100000004001d0000002001000039000000000214043600000000010304330000004003000039000000000032043500000060024000391b2c143a0000040f000000000201001900000011040000290000000001410049000000200310008a0000000f010000290000000001010433000000400440003900000000003404351b2c143a0000040f00000011020000290000000001210049000006cc0020009c000006cc020080410000004002200210000006cc0010009c000006cc010080410000006001100210000000000121019f00001b2d0001042e00000009010000290000000001010433000000400200043d00000726030000410000000000320435000006d00110019700000b620000013d000000400200043d001100000002001d00000725010000410000128b0000013d000000400300043d001100000003001d0000072502000041000012920000013d0000001f0530018f000006ce06300198000000400200043d000000000462001900000b470000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000012830000c13d00000b470000013d000000400200043d001100000002001d00000723010000410000000000120435000000040220003900000000010300190000100c0000013d000000400300043d001100000003001d0000072302000041000000000023043500000004023000390000100c0000013d00000002020003670000000d01200360000000000101043b000006d00010009c000000500000213d0000000d030000290000008003300039000000000332034f000000000303043b0000000004000031000000110540006a000000230550008a000006d106500197000006d107300197000000000867013f000000000067004b0000000006000019000006d106004041000000000053004b0000000005000019000006d105008041000006d10080009c000000000605c019000000000006004b000000500000c13d0000001105000029000f00040050003d0000000f05300029000000000252034f000000000302043b000006d00030009c000000500000213d00000000043400490000002002500039000006d105400197000006d106200197000000000756013f000000000056004b0000000005000019000006d105004041000000000042004b0000000004000019000006d104002041000006d10070009c000000000504c019000000000005004b000000500000c13d1b2c14e40000040f000000000001004b000012d90000c13d0000001101000029000000a4021000390000000f010000291b2c14820000040f0000075c03000041000000400500043d001100000005001d000000000035043500000004035000390000002004000039000000000043043500000024035000391b2c15550000040f0000111f0000013d000007480200004100000000002104350000000402100039000004ea0000013d00000002010003670000000d02100360000000000202043b000006d00020009c000000500000213d0000000d03000029000c00400030003d0000000c01100360000000000101043b000d00000001001d000000000020043f0000000701000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000000500000613d000000000101043b00000002011000390000000d0200002900000010030000291b2c1a490000040f0000000c01000029001000600010003d00000002030003670000001001300360000000000101043b0000000004000031000000110240006a000000230220008a000006d105200197000006d106100197000000000756013f000000000056004b0000000005000019000006d105004041000000000021004b0000000002000019000006d102008041000006d10070009c000000000502c019000000000005004b000000500000c13d0000000f01100029000000000213034f000000000202043b000006d00020009c000000500000213d00000000052400490000002006100039000006d101500197000006d107600197000000000817013f000000000017004b0000000001000019000006d101004041000000000056004b0000000005000019000006d105002041000006d10080009c000000000105c019000000000001004b000000500000c13d0000001f0120003900000769011001970000003f011000390000076905100197000000400100043d0000000005510019000000000015004b00000000080000390000000108004039000006d00050009c000000d00000213d0000000100800190000000d00000c13d000000400050043f00000000052104360000000008620019000000000048004b000000500000213d000000000463034f00000769062001980000001f0720018f00000000036500190000133a0000613d000000000804034f0000000009050019000000008a08043c0000000009a90436000000000039004b000013360000c13d000000000007004b000013470000613d000000000464034f0000000306700210000000000703043300000000076701cf000000000767022f000000000404043b0000010006600089000000000464022f00000000046401cf000000000474019f0000000000430435000000000225001900000000000204350000000002010433000000200020008c000013600000613d000000000002004b000013640000c13d0000071501000041000000000010044300000000010004120000000400100443000000200100003900000024001004430000000001000414000006cc0010009c000006cc01008041000000c00110021000000716011001c700008005020000391b2c1b270000040f0000000100200190000013b30000613d000000000101043b001100000001001d0000136d0000013d0000000002050433001100000002001d000000ff0020008c0000136d0000a13d000000400400043d001100000004001d0000075b02000041000000000024043500000004024000390000002003000039000000000032043500000024024000390000111e0000013d0000071501000041000000000010044300000000010004120000000400100443000000200100003900000024001004430000000001000414000006cc0010009c000006cc01008041000000c00110021000000716011001c700008005020000391b2c1b270000040f0000000100200190000013b30000613d0000001102000029000000ff0220018f000000000301043b000000ff0430018f000000000142004b000013b40000c13d0000000d01000029001100000001001d0000001001000029000000800110008a001000000001001d0000000201100367000000000201043b000006cf0020009c000000500000213d0000000e0100002900000011030000291b2c15f20000040f00000010010000290000000201100367000000000601043b000006cf0060009c000000500000213d000000400100043d00000011020000290000000000210435000006cc0010009c000006cc0100804100000040011002100000000002000414000006cc0020009c000006cc02008041000000c002200210000000000112019f000006db011001c70000800d0200003900000003030000390000075a0400004100000000050004111b2c1b220000040f0000000100200190000000500000613d000000400100043d001000000001001d1b2c14190000040f000000110200002900000010010000290000000000210435000000400100043d0000000000210435000006cc0010009c000006cc0100804100000040011002100000074b011001c700001b2d0001042e000000000001042f000013bd0000a13d000001000010008c000013c00000813d0000004d0010008c000013ee0000213d000000000001004b000013cc0000c13d0000000102000039000013d70000013d0000000001240049000000ff0010008c000013c60000a13d0000074101000041000000000010043f0000001101000039000000040010043f000007180100004100001b2e000104300000004e0010008c000013ee0000813d000000000001004b000013d90000c13d0000000102000039000013eb0000013d0000000a030000390000000102000039000000010010019000000000043300a9000000010300603900000000022300a900000001011002720000000003040019000013ce0000c13d000000000002004b000013e50000613d0000000d012000f9000013830000013d0000000a0500003900000001020000390000000004010019000000010040019000000000065500a9000000010500603900000000022500a900000001044002720000000005060019000013dc0000c13d000000000002004b000013eb0000c13d0000074101000041000000000010043f0000001201000039000000040010043f000007180100004100001b2e000104300000076a022001290000000d0020006c000014000000813d000000400200043d001000000002001d00000759010000410000000000120435000000040120003900000011020000290000000d040000291b2c16cc0000040f00000010020000290000000001210049000006cc0010009c000006cc010080410000006001100210000006cc0020009c000006cc020080410000004002200210000000000121019f00001b2e00010430000000ff0210018f0000004d0020008c000013c00000213d000000000002004b000014070000c13d0000000101000039000014100000013d0000000a030000390000000101000039000000010020019000000000043300a9000000010300603900000000011300a900000001022002720000000003040019000014090000c13d0000000d0000006b001100000000001d000013840000613d0000000d031000b9001100000003001d0000000d023000fa000000000012004b000013840000613d000013c00000013d0000076c0010009c0000141e0000813d0000002001100039000000400010043f000000000001042d0000074101000041000000000010043f0000004101000039000000040010043f000007180100004100001b2e000104300000076d0010009c000014290000813d0000004001100039000000400010043f000000000001042d0000074101000041000000000010043f0000004101000039000000040010043f000007180100004100001b2e000104300000076e0010009c000014340000813d000000a001100039000000400010043f000000000001042d0000074101000041000000000010043f0000004101000039000000040010043f000007180100004100001b2e0001043000000000430104340000000001320436000000000003004b000014460000613d000000000200001900000000052100190000000006240019000000000606043300000000006504350000002002200039000000000032004b0000143f0000413d000000000231001900000000000204350000001f0230003900000769022001970000000001210019000000000001042d000007200010009c000014670000213d000000430010008c000014670000a13d00000002020003670000000403200370000000000403043b000006d00040009c000014670000213d0000002403200370000000000503043b000006d00050009c000014670000213d0000002303500039000000000013004b000014670000813d0000000403500039000000000232034f000000000302043b000006d00030009c000014670000213d00000024025000390000000005320019000000000015004b000014670000213d0000000001040019000000000001042d000000000100001900001b2e000104300000000043020434000007220330019700000000033104360000000004040433000006cc04400197000000000043043500000040032000390000000003030433000000000003004b0000000003000039000000010300c039000000400410003900000000003404350000006003200039000000000303043300000722033001970000006004100039000000000034043500000080022000390000000002020433000007220220019700000080031000390000000000230435000000a001100039000000000001042d0000000204000367000000000224034f000000000202043b000000000300003100000000051300490000001f0550008a000006d106500197000006d107200197000000000867013f000000000067004b0000000006000019000006d106002041000000000052004b0000000005000019000006d105004041000006d10080009c000000000605c019000000000006004b000014aa0000613d0000000001120019000000000214034f000000000202043b000006d00020009c000014aa0000213d00000000032300490000002001100039000006d104300197000006d105100197000000000645013f000000000045004b0000000004000019000006d104004041000000000031004b0000000003000019000006d103002041000006d10060009c000000000403c019000000000004004b000014aa0000c13d000000000001042d000000000100001900001b2e000104300000076f0020009c000014dc0000813d00000000040100190000001f0120003900000769011001970000003f011000390000076905100197000000400100043d0000000005510019000000000015004b00000000070000390000000107004039000006d00050009c000014dc0000213d0000000100700190000014dc0000c13d000000400050043f00000000052104360000000007420019000000000037004b000014e20000213d00000769062001980000001f0720018f00000002044003670000000003650019000014cc0000613d000000000804034f0000000009050019000000008a08043c0000000009a90436000000000039004b000014c80000c13d000000000007004b000014d90000613d000000000464034f0000000306700210000000000703043300000000076701cf000000000767022f000000000404043b0000010006600089000000000464022f00000000046401cf000000000474019f000000000043043500000000022500190000000000020435000000000001042d0000074101000041000000000010043f0000004101000039000000040010043f000007180100004100001b2e00010430000000000100001900001b2e000104300003000000000002000300000003001d000200000002001d000006d001100197000000000010043f0000000701000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000207000029000000030a00002900000001002001900000154d0000613d0000000003000031000000000601043b0000076f00a0009c0000154f0000813d0000001f01a0003900000769011001970000003f011000390000076902100197000000400100043d0000000002210019000000000012004b00000000050000390000000105004039000006d00020009c0000154f0000213d00000001005001900000154f0000c13d000100000006001d000000400020043f0000000002a1043600000000057a0019000000000035004b0000154d0000213d0000076904a001980000001f05a0018f00000002067003670000000003420019000015180000613d000000000706034f0000000008020019000000007907043c0000000008980436000000000038004b000015140000c13d000000000005004b000015250000613d000000000446034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004304350000000003a200190000000000030435000006cc0020009c000006cc0200804100000040022002100000000001010433000006cc0010009c000006cc010080410000006001100210000000000121019f0000000002000414000006cc0020009c000006cc02008041000000c002200210000000000112019f00000711011001c700008010020000391b2c1b270000040f00000001002001900000154d0000613d000000000101043b000000000010043f00000001010000290000000601100039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f00000001002001900000154d0000613d000000000101043b000000000101041a000000000001004b0000000001000039000000010100c039000000000001042d000000000100001900001b2e000104300000074101000041000000000010043f0000004101000039000000040010043f000007180100004100001b2e00010430000000000323043600000769062001980000001f0720018f00000000056300190000000201100367000015610000613d000000000801034f0000000009030019000000008a08043c0000000009a90436000000000059004b0000155d0000c13d000000000007004b0000156e0000613d000000000161034f0000000306700210000000000705043300000000076701cf000000000767022f000000000101043b0000010006600089000000000161022f00000000016101cf000000000171019f0000000000150435000000000123001900000000000104350000001f0120003900000769011001970000000001130019000000000001042d000000400100043d0000076e0010009c000015830000813d000000a002100039000000400020043f000000800210003900000000000204350000006002100039000000000002043500000040021000390000000000020435000000200210003900000000000204350000000000010435000000000001042d0000074101000041000000000010043f0000004101000039000000040010043f000007180100004100001b2e000104300003000000000002000006d001100197000000000010043f0000000701000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000015d60000613d000000000101043b0000000405100039000000000205041a000000010320019000000001062002700000007f0660618f0000001f0060008c00000000040000390000000104002039000000000043004b000015d80000c13d000000400100043d0000000004610436000000000003004b000015c20000613d000100000004001d000200000006001d000300000001001d000000000050043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006db011001c700008010020000391b2c1b270000040f0000000100200190000015d60000613d0000000206000029000000000006004b000015c80000613d000000000201043b0000000005000019000000030100002900000001070000290000000003570019000000000402041a000000000043043500000001022000390000002005500039000000000065004b000015ba0000413d000015ca0000013d0000076b022001970000000000240435000000000006004b00000020050000390000000005006039000015ca0000013d000000000500001900000003010000290000003f0350003900000769023001970000000003120019000000000023004b00000000020000390000000102004039000006d00030009c000015de0000213d0000000100200190000015de0000c13d000000400030043f000000000001042d000000000100001900001b2e000104300000074101000041000000000010043f0000002201000039000000040010043f000007180100004100001b2e000104300000074101000041000000000010043f0000004101000039000000040010043f000007180100004100001b2e000104300000000043010434000000000003004b0000000003000039000000010300c039000000000332043600000000040404330000072204400197000000000043043500000040022000390000004001100039000000000101043300000722011001970000000000120435000000000001042d0002000000000002000000400400043d00000044054000390000000000350435000000200340003900000770050000410000000000530435000006cf022001970000002405400039000000000025043500000044020000390000000000240435000007710040009c000016800000813d0000008009400039000000400090043f000007720040009c000016800000213d000006cf0a100197000000c001400039000000400010043f00000020010000390000000000190435000000a00140003900000773020000410000000000210435000000000204043300000000010004140000000400a0008c0000163e0000c13d00000001020000390000000101000031000000000001004b000016560000613d000006d00010009c000016800000213d0000001f0410003900000769044001970000003f044000390000076904400197000000400c00043d00000000044c00190000000000c4004b00000000050000390000000105004039000006d00040009c000016800000213d0000000100500190000016800000c13d000000400040043f000000000b1c043600000769031001980000001f0410018f00000000013b00190000000305000367000016300000613d000000000605034f00000000070b0019000000006806043c0000000007870436000000000017004b0000162c0000c13d000000000004004b000016580000613d000000000335034f0000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000016580000013d000006cc0030009c000006cc030080410000004003300210000006cc0020009c000006cc020080410000006002200210000000000232019f000006cc0010009c000006cc01008041000000c001100210000000000112019f00000000020a0019000200000009001d00010000000a001d1b2c1b220000040f000000010a0000290000000209000029000000010220018f00030000000103550000006001100270000106cc0010019d000006cc01100197000000000001004b000016140000c13d000000600c000039000000800b00003900000000030c0433000000000002004b000016880000613d000000000003004b000016730000c13d00020000000c001d00010000000b001d000007500100004100000000001004430000000400a004430000000001000414000006cc0010009c000006cc01008041000000c00110021000000751011001c700008002020000391b2c1b270000040f0000000100200190000016ba0000613d000000000101043b000000000001004b0000000201000029000016bb0000613d0000000003010433000000000003004b000000010b0000290000167f0000613d000007200030009c000016860000213d0000001f0030008c000016860000a13d00000000010b0433000000000001004b0000000002000039000000010200c039000000000021004b000016860000c13d000000000001004b0000169e0000613d000000000001042d0000074101000041000000000010043f0000004101000039000000040010043f000007180100004100001b2e00010430000000000100001900001b2e00010430000000000003004b000016b20000c13d0000000001090019000000400400043d000200000004001d0000077602000041000000000024043500000004034000390000002002000039000000000023043500000024024000391b2c143a0000040f00000002020000290000000001210049000006cc0010009c000006cc01008041000006cc0020009c000006cc0200804100000060011002100000004002200210000000000121019f00001b2e00010430000000400100043d00000064021000390000077403000041000000000032043500000044021000390000077503000041000000000032043500000024021000390000002a03000039000000000032043500000776020000410000000000210435000000040210003900000020030000390000000000320435000006cc0010009c000006cc01008041000000400110021000000777011001c700001b2e00010430000006cc00b0009c000006cc0b0080410000004002b00210000006cc0030009c000006cc030080410000006001300210000000000121019f00001b2e00010430000000000001042f000000400100043d00000044021000390000077803000041000000000032043500000024021000390000001d03000039000000000032043500000776020000410000000000210435000000040210003900000020030000390000000000320435000006cc0010009c000006cc01008041000000400110021000000724011001c700001b2e0001043000000040051000390000000000450435000000ff0330018f00000020041000390000000000340435000000ff0220018f00000000002104350000006001100039000000000001042d0000000101000039000000000101041a000006cf011001970000000002000411000000000012004b000016dc0000c13d000000000001042d000000400100043d00000754020000410000000000210435000006cc0010009c000006cc010080410000004001100210000006d5011001c700001b2e000104300007000000000002000400000001001d000600000002001d0000000021020434000000000001004b000017fd0000613d000006cc0010009c000006cc010080410000006001100210000006cc0020009c000500000002001d000006cc020080410000004002200210000000000121019f0000000002000414000006cc0020009c000006cc02008041000000c002200210000000000112019f00000711011001c700008010020000391b2c1b270000040f0000000100200190000017f50000613d000000000101043b000700000001001d0000000401000029000006d001100197000200000001001d000000000010043f0000000701000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000017f50000613d000000000201043b0000000701000029000000000010043f000400000002001d0000000601200039000300000001001d000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000017f50000613d000000000101043b000000000101041a000000000001004b000018050000c13d00000004010000290000000502100039000000000102041a0000076f0010009c000017f70000813d000100000001001d0000000101100039000000000012041b000400000002001d000000000020043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006db011001c700008010020000391b2c1b270000040f00000001002001900000000702000029000017f50000613d000000000101043b0000000101100029000000000021041b0000000401000029000000000101041a000400000001001d000000000020043f0000000301000029000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f00000001002001900000000702000029000017f50000613d000000000101043b0000000403000029000000000031041b000000000020043f0000000801000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000017f50000613d000000000801043b00000006010000290000000004010433000006d00040009c000017f70000213d000000000108041a000000010210019000000001031002700000007f0330618f0000001f0030008c00000000010000390000000101002039000000000012004b00000005070000290000181c0000c13d000000200030008c000400000008001d000700000004001d000017880000413d000300000003001d000000000080043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006db011001c700008010020000391b2c1b270000040f0000000100200190000017f50000613d00000007040000290000001f024000390000000502200270000000200040008c0000000002004019000000000301043b00000003010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b00000005070000290000000408000029000017880000813d000000000002041b0000000102200039000000000012004b000017840000413d0000001f0040008c000000200a00008a000000200b000039000017b80000a13d000000000080043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006db011001c700008010020000391b2c1b270000040f0000000100200190000017f50000613d0000000709000029000000200a00008a0000000002a90170000000000101043b000000200b000039000017ee0000613d000000010320008a000000050330027000000000043100190000002003000039000000010440003900000005070000290000000606000029000000040800002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000017a40000c13d000000000092004b000017b50000813d0000000302900210000000f80220018f0000076a0220027f0000076a0220016700000000036300190000000003030433000000000223016f000000000021041b000000010190021000000001011001bf000017c40000013d000000000004004b000017bc0000613d0000000001070433000017bd0000013d0000000001000019000000060600002900000003024002100000076a0220027f0000076a02200167000000000121016f0000000102400210000000000121019f000000000018041b000000400100043d0000000003b10436000000000206043300000000002304350000004003100039000000000002004b000017d40000613d000000000400001900000000053400190000000006740019000000000606043300000000006504350000002004400039000000000024004b000017cd0000413d0000001f042000390000000004a4016f000000000223001900000000000204350000004002400039000006cc0020009c000006cc020080410000006002200210000006cc0010009c000006cc010080410000004001100210000000000112019f0000000002000414000006cc0020009c000006cc02008041000000c002200210000000000121019f00000711011001c70000800d0200003900000002030000390000072d0400004100000002050000291b2c1b220000040f0000000100200190000017f50000613d000000000001042d00000000030b0019000000050700002900000006060000290000000408000029000000000092004b000017ad0000413d000017b50000013d000000000100001900001b2e000104300000074101000041000000000010043f0000004101000039000000040010043f000007180100004100001b2e00010430000000400100043d0000072f020000410000000000210435000006cc0010009c000006cc010080410000004001100210000006d5011001c700001b2e00010430000000400300043d000700000003001d0000002401300039000000400200003900000000002104350000072c010000410000000000130435000000040130003900000002020000290000000000210435000000440230003900000006010000291b2c143a0000040f00000007020000290000000001210049000006cc0010009c000006cc01008041000006cc0020009c000006cc0200804100000060011002100000004002200210000000000121019f00001b2e000104300000074101000041000000000010043f0000002201000039000000040010043f000007180100004100001b2e000104300005000000000002000000400300043d0000076e0030009c000018690000813d000000a002300039000000400020043f00000080023000390000000000020435000000600230003900000000000204350000004002300039000000000002043500000020023000390000000000020435000000000003043500000060021000390000000002020433000100000002001d000500000001001d0000000012010434000300000002001d000200000001001d0000000001010433000400000001001d000007280100004100000000001004430000000001000414000006cc0010009c000006cc01008041000000c00110021000000729011001c70000800b020000391b2c1b270000040f00000001002001900000186f0000613d0000000402000029000006cc04200197000000000601043b000000000346004b0000000501000029000018630000413d00000080021000390000000002020433000007220520019700000000023500a9000000000046004b000018540000613d00000000033200d9000000000053004b000018630000c13d00000003030000290000072203300197000000000032001a000018630000413d0000000002320019000000010300002900000722033001970000072204200197000000000023004b00000000030480190000000000310435000006cc0260019700000002030000290000000000230435000000000001042d0000074101000041000000000010043f0000001101000039000000040010043f000007180100004100001b2e000104300000074101000041000000000010043f0000004101000039000000040010043f000007180100004100001b2e00010430000000000001042f0002000000000002000000400900043d0000076d0090009c000018f00000813d000006cf0a1001970000004001900039000000400010043f00000020019000390000077303000041000000000031043500000020010000390000000000190435000000002302043400000000010004140000000400a0008c000018ae0000c13d00000001020000390000000101000031000000000001004b000018c60000613d000006d00010009c000018f00000213d0000001f0410003900000769044001970000003f044000390000076904400197000000400c00043d00000000044c00190000000000c4004b00000000050000390000000105004039000006d00040009c000018f00000213d0000000100500190000018f00000c13d000000400040043f000000000b1c043600000769031001980000001f0410018f00000000013b00190000000305000367000018a00000613d000000000605034f00000000070b0019000000006806043c0000000007870436000000000017004b0000189c0000c13d000000000004004b000018c80000613d000000000335034f0000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000018c80000013d000006cc0030009c000006cc030080410000006003300210000006cc0020009c000006cc020080410000004002200210000000000223019f000006cc0010009c000006cc01008041000000c001100210000000000112019f00000000020a0019000200000009001d00010000000a001d1b2c1b220000040f000000010a0000290000000209000029000000010220018f00030000000103550000006001100270000106cc0010019d000006cc01100197000000000001004b000018840000c13d000000600c000039000000800b00003900000000030c0433000000000002004b000018f80000613d000000000003004b000018e30000c13d00020000000c001d00010000000b001d000007500100004100000000001004430000000400a004430000000001000414000006cc0010009c000006cc01008041000000c00110021000000751011001c700008002020000391b2c1b270000040f00000001002001900000192a0000613d000000000101043b000000000001004b00000002010000290000192b0000613d0000000003010433000000000003004b000000010b000029000018ef0000613d000007200030009c000018f60000213d0000001f0030008c000018f60000a13d00000000010b0433000000000001004b0000000002000039000000010200c039000000000021004b000018f60000c13d000000000001004b0000190e0000613d000000000001042d0000074101000041000000000010043f0000004101000039000000040010043f000007180100004100001b2e00010430000000000100001900001b2e00010430000000000003004b000019220000c13d0000000001090019000000400400043d000200000004001d0000077602000041000000000024043500000004034000390000002002000039000000000023043500000024024000391b2c143a0000040f00000002020000290000000001210049000006cc0010009c000006cc01008041000006cc0020009c000006cc0200804100000060011002100000004002200210000000000121019f00001b2e00010430000000400100043d00000064021000390000077403000041000000000032043500000044021000390000077503000041000000000032043500000024021000390000002a03000039000000000032043500000776020000410000000000210435000000040210003900000020030000390000000000320435000006cc0010009c000006cc01008041000000400110021000000777011001c700001b2e00010430000006cc00b0009c000006cc0b0080410000004002b00210000006cc0030009c000006cc030080410000006001300210000000000121019f00001b2e00010430000000000001042f000000400100043d00000044021000390000077803000041000000000032043500000024021000390000001d03000039000000000032043500000776020000410000000000210435000000040210003900000020030000390000000000320435000006cc0010009c000006cc01008041000000400110021000000724011001c700001b2e00010430000000000010043f0000000601000039000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f00000001002001900000194e0000613d000000000101043b000000000101041a000000000001004b0000000001000039000000010100c039000000000001042d000000000100001900001b2e000104300006000000000002000300000002001d000000000020043f000600000001001d0000000101100039000400000001001d000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000019c80000613d0000000603000029000000000101043b000000000101041a000000000001004b000019c60000613d000000000203041a000000000002004b000019ca0000613d000000000021004b000500000001001d000019a40000613d000200000002001d000000000030043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006db011001c700008010020000391b2c1b270000040f0000000100200190000019c80000613d00000005020000290001000100200092000000000101043b0000000604000029000000000204041a000000010020006c000019d00000a13d0000000202000029000000010220008a0000000001120019000000000101041a000200000001001d000000000040043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006db011001c700008010020000391b2c1b270000040f0000000100200190000019c80000613d000000000101043b00000001011000290000000202000029000000000021041b000000000020043f0000000401000029000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000019c80000613d000000000101043b0000000502000029000000000021041b0000000603000029000000000103041a000500000001001d000000000001004b000019d60000613d000000000030043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006db011001c700008010020000391b2c1b270000040f0000000100200190000019c80000613d0000000502000029000000010220008a000000000101043b0000000001210019000000000001041b0000000601000029000000000021041b0000000301000029000000000010043f0000000401000029000000200010043f0000000001000414000006cc0010009c000006cc01008041000000c001100210000006d9011001c700008010020000391b2c1b270000040f0000000100200190000019c80000613d000000000101043b000000000001041b0000000101000039000000000001042d0000000001000019000000000001042d000000000100001900001b2e000104300000074101000041000000000010043f0000001101000039000000040010043f000007180100004100001b2e000104300000074101000041000000000010043f0000003201000039000000040010043f000007180100004100001b2e000104300000074101000041000000000010043f0000003101000039000000040010043f000007180100004100001b2e000104300003000000000002000100000002001d000300000001001d000000000101041a000200000001001d000007280100004100000000001004430000000001000414000006cc0010009c000006cc01008041000000c00110021000000729011001c70000800b020000391b2c1b270000040f000000010020019000001a3e0000613d00000002080000290000008002800270000006cc03200197000000000201043b000000000532004b000000030700002900001a380000413d0000000101700039000019f70000c13d000000000207041a00001a090000013d000000000301041a000000800630027000000000045600a900000000055400d9000000000065004b00001a380000c13d0000072205800197000000000054001a00001a380000413d00000722033001970000000004540019000000000043004b0000000003048019000006d30480019700000080022002100000077902200197000000000242019f000000000232019f00000001060000290000002003600039000000000403043300000722044001970000072205200197000000000054004b00000000050440190000077a02200197000000000225019f0000000005060433000000000005004b00000000050000190000072a0500c041000000000252019f000000000027041b000000400260003900000000050204330000008005500210000000000445019f000000000041041b0000000001000039000000010100c039000000400400043d00000000011404360000000003030433000007220330019700000000003104350000000001020433000007220110019700000040024000390000000000120435000006cc0040009c000006cc0400804100000040014002100000000002000414000006cc0020009c000006cc02008041000000c002200210000000000112019f0000077b011001c70000800d0200003900000001030000390000077c040000411b2c1b220000040f000000010020019000001a3f0000613d000000000001042d0000074101000041000000000010043f0000001101000039000000040010043f000007180100004100001b2e00010430000000000001042f000000000100001900001b2e00010430000006cf04400197000000400510003900000000004504350000002004100039000000000034043500000000002104350000006001100039000000000001042d0006000000000002000000000401041a000007340040019800001a9d0000613d000000000002004b00001a9d0000613d000600000004001d000500000002001d000200000003001d000300000001001d0000000101100039000100000001001d000000000101041a000400000001001d000007280100004100000000001004430000000001000414000006cc0010009c000006cc01008041000000c00110021000000729011001c70000800b020000391b2c1b270000040f000000010020019000001a9e0000613d00000006030000290000008002300270000006cc02200197000000000101043b000000000421004b00001ab90000413d00000722033001970000000405000029000007220250019700001a6f0000c13d0000000504000029000000030500002900001a830000013d000000000023004b00001ac10000213d000000800650027000000000056400a900000000044500d9000000000064004b00001ab90000c13d000000000035001a00001ab90000413d0000000003350019000000800110021000000779011001970000000305000029000000000405041a0000077d04400197000000000114019f000000000015041b000000000032004b00000000030240190000000504000029000000000042004b00001a9f0000413d000000000143004b00001ab00000413d0000072201100197000000000205041a0000077f02200197000000000112019f000000000015041b000000400100043d0000000000410435000006cc0010009c000006cc0100804100000040011002100000000002000414000006cc0020009c000006cc02008041000000c002200210000000000112019f000006db011001c70000800d02000039000000010300003900000780040000411b2c1b220000040f000000010020019000001abf0000613d000000000001042d000000000001042f000000400100043d000000000401001900000004011000390000000203000029000006cf0030019800001ac90000c13d000007840300004100000000003404350000000000210435000000240140003900000005020000290000000000210435000006cc0040009c000006cc040080410000004001400210000006d7011001c700001b2e000104300000000101000029000000000101041a000000800110027200001ab90000613d00000005043000690000000002140019000000010220008a000000000042004b00001ace0000813d0000074101000041000000000010043f0000001101000039000000040010043f000007180100004100001b2e00010430000000000100001900001b2e00010430000000400100043d0000077e020000410000000000210435000006cc0010009c000006cc010080410000004001100210000006d5011001c700001b2e000104300000078303000041000600000004001d0000000000340435000000050300002900001ae20000013d00000000021200d9000000400100043d000000000501001900000004011000390000000204000029000006cf0040019800001adf0000c13d00000782040000410000000000450435000000000021043500000024015000390000000000310435000006cc0050009c000006cc050080410000004001500210000006d7011001c700001b2e000104300000078104000041000600000005001d000000000045043500000002040000291b2c1a410000040f00000006020000290000000001210049000006cc0010009c000006cc010080410000006001100210000006cc0020009c000006cc020080410000004002200210000000000121019f00001b2e00010430000000000001042f000006cc0010009c000006cc010080410000004001100210000006cc0020009c000006cc020080410000006002200210000000000112019f0000000002000414000006cc0020009c000006cc02008041000000c002200210000000000112019f00000711011001c700008010020000391b2c1b270000040f000000010020019000001b020000613d000000000101043b000000000001042d000000000100001900001b2e0001043000000000050100190000000000200443000000050030008c00001b120000413d000000040100003900000000020000190000000506200210000000000664001900000005066002700000000006060031000000000161043a0000000102200039000000000031004b00001b0a0000413d000006cc0030009c000006cc0300804100000060013002100000000002000414000006cc0020009c000006cc02008041000000c002200210000000000112019f00000785011001c700000000020500191b2c1b270000040f000000010020019000001b210000613d000000000101043b000000000001042d000000000001042f00001b25002104210000000102000039000000000001042d0000000002000019000000000001042d00001b2a002104230000000102000039000000000001042d0000000002000019000000000001042d00001b2c0000043200001b2d0001042e00001b2e00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffff0000000000000000000000000000000000000000313ce567000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000655a7c0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffdf0200000000000000000000000000000000000040000000000000000000000000bfa87805ed57dc1f0d489ce33be4c4577d74ccde357eeeee058a32c55c44a53202000000000000000000000000000000000000200000000000000000000000002640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d800000002000000000000000000000000000001800000010000000000000000009b15e16f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008da5cb5a00000000000000000000000000000000000000000000000000000000c0d7865400000000000000000000000000000000000000000000000000000000dc0bd97000000000000000000000000000000000000000000000000000000000e8a1da1600000000000000000000000000000000000000000000000000000000e8a1da1700000000000000000000000000000000000000000000000000000000eb521a4c00000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000dc0bd97100000000000000000000000000000000000000000000000000000000e0351e1300000000000000000000000000000000000000000000000000000000c75eea9b00000000000000000000000000000000000000000000000000000000c75eea9c00000000000000000000000000000000000000000000000000000000cf7401f300000000000000000000000000000000000000000000000000000000c0d7865500000000000000000000000000000000000000000000000000000000c4bffe2b00000000000000000000000000000000000000000000000000000000acfecf9000000000000000000000000000000000000000000000000000000000b0f479a000000000000000000000000000000000000000000000000000000000b0f479a100000000000000000000000000000000000000000000000000000000b794658000000000000000000000000000000000000000000000000000000000bb98546b00000000000000000000000000000000000000000000000000000000acfecf9100000000000000000000000000000000000000000000000000000000af58d59f00000000000000000000000000000000000000000000000000000000a42a7b8a00000000000000000000000000000000000000000000000000000000a42a7b8b00000000000000000000000000000000000000000000000000000000a7cd63b7000000000000000000000000000000000000000000000000000000008da5cb5b000000000000000000000000000000000000000000000000000000009a4575b9000000000000000000000000000000000000000000000000000000004c5ef0ec000000000000000000000000000000000000000000000000000000006cfd15520000000000000000000000000000000000000000000000000000000079ba50960000000000000000000000000000000000000000000000000000000079ba5097000000000000000000000000000000000000000000000000000000007d54534e000000000000000000000000000000000000000000000000000000008926f54f000000000000000000000000000000000000000000000000000000006cfd1553000000000000000000000000000000000000000000000000000000006d3d1a580000000000000000000000000000000000000000000000000000000062ddd3c30000000000000000000000000000000000000000000000000000000062ddd3c40000000000000000000000000000000000000000000000000000000066320087000000000000000000000000000000000000000000000000000000004c5ef0ed0000000000000000000000000000000000000000000000000000000054c8a4f300000000000000000000000000000000000000000000000000000000240028e70000000000000000000000000000000000000000000000000000000039077536000000000000000000000000000000000000000000000000000000003907753700000000000000000000000000000000000000000000000000000000432a6ba300000000000000000000000000000000000000000000000000000000240028e80000000000000000000000000000000000000000000000000000000024f65ee700000000000000000000000000000000000000000000000000000000181f5a7600000000000000000000000000000000000000000000000000000000181f5a770000000000000000000000000000000000000000000000000000000021df0da70000000000000000000000000000000000000000000000000000000001ffc9a7000000000000000000000000000000000000000000000000000000000a861f2a0200000000000000000000000000000000000000000000000000000000000000ed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278dad89dca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000800000000000000000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e02000002000000000000000000000000000000440000000000000000000000008e4a23d600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000023b872dd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5fc17cea59c2955cb181b03393209566960365771dbba9dc3d510180e7cb312088e93f8fa400000000000000000000000000000000000000000000000000000000fc949c7b4a13586e39d89eead2f38644f9fb3efb5a0490b14f8fc0ceab44c2515204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599161e670e4b000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffff9f00000000000000000000000000000000ffffffffffffffffffffffffffffffff8020d124000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000d68af9cc000000000000000000000000000000000000000000000000000000001d5ad3c500000000000000000000000000000000000000000000000000000000fc949c7b4a13586e39d89eead2f38644f9fb3efb5a0490b14f8fc0ceab44c250796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d9553913202000002000000000000000000000000000000040000000000000000000000000000000000000000000000010000000000000000000000000000000000000000ffffffffffffffffffffff000000000000000000000000000000000000000000393b8ad2000000000000000000000000000000000000000000000000000000007d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c28579befe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000800000000000000000000000000000000000000000000000000000002400000140000000000000000002000000000000000000000000000000000000e00000000000000000000000000350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b0000000000000000000000ff0000000000000000000000000000000000000000036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0000000000000000000000000000000000000000000000000ffffffffffffffc1ffffffffffffffffffffffffffffffffffffffffffffffff000000000000008000000000000000000000000000000000000000000000003fffffffffffffffe0020000000000000000000000000000000000004000000080000000000000000002dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f168400000000000000000000000000000000000000000000000000000000ffffffbffdffffffffffffffffffffffffffffffffffffc000000000000000000000000052d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d7674f23c7c00000000000000000000000000000000000000000000000000000000405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace000000000000000000000000000000000000000000000000ffffffffffffff7f4e487b7100000000000000000000000000000000000000000000000000000000961c9a4f000000000000000000000000000000000000000000000000000000002cbc26bb000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff0000000000000000000000000000000053ad11d800000000000000000000000000000000000000000000000000000000d0d2597600000000000000000000000000000000000000000000000000000000a8d87a3b00000000000000000000000000000000000000000000000000000000728fe07b000000000000000000000000000000000000000000000000000000009f1ec8c880f76798e7b793325d625e9b60e4082a553c98f42b6cda368dd60008a9902c7e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000020000000000000000000000000000000000002000000080000000000000000044676b5284b809a22248eba0da87391d79098be38bb03154be88a58bf4d0917402b543c6000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e01806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b8302000002000000000000000000000000000000240000000000000000000000000a861f2a000000000000000000000000000000000000000000000000000000006fa7abcf1345d1d478e5ea0da6b5f26a90eadb0546ef15ed3833944fbfd1db622b5c74de00000000000000000000000000000000000000000000000000000000bfa87805ed57dc1f0d489ce33be4c4577d74ccde357eeeee058a32c55c44a533800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf756635f4a7b30000000000000000000000000000000000000000000000000000000083826b2b00000000000000000000000000000000000000000000000000000000a9cb113d000000000000000000000000000000000000000000000000000000002d87480f50083e2b2759522a8fdda59802650a8055e609a7772cf70c07748f52953576f70000000000000000000000000000000000000000000000000000000024eb47e5000000000000000000000000000000000000000000000000000000004c6f636b52656c65617365546f6b656e506f6f6c20312e352e310000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000002400000080000000000000000070a0823100000000000000000000000000000000000000000000000000000000c2c3f06e49b9f15e7b4af9055e183b0d73362e033ad82a07dec9bf9840171719bb55fd270000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffaff2afbeffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1d4056600000000000000000000000000000000000000000000000000000000aff2afbf0000000000000000000000000000000000000000000000000000000001ffc9a7000000000000000000000000000000000000000000000000000000000e64dd2900000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000ffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffffc0000000000000000000000000000000000000000000000000ffffffffffffff600000000000000000000000000000000000000000000000010000000000000000a9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff80000000000000000000000000000000000000000000000000ffffffffffffff3f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646f742073756363656564000000000000000000000000000000000000000000005361666545524332303a204552433230206f7065726174696f6e20646964206e08c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000000000000000000000416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000000000000000000000000000ffffffff00000000000000000000000000000000ffffffffffffffffffffff00ffffffff0000000000000000000000000000000002000000000000000000000000000000000000600000000000000000000000009ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19ffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff9725942a00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000000000001871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690ad0c8d23a0000000000000000000000000000000000000000000000000000000015279c08000000000000000000000000000000000000000000000000000000001a76572a00000000000000000000000000000000000000000000000000000000f94ebcd10000000000000000000000000000000000000000000000000000000002000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000") diff --git a/core/gethwrappers/ccip/generated_zks/maybe_revert_message_receiver/maybe_revert_message_receiver.go b/core/gethwrappers/ccip/generated_zks/maybe_revert_message_receiver/maybe_revert_message_receiver.go new file mode 100644 index 00000000000..7b86e13e315 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/maybe_revert_message_receiver/maybe_revert_message_receiver.go @@ -0,0 +1,568 @@ +package maybe_revert_message_receiver + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type ClientAny2EVMMessage struct { + MessageId [32]byte + SourceChainSelector uint64 + Sender []byte + Data []byte + DestTokenAmounts []ClientEVMTokenAmount +} + +type ClientEVMTokenAmount struct { + Token common.Address + Amount *big.Int +} + +var MaybeRevertMessageReceiverMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"toRevert\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"CustomError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReceiveRevert\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"MessageReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ValueReceived\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_toRevert\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"setErr\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"toRevert\",\"type\":\"bool\"}],\"name\":\"setRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x608060405234801561001057600080fd5b506040516107e73803806107e783398101604081905261002f9161005d565b600080546001600160a81b0319163360ff60a01b191617600160a01b92151592909202919091179055610086565b60006020828403121561006f57600080fd5b8151801515811461007f57600080fd5b9392505050565b610752806100956000396000f3fe60806040526004361061005e5760003560e01c806377f5b0e61161004357806377f5b0e61461015857806385572ffb1461017a5780638fb5f1711461019a57600080fd5b806301ffc9a7146100f25780635100fc211461012657600080fd5b366100ed5760005474010000000000000000000000000000000000000000900460ff16156100b8576040517f3085b8db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040513481527fe12e3b7047ff60a2dd763cf536a43597e5ce7fe7aa7476345bd4cd079912bcef9060200160405180910390a1005b600080fd5b3480156100fe57600080fd5b5061011261010d366004610335565b6101ff565b604051901515815260200160405180910390f35b34801561013257600080fd5b506000546101129074010000000000000000000000000000000000000000900460ff1681565b34801561016457600080fd5b506101786101733660046103ad565b610298565b005b34801561018657600080fd5b5061017861019536600461047c565b6102a8565b3480156101a657600080fd5b506101786101b53660046104b7565b6000805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f85572ffb00000000000000000000000000000000000000000000000000000000148061029257507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60016102a4828261057d565b5050565b60005474010000000000000000000000000000000000000000900460ff16156103095760016040517f5a4ff6710000000000000000000000000000000000000000000000000000000081526004016103009190610697565b60405180910390fd5b6040517fd82ce31e3523f6eeb2d24317b2b4133001e8472729657f663b68624c45f8f3e890600090a150565b60006020828403121561034757600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461037757600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156103bf57600080fd5b813567ffffffffffffffff808211156103d757600080fd5b818401915084601f8301126103eb57600080fd5b8135818111156103fd576103fd61037e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156104435761044361037e565b8160405282815287602084870101111561045c57600080fd5b826020860160208301376000928101602001929092525095945050505050565b60006020828403121561048e57600080fd5b813567ffffffffffffffff8111156104a557600080fd5b820160a0818503121561037757600080fd5b6000602082840312156104c957600080fd5b8135801515811461037757600080fd5b600181811c908216806104ed57607f821691505b602082108103610526577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f821115610578576000816000526020600020601f850160051c810160208610156105555750805b601f850160051c820191505b8181101561057457828155600101610561565b5050505b505050565b815167ffffffffffffffff8111156105975761059761037e565b6105ab816105a584546104d9565b8461052c565b602080601f8311600181146105fe57600084156105c85750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610574565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561064b5788860151825594840194600190910190840161062c565b508582101561068757878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808352600084546106ab816104d9565b80602087015260406001808416600081146106cd576001811461070757610737565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00851660408a0152604084151560051b8a01019550610737565b89600052602060002060005b8581101561072e5781548b8201860152908301908801610713565b8a016040019650505b50939897505050505050505056fea164736f6c6343000818000a", +} + +var MaybeRevertMessageReceiverABI = MaybeRevertMessageReceiverMetaData.ABI + +var MaybeRevertMessageReceiverBin = MaybeRevertMessageReceiverMetaData.Bin + +func DeployMaybeRevertMessageReceiver(auth *bind.TransactOpts, backend bind.ContractBackend, toRevert bool) (common.Address, *generated_zks.Transaction, *MaybeRevertMessageReceiver, error) { + parsed, err := MaybeRevertMessageReceiverMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(MaybeRevertMessageReceiverZKBin), backend, toRevert) + contractReturn := &MaybeRevertMessageReceiver{address: address, abi: *parsed, MaybeRevertMessageReceiverCaller: MaybeRevertMessageReceiverCaller{contract: contractBind}, MaybeRevertMessageReceiverTransactor: MaybeRevertMessageReceiverTransactor{contract: contractBind}, MaybeRevertMessageReceiverFilterer: MaybeRevertMessageReceiverFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(MaybeRevertMessageReceiverBin), backend, toRevert) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &MaybeRevertMessageReceiver{address: address, abi: *parsed, MaybeRevertMessageReceiverCaller: MaybeRevertMessageReceiverCaller{contract: contract}, MaybeRevertMessageReceiverTransactor: MaybeRevertMessageReceiverTransactor{contract: contract}, MaybeRevertMessageReceiverFilterer: MaybeRevertMessageReceiverFilterer{contract: contract}}, nil +} + +type MaybeRevertMessageReceiver struct { + address common.Address + abi abi.ABI + MaybeRevertMessageReceiverCaller + MaybeRevertMessageReceiverTransactor + MaybeRevertMessageReceiverFilterer +} + +type MaybeRevertMessageReceiverCaller struct { + contract *bind.BoundContract +} + +type MaybeRevertMessageReceiverTransactor struct { + contract *bind.BoundContract +} + +type MaybeRevertMessageReceiverFilterer struct { + contract *bind.BoundContract +} + +type MaybeRevertMessageReceiverSession struct { + Contract *MaybeRevertMessageReceiver + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type MaybeRevertMessageReceiverCallerSession struct { + Contract *MaybeRevertMessageReceiverCaller + CallOpts bind.CallOpts +} + +type MaybeRevertMessageReceiverTransactorSession struct { + Contract *MaybeRevertMessageReceiverTransactor + TransactOpts bind.TransactOpts +} + +type MaybeRevertMessageReceiverRaw struct { + Contract *MaybeRevertMessageReceiver +} + +type MaybeRevertMessageReceiverCallerRaw struct { + Contract *MaybeRevertMessageReceiverCaller +} + +type MaybeRevertMessageReceiverTransactorRaw struct { + Contract *MaybeRevertMessageReceiverTransactor +} + +func NewMaybeRevertMessageReceiver(address common.Address, backend bind.ContractBackend) (*MaybeRevertMessageReceiver, error) { + abi, err := abi.JSON(strings.NewReader(MaybeRevertMessageReceiverABI)) + if err != nil { + return nil, err + } + contract, err := bindMaybeRevertMessageReceiver(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &MaybeRevertMessageReceiver{address: address, abi: abi, MaybeRevertMessageReceiverCaller: MaybeRevertMessageReceiverCaller{contract: contract}, MaybeRevertMessageReceiverTransactor: MaybeRevertMessageReceiverTransactor{contract: contract}, MaybeRevertMessageReceiverFilterer: MaybeRevertMessageReceiverFilterer{contract: contract}}, nil +} + +func NewMaybeRevertMessageReceiverCaller(address common.Address, caller bind.ContractCaller) (*MaybeRevertMessageReceiverCaller, error) { + contract, err := bindMaybeRevertMessageReceiver(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &MaybeRevertMessageReceiverCaller{contract: contract}, nil +} + +func NewMaybeRevertMessageReceiverTransactor(address common.Address, transactor bind.ContractTransactor) (*MaybeRevertMessageReceiverTransactor, error) { + contract, err := bindMaybeRevertMessageReceiver(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &MaybeRevertMessageReceiverTransactor{contract: contract}, nil +} + +func NewMaybeRevertMessageReceiverFilterer(address common.Address, filterer bind.ContractFilterer) (*MaybeRevertMessageReceiverFilterer, error) { + contract, err := bindMaybeRevertMessageReceiver(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &MaybeRevertMessageReceiverFilterer{contract: contract}, nil +} + +func bindMaybeRevertMessageReceiver(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := MaybeRevertMessageReceiverMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MaybeRevertMessageReceiver.Contract.MaybeRevertMessageReceiverCaller.contract.Call(opts, result, method, params...) +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MaybeRevertMessageReceiver.Contract.MaybeRevertMessageReceiverTransactor.contract.Transfer(opts) +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MaybeRevertMessageReceiver.Contract.MaybeRevertMessageReceiverTransactor.contract.Transact(opts, method, params...) +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MaybeRevertMessageReceiver.Contract.contract.Call(opts, result, method, params...) +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MaybeRevertMessageReceiver.Contract.contract.Transfer(opts) +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MaybeRevertMessageReceiver.Contract.contract.Transact(opts, method, params...) +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverCaller) SToRevert(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _MaybeRevertMessageReceiver.contract.Call(opts, &out, "s_toRevert") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverSession) SToRevert() (bool, error) { + return _MaybeRevertMessageReceiver.Contract.SToRevert(&_MaybeRevertMessageReceiver.CallOpts) +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverCallerSession) SToRevert() (bool, error) { + return _MaybeRevertMessageReceiver.Contract.SToRevert(&_MaybeRevertMessageReceiver.CallOpts) +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _MaybeRevertMessageReceiver.contract.Call(opts, &out, "supportsInterface", interfaceId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _MaybeRevertMessageReceiver.Contract.SupportsInterface(&_MaybeRevertMessageReceiver.CallOpts, interfaceId) +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _MaybeRevertMessageReceiver.Contract.SupportsInterface(&_MaybeRevertMessageReceiver.CallOpts, interfaceId) +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverTransactor) CcipReceive(opts *bind.TransactOpts, arg0 ClientAny2EVMMessage) (*types.Transaction, error) { + return _MaybeRevertMessageReceiver.contract.Transact(opts, "ccipReceive", arg0) +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverSession) CcipReceive(arg0 ClientAny2EVMMessage) (*types.Transaction, error) { + return _MaybeRevertMessageReceiver.Contract.CcipReceive(&_MaybeRevertMessageReceiver.TransactOpts, arg0) +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverTransactorSession) CcipReceive(arg0 ClientAny2EVMMessage) (*types.Transaction, error) { + return _MaybeRevertMessageReceiver.Contract.CcipReceive(&_MaybeRevertMessageReceiver.TransactOpts, arg0) +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverTransactor) SetErr(opts *bind.TransactOpts, err []byte) (*types.Transaction, error) { + return _MaybeRevertMessageReceiver.contract.Transact(opts, "setErr", err) +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverSession) SetErr(err []byte) (*types.Transaction, error) { + return _MaybeRevertMessageReceiver.Contract.SetErr(&_MaybeRevertMessageReceiver.TransactOpts, err) +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverTransactorSession) SetErr(err []byte) (*types.Transaction, error) { + return _MaybeRevertMessageReceiver.Contract.SetErr(&_MaybeRevertMessageReceiver.TransactOpts, err) +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverTransactor) SetRevert(opts *bind.TransactOpts, toRevert bool) (*types.Transaction, error) { + return _MaybeRevertMessageReceiver.contract.Transact(opts, "setRevert", toRevert) +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverSession) SetRevert(toRevert bool) (*types.Transaction, error) { + return _MaybeRevertMessageReceiver.Contract.SetRevert(&_MaybeRevertMessageReceiver.TransactOpts, toRevert) +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverTransactorSession) SetRevert(toRevert bool) (*types.Transaction, error) { + return _MaybeRevertMessageReceiver.Contract.SetRevert(&_MaybeRevertMessageReceiver.TransactOpts, toRevert) +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MaybeRevertMessageReceiver.contract.RawTransact(opts, nil) +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverSession) Receive() (*types.Transaction, error) { + return _MaybeRevertMessageReceiver.Contract.Receive(&_MaybeRevertMessageReceiver.TransactOpts) +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverTransactorSession) Receive() (*types.Transaction, error) { + return _MaybeRevertMessageReceiver.Contract.Receive(&_MaybeRevertMessageReceiver.TransactOpts) +} + +type MaybeRevertMessageReceiverMessageReceivedIterator struct { + Event *MaybeRevertMessageReceiverMessageReceived + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MaybeRevertMessageReceiverMessageReceivedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MaybeRevertMessageReceiverMessageReceived) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MaybeRevertMessageReceiverMessageReceived) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MaybeRevertMessageReceiverMessageReceivedIterator) Error() error { + return it.fail +} + +func (it *MaybeRevertMessageReceiverMessageReceivedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MaybeRevertMessageReceiverMessageReceived struct { + Raw types.Log +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverFilterer) FilterMessageReceived(opts *bind.FilterOpts) (*MaybeRevertMessageReceiverMessageReceivedIterator, error) { + + logs, sub, err := _MaybeRevertMessageReceiver.contract.FilterLogs(opts, "MessageReceived") + if err != nil { + return nil, err + } + return &MaybeRevertMessageReceiverMessageReceivedIterator{contract: _MaybeRevertMessageReceiver.contract, event: "MessageReceived", logs: logs, sub: sub}, nil +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverFilterer) WatchMessageReceived(opts *bind.WatchOpts, sink chan<- *MaybeRevertMessageReceiverMessageReceived) (event.Subscription, error) { + + logs, sub, err := _MaybeRevertMessageReceiver.contract.WatchLogs(opts, "MessageReceived") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MaybeRevertMessageReceiverMessageReceived) + if err := _MaybeRevertMessageReceiver.contract.UnpackLog(event, "MessageReceived", 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 +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverFilterer) ParseMessageReceived(log types.Log) (*MaybeRevertMessageReceiverMessageReceived, error) { + event := new(MaybeRevertMessageReceiverMessageReceived) + if err := _MaybeRevertMessageReceiver.contract.UnpackLog(event, "MessageReceived", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MaybeRevertMessageReceiverValueReceivedIterator struct { + Event *MaybeRevertMessageReceiverValueReceived + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MaybeRevertMessageReceiverValueReceivedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MaybeRevertMessageReceiverValueReceived) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MaybeRevertMessageReceiverValueReceived) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MaybeRevertMessageReceiverValueReceivedIterator) Error() error { + return it.fail +} + +func (it *MaybeRevertMessageReceiverValueReceivedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MaybeRevertMessageReceiverValueReceived struct { + Amount *big.Int + Raw types.Log +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverFilterer) FilterValueReceived(opts *bind.FilterOpts) (*MaybeRevertMessageReceiverValueReceivedIterator, error) { + + logs, sub, err := _MaybeRevertMessageReceiver.contract.FilterLogs(opts, "ValueReceived") + if err != nil { + return nil, err + } + return &MaybeRevertMessageReceiverValueReceivedIterator{contract: _MaybeRevertMessageReceiver.contract, event: "ValueReceived", logs: logs, sub: sub}, nil +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverFilterer) WatchValueReceived(opts *bind.WatchOpts, sink chan<- *MaybeRevertMessageReceiverValueReceived) (event.Subscription, error) { + + logs, sub, err := _MaybeRevertMessageReceiver.contract.WatchLogs(opts, "ValueReceived") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MaybeRevertMessageReceiverValueReceived) + if err := _MaybeRevertMessageReceiver.contract.UnpackLog(event, "ValueReceived", 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 +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiverFilterer) ParseValueReceived(log types.Log) (*MaybeRevertMessageReceiverValueReceived, error) { + event := new(MaybeRevertMessageReceiverValueReceived) + if err := _MaybeRevertMessageReceiver.contract.UnpackLog(event, "ValueReceived", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiver) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _MaybeRevertMessageReceiver.abi.Events["MessageReceived"].ID: + return _MaybeRevertMessageReceiver.ParseMessageReceived(log) + case _MaybeRevertMessageReceiver.abi.Events["ValueReceived"].ID: + return _MaybeRevertMessageReceiver.ParseValueReceived(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (MaybeRevertMessageReceiverMessageReceived) Topic() common.Hash { + return common.HexToHash("0xd82ce31e3523f6eeb2d24317b2b4133001e8472729657f663b68624c45f8f3e8") +} + +func (MaybeRevertMessageReceiverValueReceived) Topic() common.Hash { + return common.HexToHash("0xe12e3b7047ff60a2dd763cf536a43597e5ce7fe7aa7476345bd4cd079912bcef") +} + +func (_MaybeRevertMessageReceiver *MaybeRevertMessageReceiver) Address() common.Address { + return _MaybeRevertMessageReceiver.address +} + +type MaybeRevertMessageReceiverInterface interface { + SToRevert(opts *bind.CallOpts) (bool, error) + + SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) + + CcipReceive(opts *bind.TransactOpts, arg0 ClientAny2EVMMessage) (*types.Transaction, error) + + SetErr(opts *bind.TransactOpts, err []byte) (*types.Transaction, error) + + SetRevert(opts *bind.TransactOpts, toRevert bool) (*types.Transaction, error) + + Receive(opts *bind.TransactOpts) (*types.Transaction, error) + + FilterMessageReceived(opts *bind.FilterOpts) (*MaybeRevertMessageReceiverMessageReceivedIterator, error) + + WatchMessageReceived(opts *bind.WatchOpts, sink chan<- *MaybeRevertMessageReceiverMessageReceived) (event.Subscription, error) + + ParseMessageReceived(log types.Log) (*MaybeRevertMessageReceiverMessageReceived, error) + + FilterValueReceived(opts *bind.FilterOpts) (*MaybeRevertMessageReceiverValueReceivedIterator, error) + + WatchValueReceived(opts *bind.WatchOpts, sink chan<- *MaybeRevertMessageReceiverValueReceived) (event.Subscription, error) + + ParseValueReceived(log types.Log) (*MaybeRevertMessageReceiverValueReceived, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var MaybeRevertMessageReceiverZKBin string = ("0x00000060031002700000005f033001970000000100200190000000270000c13d0000008002000039000000400020043f000000040030008c0000005c0000413d000000000401043b000000e0044002700000006b0040009c000000700000a13d0000006c0040009c000000820000613d0000006d0040009c0000009f0000613d0000006e0040009c000000fb0000c13d000000240030008c000000fb0000413d0000000002000416000000000002004b000000fb0000c13d0000000401100370000000000101043b000000000001004b0000000002000039000000010200c039000000000021004b000000fb0000c13d000000000001004b0000000001000019000000620100c041000000000200041a0000006402200197000000000112019f000000000010041b0000000001000019000001770001042e0000000002000416000000000002004b000000fb0000c13d0000001f0230003900000060022001970000008002200039000000400020043f0000001f0430018f00000061053001980000008002500039000000380000613d0000008006000039000000000701034f000000007807043c0000000006860436000000000026004b000000340000c13d000000000004004b000000450000613d000000000151034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000200030008c000000fb0000413d000000800100043d000000000001004b0000000002000039000000010200c039000000000021004b000000fb0000c13d000000000001004b0000000001000019000000620100c041000000000200041a0000006302200197000000000112019f00000000020004110000006402200197000000000121019f000000000010041b0000002001000039000001000010044300000120000004430000006501000041000001770001042e000000000003004b000000fb0000c13d000000000100041a00000066001001980000007e0000c13d0000000001000416000000800010043f00000000010004140000005f0010009c0000005f01008041000000c00110021000000069011001c70000800d0200003900000001030000390000006a04000041017601710000040f0000000100200190000000fb0000613d0000000001000019000001770001042e0000006f0040009c000000bc0000613d000000700040009c000000fb0000c13d0000000001000416000000000001004b000000fb0000c13d000000000100041a00000066001001980000000001000039000000010100c039000000800010043f0000007e01000041000001770001042e0000006701000041000000800010043f00000068010000410000017800010430000000240030008c000000fb0000413d0000000002000416000000000002004b000000fb0000c13d0000000402100370000000000502043b000000710050009c000000fb0000213d0000002302500039000000000032004b000000fb0000813d0000000406500039000000000261034f000000000202043b000000780020009c000000990000813d0000001f0720003900000082077001970000003f077000390000008207700197000000790070009c000000f40000a13d0000007c01000041000000000010043f0000004101000039000000040010043f0000007d010000410000017800010430000000240030008c000000fb0000413d0000000004000416000000000004004b000000fb0000c13d0000000401100370000000000101043b000000710010009c000000fb0000213d0000000001130049000000720010009c000000fb0000213d000000a40010008c000000fb0000413d000000000100041a0000006600100198000000cd0000c13d00000000010004140000005f0010009c0000005f01008041000000c00110021000000076011001c70000800d0200003900000001030000390000007704000041017601710000040f00000001002001900000006e0000c13d000000fb0000013d000000240030008c000000fb0000413d0000000002000416000000000002004b000000fb0000c13d0000000401100370000000000101043b0000007f00100198000000fb0000c13d000000800010009c00000000020000390000000102006039000000810010009c00000001022061bf000000800020043f0000007e01000041000001770001042e0000007301000041000000800010043f0000002001000039000000840010043f0000000104000039000000000304041a000000010530019000000001013002700000007f0110618f0000001f0010008c00000000060000390000000106002039000000000663013f0000000100600190000000e20000613d0000007c01000041000000000010043f0000002201000039000000040010043f0000007d010000410000017800010430000000a40010043f000000000005004b000000fd0000613d000000000040043f000000000001004b000001020000613d000000740200004100000000040000190000000003040019000000000402041a000000c405300039000000000045043500000001022000390000002004300039000000000014004b000000ea0000413d000000a002300039000001020000013d0000008007700039000000400070043f000000800020043f00000000052500190000002405500039000000000035004b000001080000a13d000000000100001900000178000104300000008302300197000000c40020043f000000000001004b000000a00200003900000080020060390000003c0120008a0000005f0010009c0000005f01008041000000600110021000000075011001c700000178000104300000002003600039000000000331034f00000082052001980000001f0620018f000000a001500039000001140000613d000000a007000039000000000803034f000000008908043c0000000007970436000000000017004b000001100000c13d000000000006004b000001210000613d000000000353034f0000000305600210000000000601043300000000065601cf000000000656022f000000000303043b0000010005500089000000000353022f00000000035301cf000000000363019f0000000000310435000000a0012000390000000000010435000000800200043d000000710020009c000000990000213d0000000101000039000000000301041a000000010530019000000001033002700000007f0330618f0000001f0030008c00000000060000390000000106002039000000000065004b000000dc0000c13d000000200030008c000001420000413d0000000105000039000000000050043f0000001f0520003900000005055002700000007a0550009a000000200020008c00000074050040410000001f0330003900000005033002700000007a0330009a000000000035004b000001420000813d000000000005041b0000000105500039000000000035004b0000013e0000413d0000001f0020008c0000014a0000a13d000000000010043f0000008204200198000001540000c13d000000a0050000390000007403000041000001620000013d000000000002004b00000000030000190000014e0000613d000000a00300043d0000000304200210000000840440027f0000008404400167000000000343016f00000001022002100000016d0000013d00000074030000410000002006000039000000010540008a00000005055002700000007b0550009a000000000706001900000080066000390000000006060433000000000063041b00000020067000390000000103300039000000000053004b000001590000c13d000000a005700039000000000024004b0000016b0000813d0000000304200210000000f80440018f000000840440027f00000084044001670000000005050433000000000445016f000000000043041b00000001032002100000000002010019000000000223019f000000000021041b0000000001000019000001770001042e00000174002104210000000102000039000000000001042d0000000002000019000000000001042d0000017600000432000001770001042e000001780001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe00000000000000000000000010000000000000000000000000000000000000000ffffffffffffffffffffff000000000000000000000000000000000000000000ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff00000002000000000000000000000000000000400000010000000000000000000000000000000000000000ff00000000000000000000000000000000000000003085b8db0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000008000000000000000000200000000000000000000000000000000000020000000800000000000000000e12e3b7047ff60a2dd763cf536a43597e5ce7fe7aa7476345bd4cd079912bcef0000000000000000000000000000000000000000000000000000000077f5b0e50000000000000000000000000000000000000000000000000000000077f5b0e60000000000000000000000000000000000000000000000000000000085572ffb000000000000000000000000000000000000000000000000000000008fb5f1710000000000000000000000000000000000000000000000000000000001ffc9a7000000000000000000000000000000000000000000000000000000005100fc21000000000000000000000000000000000000000000000000ffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5a4ff67100000000000000000000000000000000000000000000000000000000b10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf600000000000000000000000000000000000000000000008000000000000000000200000000000000000000000000000000000000000000000000000000000000d82ce31e3523f6eeb2d24317b2b4133001e8472729657f663b68624c45f8f3e80000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f4ef1d2ad89edf8c4d91132028e8195cdf30bb4b5053d4f8cd260341d4805f30a4ef1d2ad89edf8c4d91132028e8195cdf30bb4b5053d4f8cd260341d4805f3094e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000002000000080000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffc9a70000000000000000000000000000000000000000000000000000000085572ffb00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff") diff --git a/core/gethwrappers/ccip/generated_zks/message_hasher/message_hasher.go b/core/gethwrappers/ccip/generated_zks/message_hasher/message_hasher.go new file mode 100644 index 00000000000..e26e94205d3 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/message_hasher/message_hasher.go @@ -0,0 +1,464 @@ +package message_hasher + +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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type ClientEVMExtraArgsV1 struct { + GasLimit *big.Int +} + +type ClientEVMExtraArgsV2 struct { + GasLimit *big.Int + AllowOutOfOrderExecution bool +} + +type InternalAny2EVMRampMessage struct { + Header InternalRampMessageHeader + Sender []byte + Data []byte + Receiver common.Address + GasLimit *big.Int + TokenAmounts []InternalAny2EVMTokenTransfer +} + +type InternalAny2EVMTokenTransfer struct { + SourcePoolAddress []byte + DestTokenAddress common.Address + DestGasAmount uint32 + ExtraData []byte + Amount *big.Int +} + +type InternalEVM2AnyTokenTransfer struct { + SourcePoolAddress common.Address + DestTokenAddress []byte + ExtraData []byte + Amount *big.Int + DestExecData []byte +} + +type InternalRampMessageHeader struct { + MessageId [32]byte + SourceChainSelector uint64 + DestChainSelector uint64 + SequenceNumber uint64 + Nonce uint64 +} + +var MessageHasherMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"}],\"name\":\"decodeEVMExtraArgsV1\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMExtraArgsV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"allowOutOfOrderExecution\",\"type\":\"bool\"}],\"name\":\"decodeEVMExtraArgsV2\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"allowOutOfOrderExecution\",\"type\":\"bool\"}],\"internalType\":\"structClient.EVMExtraArgsV2\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"name\":\"encodeAny2EVMTokenAmountsHashPreimage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourcePoolAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"destExecData\",\"type\":\"bytes\"}],\"internalType\":\"structInternal.EVM2AnyTokenTransfer[]\",\"name\":\"tokenAmount\",\"type\":\"tuple[]\"}],\"name\":\"encodeEVM2AnyTokenAmountsHashPreimage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMExtraArgsV1\",\"name\":\"extraArgs\",\"type\":\"tuple\"}],\"name\":\"encodeEVMExtraArgsV1\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"allowOutOfOrderExecution\",\"type\":\"bool\"}],\"internalType\":\"structClient.EVMExtraArgsV2\",\"name\":\"extraArgs\",\"type\":\"tuple\"}],\"name\":\"encodeEVMExtraArgsV2\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"leafDomainSeparator\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"metaDataHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"fixedSizeFieldsHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"senderHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"dataHash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"tokenAmountsHash\",\"type\":\"bytes32\"}],\"name\":\"encodeFinalHashPreimage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"encodeFixedSizeFieldsHashPreimage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"any2EVMMessageHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"onRampHash\",\"type\":\"bytes32\"}],\"name\":\"encodeMetadataHashPreimage\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"name\":\"hash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b50611053806100206000396000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c8063bf0619ad11610076578063c7ca9a181161005b578063c7ca9a1814610273578063e04767b814610286578063e733d2091461029957600080fd5b8063bf0619ad146101c9578063c63641bd1461021c57600080fd5b806394b6624b116100a757806394b6624b14610168578063ae5663d71461017b578063b17df7141461018e57600080fd5b80633ec7c377146100c35780638503839d14610147575b600080fd5b6101316100d136600461065b565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff949094168585015267ffffffffffffffff928316606086015260808501919091521660a0808401919091528151808403909101815260c0909201905290565b60405161013e9190610716565b60405180910390f35b61015a610155366004610a5b565b6102ac565b60405190815260200161013e565b610131610176366004610b65565b610343565b610131610189366004610cd5565b61036c565b6101ba61019c366004610d12565b60408051602080820183526000909152815190810190915290815290565b6040519051815260200161013e565b6101316101d7366004610d2b565b604080516020810197909752868101959095526060860193909352608085019190915260a084015260c0808401919091528151808403909101815260e0909201905290565b61025661022a366004610d7e565b604080518082019091526000808252602082015250604080518082019091529182521515602082015290565b60408051825181526020928301511515928101929092520161013e565b610131610281366004610daa565b61037f565b610131610294366004610dfe565b610390565b6101316102a7366004610e42565b6103e3565b600061033c837f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f8560000151602001518660000151604001518680519060200120604051602001610321949392919093845267ffffffffffffffff928316602085015291166040830152606082015260800190565b604051602081830303815290604052805190602001206103ee565b9392505050565b6060816040516020016103569190610e84565b6040516020818303038152906040529050919050565b6060816040516020016103569190610f71565b606061038a82610521565b92915050565b6060848484846040516020016103ca949392919093845267ffffffffffffffff928316602085015291166040830152606082015260800190565b6040516020818303038152906040529050949350505050565b606061038a826105e3565b815180516060808501519083015160808087015194015160405160009586958895610460959194909391929160200194855273ffffffffffffffffffffffffffffffffffffffff93909316602085015267ffffffffffffffff9182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a001516040516020016104a39190610f71565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e00160405160208183030381529060405280519060200120905092915050565b604051815160248201526020820151151560448201526060907f181dcf1000000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915292915050565b604051815160248201526060907f97a657c90000000000000000000000000000000000000000000000000000000090604401610560565b803573ffffffffffffffffffffffffffffffffffffffff8116811461063e57600080fd5b919050565b803567ffffffffffffffff8116811461063e57600080fd5b600080600080600060a0868803121561067357600080fd5b853594506106836020870161061a565b935061069160408701610643565b9250606086013591506106a660808701610643565b90509295509295909350565b6000815180845260005b818110156106d8576020818501810151868301820152016106bc565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061033c60208301846106b2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561077b5761077b610729565b60405290565b60405160c0810167ffffffffffffffff8111828210171561077b5761077b610729565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156107eb576107eb610729565b604052919050565b600060a0828403121561080557600080fd5b61080d610758565b90508135815261081f60208301610643565b602082015261083060408301610643565b604082015261084160608301610643565b606082015261085260808301610643565b608082015292915050565b600082601f83011261086e57600080fd5b813567ffffffffffffffff81111561088857610888610729565b6108b960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016107a4565b8181528460208386010111156108ce57600080fd5b816020850160208301376000918101602001919091529392505050565b600067ffffffffffffffff82111561090557610905610729565b5060051b60200190565b600082601f83011261092057600080fd5b81356020610935610930836108eb565b6107a4565b82815260059290921b8401810191818101908684111561095457600080fd5b8286015b84811015610a5057803567ffffffffffffffff808211156109795760008081fd5b818901915060a0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d030112156109b25760008081fd5b6109ba610758565b87840135838111156109cc5760008081fd5b6109da8d8a8388010161085d565b82525060406109ea81860161061a565b8983015260608086013563ffffffff81168114610a075760008081fd5b808385015250608091508186013585811115610a235760008081fd5b610a318f8c838a010161085d565b9184019190915250919093013590830152508352918301918301610958565b509695505050505050565b60008060408385031215610a6e57600080fd5b823567ffffffffffffffff80821115610a8657600080fd5b908401906101408287031215610a9b57600080fd5b610aa3610781565b610aad87846107f3565b815260a083013582811115610ac157600080fd5b610acd8882860161085d565b60208301525060c083013582811115610ae557600080fd5b610af18882860161085d565b604083015250610b0360e0840161061a565b6060820152610100830135608082015261012083013582811115610b2657600080fd5b610b328882860161090f565b60a08301525093506020850135915080821115610b4e57600080fd5b50610b5b8582860161085d565b9150509250929050565b60006020808385031215610b7857600080fd5b823567ffffffffffffffff80821115610b9057600080fd5b818501915085601f830112610ba457600080fd5b8135610bb2610930826108eb565b81815260059190911b83018401908481019088831115610bd157600080fd5b8585015b83811015610cc857803585811115610bec57600080fd5b860160a0818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0011215610c215760008081fd5b610c29610758565b610c3489830161061a565b815260408083013588811115610c4a5760008081fd5b610c588e8c8387010161085d565b8b8401525060608084013589811115610c715760008081fd5b610c7f8f8d8388010161085d565b83850152506080915081840135818401525060a083013588811115610ca45760008081fd5b610cb28e8c8387010161085d565b9183019190915250845250918601918601610bd5565b5098975050505050505050565b600060208284031215610ce757600080fd5b813567ffffffffffffffff811115610cfe57600080fd5b610d0a8482850161090f565b949350505050565b600060208284031215610d2457600080fd5b5035919050565b60008060008060008060c08789031215610d4457600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b8035801515811461063e57600080fd5b60008060408385031215610d9157600080fd5b82359150610da160208401610d6e565b90509250929050565b600060408284031215610dbc57600080fd5b6040516040810181811067ffffffffffffffff82111715610ddf57610ddf610729565b60405282358152610df260208401610d6e565b60208201529392505050565b60008060008060808587031215610e1457600080fd5b84359350610e2460208601610643565b9250610e3260408601610643565b9396929550929360600135925050565b600060208284031215610e5457600080fd5b6040516020810181811067ffffffffffffffff82111715610e7757610e77610729565b6040529135825250919050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015610f63577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403018552815160a073ffffffffffffffffffffffffffffffffffffffff825116855288820151818a870152610f0f828701826106b2565b9150508782015185820389870152610f2782826106b2565b915050606080830151818701525060808083015192508582038187015250610f4f81836106b2565b968901969450505090860190600101610ead565b509098975050505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015610f63577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0898403018552815160a08151818652610fde828701826106b2565b91505073ffffffffffffffffffffffffffffffffffffffff89830151168986015263ffffffff8883015116888601526060808301518683038288015261102483826106b2565b6080948501519790940196909652505094870194925090860190600101610f9a56fea164736f6c6343000818000a", +} + +var MessageHasherABI = MessageHasherMetaData.ABI + +var MessageHasherBin = MessageHasherMetaData.Bin + +func DeployMessageHasher(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *generated_zks.Transaction, *MessageHasher, error) { + parsed, err := MessageHasherMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(MessageHasherZKBin), backend) + contractReturn := &MessageHasher{address: address, abi: *parsed, MessageHasherCaller: MessageHasherCaller{contract: contractBind}, MessageHasherTransactor: MessageHasherTransactor{contract: contractBind}, MessageHasherFilterer: MessageHasherFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(MessageHasherBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &MessageHasher{address: address, abi: *parsed, MessageHasherCaller: MessageHasherCaller{contract: contract}, MessageHasherTransactor: MessageHasherTransactor{contract: contract}, MessageHasherFilterer: MessageHasherFilterer{contract: contract}}, nil +} + +type MessageHasher struct { + address common.Address + abi abi.ABI + MessageHasherCaller + MessageHasherTransactor + MessageHasherFilterer +} + +type MessageHasherCaller struct { + contract *bind.BoundContract +} + +type MessageHasherTransactor struct { + contract *bind.BoundContract +} + +type MessageHasherFilterer struct { + contract *bind.BoundContract +} + +type MessageHasherSession struct { + Contract *MessageHasher + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type MessageHasherCallerSession struct { + Contract *MessageHasherCaller + CallOpts bind.CallOpts +} + +type MessageHasherTransactorSession struct { + Contract *MessageHasherTransactor + TransactOpts bind.TransactOpts +} + +type MessageHasherRaw struct { + Contract *MessageHasher +} + +type MessageHasherCallerRaw struct { + Contract *MessageHasherCaller +} + +type MessageHasherTransactorRaw struct { + Contract *MessageHasherTransactor +} + +func NewMessageHasher(address common.Address, backend bind.ContractBackend) (*MessageHasher, error) { + abi, err := abi.JSON(strings.NewReader(MessageHasherABI)) + if err != nil { + return nil, err + } + contract, err := bindMessageHasher(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &MessageHasher{address: address, abi: abi, MessageHasherCaller: MessageHasherCaller{contract: contract}, MessageHasherTransactor: MessageHasherTransactor{contract: contract}, MessageHasherFilterer: MessageHasherFilterer{contract: contract}}, nil +} + +func NewMessageHasherCaller(address common.Address, caller bind.ContractCaller) (*MessageHasherCaller, error) { + contract, err := bindMessageHasher(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &MessageHasherCaller{contract: contract}, nil +} + +func NewMessageHasherTransactor(address common.Address, transactor bind.ContractTransactor) (*MessageHasherTransactor, error) { + contract, err := bindMessageHasher(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &MessageHasherTransactor{contract: contract}, nil +} + +func NewMessageHasherFilterer(address common.Address, filterer bind.ContractFilterer) (*MessageHasherFilterer, error) { + contract, err := bindMessageHasher(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &MessageHasherFilterer{contract: contract}, nil +} + +func bindMessageHasher(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := MessageHasherMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_MessageHasher *MessageHasherRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MessageHasher.Contract.MessageHasherCaller.contract.Call(opts, result, method, params...) +} + +func (_MessageHasher *MessageHasherRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MessageHasher.Contract.MessageHasherTransactor.contract.Transfer(opts) +} + +func (_MessageHasher *MessageHasherRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MessageHasher.Contract.MessageHasherTransactor.contract.Transact(opts, method, params...) +} + +func (_MessageHasher *MessageHasherCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MessageHasher.Contract.contract.Call(opts, result, method, params...) +} + +func (_MessageHasher *MessageHasherTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MessageHasher.Contract.contract.Transfer(opts) +} + +func (_MessageHasher *MessageHasherTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MessageHasher.Contract.contract.Transact(opts, method, params...) +} + +func (_MessageHasher *MessageHasherCaller) DecodeEVMExtraArgsV1(opts *bind.CallOpts, gasLimit *big.Int) (ClientEVMExtraArgsV1, error) { + var out []interface{} + err := _MessageHasher.contract.Call(opts, &out, "decodeEVMExtraArgsV1", gasLimit) + + if err != nil { + return *new(ClientEVMExtraArgsV1), err + } + + out0 := *abi.ConvertType(out[0], new(ClientEVMExtraArgsV1)).(*ClientEVMExtraArgsV1) + + return out0, err + +} + +func (_MessageHasher *MessageHasherSession) DecodeEVMExtraArgsV1(gasLimit *big.Int) (ClientEVMExtraArgsV1, error) { + return _MessageHasher.Contract.DecodeEVMExtraArgsV1(&_MessageHasher.CallOpts, gasLimit) +} + +func (_MessageHasher *MessageHasherCallerSession) DecodeEVMExtraArgsV1(gasLimit *big.Int) (ClientEVMExtraArgsV1, error) { + return _MessageHasher.Contract.DecodeEVMExtraArgsV1(&_MessageHasher.CallOpts, gasLimit) +} + +func (_MessageHasher *MessageHasherCaller) DecodeEVMExtraArgsV2(opts *bind.CallOpts, gasLimit *big.Int, allowOutOfOrderExecution bool) (ClientEVMExtraArgsV2, error) { + var out []interface{} + err := _MessageHasher.contract.Call(opts, &out, "decodeEVMExtraArgsV2", gasLimit, allowOutOfOrderExecution) + + if err != nil { + return *new(ClientEVMExtraArgsV2), err + } + + out0 := *abi.ConvertType(out[0], new(ClientEVMExtraArgsV2)).(*ClientEVMExtraArgsV2) + + return out0, err + +} + +func (_MessageHasher *MessageHasherSession) DecodeEVMExtraArgsV2(gasLimit *big.Int, allowOutOfOrderExecution bool) (ClientEVMExtraArgsV2, error) { + return _MessageHasher.Contract.DecodeEVMExtraArgsV2(&_MessageHasher.CallOpts, gasLimit, allowOutOfOrderExecution) +} + +func (_MessageHasher *MessageHasherCallerSession) DecodeEVMExtraArgsV2(gasLimit *big.Int, allowOutOfOrderExecution bool) (ClientEVMExtraArgsV2, error) { + return _MessageHasher.Contract.DecodeEVMExtraArgsV2(&_MessageHasher.CallOpts, gasLimit, allowOutOfOrderExecution) +} + +func (_MessageHasher *MessageHasherCaller) EncodeAny2EVMTokenAmountsHashPreimage(opts *bind.CallOpts, tokenAmounts []InternalAny2EVMTokenTransfer) ([]byte, error) { + var out []interface{} + err := _MessageHasher.contract.Call(opts, &out, "encodeAny2EVMTokenAmountsHashPreimage", tokenAmounts) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +func (_MessageHasher *MessageHasherSession) EncodeAny2EVMTokenAmountsHashPreimage(tokenAmounts []InternalAny2EVMTokenTransfer) ([]byte, error) { + return _MessageHasher.Contract.EncodeAny2EVMTokenAmountsHashPreimage(&_MessageHasher.CallOpts, tokenAmounts) +} + +func (_MessageHasher *MessageHasherCallerSession) EncodeAny2EVMTokenAmountsHashPreimage(tokenAmounts []InternalAny2EVMTokenTransfer) ([]byte, error) { + return _MessageHasher.Contract.EncodeAny2EVMTokenAmountsHashPreimage(&_MessageHasher.CallOpts, tokenAmounts) +} + +func (_MessageHasher *MessageHasherCaller) EncodeEVM2AnyTokenAmountsHashPreimage(opts *bind.CallOpts, tokenAmount []InternalEVM2AnyTokenTransfer) ([]byte, error) { + var out []interface{} + err := _MessageHasher.contract.Call(opts, &out, "encodeEVM2AnyTokenAmountsHashPreimage", tokenAmount) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +func (_MessageHasher *MessageHasherSession) EncodeEVM2AnyTokenAmountsHashPreimage(tokenAmount []InternalEVM2AnyTokenTransfer) ([]byte, error) { + return _MessageHasher.Contract.EncodeEVM2AnyTokenAmountsHashPreimage(&_MessageHasher.CallOpts, tokenAmount) +} + +func (_MessageHasher *MessageHasherCallerSession) EncodeEVM2AnyTokenAmountsHashPreimage(tokenAmount []InternalEVM2AnyTokenTransfer) ([]byte, error) { + return _MessageHasher.Contract.EncodeEVM2AnyTokenAmountsHashPreimage(&_MessageHasher.CallOpts, tokenAmount) +} + +func (_MessageHasher *MessageHasherCaller) EncodeEVMExtraArgsV1(opts *bind.CallOpts, extraArgs ClientEVMExtraArgsV1) ([]byte, error) { + var out []interface{} + err := _MessageHasher.contract.Call(opts, &out, "encodeEVMExtraArgsV1", extraArgs) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +func (_MessageHasher *MessageHasherSession) EncodeEVMExtraArgsV1(extraArgs ClientEVMExtraArgsV1) ([]byte, error) { + return _MessageHasher.Contract.EncodeEVMExtraArgsV1(&_MessageHasher.CallOpts, extraArgs) +} + +func (_MessageHasher *MessageHasherCallerSession) EncodeEVMExtraArgsV1(extraArgs ClientEVMExtraArgsV1) ([]byte, error) { + return _MessageHasher.Contract.EncodeEVMExtraArgsV1(&_MessageHasher.CallOpts, extraArgs) +} + +func (_MessageHasher *MessageHasherCaller) EncodeEVMExtraArgsV2(opts *bind.CallOpts, extraArgs ClientEVMExtraArgsV2) ([]byte, error) { + var out []interface{} + err := _MessageHasher.contract.Call(opts, &out, "encodeEVMExtraArgsV2", extraArgs) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +func (_MessageHasher *MessageHasherSession) EncodeEVMExtraArgsV2(extraArgs ClientEVMExtraArgsV2) ([]byte, error) { + return _MessageHasher.Contract.EncodeEVMExtraArgsV2(&_MessageHasher.CallOpts, extraArgs) +} + +func (_MessageHasher *MessageHasherCallerSession) EncodeEVMExtraArgsV2(extraArgs ClientEVMExtraArgsV2) ([]byte, error) { + return _MessageHasher.Contract.EncodeEVMExtraArgsV2(&_MessageHasher.CallOpts, extraArgs) +} + +func (_MessageHasher *MessageHasherCaller) EncodeFinalHashPreimage(opts *bind.CallOpts, leafDomainSeparator [32]byte, metaDataHash [32]byte, fixedSizeFieldsHash [32]byte, senderHash [32]byte, dataHash [32]byte, tokenAmountsHash [32]byte) ([]byte, error) { + var out []interface{} + err := _MessageHasher.contract.Call(opts, &out, "encodeFinalHashPreimage", leafDomainSeparator, metaDataHash, fixedSizeFieldsHash, senderHash, dataHash, tokenAmountsHash) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +func (_MessageHasher *MessageHasherSession) EncodeFinalHashPreimage(leafDomainSeparator [32]byte, metaDataHash [32]byte, fixedSizeFieldsHash [32]byte, senderHash [32]byte, dataHash [32]byte, tokenAmountsHash [32]byte) ([]byte, error) { + return _MessageHasher.Contract.EncodeFinalHashPreimage(&_MessageHasher.CallOpts, leafDomainSeparator, metaDataHash, fixedSizeFieldsHash, senderHash, dataHash, tokenAmountsHash) +} + +func (_MessageHasher *MessageHasherCallerSession) EncodeFinalHashPreimage(leafDomainSeparator [32]byte, metaDataHash [32]byte, fixedSizeFieldsHash [32]byte, senderHash [32]byte, dataHash [32]byte, tokenAmountsHash [32]byte) ([]byte, error) { + return _MessageHasher.Contract.EncodeFinalHashPreimage(&_MessageHasher.CallOpts, leafDomainSeparator, metaDataHash, fixedSizeFieldsHash, senderHash, dataHash, tokenAmountsHash) +} + +func (_MessageHasher *MessageHasherCaller) EncodeFixedSizeFieldsHashPreimage(opts *bind.CallOpts, messageId [32]byte, receiver common.Address, sequenceNumber uint64, gasLimit *big.Int, nonce uint64) ([]byte, error) { + var out []interface{} + err := _MessageHasher.contract.Call(opts, &out, "encodeFixedSizeFieldsHashPreimage", messageId, receiver, sequenceNumber, gasLimit, nonce) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +func (_MessageHasher *MessageHasherSession) EncodeFixedSizeFieldsHashPreimage(messageId [32]byte, receiver common.Address, sequenceNumber uint64, gasLimit *big.Int, nonce uint64) ([]byte, error) { + return _MessageHasher.Contract.EncodeFixedSizeFieldsHashPreimage(&_MessageHasher.CallOpts, messageId, receiver, sequenceNumber, gasLimit, nonce) +} + +func (_MessageHasher *MessageHasherCallerSession) EncodeFixedSizeFieldsHashPreimage(messageId [32]byte, receiver common.Address, sequenceNumber uint64, gasLimit *big.Int, nonce uint64) ([]byte, error) { + return _MessageHasher.Contract.EncodeFixedSizeFieldsHashPreimage(&_MessageHasher.CallOpts, messageId, receiver, sequenceNumber, gasLimit, nonce) +} + +func (_MessageHasher *MessageHasherCaller) EncodeMetadataHashPreimage(opts *bind.CallOpts, any2EVMMessageHash [32]byte, sourceChainSelector uint64, destChainSelector uint64, onRampHash [32]byte) ([]byte, error) { + var out []interface{} + err := _MessageHasher.contract.Call(opts, &out, "encodeMetadataHashPreimage", any2EVMMessageHash, sourceChainSelector, destChainSelector, onRampHash) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +func (_MessageHasher *MessageHasherSession) EncodeMetadataHashPreimage(any2EVMMessageHash [32]byte, sourceChainSelector uint64, destChainSelector uint64, onRampHash [32]byte) ([]byte, error) { + return _MessageHasher.Contract.EncodeMetadataHashPreimage(&_MessageHasher.CallOpts, any2EVMMessageHash, sourceChainSelector, destChainSelector, onRampHash) +} + +func (_MessageHasher *MessageHasherCallerSession) EncodeMetadataHashPreimage(any2EVMMessageHash [32]byte, sourceChainSelector uint64, destChainSelector uint64, onRampHash [32]byte) ([]byte, error) { + return _MessageHasher.Contract.EncodeMetadataHashPreimage(&_MessageHasher.CallOpts, any2EVMMessageHash, sourceChainSelector, destChainSelector, onRampHash) +} + +func (_MessageHasher *MessageHasherCaller) Hash(opts *bind.CallOpts, message InternalAny2EVMRampMessage, onRamp []byte) ([32]byte, error) { + var out []interface{} + err := _MessageHasher.contract.Call(opts, &out, "hash", message, onRamp) + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +func (_MessageHasher *MessageHasherSession) Hash(message InternalAny2EVMRampMessage, onRamp []byte) ([32]byte, error) { + return _MessageHasher.Contract.Hash(&_MessageHasher.CallOpts, message, onRamp) +} + +func (_MessageHasher *MessageHasherCallerSession) Hash(message InternalAny2EVMRampMessage, onRamp []byte) ([32]byte, error) { + return _MessageHasher.Contract.Hash(&_MessageHasher.CallOpts, message, onRamp) +} + +func (_MessageHasher *MessageHasher) Address() common.Address { + return _MessageHasher.address +} + +type MessageHasherInterface interface { + DecodeEVMExtraArgsV1(opts *bind.CallOpts, gasLimit *big.Int) (ClientEVMExtraArgsV1, error) + + DecodeEVMExtraArgsV2(opts *bind.CallOpts, gasLimit *big.Int, allowOutOfOrderExecution bool) (ClientEVMExtraArgsV2, error) + + EncodeAny2EVMTokenAmountsHashPreimage(opts *bind.CallOpts, tokenAmounts []InternalAny2EVMTokenTransfer) ([]byte, error) + + EncodeEVM2AnyTokenAmountsHashPreimage(opts *bind.CallOpts, tokenAmount []InternalEVM2AnyTokenTransfer) ([]byte, error) + + EncodeEVMExtraArgsV1(opts *bind.CallOpts, extraArgs ClientEVMExtraArgsV1) ([]byte, error) + + EncodeEVMExtraArgsV2(opts *bind.CallOpts, extraArgs ClientEVMExtraArgsV2) ([]byte, error) + + EncodeFinalHashPreimage(opts *bind.CallOpts, leafDomainSeparator [32]byte, metaDataHash [32]byte, fixedSizeFieldsHash [32]byte, senderHash [32]byte, dataHash [32]byte, tokenAmountsHash [32]byte) ([]byte, error) + + EncodeFixedSizeFieldsHashPreimage(opts *bind.CallOpts, messageId [32]byte, receiver common.Address, sequenceNumber uint64, gasLimit *big.Int, nonce uint64) ([]byte, error) + + EncodeMetadataHashPreimage(opts *bind.CallOpts, any2EVMMessageHash [32]byte, sourceChainSelector uint64, destChainSelector uint64, onRampHash [32]byte) ([]byte, error) + + Hash(opts *bind.CallOpts, message InternalAny2EVMRampMessage, onRamp []byte) ([32]byte, error) + + Address() common.Address +} + +var MessageHasherZKBin string = ("0x0002000000000002000600000000000200010000000103550000006003100270000001860030019d0000008004000039000000400040043f0000000100200190000000310000c13d000000000f01034f0000018601300197000600000001001d000000040010008c000002980000413d00000000020f043b000000e003200270000001880030009c000000390000213d0000018f0030009c00050000000f03530000005c0000a13d000001900030009c000001bb0000613d000001910030009c000001db0000613d000001920030009c000002980000c13d0000000601000029000000240010008c000002980000413d0000000001000416000000000001004b000002980000c13d0000000401f00370000000000101043b000600000001001d000000a001000039000000400010043f000000800000043f0612041c0000040f0000000602000029000000a00020043f000000400100043d0000000000210435000001860010009c000001860100804100000040011002100000019b011001c7000006130001042e0000000001000416000000000001004b000002980000c13d0000002001000039000001000010044300000120000004430000018701000041000006130001042e000001890030009c000001950000a13d0000018a0030009c000001ee0000613d0000018b0030009c000002190000613d0000018c0030009c000002980000c13d0000000601000029000000240010008c000002980000413d0000000001000416000000000001004b000002980000c13d0000000401f00370000000000101043b000000800010043f0000019502000041000000c00020043f000000c40010043f0000002401000039000000a00010043f0000010001000039000000400010043f0000002001000039000001000010043f000000a0010000390000012002000039061203ff0000040f000001000110008a000001860010009c0000018601008041000000600110021000000196011001c7000006130001042e000001930030009c0000023d0000613d000001940030009c000002980000c13d0000000601000029000000440010008c000002980000413d0000000002000416000000000002004b000002980000c13d0000000402f00370000000000402043b000001970040009c000002980000213d00000006024000690000019e0020009c000002980000213d000001440020008c000002980000413d000001e005000039000000400050043f000000040340003900000000023f034f000000000202043b000001400020043f000000240240003900000000062f034f000000000606043b000001970060009c000002980000213d000001600060043f000000200220003900000000062f034f000000000606043b000001970060009c000002980000213d000001800060043f000000200220003900000000062f034f000000000606043b000001970060009c000002980000213d000001a00060043f000000200220003900000000062f034f000000000606043b000001970060009c000002980000213d000001c00060043f0000014006000039000000800060043f000000200720003900000000027f034f000000000202043b000001970020009c000002980000213d00000000094200190000002302900039000000060020006c000002980000813d000000040a9000390000000002af034f000000000802043b000001a20080009c000001d50000813d0000001f02800039000001a8022001970000003f02200039000001a802200197000001a30020009c000001d50000213d000001e002200039000000400020043f000001e00080043f00000000028900190000002402200039000000060020006c000002980000213d0000002002a00039000000000a2f034f000001a80b8001980000001f0c80018f0000020009b00039000000b60000613d000002000d000039000000000e0a034f00000000e20e043c000000000d2d043600000000009d004b000000b20000c13d00000000000c004b000000c30000613d0000000002ba034f000000030ac00210000000000b090433000000000bab01cf000000000bab022f000000000202043b000001000aa000890000000002a2022f0000000002a201cf0000000002b2019f000000000029043500000200028000390000000000020435000000a00050043f0000002005700039000000050100035f000000000251034f000000000202043b000001970020009c000002980000213d00000000094200190000002302900039000000060020006c000002980000813d000000040a9000390000000002a1034f000000000402043b000001970040009c000001d50000213d0000001f02400039000001a8022001970000003f02200039000001a802200197000000400700043d0000000002270019000000000072004b00000000080000390000000108004039000001970020009c000001d50000213d0000000100800190000001d50000c13d000000400020043f000000000847043600000000024900190000002402200039000000060020006c000002980000213d0000002002a00039000000000921034f000001a80a4001980000001f0b40018f0000000006a80019000000f40000613d000000000c09034f000000000208001900000000cd0c043c0000000002d20436000000000062004b000000f00000c13d00000000000b004b000001010000613d0000000002a9034f0000000309b00210000000000a060433000000000a9a01cf000000000a9a022f000000000202043b0000010009900089000000000292022f00000000029201cf0000000002a2019f000000000026043500000000024800190000000000020435000000c00070043f0000002004500039000000050100035f000000000241034f000000000202043b000001a00020009c000002980000213d000000e00020043f0000002002400039000000000221034f000000000202043b000001000020043f0000004002400039000000000121034f000000000101043b000001970010009c000002980000213d00000000013100190000000602000029061204990000040f000001200010043f00000024010000390000000101100367000000000101043b000001970010009c000002980000213d000000000200003100000004011000390612044f0000040f000000800200043d00000040032000390000000003030433000600000003001d00000020022000390000000002020433000500000002001d0000000012010434061205f80000040f00000005020000290000019702200197000000400400043d000500000004001d0000004003400039000000000023043500000006020000290000019702200197000000600340003900000000002304350000008002400039000000000012043500000080010000390000000002140436000600000002001d000001a40100004100000000001204350000000001040019061204110000040f000000050100002900000000020104330000000601000029061205f80000040f000000800300043d00000080023000390000000006020433000000000203043300000060033000390000000004030433000500000001001d000001000500043d000000400700043d000600000007001d000000e00100043d000001a003100197000001970440019700000197066001970000002001700039000400000001001d061205990000040f00000006030000290000000002310049000000200120008a000000000013043500000000010300190612043d0000040f000000060100002900000000020104330000000401000029061205f80000040f000400000001001d000000a00100043d0000000012010434061205f80000040f000300000001001d000000c00100043d0000000012010434061205f80000040f000200000001001d000001200200043d000000400100043d000600000001001d0000002001100039000100000001001d061205a70000040f00000006030000290000000002310049000000200120008a000000000013043500000000010300190612043d0000040f000000060100002900000000020104330000000101000029061205f80000040f000000400400043d000100000004001d000000400240003900000005030000290000000000320435000000600240003900000004030000290000000000320435000000800240003900000003030000290000000000320435000000a00240003900000002030000290000000000320435000000c0024000390000000000120435000000c0010000390000000001140436000600000001001d00000000000104350000000001040019061204320000040f000000010100002900000000020104330000000601000029061205f80000040f000000400200043d0000000000120435000001860020009c000001860200804100000040012002100000019b011001c7000006130001042e0000018d0030009c000002670000613d0000018e0030009c000002980000c13d0000000601000029000000440010008c000002980000413d0000000001000416000000000001004b000002980000c13d061205850000040f000600000001001d000000400100043d000500000001001d061204270000040f0000000502000029000000200120003900000000000104350000000000020435000000400100043d000500000001001d061204270000040f000000060000006b0000000001000039000000010100c03900000004020000390000000102200367000000000202043b00000005040000290000002003400039000000000013043500000000002404350000000002040019000000400100043d000600000001001d061205900000040f0000000602000029000002100000013d00000006010000290003002400100094000002980000413d0000000002000416000000000002004b000002980000c13d0000000402f00370000000000102043b000400000001001d000001970010009c000002980000213d00000004010000290000002302100039000000060020006c000002980000813d0000000401000029000000040210003900000000022f034f000000000302043b000001970030009c000001d50000213d00000005023002100000003f042000390000019c044001970000019d0040009c0000028e0000a13d000001a501000041000000000010043f0000004101000039000000040010043f000001a60100004100000614000104300000000601000029000000240010008c000002980000413d0000000001000416000000000001004b000002980000c13d0000000401f00370000000000101043b000001970010009c000002980000213d00000004011000390000000602000029061204990000040f0000000002010019000000400100043d000600000001001d0000002001100039061205a70000040f000002030000013d0000000601000029000000440010008c000002980000413d0000000001000416000000000001004b000002980000c13d000000c001000039000000400010043f0000000401f00370000000000101043b000000800010043f061205850000040f000000a00010043f0000019901000041000000400300043d000600000003001d0000002002300039000000000012043500000080020000390000002401300039061205900000040f00000006030000290000000002310049000000200120008a000000000013043500000000010300190612043d0000040f0000002001000039000000400200043d000500000002001d00000000021204360000000601000029061203ff0000040f00000005020000290000000001210049000001860010009c00000186010080410000006001100210000001860020009c00000186020080410000004002200210000000000121019f000006130001042e0000000601000029000000840010008c000002980000413d0000000001000416000000000001004b000002980000c13d0000002401f00370000000000201043b000001970020009c000002980000213d0000004401f00370000000000301043b000001970030009c000002980000213d0000000401f00370000000000101043b000000a00010043f000000c00020043f000000e00030043f0000006401f00370000000000101043b000001000010043f000000800040043f0000012001000039000000400010043f0000002001000039000001200010043f00000140020000390000000001040019061203ff0000040f000001200110008a000001860010009c0000018601008041000000600110021000000198011001c7000006130001042e0000000601000029000000a40010008c000002980000413d0000000002000416000000000002004b000002980000c13d0000002402f00370000000000202043b000001a00020009c000002980000213d0000004403f00370000000000303043b000001970030009c000002980000213d0000008404f00370000000000404043b000001970040009c000002980000213d0000006405f00370000000000505043b0000000401f00370000000000101043b000000a00010043f000000c00020043f000000e00030043f000001000050043f000001200040043f000000a001000039000000800010043f0000014001000039000000400010043f0000002001000039000001400010043f00000080010000390000016002000039061203ff0000040f000001400110008a000001860010009c00000186010080410000006001100210000001a7011001c7000006130001042e0000000601000029000000c40010008c000002980000413d0000000001000416000000000001004b000002980000c13d0000000401f00370000000000101043b000000a00010043f0000002401f00370000000000101043b000000c00010043f0000004401f00370000000000101043b000000e00010043f0000006401f00370000000000101043b000001000010043f0000008401f00370000000000101043b000001200010043f000000a401f00370000000000101043b000001400010043f000000c001000039000000800010043f0000016001000039000000400010043f0000002001000039000001600010043f00000080010000390000018002000039061203ff0000040f000001600110008a000001860010009c000001860100804100000060011002100000019a011001c7000006130001042e00000080014000390000000004010019000000400010043f000000800030043f000000040100002900000024051000390000000002520019000200000002001d000000060020006c0000029a0000a13d00000000010000190000061400010430000000000003004b000002b40000c13d00000000010400190000002002400039000000200300003900000000003204350000004002400039000000800f00043d0000000000f2043500000060024000390000000503f00210000000000723001900000000000f004b000003a90000c13d0000000002170049000000200320008a0000000000310435000500000001001d0612043d0000040f000000400200043d000600000002001d000000200100003900000000021204360000000501000029061203ff0000040f000001b90000013d000000a001000039000000200700008a000002c00000013d0000000002ac0019000000000002043500000080029000390000000000b2043500000000019104360000002005500039000000020050006c000000200700008a000003fd0000813d00000000025f034f000000000202043b000001970020009c000002980000213d000000040a2000290000000302a000690000019e0020009c000002980000213d000000a00020008c000002980000413d000000400900043d0000019f0090009c000001d50000213d000000a002900039000000400020043f0000002402a0003900000000032f034f000000000303043b000001a00030009c000002980000213d000000000c390436000000200b2000390000000002bf034f000000000202043b000001970020009c000002980000213d0000000003a200190000004302300039000000060020006c0000000004000019000001a104008041000001a102200197000000000002004b0000000006000019000001a106004041000001a10020009c000000000604c019000000000006004b000002980000c13d000000240430003900000000024f034f000000000d02043b0000019700d0009c000001d50000213d0000001f02d00039000000000272016f0000003f02200039000000000272016f000000400e00043d00000000062e00190000000000e6004b00000000020000390000000102004039000001970060009c000001d50000213d0000000100200190000001d50000c13d000000400060043f0000000002de04360000000003d300190000004403300039000000060030006c000002980000213d000000200340003900000000083f034f00000000067d017000000000036200190000030a0000613d000000000408034f000000000f020019000000004704043c000000000f7f043600000000003f004b000003060000c13d0000001f04d00190000003170000613d000000000668034f0000000304400210000000000703043300000000074701cf000000000747022f000000000606043b0000010004400089000000000646022f00000000044601cf000000000474019f00000000004304350000000002d2001900000000000204350000000000ec0435000000200bb00039000000050f00035f0000000002bf034f000000000202043b000001970020009c000002980000213d0000000003a200190000004302300039000000060020006c0000000004000019000001a104008041000001a102200197000000000002004b0000000006000019000001a106004041000001a10020009c000000000604c019000000000006004b000002980000c13d000000240430003900000000024f034f000000000c02043b0000019700c0009c000001d50000213d0000001f02c00039000001a8022001970000003f02200039000001a802200197000000400d00043d00000000062d00190000000000d6004b00000000020000390000000102004039000001970060009c000001d50000213d0000000100200190000001d50000c13d000000400060043f000000000ecd04360000000002c300190000004402200039000000060020006c000002980000213d000000200240003900000000042f034f000001a806c0019800000000036e0019000003500000613d000000000804034f00000000020e0019000000008708043c0000000002720436000000000032004b0000034c0000c13d0000001f02c001900000035d0000613d000000000464034f0000000302200210000000000603043300000000062601cf000000000626022f000000000404043b0000010002200089000000000424022f00000000022401cf000000000262019f00000000002304350000000002ce0019000000000002043500000040029000390000000000d204350000002002b0003900000000022f034f000000000202043b000000600390003900000000002304350000004002b0003900000000022f034f000000000202043b000001970020009c000002980000213d0000000003a200190000004302300039000000060020006c0000000004000019000001a104008041000001a102200197000000000002004b0000000006000019000001a106004041000001a10020009c000000000604c019000000000006004b000002980000c13d000000240430003900000000024f034f000000000a02043b0000019700a0009c000001d50000213d0000001f02a00039000001a8022001970000003f02200039000001a802200197000000400b00043d00000000062b00190000000000b6004b00000000020000390000000102004039000001970060009c000001d50000213d0000000100200190000001d50000c13d000000400060043f000000000cab04360000000002a300190000004402200039000000060020006c000002980000213d000000200240003900000000042f034f000001a806a0019800000000036c00190000039b0000613d000000000804034f00000000020c0019000000008708043c0000000002720436000000000032004b000003970000c13d0000001f02a00190000002b70000613d000000000464034f0000000302200210000000000603043300000000062601cf000000000626022f000000000404043b0000010002200089000000000424022f00000000022401cf000000000262019f0000000000230435000002b70000013d000000a00300003900000000050000190000000006030019000003b50000013d0000001f09800039000001a80990019700000000088700190000000000080435000000000797001900000001055000390000000000f5004b000002a80000813d0000000008170049000000600880008a0000000002820436000000006806043400000000a9080434000001a0099001970000000009970436000000000a0a04330000000000390435000000a00c70003900000000b90a043400000000009c0435000000c00a700039000000000009004b000003cc0000613d000000000c000019000000000dac0019000000000ecb0019000000000e0e04330000000000ed0435000000200cc0003900000000009c004b000003c50000413d000000000b9a001900000000000b04350000001f09900039000001a80990019700000000099a0019000000400a800039000000000a0a0433000000000b790049000000400c7000390000000000bc043500000000ba0a04340000000009a9043600000000000a004b000003e20000613d000000000c000019000000000d9c0019000000000ecb0019000000000e0e04330000000000ed0435000000200cc000390000000000ac004b000003db0000413d000000000ba9001900000000000b0435000000600b800039000000000b0b0433000000600c7000390000000000bc04350000001f0aa00039000001a80aa00197000000000aa900190000008008800039000000000808043300000000097a004900000080077000390000000000970435000000009808043400000000078a0436000000000008004b000003ad0000613d000000000a000019000000000b7a0019000000000ca90019000000000c0c04330000000000cb0435000000200aa0003900000000008a004b000003f50000413d000003ad0000013d000000400400043d0000029c0000013d00000000430104340000000001320436000000000003004b0000040b0000613d000000000200001900000000052100190000000006240019000000000606043300000000006504350000002002200039000000000032004b000004040000413d000000000231001900000000000204350000001f02300039000001a8022001970000000001210019000000000001042d000001a90010009c000004160000813d000000a001100039000000400010043f000000000001042d000001a501000041000000000010043f0000004101000039000000040010043f000001a6010000410000061400010430000001aa0010009c000004210000813d0000002001100039000000400010043f000000000001042d000001a501000041000000000010043f0000004101000039000000040010043f000001a6010000410000061400010430000001ab0010009c0000042c0000813d0000004001100039000000400010043f000000000001042d000001a501000041000000000010043f0000004101000039000000040010043f000001a6010000410000061400010430000001ac0010009c000004370000813d000000e001100039000000400010043f000000000001042d000001a501000041000000000010043f0000004101000039000000040010043f000001a60100004100000614000104300000001f02200039000001a8022001970000000001120019000000000021004b00000000020000390000000102004039000001970010009c000004490000213d0000000100200190000004490000c13d000000400010043f000000000001042d000001a501000041000000000010043f0000004101000039000000040010043f000001a601000041000006140001043000000000030100190000001f01100039000000000021004b0000000004000019000001a104004041000001a105200197000001a101100197000000000651013f000000000051004b0000000001000019000001a101002041000001a10060009c000000000104c019000000000001004b000004970000613d0000000106000367000000000136034f000000000401043b000001a20040009c000004910000813d0000001f01400039000001a8011001970000003f01100039000001a805100197000000400100043d0000000005510019000000000015004b00000000080000390000000108004039000001970050009c000004910000213d0000000100800190000004910000c13d000000400050043f000000000541043600000020033000390000000008430019000000000028004b000004970000213d000000000336034f000001a8064001980000001f0740018f0000000002650019000004810000613d000000000803034f0000000009050019000000008a08043c0000000009a90436000000000029004b0000047d0000c13d000000000007004b0000048e0000613d000000000363034f0000000306700210000000000702043300000000076701cf000000000767022f000000000303043b0000010006600089000000000363022f00000000036301cf000000000373019f000000000032043500000000024500190000000000020435000000000001042d000001a501000041000000000010043f0000004101000039000000040010043f000001a6010000410000061400010430000000000100001900000614000104300006000000000002000500000001001d0000001f01100039000000000021004b0000000003000019000001a103004041000001a10a200197000001a1011001970000000004a1013f0000000000a1004b0000000001000019000001a101002041000001a10040009c000000000103c019000000000001004b0000057d0000613d00000001050003670000000501500360000000000101043b000001a20010009c0000057f0000813d00000005031002100000003f043000390000019c04400197000000400700043d0000000006470019000100000007001d000000000076004b00000000040000390000000104004039000001970060009c0000057f0000213d00000001004001900000057f0000c13d000000400060043f0000000104000029000000000014043500000005010000290000002006100039000400000036001d000000040020006b0000057d0000213d000000040060006c0000057b0000813d0003002000200092000000010400002900020000000a001d000004d80000013d000000060400002900000020044000390000000001cf001900000000000104350000006001b000390000000000e104350000002001d00039000000000115034f000000000101043b0000008003b0003900000000001304350000000000b404350000002006600039000000040060006c0000057b0000813d000600000004001d000000000165034f000000000101043b000001970010009c0000057d0000213d000000050c1000290000000301c000690000019e0010009c0000057d0000213d000000a00010008c0000057d0000413d000000400b00043d0000019f00b0009c0000057f0000213d000000200dc000390000000001d5034f000000a00eb000390000004000e0043f000000000101043b000001970010009c0000057d0000213d0000000003c100190000003f01300039000000000021004b0000000004000019000001a104008041000001a1011001970000000007a1013f0000000000a1004b0000000001000019000001a101004041000001a10070009c000000000104c019000000000001004b0000057d0000c13d0000002007300039000000000175034f000000000f01043b0000019700f0009c0000057f0000213d0000001f01f00039000001a8011001970000003f01100039000001a8011001970000000001e10019000001970010009c0000057f0000213d000000400010043f0000000000fe04350000000001f300190000004001100039000000000021004b0000057d0000213d0000002001700039000000000915034f000001a801f00198000000c004b000390000000008140019000005190000613d000000000709034f0000000003040019000000007a07043c0000000003a30436000000000083004b000005150000c13d0000001f03f00190000005260000613d000000000119034f0000000303300210000000000708043300000000073701cf000000000737022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000171019f00000000001804350000000001f4001900000000000104350000000003eb04360000002001d00039000000000415034f000000000404043b000001a00040009c000000020a0000290000057d0000213d00000000004304350000002001100039000000000315034f000000000303043b000001860030009c0000057d0000213d0000004004b000390000000000340435000000200d1000390000000001d5034f000000000101043b000001970010009c0000057d0000213d0000000003c100190000003f01300039000000000021004b0000000004000019000001a104008041000001a1011001970000000007a1013f0000000000a1004b0000000001000019000001a101004041000001a10070009c000000000104c019000000000001004b0000057d0000c13d0000002008300039000000000185034f000000000c01043b0000019700c0009c0000057f0000213d0000001f01c00039000001a8011001970000003f01100039000001a801100197000000400e00043d00000000011e00190000000000e1004b00000000040000390000000104004039000001970010009c0000057f0000213d00000001004001900000057f0000c13d000000400010043f000000000fce04360000000001c300190000004001100039000000000021004b0000057d0000213d0000002001800039000000000115034f000001a807c0019800000000037f00190000056d0000613d000000000801034f00000000040f0019000000008908043c0000000004940436000000000034004b000005690000c13d0000001f04c00190000004c90000613d000000000171034f0000000304400210000000000703043300000000074701cf000000000747022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000171019f0000000000130435000004c90000013d0000000101000029000000000001042d00000000010000190000061400010430000001a501000041000000000010043f0000004101000039000000040010043f000001a601000041000006140001043000000024010000390000000101100367000000000101043b000000000001004b0000000002000039000000010200c039000000000021004b0000058e0000c13d000000000001042d00000000010000190000061400010430000000003202043400000000022104360000000003030433000000000003004b0000000003000039000000010300c03900000000003204350000004001100039000000000001042d00000197066001970000008007100039000000000067043500000060061000390000000000560435000001970440019700000040051000390000000000450435000001a003300197000000200410003900000000003404350000000000210435000000a001100039000000000001042d00010000000000020000002003000039000000000331043600000000060204330000000000630435000100000001001d000000400510003900000005036002100000000003350019000000000006004b000005f60000613d00000000010600190000000008000019000005c10000013d0000000006ba0019000000000006043500000080033000390000008006900039000000000606043300000000006304350000001f03b00039000001a80330019700000000033a00190000000108800039000000000018004b000005f60000813d000000010930006a000000400990008a00000000059504360000002002200039000000000902043300000000da090434000000a006000039000000000c630436000000a00b30003900000000ea0a04340000000000ab0435000000c00b30003900000000000a004b000005d70000613d000000000f0000190000000006bf00190000000007fe001900000000070704330000000000760435000000200ff000390000000000af004b000005d00000413d0000000006ab0019000000000006043500000000060d0433000001a00660019700000000006c0435000000400690003900000000060604330000018606600197000000400730003900000000006704350000001f06a00039000001a80660019700000000066b00190000000007360049000000600a300039000000600b900039000000000b0b043300000000007a043500000000cb0b0434000000000ab6043600000000000b004b000005b50000613d000000000d0000190000000006ad00190000000007dc001900000000070704330000000000760435000000200dd000390000000000bd004b000005ee0000413d000005b50000013d0000000001030019000000000001042d000001860010009c00000186010080410000004001100210000001860020009c00000186020080410000006002200210000000000112019f0000000002000414000001860020009c0000018602008041000000c002200210000000000112019f000001ad011001c700008010020000390612060d0000040f00000001002001900000060b0000613d000000000101043b000000000001042d0000000001000019000006140001043000000610002104230000000102000039000000000001042d0000000002000019000000000001042d0000061200000432000006130001042e000006140001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000bf0619ac00000000000000000000000000000000000000000000000000000000c7ca9a1700000000000000000000000000000000000000000000000000000000c7ca9a1800000000000000000000000000000000000000000000000000000000e04767b800000000000000000000000000000000000000000000000000000000e733d20900000000000000000000000000000000000000000000000000000000bf0619ad00000000000000000000000000000000000000000000000000000000c63641bd0000000000000000000000000000000000000000000000000000000094b6624a0000000000000000000000000000000000000000000000000000000094b6624b00000000000000000000000000000000000000000000000000000000ae5663d700000000000000000000000000000000000000000000000000000000b17df714000000000000000000000000000000000000000000000000000000003ec7c377000000000000000000000000000000000000000000000000000000008503839d97a657c9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff0000000000000000000000000000000000000000000001200000000000000000181dcf1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000000000000000000000000000000000200000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffff5f000000000000000000000000ffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000fffffffffffffe1f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f4e487b710000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000000000001400000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff60000000000000000000000000000000000000000000000000ffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffffc0000000000000000000000000000000000000000000000000ffffffffffffff2002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000") diff --git a/core/gethwrappers/ccip/generated_zks/mock_usdc_token_messenger/mock_usdc_token_messenger.go b/core/gethwrappers/ccip/generated_zks/mock_usdc_token_messenger/mock_usdc_token_messenger.go new file mode 100644 index 00000000000..01587e0f150 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/mock_usdc_token_messenger/mock_usdc_token_messenger.go @@ -0,0 +1,492 @@ +package mock_usdc_token_messenger + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var MockE2EUSDCTokenMessengerMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"burnToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"depositor\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"mintRecipient\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"destinationTokenMessenger\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"destinationCaller\",\"type\":\"bytes32\"}],\"name\":\"DepositForBurn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DESTINATION_TOKEN_MESSENGER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"mintRecipient\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"burnToken\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"destinationCaller\",\"type\":\"bytes32\"}],\"name\":\"depositForBurnWithCaller\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localMessageTransmitter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localMessageTransmitterWithRelay\",\"outputs\":[{\"internalType\":\"contractIMessageTransmitterWithRelay\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageBodyVersion\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_nonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60e060405234801561001057600080fd5b5060405161082d38038061082d83398101604081905261002f91610063565b63ffffffff909116608052600080546001600160401b03191660011790556001600160a01b031660a081905260c0526100b2565b6000806040838503121561007657600080fd5b825163ffffffff8116811461008a57600080fd5b60208401519092506001600160a01b03811681146100a757600080fd5b809150509250929050565b60805160a05160c0516107396100f4600039600081816101290152818161049b015261055b01526000607901526000818160fa01526102b801526107396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c8063a250c66a11610050578063a250c66a14610124578063f856ddb61461014b578063fb8406a91461015e57600080fd5b80632c121921146100775780637eccf63e146100c35780639cdbb181146100f0575b600080fd5b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6000546100d79067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016100ba565b60405163ffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016100ba565b6100997f000000000000000000000000000000000000000000000000000000000000000081565b6100d761015936600461059e565b610193565b6101857f17c71eed51b181d8ae1908b4743526c6dbf099c201f158a1acd5f6718e82e8f681565b6040519081526020016100ba565b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810186905260009073ffffffffffffffffffffffffffffffffffffffff8416906323b872dd906064016020604051808303816000875af115801561020f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102339190610612565b506040517f42966c680000000000000000000000000000000000000000000000000000000081526004810187905273ffffffffffffffffffffffffffffffffffffffff8416906342966c6890602401600060405180830381600087803b15801561029c57600080fd5b505af11580156102b0573d6000803e3d6000fd5b5050604080517f000000000000000000000000000000000000000000000000000000000000000060e01b7fffffffff0000000000000000000000000000000000000000000000000000000016602082015273ffffffffffffffffffffffffffffffffffffffff8716602482015260448101889052606481018a9052336084808301919091528251808303909101815260a490910190915291506103779050867f17c71eed51b181d8ae1908b4743526c6dbf099c201f158a1acd5f6718e82e8f68584610457565b600080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff929092169182179055604080518981526020810188905263ffffffff8916918101919091527f17c71eed51b181d8ae1908b4743526c6dbf099c201f158a1acd5f6718e82e8f6606082015260808101859052339173ffffffffffffffffffffffffffffffffffffffff8716917f2fa9ca894982930190727e75500a97d8dc500233a5065e0f3126c48fbe0343c09060a00160405180910390a4505060005467ffffffffffffffff1695945050505050565b60008261051e576040517f0ba469bc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630ba469bc906104d49088908890879060040161069f565b6020604051808303816000875af11580156104f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051791906106cd565b9050610596565b6040517ff7259a7500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063f7259a75906104d49088908890889088906004016106f7565b949350505050565b600080600080600060a086880312156105b657600080fd5b85359450602086013563ffffffff811681146105d157600080fd5b935060408601359250606086013573ffffffffffffffffffffffffffffffffffffffff8116811461060157600080fd5b949793965091946080013592915050565b60006020828403121561062457600080fd5b8151801515811461063457600080fd5b9392505050565b6000815180845260005b8181101561066157602081850181015186830182015201610645565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b63ffffffff841681528260208201526060604082015260006106c4606083018461063b565b95945050505050565b6000602082840312156106df57600080fd5b815167ffffffffffffffff8116811461063457600080fd5b63ffffffff85168152836020820152826040820152608060608201526000610722608083018461063b565b969550505050505056fea164736f6c6343000818000a", +} + +var MockE2EUSDCTokenMessengerABI = MockE2EUSDCTokenMessengerMetaData.ABI + +var MockE2EUSDCTokenMessengerBin = MockE2EUSDCTokenMessengerMetaData.Bin + +func DeployMockE2EUSDCTokenMessenger(auth *bind.TransactOpts, backend bind.ContractBackend, version uint32, transmitter common.Address) (common.Address, *generated_zks.Transaction, *MockE2EUSDCTokenMessenger, error) { + parsed, err := MockE2EUSDCTokenMessengerMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(MockE2EUSDCTokenMessengerZKBin), backend, version, transmitter) + contractReturn := &MockE2EUSDCTokenMessenger{address: address, abi: *parsed, MockE2EUSDCTokenMessengerCaller: MockE2EUSDCTokenMessengerCaller{contract: contractBind}, MockE2EUSDCTokenMessengerTransactor: MockE2EUSDCTokenMessengerTransactor{contract: contractBind}, MockE2EUSDCTokenMessengerFilterer: MockE2EUSDCTokenMessengerFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(MockE2EUSDCTokenMessengerBin), backend, version, transmitter) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &MockE2EUSDCTokenMessenger{address: address, abi: *parsed, MockE2EUSDCTokenMessengerCaller: MockE2EUSDCTokenMessengerCaller{contract: contract}, MockE2EUSDCTokenMessengerTransactor: MockE2EUSDCTokenMessengerTransactor{contract: contract}, MockE2EUSDCTokenMessengerFilterer: MockE2EUSDCTokenMessengerFilterer{contract: contract}}, nil +} + +type MockE2EUSDCTokenMessenger struct { + address common.Address + abi abi.ABI + MockE2EUSDCTokenMessengerCaller + MockE2EUSDCTokenMessengerTransactor + MockE2EUSDCTokenMessengerFilterer +} + +type MockE2EUSDCTokenMessengerCaller struct { + contract *bind.BoundContract +} + +type MockE2EUSDCTokenMessengerTransactor struct { + contract *bind.BoundContract +} + +type MockE2EUSDCTokenMessengerFilterer struct { + contract *bind.BoundContract +} + +type MockE2EUSDCTokenMessengerSession struct { + Contract *MockE2EUSDCTokenMessenger + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type MockE2EUSDCTokenMessengerCallerSession struct { + Contract *MockE2EUSDCTokenMessengerCaller + CallOpts bind.CallOpts +} + +type MockE2EUSDCTokenMessengerTransactorSession struct { + Contract *MockE2EUSDCTokenMessengerTransactor + TransactOpts bind.TransactOpts +} + +type MockE2EUSDCTokenMessengerRaw struct { + Contract *MockE2EUSDCTokenMessenger +} + +type MockE2EUSDCTokenMessengerCallerRaw struct { + Contract *MockE2EUSDCTokenMessengerCaller +} + +type MockE2EUSDCTokenMessengerTransactorRaw struct { + Contract *MockE2EUSDCTokenMessengerTransactor +} + +func NewMockE2EUSDCTokenMessenger(address common.Address, backend bind.ContractBackend) (*MockE2EUSDCTokenMessenger, error) { + abi, err := abi.JSON(strings.NewReader(MockE2EUSDCTokenMessengerABI)) + if err != nil { + return nil, err + } + contract, err := bindMockE2EUSDCTokenMessenger(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &MockE2EUSDCTokenMessenger{address: address, abi: abi, MockE2EUSDCTokenMessengerCaller: MockE2EUSDCTokenMessengerCaller{contract: contract}, MockE2EUSDCTokenMessengerTransactor: MockE2EUSDCTokenMessengerTransactor{contract: contract}, MockE2EUSDCTokenMessengerFilterer: MockE2EUSDCTokenMessengerFilterer{contract: contract}}, nil +} + +func NewMockE2EUSDCTokenMessengerCaller(address common.Address, caller bind.ContractCaller) (*MockE2EUSDCTokenMessengerCaller, error) { + contract, err := bindMockE2EUSDCTokenMessenger(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &MockE2EUSDCTokenMessengerCaller{contract: contract}, nil +} + +func NewMockE2EUSDCTokenMessengerTransactor(address common.Address, transactor bind.ContractTransactor) (*MockE2EUSDCTokenMessengerTransactor, error) { + contract, err := bindMockE2EUSDCTokenMessenger(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &MockE2EUSDCTokenMessengerTransactor{contract: contract}, nil +} + +func NewMockE2EUSDCTokenMessengerFilterer(address common.Address, filterer bind.ContractFilterer) (*MockE2EUSDCTokenMessengerFilterer, error) { + contract, err := bindMockE2EUSDCTokenMessenger(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &MockE2EUSDCTokenMessengerFilterer{contract: contract}, nil +} + +func bindMockE2EUSDCTokenMessenger(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := MockE2EUSDCTokenMessengerMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MockE2EUSDCTokenMessenger.Contract.MockE2EUSDCTokenMessengerCaller.contract.Call(opts, result, method, params...) +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MockE2EUSDCTokenMessenger.Contract.MockE2EUSDCTokenMessengerTransactor.contract.Transfer(opts) +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MockE2EUSDCTokenMessenger.Contract.MockE2EUSDCTokenMessengerTransactor.contract.Transact(opts, method, params...) +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MockE2EUSDCTokenMessenger.Contract.contract.Call(opts, result, method, params...) +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MockE2EUSDCTokenMessenger.Contract.contract.Transfer(opts) +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MockE2EUSDCTokenMessenger.Contract.contract.Transact(opts, method, params...) +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerCaller) DESTINATIONTOKENMESSENGER(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _MockE2EUSDCTokenMessenger.contract.Call(opts, &out, "DESTINATION_TOKEN_MESSENGER") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerSession) DESTINATIONTOKENMESSENGER() ([32]byte, error) { + return _MockE2EUSDCTokenMessenger.Contract.DESTINATIONTOKENMESSENGER(&_MockE2EUSDCTokenMessenger.CallOpts) +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerCallerSession) DESTINATIONTOKENMESSENGER() ([32]byte, error) { + return _MockE2EUSDCTokenMessenger.Contract.DESTINATIONTOKENMESSENGER(&_MockE2EUSDCTokenMessenger.CallOpts) +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerCaller) LocalMessageTransmitter(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _MockE2EUSDCTokenMessenger.contract.Call(opts, &out, "localMessageTransmitter") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerSession) LocalMessageTransmitter() (common.Address, error) { + return _MockE2EUSDCTokenMessenger.Contract.LocalMessageTransmitter(&_MockE2EUSDCTokenMessenger.CallOpts) +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerCallerSession) LocalMessageTransmitter() (common.Address, error) { + return _MockE2EUSDCTokenMessenger.Contract.LocalMessageTransmitter(&_MockE2EUSDCTokenMessenger.CallOpts) +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerCaller) LocalMessageTransmitterWithRelay(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _MockE2EUSDCTokenMessenger.contract.Call(opts, &out, "localMessageTransmitterWithRelay") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerSession) LocalMessageTransmitterWithRelay() (common.Address, error) { + return _MockE2EUSDCTokenMessenger.Contract.LocalMessageTransmitterWithRelay(&_MockE2EUSDCTokenMessenger.CallOpts) +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerCallerSession) LocalMessageTransmitterWithRelay() (common.Address, error) { + return _MockE2EUSDCTokenMessenger.Contract.LocalMessageTransmitterWithRelay(&_MockE2EUSDCTokenMessenger.CallOpts) +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerCaller) MessageBodyVersion(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _MockE2EUSDCTokenMessenger.contract.Call(opts, &out, "messageBodyVersion") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerSession) MessageBodyVersion() (uint32, error) { + return _MockE2EUSDCTokenMessenger.Contract.MessageBodyVersion(&_MockE2EUSDCTokenMessenger.CallOpts) +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerCallerSession) MessageBodyVersion() (uint32, error) { + return _MockE2EUSDCTokenMessenger.Contract.MessageBodyVersion(&_MockE2EUSDCTokenMessenger.CallOpts) +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerCaller) SNonce(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _MockE2EUSDCTokenMessenger.contract.Call(opts, &out, "s_nonce") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerSession) SNonce() (uint64, error) { + return _MockE2EUSDCTokenMessenger.Contract.SNonce(&_MockE2EUSDCTokenMessenger.CallOpts) +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerCallerSession) SNonce() (uint64, error) { + return _MockE2EUSDCTokenMessenger.Contract.SNonce(&_MockE2EUSDCTokenMessenger.CallOpts) +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerTransactor) DepositForBurnWithCaller(opts *bind.TransactOpts, amount *big.Int, destinationDomain uint32, mintRecipient [32]byte, burnToken common.Address, destinationCaller [32]byte) (*types.Transaction, error) { + return _MockE2EUSDCTokenMessenger.contract.Transact(opts, "depositForBurnWithCaller", amount, destinationDomain, mintRecipient, burnToken, destinationCaller) +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerSession) DepositForBurnWithCaller(amount *big.Int, destinationDomain uint32, mintRecipient [32]byte, burnToken common.Address, destinationCaller [32]byte) (*types.Transaction, error) { + return _MockE2EUSDCTokenMessenger.Contract.DepositForBurnWithCaller(&_MockE2EUSDCTokenMessenger.TransactOpts, amount, destinationDomain, mintRecipient, burnToken, destinationCaller) +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerTransactorSession) DepositForBurnWithCaller(amount *big.Int, destinationDomain uint32, mintRecipient [32]byte, burnToken common.Address, destinationCaller [32]byte) (*types.Transaction, error) { + return _MockE2EUSDCTokenMessenger.Contract.DepositForBurnWithCaller(&_MockE2EUSDCTokenMessenger.TransactOpts, amount, destinationDomain, mintRecipient, burnToken, destinationCaller) +} + +type MockE2EUSDCTokenMessengerDepositForBurnIterator struct { + Event *MockE2EUSDCTokenMessengerDepositForBurn + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MockE2EUSDCTokenMessengerDepositForBurnIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MockE2EUSDCTokenMessengerDepositForBurn) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MockE2EUSDCTokenMessengerDepositForBurn) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MockE2EUSDCTokenMessengerDepositForBurnIterator) Error() error { + return it.fail +} + +func (it *MockE2EUSDCTokenMessengerDepositForBurnIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MockE2EUSDCTokenMessengerDepositForBurn struct { + Nonce uint64 + BurnToken common.Address + Amount *big.Int + Depositor common.Address + MintRecipient [32]byte + DestinationDomain uint32 + DestinationTokenMessenger [32]byte + DestinationCaller [32]byte + Raw types.Log +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerFilterer) FilterDepositForBurn(opts *bind.FilterOpts, nonce []uint64, burnToken []common.Address, depositor []common.Address) (*MockE2EUSDCTokenMessengerDepositForBurnIterator, error) { + + var nonceRule []interface{} + for _, nonceItem := range nonce { + nonceRule = append(nonceRule, nonceItem) + } + var burnTokenRule []interface{} + for _, burnTokenItem := range burnToken { + burnTokenRule = append(burnTokenRule, burnTokenItem) + } + + var depositorRule []interface{} + for _, depositorItem := range depositor { + depositorRule = append(depositorRule, depositorItem) + } + + logs, sub, err := _MockE2EUSDCTokenMessenger.contract.FilterLogs(opts, "DepositForBurn", nonceRule, burnTokenRule, depositorRule) + if err != nil { + return nil, err + } + return &MockE2EUSDCTokenMessengerDepositForBurnIterator{contract: _MockE2EUSDCTokenMessenger.contract, event: "DepositForBurn", logs: logs, sub: sub}, nil +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerFilterer) WatchDepositForBurn(opts *bind.WatchOpts, sink chan<- *MockE2EUSDCTokenMessengerDepositForBurn, nonce []uint64, burnToken []common.Address, depositor []common.Address) (event.Subscription, error) { + + var nonceRule []interface{} + for _, nonceItem := range nonce { + nonceRule = append(nonceRule, nonceItem) + } + var burnTokenRule []interface{} + for _, burnTokenItem := range burnToken { + burnTokenRule = append(burnTokenRule, burnTokenItem) + } + + var depositorRule []interface{} + for _, depositorItem := range depositor { + depositorRule = append(depositorRule, depositorItem) + } + + logs, sub, err := _MockE2EUSDCTokenMessenger.contract.WatchLogs(opts, "DepositForBurn", nonceRule, burnTokenRule, depositorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MockE2EUSDCTokenMessengerDepositForBurn) + if err := _MockE2EUSDCTokenMessenger.contract.UnpackLog(event, "DepositForBurn", 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 +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessengerFilterer) ParseDepositForBurn(log types.Log) (*MockE2EUSDCTokenMessengerDepositForBurn, error) { + event := new(MockE2EUSDCTokenMessengerDepositForBurn) + if err := _MockE2EUSDCTokenMessenger.contract.UnpackLog(event, "DepositForBurn", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessenger) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _MockE2EUSDCTokenMessenger.abi.Events["DepositForBurn"].ID: + return _MockE2EUSDCTokenMessenger.ParseDepositForBurn(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (MockE2EUSDCTokenMessengerDepositForBurn) Topic() common.Hash { + return common.HexToHash("0x2fa9ca894982930190727e75500a97d8dc500233a5065e0f3126c48fbe0343c0") +} + +func (_MockE2EUSDCTokenMessenger *MockE2EUSDCTokenMessenger) Address() common.Address { + return _MockE2EUSDCTokenMessenger.address +} + +type MockE2EUSDCTokenMessengerInterface interface { + DESTINATIONTOKENMESSENGER(opts *bind.CallOpts) ([32]byte, error) + + LocalMessageTransmitter(opts *bind.CallOpts) (common.Address, error) + + LocalMessageTransmitterWithRelay(opts *bind.CallOpts) (common.Address, error) + + MessageBodyVersion(opts *bind.CallOpts) (uint32, error) + + SNonce(opts *bind.CallOpts) (uint64, error) + + DepositForBurnWithCaller(opts *bind.TransactOpts, amount *big.Int, destinationDomain uint32, mintRecipient [32]byte, burnToken common.Address, destinationCaller [32]byte) (*types.Transaction, error) + + FilterDepositForBurn(opts *bind.FilterOpts, nonce []uint64, burnToken []common.Address, depositor []common.Address) (*MockE2EUSDCTokenMessengerDepositForBurnIterator, error) + + WatchDepositForBurn(opts *bind.WatchOpts, sink chan<- *MockE2EUSDCTokenMessengerDepositForBurn, nonce []uint64, burnToken []common.Address, depositor []common.Address) (event.Subscription, error) + + ParseDepositForBurn(log types.Log) (*MockE2EUSDCTokenMessengerDepositForBurn, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var MockE2EUSDCTokenMessengerZKBin string = ("0x0001000000000002000f0000000000020000006003100270000000b0033001970000000100200190000000250000c13d0000008002000039000000400020043f000000040030008c000001010000413d000000000201043b000000e002200270000000b60020009c0000005f0000213d000000ba0020009c0000006c0000613d000000bb0020009c000000770000613d000000bc0020009c000001010000c13d0000000001000416000000000001004b000001010000c13d0000000001000412000d00000001001d000c00000000003d0000800501000039000000440300003900000000040004150000000d0440008a0000000504400210000000c60200004102bd029a0000040f000000b001100197000000800010043f000000be01000041000002be0001042e0000000002000416000000000002004b000001010000c13d0000001f02300039000000b102200197000000e002200039000000400020043f0000001f0430018f000000b205300198000000e002500039000000360000613d000000e006000039000000000701034f000000007807043c0000000006860436000000000026004b000000320000c13d000000000004004b000000430000613d000000000151034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000400030008c000001010000413d000000e00200043d000000b00020009c000001010000213d000001000100043d000000b30010009c000001010000213d000000800020043f000000000300041a000000b40330019700000001033001bf000000000030041b000000a00010043f000000c00010043f0000014000000443000001600020044300000020020000390000018000200443000001a0001004430000004003000039000001c000300443000001e000100443000001000020044300000003010000390000012000100443000000b501000041000002be0001042e000000b70020009c0000007f0000613d000000b80020009c000000900000613d000000b90020009c000001010000c13d0000000001000416000000000001004b000001010000c13d000000bd01000041000000800010043f000000be01000041000002be0001042e0000000001000416000000000001004b000001010000c13d0000000001000412000f00000001001d000e00200000003d0000800501000039000000440300003900000000040004150000000f0440008a000000890000013d0000000001000416000000000001004b000001010000c13d000000000100041a000000ca01100197000000800010043f000000be01000041000002be0001042e0000000001000416000000000001004b000001010000c13d0000000001000412000b00000001001d000a00400000003d0000800501000039000000440300003900000000040004150000000b0440008a0000000504400210000000c60200004102bd029a0000040f000000b301100197000000800010043f000000be01000041000002be0001042e000000a40030008c000001010000413d0000000002000416000000000002004b000001010000c13d0000000402100370000000000502043b0000002402100370000000000702043b000000b00070009c000001010000213d0000004402100370000000000602043b0000006402100370000000000202043b000000b30020009c000001010000213d000000b3022001970000008401100370000000000101043b000700000001001d000000bf01000041000000800010043f0000000001000411000000840010043f0000000001000410000000a40010043f000000c40050043f0000000001000414000000040020008c000000b40000c13d0000000003000031000000200030008c00000020040000390000000004034019000000e00000013d000500000007001d000600000006001d000800000005001d000000b00010009c000000b001008041000000c001100210000000c0011001c7000900000002001d02bd02b30000040f000000800a0000390000006003100270000000b003300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000000cc0000613d000000000801034f000000008908043c000000000a9a043600000000005a004b000000c80000c13d000000000006004b000000d90000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0000000100200190000001030000613d00000009020000290000000805000029000000060600002900000005070000290000001f01400039000000600110018f00000080011001bf000000400010043f000000200030008c000001010000413d000000800100043d000000000001004b0000000003000039000000010300c039000000000031004b000001010000c13d000500000007001d000600000006001d000800000005001d000000c1010000410000000000100443000900000002001d00000004002004430000000001000414000000b00010009c000000b001008041000000c001100210000000c2011001c7000080020200003902bd02b80000040f00000001002001900000025c0000613d000000000101043b000000000001004b00000009020000290000000803000029000001210000c13d0000000001000019000002bf000104300000001f0530018f000000b206300198000000400200043d00000000046200190000010e0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000010a0000c13d000000000005004b0000011b0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000000b00020009c000000b0020080410000004002200210000000000112019f000002bf00010430000000400400043d000000c3010000410000000001140436000300000001001d000000040140003900000000003104350000000001000414000000040020008c0000013a0000613d000000b00040009c000000b00300004100000000030440190000004003300210000000b00010009c000000b001008041000000c001100210000000000131019f000000c4011001c7000400000004001d02bd02b30000040f00000004040000290000006003100270000000b00030019d0000000100200190000001dd0000613d000000c50040009c000001420000413d000000cf01000041000000000010043f0000004101000039000000040010043f000000c401000041000002bf00010430000400000004001d000000400040043f000000c60100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000000b00010009c000000b001008041000000c001100210000000c7011001c7000080050200003902bd02b80000040f00000001002001900000025c0000613d000000000101043b0000000407000029000000840270003900000000030004110000000000320435000000640270003900000008030000290000000000320435000000440270003900000006030000290000000000320435000000e0011002100000000302000029000000000012043500000024017000390000000902000029000000000021043500000084010000390000000000170435000000c80070009c0000013c0000213d0000000501000029000100b00010019b000001440170003900000124027000390000010403700039000000e404700039000000c405700039000000c006700039000500000006001d000000400060043f0000000006070433000200000006001d000000070000006b000001ea0000c13d000000cb060000410000000507000029000000000067043500000001060000290000000000650435000000bd0500004100000000005404350000006004000039000000000043043500000002060000290000000000620435000000000006004b00000003050000290000018b0000613d000000000200001900000000031200190000000004520019000000000404043300000000004304350000002002200039000000000062004b000001840000413d00000000011600190000000000010435000000c601000041000000000010044300000000010004120000000400100443000000400100003900000024001004430000000001000414000000b00010009c000000b001008041000000c001100210000000c7011001c7000080050200003902bd02b80000040f00000001002001900000025c0000613d000000000201043b0000000001000414000000b302200197000000040020008c0000021a0000613d00000002030000290000001f03300039000000d0033001970000000504000029000000b00040009c000000b00400804100000040044002100000008403300039000000b00030009c000000b0030080410000006003300210000000000343019f000000b00010009c000000b001008041000000c001100210000000000131019f02bd02b30000040f0000006003100270000000b003300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000505700029000001c10000613d000000000801034f0000000509000029000000008a08043c0000000009a90436000000000059004b000001bd0000c13d000000000006004b000001ce0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f00000001002001900000021e0000c13d0000001f0530018f000000b206300198000000400200043d00000000046200190000010e0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000001d80000c13d0000010e0000013d000000b0033001970000001f0530018f000000b206300198000000400200043d00000000046200190000010e0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000001e50000c13d0000010e0000013d000000c9060000410000000507000029000000000067043500000001060000290000000000650435000000bd05000041000000000054043500000007040000290000000000430435000000800300003900000000003204350000000206000029000000000061043500000004010000290000016401100039000000000006004b0000000305000029000002040000613d000000000200001900000000031200190000000004520019000000000404043300000000004304350000002002200039000000000062004b000001fd0000413d00000000011600190000000000010435000000c601000041000000000010044300000000010004120000000400100443000000400100003900000024001004430000000001000414000000b00010009c000000b001008041000000c001100210000000c7011001c7000080050200003902bd02b80000040f00000001002001900000025c0000613d000000000201043b0000000001000414000000b302200197000000040020008c0000025d0000c13d0000000003000031000000200030008c000000200400003900000000040340190000001f01400039000000600210018f0000000501200029000000000021004b00000000020000390000000102004039000000ca0010009c0000013c0000213d00000001002001900000013c0000c13d000000400010043f000000200030008c000000090600002900000008040000290000000607000029000001010000413d00000005020000290000000002020433000500000002001d000000ca0020009c000001010000213d000000000200041a000000b4022001970000000505000029000000000252019f000000000020041b0000008002100039000000070300002900000000003204350000006002100039000000bd030000410000000000320435000000400210003900000001030000290000000000320435000000200210003900000000007204350000000000410435000000b00010009c000000b00100804100000040011002100000000002000414000000b00020009c000000b002008041000000c002200210000000000112019f000000cc011001c70000800d020000390000000403000039000000cd04000041000000000700041102bd02b30000040f0000000100200190000001010000613d000000400100043d00000005020000290000000000210435000000b00010009c000000b0010080410000004001100210000000ce011001c7000002be0001042e000000000001042f00000002030000290000001f03300039000000d0033001970000000504000029000000b00040009c000000b0040080410000004004400210000000a403300039000000b00030009c000000b0030080410000006003300210000000000343019f000000b00010009c000000b001008041000000c001100210000000000131019f02bd02b30000040f0000006003100270000000b003300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000005057000290000027d0000613d000000000801034f0000000509000029000000008a08043c0000000009a90436000000000059004b000002790000c13d000000000006004b0000028a0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f00000001002001900000021e0000c13d0000001f0530018f000000b206300198000000400200043d00000000046200190000010e0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000002940000c13d0000010e0000013d000000000001042f00000000050100190000000000200443000000040100003900000005024002700000000002020031000000000121043a0000002004400039000000000031004b0000029d0000413d000000b00030009c000000b00300804100000060013002100000000002000414000000b00020009c000000b002008041000000c002200210000000000112019f000000d1011001c7000000000205001902bd02b80000040f0000000100200190000002b20000613d000000000101043b000000000001042d000000000001042f000002b6002104210000000102000039000000000001042d0000000002000019000000000001042d000002bb002104230000000102000039000000000001042d0000000002000019000000000001042d000002bd00000432000002be0001042e000002bf0001043000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000020000000000000000000000000000010000000100000000000000000000000000000000000000000000000000000000000000000000000000a250c66900000000000000000000000000000000000000000000000000000000a250c66a00000000000000000000000000000000000000000000000000000000f856ddb600000000000000000000000000000000000000000000000000000000fb8406a9000000000000000000000000000000000000000000000000000000002c121921000000000000000000000000000000000000000000000000000000007eccf63e000000000000000000000000000000000000000000000000000000009cdbb18117c71eed51b181d8ae1908b4743526c6dbf099c201f158a1acd5f6718e82e8f6000000000000000000000000000000000000002000000080000000000000000023b872dd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000008000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000042966c680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000000000000010000000000000000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e0200000200000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff3ff7259a7500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff0ba469bc0000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000a00000000000000000000000002fa9ca894982930190727e75500a97d8dc500233a5065e0f3126c48fbe0343c000000000000000000000000000000000000000200000000000000000000000004e487b7100000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe002000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000") diff --git a/core/gethwrappers/ccip/generated_zks/mock_usdc_token_transmitter/mock_usdc_token_transmitter.go b/core/gethwrappers/ccip/generated_zks/mock_usdc_token_transmitter/mock_usdc_token_transmitter.go new file mode 100644 index 00000000000..867c9867901 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/mock_usdc_token_transmitter/mock_usdc_token_transmitter.go @@ -0,0 +1,475 @@ +package mock_usdc_token_transmitter + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var MockE2EUSDCTransmitterMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_version\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_localDomain\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"localDomain\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextAvailableNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"receiveMessage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_shouldSucceed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"recipient\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"messageBody\",\"type\":\"bytes\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"recipient\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"destinationCaller\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"messageBody\",\"type\":\"bytes\"}],\"name\":\"sendMessageWithCaller\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"shouldSucceed\",\"type\":\"bool\"}],\"name\":\"setShouldSucceed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60e060405234801561001057600080fd5b5060405161097338038061097383398101604081905261002f91610076565b63ffffffff928316608052911660a0526000805460ff191660011790556001600160a01b031660c0526100ca565b805163ffffffff8116811461007157600080fd5b919050565b60008060006060848603121561008b57600080fd5b6100948461005d565b92506100a26020850161005d565b60408501519092506001600160a01b03811681146100bf57600080fd5b809150509250925092565b60805160a05160c05161086d610106600039600061024e015260008181610140015261045801526000818160c00152610437015261086d6000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638371744e1161005b5780638371744e146101255780638d3638f41461013e5780639e31ddb614610164578063f7259a75146101a557600080fd5b80630ba469bc1461008d57806354fd4d50146100be57806357ecfd28146100f55780637a64293514610118575b600080fd5b6100a061009b36600461054a565b6101b8565b60405167ffffffffffffffff90911681526020015b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b60405163ffffffff90911681526020016100b5565b6101086101033660046105a4565b6101e1565b60405190151581526020016100b5565b6000546101089060ff1681565b6000546100a090610100900467ffffffffffffffff1681565b7f00000000000000000000000000000000000000000000000000000000000000006100e0565b6101a3610172366004610604565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b005b6100a06101b336600461062d565b6102ba565b600080806101c461036a565b9050336101d688888584868b8b6103cc565b509695505050505050565b6000806101f260b860a48789610695565b6101fb916106bf565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815260609190911c6004820181905260016024830152915073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906340c10f1990604401600060405180830381600087803b15801561029257600080fd5b505af11580156102a6573d6000803e3d6000fd5b505060005460ff1698975050505050505050565b60008361034e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f44657374696e6174696f6e2063616c6c6572206d757374206265206e6f6e7a6560448201527f726f00000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b600061035861036a565b9050336101d688888884868a8a6103cc565b60008054610100900467ffffffffffffffff16610388816001610707565b6000805467ffffffffffffffff92909216610100027fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff909216919091179055919050565b85610433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f526563697069656e74206d757374206265206e6f6e7a65726f000000000000006044820152606401610345565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008986888b8b898960405160200161049699989796959493929190610756565b60405160208183030381529060405290507f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036816040516104d691906107f3565b60405180910390a15050505050505050565b803563ffffffff811681146104fc57600080fd5b919050565b60008083601f84011261051357600080fd5b50813567ffffffffffffffff81111561052b57600080fd5b60208301915083602082850101111561054357600080fd5b9250929050565b6000806000806060858703121561056057600080fd5b610569856104e8565b935060208501359250604085013567ffffffffffffffff81111561058c57600080fd5b61059887828801610501565b95989497509550505050565b600080600080604085870312156105ba57600080fd5b843567ffffffffffffffff808211156105d257600080fd5b6105de88838901610501565b909650945060208701359150808211156105f757600080fd5b5061059887828801610501565b60006020828403121561061657600080fd5b8135801515811461062657600080fd5b9392505050565b60008060008060006080868803121561064557600080fd5b61064e866104e8565b94506020860135935060408601359250606086013567ffffffffffffffff81111561067857600080fd5b61068488828901610501565b969995985093965092949392505050565b600080858511156106a557600080fd5b838611156106b257600080fd5b5050820193919092039150565b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000081358181169160148510156106ff5780818660140360031b1b83161692505b505092915050565b67ffffffffffffffff81811683821601908082111561074f577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5092915050565b60007fffffffff00000000000000000000000000000000000000000000000000000000808c60e01b168352808b60e01b166004840152808a60e01b166008840152507fffffffffffffffff0000000000000000000000000000000000000000000000008860c01b16600c83015286601483015285603483015284605483015282846074840137506000910160740190815298975050505050505050565b60006020808352835180602085015260005b8181101561082157858101830151858201604001528201610805565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116850101925050509291505056fea164736f6c6343000818000a", +} + +var MockE2EUSDCTransmitterABI = MockE2EUSDCTransmitterMetaData.ABI + +var MockE2EUSDCTransmitterBin = MockE2EUSDCTransmitterMetaData.Bin + +func DeployMockE2EUSDCTransmitter(auth *bind.TransactOpts, backend bind.ContractBackend, _version uint32, _localDomain uint32, token common.Address) (common.Address, *generated_zks.Transaction, *MockE2EUSDCTransmitter, error) { + parsed, err := MockE2EUSDCTransmitterMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(MockE2EUSDCTransmitterZKBin), backend, _version, _localDomain, token) + contractReturn := &MockE2EUSDCTransmitter{address: address, abi: *parsed, MockE2EUSDCTransmitterCaller: MockE2EUSDCTransmitterCaller{contract: contractBind}, MockE2EUSDCTransmitterTransactor: MockE2EUSDCTransmitterTransactor{contract: contractBind}, MockE2EUSDCTransmitterFilterer: MockE2EUSDCTransmitterFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(MockE2EUSDCTransmitterBin), backend, _version, _localDomain, token) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &MockE2EUSDCTransmitter{address: address, abi: *parsed, MockE2EUSDCTransmitterCaller: MockE2EUSDCTransmitterCaller{contract: contract}, MockE2EUSDCTransmitterTransactor: MockE2EUSDCTransmitterTransactor{contract: contract}, MockE2EUSDCTransmitterFilterer: MockE2EUSDCTransmitterFilterer{contract: contract}}, nil +} + +type MockE2EUSDCTransmitter struct { + address common.Address + abi abi.ABI + MockE2EUSDCTransmitterCaller + MockE2EUSDCTransmitterTransactor + MockE2EUSDCTransmitterFilterer +} + +type MockE2EUSDCTransmitterCaller struct { + contract *bind.BoundContract +} + +type MockE2EUSDCTransmitterTransactor struct { + contract *bind.BoundContract +} + +type MockE2EUSDCTransmitterFilterer struct { + contract *bind.BoundContract +} + +type MockE2EUSDCTransmitterSession struct { + Contract *MockE2EUSDCTransmitter + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type MockE2EUSDCTransmitterCallerSession struct { + Contract *MockE2EUSDCTransmitterCaller + CallOpts bind.CallOpts +} + +type MockE2EUSDCTransmitterTransactorSession struct { + Contract *MockE2EUSDCTransmitterTransactor + TransactOpts bind.TransactOpts +} + +type MockE2EUSDCTransmitterRaw struct { + Contract *MockE2EUSDCTransmitter +} + +type MockE2EUSDCTransmitterCallerRaw struct { + Contract *MockE2EUSDCTransmitterCaller +} + +type MockE2EUSDCTransmitterTransactorRaw struct { + Contract *MockE2EUSDCTransmitterTransactor +} + +func NewMockE2EUSDCTransmitter(address common.Address, backend bind.ContractBackend) (*MockE2EUSDCTransmitter, error) { + abi, err := abi.JSON(strings.NewReader(MockE2EUSDCTransmitterABI)) + if err != nil { + return nil, err + } + contract, err := bindMockE2EUSDCTransmitter(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &MockE2EUSDCTransmitter{address: address, abi: abi, MockE2EUSDCTransmitterCaller: MockE2EUSDCTransmitterCaller{contract: contract}, MockE2EUSDCTransmitterTransactor: MockE2EUSDCTransmitterTransactor{contract: contract}, MockE2EUSDCTransmitterFilterer: MockE2EUSDCTransmitterFilterer{contract: contract}}, nil +} + +func NewMockE2EUSDCTransmitterCaller(address common.Address, caller bind.ContractCaller) (*MockE2EUSDCTransmitterCaller, error) { + contract, err := bindMockE2EUSDCTransmitter(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &MockE2EUSDCTransmitterCaller{contract: contract}, nil +} + +func NewMockE2EUSDCTransmitterTransactor(address common.Address, transactor bind.ContractTransactor) (*MockE2EUSDCTransmitterTransactor, error) { + contract, err := bindMockE2EUSDCTransmitter(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &MockE2EUSDCTransmitterTransactor{contract: contract}, nil +} + +func NewMockE2EUSDCTransmitterFilterer(address common.Address, filterer bind.ContractFilterer) (*MockE2EUSDCTransmitterFilterer, error) { + contract, err := bindMockE2EUSDCTransmitter(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &MockE2EUSDCTransmitterFilterer{contract: contract}, nil +} + +func bindMockE2EUSDCTransmitter(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := MockE2EUSDCTransmitterMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MockE2EUSDCTransmitter.Contract.MockE2EUSDCTransmitterCaller.contract.Call(opts, result, method, params...) +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MockE2EUSDCTransmitter.Contract.MockE2EUSDCTransmitterTransactor.contract.Transfer(opts) +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MockE2EUSDCTransmitter.Contract.MockE2EUSDCTransmitterTransactor.contract.Transact(opts, method, params...) +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MockE2EUSDCTransmitter.Contract.contract.Call(opts, result, method, params...) +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MockE2EUSDCTransmitter.Contract.contract.Transfer(opts) +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MockE2EUSDCTransmitter.Contract.contract.Transact(opts, method, params...) +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterCaller) LocalDomain(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _MockE2EUSDCTransmitter.contract.Call(opts, &out, "localDomain") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterSession) LocalDomain() (uint32, error) { + return _MockE2EUSDCTransmitter.Contract.LocalDomain(&_MockE2EUSDCTransmitter.CallOpts) +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterCallerSession) LocalDomain() (uint32, error) { + return _MockE2EUSDCTransmitter.Contract.LocalDomain(&_MockE2EUSDCTransmitter.CallOpts) +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterCaller) NextAvailableNonce(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _MockE2EUSDCTransmitter.contract.Call(opts, &out, "nextAvailableNonce") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterSession) NextAvailableNonce() (uint64, error) { + return _MockE2EUSDCTransmitter.Contract.NextAvailableNonce(&_MockE2EUSDCTransmitter.CallOpts) +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterCallerSession) NextAvailableNonce() (uint64, error) { + return _MockE2EUSDCTransmitter.Contract.NextAvailableNonce(&_MockE2EUSDCTransmitter.CallOpts) +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterCaller) SShouldSucceed(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _MockE2EUSDCTransmitter.contract.Call(opts, &out, "s_shouldSucceed") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterSession) SShouldSucceed() (bool, error) { + return _MockE2EUSDCTransmitter.Contract.SShouldSucceed(&_MockE2EUSDCTransmitter.CallOpts) +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterCallerSession) SShouldSucceed() (bool, error) { + return _MockE2EUSDCTransmitter.Contract.SShouldSucceed(&_MockE2EUSDCTransmitter.CallOpts) +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterCaller) Version(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _MockE2EUSDCTransmitter.contract.Call(opts, &out, "version") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterSession) Version() (uint32, error) { + return _MockE2EUSDCTransmitter.Contract.Version(&_MockE2EUSDCTransmitter.CallOpts) +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterCallerSession) Version() (uint32, error) { + return _MockE2EUSDCTransmitter.Contract.Version(&_MockE2EUSDCTransmitter.CallOpts) +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterTransactor) ReceiveMessage(opts *bind.TransactOpts, message []byte, arg1 []byte) (*types.Transaction, error) { + return _MockE2EUSDCTransmitter.contract.Transact(opts, "receiveMessage", message, arg1) +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterSession) ReceiveMessage(message []byte, arg1 []byte) (*types.Transaction, error) { + return _MockE2EUSDCTransmitter.Contract.ReceiveMessage(&_MockE2EUSDCTransmitter.TransactOpts, message, arg1) +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterTransactorSession) ReceiveMessage(message []byte, arg1 []byte) (*types.Transaction, error) { + return _MockE2EUSDCTransmitter.Contract.ReceiveMessage(&_MockE2EUSDCTransmitter.TransactOpts, message, arg1) +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterTransactor) SendMessage(opts *bind.TransactOpts, destinationDomain uint32, recipient [32]byte, messageBody []byte) (*types.Transaction, error) { + return _MockE2EUSDCTransmitter.contract.Transact(opts, "sendMessage", destinationDomain, recipient, messageBody) +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterSession) SendMessage(destinationDomain uint32, recipient [32]byte, messageBody []byte) (*types.Transaction, error) { + return _MockE2EUSDCTransmitter.Contract.SendMessage(&_MockE2EUSDCTransmitter.TransactOpts, destinationDomain, recipient, messageBody) +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterTransactorSession) SendMessage(destinationDomain uint32, recipient [32]byte, messageBody []byte) (*types.Transaction, error) { + return _MockE2EUSDCTransmitter.Contract.SendMessage(&_MockE2EUSDCTransmitter.TransactOpts, destinationDomain, recipient, messageBody) +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterTransactor) SendMessageWithCaller(opts *bind.TransactOpts, destinationDomain uint32, recipient [32]byte, destinationCaller [32]byte, messageBody []byte) (*types.Transaction, error) { + return _MockE2EUSDCTransmitter.contract.Transact(opts, "sendMessageWithCaller", destinationDomain, recipient, destinationCaller, messageBody) +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterSession) SendMessageWithCaller(destinationDomain uint32, recipient [32]byte, destinationCaller [32]byte, messageBody []byte) (*types.Transaction, error) { + return _MockE2EUSDCTransmitter.Contract.SendMessageWithCaller(&_MockE2EUSDCTransmitter.TransactOpts, destinationDomain, recipient, destinationCaller, messageBody) +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterTransactorSession) SendMessageWithCaller(destinationDomain uint32, recipient [32]byte, destinationCaller [32]byte, messageBody []byte) (*types.Transaction, error) { + return _MockE2EUSDCTransmitter.Contract.SendMessageWithCaller(&_MockE2EUSDCTransmitter.TransactOpts, destinationDomain, recipient, destinationCaller, messageBody) +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterTransactor) SetShouldSucceed(opts *bind.TransactOpts, shouldSucceed bool) (*types.Transaction, error) { + return _MockE2EUSDCTransmitter.contract.Transact(opts, "setShouldSucceed", shouldSucceed) +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterSession) SetShouldSucceed(shouldSucceed bool) (*types.Transaction, error) { + return _MockE2EUSDCTransmitter.Contract.SetShouldSucceed(&_MockE2EUSDCTransmitter.TransactOpts, shouldSucceed) +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterTransactorSession) SetShouldSucceed(shouldSucceed bool) (*types.Transaction, error) { + return _MockE2EUSDCTransmitter.Contract.SetShouldSucceed(&_MockE2EUSDCTransmitter.TransactOpts, shouldSucceed) +} + +type MockE2EUSDCTransmitterMessageSentIterator struct { + Event *MockE2EUSDCTransmitterMessageSent + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MockE2EUSDCTransmitterMessageSentIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MockE2EUSDCTransmitterMessageSent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MockE2EUSDCTransmitterMessageSent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MockE2EUSDCTransmitterMessageSentIterator) Error() error { + return it.fail +} + +func (it *MockE2EUSDCTransmitterMessageSentIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MockE2EUSDCTransmitterMessageSent struct { + Message []byte + Raw types.Log +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterFilterer) FilterMessageSent(opts *bind.FilterOpts) (*MockE2EUSDCTransmitterMessageSentIterator, error) { + + logs, sub, err := _MockE2EUSDCTransmitter.contract.FilterLogs(opts, "MessageSent") + if err != nil { + return nil, err + } + return &MockE2EUSDCTransmitterMessageSentIterator{contract: _MockE2EUSDCTransmitter.contract, event: "MessageSent", logs: logs, sub: sub}, nil +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterFilterer) WatchMessageSent(opts *bind.WatchOpts, sink chan<- *MockE2EUSDCTransmitterMessageSent) (event.Subscription, error) { + + logs, sub, err := _MockE2EUSDCTransmitter.contract.WatchLogs(opts, "MessageSent") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MockE2EUSDCTransmitterMessageSent) + if err := _MockE2EUSDCTransmitter.contract.UnpackLog(event, "MessageSent", 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 +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitterFilterer) ParseMessageSent(log types.Log) (*MockE2EUSDCTransmitterMessageSent, error) { + event := new(MockE2EUSDCTransmitterMessageSent) + if err := _MockE2EUSDCTransmitter.contract.UnpackLog(event, "MessageSent", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitter) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _MockE2EUSDCTransmitter.abi.Events["MessageSent"].ID: + return _MockE2EUSDCTransmitter.ParseMessageSent(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (MockE2EUSDCTransmitterMessageSent) Topic() common.Hash { + return common.HexToHash("0x8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036") +} + +func (_MockE2EUSDCTransmitter *MockE2EUSDCTransmitter) Address() common.Address { + return _MockE2EUSDCTransmitter.address +} + +type MockE2EUSDCTransmitterInterface interface { + LocalDomain(opts *bind.CallOpts) (uint32, error) + + NextAvailableNonce(opts *bind.CallOpts) (uint64, error) + + SShouldSucceed(opts *bind.CallOpts) (bool, error) + + Version(opts *bind.CallOpts) (uint32, error) + + ReceiveMessage(opts *bind.TransactOpts, message []byte, arg1 []byte) (*types.Transaction, error) + + SendMessage(opts *bind.TransactOpts, destinationDomain uint32, recipient [32]byte, messageBody []byte) (*types.Transaction, error) + + SendMessageWithCaller(opts *bind.TransactOpts, destinationDomain uint32, recipient [32]byte, destinationCaller [32]byte, messageBody []byte) (*types.Transaction, error) + + SetShouldSucceed(opts *bind.TransactOpts, shouldSucceed bool) (*types.Transaction, error) + + FilterMessageSent(opts *bind.FilterOpts) (*MockE2EUSDCTransmitterMessageSentIterator, error) + + WatchMessageSent(opts *bind.WatchOpts, sink chan<- *MockE2EUSDCTransmitterMessageSent) (event.Subscription, error) + + ParseMessageSent(log types.Log) (*MockE2EUSDCTransmitterMessageSent, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var MockE2EUSDCTransmitterZKBin string = ("0x0001000000000002000b00000000000200000000000103550000006003100270000000bb033001970000000100200190000000200000c13d0000008002000039000000400020043f000000040030008c000002a00000413d000000000201043b000000e002200270000000c00020009c0000005d0000213d000000c60020009c000000740000213d000000c90020009c000000b10000613d000000ca0020009c000002a00000c13d0000000001000416000000000001004b000002a00000c13d0000000001000412000b00000001001d000a00000000003d0000800501000039000000440300003900000000040004150000000b0440008a0000006d0000013d0000000002000416000000000002004b000002a00000c13d0000001f02300039000000bc02200197000000e002200039000000400020043f0000001f0430018f000000bd05300198000000e002500039000000310000613d000000e006000039000000000701034f000000007807043c0000000006860436000000000026004b0000002d0000c13d000000000004004b0000003e0000613d000000000151034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000600030008c000002a00000413d000000e00100043d000000bb0010009c000002a00000213d000001000200043d000000bb0020009c000002a00000213d000001200300043d000000be0030009c000002a00000213d000000800010043f000000a00020043f000000000500041a000000e40450019700000001044001bf000000000040041b000000c00030043f0000014000000443000001600010044300000020010000390000018000100443000001a0002004430000004002000039000001c000200443000001e000300443000001000010044300000003010000390000012000100443000000bf01000041000002e70001042e000000c10020009c000000820000213d000000c40020009c0000015e0000613d000000c50020009c000002a00000c13d0000000001000416000000000001004b000002a00000c13d0000000001000412000900000001001d000800200000003d000080050100003900000044030000390000000004000415000000090440008a0000000504400210000000ce0200004102e602c30000040f000000bb01100197000000800010043f000000da01000041000002e70001042e000000c70020009c000001670000613d000000c80020009c000002a00000c13d0000000001000416000000000001004b000002a00000c13d000000000100041a000000ff001001900000000001000039000000010100c039000000800010043f000000da01000041000002e70001042e000000c20020009c000001de0000613d000000c30020009c000002a00000c13d000000840030008c000002a00000413d0000000002000416000000000002004b000002a00000c13d0000000402100370000000000602043b000000bb0060009c000002a00000213d0000004402100370000000000502043b0000002402100370000000000702043b0000006402100370000000000202043b000000cb0020009c000002a00000213d0000002304200039000000000034004b000002a00000813d0000000408200039000000000181034f000000000401043b000000cb0040009c000002a00000213d00000000014200190000002401100039000000000031004b000002a00000213d000000000005004b000001f00000c13d000000d601000041000000800010043f0000002001000039000000840010043f0000002201000039000000a40010043f000000d701000041000000c40010043f000000d801000041000000e40010043f000000d901000041000002e800010430000000640030008c000002a00000413d0000000002000416000000000002004b000002a00000c13d0000000402100370000000000502043b000000bb0050009c000002a00000213d0000002402100370000000000602043b0000004402100370000000000202043b000000cb0020009c000002a00000213d0000002304200039000000000034004b000002a00000813d0000000407200039000000000171034f000000000401043b000000cb0040009c000002a00000213d00000000014200190000002401100039000000000031004b000002a00000213d000000000100041a0000000808100270000000cb03800197000000cb0030009c000001f50000613d000000cc0110019700000008023002100000010002200039000000cd02200197000000000112019f000000000010041b000000000006004b0000020a0000613d000300000008001d000400000007001d000500000006001d000600000005001d000700000004001d000200000003001d000000ce0100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000000bb0010009c000000bb01008041000000c001100210000000cf011001c7000080050200003902e602e10000040f00000001002001900000026d0000613d000000000101043b000000e001100210000000a00010043f000000ce01000041000000000010044300000000010004120000000400100443000000200100003900000024001004430000000001000414000000bb0010009c000000bb01008041000000c001100210000000cf011001c7000080050200003902e602e10000040f00000001002001900000026d0000613d000000000101043b000000e001100210000000a40010043f0000000601000029000000e001100210000000a80010043f0000000301000029000000c001100210000000ac0010043f0000000001000411000000b40010043f0000000501000029000000d40010043f0000000702000029000000e5032001980000001f0420018f000001140230003900000004050000290000002005500039000000f40000043f00000000055003670000011b0000613d0000011406000039000000000705034f000000007807043c0000000006860436000000000026004b000001170000c13d000000000004004b000001280000613d000000000335034f0000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003204350000000703000029000001140230003900000000000204350000007402300039000000800020043f000000b302300039000000e504200197000000df0040009c000002670000813d0000008002400039000000400020043f00000020030000390000000000320435000000a005400039000000800300043d0000000000350435000000c004400039000000000003004b000001430000613d00000000050000190000000006450019000000a007500039000000000707043300000000007604350000002005500039000000000035004b0000013c0000413d0000001f05300039000000e5015001970000000003430019000000000003043500000040011000390000006003100210000000d10010009c000000d203008041000000bb0020009c000000bb020080410000004001200210000000000113019f0000000002000414000000bb0020009c000000bb02008041000000c0022002100000000001210019000000d30110009a0000800d020000390000000103000039000000d40400004102e602dc0000040f0000000100200190000002a00000613d000000400100043d00000002020000290000029a0000013d0000000001000416000000000001004b000002a00000c13d000000000100041a0000000801100270000000cb01100197000000800010043f000000da01000041000002e70001042e000000440030008c000002a00000413d0000000002000416000000000002004b000002a00000c13d0000000402100370000000000402043b000000cb0040009c000002a00000213d0000002302400039000000000032004b000002a00000813d0000000406400039000000000261034f000000000202043b000000cb0020009c000002a00000213d00000000042400190000002404400039000000000034004b000002a00000213d0000002404100370000000000404043b000000cb0040009c000002a00000213d0000002305400039000000000035004b000002a00000813d0000000405400039000000000151034f000000000101043b000000cb0010009c000002a00000213d000000b80020008c000002a00000413d00000000011400190000002401100039000000000031004b000002a00000213d000700000006001d000000ce01000041000000000010044300000000010004120000000400100443000000400100003900000024001004430000000001000414000000bb0010009c000000bb01008041000000c001100210000000cf011001c7000080050200003902e602e10000040f00000001002001900000026d0000613d000000000101043b000000db020000410000000000200443000000be01100197000600000001001d00000004001004430000000001000414000000bb0010009c000000bb01008041000000c001100210000000dc011001c7000080020200003902e602e10000040f00000001002001900000026d0000613d000000000101043b000000000001004b0000000702000029000002a00000613d000000400400043d000000dd010000410000000000140435000000c4012000390000000001100367000000000101043b0000002402400039000000010300003900000000003204350000006001100270000700000004001d0000000402400039000000000012043500000000010004140000000602000029000000040020008c000001cf0000613d0000000702000029000000bb0020009c000000bb020080410000004002200210000000bb0010009c000000bb01008041000000c001100210000000000121019f000000de011001c7000000060200002902e602dc0000040f0000000100200190000002a20000613d0000000701000029000000cb0010009c000002670000213d0000000702000029000000400020043f000000000100041a000000ff001001900000000001000039000000010100c0390000000000120435000000bb0020009c000000bb020080410000004001200210000000d5011001c7000002e70001042e000000240030008c000002a00000413d0000000002000416000000000002004b000002a00000c13d0000000401100370000000000101043b000000000001004b0000000002000039000000010200c039000000000021004b000002a00000c13d000000000300041a000000e402300197000000000112019f000000000010041b0000000001000019000002e70001042e000000000100041a0000000803100270000000cb02300197000000cb0020009c000001fb0000c13d000000e001000041000000000010043f0000001101000039000000040010043f000000e101000041000002e800010430000200000003001d000300000008001d000500000006001d000600000005001d000700000004001d000000cc01100197000100000002001d00000008022002100000010002200039000000cd02200197000000000112019f000000000010041b000400000007001d000000000007004b000002140000c13d000000d601000041000000800010043f0000002001000039000000840010043f0000001901000039000000a40010043f000000e201000041000000c40010043f000000e301000041000002e800010430000000ce0100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000000bb0010009c000000bb01008041000000c001100210000000cf011001c7000080050200003902e602e10000040f00000001002001900000026d0000613d000000000101043b000000e001100210000000a00010043f000000ce01000041000000000010044300000000010004120000000400100443000000200100003900000024001004430000000001000414000000bb0010009c000000bb01008041000000c001100210000000cf011001c7000080050200003902e602e10000040f00000001002001900000026d0000613d000000000101043b000000e001100210000000a40010043f0000000501000029000000e001100210000000a80010043f0000000201000029000000c001100210000000ac0010043f0000000001000411000000b40010043f0000000401000029000000d40010043f0000000601000029000000f40010043f0000000702000029000000e5032001980000001f0420018f0000011402300039000000030500002900000020055000390000000005500367000002510000613d0000011406000039000000000705034f000000007807043c0000000006860436000000000026004b0000024d0000c13d000000000004004b0000025e0000613d000000000335034f0000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003204350000000703000029000001140230003900000000000204350000007402300039000000800020043f000000b302300039000000e504200197000000d00040009c0000026e0000a13d000000e001000041000000000010043f0000004101000039000000040010043f000000e101000041000002e800010430000000000001042f0000008002400039000000400020043f00000020030000390000000000320435000000a005400039000000800300043d0000000000350435000000c004400039000000000003004b000002800000613d00000000050000190000000006450019000000a007500039000000000707043300000000007604350000002005500039000000000035004b000002790000413d0000001f05300039000000e5015001970000000003430019000000000003043500000040011000390000006003100210000000d10010009c000000d203008041000000bb0020009c000000bb020080410000004001200210000000000113019f0000000002000414000000bb0020009c000000bb02008041000000c0022002100000000001210019000000d30110009a0000800d020000390000000103000039000000d40400004102e602dc0000040f0000000100200190000002a00000613d000000400100043d00000001020000290000000000210435000000bb0010009c000000bb010080410000004001100210000000d5011001c7000002e70001042e0000000001000019000002e80001043000000060061002700000001f0460018f000000bd05600198000000400200043d0000000003520019000002ae0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b000002aa0000c13d000000bb06600197000000000004004b000002bc0000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000006001600210000000bb0020009c000000bb020080410000004002200210000000000112019f000002e800010430000000000001042f00000000050100190000000000200443000000040100003900000005024002700000000002020031000000000121043a0000002004400039000000000031004b000002c60000413d000000bb0030009c000000bb0300804100000060013002100000000002000414000000bb0020009c000000bb02008041000000c002200210000000000112019f000000e6011001c7000000000205001902e602e10000040f0000000100200190000002db0000613d000000000101043b000000000001042d000000000001042f000002df002104210000000102000039000000000001042d0000000002000019000000000001042d000002e4002104230000000102000039000000000001042d0000000002000019000000000001042d000002e600000432000002e70001042e000002e80001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0000000200000000000000000000000000000100000001000000000000000000000000000000000000000000000000000000000000000000000000008371744d000000000000000000000000000000000000000000000000000000009e31ddb5000000000000000000000000000000000000000000000000000000009e31ddb600000000000000000000000000000000000000000000000000000000f7259a75000000000000000000000000000000000000000000000000000000008371744e000000000000000000000000000000000000000000000000000000008d3638f40000000000000000000000000000000000000000000000000000000057ecfd270000000000000000000000000000000000000000000000000000000057ecfd28000000000000000000000000000000000000000000000000000000007a642935000000000000000000000000000000000000000000000000000000000ba469bc0000000000000000000000000000000000000000000000000000000054fd4d50000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff0000000000000000000000000000000000000000000000ffffffffffffffff00310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e0200000200000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000ffffffff000000000000000000000000fe000000000000000000000000000000000000000000000000000000000000008c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036000000000000000000000000000000000000002000000000000000000000000008c379a00000000000000000000000000000000000000000000000000000000044657374696e6174696f6e2063616c6c6572206d757374206265206e6f6e7a65726f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008400000080000000000000000000000000000000000000000000000000000000200000008000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000040c10f19000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff804e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000526563697069656e74206d757374206265206e6f6e7a65726f000000000000000000000000000000000000000000000000000064000000800000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00200000200000000000000000000000000000000000000000000000000000000") diff --git a/core/gethwrappers/ccip/generated_zks/mock_v3_aggregator_contract/mock_v3_aggregator_contract.go b/core/gethwrappers/ccip/generated_zks/mock_v3_aggregator_contract/mock_v3_aggregator_contract.go new file mode 100644 index 00000000000..1a78308baf5 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/mock_v3_aggregator_contract/mock_v3_aggregator_contract.go @@ -0,0 +1,801 @@ +package mock_v3_aggregator_contract + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var MockV3AggregatorMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_decimals\",\"type\":\"uint8\"},{\"internalType\":\"int256\",\"name\":\"_initialAnswer\",\"type\":\"int256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"int256\",\"name\":\"current\",\"type\":\"int256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"}],\"name\":\"AnswerUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"roundId\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"startedBy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"}],\"name\":\"NewRound\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"description\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getAnswer\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint80\",\"name\":\"_roundId\",\"type\":\"uint80\"}],\"name\":\"getRoundData\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"roundId\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"answeredInRound\",\"type\":\"uint80\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestAnswer\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestRound\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestRoundData\",\"outputs\":[{\"internalType\":\"uint80\",\"name\":\"roundId\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"startedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"updatedAt\",\"type\":\"uint256\"},{\"internalType\":\"uint80\",\"name\":\"answeredInRound\",\"type\":\"uint80\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"_answer\",\"type\":\"int256\"}],\"name\":\"updateAnswer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint80\",\"name\":\"_roundId\",\"type\":\"uint80\"},{\"internalType\":\"int256\",\"name\":\"_answer\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startedAt\",\"type\":\"uint256\"}],\"name\":\"updateRoundData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b5060405161059638038061059683398101604081905261002f916100a4565b6000805460ff191660ff84161790556100478161004e565b50506100ff565b60018190554260025560038054906000610067836100d8565b9091555050600380546000908152600460209081526040808320949094558254825260058152838220429081905592548252600690529190912055565b600080604083850312156100b757600080fd5b825160ff811681146100c857600080fd5b6020939093015192949293505050565b6000600182016100f857634e487b7160e01b600052601160045260246000fd5b5060010190565b6104888061010e6000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80638205bf6a11610081578063b5ab58dc1161005b578063b5ab58dc1461025b578063b633620c1461027b578063feaf968c1461029b57600080fd5b80638205bf6a146101c15780639a6fc8f5146101ca578063a87a20ce1461024857600080fd5b806354fd4d50116100b257806354fd4d5014610171578063668a0f02146101795780637284e4161461018257600080fd5b8063313ce567146100d95780634aa2011f146100fd57806350d25bcd1461015a575b600080fd5b6000546100e69060ff1681565b60405160ff90911681526020015b60405180910390f35b61015861010b36600461033b565b69ffffffffffffffffffff90931660038181556001849055600283905560009182526004602090815260408084209590955581548352600581528483209390935554815260069091522055565b005b61016360015481565b6040519081526020016100f4565b610163600081565b61016360035481565b604080518082018252601f81527f76302e382f74657374732f4d6f636b563341676772656761746f722e736f6c00602082015290516100f49190610374565b61016360025481565b6102116101d83660046103e1565b69ffffffffffffffffffff8116600090815260046020908152604080832054600683528184205460059093529220549293919290918490565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016100f4565b610158610256366004610403565b6102c6565b610163610269366004610403565b60046020526000908152604090205481565b610163610289366004610403565b60056020526000908152604090205481565b6003546000818152600460209081526040808320546006835281842054600590935292205483610211565b600181905542600255600380549060006102df8361041c565b9091555050600380546000908152600460209081526040808320949094558254825260058152838220429081905592548252600690529190912055565b803569ffffffffffffffffffff8116811461033657600080fd5b919050565b6000806000806080858703121561035157600080fd5b61035a8561031c565b966020860135965060408601359560600135945092505050565b60006020808352835180602085015260005b818110156103a257858101830151858201604001528201610386565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b6000602082840312156103f357600080fd5b6103fc8261031c565b9392505050565b60006020828403121561041557600080fd5b5035919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610474577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b506001019056fea164736f6c6343000818000a", +} + +var MockV3AggregatorABI = MockV3AggregatorMetaData.ABI + +var MockV3AggregatorBin = MockV3AggregatorMetaData.Bin + +func DeployMockV3Aggregator(auth *bind.TransactOpts, backend bind.ContractBackend, _decimals uint8, _initialAnswer *big.Int) (common.Address, *generated_zks.Transaction, *MockV3Aggregator, error) { + parsed, err := MockV3AggregatorMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(MockV3AggregatorZKBin), backend, _decimals, _initialAnswer) + contractReturn := &MockV3Aggregator{address: address, abi: *parsed, MockV3AggregatorCaller: MockV3AggregatorCaller{contract: contractBind}, MockV3AggregatorTransactor: MockV3AggregatorTransactor{contract: contractBind}, MockV3AggregatorFilterer: MockV3AggregatorFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(MockV3AggregatorBin), backend, _decimals, _initialAnswer) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &MockV3Aggregator{address: address, abi: *parsed, MockV3AggregatorCaller: MockV3AggregatorCaller{contract: contract}, MockV3AggregatorTransactor: MockV3AggregatorTransactor{contract: contract}, MockV3AggregatorFilterer: MockV3AggregatorFilterer{contract: contract}}, nil +} + +type MockV3Aggregator struct { + address common.Address + abi abi.ABI + MockV3AggregatorCaller + MockV3AggregatorTransactor + MockV3AggregatorFilterer +} + +type MockV3AggregatorCaller struct { + contract *bind.BoundContract +} + +type MockV3AggregatorTransactor struct { + contract *bind.BoundContract +} + +type MockV3AggregatorFilterer struct { + contract *bind.BoundContract +} + +type MockV3AggregatorSession struct { + Contract *MockV3Aggregator + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type MockV3AggregatorCallerSession struct { + Contract *MockV3AggregatorCaller + CallOpts bind.CallOpts +} + +type MockV3AggregatorTransactorSession struct { + Contract *MockV3AggregatorTransactor + TransactOpts bind.TransactOpts +} + +type MockV3AggregatorRaw struct { + Contract *MockV3Aggregator +} + +type MockV3AggregatorCallerRaw struct { + Contract *MockV3AggregatorCaller +} + +type MockV3AggregatorTransactorRaw struct { + Contract *MockV3AggregatorTransactor +} + +func NewMockV3Aggregator(address common.Address, backend bind.ContractBackend) (*MockV3Aggregator, error) { + abi, err := abi.JSON(strings.NewReader(MockV3AggregatorABI)) + if err != nil { + return nil, err + } + contract, err := bindMockV3Aggregator(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &MockV3Aggregator{address: address, abi: abi, MockV3AggregatorCaller: MockV3AggregatorCaller{contract: contract}, MockV3AggregatorTransactor: MockV3AggregatorTransactor{contract: contract}, MockV3AggregatorFilterer: MockV3AggregatorFilterer{contract: contract}}, nil +} + +func NewMockV3AggregatorCaller(address common.Address, caller bind.ContractCaller) (*MockV3AggregatorCaller, error) { + contract, err := bindMockV3Aggregator(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &MockV3AggregatorCaller{contract: contract}, nil +} + +func NewMockV3AggregatorTransactor(address common.Address, transactor bind.ContractTransactor) (*MockV3AggregatorTransactor, error) { + contract, err := bindMockV3Aggregator(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &MockV3AggregatorTransactor{contract: contract}, nil +} + +func NewMockV3AggregatorFilterer(address common.Address, filterer bind.ContractFilterer) (*MockV3AggregatorFilterer, error) { + contract, err := bindMockV3Aggregator(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &MockV3AggregatorFilterer{contract: contract}, nil +} + +func bindMockV3Aggregator(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := MockV3AggregatorMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_MockV3Aggregator *MockV3AggregatorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MockV3Aggregator.Contract.MockV3AggregatorCaller.contract.Call(opts, result, method, params...) +} + +func (_MockV3Aggregator *MockV3AggregatorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MockV3Aggregator.Contract.MockV3AggregatorTransactor.contract.Transfer(opts) +} + +func (_MockV3Aggregator *MockV3AggregatorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MockV3Aggregator.Contract.MockV3AggregatorTransactor.contract.Transact(opts, method, params...) +} + +func (_MockV3Aggregator *MockV3AggregatorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MockV3Aggregator.Contract.contract.Call(opts, result, method, params...) +} + +func (_MockV3Aggregator *MockV3AggregatorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MockV3Aggregator.Contract.contract.Transfer(opts) +} + +func (_MockV3Aggregator *MockV3AggregatorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MockV3Aggregator.Contract.contract.Transact(opts, method, params...) +} + +func (_MockV3Aggregator *MockV3AggregatorCaller) Decimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _MockV3Aggregator.contract.Call(opts, &out, "decimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +func (_MockV3Aggregator *MockV3AggregatorSession) Decimals() (uint8, error) { + return _MockV3Aggregator.Contract.Decimals(&_MockV3Aggregator.CallOpts) +} + +func (_MockV3Aggregator *MockV3AggregatorCallerSession) Decimals() (uint8, error) { + return _MockV3Aggregator.Contract.Decimals(&_MockV3Aggregator.CallOpts) +} + +func (_MockV3Aggregator *MockV3AggregatorCaller) Description(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _MockV3Aggregator.contract.Call(opts, &out, "description") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_MockV3Aggregator *MockV3AggregatorSession) Description() (string, error) { + return _MockV3Aggregator.Contract.Description(&_MockV3Aggregator.CallOpts) +} + +func (_MockV3Aggregator *MockV3AggregatorCallerSession) Description() (string, error) { + return _MockV3Aggregator.Contract.Description(&_MockV3Aggregator.CallOpts) +} + +func (_MockV3Aggregator *MockV3AggregatorCaller) GetAnswer(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) { + var out []interface{} + err := _MockV3Aggregator.contract.Call(opts, &out, "getAnswer", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_MockV3Aggregator *MockV3AggregatorSession) GetAnswer(arg0 *big.Int) (*big.Int, error) { + return _MockV3Aggregator.Contract.GetAnswer(&_MockV3Aggregator.CallOpts, arg0) +} + +func (_MockV3Aggregator *MockV3AggregatorCallerSession) GetAnswer(arg0 *big.Int) (*big.Int, error) { + return _MockV3Aggregator.Contract.GetAnswer(&_MockV3Aggregator.CallOpts, arg0) +} + +func (_MockV3Aggregator *MockV3AggregatorCaller) GetRoundData(opts *bind.CallOpts, _roundId *big.Int) (GetRoundData, + + error) { + var out []interface{} + err := _MockV3Aggregator.contract.Call(opts, &out, "getRoundData", _roundId) + + outstruct := new(GetRoundData) + if err != nil { + return *outstruct, err + } + + outstruct.RoundId = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.Answer = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.StartedAt = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + outstruct.UpdatedAt = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) + outstruct.AnsweredInRound = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +func (_MockV3Aggregator *MockV3AggregatorSession) GetRoundData(_roundId *big.Int) (GetRoundData, + + error) { + return _MockV3Aggregator.Contract.GetRoundData(&_MockV3Aggregator.CallOpts, _roundId) +} + +func (_MockV3Aggregator *MockV3AggregatorCallerSession) GetRoundData(_roundId *big.Int) (GetRoundData, + + error) { + return _MockV3Aggregator.Contract.GetRoundData(&_MockV3Aggregator.CallOpts, _roundId) +} + +func (_MockV3Aggregator *MockV3AggregatorCaller) GetTimestamp(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) { + var out []interface{} + err := _MockV3Aggregator.contract.Call(opts, &out, "getTimestamp", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_MockV3Aggregator *MockV3AggregatorSession) GetTimestamp(arg0 *big.Int) (*big.Int, error) { + return _MockV3Aggregator.Contract.GetTimestamp(&_MockV3Aggregator.CallOpts, arg0) +} + +func (_MockV3Aggregator *MockV3AggregatorCallerSession) GetTimestamp(arg0 *big.Int) (*big.Int, error) { + return _MockV3Aggregator.Contract.GetTimestamp(&_MockV3Aggregator.CallOpts, arg0) +} + +func (_MockV3Aggregator *MockV3AggregatorCaller) LatestAnswer(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _MockV3Aggregator.contract.Call(opts, &out, "latestAnswer") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_MockV3Aggregator *MockV3AggregatorSession) LatestAnswer() (*big.Int, error) { + return _MockV3Aggregator.Contract.LatestAnswer(&_MockV3Aggregator.CallOpts) +} + +func (_MockV3Aggregator *MockV3AggregatorCallerSession) LatestAnswer() (*big.Int, error) { + return _MockV3Aggregator.Contract.LatestAnswer(&_MockV3Aggregator.CallOpts) +} + +func (_MockV3Aggregator *MockV3AggregatorCaller) LatestRound(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _MockV3Aggregator.contract.Call(opts, &out, "latestRound") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_MockV3Aggregator *MockV3AggregatorSession) LatestRound() (*big.Int, error) { + return _MockV3Aggregator.Contract.LatestRound(&_MockV3Aggregator.CallOpts) +} + +func (_MockV3Aggregator *MockV3AggregatorCallerSession) LatestRound() (*big.Int, error) { + return _MockV3Aggregator.Contract.LatestRound(&_MockV3Aggregator.CallOpts) +} + +func (_MockV3Aggregator *MockV3AggregatorCaller) LatestRoundData(opts *bind.CallOpts) (LatestRoundData, + + error) { + var out []interface{} + err := _MockV3Aggregator.contract.Call(opts, &out, "latestRoundData") + + outstruct := new(LatestRoundData) + if err != nil { + return *outstruct, err + } + + outstruct.RoundId = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.Answer = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.StartedAt = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + outstruct.UpdatedAt = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) + outstruct.AnsweredInRound = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +func (_MockV3Aggregator *MockV3AggregatorSession) LatestRoundData() (LatestRoundData, + + error) { + return _MockV3Aggregator.Contract.LatestRoundData(&_MockV3Aggregator.CallOpts) +} + +func (_MockV3Aggregator *MockV3AggregatorCallerSession) LatestRoundData() (LatestRoundData, + + error) { + return _MockV3Aggregator.Contract.LatestRoundData(&_MockV3Aggregator.CallOpts) +} + +func (_MockV3Aggregator *MockV3AggregatorCaller) LatestTimestamp(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _MockV3Aggregator.contract.Call(opts, &out, "latestTimestamp") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_MockV3Aggregator *MockV3AggregatorSession) LatestTimestamp() (*big.Int, error) { + return _MockV3Aggregator.Contract.LatestTimestamp(&_MockV3Aggregator.CallOpts) +} + +func (_MockV3Aggregator *MockV3AggregatorCallerSession) LatestTimestamp() (*big.Int, error) { + return _MockV3Aggregator.Contract.LatestTimestamp(&_MockV3Aggregator.CallOpts) +} + +func (_MockV3Aggregator *MockV3AggregatorCaller) Version(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _MockV3Aggregator.contract.Call(opts, &out, "version") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_MockV3Aggregator *MockV3AggregatorSession) Version() (*big.Int, error) { + return _MockV3Aggregator.Contract.Version(&_MockV3Aggregator.CallOpts) +} + +func (_MockV3Aggregator *MockV3AggregatorCallerSession) Version() (*big.Int, error) { + return _MockV3Aggregator.Contract.Version(&_MockV3Aggregator.CallOpts) +} + +func (_MockV3Aggregator *MockV3AggregatorTransactor) UpdateAnswer(opts *bind.TransactOpts, _answer *big.Int) (*types.Transaction, error) { + return _MockV3Aggregator.contract.Transact(opts, "updateAnswer", _answer) +} + +func (_MockV3Aggregator *MockV3AggregatorSession) UpdateAnswer(_answer *big.Int) (*types.Transaction, error) { + return _MockV3Aggregator.Contract.UpdateAnswer(&_MockV3Aggregator.TransactOpts, _answer) +} + +func (_MockV3Aggregator *MockV3AggregatorTransactorSession) UpdateAnswer(_answer *big.Int) (*types.Transaction, error) { + return _MockV3Aggregator.Contract.UpdateAnswer(&_MockV3Aggregator.TransactOpts, _answer) +} + +func (_MockV3Aggregator *MockV3AggregatorTransactor) UpdateRoundData(opts *bind.TransactOpts, _roundId *big.Int, _answer *big.Int, _timestamp *big.Int, _startedAt *big.Int) (*types.Transaction, error) { + return _MockV3Aggregator.contract.Transact(opts, "updateRoundData", _roundId, _answer, _timestamp, _startedAt) +} + +func (_MockV3Aggregator *MockV3AggregatorSession) UpdateRoundData(_roundId *big.Int, _answer *big.Int, _timestamp *big.Int, _startedAt *big.Int) (*types.Transaction, error) { + return _MockV3Aggregator.Contract.UpdateRoundData(&_MockV3Aggregator.TransactOpts, _roundId, _answer, _timestamp, _startedAt) +} + +func (_MockV3Aggregator *MockV3AggregatorTransactorSession) UpdateRoundData(_roundId *big.Int, _answer *big.Int, _timestamp *big.Int, _startedAt *big.Int) (*types.Transaction, error) { + return _MockV3Aggregator.Contract.UpdateRoundData(&_MockV3Aggregator.TransactOpts, _roundId, _answer, _timestamp, _startedAt) +} + +type MockV3AggregatorAnswerUpdatedIterator struct { + Event *MockV3AggregatorAnswerUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MockV3AggregatorAnswerUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MockV3AggregatorAnswerUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MockV3AggregatorAnswerUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MockV3AggregatorAnswerUpdatedIterator) Error() error { + return it.fail +} + +func (it *MockV3AggregatorAnswerUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MockV3AggregatorAnswerUpdated struct { + Current *big.Int + RoundId *big.Int + UpdatedAt *big.Int + Raw types.Log +} + +func (_MockV3Aggregator *MockV3AggregatorFilterer) FilterAnswerUpdated(opts *bind.FilterOpts, current []*big.Int, roundId []*big.Int) (*MockV3AggregatorAnswerUpdatedIterator, error) { + + var currentRule []interface{} + for _, currentItem := range current { + currentRule = append(currentRule, currentItem) + } + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + + logs, sub, err := _MockV3Aggregator.contract.FilterLogs(opts, "AnswerUpdated", currentRule, roundIdRule) + if err != nil { + return nil, err + } + return &MockV3AggregatorAnswerUpdatedIterator{contract: _MockV3Aggregator.contract, event: "AnswerUpdated", logs: logs, sub: sub}, nil +} + +func (_MockV3Aggregator *MockV3AggregatorFilterer) WatchAnswerUpdated(opts *bind.WatchOpts, sink chan<- *MockV3AggregatorAnswerUpdated, current []*big.Int, roundId []*big.Int) (event.Subscription, error) { + + var currentRule []interface{} + for _, currentItem := range current { + currentRule = append(currentRule, currentItem) + } + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + + logs, sub, err := _MockV3Aggregator.contract.WatchLogs(opts, "AnswerUpdated", currentRule, roundIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MockV3AggregatorAnswerUpdated) + if err := _MockV3Aggregator.contract.UnpackLog(event, "AnswerUpdated", 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 +} + +func (_MockV3Aggregator *MockV3AggregatorFilterer) ParseAnswerUpdated(log types.Log) (*MockV3AggregatorAnswerUpdated, error) { + event := new(MockV3AggregatorAnswerUpdated) + if err := _MockV3Aggregator.contract.UnpackLog(event, "AnswerUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MockV3AggregatorNewRoundIterator struct { + Event *MockV3AggregatorNewRound + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MockV3AggregatorNewRoundIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MockV3AggregatorNewRound) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MockV3AggregatorNewRound) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MockV3AggregatorNewRoundIterator) Error() error { + return it.fail +} + +func (it *MockV3AggregatorNewRoundIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MockV3AggregatorNewRound struct { + RoundId *big.Int + StartedBy common.Address + StartedAt *big.Int + Raw types.Log +} + +func (_MockV3Aggregator *MockV3AggregatorFilterer) FilterNewRound(opts *bind.FilterOpts, roundId []*big.Int, startedBy []common.Address) (*MockV3AggregatorNewRoundIterator, error) { + + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + var startedByRule []interface{} + for _, startedByItem := range startedBy { + startedByRule = append(startedByRule, startedByItem) + } + + logs, sub, err := _MockV3Aggregator.contract.FilterLogs(opts, "NewRound", roundIdRule, startedByRule) + if err != nil { + return nil, err + } + return &MockV3AggregatorNewRoundIterator{contract: _MockV3Aggregator.contract, event: "NewRound", logs: logs, sub: sub}, nil +} + +func (_MockV3Aggregator *MockV3AggregatorFilterer) WatchNewRound(opts *bind.WatchOpts, sink chan<- *MockV3AggregatorNewRound, roundId []*big.Int, startedBy []common.Address) (event.Subscription, error) { + + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + var startedByRule []interface{} + for _, startedByItem := range startedBy { + startedByRule = append(startedByRule, startedByItem) + } + + logs, sub, err := _MockV3Aggregator.contract.WatchLogs(opts, "NewRound", roundIdRule, startedByRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MockV3AggregatorNewRound) + if err := _MockV3Aggregator.contract.UnpackLog(event, "NewRound", 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 +} + +func (_MockV3Aggregator *MockV3AggregatorFilterer) ParseNewRound(log types.Log) (*MockV3AggregatorNewRound, error) { + event := new(MockV3AggregatorNewRound) + if err := _MockV3Aggregator.contract.UnpackLog(event, "NewRound", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type GetRoundData struct { + RoundId *big.Int + Answer *big.Int + StartedAt *big.Int + UpdatedAt *big.Int + AnsweredInRound *big.Int +} +type LatestRoundData struct { + RoundId *big.Int + Answer *big.Int + StartedAt *big.Int + UpdatedAt *big.Int + AnsweredInRound *big.Int +} + +func (_MockV3Aggregator *MockV3Aggregator) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _MockV3Aggregator.abi.Events["AnswerUpdated"].ID: + return _MockV3Aggregator.ParseAnswerUpdated(log) + case _MockV3Aggregator.abi.Events["NewRound"].ID: + return _MockV3Aggregator.ParseNewRound(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (MockV3AggregatorAnswerUpdated) Topic() common.Hash { + return common.HexToHash("0x0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f") +} + +func (MockV3AggregatorNewRound) Topic() common.Hash { + return common.HexToHash("0x0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac60271") +} + +func (_MockV3Aggregator *MockV3Aggregator) Address() common.Address { + return _MockV3Aggregator.address +} + +type MockV3AggregatorInterface interface { + Decimals(opts *bind.CallOpts) (uint8, error) + + Description(opts *bind.CallOpts) (string, error) + + GetAnswer(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) + + GetRoundData(opts *bind.CallOpts, _roundId *big.Int) (GetRoundData, + + error) + + GetTimestamp(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) + + LatestAnswer(opts *bind.CallOpts) (*big.Int, error) + + LatestRound(opts *bind.CallOpts) (*big.Int, error) + + LatestRoundData(opts *bind.CallOpts) (LatestRoundData, + + error) + + LatestTimestamp(opts *bind.CallOpts) (*big.Int, error) + + Version(opts *bind.CallOpts) (*big.Int, error) + + UpdateAnswer(opts *bind.TransactOpts, _answer *big.Int) (*types.Transaction, error) + + UpdateRoundData(opts *bind.TransactOpts, _roundId *big.Int, _answer *big.Int, _timestamp *big.Int, _startedAt *big.Int) (*types.Transaction, error) + + FilterAnswerUpdated(opts *bind.FilterOpts, current []*big.Int, roundId []*big.Int) (*MockV3AggregatorAnswerUpdatedIterator, error) + + WatchAnswerUpdated(opts *bind.WatchOpts, sink chan<- *MockV3AggregatorAnswerUpdated, current []*big.Int, roundId []*big.Int) (event.Subscription, error) + + ParseAnswerUpdated(log types.Log) (*MockV3AggregatorAnswerUpdated, error) + + FilterNewRound(opts *bind.FilterOpts, roundId []*big.Int, startedBy []common.Address) (*MockV3AggregatorNewRoundIterator, error) + + WatchNewRound(opts *bind.WatchOpts, sink chan<- *MockV3AggregatorNewRound, roundId []*big.Int, startedBy []common.Address) (event.Subscription, error) + + ParseNewRound(log types.Log) (*MockV3AggregatorNewRound, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var MockV3AggregatorZKBin string = ("0x0003000000000002000000000801034f00000060011002700000006d0110019700000001002001900000001b0000c13d0000008002000039000000400020043f000000040010008c0000003e0000413d000000000208043b000000e002200270000000730020009c000000400000213d0000007b0020009c000000840000213d0000007f0020009c000000df0000613d000000800020009c000000e70000613d000000810020009c0000003e0000c13d0000000001000416000000000001004b0000003e0000c13d00000001010000390000016f0000013d0000000002000416000000000002004b0000003e0000c13d0000001f021000390000006e022001970000008002200039000000400020043f0000001f0310018f0000006f0410019800000080024000390000002c0000613d0000008005000039000000000608034f000000006706043c0000000005750436000000000025004b000000280000c13d000000000003004b000000390000613d000000000448034f0000000303300210000000000502043300000000053501cf000000000535022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000353019f0000000000320435000000400010008c0000003e0000413d000000800100043d000000ff0010008c0000009a0000a13d0000000001000019000001b300010430000000740020009c000000ba0000213d000000780020009c0000011f0000613d000000790020009c000001240000613d0000007a0020009c0000003e0000c13d000000240010008c0000003e0000413d0000000001000416000000000001004b0000003e0000c13d0000000401800370000000000201043b0000000101000039000300000002001d000000000021041b0000007001000041000000000010044300000000010004140000006d0010009c0000006d01008041000000c00110021000000071011001c70000800b0200003901b101ac0000040f0000000100200190000000de0000613d000000000401043b0000000201000039000000000041041b0000000302000039000000000102041a000000010110003a000000b40000613d000000000012041b000000000010043f0000000401000039000000200010043f00000040020000390000000001000019000200000004001d01b101970000040f0000000302000029000000000021041b0000000301000039000000000101041a000000000010043f0000000501000039000000200010043f0000000001000019000000400200003901b101970000040f0000000202000029000000000021041b0000000301000039000000000101041a000000000010043f0000000601000039000000200010043f0000000001000019000000400200003901b101970000040f0000000202000029000000000021041b0000000001000019000001b20001042e0000007c0020009c0000014d0000613d0000007d0020009c000001530000613d0000007e0020009c0000003e0000c13d0000000001000416000000000001004b0000003e0000c13d000000c001000039000000400010043f0000001f01000039000000800010043f0000008702000041000000a00020043f0000002003000039000000c00030043f000000e00010043f000001000020043f0000011f0000043f0000008801000041000001b20001042e000000000300041a0000008902300197000000000112019f000000a00200043d000000000010041b0000000101000039000300000002001d000000000021041b0000007001000041000000000010044300000000010004140000006d0010009c0000006d01008041000000c00110021000000071011001c70000800b0200003901b101ac0000040f0000000100200190000000de0000613d000000000401043b0000000201000039000000000041041b0000000302000039000000000102041a000000010110003a000001730000c13d0000008501000041000000000010043f0000001101000039000000040010043f0000008601000041000001b300010430000000750020009c000001580000613d000000760020009c000001620000613d000000770020009c0000003e0000c13d0000000001000416000000000001004b0000003e0000c13d0000000301000039000000000101041a000300000001001d000000000010043f0000000401000039000000200010043f0000004002000039000000000100001901b101970000040f000000000101041a000200000001001d0000000601000039000000200010043f0000000001000019000000400200003901b101970000040f000000000101041a000100000001001d0000000501000039000000200010043f0000000001000019000000400200003901b101970000040f00000003020000290000008202200197000000000101041a000001440000013d000000000001042f0000000001000416000000000001004b0000003e0000c13d000000000100041a000000ff0110018f000000800010043f0000008401000041000001b20001042e000000840010008c0000003e0000413d0000000001000416000000000001004b0000003e0000c13d0000000401800370000000000101043b000000820010009c0000003e0000213d0000004402800370000000000302043b000300000003001d0000002402800370000000000402043b000100000004001d0000000302000039000000000012041b0000000102000039000000000042041b0000000202000039000000000032041b000000000010043f0000000401000039000000200010043f00000040020000390000000001000019000200000008035301b101970000040f0000000102000029000000000021041b0000000301000039000000000101041a000000000010043f0000000501000039000000200010043f0000000001000019000000400200003901b101970000040f0000000302000029000000000021041b0000000301000039000000000101041a000000000010043f0000000601000039000000200010043f000000020100035f0000006401100370000000000101043b000300000001001d0000000001000019000000400200003901b101970000040f0000000302000029000000000021041b0000000001000019000001b20001042e0000000001000416000000000001004b0000003e0000c13d00000002010000390000016f0000013d000000240010008c0000003e0000413d0000000001000416000000000001004b0000003e0000c13d0000000401800370000000000101043b000000820010009c0000003e0000213d000000000010043f000300000001001d0000000401000039000000200010043f0000004002000039000000000100001901b101970000040f000000000101041a000200000001001d0000000601000039000000200010043f0000000001000019000000400200003901b101970000040f000000000101041a000100000001001d0000000501000039000000200010043f0000000001000019000000400200003901b101970000040f000000000101041a0000000302000029000000800020043f0000000203000029000000a00030043f0000000103000029000000c00030043f000000e00010043f000001000020043f0000008301000041000001b20001042e0000000001000416000000000001004b0000003e0000c13d000000800000043f0000008401000041000001b20001042e0000000001000416000000000001004b0000003e0000c13d00000003010000390000016f0000013d000000240010008c0000003e0000413d0000000001000416000000000001004b0000003e0000c13d0000000401800370000000000101043b000000000010043f00000004010000390000016b0000013d000000240010008c0000003e0000413d0000000001000416000000000001004b0000003e0000c13d0000000401800370000000000101043b000000000010043f0000000501000039000000200010043f0000004002000039000000000100001901b101970000040f000000000101041a000000800010043f0000008401000041000001b20001042e000000000012041b000000000010043f0000000401000039000000200010043f00000040020000390000000001000019000200000004001d01b101970000040f0000000302000029000000000021041b0000000301000039000000000101041a000000000010043f0000000501000039000000200010043f0000000001000019000000400200003901b101970000040f0000000202000029000000000021041b0000000301000039000000000101041a000000000010043f0000000601000039000000200010043f0000000001000019000000400200003901b101970000040f0000000202000029000000000021041b0000002001000039000001000010044300000120000004430000007201000041000001b20001042e000000000001042f0000006d0010009c0000006d0100804100000040011002100000006d0020009c0000006d020080410000006002200210000000000112019f00000000020004140000006d0020009c0000006d02008041000000c002200210000000000112019f0000008a011001c7000080100200003901b101ac0000040f0000000100200190000001aa0000613d000000000101043b000000000001042d0000000001000019000001b300010430000001af002104230000000102000039000000000001042d0000000002000019000000000001042d000001b100000432000001b20001042e000001b30001043000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d9553913202000002000000000000000000000000000000040000000000000000000000000000000200000000000000000000000000000040000001000000000000000000000000000000000000000000000000000000000000000000000000008205bf6900000000000000000000000000000000000000000000000000000000b5ab58db00000000000000000000000000000000000000000000000000000000b5ab58dc00000000000000000000000000000000000000000000000000000000b633620c00000000000000000000000000000000000000000000000000000000feaf968c000000000000000000000000000000000000000000000000000000008205bf6a000000000000000000000000000000000000000000000000000000009a6fc8f500000000000000000000000000000000000000000000000000000000a87a20ce0000000000000000000000000000000000000000000000000000000054fd4d4f0000000000000000000000000000000000000000000000000000000054fd4d5000000000000000000000000000000000000000000000000000000000668a0f02000000000000000000000000000000000000000000000000000000007284e41600000000000000000000000000000000000000000000000000000000313ce567000000000000000000000000000000000000000000000000000000004aa2011f0000000000000000000000000000000000000000000000000000000050d25bcd00000000000000000000000000000000000000000000ffffffffffffffffffff00000000000000000000000000000000000000a000000080000000000000000000000000000000000000000000000000000000200000008000000000000000004e487b7100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000076302e382f74657374732f4d6f636b563341676772656761746f722e736f6c000000000000000000000000000000000000000060000000c00000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000200000000000000000000000000000000000000000000000000000000000000") diff --git a/core/gethwrappers/ccip/generated_zks/multi_aggregate_rate_limiter/multi_aggregate_rate_limiter.go b/core/gethwrappers/ccip/generated_zks/multi_aggregate_rate_limiter/multi_aggregate_rate_limiter.go new file mode 100644 index 00000000000..6e43da04079 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/multi_aggregate_rate_limiter/multi_aggregate_rate_limiter.go @@ -0,0 +1,1864 @@ +package multi_aggregate_rate_limiter + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type AuthorizedCallersAuthorizedCallerArgs struct { + AddedCallers []common.Address + RemovedCallers []common.Address +} + +type ClientAny2EVMMessage struct { + MessageId [32]byte + SourceChainSelector uint64 + Sender []byte + Data []byte + DestTokenAmounts []ClientEVMTokenAmount +} + +type ClientEVM2AnyMessage struct { + Receiver []byte + Data []byte + TokenAmounts []ClientEVMTokenAmount + FeeToken common.Address + ExtraArgs []byte +} + +type ClientEVMTokenAmount struct { + Token common.Address + Amount *big.Int +} + +type MultiAggregateRateLimiterLocalRateLimitToken struct { + RemoteChainSelector uint64 + LocalToken common.Address +} + +type MultiAggregateRateLimiterRateLimitTokenArgs struct { + LocalTokenArgs MultiAggregateRateLimiterLocalRateLimitToken + RemoteToken []byte +} + +type MultiAggregateRateLimiterRateLimiterConfigArgs struct { + RemoteChainSelector uint64 + IsOutboundLane bool + RateLimiterConfig RateLimiterConfig +} + +type RateLimiterConfig struct { + IsEnabled bool + Capacity *big.Int + Rate *big.Int +} + +type RateLimiterTokenBucket struct { + Tokens *big.Int + LastUpdated uint32 + IsEnabled bool + Capacity *big.Int + Rate *big.Int +} + +var MultiAggregateRateLimiterMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"authorizedCallers\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotTransferToSelf\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"DisabledNonZeroRateLimit\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"InvalidRateLimitRate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"errorReason\",\"type\":\"bytes\"}],\"name\":\"MessageValidationError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerCannotBeZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"PriceNotFoundForToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimitMustBeDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"UnauthorizedCaller\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroChainSelectorNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AuthorizedCallerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AuthorizedCallerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newFeeQuoter\",\"type\":\"address\"}],\"name\":\"FeeQuoterSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isOutboundLane\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"RateLimiterConfigUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remoteToken\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"name\":\"TokenAggregateRateLimitAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"name\":\"TokenAggregateRateLimitRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensConsumed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addedCallers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"removedCallers\",\"type\":\"address[]\"}],\"internalType\":\"structAuthorizedCallers.AuthorizedCallerArgs\",\"name\":\"authorizedCallerArgs\",\"type\":\"tuple\"}],\"name\":\"applyAuthorizedCallerUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isOutboundLane\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"internalType\":\"structMultiAggregateRateLimiter.RateLimiterConfigArgs[]\",\"name\":\"rateLimiterUpdates\",\"type\":\"tuple[]\"}],\"name\":\"applyRateLimiterConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isOutboundLane\",\"type\":\"bool\"}],\"name\":\"currentRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllAuthorizedCallers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getAllRateLimitTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"localTokens\",\"type\":\"address[]\"},{\"internalType\":\"bytes[]\",\"name\":\"remoteTokens\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeQuoter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"onInboundMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"onOutboundMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newFeeQuoter\",\"type\":\"address\"}],\"name\":\"setFeeQuoter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"internalType\":\"structMultiAggregateRateLimiter.LocalRateLimitToken[]\",\"name\":\"removes\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"internalType\":\"structMultiAggregateRateLimiter.LocalRateLimitToken\",\"name\":\"localTokenArgs\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"remoteToken\",\"type\":\"bytes\"}],\"internalType\":\"structMultiAggregateRateLimiter.RateLimitTokenArgs[]\",\"name\":\"adds\",\"type\":\"tuple[]\"}],\"name\":\"updateRateLimitTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60806040523480156200001157600080fd5b50604051620032f2380380620032f28339810160408190526200003491620004d1565b80336000816200005757604051639b15e16f60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03848116919091179091558116156200008a576200008a81620000cc565b5050604080518082018252828152815160008152602080820190935291810191909152620000b89062000146565b50620000c48262000295565b505062000608565b336001600160a01b03821603620000f657604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b602081015160005b8151811015620001d65760008282815181106200016f576200016f620005ba565b602090810291909101015190506200018960028262000311565b15620001cc576040516001600160a01b03821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b506001016200014e565b50815160005b81518110156200028f576000828281518110620001fd57620001fd620005ba565b6020026020010151905060006001600160a01b0316816001600160a01b0316036200023b576040516342bcdf7f60e11b815260040160405180910390fd5b6200024860028262000331565b506040516001600160a01b03821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a150600101620001dc565b50505050565b6001600160a01b038116620002bd576040516342bcdf7f60e11b815260040160405180910390fd5b600580546001600160a01b0319166001600160a01b0383169081179091556040519081527f7c737a8eddf62436489aa3600ed26e75e0a58b0f8c0d266bbcee64358c39fdac9060200160405180910390a150565b600062000328836001600160a01b03841662000348565b90505b92915050565b600062000328836001600160a01b0384166200044c565b60008181526001830160205260408120548015620004415760006200036f600183620005d0565b85549091506000906200038590600190620005d0565b9050818114620003f1576000866000018281548110620003a957620003a9620005ba565b9060005260206000200154905080876000018481548110620003cf57620003cf620005ba565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080620004055762000405620005f2565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506200032b565b60009150506200032b565b600081815260018301602052604081205462000495575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200032b565b5060006200032b565b80516001600160a01b0381168114620004b657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215620004e557600080fd5b620004f0836200049e565b602084810151919350906001600160401b03808211156200051057600080fd5b818601915086601f8301126200052557600080fd5b8151818111156200053a576200053a620004bb565b8060051b604051601f19603f83011681018181108582111715620005625762000562620004bb565b6040529182528482019250838101850191898311156200058157600080fd5b938501935b82851015620005aa576200059a856200049e565b8452938501939285019262000586565b8096505050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b818103818111156200032b57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b612cda80620006186000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063e145291611610066578063e145291614610247578063e835232b14610265578063f2fde38b14610278578063fe843cd01461028b57600080fd5b80638da5cb5b146101e257806391a2749a14610221578063e0a0e5061461023457600080fd5b80631af18b7b116100c85780631af18b7b146101915780632451a627146101a4578063537e304e146101b957806379ba5097146101da57600080fd5b806308d450a1146100ef5780630a35bcc414610104578063181f5a771461017c575b600080fd5b6101026100fd3660046120e9565b61029e565b005b6101176101123660046121c9565b6102bd565b604051610173919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60405180910390f35b610184610382565b6040516101739190612260565b61010261019f36600461239a565b61039e565b6101ac6105fc565b60405161017391906124b7565b6101cc6101c73660046124ca565b61060d565b6040516101739291906124e5565b61010261077a565b60015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610173565b61010261022f3660046125db565b610848565b61010261024236600461266c565b610859565b60055473ffffffffffffffffffffffffffffffffffffffff166101fc565b6101026102733660046126c1565b6108ce565b6101026102863660046126c1565b6108df565b6101026102993660046126fc565b6108f0565b6102a6610c3a565b6102ba816020015182608001516000610c84565b50565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526103796102f58484610d5b565b6040805160a08101825282546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff1660208501527401000000000000000000000000000000000000000090920460ff16151593830193909352600190930154808316606083015292909204166080820152610d8b565b90505b92915050565b604051806060016040528060238152602001612cab6023913981565b6103a6610e3d565b60005b82518110156104845760008382815181106103c6576103c6612830565b602002602001015160200151905060008483815181106103e8576103e8612830565b6020908102919091018101515167ffffffffffffffff811660009081526004909252604090912090915061041c9083610e8e565b1561047a576040805167ffffffffffffffff8316815273ffffffffffffffffffffffffffffffffffffffff841660208201527f530cabd30786b7235e124a6c0db77e0b685ef22813b1fe87554247f404eb8ed6910160405180910390a15b50506001016103a9565b5060005b81518110156105f75760008282815181106104a5576104a5612830565b602002602001015160000151905060008383815181106104c7576104c7612830565b6020026020010151602001519050600082602001519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061051857508151155b8061054a5750604080516000602082015201604051602081830303815290604052805190602001208280519060200120145b15610581576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b825167ffffffffffffffff811660009081526004602052604090206105a7908385610eb0565b156105e8577fad72a792d2a307f400c278be7deaeec6964276783304580cdc4e905436b8d5c58184846040516105df9392919061285f565b60405180910390a15b50505050806001019050610488565b505050565b60606106086002610edd565b905090565b67ffffffffffffffff81166000908152600460205260408120606091829161063490610eea565b90508067ffffffffffffffff81111561064f5761064f611e5a565b604051908082528060200260200182016040528015610678578160200160208202803683370190505b5092508067ffffffffffffffff81111561069457610694611e5a565b6040519080825280602002602001820160405280156106c757816020015b60608152602001906001900390816106b25790505b50915060005b818110156107735767ffffffffffffffff8516600090815260046020526040812081906106fa9084610ef5565b915091508186848151811061071157610711612830565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508085848151811061075e5761075e612830565b602090810291909101015250506001016106cd565b5050915091565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107cb576040517f02b543c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000008082163390811790935560008054909116815560405173ffffffffffffffffffffffffffffffffffffffff909216929183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610850610e3d565b6102ba81610f14565b610861610c3a565b6108ca8261087260408401846128a8565b808060200260200160405190810160405280939291908181526020016000905b828210156108be576108af60408302860136819003810190612910565b81526020019060010190610892565b50505050506001610c84565b5050565b6108d6610e3d565b6102ba816110a0565b6108e7610e3d565b6102ba81611166565b6108f8610e3d565b60005b81518110156108ca57600082828151811061091857610918612830565b6020908102919091010151604081015181519192509067ffffffffffffffff8116600003610972576040517fc656089500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602083015160006109838383610d5b565b8054909150700100000000000000000000000000000000900463ffffffff16600003610bdc576109b484600061122a565b6040805160a081018252602080870180516fffffffffffffffffffffffffffffffff908116845263ffffffff421692840192909252875115158385015251811660608301529186015190911660808201528215610af55767ffffffffffffffff8416600090815260066020908152604091829020835160028201805493860151948601516fffffffffffffffffffffffffffffffff9283167fffffffffffffffffffffffff00000000000000000000000000000000000000009095169490941770010000000000000000000000000000000063ffffffff9096168602177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000941515949094029390931790925560608401516080850151908316921690920217600390910155610bd6565b67ffffffffffffffff84166000908152600660209081526040918290208351815492850151938501516fffffffffffffffffffffffffffffffff9182167fffffffffffffffffffffffff00000000000000000000000000000000000000009094169390931770010000000000000000000000000000000063ffffffff9095168502177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000093151593909302929092178155606084015160808501519083169216909202176001909101555b50610be6565b610be68185611363565b8267ffffffffffffffff167ff14a5415ce6988a9e870a85fff0b9d7b7dd79bbc228cb63cad610daf6f7b6b978386604051610c2292919061292c565b60405180910390a250505050508060010190506108fb565b610c45600233611512565b610c82576040517fd86ad9cf0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b565b6000610c908483610d5b565b805490915074010000000000000000000000000000000000000000900460ff1615610d55576000805b8451811015610d4057610d04858281518110610cd757610cd7612830565b6020908102919091018101515167ffffffffffffffff891660009081526004909252604090912090611541565b15610d3857610d2b858281518110610d1e57610d1e612830565b6020026020010151611563565b610d35908361299f565b91505b600101610cb9565b508015610d5357610d538282600061169f565b505b50505050565b67ffffffffffffffff821660009081526006602052604081208215610d8457600201905061037c565b905061037c565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152610e1982606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff1642610dfd91906129b2565b85608001516fffffffffffffffffffffffffffffffff16611a22565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b60015473ffffffffffffffffffffffffffffffffffffffff163314610c82576040517f2b5c74de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006103798373ffffffffffffffffffffffffffffffffffffffff8416611a4a565b6000610ed38473ffffffffffffffffffffffffffffffffffffffff851684611a6e565b90505b9392505050565b60606000610ed683611a93565b600061037c82611aef565b600060608180610f058686611afa565b909450925050505b9250929050565b602081015160005b8151811015610faf576000828281518110610f3957610f39612830565b60200260200101519050610f57816002611bb790919063ffffffff16565b15610fa65760405173ffffffffffffffffffffffffffffffffffffffff821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b50600101610f1c565b50815160005b8151811015610d55576000828281518110610fd257610fd2612830565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611042576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61104d600282611bd9565b5060405173ffffffffffffffffffffffffffffffffffffffff821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a150600101610fb5565b73ffffffffffffffffffffffffffffffffffffffff81166110ed576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f7c737a8eddf62436489aa3600ed26e75e0a58b0f8c0d266bbcee64358c39fdac9060200160405180910390a150565b3373ffffffffffffffffffffffffffffffffffffffff8216036111b5576040517fdad89dca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b8151156112f15781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff16101580611280575060408201516fffffffffffffffffffffffffffffffff16155b156112b957816040517f8020d124000000000000000000000000000000000000000000000000000000008152600401610c7991906129c5565b80156108ca576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201516fffffffffffffffffffffffffffffffff1615158061132a575060208201516fffffffffffffffffffffffffffffffff1615155b156108ca57816040517fd68af9cc000000000000000000000000000000000000000000000000000000008152600401610c7991906129c5565b815460009061138c90700100000000000000000000000000000000900463ffffffff16426129b2565b9050801561142e57600183015483546113d4916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416611a22565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b60208201518354611454916fffffffffffffffffffffffffffffffff9081169116611bfb565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19906115059084906129c5565b60405180910390a1505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610379565b60006103798373ffffffffffffffffffffffffffffffffffffffff8416611c11565b60055481516040517fd02641a000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201526000928392169063d02641a0906024016040805180830381865afa1580156115d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fb9190612a01565b5190507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff81166000036116715782516040517f9a655f7b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610c79565b6020830151610ed6907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff831690611c1d565b825474010000000000000000000000000000000000000000900460ff1615806116c6575081155b156116d057505050565b825460018401546fffffffffffffffffffffffffffffffff8083169291169060009061171690700100000000000000000000000000000000900463ffffffff16426129b2565b905080156117d65781831115611758576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018601546117929083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16611a22565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b8482101561188d5773ffffffffffffffffffffffffffffffffffffffff8416611835576040517ff94ebcd10000000000000000000000000000000000000000000000000000000081526004810183905260248101869052604401610c79565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff85166044820152606401610c79565b848310156119a05760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff169060009082906118d190826129b2565b6118db878a6129b2565b6118e5919061299f565b6118ef9190612a6c565b905073ffffffffffffffffffffffffffffffffffffffff8616611948576040517f15279c080000000000000000000000000000000000000000000000000000000081526004810182905260248101869052604401610c79565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff87166044820152606401610c79565b6119aa85846129b2565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b6000611a4185611a328486612aa7565b611a3c908761299f565b611bfb565b95945050505050565b60008181526002830160205260408120611a649082611e0c565b6103798383611c5a565b60008281526002840160205260408120611a888382612b61565b50610ed38484611c66565b606081600001805480602002602001604051908101604052809291908181526020018280548015611ae357602002820191906000526020600020905b815481526020019060010190808311611acf575b50505050509050919050565b600061037c82611c72565b6000606081611b098585611c7c565b60008181526002870160205260409020805491925082918190611b2b90612abe565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5790612abe565b8015611ba45780601f10611b7957610100808354040283529160200191611ba4565b820191906000526020600020905b815481529060010190602001808311611b8757829003601f168201915b5050505050905092509250509250929050565b60006103798373ffffffffffffffffffffffffffffffffffffffff8416611c88565b60006103798373ffffffffffffffffffffffffffffffffffffffff8416611d7b565b6000818310611c0a5781610379565b5090919050565b60006103798383611dca565b6000670de0b6b3a7640000611c50837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8616612aa7565b6103799190612a6c565b60006103798383611c88565b60006103798383611d7b565b600061037c825490565b60006103798383611de2565b60008181526001830160205260408120548015611d71576000611cac6001836129b2565b8554909150600090611cc0906001906129b2565b9050818114611d25576000866000018281548110611ce057611ce0612830565b9060005260206000200154905080876000018481548110611d0357611d03612830565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611d3657611d36612c7b565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061037c565b600091505061037c565b6000818152600183016020526040812054611dc25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561037c565b50600061037c565b60008181526001830160205260408120541515610379565b6000826000018281548110611df957611df9612830565b9060005260206000200154905092915050565b508054611e1890612abe565b6000825580601f10611e28575050565b601f0160209004906000526020600020908101906102ba91905b80821115611e565760008155600101611e42565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715611eac57611eac611e5a565b60405290565b60405160a0810167ffffffffffffffff81118282101715611eac57611eac611e5a565b6040516060810167ffffffffffffffff81118282101715611eac57611eac611e5a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611f3f57611f3f611e5a565b604052919050565b803567ffffffffffffffff81168114611f5f57600080fd5b919050565b600082601f830112611f7557600080fd5b813567ffffffffffffffff811115611f8f57611f8f611e5a565b611fc060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611ef8565b818152846020838601011115611fd557600080fd5b816020850160208301376000918101602001919091529392505050565b600067ffffffffffffffff82111561200c5761200c611e5a565b5060051b60200190565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f5f57600080fd5b60006040828403121561204c57600080fd5b612054611e89565b905061205f82612016565b81526020820135602082015292915050565b600082601f83011261208257600080fd5b8135602061209761209283611ff2565b611ef8565b8083825260208201915060208460061b8701019350868411156120b957600080fd5b602086015b848110156120de576120d0888261203a565b8352918301916040016120be565b509695505050505050565b6000602082840312156120fb57600080fd5b813567ffffffffffffffff8082111561211357600080fd5b9083019060a0828603121561212757600080fd5b61212f611eb2565b8235815261213f60208401611f47565b602082015260408301358281111561215657600080fd5b61216287828601611f64565b60408301525060608301358281111561217a57600080fd5b61218687828601611f64565b60608301525060808301358281111561219e57600080fd5b6121aa87828601612071565b60808301525095945050505050565b80358015158114611f5f57600080fd5b600080604083850312156121dc57600080fd5b6121e583611f47565b91506121f3602084016121b9565b90509250929050565b6000815180845260005b8181101561222257602081850181015186830182015201612206565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061037960208301846121fc565b60006040828403121561228557600080fd5b61228d611e89565b905061229882611f47565b81526122a660208301612016565b602082015292915050565b600082601f8301126122c257600080fd5b813560206122d261209283611ff2565b82815260059290921b840181019181810190868411156122f157600080fd5b8286015b848110156120de57803567ffffffffffffffff808211156123165760008081fd5b81890191506060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d0301121561234f5760008081fd5b612357611e89565b6123638c898601612273565b81529083013590828211156123785760008081fd5b6123868c8984870101611f64565b8189015286525050509183019183016122f5565b60008060408084860312156123ae57600080fd5b833567ffffffffffffffff808211156123c657600080fd5b818601915086601f8301126123da57600080fd5b813560206123ea61209283611ff2565b8083825260208201915060208460061b87010193508a84111561240c57600080fd5b6020860195505b83861015612434576124258b87612273565b82529486019490820190612413565b9750505050602086013592508083111561244d57600080fd5b505061245b858286016122b1565b9150509250929050565b60008151808452602080850194506020840160005b838110156124ac57815173ffffffffffffffffffffffffffffffffffffffff168752958201959082019060010161247a565b509495945050505050565b6020815260006103796020830184612465565b6000602082840312156124dc57600080fd5b61037982611f47565b6040815260006124f86040830185612465565b6020838203818501528185518084528284019150828160051b85010183880160005b83811015612566577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08784030185526125548383516121fc565b9486019492509085019060010161251a565b50909998505050505050505050565b600082601f83011261258657600080fd5b8135602061259661209283611ff2565b8083825260208201915060208460051b8701019350868411156125b857600080fd5b602086015b848110156120de576125ce81612016565b83529183019183016125bd565b6000602082840312156125ed57600080fd5b813567ffffffffffffffff8082111561260557600080fd5b908301906040828603121561261957600080fd5b612621611e89565b82358281111561263057600080fd5b61263c87828601612575565b82525060208301358281111561265157600080fd5b61265d87828601612575565b60208301525095945050505050565b6000806040838503121561267f57600080fd5b61268883611f47565b9150602083013567ffffffffffffffff8111156126a457600080fd5b830160a081860312156126b657600080fd5b809150509250929050565b6000602082840312156126d357600080fd5b61037982612016565b80356fffffffffffffffffffffffffffffffff81168114611f5f57600080fd5b6000602080838503121561270f57600080fd5b823567ffffffffffffffff81111561272657600080fd5b8301601f8101851361273757600080fd5b803561274561209282611ff2565b81815260a0918202830184019184820191908884111561276457600080fd5b938501935b8385101561282457848903818112156127825760008081fd5b61278a611ed5565b61279387611f47565b81526127a08888016121b9565b8882015260406060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0850112156127d85760008081fd5b6127e0611ed5565b93506127ed828a016121b9565b84526127fa818a016126dc565b8a8501525061280b608089016126dc565b8382015281019190915283529384019391850191612769565b50979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b67ffffffffffffffff8416815260606020820152600061288260608301856121fc565b905073ffffffffffffffffffffffffffffffffffffffff83166040830152949350505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126128dd57600080fd5b83018035915067ffffffffffffffff8211156128f857600080fd5b6020019150600681901b3603821315610f0d57600080fd5b60006040828403121561292257600080fd5b610379838361203a565b821515815260808101610ed660208301848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561037c5761037c612970565b8181038181111561037c5761037c612970565b6060810161037c82848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b600060408284031215612a1357600080fd5b612a1b611e89565b82517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff81168114612a4757600080fd5b8152602083015163ffffffff81168114612a6057600080fd5b60208201529392505050565b600082612aa2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b808202811582820484141761037c5761037c612970565b600181811c90821680612ad257607f821691505b602082108103612b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f8211156105f7576000816000526020600020601f850160051c81016020861015612b3a5750805b601f850160051c820191505b81811015612b5957828155600101612b46565b505050505050565b815167ffffffffffffffff811115612b7b57612b7b611e5a565b612b8f81612b898454612abe565b84612b11565b602080601f831160018114612be25760008415612bac5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612b59565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015612c2f57888601518255948401946001909101908401612c10565b5085821015612c6b57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe4d756c7469416767726567617465526174654c696d6974657220312e362e302d646576a164736f6c6343000818000a", +} + +var MultiAggregateRateLimiterABI = MultiAggregateRateLimiterMetaData.ABI + +var MultiAggregateRateLimiterBin = MultiAggregateRateLimiterMetaData.Bin + +func DeployMultiAggregateRateLimiter(auth *bind.TransactOpts, backend bind.ContractBackend, feeQuoter common.Address, authorizedCallers []common.Address) (common.Address, *generated_zks.Transaction, *MultiAggregateRateLimiter, error) { + parsed, err := MultiAggregateRateLimiterMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(MultiAggregateRateLimiterZKBin), backend, feeQuoter, authorizedCallers) + contractReturn := &MultiAggregateRateLimiter{address: address, abi: *parsed, MultiAggregateRateLimiterCaller: MultiAggregateRateLimiterCaller{contract: contractBind}, MultiAggregateRateLimiterTransactor: MultiAggregateRateLimiterTransactor{contract: contractBind}, MultiAggregateRateLimiterFilterer: MultiAggregateRateLimiterFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(MultiAggregateRateLimiterBin), backend, feeQuoter, authorizedCallers) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &MultiAggregateRateLimiter{address: address, abi: *parsed, MultiAggregateRateLimiterCaller: MultiAggregateRateLimiterCaller{contract: contract}, MultiAggregateRateLimiterTransactor: MultiAggregateRateLimiterTransactor{contract: contract}, MultiAggregateRateLimiterFilterer: MultiAggregateRateLimiterFilterer{contract: contract}}, nil +} + +type MultiAggregateRateLimiter struct { + address common.Address + abi abi.ABI + MultiAggregateRateLimiterCaller + MultiAggregateRateLimiterTransactor + MultiAggregateRateLimiterFilterer +} + +type MultiAggregateRateLimiterCaller struct { + contract *bind.BoundContract +} + +type MultiAggregateRateLimiterTransactor struct { + contract *bind.BoundContract +} + +type MultiAggregateRateLimiterFilterer struct { + contract *bind.BoundContract +} + +type MultiAggregateRateLimiterSession struct { + Contract *MultiAggregateRateLimiter + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type MultiAggregateRateLimiterCallerSession struct { + Contract *MultiAggregateRateLimiterCaller + CallOpts bind.CallOpts +} + +type MultiAggregateRateLimiterTransactorSession struct { + Contract *MultiAggregateRateLimiterTransactor + TransactOpts bind.TransactOpts +} + +type MultiAggregateRateLimiterRaw struct { + Contract *MultiAggregateRateLimiter +} + +type MultiAggregateRateLimiterCallerRaw struct { + Contract *MultiAggregateRateLimiterCaller +} + +type MultiAggregateRateLimiterTransactorRaw struct { + Contract *MultiAggregateRateLimiterTransactor +} + +func NewMultiAggregateRateLimiter(address common.Address, backend bind.ContractBackend) (*MultiAggregateRateLimiter, error) { + abi, err := abi.JSON(strings.NewReader(MultiAggregateRateLimiterABI)) + if err != nil { + return nil, err + } + contract, err := bindMultiAggregateRateLimiter(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &MultiAggregateRateLimiter{address: address, abi: abi, MultiAggregateRateLimiterCaller: MultiAggregateRateLimiterCaller{contract: contract}, MultiAggregateRateLimiterTransactor: MultiAggregateRateLimiterTransactor{contract: contract}, MultiAggregateRateLimiterFilterer: MultiAggregateRateLimiterFilterer{contract: contract}}, nil +} + +func NewMultiAggregateRateLimiterCaller(address common.Address, caller bind.ContractCaller) (*MultiAggregateRateLimiterCaller, error) { + contract, err := bindMultiAggregateRateLimiter(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &MultiAggregateRateLimiterCaller{contract: contract}, nil +} + +func NewMultiAggregateRateLimiterTransactor(address common.Address, transactor bind.ContractTransactor) (*MultiAggregateRateLimiterTransactor, error) { + contract, err := bindMultiAggregateRateLimiter(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &MultiAggregateRateLimiterTransactor{contract: contract}, nil +} + +func NewMultiAggregateRateLimiterFilterer(address common.Address, filterer bind.ContractFilterer) (*MultiAggregateRateLimiterFilterer, error) { + contract, err := bindMultiAggregateRateLimiter(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &MultiAggregateRateLimiterFilterer{contract: contract}, nil +} + +func bindMultiAggregateRateLimiter(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := MultiAggregateRateLimiterMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MultiAggregateRateLimiter.Contract.MultiAggregateRateLimiterCaller.contract.Call(opts, result, method, params...) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.Contract.MultiAggregateRateLimiterTransactor.contract.Transfer(opts) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.Contract.MultiAggregateRateLimiterTransactor.contract.Transact(opts, method, params...) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MultiAggregateRateLimiter.Contract.contract.Call(opts, result, method, params...) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.Contract.contract.Transfer(opts) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.Contract.contract.Transact(opts, method, params...) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterCaller) CurrentRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64, isOutboundLane bool) (RateLimiterTokenBucket, error) { + var out []interface{} + err := _MultiAggregateRateLimiter.contract.Call(opts, &out, "currentRateLimiterState", remoteChainSelector, isOutboundLane) + + if err != nil { + return *new(RateLimiterTokenBucket), err + } + + out0 := *abi.ConvertType(out[0], new(RateLimiterTokenBucket)).(*RateLimiterTokenBucket) + + return out0, err + +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterSession) CurrentRateLimiterState(remoteChainSelector uint64, isOutboundLane bool) (RateLimiterTokenBucket, error) { + return _MultiAggregateRateLimiter.Contract.CurrentRateLimiterState(&_MultiAggregateRateLimiter.CallOpts, remoteChainSelector, isOutboundLane) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterCallerSession) CurrentRateLimiterState(remoteChainSelector uint64, isOutboundLane bool) (RateLimiterTokenBucket, error) { + return _MultiAggregateRateLimiter.Contract.CurrentRateLimiterState(&_MultiAggregateRateLimiter.CallOpts, remoteChainSelector, isOutboundLane) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterCaller) GetAllAuthorizedCallers(opts *bind.CallOpts) ([]common.Address, error) { + var out []interface{} + err := _MultiAggregateRateLimiter.contract.Call(opts, &out, "getAllAuthorizedCallers") + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterSession) GetAllAuthorizedCallers() ([]common.Address, error) { + return _MultiAggregateRateLimiter.Contract.GetAllAuthorizedCallers(&_MultiAggregateRateLimiter.CallOpts) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterCallerSession) GetAllAuthorizedCallers() ([]common.Address, error) { + return _MultiAggregateRateLimiter.Contract.GetAllAuthorizedCallers(&_MultiAggregateRateLimiter.CallOpts) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterCaller) GetAllRateLimitTokens(opts *bind.CallOpts, remoteChainSelector uint64) (GetAllRateLimitTokens, + + error) { + var out []interface{} + err := _MultiAggregateRateLimiter.contract.Call(opts, &out, "getAllRateLimitTokens", remoteChainSelector) + + outstruct := new(GetAllRateLimitTokens) + if err != nil { + return *outstruct, err + } + + outstruct.LocalTokens = *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + outstruct.RemoteTokens = *abi.ConvertType(out[1], new([][]byte)).(*[][]byte) + + return *outstruct, err + +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterSession) GetAllRateLimitTokens(remoteChainSelector uint64) (GetAllRateLimitTokens, + + error) { + return _MultiAggregateRateLimiter.Contract.GetAllRateLimitTokens(&_MultiAggregateRateLimiter.CallOpts, remoteChainSelector) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterCallerSession) GetAllRateLimitTokens(remoteChainSelector uint64) (GetAllRateLimitTokens, + + error) { + return _MultiAggregateRateLimiter.Contract.GetAllRateLimitTokens(&_MultiAggregateRateLimiter.CallOpts, remoteChainSelector) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterCaller) GetFeeQuoter(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _MultiAggregateRateLimiter.contract.Call(opts, &out, "getFeeQuoter") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterSession) GetFeeQuoter() (common.Address, error) { + return _MultiAggregateRateLimiter.Contract.GetFeeQuoter(&_MultiAggregateRateLimiter.CallOpts) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterCallerSession) GetFeeQuoter() (common.Address, error) { + return _MultiAggregateRateLimiter.Contract.GetFeeQuoter(&_MultiAggregateRateLimiter.CallOpts) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _MultiAggregateRateLimiter.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 + +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterSession) Owner() (common.Address, error) { + return _MultiAggregateRateLimiter.Contract.Owner(&_MultiAggregateRateLimiter.CallOpts) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterCallerSession) Owner() (common.Address, error) { + return _MultiAggregateRateLimiter.Contract.Owner(&_MultiAggregateRateLimiter.CallOpts) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _MultiAggregateRateLimiter.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterSession) TypeAndVersion() (string, error) { + return _MultiAggregateRateLimiter.Contract.TypeAndVersion(&_MultiAggregateRateLimiter.CallOpts) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterCallerSession) TypeAndVersion() (string, error) { + return _MultiAggregateRateLimiter.Contract.TypeAndVersion(&_MultiAggregateRateLimiter.CallOpts) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.contract.Transact(opts, "acceptOwnership") +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterSession) AcceptOwnership() (*types.Transaction, error) { + return _MultiAggregateRateLimiter.Contract.AcceptOwnership(&_MultiAggregateRateLimiter.TransactOpts) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _MultiAggregateRateLimiter.Contract.AcceptOwnership(&_MultiAggregateRateLimiter.TransactOpts) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterTransactor) ApplyAuthorizedCallerUpdates(opts *bind.TransactOpts, authorizedCallerArgs AuthorizedCallersAuthorizedCallerArgs) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.contract.Transact(opts, "applyAuthorizedCallerUpdates", authorizedCallerArgs) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterSession) ApplyAuthorizedCallerUpdates(authorizedCallerArgs AuthorizedCallersAuthorizedCallerArgs) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.Contract.ApplyAuthorizedCallerUpdates(&_MultiAggregateRateLimiter.TransactOpts, authorizedCallerArgs) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterTransactorSession) ApplyAuthorizedCallerUpdates(authorizedCallerArgs AuthorizedCallersAuthorizedCallerArgs) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.Contract.ApplyAuthorizedCallerUpdates(&_MultiAggregateRateLimiter.TransactOpts, authorizedCallerArgs) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterTransactor) ApplyRateLimiterConfigUpdates(opts *bind.TransactOpts, rateLimiterUpdates []MultiAggregateRateLimiterRateLimiterConfigArgs) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.contract.Transact(opts, "applyRateLimiterConfigUpdates", rateLimiterUpdates) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterSession) ApplyRateLimiterConfigUpdates(rateLimiterUpdates []MultiAggregateRateLimiterRateLimiterConfigArgs) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.Contract.ApplyRateLimiterConfigUpdates(&_MultiAggregateRateLimiter.TransactOpts, rateLimiterUpdates) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterTransactorSession) ApplyRateLimiterConfigUpdates(rateLimiterUpdates []MultiAggregateRateLimiterRateLimiterConfigArgs) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.Contract.ApplyRateLimiterConfigUpdates(&_MultiAggregateRateLimiter.TransactOpts, rateLimiterUpdates) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterTransactor) OnInboundMessage(opts *bind.TransactOpts, message ClientAny2EVMMessage) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.contract.Transact(opts, "onInboundMessage", message) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterSession) OnInboundMessage(message ClientAny2EVMMessage) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.Contract.OnInboundMessage(&_MultiAggregateRateLimiter.TransactOpts, message) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterTransactorSession) OnInboundMessage(message ClientAny2EVMMessage) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.Contract.OnInboundMessage(&_MultiAggregateRateLimiter.TransactOpts, message) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterTransactor) OnOutboundMessage(opts *bind.TransactOpts, destChainSelector uint64, message ClientEVM2AnyMessage) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.contract.Transact(opts, "onOutboundMessage", destChainSelector, message) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterSession) OnOutboundMessage(destChainSelector uint64, message ClientEVM2AnyMessage) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.Contract.OnOutboundMessage(&_MultiAggregateRateLimiter.TransactOpts, destChainSelector, message) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterTransactorSession) OnOutboundMessage(destChainSelector uint64, message ClientEVM2AnyMessage) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.Contract.OnOutboundMessage(&_MultiAggregateRateLimiter.TransactOpts, destChainSelector, message) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterTransactor) SetFeeQuoter(opts *bind.TransactOpts, newFeeQuoter common.Address) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.contract.Transact(opts, "setFeeQuoter", newFeeQuoter) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterSession) SetFeeQuoter(newFeeQuoter common.Address) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.Contract.SetFeeQuoter(&_MultiAggregateRateLimiter.TransactOpts, newFeeQuoter) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterTransactorSession) SetFeeQuoter(newFeeQuoter common.Address) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.Contract.SetFeeQuoter(&_MultiAggregateRateLimiter.TransactOpts, newFeeQuoter) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.contract.Transact(opts, "transferOwnership", to) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.Contract.TransferOwnership(&_MultiAggregateRateLimiter.TransactOpts, to) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.Contract.TransferOwnership(&_MultiAggregateRateLimiter.TransactOpts, to) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterTransactor) UpdateRateLimitTokens(opts *bind.TransactOpts, removes []MultiAggregateRateLimiterLocalRateLimitToken, adds []MultiAggregateRateLimiterRateLimitTokenArgs) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.contract.Transact(opts, "updateRateLimitTokens", removes, adds) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterSession) UpdateRateLimitTokens(removes []MultiAggregateRateLimiterLocalRateLimitToken, adds []MultiAggregateRateLimiterRateLimitTokenArgs) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.Contract.UpdateRateLimitTokens(&_MultiAggregateRateLimiter.TransactOpts, removes, adds) +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterTransactorSession) UpdateRateLimitTokens(removes []MultiAggregateRateLimiterLocalRateLimitToken, adds []MultiAggregateRateLimiterRateLimitTokenArgs) (*types.Transaction, error) { + return _MultiAggregateRateLimiter.Contract.UpdateRateLimitTokens(&_MultiAggregateRateLimiter.TransactOpts, removes, adds) +} + +type MultiAggregateRateLimiterAuthorizedCallerAddedIterator struct { + Event *MultiAggregateRateLimiterAuthorizedCallerAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MultiAggregateRateLimiterAuthorizedCallerAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MultiAggregateRateLimiterAuthorizedCallerAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MultiAggregateRateLimiterAuthorizedCallerAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MultiAggregateRateLimiterAuthorizedCallerAddedIterator) Error() error { + return it.fail +} + +func (it *MultiAggregateRateLimiterAuthorizedCallerAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MultiAggregateRateLimiterAuthorizedCallerAdded struct { + Caller common.Address + Raw types.Log +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) FilterAuthorizedCallerAdded(opts *bind.FilterOpts) (*MultiAggregateRateLimiterAuthorizedCallerAddedIterator, error) { + + logs, sub, err := _MultiAggregateRateLimiter.contract.FilterLogs(opts, "AuthorizedCallerAdded") + if err != nil { + return nil, err + } + return &MultiAggregateRateLimiterAuthorizedCallerAddedIterator{contract: _MultiAggregateRateLimiter.contract, event: "AuthorizedCallerAdded", logs: logs, sub: sub}, nil +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) WatchAuthorizedCallerAdded(opts *bind.WatchOpts, sink chan<- *MultiAggregateRateLimiterAuthorizedCallerAdded) (event.Subscription, error) { + + logs, sub, err := _MultiAggregateRateLimiter.contract.WatchLogs(opts, "AuthorizedCallerAdded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MultiAggregateRateLimiterAuthorizedCallerAdded) + if err := _MultiAggregateRateLimiter.contract.UnpackLog(event, "AuthorizedCallerAdded", 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 +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) ParseAuthorizedCallerAdded(log types.Log) (*MultiAggregateRateLimiterAuthorizedCallerAdded, error) { + event := new(MultiAggregateRateLimiterAuthorizedCallerAdded) + if err := _MultiAggregateRateLimiter.contract.UnpackLog(event, "AuthorizedCallerAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MultiAggregateRateLimiterAuthorizedCallerRemovedIterator struct { + Event *MultiAggregateRateLimiterAuthorizedCallerRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MultiAggregateRateLimiterAuthorizedCallerRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MultiAggregateRateLimiterAuthorizedCallerRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MultiAggregateRateLimiterAuthorizedCallerRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MultiAggregateRateLimiterAuthorizedCallerRemovedIterator) Error() error { + return it.fail +} + +func (it *MultiAggregateRateLimiterAuthorizedCallerRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MultiAggregateRateLimiterAuthorizedCallerRemoved struct { + Caller common.Address + Raw types.Log +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) FilterAuthorizedCallerRemoved(opts *bind.FilterOpts) (*MultiAggregateRateLimiterAuthorizedCallerRemovedIterator, error) { + + logs, sub, err := _MultiAggregateRateLimiter.contract.FilterLogs(opts, "AuthorizedCallerRemoved") + if err != nil { + return nil, err + } + return &MultiAggregateRateLimiterAuthorizedCallerRemovedIterator{contract: _MultiAggregateRateLimiter.contract, event: "AuthorizedCallerRemoved", logs: logs, sub: sub}, nil +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) WatchAuthorizedCallerRemoved(opts *bind.WatchOpts, sink chan<- *MultiAggregateRateLimiterAuthorizedCallerRemoved) (event.Subscription, error) { + + logs, sub, err := _MultiAggregateRateLimiter.contract.WatchLogs(opts, "AuthorizedCallerRemoved") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MultiAggregateRateLimiterAuthorizedCallerRemoved) + if err := _MultiAggregateRateLimiter.contract.UnpackLog(event, "AuthorizedCallerRemoved", 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 +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) ParseAuthorizedCallerRemoved(log types.Log) (*MultiAggregateRateLimiterAuthorizedCallerRemoved, error) { + event := new(MultiAggregateRateLimiterAuthorizedCallerRemoved) + if err := _MultiAggregateRateLimiter.contract.UnpackLog(event, "AuthorizedCallerRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MultiAggregateRateLimiterConfigChangedIterator struct { + Event *MultiAggregateRateLimiterConfigChanged + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MultiAggregateRateLimiterConfigChangedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MultiAggregateRateLimiterConfigChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MultiAggregateRateLimiterConfigChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MultiAggregateRateLimiterConfigChangedIterator) Error() error { + return it.fail +} + +func (it *MultiAggregateRateLimiterConfigChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MultiAggregateRateLimiterConfigChanged struct { + Config RateLimiterConfig + Raw types.Log +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) FilterConfigChanged(opts *bind.FilterOpts) (*MultiAggregateRateLimiterConfigChangedIterator, error) { + + logs, sub, err := _MultiAggregateRateLimiter.contract.FilterLogs(opts, "ConfigChanged") + if err != nil { + return nil, err + } + return &MultiAggregateRateLimiterConfigChangedIterator{contract: _MultiAggregateRateLimiter.contract, event: "ConfigChanged", logs: logs, sub: sub}, nil +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) WatchConfigChanged(opts *bind.WatchOpts, sink chan<- *MultiAggregateRateLimiterConfigChanged) (event.Subscription, error) { + + logs, sub, err := _MultiAggregateRateLimiter.contract.WatchLogs(opts, "ConfigChanged") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MultiAggregateRateLimiterConfigChanged) + if err := _MultiAggregateRateLimiter.contract.UnpackLog(event, "ConfigChanged", 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 +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) ParseConfigChanged(log types.Log) (*MultiAggregateRateLimiterConfigChanged, error) { + event := new(MultiAggregateRateLimiterConfigChanged) + if err := _MultiAggregateRateLimiter.contract.UnpackLog(event, "ConfigChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MultiAggregateRateLimiterFeeQuoterSetIterator struct { + Event *MultiAggregateRateLimiterFeeQuoterSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MultiAggregateRateLimiterFeeQuoterSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MultiAggregateRateLimiterFeeQuoterSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MultiAggregateRateLimiterFeeQuoterSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MultiAggregateRateLimiterFeeQuoterSetIterator) Error() error { + return it.fail +} + +func (it *MultiAggregateRateLimiterFeeQuoterSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MultiAggregateRateLimiterFeeQuoterSet struct { + NewFeeQuoter common.Address + Raw types.Log +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) FilterFeeQuoterSet(opts *bind.FilterOpts) (*MultiAggregateRateLimiterFeeQuoterSetIterator, error) { + + logs, sub, err := _MultiAggregateRateLimiter.contract.FilterLogs(opts, "FeeQuoterSet") + if err != nil { + return nil, err + } + return &MultiAggregateRateLimiterFeeQuoterSetIterator{contract: _MultiAggregateRateLimiter.contract, event: "FeeQuoterSet", logs: logs, sub: sub}, nil +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) WatchFeeQuoterSet(opts *bind.WatchOpts, sink chan<- *MultiAggregateRateLimiterFeeQuoterSet) (event.Subscription, error) { + + logs, sub, err := _MultiAggregateRateLimiter.contract.WatchLogs(opts, "FeeQuoterSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MultiAggregateRateLimiterFeeQuoterSet) + if err := _MultiAggregateRateLimiter.contract.UnpackLog(event, "FeeQuoterSet", 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 +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) ParseFeeQuoterSet(log types.Log) (*MultiAggregateRateLimiterFeeQuoterSet, error) { + event := new(MultiAggregateRateLimiterFeeQuoterSet) + if err := _MultiAggregateRateLimiter.contract.UnpackLog(event, "FeeQuoterSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MultiAggregateRateLimiterOwnershipTransferRequestedIterator struct { + Event *MultiAggregateRateLimiterOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MultiAggregateRateLimiterOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MultiAggregateRateLimiterOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MultiAggregateRateLimiterOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MultiAggregateRateLimiterOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *MultiAggregateRateLimiterOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MultiAggregateRateLimiterOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MultiAggregateRateLimiterOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _MultiAggregateRateLimiter.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &MultiAggregateRateLimiterOwnershipTransferRequestedIterator{contract: _MultiAggregateRateLimiter.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *MultiAggregateRateLimiterOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _MultiAggregateRateLimiter.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MultiAggregateRateLimiterOwnershipTransferRequested) + if err := _MultiAggregateRateLimiter.contract.UnpackLog(event, "OwnershipTransferRequested", 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 +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) ParseOwnershipTransferRequested(log types.Log) (*MultiAggregateRateLimiterOwnershipTransferRequested, error) { + event := new(MultiAggregateRateLimiterOwnershipTransferRequested) + if err := _MultiAggregateRateLimiter.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MultiAggregateRateLimiterOwnershipTransferredIterator struct { + Event *MultiAggregateRateLimiterOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MultiAggregateRateLimiterOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MultiAggregateRateLimiterOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MultiAggregateRateLimiterOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MultiAggregateRateLimiterOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *MultiAggregateRateLimiterOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MultiAggregateRateLimiterOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MultiAggregateRateLimiterOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _MultiAggregateRateLimiter.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &MultiAggregateRateLimiterOwnershipTransferredIterator{contract: _MultiAggregateRateLimiter.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *MultiAggregateRateLimiterOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _MultiAggregateRateLimiter.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MultiAggregateRateLimiterOwnershipTransferred) + if err := _MultiAggregateRateLimiter.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 +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) ParseOwnershipTransferred(log types.Log) (*MultiAggregateRateLimiterOwnershipTransferred, error) { + event := new(MultiAggregateRateLimiterOwnershipTransferred) + if err := _MultiAggregateRateLimiter.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MultiAggregateRateLimiterRateLimiterConfigUpdatedIterator struct { + Event *MultiAggregateRateLimiterRateLimiterConfigUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MultiAggregateRateLimiterRateLimiterConfigUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MultiAggregateRateLimiterRateLimiterConfigUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MultiAggregateRateLimiterRateLimiterConfigUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MultiAggregateRateLimiterRateLimiterConfigUpdatedIterator) Error() error { + return it.fail +} + +func (it *MultiAggregateRateLimiterRateLimiterConfigUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MultiAggregateRateLimiterRateLimiterConfigUpdated struct { + RemoteChainSelector uint64 + IsOutboundLane bool + Config RateLimiterConfig + Raw types.Log +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) FilterRateLimiterConfigUpdated(opts *bind.FilterOpts, remoteChainSelector []uint64) (*MultiAggregateRateLimiterRateLimiterConfigUpdatedIterator, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _MultiAggregateRateLimiter.contract.FilterLogs(opts, "RateLimiterConfigUpdated", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return &MultiAggregateRateLimiterRateLimiterConfigUpdatedIterator{contract: _MultiAggregateRateLimiter.contract, event: "RateLimiterConfigUpdated", logs: logs, sub: sub}, nil +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) WatchRateLimiterConfigUpdated(opts *bind.WatchOpts, sink chan<- *MultiAggregateRateLimiterRateLimiterConfigUpdated, remoteChainSelector []uint64) (event.Subscription, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _MultiAggregateRateLimiter.contract.WatchLogs(opts, "RateLimiterConfigUpdated", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MultiAggregateRateLimiterRateLimiterConfigUpdated) + if err := _MultiAggregateRateLimiter.contract.UnpackLog(event, "RateLimiterConfigUpdated", 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 +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) ParseRateLimiterConfigUpdated(log types.Log) (*MultiAggregateRateLimiterRateLimiterConfigUpdated, error) { + event := new(MultiAggregateRateLimiterRateLimiterConfigUpdated) + if err := _MultiAggregateRateLimiter.contract.UnpackLog(event, "RateLimiterConfigUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MultiAggregateRateLimiterTokenAggregateRateLimitAddedIterator struct { + Event *MultiAggregateRateLimiterTokenAggregateRateLimitAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MultiAggregateRateLimiterTokenAggregateRateLimitAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MultiAggregateRateLimiterTokenAggregateRateLimitAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MultiAggregateRateLimiterTokenAggregateRateLimitAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MultiAggregateRateLimiterTokenAggregateRateLimitAddedIterator) Error() error { + return it.fail +} + +func (it *MultiAggregateRateLimiterTokenAggregateRateLimitAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MultiAggregateRateLimiterTokenAggregateRateLimitAdded struct { + RemoteChainSelector uint64 + RemoteToken []byte + LocalToken common.Address + Raw types.Log +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) FilterTokenAggregateRateLimitAdded(opts *bind.FilterOpts) (*MultiAggregateRateLimiterTokenAggregateRateLimitAddedIterator, error) { + + logs, sub, err := _MultiAggregateRateLimiter.contract.FilterLogs(opts, "TokenAggregateRateLimitAdded") + if err != nil { + return nil, err + } + return &MultiAggregateRateLimiterTokenAggregateRateLimitAddedIterator{contract: _MultiAggregateRateLimiter.contract, event: "TokenAggregateRateLimitAdded", logs: logs, sub: sub}, nil +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) WatchTokenAggregateRateLimitAdded(opts *bind.WatchOpts, sink chan<- *MultiAggregateRateLimiterTokenAggregateRateLimitAdded) (event.Subscription, error) { + + logs, sub, err := _MultiAggregateRateLimiter.contract.WatchLogs(opts, "TokenAggregateRateLimitAdded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MultiAggregateRateLimiterTokenAggregateRateLimitAdded) + if err := _MultiAggregateRateLimiter.contract.UnpackLog(event, "TokenAggregateRateLimitAdded", 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 +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) ParseTokenAggregateRateLimitAdded(log types.Log) (*MultiAggregateRateLimiterTokenAggregateRateLimitAdded, error) { + event := new(MultiAggregateRateLimiterTokenAggregateRateLimitAdded) + if err := _MultiAggregateRateLimiter.contract.UnpackLog(event, "TokenAggregateRateLimitAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MultiAggregateRateLimiterTokenAggregateRateLimitRemovedIterator struct { + Event *MultiAggregateRateLimiterTokenAggregateRateLimitRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MultiAggregateRateLimiterTokenAggregateRateLimitRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MultiAggregateRateLimiterTokenAggregateRateLimitRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MultiAggregateRateLimiterTokenAggregateRateLimitRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MultiAggregateRateLimiterTokenAggregateRateLimitRemovedIterator) Error() error { + return it.fail +} + +func (it *MultiAggregateRateLimiterTokenAggregateRateLimitRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MultiAggregateRateLimiterTokenAggregateRateLimitRemoved struct { + RemoteChainSelector uint64 + LocalToken common.Address + Raw types.Log +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) FilterTokenAggregateRateLimitRemoved(opts *bind.FilterOpts) (*MultiAggregateRateLimiterTokenAggregateRateLimitRemovedIterator, error) { + + logs, sub, err := _MultiAggregateRateLimiter.contract.FilterLogs(opts, "TokenAggregateRateLimitRemoved") + if err != nil { + return nil, err + } + return &MultiAggregateRateLimiterTokenAggregateRateLimitRemovedIterator{contract: _MultiAggregateRateLimiter.contract, event: "TokenAggregateRateLimitRemoved", logs: logs, sub: sub}, nil +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) WatchTokenAggregateRateLimitRemoved(opts *bind.WatchOpts, sink chan<- *MultiAggregateRateLimiterTokenAggregateRateLimitRemoved) (event.Subscription, error) { + + logs, sub, err := _MultiAggregateRateLimiter.contract.WatchLogs(opts, "TokenAggregateRateLimitRemoved") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MultiAggregateRateLimiterTokenAggregateRateLimitRemoved) + if err := _MultiAggregateRateLimiter.contract.UnpackLog(event, "TokenAggregateRateLimitRemoved", 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 +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) ParseTokenAggregateRateLimitRemoved(log types.Log) (*MultiAggregateRateLimiterTokenAggregateRateLimitRemoved, error) { + event := new(MultiAggregateRateLimiterTokenAggregateRateLimitRemoved) + if err := _MultiAggregateRateLimiter.contract.UnpackLog(event, "TokenAggregateRateLimitRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MultiAggregateRateLimiterTokensConsumedIterator struct { + Event *MultiAggregateRateLimiterTokensConsumed + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MultiAggregateRateLimiterTokensConsumedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MultiAggregateRateLimiterTokensConsumed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MultiAggregateRateLimiterTokensConsumed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MultiAggregateRateLimiterTokensConsumedIterator) Error() error { + return it.fail +} + +func (it *MultiAggregateRateLimiterTokensConsumedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MultiAggregateRateLimiterTokensConsumed struct { + Tokens *big.Int + Raw types.Log +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) FilterTokensConsumed(opts *bind.FilterOpts) (*MultiAggregateRateLimiterTokensConsumedIterator, error) { + + logs, sub, err := _MultiAggregateRateLimiter.contract.FilterLogs(opts, "TokensConsumed") + if err != nil { + return nil, err + } + return &MultiAggregateRateLimiterTokensConsumedIterator{contract: _MultiAggregateRateLimiter.contract, event: "TokensConsumed", logs: logs, sub: sub}, nil +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) WatchTokensConsumed(opts *bind.WatchOpts, sink chan<- *MultiAggregateRateLimiterTokensConsumed) (event.Subscription, error) { + + logs, sub, err := _MultiAggregateRateLimiter.contract.WatchLogs(opts, "TokensConsumed") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MultiAggregateRateLimiterTokensConsumed) + if err := _MultiAggregateRateLimiter.contract.UnpackLog(event, "TokensConsumed", 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 +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiterFilterer) ParseTokensConsumed(log types.Log) (*MultiAggregateRateLimiterTokensConsumed, error) { + event := new(MultiAggregateRateLimiterTokensConsumed) + if err := _MultiAggregateRateLimiter.contract.UnpackLog(event, "TokensConsumed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type GetAllRateLimitTokens struct { + LocalTokens []common.Address + RemoteTokens [][]byte +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiter) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _MultiAggregateRateLimiter.abi.Events["AuthorizedCallerAdded"].ID: + return _MultiAggregateRateLimiter.ParseAuthorizedCallerAdded(log) + case _MultiAggregateRateLimiter.abi.Events["AuthorizedCallerRemoved"].ID: + return _MultiAggregateRateLimiter.ParseAuthorizedCallerRemoved(log) + case _MultiAggregateRateLimiter.abi.Events["ConfigChanged"].ID: + return _MultiAggregateRateLimiter.ParseConfigChanged(log) + case _MultiAggregateRateLimiter.abi.Events["FeeQuoterSet"].ID: + return _MultiAggregateRateLimiter.ParseFeeQuoterSet(log) + case _MultiAggregateRateLimiter.abi.Events["OwnershipTransferRequested"].ID: + return _MultiAggregateRateLimiter.ParseOwnershipTransferRequested(log) + case _MultiAggregateRateLimiter.abi.Events["OwnershipTransferred"].ID: + return _MultiAggregateRateLimiter.ParseOwnershipTransferred(log) + case _MultiAggregateRateLimiter.abi.Events["RateLimiterConfigUpdated"].ID: + return _MultiAggregateRateLimiter.ParseRateLimiterConfigUpdated(log) + case _MultiAggregateRateLimiter.abi.Events["TokenAggregateRateLimitAdded"].ID: + return _MultiAggregateRateLimiter.ParseTokenAggregateRateLimitAdded(log) + case _MultiAggregateRateLimiter.abi.Events["TokenAggregateRateLimitRemoved"].ID: + return _MultiAggregateRateLimiter.ParseTokenAggregateRateLimitRemoved(log) + case _MultiAggregateRateLimiter.abi.Events["TokensConsumed"].ID: + return _MultiAggregateRateLimiter.ParseTokensConsumed(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (MultiAggregateRateLimiterAuthorizedCallerAdded) Topic() common.Hash { + return common.HexToHash("0xeb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef") +} + +func (MultiAggregateRateLimiterAuthorizedCallerRemoved) Topic() common.Hash { + return common.HexToHash("0xc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda77580") +} + +func (MultiAggregateRateLimiterConfigChanged) Topic() common.Hash { + return common.HexToHash("0x9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19") +} + +func (MultiAggregateRateLimiterFeeQuoterSet) Topic() common.Hash { + return common.HexToHash("0x7c737a8eddf62436489aa3600ed26e75e0a58b0f8c0d266bbcee64358c39fdac") +} + +func (MultiAggregateRateLimiterOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (MultiAggregateRateLimiterOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (MultiAggregateRateLimiterRateLimiterConfigUpdated) Topic() common.Hash { + return common.HexToHash("0xf14a5415ce6988a9e870a85fff0b9d7b7dd79bbc228cb63cad610daf6f7b6b97") +} + +func (MultiAggregateRateLimiterTokenAggregateRateLimitAdded) Topic() common.Hash { + return common.HexToHash("0xad72a792d2a307f400c278be7deaeec6964276783304580cdc4e905436b8d5c5") +} + +func (MultiAggregateRateLimiterTokenAggregateRateLimitRemoved) Topic() common.Hash { + return common.HexToHash("0x530cabd30786b7235e124a6c0db77e0b685ef22813b1fe87554247f404eb8ed6") +} + +func (MultiAggregateRateLimiterTokensConsumed) Topic() common.Hash { + return common.HexToHash("0x1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a") +} + +func (_MultiAggregateRateLimiter *MultiAggregateRateLimiter) Address() common.Address { + return _MultiAggregateRateLimiter.address +} + +type MultiAggregateRateLimiterInterface interface { + CurrentRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64, isOutboundLane bool) (RateLimiterTokenBucket, error) + + GetAllAuthorizedCallers(opts *bind.CallOpts) ([]common.Address, error) + + GetAllRateLimitTokens(opts *bind.CallOpts, remoteChainSelector uint64) (GetAllRateLimitTokens, + + error) + + GetFeeQuoter(opts *bind.CallOpts) (common.Address, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + ApplyAuthorizedCallerUpdates(opts *bind.TransactOpts, authorizedCallerArgs AuthorizedCallersAuthorizedCallerArgs) (*types.Transaction, error) + + ApplyRateLimiterConfigUpdates(opts *bind.TransactOpts, rateLimiterUpdates []MultiAggregateRateLimiterRateLimiterConfigArgs) (*types.Transaction, error) + + OnInboundMessage(opts *bind.TransactOpts, message ClientAny2EVMMessage) (*types.Transaction, error) + + OnOutboundMessage(opts *bind.TransactOpts, destChainSelector uint64, message ClientEVM2AnyMessage) (*types.Transaction, error) + + SetFeeQuoter(opts *bind.TransactOpts, newFeeQuoter common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + UpdateRateLimitTokens(opts *bind.TransactOpts, removes []MultiAggregateRateLimiterLocalRateLimitToken, adds []MultiAggregateRateLimiterRateLimitTokenArgs) (*types.Transaction, error) + + FilterAuthorizedCallerAdded(opts *bind.FilterOpts) (*MultiAggregateRateLimiterAuthorizedCallerAddedIterator, error) + + WatchAuthorizedCallerAdded(opts *bind.WatchOpts, sink chan<- *MultiAggregateRateLimiterAuthorizedCallerAdded) (event.Subscription, error) + + ParseAuthorizedCallerAdded(log types.Log) (*MultiAggregateRateLimiterAuthorizedCallerAdded, error) + + FilterAuthorizedCallerRemoved(opts *bind.FilterOpts) (*MultiAggregateRateLimiterAuthorizedCallerRemovedIterator, error) + + WatchAuthorizedCallerRemoved(opts *bind.WatchOpts, sink chan<- *MultiAggregateRateLimiterAuthorizedCallerRemoved) (event.Subscription, error) + + ParseAuthorizedCallerRemoved(log types.Log) (*MultiAggregateRateLimiterAuthorizedCallerRemoved, error) + + FilterConfigChanged(opts *bind.FilterOpts) (*MultiAggregateRateLimiterConfigChangedIterator, error) + + WatchConfigChanged(opts *bind.WatchOpts, sink chan<- *MultiAggregateRateLimiterConfigChanged) (event.Subscription, error) + + ParseConfigChanged(log types.Log) (*MultiAggregateRateLimiterConfigChanged, error) + + FilterFeeQuoterSet(opts *bind.FilterOpts) (*MultiAggregateRateLimiterFeeQuoterSetIterator, error) + + WatchFeeQuoterSet(opts *bind.WatchOpts, sink chan<- *MultiAggregateRateLimiterFeeQuoterSet) (event.Subscription, error) + + ParseFeeQuoterSet(log types.Log) (*MultiAggregateRateLimiterFeeQuoterSet, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MultiAggregateRateLimiterOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *MultiAggregateRateLimiterOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*MultiAggregateRateLimiterOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MultiAggregateRateLimiterOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *MultiAggregateRateLimiterOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*MultiAggregateRateLimiterOwnershipTransferred, error) + + FilterRateLimiterConfigUpdated(opts *bind.FilterOpts, remoteChainSelector []uint64) (*MultiAggregateRateLimiterRateLimiterConfigUpdatedIterator, error) + + WatchRateLimiterConfigUpdated(opts *bind.WatchOpts, sink chan<- *MultiAggregateRateLimiterRateLimiterConfigUpdated, remoteChainSelector []uint64) (event.Subscription, error) + + ParseRateLimiterConfigUpdated(log types.Log) (*MultiAggregateRateLimiterRateLimiterConfigUpdated, error) + + FilterTokenAggregateRateLimitAdded(opts *bind.FilterOpts) (*MultiAggregateRateLimiterTokenAggregateRateLimitAddedIterator, error) + + WatchTokenAggregateRateLimitAdded(opts *bind.WatchOpts, sink chan<- *MultiAggregateRateLimiterTokenAggregateRateLimitAdded) (event.Subscription, error) + + ParseTokenAggregateRateLimitAdded(log types.Log) (*MultiAggregateRateLimiterTokenAggregateRateLimitAdded, error) + + FilterTokenAggregateRateLimitRemoved(opts *bind.FilterOpts) (*MultiAggregateRateLimiterTokenAggregateRateLimitRemovedIterator, error) + + WatchTokenAggregateRateLimitRemoved(opts *bind.WatchOpts, sink chan<- *MultiAggregateRateLimiterTokenAggregateRateLimitRemoved) (event.Subscription, error) + + ParseTokenAggregateRateLimitRemoved(log types.Log) (*MultiAggregateRateLimiterTokenAggregateRateLimitRemoved, error) + + FilterTokensConsumed(opts *bind.FilterOpts) (*MultiAggregateRateLimiterTokensConsumedIterator, error) + + WatchTokensConsumed(opts *bind.WatchOpts, sink chan<- *MultiAggregateRateLimiterTokensConsumed) (event.Subscription, error) + + ParseTokensConsumed(log types.Log) (*MultiAggregateRateLimiterTokensConsumed, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var MultiAggregateRateLimiterZKBin string = ("0x0003000000000002000d00000000000200020000000103550000006003100270000003820030019d0000008004000039000000400040043f000003820330019700000001002001900000003f0000c13d000000040030008c000000620000413d000000000201043b000000e002200270000003960020009c000000640000213d000003a00020009c0000009a0000a13d000003a10020009c000000ee0000213d000003a40020009c000002720000613d000003a50020009c000000620000c13d0000000001000416000000000001004b000000620000c13d0000000202000039000000000102041a000000800010043f000000000020043f0000002002000039000000000001004b0000002d0000613d000000a004000039000003ce0200004100000000030000190000000005040019000000000402041a000000000445043600000001022000390000000103300039000000000013004b000000250000413d000000600250008a00000080010000390e050d330000040f000000400200043d000d00000002001d0000002001000039000000000212043600000080010000390e050d570000040f0000000d020000290000000001210049000003820010009c00000382010080410000006001100210000003820020009c00000382020080410000004002200210000000000121019f00000e060001042e0000000002000416000000000002004b000000620000c13d0000001f0230003900000383022001970000008002200039000000400020043f0000001f0530018f000003840630019800000080026000390000004f0000613d000000000701034f000000007807043c0000000004840436000000000024004b0000004b0000c13d000000000005004b0000005c0000613d000000000161034f0000000304500210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000400030008c000000620000413d000000800100043d000800000001001d000003850010009c000000810000a13d000000000100001900000e0700010430000003970020009c000000b60000a13d000003980020009c0000010f0000213d0000039b0020009c000004120000613d0000039c0020009c000000620000c13d000000240030008c000000620000413d0000000002000416000000000002004b000000620000c13d0000000401100370000000000101043b000003850010009c000000620000213d0000000102000039000000000202041a00000385022001970000000003000411000000000023004b000007150000c13d000000000001004b000007380000c13d000003c201000041000000800010043f000003bf0100004100000e0700010430000000a00100043d000003860010009c000000620000213d0000001f02100039000000000032004b000000000400001900000387040080410000038702200197000000000002004b00000000050000190000038705004041000003870020009c000000000504c019000000000005004b000000620000c13d00000080021000390000000002020433000003860020009c000006e80000a13d000003cf01000041000000000010043f0000004101000039000000040010043f000003c60100004100000e0700010430000003a60020009c000004990000613d000003a70020009c000005830000613d000003a80020009c000000620000c13d0000000001000416000000000001004b000000620000c13d000000e001000039000000400010043f0000002301000039000000800010043f000003d201000041000000a00010043f000003d301000041000000c00010043f0000002001000039000000e00010043f000000800100003900000100020000390e050d450000040f000000e00110008a000003820010009c00000382010080410000006001100210000003d4011001c700000e060001042e0000039d0020009c0000057a0000613d0000039e0020009c0000061c0000613d0000039f0020009c000000620000c13d000000440030008c000000620000413d0000000002000416000000000002004b000000620000c13d0000000402100370000000000202043b000d00000002001d000003860020009c000000620000213d0000002401100370000000000101043b000c00000001001d000003860010009c000000620000213d0000000c0130006a000b00000001001d000003aa0010009c000000620000213d0000000b01000029000000a40010008c000000620000413d0000000001000411000000000010043f0000000301000039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000101043b000000000101041a000000000001004b000007540000c13d000000400100043d000003ca020000410000000000210435000000040210003900000000030004110000000000320435000003820010009c00000382010080410000004001100210000003c6011001c700000e0700010430000003a20020009c000004170000613d000003a30020009c000000620000c13d0000000001000416000000000001004b000000620000c13d000000000100041a00000385021001970000000006000411000000000026004b000007110000c13d0000000102000039000000000302041a0000038904300197000000000464019f000000000042041b0000038901100197000000000010041b00000000010004140000038505300197000003820010009c0000038201008041000000c001100210000003bc011001c70000800d020000390000000303000039000003cd040000410e050dfb0000040f0000000100200190000000620000613d000000000100001900000e060001042e000003990020009c000004840000613d0000039a0020009c000000620000c13d000000240030008c000000620000413d0000000002000416000000000002004b000000620000c13d0000000402100370000000000202043b000003860020009c000000620000213d0000002304200039000000000034004b000000620000813d0000000404200039000000000441034f000000000504043b000003860050009c000000940000213d00000005045002100000003f044000390000038804400197000003a90040009c000000940000213d0000008004400039000000400040043f000000800050043f000000a0045000c900000024022000390000000004420019000000000034004b000000620000213d000000000005004b0000086a0000c13d0000000101000039000000000101041a00000385011001970000000002000411000000000012004b000009280000c13d000000800100043d000000000001004b0000010d0000613d000d00000000001d0000000d010000290000000501100210000000a00110003900000000020104330000000013020434000003860330019800000b5d0000613d00000040022000390000000002020433000c00000002001d0000000001010433000b00000001001d000a00000003001d000000000030043f0000000601000039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000b06000029000000000006004b0000000003000039000000010300c0390000000100200190000000620000613d000000000201043b000000000006004b000000020220c039000000000402041a00000080014002700000038201100198000900000003001d000001790000613d000700000001001d000800000004001d000b00000002001d000003ad0100004100000000001004430000000001000414000003820010009c0000038201008041000000c001100210000003ae011001c70000800b020000390e050e000000040f0000000100200190000009cc0000613d000000000201043b000000070520006c0000000b07000029000000080800002900000cbe0000413d0000000101700039000001870000c13d000000000207041a000001990000013d0000000c0200002900000040052000390000000001050433000003ac071001970000000041020434000000000001004b000001cb0000613d000000000007004b00000c4b0000613d0000000002040433000003ac02200197000000000027004b000001d20000413d00000c4b0000013d000000000301041a000000800630027000000000045600a900000000055400d9000000000065004b00000cbe0000c13d000003ac05800197000000000054001a00000cbe0000413d000003ac033001970000000004540019000000000043004b000000000304801900000389048001970000008002200210000003af02200197000000000242019f000000000232019f0000000c0500002900000020065000390000000003060433000003ac03300197000003ac04200197000000000043004b0000000004034019000003b002200197000000000224019f0000000004050433000000000004004b000003b1040000410000000004006019000000000242019f000000000027041b000000400450003900000000020404330000008002200210000000000232019f000000000021041b0000000001000039000000010100c039000000400200043d0000000001120436000800000006001d0000000003060433000003ac033001970000000000310435000700000004001d0000000001040433000003ac0110019700000040032000390000000000130435000003820020009c000003820200804100000040012002100000000002000414000003820020009c0000038202008041000000c002200210000000000112019f000003b2011001c70000800d020000390000000103000039000003b3040000410e050dfb0000040f000000010020019000000009050000290000024a0000c13d000000620000013d000000000007004b00000c470000c13d0000000002040433000003ac002001980000000002000019000000000700001900000c470000c13d000400000007001d000700000005001d000800000004001d000000000001004b0000000001000039000000010100c039000300000001001d000000400300043d000003b70030009c000000940000213d000000a001300039000000400010043f0000000001230436000600000001001d000003ad0100004100000000001004430000000001000414000003820010009c0000038201008041000000c001100210000003ae011001c7000200000002001d0000800b02000039000500000003001d0e050e000000040f0000000100200190000009cc0000613d000000000101043b00000005040000290000008002400039000100000002001d000000040300002900000000003204350000006002400039000400000002001d000000020300002900000000003204350000004002400039000200000002001d000000030300002900000000003204350000038201100197000000060200002900000000001204350000000a01000029000000000010043f0000000601000039000000200010043f0000000b0000006b000002240000613d0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f00000001002001900000000905000029000000620000613d00000005020000290000000002020433000003ac02200197000000000101043b0000000203100039000000000403041a000003b804400197000000000224019f000000060400002900000000040404330000008004400210000003af04400197000000000242019f00000002040000290000000004040433000000000004004b000003b1040000410000000004006019000000000242019f000000000023041b0000000301100039000002420000013d0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f00000001002001900000000905000029000000620000613d00000005020000290000000002020433000003ac02200197000000000101043b000000000301041a000003b803300197000000000223019f000000060300002900000000030304330000008003300210000003af03300197000000000232019f00000002030000290000000003030433000000000003004b000003b1030000410000000003006019000000000232019f000000000021041b000000010110003900000004020000290000000002020433000003ac02200197000000010300002900000000030304330000008003300210000000000223019f000000000021041b000000400100043d00000000025104360000000c030000290000000003030433000000000003004b0000000003000039000000010300c039000000000032043500000008020000290000000002020433000003ac022001970000004003100039000000000023043500000007020000290000000002020433000003ac0220019700000060031000390000000000230435000003820010009c000003820100804100000040011002100000000002000414000003820020009c0000038202008041000000c002200210000000000112019f000003b9011001c70000800d020000390000000203000039000003ba040000410000000a050000290e050dfb0000040f0000000100200190000000620000613d0000000d02000029000d00010020003d000000800100043d0000000d0010006b0000013d0000413d0000010d0000013d000000440030008c000000620000413d0000000002000416000000000002004b000000620000c13d0000000402100370000000000202043b000003860020009c000000620000213d0000002304200039000000000034004b000000620000813d0000000404200039000000000441034f000000000504043b000003860050009c000000940000213d00000005045002100000003f044000390000038804400197000003a90040009c000000940000213d0000008004400039000000400040043f000000800050043f000000240220003900000006045002100000000004240019000000000034004b000000620000213d000000000005004b000008a50000c13d0000002402100370000000000202043b000d00000002001d000003860020009c000000620000213d0000000d020000290000002302200039000000000032004b000000000400001900000387040080410000038702200197000000000002004b00000000050000190000038705004041000003870020009c000000000504c019000000000005004b000000620000c13d0000000d020000290000000402200039000000000221034f000000000602043b000003860060009c000000940000213d00000005026002100000003f042000390000038804400197000000400500043d0000000004450019000500000005001d000000000054004b00000000050000390000000105004039000003860040009c000000940000213d0000000100500190000000940000c13d000000400040043f00000005040000290000000004640436000400000004001d0000000d040000290000002404400039000c00000042001d0000000c0030006b000000620000213d000000000006004b00000ae90000c13d0000000101000039000000000101041a00000385011001970000000002000411000000000012004b000009280000c13d000000800100043d000000000001004b00000b600000c13d00000005010000290000000001010433000000000001004b0000010d0000613d000b00000000001d000002f20000013d0000000003320019000000000003043500000040031000390000000d0400002900000000004304350000001f02200039000003d7022001970000008002200039000003820020009c00000382020080410000006002200210000003820010009c00000382010080410000004001100210000000000112019f0000000002000414000003820020009c0000038202008041000000c002200210000000000112019f000003bc011001c70000800d020000390000000103000039000003d1040000410e050dfb0000040f0000000100200190000000620000613d0000000b02000029000b00010020003d000000050100002900000000010104330000000b0010006b0000010d0000813d0000000b010000290000000501100210000000040110002900000000010104330000000012010434000c00000002001d00000020022000390000000002020433000d03850020019c000007350000613d0000000001010433000900000001001d0000000021010434000a00000002001d000000000001004b000007350000613d000003820010009c000003820100804100000060011002100000000a02000029000003820020009c00000382020080410000004002200210000000000121019f0000000002000414000003820020009c0000038202008041000000c002200210000000000112019f000003bc011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000101043b000800000001001d000000400100043d0000002002000039000000000221043600000000000204350000038b0010009c000000940000213d0000004003100039000000400030043f000003820020009c000003820200804100000040022002100000000001010433000003820010009c00000382010080410000006001100210000000000121019f0000000002000414000003820020009c0000038202008041000000c002200210000000000112019f000003bc011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000101043b000000080010006b000007350000613d0000000c0100002900000000010104330000038601100197000600000001001d000000000010043f0000000401000039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000201043b0000000d01000029000000000010043f000c00000002001d0000000201200039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000701043b00000009010000290000000004010433000003860040009c000000940000213d000000000107041a000000010010019000000001031002700000007f0330618f0000001f0030008c00000000020000390000000102002039000000000121013f000000010010019000000c410000c13d000000200030008c000800000007001d000700000004001d000003820000413d000300000003001d000000000070043f0000000001000414000003820010009c0000038201008041000000c0011002100000038e011001c700008010020000390e050e000000040f0000000100200190000000620000613d00000007040000290000001f024000390000000502200270000000200040008c0000000002004019000000000301043b00000003010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b0000000807000029000003820000813d000000000002041b0000000102200039000000000012004b0000037e0000413d0000001f0040008c000003ad0000a13d000000000070043f0000000001000414000003820010009c0000038201008041000000c0011002100000038e011001c700008010020000390e050e000000040f0000000100200190000000620000613d0000000708000029000003d702800198000000000101043b0000040c0000613d000000010320008a00000005033002700000000003310019000000010430003900000020030000390000000906000029000000080700002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000003990000c13d000000000082004b000003aa0000813d0000000302800210000000f80220018f000003d80220027f000003d80220016700000000036300190000000003030433000000000223016f000000000021041b000000010180021000000001011001bf000003b90000013d000000000004004b0000000a01000029000003b20000613d0000000001010433000003b30000013d00000000010000190000000302400210000003d80220027f000003d802200167000000000121016f0000000102400210000000000121019f000000000017041b0000000d01000029000000000010043f0000000c010000290000000101100039000800000001001d000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000101043b000000000101041a000000000001004b000002ec0000c13d0000000c01000029000000000101041a000003860010009c000000940000213d000700000001001d00000001011000390000000c02000029000000000012041b000000000020043f0000000001000414000003820010009c0000038201008041000000c0011002100000038e011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000101043b00000007011000290000000d02000029000000000021041b0000000c01000029000000000101041a000c00000001001d000000000020043f0000000801000029000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000101043b0000000c02000029000000000021041b000000400100043d0000002002100039000000600300003900000000003204350000000602000029000000000021043500000009020000290000000002020433000000600310003900000000002304350000008003100039000000000002004b0000000a07000029000002d10000613d000000000400001900000000053400190000000006740019000000000606043300000000006504350000002004400039000000000024004b000004040000413d000002d10000013d000000200300003900000009060000290000000807000029000000000082004b000003a20000413d000003aa0000013d0000000001000416000000000001004b000000620000c13d00000005010000390000057e0000013d000000240030008c000000620000413d0000000002000416000000000002004b000000620000c13d0000000401100370000000000101043b000a00000001001d000003860010009c000000620000213d0000000a01000029000000000010043f0000000401000039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000101043b000000000101041a000900000001001d000003860010009c000000940000213d000000090100002900000005011002100000003f021000390000038802200197000000400800043d0000000003280019000000000083004b00000000040000390000000104004039000003860030009c000000940000213d0000000100400190000000940000c13d000000400030043f00000009030000290000000003380436000800000003001d0000001f0310018f000000000001004b0000044f0000613d0000000806000029000000000416001900000000050000310000000205500367000000005705043c0000000006760436000000000046004b0000044b0000c13d000000000003004b000000400d00043d00000000022d00190000000000d2004b00000000030000390000000103004039000003860020009c000000940000213d0000000100300190000000940000c13d000700000008001d000000400020043f000000090200002900000000032d0436000600000003001d000000000002004b000009cd0000c13d000000400100043d0000004002000039000000000321043600000007070000290000000004070433000000400210003900000000004204350000006002100039000000000004004b000004720000613d000000000500001900000020077000390000000006070433000003850660019700000000026204360000000105500039000000000045004b0000046b0000413d0000000004120049000000000043043500000000030d04330000000000320435000000050430021000000000044200190000002007400039000000000003004b00000a5e0000c13d0000000002170049000003820020009c00000382020080410000006002200210000003820010009c00000382010080410000004001100210000000000112019f00000e060001042e000000240030008c000000620000413d0000000002000416000000000002004b000000620000c13d0000000401100370000000000601043b000003850060009c000000620000213d0000000101000039000000000101041a00000385011001970000000005000411000000000015004b000007150000c13d000000000056004b000007470000c13d000003be01000041000000800010043f000003bf0100004100000e0700010430000000240030008c000000620000413d0000000002000416000000000002004b000000620000c13d0000000402100370000000000202043b000003860020009c000000620000213d0000000004230049000003aa0040009c000000620000213d000000a40040008c000000620000413d0000012005000039000000400050043f0000000404200039000000000441034f000000000404043b000000800040043f0000002404200039000000000641034f000000000606043b000003860060009c000000620000213d000000a00060043f0000002006400039000000000461034f000000000404043b000003860040009c000000620000213d00000000082400190000002304800039000000000034004b000000620000813d0000000409800039000000000491034f000000000704043b000003860070009c000000940000213d0000001f0a700039000003d70aa001970000003f0aa00039000003d70aa00197000003d600a0009c000000940000213d000001200aa000390000004000a0043f000001200070043f00000000087800190000002408800039000000000038004b000000620000213d0000002008900039000000000981034f000003d70a7001980000001f0b70018f0000014008a00039000004da0000613d000001400c000039000000000d09034f00000000de0d043c000000000cec043600000000008c004b000004d60000c13d00000000000b004b000004e70000613d0000000009a9034f000000030ab00210000000000b080433000000000bab01cf000000000bab022f000000000909043b000001000aa000890000000009a9022f0000000009a901cf0000000009b9019f000000000098043500000140077000390000000000070435000000c00050043f0000002005600039000000000651034f000000000606043b000003860060009c000000620000213d00000000092600190000002306900039000000000036004b000000620000813d000000040a9000390000000006a1034f000000000606043b000003860060009c000000940000213d0000001f07600039000003d7077001970000003f07700039000003d708700197000000400700043d0000000008870019000000000078004b000000000b000039000000010b004039000003860080009c000000940000213d0000000100b00190000000940000c13d000000400080043f000000000867043600000000096900190000002409900039000000000039004b000000620000213d0000002009a00039000000000991034f000003d70a6001980000001f0b60018f0000000004a80019000005170000613d000000000c09034f000000000d08001900000000ce0c043c000000000ded043600000000004d004b000005130000c13d00000000000b004b000005240000613d0000000009a9034f000000030ab00210000000000b040433000000000bab01cf000000000bab022f000000000909043b000001000aa000890000000009a9022f0000000009a901cf0000000009b9019f000000000094043500000000046800190000000000040435000000e00070043f0000002004500039000000000441034f000000000404043b000003860040009c000000620000213d00000000042400190000002302400039000000000032004b000000620000813d0000000402400039000000000221034f000000000602043b000003860060009c000000940000213d00000005026002100000003f022000390000038805200197000000400200043d0000000005520019000000000025004b00000000070000390000000107004039000003860050009c000000940000213d0000000100700190000000940000c13d0000002404400039000000400050043f000000000062043500000006056002100000000005450019000000000035004b000000620000213d000000000006004b00000ce30000c13d000001000020043f0000000001000411000000000010043f0000000301000039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000101043b000000000101041a000000000001004b000000e30000613d000000a00100043d0000038601100197000001000200043d000a00000002001d000700000001001d000000000010043f0000000601000039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000101043b000400000001001d000000000101041a000003c4001001980000010d0000613d0000000a010000290000000021010434000600000002001d000000000001004b0000010d0000613d000d00000000001d000b00000000001d000009360000013d0000000001000416000000000001004b000000620000c13d0000000101000039000000000101041a0000038501100197000000800010043f000003c30100004100000e060001042e000000440030008c000000620000413d0000000002000416000000000002004b000000620000c13d0000000402100370000000000202043b000003860020009c000000620000213d0000002401100370000000000301043b000000000003004b0000000001000039000000010100c039000d00000003001d000000000013004b000000620000c13d0000012001000039000000400010043f000000800000043f000000a00000043f000000c00000043f000000e00000043f000001000000043f000000000020043f0000000601000039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000400400043d000003b70040009c000000940000213d000000000101043b0000000d0000006b000000020110c039000000a002400039000000400020043f000000000201041a000003ac032001970000000006340436000003c4002001980000000003000039000000010300c039000000400540003900000000003504350000008002200270000003820220019700000000002604350000000101100039000000000101041a0000008003400039000000800210027000000000002304350000006007400039000003ac011001970000000000170435000000400100043d000003b70010009c000000940000213d000a00000005001d000b00000003001d000c00000004001d000000a002100039000000400020043f000000800210003900000000000204350000006002100039000000000002043500000040021000390000000000020435000000200210003900000000000204350000000000010435000800000007001d0000000001070433000700000001001d000900000006001d0000000001060433000d00000001001d000003ad0100004100000000001004430000000001000414000003820010009c0000038201008041000000c001100210000003ae011001c70000800b020000390e050e000000040f0000000100200190000009cc0000613d0000000d020000290000038204200197000000000101043b000000000341004b00000cbe0000413d0000000b020000290000000002020433000003ac0620019700000000023600a90000000c050000290000000005050433000000000041004b000005f40000613d00000000033200d9000000000063004b00000cbe0000c13d000003ac03500197000000000032001a00000cbe0000413d00000000023200190000000703000029000003ac03300197000000000023004b00000000030280190000000c020000290000000000320435000003820110019700000009040000290000000000140435000000400100043d00000000023104360000000003040433000003820330019700000000003204350000000a020000290000000002020433000000000002004b0000000002000039000000010200c0390000004003100039000000000023043500000008020000290000000002020433000003ac02200197000000600310003900000000002304350000000b020000290000000002020433000003ac0220019700000080031000390000000000230435000003820010009c00000382010080410000004001100210000003d5011001c700000e060001042e000000240030008c000000620000413d0000000002000416000000000002004b000000620000c13d0000000402100370000000000202043b000003860020009c000000620000213d0000000004230049000003aa0040009c000000620000213d000000440040008c000000620000413d000000c005000039000000400050043f0000000404200039000000000641034f000000000606043b000003860060009c000000620000213d00000000062600190000002307600039000000000037004b000000620000813d0000000407600039000000000771034f000000000807043b000003860080009c000000940000213d00000005078002100000003f097000390000038809900197000003cb0090009c000000940000213d000000c009900039000000400090043f000000c00080043f00000024066000390000000007670019000000000037004b000000620000213d000000000008004b000006510000613d000000000861034f000000000808043b000003850080009c000000620000213d000000200550003900000000008504350000002006600039000000000076004b000006480000413d000000c005000039000000800050043f0000002004400039000000000441034f000000000404043b000003860040009c000000620000213d00000000022400190000002304200039000000000034004b000000000500001900000387050080410000038704400197000000000004004b00000000060000190000038706004041000003870040009c000000000605c019000000000006004b000000620000c13d0000000404200039000000000441034f000000000404043b000003860040009c000000940000213d00000005054002100000003f065000390000038806600197000000400700043d0000000006670019000b00000007001d000000000076004b00000000070000390000000107004039000003860060009c000000940000213d0000000100700190000000940000c13d000000400060043f0000000b060000290000000004460436000a00000004001d00000024022000390000000004250019000000000034004b000000620000213d000000000042004b0000068b0000813d0000000b03000029000000000521034f000000000505043b000003850050009c000000620000213d000000200330003900000000005304350000002002200039000000000042004b000006820000413d0000000b01000029000000a00010043f0000000101000039000000000101041a00000385011001970000000002000411000000000012004b000009280000c13d0000000b010000290000000001010433000000000001004b00000c580000c13d000000800100043d000a00000001001d0000000021010434000b00000002001d000000000001004b0000010d0000613d000d00000000001d0000000d0100002900000005011002100000000b0110002900000000010104330000038501100198000007350000613d000c00000001001d000000000010043f0000000301000039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000101043b000000000101041a000000000001004b000006cf0000c13d0000000203000039000000000103041a000003860010009c000000940000213d0000000102100039000000000023041b000003900110009a0000000c02000029000000000021041b000000000103041a000900000001001d000000000020043f0000000301000039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000101043b0000000902000029000000000021041b000000400100043d0000000c020000290000000000210435000003820010009c000003820100804100000040011002100000000002000414000003820020009c0000038202008041000000c002200210000000000112019f0000038e011001c70000800d02000039000000010300003900000391040000410e050dfb0000040f0000000100200190000000620000613d0000000d02000029000d00010020003d0000000a0100002900000000010104330000000d0010006b0000069e0000413d0000010d0000013d00000005042002100000003f054000390000038805500197000000400600043d00000000055600190000000007060019000000000065004b00000000060000390000000106004039000003860050009c000000940000213d0000000100600190000000940000c13d0000008006300039000000400050043f0000000000270435000000a0011000390000000003140019000000000063004b000000620000213d000000000002004b000007060000613d00000000020700190000000014010434000003850040009c000000620000213d00000020022000390000000000420435000000000031004b000006ff0000413d000000400400043d0000000001000411000000000001004b000007190000c13d00000394010000410000000000140435000003820040009c0000038204008041000000400140021000000395011001c700000e0700010430000003cc01000041000000800010043f000003bf0100004100000e0700010430000003c001000041000000800010043f000003bf0100004100000e07000104300000000102000039000000000302041a0000038903300197000000000113019f000000000012041b0000038a0040009c000000940000213d0000002001400039000b00000001001d000000400010043f0000000000040435000000400200043d0000038b0020009c000000940000213d0000004001200039000000400010043f0000002001200039000000000041043500000000007204350000000001040433000000000001004b000008c00000c13d0000000001070433000000000001004b00000a9c0000c13d0000000801000029000003850110019800000a7c0000c13d000000400100043d000003c2020000410000092a0000013d0000000502000039000000000302041a0000038903300197000000000313019f000000000032041b000000800010043f0000000001000414000003820010009c0000038201008041000000c001100210000003c1011001c70000800d02000039000000010300003900000392040000410000010a0000013d000000000100041a0000038901100197000000000161019f000000000010041b0000000001000414000003820010009c0000038201008041000000c001100210000003bc011001c70000800d020000390000000303000039000003bd040000410000010a0000013d0000000c0100002900000044021000390000000201000367000000000221034f000000000202043b0000000b03000029000000230330008a00000387042001970000038705300197000000000654013f000000000054004b00000000040000190000038704004041000000000032004b00000000030000190000038703008041000003870060009c000000000403c019000000000004004b000000620000c13d0000000c022000290000000403200039000000000331034f000000000403043b000003860040009c000000620000213d000000240220003900000006054002100000000003000031000000000653004900000387076001970000038708200197000000000978013f000000000078004b00000000070000190000038707004041000000000062004b00000000060000190000038706002041000003870090009c000000000706c019000000000007004b000000620000c13d00000005064002100000003f066000390000038806600197000000400700043d0000000006670019000c00000007001d000000000076004b00000000070000390000000107004039000003860060009c000000940000213d0000000100700190000000940000c13d000000400060043f0000000c060000290000000004460436000900000004001d0000000004250019000000000034004b000000620000213d000000000024004b000007ae0000a13d0000000c050000290000000006230049000003aa0060009c000000620000213d000000400060008c000000620000413d000000400600043d0000038b0060009c000000940000213d0000004007600039000000400070043f000000000721034f000000000707043b000003850070009c000000620000213d000000200550003900000000077604360000002008200039000000000881034f000000000808043b000000000087043500000000006504350000004002200039000000000042004b000007960000413d0000000d010000290000038601100197000800000001001d000000000010043f0000000601000039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000101043b0000000201100039000400000001001d000000000101041a000003c4001001980000010d0000613d0000000c010000290000000001010433000000000001004b0000010d0000613d000d00000000001d000b00000000001d000007d10000013d0000000b02000029000b00000002001d000d00010050003d0000000c0100002900000000010104330000000d0010006b00000cd00000813d0000000801000029000000000010043f0000000401000039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f00000001002001900000000d03000029000000620000613d0000000c020000290000000002020433000000000032004b00000cc40000a13d00000005023002100000000902200029000a00000002001d000000000202043300000000020204330000038502200197000000000101043b000000000020043f0000000101100039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000d050000290000000100200190000000620000613d000000000101043b000000000101041a000000000001004b000007ca0000613d0000000c010000290000000001010433000000000051004b00000cc40000a13d0000000501000039000000000201041a0000000a0100002900000000060104330000000071060434000000400a00043d000003c50300004100000000083a043600000385011001970000000403a00039000000000013043500000000010004140000038502200197000000040020008c000008130000c13d0000000103000031000000400030008c00000040040000390000000004034019000008440000013d000500000008001d000600000007001d000700000006001d000003820010009c0000038201008041000000c0011002100000038200a0009c000003820300004100000000030a40190000004003300210000000000113019f000003c6011001c7000a0000000a001d0e050e000000040f0000000a0a00002900000060031002700000038203300197000000400030008c00000040040000390000000004034019000000600640019000000000056a0019000008300000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000058004b0000082c0000c13d0000001f074001900000083d0000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000100000003001f000000010020019000000d060000613d0000000d050000290000000706000029000000060700002900000005080000290000001f01400039000000e00210018f0000000001a20019000000000021004b00000000020000390000000102004039000003860010009c000000940000213d0000000100200190000000940000c13d000000400010043f000000400030008c000000620000413d0000038b0010009c000000940000213d0000004002100039000000400020043f00000000020a0433000003c70020009c000000620000213d00000000012104360000000003080433000003820030009c000000620000213d0000000000310435000000000002004b00000cd70000613d000000000307043300000000012300a900000000022100d9000000000032004b0000000b0200002900000cbe0000c13d000003c80110012a000000000021001a00000cbe0000413d0000000002210019000007cb0000013d000000a0050000390000000006230049000003aa0060009c000000620000213d000000a00060008c000000620000413d000000400600043d000003ab0060009c000000940000213d0000006007600039000000400070043f000000000721034f000000000707043b000003860070009c000000620000213d00000000077604360000002008200039000000000981034f000000000909043b000000000009004b000000000a000039000000010a00c0390000000000a9004b000000620000c13d0000000000970435000000400700043d000003ab0070009c000000940000213d0000006009700039000000400090043f0000002008800039000000000981034f000000000909043b000000000009004b000000000a000039000000010a00c0390000000000a9004b000000620000c13d00000000099704360000002008800039000000000a81034f000000000a0a043b000003ac00a0009c000000620000213d0000000000a904350000002008800039000000000881034f000000000808043b000003ac0080009c000000620000213d00000040097000390000000000890435000000400860003900000000007804350000000005650436000000a002200039000000000042004b0000086b0000413d000001330000013d000000a0050000390000000006230049000003aa0060009c000000620000213d000000400060008c000000620000413d000000400600043d0000038b0060009c000000940000213d0000004007600039000000400070043f000000000721034f000000000707043b000003860070009c000000620000213d00000000077604360000002008200039000000000881034f000000000808043b000003850080009c000000620000213d000000000087043500000000056504360000004002200039000000000042004b000008a60000413d000002920000013d000700000002001d000a00000004001d0000000002000019000008ca0000013d0000000c0200002900000001022000390000000a010000290000000001010433000000000012004b00000a970000813d000c00000002001d00000005012002100000000b0110002900000000010104330000038501100197000d00000001001d000000000010043f0000000301000039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000101043b000000000301041a000000000003004b000008c40000613d0000000201000039000000000201041a000000000002004b00000cbe0000613d000000010130008a000000000032004b000009020000613d000000000012004b00000cc40000a13d0000038d0130009a0000038d0220009a000000000202041a000000000021041b000000000020043f0000000301000039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c70000801002000039000900000003001d0e050e000000040f00000009030000290000000100200190000000620000613d000000000101043b000000000031041b0000000201000039000000000301041a000000000003004b00000cca0000613d000000010130008a0000038d0230009a000000000002041b0000000202000039000000000012041b0000000d01000029000000000010043f0000000301000039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000101043b000000000001041b000000400100043d0000000d020000290000000000210435000003820010009c000003820100804100000040011002100000000002000414000003820020009c0000038202008041000000c002200210000000000112019f0000038e011001c70000800d0200003900000001030000390000038f040000410e050dfb0000040f0000000100200190000008c40000c13d000000620000013d000000400100043d000003c0020000410000000000210435000003820010009c0000038201008041000000400110021000000395011001c700000e07000104300000000d02000029000d00010020003d0000000a0100002900000000010104330000000d0010006b00000cd00000813d0000000701000029000000000010043f0000000401000039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d0000000a0200002900000000020204330000000d03000029000000000032004b00000cc40000a13d00000005023002100000000602200029000c00000002001d000000000202043300000000020204330000038502200197000000000101043b000000000020043f0000000101100039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000101043b000000000101041a000000000001004b000009300000613d0000000a0100002900000000010104330000000d0010006c00000cc40000a13d0000000501000039000000000201041a0000000c010000290000000001010433000500000001001d0000000031010434000800000003001d000000400400043d000003c5030000410000000003340436000900000003001d0000038501100197000c00000004001d0000000403400039000000000013043500000000010004140000038502200197000000040020008c0000097b0000c13d0000000103000031000000400030008c00000040040000390000000004034019000009a30000013d0000000c03000029000003820030009c00000382030080410000004003300210000003820010009c0000038201008041000000c001100210000000000131019f000003c6011001c70e050e000000040f00000060031002700000038203300197000000400030008c0000004004000039000000000403401900000060064001900000000c05600029000009930000613d000000000701034f0000000c08000029000000007907043c0000000008980436000000000058004b0000098f0000c13d0000001f07400190000009a00000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000100000003001f000000010020019000000d270000613d0000001f01400039000000e00210018f0000000c01200029000000000021004b00000000020000390000000102004039000003860010009c000000940000213d0000000100200190000000940000c13d000000400010043f000000400030008c000000620000413d0000038b0010009c000000940000213d0000004002100039000000400020043f0000000c020000290000000002020433000003c70020009c000000620000213d000000000121043600000009030000290000000003030433000003820030009c000000620000213d0000000000310435000000000002004b00000d240000613d0000000801000029000000000301043300000000012300a900000000022100d9000000000032004b0000000b0200002900000cbe0000c13d000003c80110012a000000000021001a00000cbe0000413d000b00000021001d000009300000013d000000000001042f000000600200003900000000030000190000000605000029000000000453001900000000002404350000002003300039000000000013004b000009d00000413d000d00000000001d00050000000d001d0000000a01000029000000000010043f0000000401000039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000301043b000000000103041a0000000d0010006c00000cc40000a13d000c00000003001d000000000030043f0000000001000414000003820010009c0000038201008041000000c0011002100000038e011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000101043b0000000d01100029000000000101041a000b00000001001d000000000010043f0000000c010000290000000201100039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000101043b000000000201041a000000010320019000000001052002700000007f0550618f0000001f0050008c00000000040000390000000104002039000000000442013f000000010040019000000c410000c13d000000400600043d0000000004560436000000000003004b00000a310000613d000300000004001d000400000005001d000c00000006001d000000000010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038e011001c700008010020000390e050e000000040f0000000100200190000000620000613d0000000407000029000000000007004b00000a390000613d000000000201043b0000000001000019000000050d00002900000007050000290000000c0600002900000003080000290000000003180019000000000402041a000000000043043500000001022000390000002001100039000000000071004b00000a290000413d00000a3d0000013d000003d9012001970000000000140435000000000005004b00000020010000390000000001006039000000050d000029000000070500002900000a3d0000013d0000000001000019000000050d00002900000007050000290000000c060000290000003f01100039000003d7021001970000000001620019000000000021004b00000000020000390000000102004039000003860010009c000000940000213d0000000100200190000000940000c13d000000400010043f00000000010504330000000d04000029000000000041004b00000cc40000a13d000000050140021000000008021000290000000b030000290000038503300197000000000032043500000000020d0433000000000042004b00000cc40000a13d0000000601100029000000000061043500000000010d0433000000000041004b00000cc40000a13d0000000104400039000d00000004001d000000090040006c000009d70000413d000004600000013d0000000005000019000000000602001900000a690000013d000000000987001900000000000904350000001f08800039000003d70880019700000000078700190000000105500039000000000035004b0000047b0000813d0000000008270049000000200880008a00000020066000390000000000860435000000200dd0003900000000080d043300000000980804340000000007870436000000000008004b00000a610000613d000000000a000019000000000b7a0019000000000ca90019000000000c0c04330000000000cb0435000000200aa0003900000000008a004b00000a740000413d00000a610000013d0000000502000039000000000302041a0000038903300197000000000313019f000000000032041b000000400200043d0000000000120435000003820020009c000003820200804100000040012002100000000002000414000003820020009c0000038202008041000000c002200210000000000112019f0000038e011001c70000800d02000039000000010300003900000392040000410e050dfb0000040f0000000100200190000000620000613d000000200100003900000100001004430000012000000443000003930100004100000e060001042e000000070100002900000000070104330000000001070433000000000001004b000007320000613d000b00200070003d0000000002000019000a00000007001d000c00000002001d00000005012002100000000b0110002900000000010104330000038501100198000007350000613d000d00000001001d000000000010043f0000000301000039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000101043b000000000101041a000000000001004b00000ad00000c13d0000000203000039000000000103041a000003860010009c000000940000213d0000000102100039000000000023041b000003900110009a0000000d02000029000000000021041b000000000103041a000900000001001d000000000020043f0000000301000039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000101043b0000000902000029000000000021041b000000400100043d0000000d020000290000000000210435000003820010009c000003820100804100000040011002100000000002000414000003820020009c0000038202008041000000c002200210000000000112019f0000038e011001c70000800d02000039000000010300003900000391040000410e050dfb0000040f0000000100200190000000620000613d0000000c0200002900000001022000390000000a070000290000000001070433000000000012004b00000a9f0000413d000007320000013d000b002400300092000000050800002900000af40000013d00000020088000390000000002b6001900000000000204350000000000ca0435000000000098043500000020044000390000000c0040006c000002c20000813d000000000241034f000000000202043b000003860020009c000000620000213d0000000d0b2000290000000b02b00069000003aa0020009c000000620000213d000000600020008c000000620000413d000000400900043d0000038b0090009c000000940000213d000000240cb000390000000002c30049000000400a9000390000004000a0043f000003aa0020009c000000620000213d000000400020008c000000620000413d000003a90090009c000000940000213d0000008002900039000000400020043f0000000002c1034f000000000202043b000003860020009c000000620000213d00000000002a04350000002002c00039000000000521034f000000000505043b000003850050009c000000620000213d000000000aa90436000000600690003900000000005604350000002002200039000000000221034f000000000202043b000003860020009c000000620000213d000000000eb200190000004302e00039000000000032004b000000000500001900000387050080410000038702200197000000000002004b00000000060000190000038706004041000003870020009c000000000605c019000000000006004b000000620000c13d000000240fe000390000000002f1034f000000000b02043b0000038600b0009c000000940000213d0000001f02b00039000003d7022001970000003f02200039000003d702200197000000400c00043d00000000022c00190000000000c2004b00000000050000390000000105004039000003860020009c000000940000213d0000000100500190000000940000c13d000000400020043f0000000006bc04360000000002be00190000004402200039000000000032004b000000620000213d0000002002f00039000000000521034f000003d702b00198000000000e26001900000b4f0000613d000000000f05034f000000000d06001900000000f70f043c000000000d7d04360000000000ed004b00000b4b0000c13d0000001f0db0019000000aec0000613d000000000225034f0000000305d0021000000000070e043300000000075701cf000000000757022f000000000202043b0000010005500089000000000252022f00000000025201cf000000000272019f00000000002e043500000aec0000013d000000400100043d000003bb020000410000092a0000013d000000000200001900000b670000013d0000000a020000290000000102200039000000800100043d000000000012004b000002cb0000813d000a00000002001d0000000501200210000000a001100039000000000101043300000020021000390000000002020433000d00000002001d00000000010104330000038601100197000800000001001d000000000010043f0000000401000039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d0000000d020000290000038502200197000000000101043b000c00000002001d000000000020043f000d00000001001d0000000201100039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000301043b000000000103041a000000010210019000000001041002700000007f0440618f0000001f0040008c00000000010000390000000101002039000000000012004b00000c410000c13d000000000004004b00000bb80000613d0000001f0040008c00000bb70000a13d000900000004001d000b00000003001d000000000030043f0000000001000414000003820010009c0000038201008041000000c0011002100000038e011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000101043b00000009020000290000001f02200039000000050220027000000000022100190000000103100039000000000023004b00000bb40000813d000000000003041b0000000103300039000000000023004b00000bb00000413d0000000b02000029000000000002041b0000000003010019000000000003041b0000000c01000029000000000010043f0000000d010000290000000101100039000900000001001d000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000101043b000000000201041a000000000002004b00000b620000613d0000000d01000029000000000301041a000000000003004b00000cbe0000613d000000000023004b000b00000002001d00000c0b0000613d000700000003001d000000000010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038e011001c700008010020000390e050e000000040f00000001002001900000000b02000029000000620000613d0006000100200092000000000101043b0000000d03000029000000000203041a000000060020006c00000cc40000a13d0000000702000029000000010220008a0000000001120019000000000101041a000700000001001d000000000030043f0000000001000414000003820010009c0000038201008041000000c0011002100000038e011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000101043b00000006011000290000000702000029000000000021041b000000000020043f0000000901000029000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f00000001002001900000000b02000029000000620000613d000000000101043b000000000021041b0000000d01000029000000000201041a000b00000002001d000000000002004b00000cca0000613d000000000010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038e011001c700008010020000390e050e000000040f00000001002001900000000b02000029000000620000613d000000010220008a000000000101043b0000000001210019000000000001041b0000000d01000029000000000021041b0000000c01000029000000000010043f0000000901000029000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000101043b000000000001041b000000400100043d00000020021000390000000c03000029000000000032043500000008020000290000000000210435000003820010009c000003820100804100000040011002100000000002000414000003820020009c0000038202008041000000c002200210000000000112019f0000038c011001c70000800d020000390000000103000039000003d0040000410e050dfb0000040f000000010020019000000b620000c13d000000620000013d000003cf01000041000000000010043f0000002201000039000000040010043f000003c60100004100000e0700010430000000400200043d000d00000002001d000003b60100004100000c4e0000013d000000400200043d000d00000002001d000003b401000041000000000012043500000004022000390000000c010000290e050d650000040f0000000d01000029000003820010009c00000382010080410000004001100210000003b5011001c700000e0700010430000000000200001900000c600000013d0000000c0200002900000001022000390000000b010000290000000001010433000000000012004b000006970000813d000c00000002001d00000005012002100000000a0110002900000000010104330000038501100197000d00000001001d000000000010043f0000000301000039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000101043b000000000301041a000000000003004b00000c5a0000613d0000000201000039000000000201041a000000000002004b00000cbe0000613d000000010130008a000000000032004b00000c980000613d000000000012004b00000cc40000a13d0000038d0130009a0000038d0220009a000000000202041a000000000021041b000000000020043f0000000301000039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c70000801002000039000900000003001d0e050e000000040f00000009030000290000000100200190000000620000613d000000000101043b000000000031041b0000000201000039000000000301041a000000000003004b00000cca0000613d000000010130008a0000038d0230009a000000000002041b0000000202000039000000000012041b0000000d01000029000000000010043f0000000301000039000000200010043f0000000001000414000003820010009c0000038201008041000000c0011002100000038c011001c700008010020000390e050e000000040f0000000100200190000000620000613d000000000101043b000000000001041b000000400100043d0000000d020000290000000000210435000003820010009c000003820100804100000040011002100000000002000414000003820020009c0000038202008041000000c002200210000000000112019f0000038e011001c70000800d0200003900000001030000390000038f040000410e050dfb0000040f000000010020019000000c5a0000c13d000000620000013d000003cf01000041000000000010043f0000001101000039000000040010043f000003c60100004100000e0700010430000003cf01000041000000000010043f0000003201000039000000040010043f000003c60100004100000e0700010430000003cf01000041000000000010043f0000003101000039000000040010043f000003c60100004100000e07000104300000000b0000006b0000010d0000613d00000004010000290000000b020000290e050d730000040f000000000100001900000e060001042e0000000001060433000000400200043d000003c9030000410000000000320435000003850110019700000004032000390000000000130435000003820020009c00000382020080410000004001200210000003c6011001c700000e0700010430000000400330008a00000387063001970000000007020019000000000034004b000000000800001900000387080020410000038709400197000000000a69013f000000000069004b000000000900001900000387090040410000038700a0009c000000000908c019000000000009004b000000620000c13d000000400800043d0000038b0080009c000000940000213d0000004009800039000000400090043f000000000941034f000000000909043b000003850090009c000000620000213d00000020077000390000000009980436000000200a400039000000000aa1034f000000000a0a043b0000000000a9043500000000008704350000004004400039000000000054004b00000ce60000413d0000054a0000013d0000001f0530018f0000038406300198000000400200043d000000000462001900000d110000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000d0d0000c13d000000000005004b00000d1e0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000003820020009c00000382020080410000004002200210000000000112019f00000e07000104300000000501000029000000000101043300000cd80000013d0000001f0530018f0000038406300198000000400200043d000000000462001900000d110000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000d2e0000c13d00000d110000013d0000001f02200039000003d7022001970000000001120019000000000021004b00000000020000390000000102004039000003860010009c00000d3f0000213d000000010020019000000d3f0000c13d000000400010043f000000000001042d000003cf01000041000000000010043f0000004101000039000000040010043f000003c60100004100000e070001043000000000430104340000000001320436000000000003004b00000d510000613d000000000200001900000000052100190000000006240019000000000606043300000000006504350000002002200039000000000032004b00000d4a0000413d000000000231001900000000000204350000001f02300039000003d7022001970000000001210019000000000001042d000000000301001900000000040104330000000001420436000000000004004b00000d640000613d000000000200001900000020033000390000000005030433000003850550019700000000015104360000000102200039000000000042004b00000d5d0000413d000000000001042d0000000043010434000000000003004b0000000003000039000000010300c03900000000033204360000000004040433000003ac044001970000000000430435000000400220003900000040011000390000000001010433000003ac011001970000000000120435000000000001042d0005000000000002000000000301041a000003c40030019800000dc60000613d000000000002004b00000dc60000613d000500000003001d000300000002001d000200000001001d0000000101100039000100000001001d000000000101041a000400000001001d000003ad0100004100000000001004430000000001000414000003820010009c0000038201008041000000c001100210000003ae011001c70000800b020000390e050e000000040f000000010020019000000dc70000613d000000050500002900000080025002700000038202200197000000000301043b000000000423004b00000ddd0000413d000003ac015001970000000405000029000003ac0250019700000d980000c13d0000000304000029000000020500002900000dac0000013d000000000021004b00000de50000213d000000800650027000000000056400a900000000044500d9000000000064004b00000ddd0000c13d000000000015001a00000ddd0000413d00000000011500190000008003300210000003af033001970000000205000029000000000405041a000003da04400197000000000334019f000000000035041b000000000012004b00000000010240190000000304000029000000000042004b00000dc80000413d000000000241004b00000dd40000413d000003ac01200197000000000205041a000003dc02200197000000000112019f000000000015041b000000400100043d0000000000410435000003820010009c000003820100804100000040011002100000000002000414000003820020009c0000038202008041000000c002200210000000000112019f0000038e011001c70000800d020000390000000103000039000003dd040000410e050dfb0000040f000000010020019000000de30000613d000000000001042d000000000001042f000000400100043d00000024031000390000000000430435000003e003000041000000000031043500000004031000390000000000230435000003820010009c00000382010080410000004001100210000003df011001c700000e07000104300000000102000029000000000202041a000000800220027200000ddd0000613d00000003041000690000000003240019000000010330008a000000000043004b00000ded0000813d000003cf01000041000000000010043f0000001101000039000000040010043f000003c60100004100000e0700010430000000000100001900000e0700010430000000400100043d000003db020000410000000000210435000003820010009c0000038201008041000000400110021000000395011001c700000e0700010430000000400400043d00000024054000390000000000150435000003de01000041000000000014043500000000012300d900000004024000390000000000120435000003820040009c00000382040080410000004001400210000003df011001c700000e0700010430000000000001042f00000dfe002104210000000102000039000000000001042d0000000002000019000000000001042d00000e03002104230000000102000039000000000001042d0000000002000019000000000001042d00000e050000043200000e060001042e00000e070001043000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffdf000000000000000000000000000000000000000000000000ffffffffffffffbf0200000000000000000000000000000000000040000000000000000000000000bfa87805ed57dc1f0d489ce33be4c4577d74ccde357eeeee058a32c55c44a5330200000000000000000000000000000000000020000000000000000000000000c3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda77580bfa87805ed57dc1f0d489ce33be4c4577d74ccde357eeeee058a32c55c44a532eb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef7c737a8eddf62436489aa3600ed26e75e0a58b0f8c0d266bbcee64358c39fdac00000002000000000000000000000000000000400000010000000000000000009b15e16f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000008da5cb5a00000000000000000000000000000000000000000000000000000000e145291500000000000000000000000000000000000000000000000000000000f2fde38a00000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000fe843cd000000000000000000000000000000000000000000000000000000000e145291600000000000000000000000000000000000000000000000000000000e835232b000000000000000000000000000000000000000000000000000000008da5cb5b0000000000000000000000000000000000000000000000000000000091a2749a00000000000000000000000000000000000000000000000000000000e0a0e506000000000000000000000000000000000000000000000000000000001af18b7a00000000000000000000000000000000000000000000000000000000537e304d00000000000000000000000000000000000000000000000000000000537e304e0000000000000000000000000000000000000000000000000000000079ba5097000000000000000000000000000000000000000000000000000000001af18b7b000000000000000000000000000000000000000000000000000000002451a6270000000000000000000000000000000000000000000000000000000008d450a1000000000000000000000000000000000000000000000000000000000a35bcc400000000000000000000000000000000000000000000000000000000181f5a77000000000000000000000000000000000000000000000000ffffffffffffff7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffff9f00000000000000000000000000000000ffffffffffffffffffffffffffffffff796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d955391320200000200000000000000000000000000000004000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000ffffffffffffffffffffff00ffffffff00000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000002000000000000000000000000000000000000600000000000000000000000009ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c198020d124000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000d68af9cc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5fffffffffffffffffffffff0000000000000000000000000000000000000000000200000000000000000000000000000000000080000000000000000000000000f14a5415ce6988a9e870a85fff0b9d7b7dd79bbc228cb63cad610daf6f7b6b97c6560895000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000ed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278dad89dca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000008000000000000000002b5c74de0000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000200000008000000000000000008579befe0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000008000000000000000000000000000000000000000ff0000000000000000000000000000000000000000d02641a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000de0b6b3a76400009a655f7b00000000000000000000000000000000000000000000000000000000d86ad9cf00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff3f02b543c6000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace4e487b7100000000000000000000000000000000000000000000000000000000530cabd30786b7235e124a6c0db77e0b685ef22813b1fe87554247f404eb8ed6ad72a792d2a307f400c278be7deaeec6964276783304580cdc4e905436b8d5c54d756c7469416767726567617465526174654c696d6974657220312e362e302d64657600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffedfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff9725942a00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000000000001871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a15279c08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000f94ebcd100000000000000000000000000000000000000000000000000000000") diff --git a/core/gethwrappers/ccip/generated_zks/multi_ocr3_helper/multi_ocr3_helper.go b/core/gethwrappers/ccip/generated_zks/multi_ocr3_helper/multi_ocr3_helper.go new file mode 100644 index 00000000000..014eca52071 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/multi_ocr3_helper/multi_ocr3_helper.go @@ -0,0 +1,1100 @@ +package multi_ocr3_helper + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type MultiOCR3BaseConfigInfo struct { + ConfigDigest [32]byte + F uint8 + N uint8 + IsSignatureVerificationEnabled bool +} + +type MultiOCR3BaseOCRConfig struct { + ConfigInfo MultiOCR3BaseConfigInfo + Signers []common.Address + Transmitters []common.Address +} + +type MultiOCR3BaseOCRConfigArgs struct { + ConfigDigest [32]byte + OcrPluginType uint8 + F uint8 + IsSignatureVerificationEnabled bool + Signers []common.Address + Transmitters []common.Address +} + +type MultiOCR3BaseOracle struct { + Index uint8 + Role uint8 +} + +var MultiOCR3HelperMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"name\":\"CannotTransferToSelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"ForkedChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumMultiOCR3Base.InvalidConfigErrorType\",\"name\":\"errorType\",\"type\":\"uint8\"}],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonUniqueSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignaturesOutOfRegistration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"StaticConfigCannotBeChanged\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedTransmitter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"WrongMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongNumberOfSignatures\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"AfterConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"Transmitted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"}],\"name\":\"getOracle\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"},{\"internalType\":\"enumMultiOCR3Base.Role\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"structMultiOCR3Base.Oracle\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"latestConfigDetails\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"n\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"}],\"internalType\":\"structMultiOCR3Base.ConfigInfo\",\"name\":\"configInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfig\",\"name\":\"ocrConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfigArgs[]\",\"name\":\"ocrConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"setOCR3Configs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"setTransmitOcrPluginType\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"rawVs\",\"type\":\"bytes32\"}],\"name\":\"transmitWithSignatures\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"transmitWithoutSignatures\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", + Bin: "0x60a060405234801561001057600080fd5b503360008161003257604051639b15e16f60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0384811691909117909155811615610062576100628161006d565b5050466080526100e6565b336001600160a01b0382160361009657604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b608051611d256200010960003960008181610edd0152610f290152611d256000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80637ac0aa1a11610076578063c673e5841161005b578063c673e584146101c5578063f2fde38b146101e5578063f716f99f146101f857600080fd5b80637ac0aa1a1461015b5780638da5cb5b1461019d57600080fd5b806334a9c92e116100a757806334a9c92e1461012057806344e65e551461014057806379ba50971461015357600080fd5b8063181f5a77146100c357806326bf9d261461010b575b600080fd5b604080518082018252601981527f4d756c74694f4352334261736548656c70657220312e302e30000000000000006020820152905161010291906114ca565b60405180910390f35b61011e610119366004611591565b61020b565b005b61013361012e36600461161f565b61023a565b6040516101029190611681565b61011e61014e3660046116f4565b6102ca565b61011e61034d565b61011e6101693660046117a7565b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff92909216919091179055565b60015460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610102565b6101d86101d33660046117a7565b61041b565b604051610102919061181b565b61011e6101f33660046118ae565b610593565b61011e610206366004611a1a565b6105a7565b604080516000808252602082019092526004549091506102349060ff16858585858060006105e9565b50505050565b6040805180820182526000808252602080830182905260ff86811683526003825284832073ffffffffffffffffffffffffffffffffffffffff871684528252918490208451808601909552805480841686529394939092918401916101009091041660028111156102ad576102ad611652565b60028111156102be576102be611652565b90525090505b92915050565b60045460408051602080880282810182019093528782526103439360ff16928c928c928c928c918c91829185019084908082843760009201919091525050604080516020808d0282810182019093528c82529093508c92508b9182918501908490808284376000920191909152508a92506105e9915050565b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461039e576040517f02b543c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000008082163390811790935560008054909116815560405173ffffffffffffffffffffffffffffffffffffffff909216929183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b61045e6040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c08201529485529182018054845181840281018401909552808552929385830193909283018282801561051457602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116104e9575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561058357602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610558575b5050505050815250509050919050565b61059b610972565b6105a4816109c5565b50565b6105af610972565b60005b81518110156105e5576105dd8282815181106105d0576105d0611b83565b6020026020010151610a89565b6001016105b2565b5050565b60ff878116600090815260026020908152604080832081516080810183528154815260019091015480861693820193909352610100830485169181019190915262010000909104909216151560608301528735906106488760a4611be1565b9050826060015115610690578451610661906020611bf4565b865161066e906020611bf4565b6106799060a0611be1565b6106839190611be1565b61068d9082611be1565b90505b3681146106d7576040517f8e1192e1000000000000000000000000000000000000000000000000000000008152600481018290523660248201526044015b60405180910390fd5b508151811461071f5781516040517f93df584c0000000000000000000000000000000000000000000000000000000081526004810191909152602481018290526044016106ce565b610727610eda565b60ff808a166000908152600360209081526040808320338452825280832081518083019092528054808616835293949193909284019161010090910416600281111561077557610775611652565b600281111561078657610786611652565b90525090506002816020015160028111156107a3576107a3611652565b1480156108045750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff16815481106107df576107df611b83565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1633145b61083a576040517fda0f08e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5081606001511561091c576020820151610855906001611c0b565b60ff16855114610891576040517f71253a2500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83518551146108cc576040517fa75d88af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600087876040516108de929190611c24565b6040519081900381206108f5918b90602001611c34565b60405160208183030381529060405280519060200120905061091a8a82888888610f5b565b505b6040805182815260208a81013567ffffffffffffffff169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146109c3576040517f2b5c74de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b3373ffffffffffffffffffffffffffffffffffffffff821603610a14576040517fdad89dca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff16600003610acd5760006040517f367f56a20000000000000000000000000000000000000000000000000000000081526004016106ce9190611c48565b60208082015160ff80821660009081526002909352604083206001810154929390928392169003610b3a57606084015160018201805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055610b8f565b6060840151600182015460ff6201000090910416151590151514610b8f576040517f87f6037c00000000000000000000000000000000000000000000000000000000815260ff841660048201526024016106ce565b60a084015180516101001015610bd45760016040517f367f56a20000000000000000000000000000000000000000000000000000000081526004016106ce9190611c48565b8051600003610c125760056040517f367f56a20000000000000000000000000000000000000000000000000000000081526004016106ce9190611c48565b610c858484600301805480602002602001604051908101604052809291908181526020018280548015610c7b57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610c50575b505050505061116b565b846060015115610e2a57610d008484600201805480602002602001604051908101604052809291908181526020018280548015610c7b5760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610c5057505050505061116b565b608085015180516101001015610d455760026040517f367f56a20000000000000000000000000000000000000000000000000000000081526004016106ce9190611c48565b6040860151610d55906003611c62565b60ff16815111610d945760036040517f367f56a20000000000000000000000000000000000000000000000000000000081526004016106ce9190611c48565b815181511015610dd35760016040517f367f56a20000000000000000000000000000000000000000000000000000000081526004016106ce9190611c48565b80516001840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010060ff841602179055610e1b906002860190602084019061142b565b50610e2885826001611203565b505b610e3684826002611203565b8051610e4b906003850190602084019061142b565b506040858101516001840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f54793610ec29389939260028a01929190611c85565b60405180910390a1610ed3846113f2565b5050505050565b467f0000000000000000000000000000000000000000000000000000000000000000146109c3576040517f0f01ce850000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016106ce565b8251600090815b81811015610343576000600188868460208110610f8157610f81611b83565b610f8e91901a601b611c0b565b898581518110610fa057610fa0611b83565b6020026020010151898681518110610fba57610fba611b83565b602002602001015160405160008152602001604052604051610ff8949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa15801561101a573d6000803e3d6000fd5b5050604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081015160ff808e1660009081526003602090815285822073ffffffffffffffffffffffffffffffffffffffff8516835281528582208587019096528554808416865293975090955092939284019161010090041660028111156110a6576110a6611652565b60028111156110b7576110b7611652565b90525090506001816020015160028111156110d4576110d4611652565b1461110b576040517fca31867a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051600160ff9091161b85161561114e576040517ff67bc7c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000015160ff166001901b851794505050806001019050610f62565b60005b81518110156111fe5760ff8316600090815260036020526040812083519091908490849081106111a0576111a0611b83565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560010161116e565b505050565b60005b825181101561023457600083828151811061122357611223611b83565b602002602001015190506000600281111561124057611240611652565b60ff808716600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902054610100900416600281111561128c5761128c611652565b146112c65760046040517f367f56a20000000000000000000000000000000000000000000000000000000081526004016106ce9190611c48565b73ffffffffffffffffffffffffffffffffffffffff8116611313576040517fd6c62c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052808360ff16815260200184600281111561133957611339611652565b905260ff808716600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845282529091208351815493167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00841681178255918401519092909183917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016176101008360028111156113de576113de611652565b021790555090505050806001019050611206565b60405160ff821681527f897ac1b2c12867721b284f3eb147bd4ab046d4eef1cf31c1d8988bfcfb962b539060200160405180910390a150565b8280548282559060005260206000209081019282156114a5579160200282015b828111156114a557825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90911617825560209092019160019091019061144b565b506114b19291506114b5565b5090565b5b808211156114b157600081556001016114b6565b60006020808352835180602085015260005b818110156114f8578581018301518582016040015282016114dc565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b80606081018310156102c457600080fd5b60008083601f84011261155a57600080fd5b50813567ffffffffffffffff81111561157257600080fd5b60208301915083602082850101111561158a57600080fd5b9250929050565b6000806000608084860312156115a657600080fd5b6115b08585611537565b9250606084013567ffffffffffffffff8111156115cc57600080fd5b6115d886828701611548565b9497909650939450505050565b803560ff811681146115f657600080fd5b919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146115f657600080fd5b6000806040838503121561163257600080fd5b61163b836115e5565b9150611649602084016115fb565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815160ff16815260208201516040820190600381106116a2576116a2611652565b8060208401525092915050565b60008083601f8401126116c157600080fd5b50813567ffffffffffffffff8111156116d957600080fd5b6020830191508360208260051b850101111561158a57600080fd5b60008060008060008060008060e0898b03121561171057600080fd5b61171a8a8a611537565b9750606089013567ffffffffffffffff8082111561173757600080fd5b6117438c838d01611548565b909950975060808b013591508082111561175c57600080fd5b6117688c838d016116af565b909750955060a08b013591508082111561178157600080fd5b5061178e8b828c016116af565b999c989b50969995989497949560c00135949350505050565b6000602082840312156117b957600080fd5b6117c2826115e5565b9392505050565b60008151808452602080850194506020840160005b8381101561181057815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016117de565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a084015261186a60e08401826117c9565b905060408401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08483030160c08501526118a582826117c9565b95945050505050565b6000602082840312156118c057600080fd5b6117c2826115fb565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff8111828210171561191b5761191b6118c9565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611968576119686118c9565b604052919050565b600067ffffffffffffffff82111561198a5761198a6118c9565b5060051b60200190565b803580151581146115f657600080fd5b600082601f8301126119b557600080fd5b813560206119ca6119c583611970565b611921565b8083825260208201915060208460051b8701019350868411156119ec57600080fd5b602086015b84811015611a0f57611a02816115fb565b83529183019183016119f1565b509695505050505050565b60006020808385031215611a2d57600080fd5b823567ffffffffffffffff80821115611a4557600080fd5b818501915085601f830112611a5957600080fd5b8135611a676119c582611970565b81815260059190911b83018401908481019088831115611a8657600080fd5b8585015b83811015611b7657803585811115611aa157600080fd5b860160c0818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0011215611ad65760008081fd5b611ade6118f8565b8882013581526040611af18184016115e5565b8a8301526060611b028185016115e5565b8284015260809150611b15828501611994565b9083015260a08381013589811115611b2d5760008081fd5b611b3b8f8d838801016119a4565b838501525060c0840135915088821115611b555760008081fd5b611b638e8c848701016119a4565b9083015250845250918601918601611a8a565b5098975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156102c4576102c4611bb2565b80820281158282048414176102c4576102c4611bb2565b60ff81811683821601908111156102c4576102c4611bb2565b8183823760009101908152919050565b828152606082602083013760800192915050565b6020810160068310611c5c57611c5c611652565b91905290565b60ff8181168382160290811690818114611c7e57611c7e611bb2565b5092915050565b600060a0820160ff88168352602087602085015260a0604085015281875480845260c086019150886000526020600020935060005b81811015611cec57845473ffffffffffffffffffffffffffffffffffffffff1683526001948501949284019201611cba565b50508481036060860152611d0081886117c9565b935050505060ff83166080830152969550505050505056fea164736f6c6343000818000a", +} + +var MultiOCR3HelperABI = MultiOCR3HelperMetaData.ABI + +var MultiOCR3HelperBin = MultiOCR3HelperMetaData.Bin + +func DeployMultiOCR3Helper(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *generated_zks.Transaction, *MultiOCR3Helper, error) { + parsed, err := MultiOCR3HelperMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(MultiOCR3HelperZKBin), backend) + contractReturn := &MultiOCR3Helper{address: address, abi: *parsed, MultiOCR3HelperCaller: MultiOCR3HelperCaller{contract: contractBind}, MultiOCR3HelperTransactor: MultiOCR3HelperTransactor{contract: contractBind}, MultiOCR3HelperFilterer: MultiOCR3HelperFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(MultiOCR3HelperBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &MultiOCR3Helper{address: address, abi: *parsed, MultiOCR3HelperCaller: MultiOCR3HelperCaller{contract: contract}, MultiOCR3HelperTransactor: MultiOCR3HelperTransactor{contract: contract}, MultiOCR3HelperFilterer: MultiOCR3HelperFilterer{contract: contract}}, nil +} + +type MultiOCR3Helper struct { + address common.Address + abi abi.ABI + MultiOCR3HelperCaller + MultiOCR3HelperTransactor + MultiOCR3HelperFilterer +} + +type MultiOCR3HelperCaller struct { + contract *bind.BoundContract +} + +type MultiOCR3HelperTransactor struct { + contract *bind.BoundContract +} + +type MultiOCR3HelperFilterer struct { + contract *bind.BoundContract +} + +type MultiOCR3HelperSession struct { + Contract *MultiOCR3Helper + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type MultiOCR3HelperCallerSession struct { + Contract *MultiOCR3HelperCaller + CallOpts bind.CallOpts +} + +type MultiOCR3HelperTransactorSession struct { + Contract *MultiOCR3HelperTransactor + TransactOpts bind.TransactOpts +} + +type MultiOCR3HelperRaw struct { + Contract *MultiOCR3Helper +} + +type MultiOCR3HelperCallerRaw struct { + Contract *MultiOCR3HelperCaller +} + +type MultiOCR3HelperTransactorRaw struct { + Contract *MultiOCR3HelperTransactor +} + +func NewMultiOCR3Helper(address common.Address, backend bind.ContractBackend) (*MultiOCR3Helper, error) { + abi, err := abi.JSON(strings.NewReader(MultiOCR3HelperABI)) + if err != nil { + return nil, err + } + contract, err := bindMultiOCR3Helper(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &MultiOCR3Helper{address: address, abi: abi, MultiOCR3HelperCaller: MultiOCR3HelperCaller{contract: contract}, MultiOCR3HelperTransactor: MultiOCR3HelperTransactor{contract: contract}, MultiOCR3HelperFilterer: MultiOCR3HelperFilterer{contract: contract}}, nil +} + +func NewMultiOCR3HelperCaller(address common.Address, caller bind.ContractCaller) (*MultiOCR3HelperCaller, error) { + contract, err := bindMultiOCR3Helper(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &MultiOCR3HelperCaller{contract: contract}, nil +} + +func NewMultiOCR3HelperTransactor(address common.Address, transactor bind.ContractTransactor) (*MultiOCR3HelperTransactor, error) { + contract, err := bindMultiOCR3Helper(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &MultiOCR3HelperTransactor{contract: contract}, nil +} + +func NewMultiOCR3HelperFilterer(address common.Address, filterer bind.ContractFilterer) (*MultiOCR3HelperFilterer, error) { + contract, err := bindMultiOCR3Helper(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &MultiOCR3HelperFilterer{contract: contract}, nil +} + +func bindMultiOCR3Helper(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := MultiOCR3HelperMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_MultiOCR3Helper *MultiOCR3HelperRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MultiOCR3Helper.Contract.MultiOCR3HelperCaller.contract.Call(opts, result, method, params...) +} + +func (_MultiOCR3Helper *MultiOCR3HelperRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MultiOCR3Helper.Contract.MultiOCR3HelperTransactor.contract.Transfer(opts) +} + +func (_MultiOCR3Helper *MultiOCR3HelperRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MultiOCR3Helper.Contract.MultiOCR3HelperTransactor.contract.Transact(opts, method, params...) +} + +func (_MultiOCR3Helper *MultiOCR3HelperCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _MultiOCR3Helper.Contract.contract.Call(opts, result, method, params...) +} + +func (_MultiOCR3Helper *MultiOCR3HelperTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MultiOCR3Helper.Contract.contract.Transfer(opts) +} + +func (_MultiOCR3Helper *MultiOCR3HelperTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _MultiOCR3Helper.Contract.contract.Transact(opts, method, params...) +} + +func (_MultiOCR3Helper *MultiOCR3HelperCaller) GetOracle(opts *bind.CallOpts, ocrPluginType uint8, oracleAddress common.Address) (MultiOCR3BaseOracle, error) { + var out []interface{} + err := _MultiOCR3Helper.contract.Call(opts, &out, "getOracle", ocrPluginType, oracleAddress) + + if err != nil { + return *new(MultiOCR3BaseOracle), err + } + + out0 := *abi.ConvertType(out[0], new(MultiOCR3BaseOracle)).(*MultiOCR3BaseOracle) + + return out0, err + +} + +func (_MultiOCR3Helper *MultiOCR3HelperSession) GetOracle(ocrPluginType uint8, oracleAddress common.Address) (MultiOCR3BaseOracle, error) { + return _MultiOCR3Helper.Contract.GetOracle(&_MultiOCR3Helper.CallOpts, ocrPluginType, oracleAddress) +} + +func (_MultiOCR3Helper *MultiOCR3HelperCallerSession) GetOracle(ocrPluginType uint8, oracleAddress common.Address) (MultiOCR3BaseOracle, error) { + return _MultiOCR3Helper.Contract.GetOracle(&_MultiOCR3Helper.CallOpts, ocrPluginType, oracleAddress) +} + +func (_MultiOCR3Helper *MultiOCR3HelperCaller) LatestConfigDetails(opts *bind.CallOpts, ocrPluginType uint8) (MultiOCR3BaseOCRConfig, error) { + var out []interface{} + err := _MultiOCR3Helper.contract.Call(opts, &out, "latestConfigDetails", ocrPluginType) + + if err != nil { + return *new(MultiOCR3BaseOCRConfig), err + } + + out0 := *abi.ConvertType(out[0], new(MultiOCR3BaseOCRConfig)).(*MultiOCR3BaseOCRConfig) + + return out0, err + +} + +func (_MultiOCR3Helper *MultiOCR3HelperSession) LatestConfigDetails(ocrPluginType uint8) (MultiOCR3BaseOCRConfig, error) { + return _MultiOCR3Helper.Contract.LatestConfigDetails(&_MultiOCR3Helper.CallOpts, ocrPluginType) +} + +func (_MultiOCR3Helper *MultiOCR3HelperCallerSession) LatestConfigDetails(ocrPluginType uint8) (MultiOCR3BaseOCRConfig, error) { + return _MultiOCR3Helper.Contract.LatestConfigDetails(&_MultiOCR3Helper.CallOpts, ocrPluginType) +} + +func (_MultiOCR3Helper *MultiOCR3HelperCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _MultiOCR3Helper.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 + +} + +func (_MultiOCR3Helper *MultiOCR3HelperSession) Owner() (common.Address, error) { + return _MultiOCR3Helper.Contract.Owner(&_MultiOCR3Helper.CallOpts) +} + +func (_MultiOCR3Helper *MultiOCR3HelperCallerSession) Owner() (common.Address, error) { + return _MultiOCR3Helper.Contract.Owner(&_MultiOCR3Helper.CallOpts) +} + +func (_MultiOCR3Helper *MultiOCR3HelperCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _MultiOCR3Helper.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_MultiOCR3Helper *MultiOCR3HelperSession) TypeAndVersion() (string, error) { + return _MultiOCR3Helper.Contract.TypeAndVersion(&_MultiOCR3Helper.CallOpts) +} + +func (_MultiOCR3Helper *MultiOCR3HelperCallerSession) TypeAndVersion() (string, error) { + return _MultiOCR3Helper.Contract.TypeAndVersion(&_MultiOCR3Helper.CallOpts) +} + +func (_MultiOCR3Helper *MultiOCR3HelperTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _MultiOCR3Helper.contract.Transact(opts, "acceptOwnership") +} + +func (_MultiOCR3Helper *MultiOCR3HelperSession) AcceptOwnership() (*types.Transaction, error) { + return _MultiOCR3Helper.Contract.AcceptOwnership(&_MultiOCR3Helper.TransactOpts) +} + +func (_MultiOCR3Helper *MultiOCR3HelperTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _MultiOCR3Helper.Contract.AcceptOwnership(&_MultiOCR3Helper.TransactOpts) +} + +func (_MultiOCR3Helper *MultiOCR3HelperTransactor) SetOCR3Configs(opts *bind.TransactOpts, ocrConfigArgs []MultiOCR3BaseOCRConfigArgs) (*types.Transaction, error) { + return _MultiOCR3Helper.contract.Transact(opts, "setOCR3Configs", ocrConfigArgs) +} + +func (_MultiOCR3Helper *MultiOCR3HelperSession) SetOCR3Configs(ocrConfigArgs []MultiOCR3BaseOCRConfigArgs) (*types.Transaction, error) { + return _MultiOCR3Helper.Contract.SetOCR3Configs(&_MultiOCR3Helper.TransactOpts, ocrConfigArgs) +} + +func (_MultiOCR3Helper *MultiOCR3HelperTransactorSession) SetOCR3Configs(ocrConfigArgs []MultiOCR3BaseOCRConfigArgs) (*types.Transaction, error) { + return _MultiOCR3Helper.Contract.SetOCR3Configs(&_MultiOCR3Helper.TransactOpts, ocrConfigArgs) +} + +func (_MultiOCR3Helper *MultiOCR3HelperTransactor) SetTransmitOcrPluginType(opts *bind.TransactOpts, ocrPluginType uint8) (*types.Transaction, error) { + return _MultiOCR3Helper.contract.Transact(opts, "setTransmitOcrPluginType", ocrPluginType) +} + +func (_MultiOCR3Helper *MultiOCR3HelperSession) SetTransmitOcrPluginType(ocrPluginType uint8) (*types.Transaction, error) { + return _MultiOCR3Helper.Contract.SetTransmitOcrPluginType(&_MultiOCR3Helper.TransactOpts, ocrPluginType) +} + +func (_MultiOCR3Helper *MultiOCR3HelperTransactorSession) SetTransmitOcrPluginType(ocrPluginType uint8) (*types.Transaction, error) { + return _MultiOCR3Helper.Contract.SetTransmitOcrPluginType(&_MultiOCR3Helper.TransactOpts, ocrPluginType) +} + +func (_MultiOCR3Helper *MultiOCR3HelperTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _MultiOCR3Helper.contract.Transact(opts, "transferOwnership", to) +} + +func (_MultiOCR3Helper *MultiOCR3HelperSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _MultiOCR3Helper.Contract.TransferOwnership(&_MultiOCR3Helper.TransactOpts, to) +} + +func (_MultiOCR3Helper *MultiOCR3HelperTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _MultiOCR3Helper.Contract.TransferOwnership(&_MultiOCR3Helper.TransactOpts, to) +} + +func (_MultiOCR3Helper *MultiOCR3HelperTransactor) TransmitWithSignatures(opts *bind.TransactOpts, reportContext [3][32]byte, report []byte, rs [][32]byte, ss [][32]byte, rawVs [32]byte) (*types.Transaction, error) { + return _MultiOCR3Helper.contract.Transact(opts, "transmitWithSignatures", reportContext, report, rs, ss, rawVs) +} + +func (_MultiOCR3Helper *MultiOCR3HelperSession) TransmitWithSignatures(reportContext [3][32]byte, report []byte, rs [][32]byte, ss [][32]byte, rawVs [32]byte) (*types.Transaction, error) { + return _MultiOCR3Helper.Contract.TransmitWithSignatures(&_MultiOCR3Helper.TransactOpts, reportContext, report, rs, ss, rawVs) +} + +func (_MultiOCR3Helper *MultiOCR3HelperTransactorSession) TransmitWithSignatures(reportContext [3][32]byte, report []byte, rs [][32]byte, ss [][32]byte, rawVs [32]byte) (*types.Transaction, error) { + return _MultiOCR3Helper.Contract.TransmitWithSignatures(&_MultiOCR3Helper.TransactOpts, reportContext, report, rs, ss, rawVs) +} + +func (_MultiOCR3Helper *MultiOCR3HelperTransactor) TransmitWithoutSignatures(opts *bind.TransactOpts, reportContext [3][32]byte, report []byte) (*types.Transaction, error) { + return _MultiOCR3Helper.contract.Transact(opts, "transmitWithoutSignatures", reportContext, report) +} + +func (_MultiOCR3Helper *MultiOCR3HelperSession) TransmitWithoutSignatures(reportContext [3][32]byte, report []byte) (*types.Transaction, error) { + return _MultiOCR3Helper.Contract.TransmitWithoutSignatures(&_MultiOCR3Helper.TransactOpts, reportContext, report) +} + +func (_MultiOCR3Helper *MultiOCR3HelperTransactorSession) TransmitWithoutSignatures(reportContext [3][32]byte, report []byte) (*types.Transaction, error) { + return _MultiOCR3Helper.Contract.TransmitWithoutSignatures(&_MultiOCR3Helper.TransactOpts, reportContext, report) +} + +type MultiOCR3HelperAfterConfigSetIterator struct { + Event *MultiOCR3HelperAfterConfigSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MultiOCR3HelperAfterConfigSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MultiOCR3HelperAfterConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MultiOCR3HelperAfterConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MultiOCR3HelperAfterConfigSetIterator) Error() error { + return it.fail +} + +func (it *MultiOCR3HelperAfterConfigSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MultiOCR3HelperAfterConfigSet struct { + OcrPluginType uint8 + Raw types.Log +} + +func (_MultiOCR3Helper *MultiOCR3HelperFilterer) FilterAfterConfigSet(opts *bind.FilterOpts) (*MultiOCR3HelperAfterConfigSetIterator, error) { + + logs, sub, err := _MultiOCR3Helper.contract.FilterLogs(opts, "AfterConfigSet") + if err != nil { + return nil, err + } + return &MultiOCR3HelperAfterConfigSetIterator{contract: _MultiOCR3Helper.contract, event: "AfterConfigSet", logs: logs, sub: sub}, nil +} + +func (_MultiOCR3Helper *MultiOCR3HelperFilterer) WatchAfterConfigSet(opts *bind.WatchOpts, sink chan<- *MultiOCR3HelperAfterConfigSet) (event.Subscription, error) { + + logs, sub, err := _MultiOCR3Helper.contract.WatchLogs(opts, "AfterConfigSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MultiOCR3HelperAfterConfigSet) + if err := _MultiOCR3Helper.contract.UnpackLog(event, "AfterConfigSet", 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 +} + +func (_MultiOCR3Helper *MultiOCR3HelperFilterer) ParseAfterConfigSet(log types.Log) (*MultiOCR3HelperAfterConfigSet, error) { + event := new(MultiOCR3HelperAfterConfigSet) + if err := _MultiOCR3Helper.contract.UnpackLog(event, "AfterConfigSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MultiOCR3HelperConfigSetIterator struct { + Event *MultiOCR3HelperConfigSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MultiOCR3HelperConfigSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MultiOCR3HelperConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MultiOCR3HelperConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MultiOCR3HelperConfigSetIterator) Error() error { + return it.fail +} + +func (it *MultiOCR3HelperConfigSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MultiOCR3HelperConfigSet struct { + OcrPluginType uint8 + ConfigDigest [32]byte + Signers []common.Address + Transmitters []common.Address + F uint8 + Raw types.Log +} + +func (_MultiOCR3Helper *MultiOCR3HelperFilterer) FilterConfigSet(opts *bind.FilterOpts) (*MultiOCR3HelperConfigSetIterator, error) { + + logs, sub, err := _MultiOCR3Helper.contract.FilterLogs(opts, "ConfigSet") + if err != nil { + return nil, err + } + return &MultiOCR3HelperConfigSetIterator{contract: _MultiOCR3Helper.contract, event: "ConfigSet", logs: logs, sub: sub}, nil +} + +func (_MultiOCR3Helper *MultiOCR3HelperFilterer) WatchConfigSet(opts *bind.WatchOpts, sink chan<- *MultiOCR3HelperConfigSet) (event.Subscription, error) { + + logs, sub, err := _MultiOCR3Helper.contract.WatchLogs(opts, "ConfigSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MultiOCR3HelperConfigSet) + if err := _MultiOCR3Helper.contract.UnpackLog(event, "ConfigSet", 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 +} + +func (_MultiOCR3Helper *MultiOCR3HelperFilterer) ParseConfigSet(log types.Log) (*MultiOCR3HelperConfigSet, error) { + event := new(MultiOCR3HelperConfigSet) + if err := _MultiOCR3Helper.contract.UnpackLog(event, "ConfigSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MultiOCR3HelperOwnershipTransferRequestedIterator struct { + Event *MultiOCR3HelperOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MultiOCR3HelperOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MultiOCR3HelperOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MultiOCR3HelperOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MultiOCR3HelperOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *MultiOCR3HelperOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MultiOCR3HelperOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_MultiOCR3Helper *MultiOCR3HelperFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MultiOCR3HelperOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _MultiOCR3Helper.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &MultiOCR3HelperOwnershipTransferRequestedIterator{contract: _MultiOCR3Helper.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_MultiOCR3Helper *MultiOCR3HelperFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *MultiOCR3HelperOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _MultiOCR3Helper.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MultiOCR3HelperOwnershipTransferRequested) + if err := _MultiOCR3Helper.contract.UnpackLog(event, "OwnershipTransferRequested", 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 +} + +func (_MultiOCR3Helper *MultiOCR3HelperFilterer) ParseOwnershipTransferRequested(log types.Log) (*MultiOCR3HelperOwnershipTransferRequested, error) { + event := new(MultiOCR3HelperOwnershipTransferRequested) + if err := _MultiOCR3Helper.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MultiOCR3HelperOwnershipTransferredIterator struct { + Event *MultiOCR3HelperOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MultiOCR3HelperOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MultiOCR3HelperOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MultiOCR3HelperOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MultiOCR3HelperOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *MultiOCR3HelperOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MultiOCR3HelperOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_MultiOCR3Helper *MultiOCR3HelperFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MultiOCR3HelperOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _MultiOCR3Helper.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &MultiOCR3HelperOwnershipTransferredIterator{contract: _MultiOCR3Helper.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_MultiOCR3Helper *MultiOCR3HelperFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *MultiOCR3HelperOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _MultiOCR3Helper.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MultiOCR3HelperOwnershipTransferred) + if err := _MultiOCR3Helper.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 +} + +func (_MultiOCR3Helper *MultiOCR3HelperFilterer) ParseOwnershipTransferred(log types.Log) (*MultiOCR3HelperOwnershipTransferred, error) { + event := new(MultiOCR3HelperOwnershipTransferred) + if err := _MultiOCR3Helper.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type MultiOCR3HelperTransmittedIterator struct { + Event *MultiOCR3HelperTransmitted + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *MultiOCR3HelperTransmittedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(MultiOCR3HelperTransmitted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(MultiOCR3HelperTransmitted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *MultiOCR3HelperTransmittedIterator) Error() error { + return it.fail +} + +func (it *MultiOCR3HelperTransmittedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type MultiOCR3HelperTransmitted struct { + OcrPluginType uint8 + ConfigDigest [32]byte + SequenceNumber uint64 + Raw types.Log +} + +func (_MultiOCR3Helper *MultiOCR3HelperFilterer) FilterTransmitted(opts *bind.FilterOpts, ocrPluginType []uint8) (*MultiOCR3HelperTransmittedIterator, error) { + + var ocrPluginTypeRule []interface{} + for _, ocrPluginTypeItem := range ocrPluginType { + ocrPluginTypeRule = append(ocrPluginTypeRule, ocrPluginTypeItem) + } + + logs, sub, err := _MultiOCR3Helper.contract.FilterLogs(opts, "Transmitted", ocrPluginTypeRule) + if err != nil { + return nil, err + } + return &MultiOCR3HelperTransmittedIterator{contract: _MultiOCR3Helper.contract, event: "Transmitted", logs: logs, sub: sub}, nil +} + +func (_MultiOCR3Helper *MultiOCR3HelperFilterer) WatchTransmitted(opts *bind.WatchOpts, sink chan<- *MultiOCR3HelperTransmitted, ocrPluginType []uint8) (event.Subscription, error) { + + var ocrPluginTypeRule []interface{} + for _, ocrPluginTypeItem := range ocrPluginType { + ocrPluginTypeRule = append(ocrPluginTypeRule, ocrPluginTypeItem) + } + + logs, sub, err := _MultiOCR3Helper.contract.WatchLogs(opts, "Transmitted", ocrPluginTypeRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(MultiOCR3HelperTransmitted) + if err := _MultiOCR3Helper.contract.UnpackLog(event, "Transmitted", 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 +} + +func (_MultiOCR3Helper *MultiOCR3HelperFilterer) ParseTransmitted(log types.Log) (*MultiOCR3HelperTransmitted, error) { + event := new(MultiOCR3HelperTransmitted) + if err := _MultiOCR3Helper.contract.UnpackLog(event, "Transmitted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (_MultiOCR3Helper *MultiOCR3Helper) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _MultiOCR3Helper.abi.Events["AfterConfigSet"].ID: + return _MultiOCR3Helper.ParseAfterConfigSet(log) + case _MultiOCR3Helper.abi.Events["ConfigSet"].ID: + return _MultiOCR3Helper.ParseConfigSet(log) + case _MultiOCR3Helper.abi.Events["OwnershipTransferRequested"].ID: + return _MultiOCR3Helper.ParseOwnershipTransferRequested(log) + case _MultiOCR3Helper.abi.Events["OwnershipTransferred"].ID: + return _MultiOCR3Helper.ParseOwnershipTransferred(log) + case _MultiOCR3Helper.abi.Events["Transmitted"].ID: + return _MultiOCR3Helper.ParseTransmitted(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (MultiOCR3HelperAfterConfigSet) Topic() common.Hash { + return common.HexToHash("0x897ac1b2c12867721b284f3eb147bd4ab046d4eef1cf31c1d8988bfcfb962b53") +} + +func (MultiOCR3HelperConfigSet) Topic() common.Hash { + return common.HexToHash("0xab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547") +} + +func (MultiOCR3HelperOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (MultiOCR3HelperOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (MultiOCR3HelperTransmitted) Topic() common.Hash { + return common.HexToHash("0x198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0") +} + +func (_MultiOCR3Helper *MultiOCR3Helper) Address() common.Address { + return _MultiOCR3Helper.address +} + +type MultiOCR3HelperInterface interface { + GetOracle(opts *bind.CallOpts, ocrPluginType uint8, oracleAddress common.Address) (MultiOCR3BaseOracle, error) + + LatestConfigDetails(opts *bind.CallOpts, ocrPluginType uint8) (MultiOCR3BaseOCRConfig, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + SetOCR3Configs(opts *bind.TransactOpts, ocrConfigArgs []MultiOCR3BaseOCRConfigArgs) (*types.Transaction, error) + + SetTransmitOcrPluginType(opts *bind.TransactOpts, ocrPluginType uint8) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + TransmitWithSignatures(opts *bind.TransactOpts, reportContext [3][32]byte, report []byte, rs [][32]byte, ss [][32]byte, rawVs [32]byte) (*types.Transaction, error) + + TransmitWithoutSignatures(opts *bind.TransactOpts, reportContext [3][32]byte, report []byte) (*types.Transaction, error) + + FilterAfterConfigSet(opts *bind.FilterOpts) (*MultiOCR3HelperAfterConfigSetIterator, error) + + WatchAfterConfigSet(opts *bind.WatchOpts, sink chan<- *MultiOCR3HelperAfterConfigSet) (event.Subscription, error) + + ParseAfterConfigSet(log types.Log) (*MultiOCR3HelperAfterConfigSet, error) + + FilterConfigSet(opts *bind.FilterOpts) (*MultiOCR3HelperConfigSetIterator, error) + + WatchConfigSet(opts *bind.WatchOpts, sink chan<- *MultiOCR3HelperConfigSet) (event.Subscription, error) + + ParseConfigSet(log types.Log) (*MultiOCR3HelperConfigSet, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MultiOCR3HelperOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *MultiOCR3HelperOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*MultiOCR3HelperOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*MultiOCR3HelperOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *MultiOCR3HelperOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*MultiOCR3HelperOwnershipTransferred, error) + + FilterTransmitted(opts *bind.FilterOpts, ocrPluginType []uint8) (*MultiOCR3HelperTransmittedIterator, error) + + WatchTransmitted(opts *bind.WatchOpts, sink chan<- *MultiOCR3HelperTransmitted, ocrPluginType []uint8) (event.Subscription, error) + + ParseTransmitted(log types.Log) (*MultiOCR3HelperTransmitted, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var MultiOCR3HelperZKBin string = ("0x0002000000000002001400000000000200010000000103550000006003100270000002a30030019d0000000100200190000000350000c13d000002a3023001970000008003000039000000400030043f000000040020008c000002e60000413d000000000401043b000000e004400270000002a90040009c000000410000213d000002b00040009c0000007a0000a13d000002b10040009c000001950000613d000002b20040009c000002490000613d000002b30040009c000002e60000c13d0000000001000416000000000001004b000002e60000c13d000000000100041a000002bc021001970000000006000411000000000026004b000002e80000c13d0000000102000039000000000302041a000002a404300197000000000464019f000000000042041b000002a401100197000000000010041b0000000001000414000002bc05300197000002a30010009c000002a301008041000000c001100210000002ca011001c70000800d020000390000000303000039000002d2040000410a860a7c0000040f0000000100200190000002e60000613d000000000100001900000a870001042e000000a001000039000000400010043f0000000001000416000000000001004b000002e60000c13d0000000001000411000000000001004b000000650000c13d000002a701000041000000a00010043f000002a80100004100000a8800010430000002aa0040009c000001680000a13d000002ab0040009c000001da0000613d000002ac0040009c000002dd0000613d000002ad0040009c000002e60000c13d0011002400200094000002e60000413d0000000003000416000000000003004b000002e60000c13d0000000403100370000000000403043b000002b60040009c000002e60000213d0000002303400039000000000023004b000002e60000813d0000000403400039000000000331034f000000000703043b000002b60070009c0000005f0000213d00000005067002100000003f03600039000002b705300197000002b80050009c0000030a0000a13d000002e601000041000000000010043f0000004101000039000000040010043f000002c20100004100000a88000104300000000103000039000000000203041a000002a402200197000000000112019f000000000013041b0000800b0100003900000004030000390000000004000415000000140440008a0000000504400210000002a5020000410a860a5e0000040f000000800010043f000001400000044300000160001004430000002001000039000001000010044300000001010000390000012000100443000002a60100004100000a870001042e000002b40040009c000001750000613d000002b50040009c000002e60000c13d000000840020008c000002e60000413d0000000003000416000000000003004b000002e60000c13d0000006403100370000000000303043b000002b60030009c000002e60000213d0000002304300039000000000024004b000002e60000813d001000040030003d0000001001100360000000000101043b001100000001001d000002b60010009c000002e60000213d0000001101300029000f00240010003d0000000f0020006b000002e60000213d000000a001000039000e00000001001d000000400010043f000000800000043f0000000401000039000000000101041a000000ff0110018f000d00000001001d000000000010043f0000000201000039000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000400200043d000002e10020009c0000005f0000813d000000000301043b0000008001200039000000400010043f000000000103041a00000000061204360000000103300039000000000303041a0000000804300270000000ff0440018f00000040052000390000000000450435000000ff0430018f00000000004604350000006007200039000002c0003001980000000002000039000000010200c03900000000002704350000001102000029000000a402200039000000d30000613d000000800400043d0000000503400210000000000004004b000000ca0000613d000002e90030009c000002d70000213d00000000044300d9000000200040008c000002d70000c13d000e00a00030003d0000000e043000290000000002240019000000000042004b000000000400003900000001040040390000000e0030002a000002d70000413d0000000100400190000002d70000c13d0000000003000031000000000023004b0000075c0000c13d000e00000007001d000c00000006001d00000004020000390000000102200367000000000202043b000000000021004b000007680000c13d000002d60100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000002a30010009c000002a301008041000000c001100210000002d7011001c700008005020000390a860a810000040f0000000100200190000007740000613d000000000101043b000b00000001001d000002a50100004100000000001004430000000001000414000002a30010009c000002a301008041000000c001100210000002d8011001c70000800b020000390a860a810000040f0000000100200190000007740000613d000000000101043b0000000b0010006b000006990000c13d0000000d01000029000000000010043f0000000301000039000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000400200043d000b00000002001d000002c70020009c0000005f0000213d000000000101043b0000000b030000290000004002300039000000400020043f000000000201041a000000ff0120018f00000000011304360000000802200270000000ff0220018f000000030020008c000001d40000813d0000000000210435000000020020008c000007750000c13d0000000d01000029000000000010043f0000000201000039000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d0000000b020000290000000002020433000b00ff00200193000000000101043b0000000301100039000000000201041a0000000b0020006b0000099a0000813d000000000010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002c5011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000000101043b0000000b01100029000000000101041a000002bc011001970000000002000411000000000012004b000007750000c13d0000000e010000290000000001010433000000000001004b000007b40000c13d00000001010003670000000402100370000000000202043b000000400300043d00000000022304360000002401100370000000000101043b000002b6011001970000000000120435000002a30030009c000002a30300804100000040013002100000000002000414000002a30020009c000002a302008041000000c002200210000000000112019f000002bf011001c70000800d020000390000000203000039000002df040000410000000d05000029000000300000013d000002ae0040009c000001850000613d000002af0040009c000002e60000c13d0000000001000416000000000001004b000002e60000c13d0000000101000039000000000101041a000002bc01100197000000800010043f000002d00100004100000a870001042e0000000001000416000000000001004b000002e60000c13d000000c001000039000000400010043f0000001901000039000000800010043f000002e702000041000000a00020043f0000002003000039000000c00030043f000000e00010043f000001000020043f000001190000043f000002e80100004100000a870001042e000000240020008c000002e60000413d0000000002000416000000000002004b000002e60000c13d0000000401100370000000000101043b000000ff0010008c000002e60000213d0000000402000039000000000302041a000002ea03300197000000000113019f000000000012041b000000000100001900000a870001042e000000440020008c000002e60000413d0000000002000416000000000002004b000002e60000c13d0000000402100370000000000202043b000000ff0020008c000002e60000213d0000002401100370000000000101043b001100000001001d000002bc0010009c000002e60000213d000000c001000039000000400010043f000000800000043f000000a00000043f000000000020043f0000000301000039000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d0000001102000029000002bc02200197000000000101043b000000000020043f000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000400200043d000002c70020009c0000005f0000213d000000000101043b0000004003200039000000400030043f000000000101041a000000ff0310018f00000000023204360000000801100270000000ff0110018f000000020010008c000001d40000213d0000000000120435000000400100043d00000000033104360000000002020433000000020020008c000006930000a13d000002e601000041000000000010043f0000002101000039000000040010043f000002c20100004100000a8800010430000000240020008c000002e60000413d0000000002000416000000000002004b000002e60000c13d0000000401100370000000000101043b001100000001001d000000ff0010008c000002e60000213d000000e001000039000000400010043f0a8609ee0000040f000000e00000043f000001000000043f000001200000043f000001400000043f000000e001000039000000800010043f0000006001000039000000a00010043f000000c00010043f0000001101000029000000000010043f0000000201000039000000200010043f000000400200003900000000010000190a860a490000040f001100000001001d000000400100043d000f00000001001d0a8609e30000040f00000011010000290a860a0b0000040f0000000f020000290000000001120436001000000001001d000000400200043d000e00000002001d000000110100002900000002011000390a860a270000040f0000000e0210006a0000000e010000290a8609f90000040f00000010010000290000000e02000029000000000021043500000011010000290000000301100039000000400200043d001100000002001d0a860a270000040f000000110210006a00000011010000290a8609f90000040f0000000f020000290000004001200039000e00000001001d000000110300002900000000003104350000002001000039000000400500043d001100000005001d00000000011504360000000002020433000000004302043400000000003104350000000001040433000000ff0110018f0000004003500039000000000013043500000040012000390000000001010433000000ff0110018f0000006003500039000000000013043500000060012000390000000001010433000000000001004b0000000001000039000000010100c0390000008002500039000000000012043500000010010000290000000001010433000000c002000039000000a0035000390000000000230435000000e0025000390a8609d50000040f000000000201001900000011040000290000000001410049000000200310008a0000000e010000290000000001010433000000c00440003900000000003404350a8609d50000040f00000011020000290000000001210049000002a30020009c000002a3020080410000004002200210000002a30010009c000002a3010080410000006001100210000000000121019f00000a870001042e000000e40020008c000002e60000413d0000000004000416000000000004004b000002e60000c13d0000006404100370000000000404043b000002b60040009c000002e60000213d0000002305400039000000000025004b000002e60000813d0000000405400039000000000551034f000000000505043b001100000005001d000002b60050009c000002e60000213d0000002405400039001000000005001d000f00110050002d0000000f0020006b000002e60000213d0000008404100370000000000404043b000002b60040009c000002e60000213d0000002305400039000000000025004b000002e60000813d0000000405400039000000000551034f000000000905043b000002b60090009c000002e60000213d0000002407400039000000050b90021000000000087b0019000000000028004b000002e60000213d000000a404100370000000000404043b000002b60040009c000002e60000213d0000002305400039000000000025004b000002e60000813d0000000405400039000000000551034f000000000605043b000002b60060009c000002e60000213d0000002404400039000000050a60021000000000054a0019000000000025004b000002e60000213d0000003f02b00039000002b70b200197000002b800b0009c0000005f0000213d0000000402000039000000000202041a000000800bb00039000e0000000b001d0000004000b0043f000000800090043f000000000009004b000002970000613d000000000971034f000000000909043b000000200330003900000000009304350000002007700039000000000087004b0000028e0000413d000000400300043d000e00000003001d0000003f03a00039000002b7033001970000000e033000290000000e0030006c00000000070000390000000107004039000002b60030009c0000005f0000213d00000001007001900000005f0000c13d000d00ff00200193000000400030043f0000000e020000290000000002620436000c00000002001d000000000006004b000002b00000613d0000000e02000029000000000341034f000000000303043b000000200220003900000000003204350000002004400039000000000054004b000002a90000413d0000000d01000029000000000010043f0000000201000039000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000400200043d000002b80020009c0000005f0000213d000000000301043b0000008001200039000000400010043f000000000103041a00000000061204360000000103300039000000000303041a0000000804300270000000ff0440018f00000040052000390000000000450435000000ff0430018f000a00000006001d00000000004604350000006004200039000002c0033001980000000002000039000000010200c039000b00000004001d0000000000240435000000a50200008a000000110020006b000006b40000a13d000002e601000041000000000010043f0000001101000039000000040010043f000002c20100004100000a8800010430000000240020008c000002e60000413d0000000002000416000000000002004b000002e60000c13d0000000401100370000000000101043b000002bc0010009c000002ec0000a13d000000000100001900000a8800010430000002d101000041000000800010043f000002cd0100004100000a88000104300000000102000039000000000202041a000002bc022001970000000005000411000000000025004b000002f90000c13d000002bc06100197000000000056004b000002fd0000c13d000002cf01000041000000800010043f000002cd0100004100000a8800010430000002bd01000041000000800010043f000002cd0100004100000a8800010430000000000100041a000002a401100197000000000161019f000000000010041b0000000001000414000002a30010009c000002a301008041000000c001100210000002ca011001c70000800d020000390000000303000039000002ce04000041000000300000013d0000008003500039000000400030043f000000800070043f00000024054000390000000006560019000000000026004b000002e60000213d000000000007004b000005ec0000c13d0000000101000039000000000101041a000002bc011001970000000002000411000000000012004b0000068b0000c13d000000800100043d000000000001004b000000330000613d000600000000001d00000006010000290000000501100210000000a00110003900000000020104330000004001200039000400000001001d0000000001010433000000ff00100190000007780000613d000700000002001d00000020012000390000000001010433000000ff0110018f001100000001001d000000000010043f0000000201000039000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000070300002900000060073000390000000002070433000000000401043b0000000105400039000000000105041a000000ff00100190000003480000613d000000000002004b0000000002000039000000010200c039000002c0001001980000000001000039000000010100c039000000000021004b0000034e0000613d0000078d0000013d000002c301100197000000000002004b000002c4020000410000000002006019000000000112019f000000000015041b000000400100043d000f00000001001d000000a00230003900000000030204330000000061030434000b00000006001d000001000010008c000007a10000213d000d00000007001d000c00000003001d000100000002001d000300000005001d000000000001004b0000077e0000613d000500000004001d0000000301400039000000000301041a0000000f02000029001000000003001d0000000002320436000e00000002001d000200000001001d000000000010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002c5011001c700008010020000390a860a810000040f0000000100200190000002e60000613d0000001005000029000000000005004b0000000e020000290000037c0000613d000000000101043b0000000e020000290000000003000019000000000401041a000002bc04400197000000000242043600000001011000390000000103300039000000000053004b000003750000413d0000000f0120006a0000001f01100039000002eb021001970000000f01200029000000000021004b00000000020000390000000102004039000002b60010009c0000005f0000213d00000001002001900000005f0000c13d000000400010043f0000000f010000290000000001010433000000000001004b000003b90000613d0000000001000019001000000001001d0000001101000029000000000010043f0000000301000039000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d0000000f0200002900000000020204330000001003000029000000000032004b0000099a0000a13d00000005023002100000000e022000290000000002020433000002bc02200197000000000101043b000000000020043f000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000000101043b000000000001041b000000100200002900000001022000390000000f010000290000000001010433000000000012004b00000000010200190000038d0000413d0000000d010000290000000001010433000000000001004b0000000501000029000800020010003d000004d40000613d0000000801000029000000000301041a000000400200043d000f00000002001d001000000003001d0000000002320436000e00000002001d000000000010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002c5011001c700008010020000390a860a810000040f0000000100200190000002e60000613d0000001005000029000000000005004b0000000e02000029000003de0000613d000000000101043b0000000e020000290000000003000019000000000401041a000002bc04400197000000000242043600000001011000390000000103300039000000000053004b000003d70000413d0000000f0120006a0000001f01100039000002eb021001970000000f01200029000000000021004b00000000020000390000000102004039000002b60010009c0000005f0000213d00000001002001900000005f0000c13d000000400010043f0000000f010000290000000001010433000000000001004b0000041b0000613d0000000001000019001000000001001d0000001101000029000000000010043f0000000301000039000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d0000000f0200002900000000020204330000001003000029000000000032004b0000099a0000a13d00000005023002100000000e022000290000000002020433000002bc02200197000000000101043b000000000020043f000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000000101043b000000000001041b000000100200002900000001022000390000000f010000290000000001010433000000000012004b0000000001020019000003ef0000413d000000070100002900000080011000390000000001010433000a00000001001d0000000014010434000900000001001d000001000040008c000007930000213d00000004010000290000000001010433000000fe0210018f000000550020008c00000003030000290000000c02000029000002d70000213d00000003011000c9000000ff0110018f000000000014004b000007990000a13d0000000001020433000000000014004b0000079f0000413d000000000103041a000002ec0110019700000008024002100000ff000220018f000000000121019f000000000013041b0000000801000029000000000201041a000000000041041b001000000004001d000000000024004b000004520000813d000f00000002001d0000000801000029000000000010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002c5011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000000201043b0000000f012000290000001002200029000000000012004b000004520000813d000000000002041b0000000102200039000000000012004b0000044e0000413d0000000801000029000000000010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002c5011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000000101043b00000000020000190000000a030000290000001006000029000000000412001900000020033000390000000005030433000002bc05500197000000000054041b0000000102200039000000000062004b000004610000413d0000000a010000290000000001010433000000000001004b000004d40000613d0000000002000019000f00000002001d000000050120021000000009011000290000000001010433001000000001001d0000001101000029000000000010043f0000000301000039000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d0000001002000029000002bc02200197000000000101043b001000000002001d000000000020043f000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000000101043b000000000101041a0000000801100270000000ff0110018f000000020010008c000001d40000213d000000000001004b000006a60000c13d000000100000006b0000000f02000029000006b10000613d000000400300043d000002c70030009c0000005f0000213d0000004001300039000000400010043f000000ff0120018f000d00000003001d00000000021304360000000101000039000e00000002001d00000000001204350000001101000029000000000010043f0000000301000039000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000000101043b0000001002000029000000000020043f000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d0000000e020000290000000002020433000000020020008c000001d40000213d00000008022002100000ff000220018f0000000d030000290000000003030433000000ff0330018f000000000223019f000000000101043b000000000301041a000002c803300197000000000232019f000000000021041b0000000f0200002900000001022000390000000a010000290000000001010433000000000012004b0000046e0000413d0000000c010000290000000001010433000000000001004b000005420000613d0000000002000019000f00000002001d00000005012002100000000b011000290000000001010433001000000001001d0000001101000029000000000010043f0000000301000039000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d0000001002000029000002bc02200197000000000101043b001000000002001d000000000020043f000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000000101043b000000000101041a0000000801100270000000ff0110018f000000020010008c000001d40000213d000000000001004b000006a60000c13d000000100000006b0000000f02000029000006b10000613d000000400300043d000002c70030009c0000005f0000213d0000004001300039000000400010043f000000ff0120018f000d00000003001d00000000021304360000000201000039000e00000002001d00000000001204350000001101000029000000000010043f0000000301000039000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000000101043b0000001002000029000000000020043f000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d0000000e020000290000000002020433000000020020008c000001d40000213d00000008022002100000ff000220018f0000000d030000290000000003030433000000ff0330018f000000000223019f000000000101043b000000000301041a000002c803300197000000000232019f000000000021041b0000000f0200002900000001022000390000000c010000290000000001010433000000000012004b000004d90000413d000002b60010009c000005430000a13d0000005f0000013d00000000010000190000000203000029000000000203041a000000000013041b001000000001001d000000000021004b0000055e0000813d000f00000002001d000000000030043f0000000001000414000002a30010009c000002a301008041000000c001100210000002c5011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000000201043b0000000f012000290000001002200029000000000012004b00000002030000290000055e0000813d000000000002041b0000000102200039000000000012004b0000055a0000413d000000000030043f0000000001000414000002a30010009c000002a301008041000000c001100210000002c5011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000000101043b0000001006000029000000000006004b0000000c05000029000005760000613d0000000002000019000000000312001900000020055000390000000004050433000002bc04400197000000000043041b0000000102200039000000000062004b0000056e0000413d0000000303000029000000000103041a000002ea0110019700000004020000290000000002020433001000ff0020019300000010011001af000000000013041b000000070100002900000000010104330000000502000029000000000012041b00000001020000290000000002020433000f00000002001d000000400400043d0000004002400039000000a00300003900000000003204350000002002400039000000000012043500000011010000290000000000140435000e00000004001d000000a0014000390000000802000029000000000302041a000d00000003001d0000000000310435000000000020043f0000000001000414000002a30010009c000002a301008041000000c001100210000002c5011001c700008010020000390a860a810000040f0000000100200190000002e60000613d0000000e05000029000000c0025000390000000d07000029000000000007004b000005ad0000613d000000000101043b00000000030000190000000f06000029000000000401041a000002bc04400197000000000242043600000001011000390000000103300039000000000073004b000005a50000413d000005ae0000013d0000000f0600002900000000015200490000006003500039000000000013043500000000030604330000000001320436000000000003004b000005bd0000613d000000000200001900000020066000390000000004060433000002bc0440019700000000014104360000000102200039000000000032004b000005b60000413d0000008002500039000000100300002900000000003204350000000001510049000002a30010009c000002a3010080410000006001100210000002a30050009c000002a3050080410000004002500210000000000121019f0000000002000414000002a30020009c000002a302008041000000c002200210000000000121019f000002ca011001c70000800d020000390000000103000039000002cb040000410a860a7c0000040f0000000100200190000002e60000613d000000400100043d00000011020000290000000000210435000002a30010009c000002a30100804100000040011002100000000002000414000002a30020009c000002a302008041000000c002200210000000000112019f000002c5011001c70000800d020000390000000103000039000002cc040000410a860a7c0000040f0000000100200190000002e60000613d0000000602000029000600010020003d000000800100043d000000060010006b0000031d0000413d000000330000013d000000a007000039000005f40000013d000000a003800039000000000093043500000000078704360000002005500039000000000065004b000003130000813d000000000351034f000000000803043b000002b60080009c000002e60000213d00000000094800190000001108900069000002b90080009c000002e60000213d000000c00080008c000002e60000413d000000400800043d000002ba0080009c0000005f0000213d000000c003800039000000400030043f0000002403900039000000000331034f000000000303043b000000000b380436000000440a9000390000000003a1034f000000000c03043b000000ff00c0008c000002e60000213d0000000000cb0435000000200aa000390000000003a1034f000000000b03043b000000ff00b0008c000002e60000213d00000040038000390000000000b30435000000200aa000390000000003a1034f000000000b03043b00000000000b004b0000000003000039000000010300c03900000000003b004b000002e60000c13d00000060038000390000000000b30435000000200aa000390000000003a1034f000000000b03043b000002b600b0009c000002e60000213d000000000c9b00190000004303c00039000000000023004b000000000b000019000002bb0b008041000002bb03300197000000000003004b000000000d000019000002bb0d004041000002bb0030009c000000000d0bc01900000000000d004b000002e60000c13d0000002403c00039000000000331034f000000000d03043b000002b600d0009c0000005f0000213d000000050ed002100000003f03e00039000002b703300197000000400b00043d000000000f3b00190000000000bf004b00000000030000390000000103004039000002b600f0009c0000005f0000213d00000001003001900000005f0000c13d0000004000f0043f0000000000db0435000000440cc00039000000000dce001900000000002d004b000002e60000213d0000000000dc004b000006530000813d000000000e0b00190000000003c1034f000000000f03043b000002bc00f0009c000002e60000213d000000200ee000390000000000fe0435000000200cc000390000000000dc004b0000064a0000413d00000080038000390000000000b304350000002003a00039000000000331034f000000000a03043b000002b600a0009c000002e60000213d000000000a9a00190000004303a00039000000000023004b0000000009000019000002bb09008041000002bb03300197000000000003004b000000000b000019000002bb0b004041000002bb0030009c000000000b09c01900000000000b004b000002e60000c13d0000002403a00039000000000331034f000000000b03043b000002b600b0009c0000005f0000213d000000050cb002100000003f03c00039000002b703300197000000400900043d000000000d39001900000000009d004b00000000030000390000000103004039000002b600d0009c0000005f0000213d00000001003001900000005f0000c13d0000004000d0043f0000000000b90435000000440aa00039000000000bac001900000000002b004b000002e60000213d0000000000ba004b000005ee0000813d000000000c0900190000000003a1034f000000000d03043b000002bc00d0009c000002e60000213d000000200cc000390000000000dc0435000000200aa000390000000000ba004b000006810000413d000005ee0000013d000000400100043d000002bd020000410000000000210435000002a30010009c000002a3010080410000004001100210000002be011001c700000a88000104300000000000230435000002a30010009c000002a3010080410000004001100210000002e0011001c700000a870001042e000000400200043d00000024032000390000000000130435000002d901000041000000000012043500000004012000390000000b030000290000000000310435000002a30020009c000002a3020080410000004001200210000002d4011001c700000a8800010430000000400100043d000002c6020000410000000000210435000000040210003900000004030000390000000000320435000002a30010009c000002a3010080410000004001100210000002c2011001c700000a8800010430000000400100043d000002c9020000410000068d0000013d0000001102000029000000a402200039000000000003004b000006d30000613d0000000004000415000000130440008a0000000504400210000000800500043d0000000503500210000000000005004b000007840000c13d0000000504400270000000a00430003f0000000e0400002900000000050404330000000504500210000000000005004b000006c90000613d00000000055400d9000000200050008c000002d70000c13d000000a00530003900000000035400190000000002230019000000000032004b00000000030000390000000103004039000000000054001a000002d70000413d0000000100300190000002d70000c13d0000000003000031000000000023004b0000075c0000c13d00000004020000390000000102200367000000000202043b000000000021004b000007680000c13d000002d60100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000002a30010009c000002a301008041000000c001100210000002d7011001c700008005020000390a860a810000040f0000000100200190000007740000613d000000000101043b000900000001001d000002a50100004100000000001004430000000001000414000002a30010009c000002a301008041000000c001100210000002d8011001c70000800b020000390a860a810000040f0000000100200190000007740000613d000000000101043b000000090010006b000007ac0000c13d0000000d01000029000000000010043f0000000301000039000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000400200043d000900000002001d000002c70020009c0000005f0000213d000000000101043b00000009030000290000004002300039000000400020043f000000000201041a000000ff0120018f00000000011304360000000802200270000000ff0220018f000000020020008c000001d40000213d0000000000210435000007750000c13d0000000d01000029000000000010043f0000000201000039000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d00000009020000290000000002020433000900ff00200193000000000101043b0000000301100039000000000201041a000000090020006b0000099a0000813d000000000010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002c5011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000000101043b0000000901100029000000000101041a000002bc011001970000000002000411000000000012004b000007750000c13d0000000b010000290000000001010433000000000001004b0000089e0000c13d00000001010003670000000402100370000000000202043b000000400300043d00000000022304360000002401100370000000000101043b000002b6011001970000000000120435000002a30030009c000002a303008041000000400130021000000000020004140000015e0000013d000000400100043d00000024041000390000000000340435000002d303000041000000000031043500000004031000390000000000230435000002a30010009c000002a3010080410000004001100210000002d4011001c700000a8800010430000000400300043d00000024043000390000000000240435000002d502000041000000000023043500000004023000390000000000120435000002a30030009c000002a3030080410000004001300210000002d4011001c700000a8800010430000000000001042f000000400100043d000002e2020000410000068d0000013d000000400100043d000002c602000041000000000021043500000004021000390000000000020435000006ac0000013d000002c6010000410000000f03000029000000000013043500000004013000390000000502000039000007a60000013d00000000045300d9000000200040008c000002d70000c13d0000000004000415000000120440008a0000000504400210000002e90030009c000002d70000213d000006bf0000013d000000400100043d000002c102000041000000000021043500000004021000390000001103000029000006ab0000013d000000400100043d000002c602000041000000000021043500000004021000390000000203000039000006ab0000013d000000400100043d000002c602000041000000000021043500000004021000390000000303000039000006ab0000013d000000400100043d000f00000001001d000002c6010000410000000f030000290000000000130435000000040130003900000001020000390000000000210435000002a30030009c000002a3030080410000004001300210000002c2011001c700000a8800010430000000400200043d00000024032000390000000000130435000002d901000041000000000012043500000004012000390000000903000029000006a00000013d0000000c010000290000000001010433000000ff0110018f000000ff0010008c000002d70000613d0000000101100039000000800200043d000000000012004b000009a00000c13d00000011010000290000001f01100039000002eb011001970000003f01100039000002eb02100197000000400100043d0000000002210019000000000012004b00000000040000390000000104004039000002b60020009c0000005f0000213d00000001004001900000005f0000c13d000000400020043f000000110200002900000000022104360000000f05000029000000000050007c000002e60000213d0000001105000029000002eb045001980000001f0550018f0000000003420019000000100600002900000020066000390000000106600367000007df0000613d000000000706034f0000000008020019000000007907043c0000000008980436000000000038004b000007db0000c13d000000000005004b000007ec0000613d000000000446034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f000000000043043500000011032000290000000000030435000002a30020009c000002a30200804100000040022002100000000001010433000002a30010009c000002a3010080410000006001100210000000000121019f0000000002000414000002a30020009c000002a302008041000000c002200210000000000112019f000002ca011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000000301043b000000400100043d00000020021000390000000000320435000000a003100039000000400410003900000004050000390000000105500367000000005605043c0000000004640436000000000034004b000008080000c13d00000080040000390000000000410435000002db0010009c0000005f0000213d000000400030043f000002a30020009c000002a30200804100000040022002100000000001010433000002a30010009c000002a3010080410000006001100210000000000121019f0000000002000414000002a30020009c000002a302008041000000c002200210000000000112019f000002ca011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000000101043b000e00000001001d000000800100043d000c00000001001d000000000001004b000001510000613d001100000000001d001000000000001d00000011010000290000001f0010008c0000099a0000213d000000800100043d000000110010006c0000099a0000a13d00000011010000290000000501100210000000a0011000390000000001010433000000400200043d000000600320003900000000001304350000004003200039000000000013043500000020012000390000001b0300003900000000003104350000000e010000290000000000120435000000000000043f000002a30020009c000002a30200804100000040012002100000000002000414000002a30020009c000002a302008041000000c002200210000000000112019f000002dd011001c700000001020000390a860a810000040f0000006003100270000002a303300197000000200030008c000000200500003900000000050340190000002004500190000008580000613d000000000601034f0000000007000019000000006806043c0000000007870436000000000047004b000008540000c13d0000001f05500190000008650000613d000000000641034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f00000000005404350000000100200190000009a90000613d000000000100043d000f00000001001d0000000d01000029000000000010043f0000000301000039000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000000101043b0000000f02000029000002bc02200197000000000020043f000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000400200043d000002c70020009c0000005f0000213d000000000101043b0000004003200039000000400030043f000000000301041a000000ff0130018f00000000021204360000000803300270000000ff0330018f000000020030008c000001d40000213d0000000000320435000000010030008c000009a30000c13d000000010110020f0000001000100180000009a60000c13d00100010001001b300000011020000290000000102200039001100000002001d0000000c0020006c0000082b0000413d000001510000013d0000000a010000290000000001010433000000ff0110018f000000ff0010008c000002d70000613d000000800200043d0000000101100039000000000012004b000009a00000c13d000000400100043d0000000e030000290000000003030433000000000032004b000009c70000c13d00000011020000290000001f02200039000002eb022001970000003f02200039000002eb022001970000000002210019000000000012004b00000000040000390000000104004039000002b60020009c0000005f0000213d00000001004001900000005f0000c13d000000400020043f000000110200002900000000022104360000000f05000029000000000050007c000002e60000213d0000001105000029000002eb045001980000001f0550018f000000100300002900000001063003670000000003420019000008cc0000613d000000000706034f0000000008020019000000007907043c0000000008980436000000000038004b000008c80000c13d000000000005004b000008d90000613d000000000446034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f000000000043043500000011032000290000000000030435000002a30020009c000002a30200804100000040022002100000000001010433000002a30010009c000002a3010080410000006001100210000000000121019f0000000002000414000002a30020009c000002a302008041000000c002200210000000000112019f000002ca011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000000301043b000000400100043d00000020021000390000000000320435000000a003100039000000400410003900000004050000390000000105500367000000005605043c0000000004640436000000000034004b000008f50000c13d00000080040000390000000000410435000002db0010009c0000005f0000213d000000400030043f000002a30020009c000002a30200804100000040022002100000000001010433000002a30010009c000002a3010080410000006001100210000000000121019f0000000002000414000002a30020009c000002a302008041000000c002200210000000000112019f000002ca011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000000101043b000b00000001001d000000800100043d000a00000001001d000000000001004b0000074e0000613d001100000000001d001000000000001d00000011010000290000001f0010008c0000099a0000213d00000011010000290000000301100210000000c4020000390000000102200367000000000202043b00000000011201cf000002dc0010009c000002d70000213d000000800200043d000000110020006c0000099a0000a13d0000000e020000290000000002020433000000110020006c0000099a0000a13d000000f8011002700000001b01100039000000110200002900000005022002100000000c032000290000000003030433000000a0022000390000000002020433000000400400043d0000006005400039000000000035043500000040034000390000000000230435000000200240003900000000001204350000000b010000290000000000140435000000000000043f000002a30040009c000002a30400804100000040014002100000000002000414000002a30020009c000002a302008041000000c002200210000000000112019f000002dd011001c700000001020000390a860a810000040f0000006003100270000002a303300197000000200030008c000000200500003900000000050340190000002004500190000009540000613d000000000601034f0000000007000019000000006806043c0000000007870436000000000047004b000009500000c13d0000001f05500190000009610000613d000000000641034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f00000000005404350000000100200190000009c90000613d000000000100043d000f00000001001d0000000d01000029000000000010043f0000000301000039000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000000101043b0000000f02000029000002bc02200197000000000020043f000000200010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002bf011001c700008010020000390a860a810000040f0000000100200190000002e60000613d000000400200043d000002c70020009c0000005f0000213d000000000101043b0000004003200039000000400030043f000000000301041a000000ff0130018f00000000021204360000000803300270000000ff0330018f000000020030008c000001d40000213d0000000000320435000000010030008c000009a30000c13d000000010110020f0000001000100180000009a60000c13d00100010001001b300000011020000290000000102200039001100000002001d0000000a0020006c000009180000413d0000074e0000013d000002e601000041000000000010043f0000003201000039000000040010043f000002c20100004100000a8800010430000000400100043d000002e3020000410000068d0000013d000000400100043d000002e4020000410000068d0000013d000000400100043d000002e5020000410000068d0000013d0000001f0530018f000002de06300198000000400200043d0000000004620019000009b40000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000009b00000c13d000000000005004b000009c10000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000002a30020009c000002a3020080410000004002200210000000000112019f00000a8800010430000002da020000410000068d0000013d0000001f0530018f000002de06300198000000400200043d0000000004620019000009b40000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000009d00000c13d000009b40000013d000000000301001900000000040104330000000001420436000000000004004b000009e20000613d000000000200001900000020033000390000000005030433000002bc0550019700000000015104360000000102200039000000000042004b000009db0000413d000000000001042d000002ed0010009c000009e80000813d0000006001100039000000400010043f000000000001042d000002e601000041000000000010043f0000004101000039000000040010043f000002c20100004100000a8800010430000002e10010009c000009f30000813d0000008001100039000000400010043f000000000001042d000002e601000041000000000010043f0000004101000039000000040010043f000002c20100004100000a88000104300000001f02200039000002eb022001970000000001120019000000000021004b00000000020000390000000102004039000002b60010009c00000a050000213d000000010020019000000a050000c13d000000400010043f000000000001042d000002e601000041000000000010043f0000004101000039000000040010043f000002c20100004100000a88000104300000000002010019000000400100043d000002e10010009c00000a210000813d0000008003100039000000400030043f000000000302041a00000000033104360000000102200039000000000202041a000000ff0420018f0000000000430435000002c0002001980000000003000039000000010300c039000000600410003900000000003404350000000802200270000000ff0220018f00000040031000390000000000230435000000000001042d000002e601000041000000000010043f0000004101000039000000040010043f000002c20100004100000a88000104300002000000000002000000000301041a000100000003001d0000000002320436000200000002001d000000000010043f0000000001000414000002a30010009c000002a301008041000000c001100210000002c5011001c700008010020000390a860a810000040f000000010020019000000a460000613d0000000105000029000000000005004b00000a440000613d000000000401043b00000000020000190000000201000029000000000304041a000002bc03300197000000000131043600000001044000390000000102200039000000000052004b00000a3c0000413d000000000001042d0000000201000029000000000001042d000000000100001900000a8800010430000000000001042f000002a30010009c000002a3010080410000004001100210000002a30020009c000002a3020080410000006002200210000000000112019f0000000002000414000002a30020009c000002a302008041000000c002200210000000000112019f000002ca011001c700008010020000390a860a810000040f000000010020019000000a5c0000613d000000000101043b000000000001042d000000000100001900000a880001043000000000050100190000000000200443000000050030008c00000a6c0000413d000000040100003900000000020000190000000506200210000000000664001900000005066002700000000006060031000000000161043a0000000102200039000000000031004b00000a640000413d000002a30030009c000002a30300804100000060013002100000000002000414000002a30020009c000002a302008041000000c002200210000000000112019f000002ee011001c700000000020500190a860a810000040f000000010020019000000a7b0000613d000000000101043b000000000001042d000000000001042f00000a7f002104210000000102000039000000000001042d0000000002000019000000000001042d00000a84002104230000000102000039000000000001042d0000000002000019000000000001042d00000a860000043200000a870001042e00000a880001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b00000002000000000000000000000000000000800000010000000000000000009b15e16f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000a00000000000000000000000000000000000000000000000000000000000000000000000007ac0aa1900000000000000000000000000000000000000000000000000000000c673e58300000000000000000000000000000000000000000000000000000000c673e58400000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000f716f99f000000000000000000000000000000000000000000000000000000007ac0aa1a000000000000000000000000000000000000000000000000000000008da5cb5b0000000000000000000000000000000000000000000000000000000034a9c92d0000000000000000000000000000000000000000000000000000000034a9c92e0000000000000000000000000000000000000000000000000000000044e65e550000000000000000000000000000000000000000000000000000000079ba509700000000000000000000000000000000000000000000000000000000181f5a770000000000000000000000000000000000000000000000000000000026bf9d26000000000000000000000000000000000000000000000000ffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffff3f8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff2b5c74de00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000002000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000ff000087f6037c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff00000000000000000000000000000000000000000000000000000000000100000200000000000000000000000000000000000020000000000000000000000000367f56a200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000d6c62c9b000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000ab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547897ac1b2c12867721b284f3eb147bd4ab046d4eef1cf31c1d8988bfcfb962b530000000000000000000000000000000000000004000000800000000000000000ed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278dad89dca00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000080000000000000000002b543c6000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08e1192e100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004400000000000000000000000093df584c00000000000000000000000000000000000000000000000000000000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e020000020000000000000000000000000000004400000000000000000000000002000002000000000000000000000000000000040000000000000000000000000f01ce8500000000000000000000000000000000000000000000000000000000a75d88af00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5fe4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffe0198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef00000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff80da0f08e80000000000000000000000000000000000000000000000000000000071253a2500000000000000000000000000000000000000000000000000000000ca31867a00000000000000000000000000000000000000000000000000000000f67bc7c4000000000000000000000000000000000000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000004d756c74694f4352334261736548656c70657220312e302e30000000000000000000000000000000000000000000000000000060000000c00000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff000000000000000000000000000000000000000000000000ffffffffffffffa00200000200000000000000000000000000000000000000000000000000000000") diff --git a/core/gethwrappers/ccip/generated_zks/nonce_manager/nonce_manager.go b/core/gethwrappers/ccip/generated_zks/nonce_manager/nonce_manager.go new file mode 100644 index 00000000000..94c2aae1c58 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/nonce_manager/nonce_manager.go @@ -0,0 +1,1263 @@ +package nonce_manager + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type AuthorizedCallersAuthorizedCallerArgs struct { + AddedCallers []common.Address + RemovedCallers []common.Address +} + +type NonceManagerPreviousRamps struct { + PrevOnRamp common.Address + PrevOffRamp common.Address +} + +type NonceManagerPreviousRampsArgs struct { + RemoteChainSelector uint64 + OverrideExistingRamps bool + PrevRamps NonceManagerPreviousRamps +} + +var NonceManagerMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"authorizedCallers\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CannotTransferToSelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PreviousRampAlreadySet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"UnauthorizedCaller\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AuthorizedCallerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AuthorizedCallerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"prevOnRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"prevOffRamp\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structNonceManager.PreviousRamps\",\"name\":\"prevRamp\",\"type\":\"tuple\"}],\"name\":\"PreviousRampsUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"SkippedIncorrectNonce\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addedCallers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"removedCallers\",\"type\":\"address[]\"}],\"internalType\":\"structAuthorizedCallers.AuthorizedCallerArgs\",\"name\":\"authorizedCallerArgs\",\"type\":\"tuple\"}],\"name\":\"applyAuthorizedCallerUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"overrideExistingRamps\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"prevOnRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"prevOffRamp\",\"type\":\"address\"}],\"internalType\":\"structNonceManager.PreviousRamps\",\"name\":\"prevRamps\",\"type\":\"tuple\"}],\"internalType\":\"structNonceManager.PreviousRampsArgs[]\",\"name\":\"previousRampsArgs\",\"type\":\"tuple[]\"}],\"name\":\"applyPreviousRampsUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllAuthorizedCallers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"getInboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"getIncrementedOutboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"getOutboundNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"getPreviousRamps\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"prevOnRamp\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"prevOffRamp\",\"type\":\"address\"}],\"internalType\":\"structNonceManager.PreviousRamps\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"expectedNonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"}],\"name\":\"incrementInboundNonce\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60806040523480156200001157600080fd5b5060405162001ad438038062001ad4833981016040819052620000349162000449565b80336000816200005757604051639b15e16f60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03848116919091179091558116156200008a576200008a81620000c0565b5050604080518082018252828152815160008152602080820190935291810191909152620000b8906200013a565b505062000569565b336001600160a01b03821603620000ea57604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b602081015160005b8151811015620001ca5760008282815181106200016357620001636200051b565b602090810291909101015190506200017d60028262000289565b15620001c0576040516001600160a01b03821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b5060010162000142565b50815160005b815181101562000283576000828281518110620001f157620001f16200051b565b6020026020010151905060006001600160a01b0316816001600160a01b0316036200022f576040516342bcdf7f60e11b815260040160405180910390fd5b6200023c600282620002a9565b506040516001600160a01b03821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a150600101620001d0565b50505050565b6000620002a0836001600160a01b038416620002c0565b90505b92915050565b6000620002a0836001600160a01b038416620003c4565b60008181526001830160205260408120548015620003b9576000620002e760018362000531565b8554909150600090620002fd9060019062000531565b9050818114620003695760008660000182815481106200032157620003216200051b565b90600052602060002001549050808760000184815481106200034757620003476200051b565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806200037d576200037d62000553565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050620002a3565b6000915050620002a3565b60008181526001830160205260408120546200040d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620002a3565b506000620002a3565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200044457600080fd5b919050565b600060208083850312156200045d57600080fd5b82516001600160401b03808211156200047557600080fd5b818501915085601f8301126200048a57600080fd5b8151818111156200049f576200049f62000416565b8060051b604051601f19603f83011681018181108582111715620004c757620004c762000416565b604052918252848201925083810185019188831115620004e657600080fd5b938501935b828510156200050f57620004ff856200042c565b84529385019392850192620004eb565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b81810381811115620002a357634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b61155b80620005796000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c806391a2749a11610081578063e0e03cae1161005b578063e0e03cae1461027c578063ea458c0c1461029f578063f2fde38b146102b257600080fd5b806391a2749a1461022a578063bf18402a1461023d578063c92236251461026957600080fd5b806379ba5097116100b257806379ba5097146101e55780637a75a094146101ef5780638da5cb5b1461020257600080fd5b8063181f5a77146100d95780632451a6271461012b578063294b563014610140575b600080fd5b6101156040518060400160405280601681526020017f4e6f6e63654d616e6167657220312e362e302d6465760000000000000000000081525081565b6040516101229190610f05565b60405180910390f35b6101336102c5565b6040516101229190610f72565b6101b161014e366004610fe2565b60408051808201909152600080825260208201525067ffffffffffffffff166000908152600460209081526040918290208251808401909352805473ffffffffffffffffffffffffffffffffffffffff9081168452600190910154169082015290565b60408051825173ffffffffffffffffffffffffffffffffffffffff9081168252602093840151169281019290925201610122565b6101ed6102d6565b005b6101ed6101fd366004610fff565b6103a4565b60015460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610122565b6101ed61023836600461118a565b610594565b61025061024b366004611231565b6105a8565b60405167ffffffffffffffff9091168152602001610122565b6102506102773660046112b3565b6105bd565b61028f61028a366004611308565b6105d4565b6040519015158152602001610122565b6102506102ad366004611231565b6106dd565b6101ed6102c036600461136d565b610771565b60606102d16002610782565b905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610327576040517f02b543c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000008082163390811790935560008054909116815560405173ffffffffffffffffffffffffffffffffffffffff909216929183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6103ac61078f565b60005b8181101561058f57368383838181106103ca576103ca61138a565b608002919091019150600090506004816103e76020850185610fe2565b67ffffffffffffffff1681526020810191909152604001600020805490915073ffffffffffffffffffffffffffffffffffffffff161515806104425750600181015473ffffffffffffffffffffffffffffffffffffffff1615155b1561048d5761045760408301602084016113b9565b61048d576040517fc6117ae200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61049d606083016040840161136d565b81547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff919091161781556104ed608083016060840161136d565b6001820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556105416020830183610fe2565b67ffffffffffffffff167fa2e43edcbc4fd175ae4bebbe3fd6139871ed1f1783cd4a1ace59b90d302c33198360400160405161057d91906113db565b60405180910390a250506001016103af565b505050565b61059c61078f565b6105a5816107e2565b50565b60006105b48383610974565b90505b92915050565b60006105ca848484610a91565b90505b9392505050565b60006105de610be2565b60006105eb868585610a91565b6105f6906001611452565b90508467ffffffffffffffff168167ffffffffffffffff161461065a577f606ff8179e5e3c059b82df931acc496b7b6053e8879042f8267f930e0595f69f868686866040516106489493929190611473565b60405180910390a160009150506106d5565b67ffffffffffffffff861660009081526006602052604090819020905182919061068790879087906114df565b908152604051908190036020019020805467ffffffffffffffff929092167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090921691909117905550600190505b949350505050565b60006106e7610be2565b60006106f38484610974565b6106fe906001611452565b67ffffffffffffffff808616600090815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff89168452909152902080549183167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090921691909117905591505092915050565b61077961078f565b6105a581610c29565b606060006105cd83610ced565b60015473ffffffffffffffffffffffffffffffffffffffff1633146107e0576040517f2b5c74de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b602081015160005b815181101561087d5760008282815181106108075761080761138a565b60200260200101519050610825816002610d4990919063ffffffff16565b156108745760405173ffffffffffffffffffffffffffffffffffffffff821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b506001016107ea565b50815160005b815181101561096e5760008282815181106108a0576108a061138a565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610910576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61091b600282610d6b565b5060405173ffffffffffffffffffffffffffffffffffffffff821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a150600101610883565b50505050565b67ffffffffffffffff808316600090815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091528120549091168082036105b45767ffffffffffffffff841660009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff168015610a89576040517f856c824700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015282169063856c824790602401602060405180830381865afa158015610a5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8091906114ef565b925050506105b7565b509392505050565b67ffffffffffffffff83166000908152600660205260408082209051829190610abd90869086906114df565b9081526040519081900360200190205467ffffffffffffffff16905060008190036105ca5767ffffffffffffffff851660009081526004602052604090206001015473ffffffffffffffffffffffffffffffffffffffff168015610bd95773ffffffffffffffffffffffffffffffffffffffff811663856c8247610b438688018861136d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015610bac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd091906114ef565b925050506105cd565b50949350505050565b610bed600233610d8d565b6107e0576040517fd86ad9cf00000000000000000000000000000000000000000000000000000000815233600482015260240160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff821603610c78576040517fdad89dca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b606081600001805480602002602001604051908101604052809291908181526020018280548015610d3d57602002820191906000526020600020905b815481526020019060010190808311610d29575b50505050509050919050565b60006105b48373ffffffffffffffffffffffffffffffffffffffff8416610dbc565b60006105b48373ffffffffffffffffffffffffffffffffffffffff8416610eb6565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260018301602052604081205415156105b4565b60008181526001830160205260408120548015610ea5576000610de060018361150c565b8554909150600090610df49060019061150c565b9050818114610e59576000866000018281548110610e1457610e1461138a565b9060005260206000200154905080876000018481548110610e3757610e3761138a565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080610e6a57610e6a61151f565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506105b7565b60009150506105b7565b5092915050565b6000818152600183016020526040812054610efd575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105b7565b5060006105b7565b60006020808352835180602085015260005b81811015610f3357858101830151858201604001528201610f17565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b6020808252825182820181905260009190848201906040850190845b81811015610fc057835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101610f8e565b50909695505050505050565b67ffffffffffffffff811681146105a557600080fd5b600060208284031215610ff457600080fd5b81356105b481610fcc565b6000806020838503121561101257600080fd5b823567ffffffffffffffff8082111561102a57600080fd5b818501915085601f83011261103e57600080fd5b81358181111561104d57600080fd5b8660208260071b850101111561106257600080fd5b60209290920196919550909350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff811681146105a557600080fd5b600082601f8301126110d657600080fd5b8135602067ffffffffffffffff808311156110f3576110f3611074565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110848211171561113657611136611074565b604052938452602081870181019490810192508785111561115657600080fd5b6020870191505b8482101561117f578135611170816110a3565b8352918301919083019061115d565b979650505050505050565b60006020828403121561119c57600080fd5b813567ffffffffffffffff808211156111b457600080fd5b90830190604082860312156111c857600080fd5b6040516040810181811083821117156111e3576111e3611074565b6040528235828111156111f557600080fd5b611201878286016110c5565b82525060208301358281111561121657600080fd5b611222878286016110c5565b60208301525095945050505050565b6000806040838503121561124457600080fd5b823561124f81610fcc565b9150602083013561125f816110a3565b809150509250929050565b60008083601f84011261127c57600080fd5b50813567ffffffffffffffff81111561129457600080fd5b6020830191508360208285010111156112ac57600080fd5b9250929050565b6000806000604084860312156112c857600080fd5b83356112d381610fcc565b9250602084013567ffffffffffffffff8111156112ef57600080fd5b6112fb8682870161126a565b9497909650939450505050565b6000806000806060858703121561131e57600080fd5b843561132981610fcc565b9350602085013561133981610fcc565b9250604085013567ffffffffffffffff81111561135557600080fd5b6113618782880161126a565b95989497509550505050565b60006020828403121561137f57600080fd5b81356105b4816110a3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156113cb57600080fd5b813580151581146105b457600080fd5b6040810182356113ea816110a3565b73ffffffffffffffffffffffffffffffffffffffff9081168352602084013590611413826110a3565b8082166020850152505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff818116838216019080821115610eaf57610eaf611423565b600067ffffffffffffffff8087168352808616602084015250606060408301528260608301528284608084013760006080848401015260807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f850116830101905095945050505050565b8183823760009101908152919050565b60006020828403121561150157600080fd5b81516105b481610fcc565b818103818111156105b7576105b7611423565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", +} + +var NonceManagerABI = NonceManagerMetaData.ABI + +var NonceManagerBin = NonceManagerMetaData.Bin + +func DeployNonceManager(auth *bind.TransactOpts, backend bind.ContractBackend, authorizedCallers []common.Address) (common.Address, *generated_zks.Transaction, *NonceManager, error) { + parsed, err := NonceManagerMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(NonceManagerZKBin), backend, authorizedCallers) + contractReturn := &NonceManager{address: address, abi: *parsed, NonceManagerCaller: NonceManagerCaller{contract: contractBind}, NonceManagerTransactor: NonceManagerTransactor{contract: contractBind}, NonceManagerFilterer: NonceManagerFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(NonceManagerBin), backend, authorizedCallers) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &NonceManager{address: address, abi: *parsed, NonceManagerCaller: NonceManagerCaller{contract: contract}, NonceManagerTransactor: NonceManagerTransactor{contract: contract}, NonceManagerFilterer: NonceManagerFilterer{contract: contract}}, nil +} + +type NonceManager struct { + address common.Address + abi abi.ABI + NonceManagerCaller + NonceManagerTransactor + NonceManagerFilterer +} + +type NonceManagerCaller struct { + contract *bind.BoundContract +} + +type NonceManagerTransactor struct { + contract *bind.BoundContract +} + +type NonceManagerFilterer struct { + contract *bind.BoundContract +} + +type NonceManagerSession struct { + Contract *NonceManager + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type NonceManagerCallerSession struct { + Contract *NonceManagerCaller + CallOpts bind.CallOpts +} + +type NonceManagerTransactorSession struct { + Contract *NonceManagerTransactor + TransactOpts bind.TransactOpts +} + +type NonceManagerRaw struct { + Contract *NonceManager +} + +type NonceManagerCallerRaw struct { + Contract *NonceManagerCaller +} + +type NonceManagerTransactorRaw struct { + Contract *NonceManagerTransactor +} + +func NewNonceManager(address common.Address, backend bind.ContractBackend) (*NonceManager, error) { + abi, err := abi.JSON(strings.NewReader(NonceManagerABI)) + if err != nil { + return nil, err + } + contract, err := bindNonceManager(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &NonceManager{address: address, abi: abi, NonceManagerCaller: NonceManagerCaller{contract: contract}, NonceManagerTransactor: NonceManagerTransactor{contract: contract}, NonceManagerFilterer: NonceManagerFilterer{contract: contract}}, nil +} + +func NewNonceManagerCaller(address common.Address, caller bind.ContractCaller) (*NonceManagerCaller, error) { + contract, err := bindNonceManager(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &NonceManagerCaller{contract: contract}, nil +} + +func NewNonceManagerTransactor(address common.Address, transactor bind.ContractTransactor) (*NonceManagerTransactor, error) { + contract, err := bindNonceManager(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &NonceManagerTransactor{contract: contract}, nil +} + +func NewNonceManagerFilterer(address common.Address, filterer bind.ContractFilterer) (*NonceManagerFilterer, error) { + contract, err := bindNonceManager(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &NonceManagerFilterer{contract: contract}, nil +} + +func bindNonceManager(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := NonceManagerMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_NonceManager *NonceManagerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _NonceManager.Contract.NonceManagerCaller.contract.Call(opts, result, method, params...) +} + +func (_NonceManager *NonceManagerRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _NonceManager.Contract.NonceManagerTransactor.contract.Transfer(opts) +} + +func (_NonceManager *NonceManagerRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _NonceManager.Contract.NonceManagerTransactor.contract.Transact(opts, method, params...) +} + +func (_NonceManager *NonceManagerCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _NonceManager.Contract.contract.Call(opts, result, method, params...) +} + +func (_NonceManager *NonceManagerTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _NonceManager.Contract.contract.Transfer(opts) +} + +func (_NonceManager *NonceManagerTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _NonceManager.Contract.contract.Transact(opts, method, params...) +} + +func (_NonceManager *NonceManagerCaller) GetAllAuthorizedCallers(opts *bind.CallOpts) ([]common.Address, error) { + var out []interface{} + err := _NonceManager.contract.Call(opts, &out, "getAllAuthorizedCallers") + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +func (_NonceManager *NonceManagerSession) GetAllAuthorizedCallers() ([]common.Address, error) { + return _NonceManager.Contract.GetAllAuthorizedCallers(&_NonceManager.CallOpts) +} + +func (_NonceManager *NonceManagerCallerSession) GetAllAuthorizedCallers() ([]common.Address, error) { + return _NonceManager.Contract.GetAllAuthorizedCallers(&_NonceManager.CallOpts) +} + +func (_NonceManager *NonceManagerCaller) GetInboundNonce(opts *bind.CallOpts, sourceChainSelector uint64, sender []byte) (uint64, error) { + var out []interface{} + err := _NonceManager.contract.Call(opts, &out, "getInboundNonce", sourceChainSelector, sender) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +func (_NonceManager *NonceManagerSession) GetInboundNonce(sourceChainSelector uint64, sender []byte) (uint64, error) { + return _NonceManager.Contract.GetInboundNonce(&_NonceManager.CallOpts, sourceChainSelector, sender) +} + +func (_NonceManager *NonceManagerCallerSession) GetInboundNonce(sourceChainSelector uint64, sender []byte) (uint64, error) { + return _NonceManager.Contract.GetInboundNonce(&_NonceManager.CallOpts, sourceChainSelector, sender) +} + +func (_NonceManager *NonceManagerCaller) GetOutboundNonce(opts *bind.CallOpts, destChainSelector uint64, sender common.Address) (uint64, error) { + var out []interface{} + err := _NonceManager.contract.Call(opts, &out, "getOutboundNonce", destChainSelector, sender) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +func (_NonceManager *NonceManagerSession) GetOutboundNonce(destChainSelector uint64, sender common.Address) (uint64, error) { + return _NonceManager.Contract.GetOutboundNonce(&_NonceManager.CallOpts, destChainSelector, sender) +} + +func (_NonceManager *NonceManagerCallerSession) GetOutboundNonce(destChainSelector uint64, sender common.Address) (uint64, error) { + return _NonceManager.Contract.GetOutboundNonce(&_NonceManager.CallOpts, destChainSelector, sender) +} + +func (_NonceManager *NonceManagerCaller) GetPreviousRamps(opts *bind.CallOpts, chainSelector uint64) (NonceManagerPreviousRamps, error) { + var out []interface{} + err := _NonceManager.contract.Call(opts, &out, "getPreviousRamps", chainSelector) + + if err != nil { + return *new(NonceManagerPreviousRamps), err + } + + out0 := *abi.ConvertType(out[0], new(NonceManagerPreviousRamps)).(*NonceManagerPreviousRamps) + + return out0, err + +} + +func (_NonceManager *NonceManagerSession) GetPreviousRamps(chainSelector uint64) (NonceManagerPreviousRamps, error) { + return _NonceManager.Contract.GetPreviousRamps(&_NonceManager.CallOpts, chainSelector) +} + +func (_NonceManager *NonceManagerCallerSession) GetPreviousRamps(chainSelector uint64) (NonceManagerPreviousRamps, error) { + return _NonceManager.Contract.GetPreviousRamps(&_NonceManager.CallOpts, chainSelector) +} + +func (_NonceManager *NonceManagerCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _NonceManager.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 + +} + +func (_NonceManager *NonceManagerSession) Owner() (common.Address, error) { + return _NonceManager.Contract.Owner(&_NonceManager.CallOpts) +} + +func (_NonceManager *NonceManagerCallerSession) Owner() (common.Address, error) { + return _NonceManager.Contract.Owner(&_NonceManager.CallOpts) +} + +func (_NonceManager *NonceManagerCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _NonceManager.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_NonceManager *NonceManagerSession) TypeAndVersion() (string, error) { + return _NonceManager.Contract.TypeAndVersion(&_NonceManager.CallOpts) +} + +func (_NonceManager *NonceManagerCallerSession) TypeAndVersion() (string, error) { + return _NonceManager.Contract.TypeAndVersion(&_NonceManager.CallOpts) +} + +func (_NonceManager *NonceManagerTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _NonceManager.contract.Transact(opts, "acceptOwnership") +} + +func (_NonceManager *NonceManagerSession) AcceptOwnership() (*types.Transaction, error) { + return _NonceManager.Contract.AcceptOwnership(&_NonceManager.TransactOpts) +} + +func (_NonceManager *NonceManagerTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _NonceManager.Contract.AcceptOwnership(&_NonceManager.TransactOpts) +} + +func (_NonceManager *NonceManagerTransactor) ApplyAuthorizedCallerUpdates(opts *bind.TransactOpts, authorizedCallerArgs AuthorizedCallersAuthorizedCallerArgs) (*types.Transaction, error) { + return _NonceManager.contract.Transact(opts, "applyAuthorizedCallerUpdates", authorizedCallerArgs) +} + +func (_NonceManager *NonceManagerSession) ApplyAuthorizedCallerUpdates(authorizedCallerArgs AuthorizedCallersAuthorizedCallerArgs) (*types.Transaction, error) { + return _NonceManager.Contract.ApplyAuthorizedCallerUpdates(&_NonceManager.TransactOpts, authorizedCallerArgs) +} + +func (_NonceManager *NonceManagerTransactorSession) ApplyAuthorizedCallerUpdates(authorizedCallerArgs AuthorizedCallersAuthorizedCallerArgs) (*types.Transaction, error) { + return _NonceManager.Contract.ApplyAuthorizedCallerUpdates(&_NonceManager.TransactOpts, authorizedCallerArgs) +} + +func (_NonceManager *NonceManagerTransactor) ApplyPreviousRampsUpdates(opts *bind.TransactOpts, previousRampsArgs []NonceManagerPreviousRampsArgs) (*types.Transaction, error) { + return _NonceManager.contract.Transact(opts, "applyPreviousRampsUpdates", previousRampsArgs) +} + +func (_NonceManager *NonceManagerSession) ApplyPreviousRampsUpdates(previousRampsArgs []NonceManagerPreviousRampsArgs) (*types.Transaction, error) { + return _NonceManager.Contract.ApplyPreviousRampsUpdates(&_NonceManager.TransactOpts, previousRampsArgs) +} + +func (_NonceManager *NonceManagerTransactorSession) ApplyPreviousRampsUpdates(previousRampsArgs []NonceManagerPreviousRampsArgs) (*types.Transaction, error) { + return _NonceManager.Contract.ApplyPreviousRampsUpdates(&_NonceManager.TransactOpts, previousRampsArgs) +} + +func (_NonceManager *NonceManagerTransactor) GetIncrementedOutboundNonce(opts *bind.TransactOpts, destChainSelector uint64, sender common.Address) (*types.Transaction, error) { + return _NonceManager.contract.Transact(opts, "getIncrementedOutboundNonce", destChainSelector, sender) +} + +func (_NonceManager *NonceManagerSession) GetIncrementedOutboundNonce(destChainSelector uint64, sender common.Address) (*types.Transaction, error) { + return _NonceManager.Contract.GetIncrementedOutboundNonce(&_NonceManager.TransactOpts, destChainSelector, sender) +} + +func (_NonceManager *NonceManagerTransactorSession) GetIncrementedOutboundNonce(destChainSelector uint64, sender common.Address) (*types.Transaction, error) { + return _NonceManager.Contract.GetIncrementedOutboundNonce(&_NonceManager.TransactOpts, destChainSelector, sender) +} + +func (_NonceManager *NonceManagerTransactor) IncrementInboundNonce(opts *bind.TransactOpts, sourceChainSelector uint64, expectedNonce uint64, sender []byte) (*types.Transaction, error) { + return _NonceManager.contract.Transact(opts, "incrementInboundNonce", sourceChainSelector, expectedNonce, sender) +} + +func (_NonceManager *NonceManagerSession) IncrementInboundNonce(sourceChainSelector uint64, expectedNonce uint64, sender []byte) (*types.Transaction, error) { + return _NonceManager.Contract.IncrementInboundNonce(&_NonceManager.TransactOpts, sourceChainSelector, expectedNonce, sender) +} + +func (_NonceManager *NonceManagerTransactorSession) IncrementInboundNonce(sourceChainSelector uint64, expectedNonce uint64, sender []byte) (*types.Transaction, error) { + return _NonceManager.Contract.IncrementInboundNonce(&_NonceManager.TransactOpts, sourceChainSelector, expectedNonce, sender) +} + +func (_NonceManager *NonceManagerTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _NonceManager.contract.Transact(opts, "transferOwnership", to) +} + +func (_NonceManager *NonceManagerSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _NonceManager.Contract.TransferOwnership(&_NonceManager.TransactOpts, to) +} + +func (_NonceManager *NonceManagerTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _NonceManager.Contract.TransferOwnership(&_NonceManager.TransactOpts, to) +} + +type NonceManagerAuthorizedCallerAddedIterator struct { + Event *NonceManagerAuthorizedCallerAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *NonceManagerAuthorizedCallerAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(NonceManagerAuthorizedCallerAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(NonceManagerAuthorizedCallerAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *NonceManagerAuthorizedCallerAddedIterator) Error() error { + return it.fail +} + +func (it *NonceManagerAuthorizedCallerAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type NonceManagerAuthorizedCallerAdded struct { + Caller common.Address + Raw types.Log +} + +func (_NonceManager *NonceManagerFilterer) FilterAuthorizedCallerAdded(opts *bind.FilterOpts) (*NonceManagerAuthorizedCallerAddedIterator, error) { + + logs, sub, err := _NonceManager.contract.FilterLogs(opts, "AuthorizedCallerAdded") + if err != nil { + return nil, err + } + return &NonceManagerAuthorizedCallerAddedIterator{contract: _NonceManager.contract, event: "AuthorizedCallerAdded", logs: logs, sub: sub}, nil +} + +func (_NonceManager *NonceManagerFilterer) WatchAuthorizedCallerAdded(opts *bind.WatchOpts, sink chan<- *NonceManagerAuthorizedCallerAdded) (event.Subscription, error) { + + logs, sub, err := _NonceManager.contract.WatchLogs(opts, "AuthorizedCallerAdded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(NonceManagerAuthorizedCallerAdded) + if err := _NonceManager.contract.UnpackLog(event, "AuthorizedCallerAdded", 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 +} + +func (_NonceManager *NonceManagerFilterer) ParseAuthorizedCallerAdded(log types.Log) (*NonceManagerAuthorizedCallerAdded, error) { + event := new(NonceManagerAuthorizedCallerAdded) + if err := _NonceManager.contract.UnpackLog(event, "AuthorizedCallerAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type NonceManagerAuthorizedCallerRemovedIterator struct { + Event *NonceManagerAuthorizedCallerRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *NonceManagerAuthorizedCallerRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(NonceManagerAuthorizedCallerRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(NonceManagerAuthorizedCallerRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *NonceManagerAuthorizedCallerRemovedIterator) Error() error { + return it.fail +} + +func (it *NonceManagerAuthorizedCallerRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type NonceManagerAuthorizedCallerRemoved struct { + Caller common.Address + Raw types.Log +} + +func (_NonceManager *NonceManagerFilterer) FilterAuthorizedCallerRemoved(opts *bind.FilterOpts) (*NonceManagerAuthorizedCallerRemovedIterator, error) { + + logs, sub, err := _NonceManager.contract.FilterLogs(opts, "AuthorizedCallerRemoved") + if err != nil { + return nil, err + } + return &NonceManagerAuthorizedCallerRemovedIterator{contract: _NonceManager.contract, event: "AuthorizedCallerRemoved", logs: logs, sub: sub}, nil +} + +func (_NonceManager *NonceManagerFilterer) WatchAuthorizedCallerRemoved(opts *bind.WatchOpts, sink chan<- *NonceManagerAuthorizedCallerRemoved) (event.Subscription, error) { + + logs, sub, err := _NonceManager.contract.WatchLogs(opts, "AuthorizedCallerRemoved") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(NonceManagerAuthorizedCallerRemoved) + if err := _NonceManager.contract.UnpackLog(event, "AuthorizedCallerRemoved", 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 +} + +func (_NonceManager *NonceManagerFilterer) ParseAuthorizedCallerRemoved(log types.Log) (*NonceManagerAuthorizedCallerRemoved, error) { + event := new(NonceManagerAuthorizedCallerRemoved) + if err := _NonceManager.contract.UnpackLog(event, "AuthorizedCallerRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type NonceManagerOwnershipTransferRequestedIterator struct { + Event *NonceManagerOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *NonceManagerOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(NonceManagerOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(NonceManagerOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *NonceManagerOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *NonceManagerOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type NonceManagerOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_NonceManager *NonceManagerFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*NonceManagerOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _NonceManager.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &NonceManagerOwnershipTransferRequestedIterator{contract: _NonceManager.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_NonceManager *NonceManagerFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *NonceManagerOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _NonceManager.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(NonceManagerOwnershipTransferRequested) + if err := _NonceManager.contract.UnpackLog(event, "OwnershipTransferRequested", 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 +} + +func (_NonceManager *NonceManagerFilterer) ParseOwnershipTransferRequested(log types.Log) (*NonceManagerOwnershipTransferRequested, error) { + event := new(NonceManagerOwnershipTransferRequested) + if err := _NonceManager.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type NonceManagerOwnershipTransferredIterator struct { + Event *NonceManagerOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *NonceManagerOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(NonceManagerOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(NonceManagerOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *NonceManagerOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *NonceManagerOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type NonceManagerOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_NonceManager *NonceManagerFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*NonceManagerOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _NonceManager.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &NonceManagerOwnershipTransferredIterator{contract: _NonceManager.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_NonceManager *NonceManagerFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *NonceManagerOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _NonceManager.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(NonceManagerOwnershipTransferred) + if err := _NonceManager.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 +} + +func (_NonceManager *NonceManagerFilterer) ParseOwnershipTransferred(log types.Log) (*NonceManagerOwnershipTransferred, error) { + event := new(NonceManagerOwnershipTransferred) + if err := _NonceManager.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type NonceManagerPreviousRampsUpdatedIterator struct { + Event *NonceManagerPreviousRampsUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *NonceManagerPreviousRampsUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(NonceManagerPreviousRampsUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(NonceManagerPreviousRampsUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *NonceManagerPreviousRampsUpdatedIterator) Error() error { + return it.fail +} + +func (it *NonceManagerPreviousRampsUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type NonceManagerPreviousRampsUpdated struct { + RemoteChainSelector uint64 + PrevRamp NonceManagerPreviousRamps + Raw types.Log +} + +func (_NonceManager *NonceManagerFilterer) FilterPreviousRampsUpdated(opts *bind.FilterOpts, remoteChainSelector []uint64) (*NonceManagerPreviousRampsUpdatedIterator, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _NonceManager.contract.FilterLogs(opts, "PreviousRampsUpdated", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return &NonceManagerPreviousRampsUpdatedIterator{contract: _NonceManager.contract, event: "PreviousRampsUpdated", logs: logs, sub: sub}, nil +} + +func (_NonceManager *NonceManagerFilterer) WatchPreviousRampsUpdated(opts *bind.WatchOpts, sink chan<- *NonceManagerPreviousRampsUpdated, remoteChainSelector []uint64) (event.Subscription, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _NonceManager.contract.WatchLogs(opts, "PreviousRampsUpdated", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(NonceManagerPreviousRampsUpdated) + if err := _NonceManager.contract.UnpackLog(event, "PreviousRampsUpdated", 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 +} + +func (_NonceManager *NonceManagerFilterer) ParsePreviousRampsUpdated(log types.Log) (*NonceManagerPreviousRampsUpdated, error) { + event := new(NonceManagerPreviousRampsUpdated) + if err := _NonceManager.contract.UnpackLog(event, "PreviousRampsUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type NonceManagerSkippedIncorrectNonceIterator struct { + Event *NonceManagerSkippedIncorrectNonce + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *NonceManagerSkippedIncorrectNonceIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(NonceManagerSkippedIncorrectNonce) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(NonceManagerSkippedIncorrectNonce) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *NonceManagerSkippedIncorrectNonceIterator) Error() error { + return it.fail +} + +func (it *NonceManagerSkippedIncorrectNonceIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type NonceManagerSkippedIncorrectNonce struct { + SourceChainSelector uint64 + Nonce uint64 + Sender []byte + Raw types.Log +} + +func (_NonceManager *NonceManagerFilterer) FilterSkippedIncorrectNonce(opts *bind.FilterOpts) (*NonceManagerSkippedIncorrectNonceIterator, error) { + + logs, sub, err := _NonceManager.contract.FilterLogs(opts, "SkippedIncorrectNonce") + if err != nil { + return nil, err + } + return &NonceManagerSkippedIncorrectNonceIterator{contract: _NonceManager.contract, event: "SkippedIncorrectNonce", logs: logs, sub: sub}, nil +} + +func (_NonceManager *NonceManagerFilterer) WatchSkippedIncorrectNonce(opts *bind.WatchOpts, sink chan<- *NonceManagerSkippedIncorrectNonce) (event.Subscription, error) { + + logs, sub, err := _NonceManager.contract.WatchLogs(opts, "SkippedIncorrectNonce") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(NonceManagerSkippedIncorrectNonce) + if err := _NonceManager.contract.UnpackLog(event, "SkippedIncorrectNonce", 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 +} + +func (_NonceManager *NonceManagerFilterer) ParseSkippedIncorrectNonce(log types.Log) (*NonceManagerSkippedIncorrectNonce, error) { + event := new(NonceManagerSkippedIncorrectNonce) + if err := _NonceManager.contract.UnpackLog(event, "SkippedIncorrectNonce", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (_NonceManager *NonceManager) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _NonceManager.abi.Events["AuthorizedCallerAdded"].ID: + return _NonceManager.ParseAuthorizedCallerAdded(log) + case _NonceManager.abi.Events["AuthorizedCallerRemoved"].ID: + return _NonceManager.ParseAuthorizedCallerRemoved(log) + case _NonceManager.abi.Events["OwnershipTransferRequested"].ID: + return _NonceManager.ParseOwnershipTransferRequested(log) + case _NonceManager.abi.Events["OwnershipTransferred"].ID: + return _NonceManager.ParseOwnershipTransferred(log) + case _NonceManager.abi.Events["PreviousRampsUpdated"].ID: + return _NonceManager.ParsePreviousRampsUpdated(log) + case _NonceManager.abi.Events["SkippedIncorrectNonce"].ID: + return _NonceManager.ParseSkippedIncorrectNonce(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (NonceManagerAuthorizedCallerAdded) Topic() common.Hash { + return common.HexToHash("0xeb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef") +} + +func (NonceManagerAuthorizedCallerRemoved) Topic() common.Hash { + return common.HexToHash("0xc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda77580") +} + +func (NonceManagerOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (NonceManagerOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (NonceManagerPreviousRampsUpdated) Topic() common.Hash { + return common.HexToHash("0xa2e43edcbc4fd175ae4bebbe3fd6139871ed1f1783cd4a1ace59b90d302c3319") +} + +func (NonceManagerSkippedIncorrectNonce) Topic() common.Hash { + return common.HexToHash("0x606ff8179e5e3c059b82df931acc496b7b6053e8879042f8267f930e0595f69f") +} + +func (_NonceManager *NonceManager) Address() common.Address { + return _NonceManager.address +} + +type NonceManagerInterface interface { + GetAllAuthorizedCallers(opts *bind.CallOpts) ([]common.Address, error) + + GetInboundNonce(opts *bind.CallOpts, sourceChainSelector uint64, sender []byte) (uint64, error) + + GetOutboundNonce(opts *bind.CallOpts, destChainSelector uint64, sender common.Address) (uint64, error) + + GetPreviousRamps(opts *bind.CallOpts, chainSelector uint64) (NonceManagerPreviousRamps, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + ApplyAuthorizedCallerUpdates(opts *bind.TransactOpts, authorizedCallerArgs AuthorizedCallersAuthorizedCallerArgs) (*types.Transaction, error) + + ApplyPreviousRampsUpdates(opts *bind.TransactOpts, previousRampsArgs []NonceManagerPreviousRampsArgs) (*types.Transaction, error) + + GetIncrementedOutboundNonce(opts *bind.TransactOpts, destChainSelector uint64, sender common.Address) (*types.Transaction, error) + + IncrementInboundNonce(opts *bind.TransactOpts, sourceChainSelector uint64, expectedNonce uint64, sender []byte) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + FilterAuthorizedCallerAdded(opts *bind.FilterOpts) (*NonceManagerAuthorizedCallerAddedIterator, error) + + WatchAuthorizedCallerAdded(opts *bind.WatchOpts, sink chan<- *NonceManagerAuthorizedCallerAdded) (event.Subscription, error) + + ParseAuthorizedCallerAdded(log types.Log) (*NonceManagerAuthorizedCallerAdded, error) + + FilterAuthorizedCallerRemoved(opts *bind.FilterOpts) (*NonceManagerAuthorizedCallerRemovedIterator, error) + + WatchAuthorizedCallerRemoved(opts *bind.WatchOpts, sink chan<- *NonceManagerAuthorizedCallerRemoved) (event.Subscription, error) + + ParseAuthorizedCallerRemoved(log types.Log) (*NonceManagerAuthorizedCallerRemoved, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*NonceManagerOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *NonceManagerOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*NonceManagerOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*NonceManagerOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *NonceManagerOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*NonceManagerOwnershipTransferred, error) + + FilterPreviousRampsUpdated(opts *bind.FilterOpts, remoteChainSelector []uint64) (*NonceManagerPreviousRampsUpdatedIterator, error) + + WatchPreviousRampsUpdated(opts *bind.WatchOpts, sink chan<- *NonceManagerPreviousRampsUpdated, remoteChainSelector []uint64) (event.Subscription, error) + + ParsePreviousRampsUpdated(log types.Log) (*NonceManagerPreviousRampsUpdated, error) + + FilterSkippedIncorrectNonce(opts *bind.FilterOpts) (*NonceManagerSkippedIncorrectNonceIterator, error) + + WatchSkippedIncorrectNonce(opts *bind.WatchOpts, sink chan<- *NonceManagerSkippedIncorrectNonce) (event.Subscription, error) + + ParseSkippedIncorrectNonce(log types.Log) (*NonceManagerSkippedIncorrectNonce, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var NonceManagerZKBin string = ("0x00020000000000020009000000000002000000000302001900010000000103550000008004000039000000400040043f0000006002100270000001f1022001970000000100300190000000400000c13d000000040020008c0000005f0000413d000000000301043b000000e003300270000002040030009c000000610000213d0000020c0030009c000000990000213d000002100030009c000000ed0000613d000002110030009c000000fd0000613d000002120030009c0000005f0000c13d000000240020008c0000005f0000413d0000000002000416000000000002004b0000005f0000c13d0000000401100370000000000101043b000001f40010009c0000005f0000213d000000c002000039000000400020043f000000800000043f000000a00000043f000000000010043f0000000401000039000000200010043f0000004002000039000000000100001907c007a10000040f000900000001001d000000c00100003907c005d80000040f0000000902000029000000000102041a000001f701100197000000c00010043f0000000102200039000000000202041a000001f702200197000000e00020043f000000400200043d0000000001120436000000e00300043d000001f7033001970000000000310435000001f10020009c000001f10200804100000040012002100000022c011001c7000007c10001042e0000000003000416000000000003004b0000005f0000c13d0000001f03200039000001f2033001970000008003300039000000400030043f0000001f0520018f000001f3062001980000008003600039000000500000613d000000000701034f000000007807043c0000000004840436000000000034004b0000004c0000c13d000000000005004b0000005d0000613d000000000161034f0000000304500210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000000200020008c000000800000813d0000000001000019000007c200010430000002050030009c000000a80000213d000002090030009c0000010a0000613d0000020a0030009c000001d60000613d0000020b0030009c0000005f0000c13d000000440020008c0000005f0000413d0000000003000416000000000003004b0000005f0000c13d0000000403100370000000000303043b000900000003001d000001f40030009c0000005f0000213d0000002401100370000000000101043b000001f40010009c0000005f0000213d000000040110003907c005e30000040f0000000003010019000000000402001900000009010000290000000002030019000000000304001907c006ae0000040f000001e50000013d000000800100043d000001f40010009c0000005f0000213d0000001f03100039000000000023004b0000000004000019000001f504008041000001f503300197000000000003004b0000000005000019000001f505004041000001f50030009c000000000504c019000000000005004b0000005f0000c13d00000080031000390000000003030433000001f40030009c000000c40000a13d0000022501000041000000000010043f0000004101000039000000040010043f0000021c01000041000007c2000104300000020d0030009c000001ed0000613d0000020e0030009c000002060000613d0000020f0030009c0000005f0000c13d0000000001000416000000000001004b0000005f0000c13d0000000101000039000000000101041a000001f701100197000000800010043f0000022701000041000007c10001042e000002060030009c0000027f0000613d000002070030009c000002bc0000613d000002080030009c0000005f0000c13d000000240020008c0000005f0000413d0000000002000416000000000002004b0000005f0000c13d0000000401100370000000000101043b000001f70010009c0000005f0000213d0000000102000039000000000202041a000001f7022001970000000005000411000000000025004b000003160000c13d000001f706100197000000000056004b000003380000c13d0000021501000041000000800010043f0000021601000041000007c20001043000000005043002100000003f05400039000001f605500197000000400600043d00000000055600190000000007060019000000000065004b00000000060000390000000106004039000001f40050009c000000930000213d0000000100600190000000930000c13d0000008006200039000000400050043f0000000000370435000000a0011000390000000002140019000000000062004b0000005f0000213d000000000003004b000000e20000613d00000000030700190000000014010434000001f70040009c0000005f0000213d00000020033000390000000000430435000000000021004b000000db0000413d000000400400043d0000000001000411000000000001004b0000031a0000c13d00000202010000410000000000140435000001f10040009c000001f104008041000000400140021000000203011001c7000007c2000104300000000001000416000000000001004b0000005f0000c13d000000c001000039000000400010043f0000001601000039000000800010043f0000022f02000041000000a00020043f0000002003000039000000c00030043f000000e00010043f000001000020043f000001160000043f0000023001000041000007c10001042e0000000001000416000000000001004b0000005f0000c13d0000000202000039000000000102041a000000800010043f000000000020043f0000002002000039000000000001004b000002ea0000c13d000000a0010000390000000004020019000002f90000013d000000240020008c0000005f0000413d0000000003000416000000000003004b0000005f0000c13d0000000403100370000000000303043b000001f40030009c0000005f0000213d0000000004320049000002220040009c0000005f0000213d000000440040008c0000005f0000413d000000c005000039000000400050043f0000000404300039000000000641034f000000000606043b000001f40060009c0000005f0000213d00000000063600190000002307600039000000000027004b0000005f0000813d0000000407600039000000000771034f000000000807043b000001f40080009c000000930000213d00000005078002100000003f09700039000001f609900197000002230090009c000000930000213d000000c009900039000000400090043f000000c00080043f00000024066000390000000007670019000000000027004b0000005f0000213d000000000008004b0000013f0000613d000000000861034f000000000808043b000001f70080009c0000005f0000213d000000200550003900000000008504350000002006600039000000000076004b000001360000413d000000c005000039000000800050043f0000002004400039000000000441034f000000000404043b000001f40040009c0000005f0000213d00000000033400190000002304300039000000000024004b0000000005000019000001f505008041000001f504400197000000000004004b0000000006000019000001f506004041000001f50040009c000000000605c019000000000006004b0000005f0000c13d0000000404300039000000000441034f000000000404043b000001f40040009c000000930000213d00000005054002100000003f06500039000001f606600197000000400700043d0000000006670019000700000007001d000000000076004b00000000070000390000000107004039000001f40060009c000000930000213d0000000100700190000000930000c13d000000400060043f00000007060000290000000004460436000600000004001d00000024033000390000000004350019000000000024004b0000005f0000213d000000000043004b000001790000813d0000000702000029000000000531034f000000000505043b000001f70050009c0000005f0000213d000000200220003900000000005204350000002003300039000000000043004b000001700000413d0000000701000029000000a00010043f0000000101000039000000000101041a000001f7011001970000000002000411000000000012004b0000047e0000c13d00000007010000290000000001010433000000000001004b000004810000c13d000000800100043d000600000001001d0000000021010434000700000002001d000000000001004b000003470000613d000900000000001d0000000901000029000000050110021000000007011000290000000001010433000001f701100198000004730000613d000800000001001d000000000010043f0000000301000039000000200010043f0000000001000414000001f10010009c000001f101008041000000c001100210000001fb011001c7000080100200003907c007bb0000040f00000001002001900000005f0000613d000000000101043b000000000101041a000000000001004b000001bd0000c13d0000000203000039000000000103041a000001f40010009c000000930000213d0000000102100039000000000023041b000001ff0110009a0000000802000029000000000021041b000000000103041a000500000001001d000000000020043f0000000301000039000000200010043f0000000001000414000001f10010009c000001f101008041000000c001100210000001fb011001c7000080100200003907c007bb0000040f00000001002001900000005f0000613d000000000101043b0000000502000029000000000021041b000000400100043d00000008020000290000000000210435000001f10010009c000001f10100804100000040011002100000000002000414000001f10020009c000001f102008041000000c002200210000000000112019f000001fd011001c70000800d020000390000000103000039000002000400004107c007b60000040f00000001002001900000005f0000613d0000000902000029000900010020003d00000006010000290000000001010433000000090010006b0000018c0000413d000003470000013d000000440020008c0000005f0000413d0000000002000416000000000002004b0000005f0000c13d0000000402100370000000000302043b000001f40030009c0000005f0000213d0000002401100370000000000201043b000001f70020009c0000005f0000213d000000000103001907c006080000040f000001f401100197000000400200043d0000000000120435000001f10020009c000001f102008041000000400120021000000218011001c7000007c10001042e0000000001000416000000000001004b0000005f0000c13d000000000100041a000001f7021001970000000006000411000000000026004b000003120000c13d0000000102000039000000000302041a000001f804300197000000000464019f000000000042041b000001f801100197000000000010041b0000000001000414000001f705300197000001f10010009c000001f101008041000000c00110021000000213011001c70000800d0200003900000003030000390000022b04000041000003440000013d000000240020008c0000005f0000413d0000000003000416000000000003004b0000005f0000c13d0000000403100370000000000303043b000001f40030009c0000005f0000213d0000002304300039000000000024004b0000005f0000813d0000000404300039000000000141034f000000000101043b000700000001001d000001f40010009c0000005f0000213d00000007010000290000000701100210000600240030003d0000000601100029000000000021004b0000005f0000213d0000000101000039000000000101041a000001f7011001970000000002000411000000000012004b000003160000c13d000000070000006b000003470000613d000900000000001d0000000901000029000000070110021000000006031000290000000101300367000000000101043b000001f40010009c0000005f0000213d000000000010043f0000000401000039000000200010043f0000000001000414000001f10010009c000001f101008041000000c001100210000001fb011001c70000801002000039000800000003001d07c007bb0000040f000000080700002900000001002001900000005f0000613d000000000201043b000000000402041a000001f7004001980000000101200039000002440000c13d000000000301041a000001f7003001980000027d0000613d00000020057000390000000103000367000000000553034f000000000505043b000000000005004b0000000006000039000000010600c039000000000065004b0000005f0000c13d000000000005004b000004760000613d0000004005700039000000000653034f000000000606043b000001f70060009c0000005f0000213d000001f804400197000000000446019f000000000042041b0000002002500039000000000223034f000000000202043b000001f70020009c0000005f0000213d000000000401041a000001f804400197000000000424019f000000000041041b000000000173034f000000000501043b000001f40050009c0000005f0000213d000000400100043d000000200310003900000000002304350000000000610435000001f10010009c000001f10100804100000040011002100000000002000414000001f10020009c000001f102008041000000c002200210000000000112019f000001fb011001c70000800d020000390000000203000039000002290400004107c007b60000040f00000001002001900000005f0000613d00000009020000290000000102200039000900000002001d000000070020006c000002270000413d000003470000013d00000001030003670000024f0000013d000000640020008c0000005f0000413d0000000003000416000000000003004b0000005f0000c13d0000000403100370000000000303043b000900000003001d000001f40030009c0000005f0000213d0000002403100370000000000303043b000800000003001d000001f40030009c0000005f0000213d0000004403100370000000000303043b000001f40030009c0000005f0000213d0000002304300039000000000024004b0000005f0000813d000600040030003d0000000601100360000000000101043b000700000001001d000001f40010009c0000005f0000213d0000002403300039000500000003001d0000000701300029000000000021004b0000005f0000213d0000000001000411000000000010043f0000000301000039000000200010043f0000000001000414000001f10010009c000001f101008041000000c001100210000001fb011001c7000080100200003907c007bb0000040f00000001002001900000005f0000613d000000000101043b000000000101041a000000000001004b000004030000c13d000000400100043d00000221020000410000000000210435000000040210003900000000030004110000000000320435000001f10010009c000001f10100804100000040011002100000021c011001c7000007c200010430000000440020008c0000005f0000413d0000000002000416000000000002004b0000005f0000c13d0000000402100370000000000202043b000900000002001d000001f40020009c0000005f0000213d0000002401100370000000000101043b000800000001001d000001f70010009c0000005f0000213d07c007820000040f0000000901000029000000080200002907c006080000040f07c005fd0000040f0000000902000029000000000020043f0000000502000039000000200020043f000900000001001d0000004002000039000000000100001907c007a10000040f0000000802000029000000000020043f000000200010043f0000000001000019000000400200003907c007a10000040f000000000201041a00000217022001970000000903000029000000000232019f000000000021041b000000400100043d0000000000310435000001f10010009c000001f101008041000000400110021000000218011001c7000007c10001042e000000a0050000390000022d0300004100000000040000190000000006050019000000000503041a000000000556043600000001033000390000000104400039000000000014004b000002ed0000413d000000410160008a00000231041001970000022e0040009c000000930000213d0000008001400039000000400010043f0000000000210435000000a002400039000000800300043d0000000000320435000000c002400039000000000003004b000003090000613d000000a00400003900000000050000190000000046040434000001f70660019700000000026204360000000105500039000000000035004b000003030000413d0000000002120049000001f10020009c000001f1020080410000006002200210000001f10010009c000001f1010080410000004001100210000000000112019f000007c10001042e0000022a01000041000000800010043f0000021601000041000007c2000104300000022401000041000000800010043f0000021601000041000007c2000104300000000102000039000000000302041a000001f803300197000000000113019f000000000012041b000001f90040009c000000930000213d0000002001400039000700000001001d000000400010043f0000000000040435000000400200043d000001fa0020009c000000930000213d0000004001200039000000400010043f0000002001200039000000000041043500000000007204350000000001040433000000000001004b000003490000c13d0000000001070433000000000001004b000003b60000c13d0000002001000039000001000010044300000120000004430000020101000041000007c10001042e000000000100041a000001f801100197000000000161019f000000000010041b0000000001000414000001f10010009c000001f101008041000000c00110021000000213011001c70000800d020000390000000303000039000002140400004107c007b60000040f00000001002001900000005f0000613d0000000001000019000007c10001042e000400000002001d000600000004001d0000000002000019000003530000013d0000000802000029000000010220003900000006010000290000000001010433000000000012004b000003b10000813d000800000002001d000000050120021000000007011000290000000001010433000001f701100197000900000001001d000000000010043f0000000301000039000000200010043f0000000001000414000001f10010009c000001f101008041000000c001100210000001fb011001c7000080100200003907c007bb0000040f00000001002001900000005f0000613d000000000101043b000000000301041a000000000003004b0000034d0000613d0000000201000039000000000201041a000000000002004b0000052f0000613d000000010130008a000000000032004b0000038b0000613d000000000012004b000004e70000a13d000001fc0130009a000001fc0220009a000000000202041a000000000021041b000000000020043f0000000301000039000000200010043f0000000001000414000001f10010009c000001f101008041000000c001100210000001fb011001c70000801002000039000500000003001d07c007bb0000040f000000050300002900000001002001900000005f0000613d000000000101043b000000000031041b0000000201000039000000000301041a000000000003004b000004ed0000613d000000010130008a000001fc0230009a000000000002041b0000000202000039000000000012041b0000000901000029000000000010043f0000000301000039000000200010043f0000000001000414000001f10010009c000001f101008041000000c001100210000001fb011001c7000080100200003907c007bb0000040f00000001002001900000005f0000613d000000000101043b000000000001041b000000400100043d00000009020000290000000000210435000001f10010009c000001f10100804100000040011002100000000002000414000001f10020009c000001f102008041000000c002200210000000000112019f000001fd011001c70000800d020000390000000103000039000001fe0400004107c007b60000040f00000001002001900000034d0000c13d0000005f0000013d000000040100002900000000070104330000000001070433000000000001004b000003330000613d000700200070003d0000000002000019000600000007001d000800000002001d000000050120021000000007011000290000000001010433000001f701100198000004730000613d000900000001001d000000000010043f0000000301000039000000200010043f0000000001000414000001f10010009c000001f101008041000000c001100210000001fb011001c7000080100200003907c007bb0000040f00000001002001900000005f0000613d000000000101043b000000000101041a000000000001004b000003ea0000c13d0000000203000039000000000103041a000001f40010009c000000930000213d0000000102100039000000000023041b000001ff0110009a0000000902000029000000000021041b000000000103041a000500000001001d000000000020043f0000000301000039000000200010043f0000000001000414000001f10010009c000001f101008041000000c001100210000001fb011001c7000080100200003907c007bb0000040f00000001002001900000005f0000613d000000000101043b0000000502000029000000000021041b000000400100043d00000009020000290000000000210435000001f10010009c000001f10100804100000040011002100000000002000414000001f10020009c000001f102008041000000c002200210000000000112019f000001fd011001c70000800d020000390000000103000039000002000400004107c007b60000040f00000001002001900000005f0000613d0000000802000029000000010220003900000006070000290000000001070433000000000012004b000003b90000413d000003330000013d0000000901000029000000000010043f0000000601000039000000200010043f0000000001000414000001f10010009c000001f101008041000000c001100210000001fb011001c7000080100200003907c007bb0000040f00000001002001900000005f0000613d000000070200002900000231032001980004001f00200193000000000201043b000000400100043d000300000003001d000000000331001900000006040000290000002004400039000600000004001d0000000104400367000004220000613d000000000504034f0000000006010019000000005705043c0000000006760436000000000036004b0000041e0000c13d000000040000006b000004300000613d000000030440036000000004050000290000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000430435000000070400002900000000034100190000000000230435000001f10010009c000001f10100804100000040011002100000000002000414000001f10020009c000001f102008041000000c002200210000000000112019f000002190040009c0000021902000041000000000204401900000060022002100002021a002000a200000002011001af00000213011001c7000080100200003907c007bb0000040f00000001002001900000005f0000613d000000000101043b000000000101041a000001f4011001980000052d0000c13d0000000901000029000000000010043f0000000401000039000000200010043f0000000001000414000001f10010009c000001f101008041000000c001100210000001fb011001c7000080100200003907c007bb0000040f00000001002001900000005f0000613d000000000101043b0000000101100039000000000101041a000001f7021001980000000001000019000005350000613d0000000701000029000000200010008c0000005f0000413d00000006010000290000000101100367000000000101043b000001f70010009c0000005f0000213d000000400400043d0000021b030000410000000000340435000100000004001d000000040340003900000000001304350000000001000414000000040020008c000004f30000c13d0000000003000031000000200030008c000000200400003900000000040340190000051c0000013d000000400100043d0000022602000041000004780000013d000000400100043d00000228020000410000000000210435000001f10010009c000001f101008041000000400110021000000203011001c7000007c200010430000000400100043d0000022402000041000004780000013d0000000002000019000004890000013d0000000802000029000000010220003900000007010000290000000001010433000000000012004b000001850000813d000800000002001d000000050120021000000006011000290000000001010433000001f701100197000900000001001d000000000010043f0000000301000039000000200010043f0000000001000414000001f10010009c000001f101008041000000c001100210000001fb011001c7000080100200003907c007bb0000040f00000001002001900000005f0000613d000000000101043b000000000301041a000000000003004b000004830000613d0000000201000039000000000201041a000000000002004b0000052f0000613d000000010130008a000000000032004b000004c10000613d000000000012004b000004e70000a13d000001fc0130009a000001fc0220009a000000000202041a000000000021041b000000000020043f0000000301000039000000200010043f0000000001000414000001f10010009c000001f101008041000000c001100210000001fb011001c70000801002000039000500000003001d07c007bb0000040f000000050300002900000001002001900000005f0000613d000000000101043b000000000031041b0000000201000039000000000301041a000000000003004b000004ed0000613d000000010130008a000001fc0230009a000000000002041b0000000202000039000000000012041b0000000901000029000000000010043f0000000301000039000000200010043f0000000001000414000001f10010009c000001f101008041000000c001100210000001fb011001c7000080100200003907c007bb0000040f00000001002001900000005f0000613d000000000101043b000000000001041b000000400100043d00000009020000290000000000210435000001f10010009c000001f10100804100000040011002100000000002000414000001f10020009c000001f102008041000000c002200210000000000112019f000001fd011001c70000800d020000390000000103000039000001fe0400004107c007b60000040f0000000100200190000004830000c13d0000005f0000013d0000022501000041000000000010043f0000003201000039000000040010043f0000021c01000041000007c2000104300000022501000041000000000010043f0000003101000039000000040010043f0000021c01000041000007c2000104300000000103000029000001f10030009c000001f1030080410000004003300210000001f10010009c000001f101008041000000c001100210000000000131019f0000021c011001c707c007bb0000040f0000006003100270000001f103300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000001057000290000050c0000613d000000000801034f0000000109000029000000008a08043c0000000009a90436000000000059004b000005080000c13d000000000006004b000005190000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0000000100200190000005ba0000613d0000001f01400039000000600210018f0000000101200029000000000021004b00000000020000390000000102004039000001f40010009c000000930000213d0000000100200190000000930000c13d000000400010043f000000200030008c0000005f0000413d00000001010000290000000001010433000001f40010009c0000005f0000213d000001f40010009c000005350000c13d0000022501000041000000000010043f0000001101000039000000040010043f0000021c01000041000007c2000104300000000102100039000100000002001d000000080020006c000005770000c13d0000000901000029000000000010043f0000000601000039000000200010043f0000000001000414000001f10010009c000001f101008041000000c001100210000001fb011001c7000080100200003907c007bb0000040f00000001002001900000005f0000613d000000400200043d000000030320002900000006040000290000000104400367000000000101043b000000030000006b000005530000613d000000000504034f0000000006020019000000005705043c0000000006760436000000000036004b0000054f0000c13d000000040000006b000005610000613d000000030440036000000004050000290000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f000000000043043500000007032000290000000000130435000001f10020009c000001f10200804100000040012002100000000002000414000001f10020009c000001f102008041000000c002200210000000000112019f00000002011001af00000213011001c7000080100200003907c007bb0000040f00000001002001900000005f0000613d000000000101043b000000000201041a000002170220019700000008022001af000000000021041b000005b50000013d000000400100043d000000600210003900000007030000290000000000320435000000400210003900000060030000390000000000320435000000200210003900000008030000290000000000320435000000090200002900000000002104350000008002100039000000030320002900000005040000290000000104400367000000030000006b0000058f0000613d000000000504034f0000000006020019000000005705043c0000000006760436000000000036004b0000058b0000c13d000000040000006b0000059d0000613d000000030440036000000004050000290000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f000000000043043500000007040000290000001f0340003900000231033001970000000002420019000000000002043500000060023002100000021d0220009a0000021e0030009c0000021f02008041000001f10010009c000001f1010080410000004001100210000000000121019f0000000002000414000001f10020009c000001f102008041000000c00220021000000000012100190000800d020000390000000103000039000002200400004107c007b60000040f00000001002001900000005f0000613d0000000102000029000000080020006c00000000010000390000000101006039000001e60000013d0000001f0530018f000001f306300198000000400200043d0000000004620019000005c50000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000005c10000c13d000000000005004b000005d20000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000001f10020009c000001f1020080410000004002200210000000000112019f000007c200010430000002320010009c000005dd0000813d0000004001100039000000400010043f000000000001042d0000022501000041000000000010043f0000004101000039000000040010043f0000021c01000041000007c2000104300000001f03100039000000000023004b0000000004000019000001f504004041000001f505200197000001f503300197000000000653013f000000000053004b0000000003000019000001f503002041000001f50060009c000000000304c019000000000003004b000005fb0000613d0000000103100367000000000303043b000001f40030009c000005fb0000213d00000020011000390000000004310019000000000024004b000005fb0000213d0000000002030019000000000001042d0000000001000019000007c200010430000001f401100197000001f40010009c000006020000613d0000000101100039000000000001042d0000022501000041000000000010043f0000001101000039000000040010043f0000021c01000041000007c2000104300002000000000002000200000002001d000001f401100197000100000001001d000000000010043f0000000501000039000000200010043f0000000001000414000001f10010009c000001f101008041000000c001100210000001fb011001c7000080100200003907c007bb0000040f0000000100200190000006880000613d000000000101043b0000000202000029000001f702200197000200000002001d000000000020043f000000200010043f0000000001000414000001f10010009c000001f101008041000000c001100210000001fb011001c7000080100200003907c007bb0000040f0000000100200190000006880000613d000000000101043b000000000101041a000001f4011001980000062c0000613d000000000001042d0000000101000029000000000010043f0000000401000039000000200010043f0000000001000414000001f10010009c000001f101008041000000c001100210000001fb011001c7000080100200003907c007bb0000040f0000000100200190000006880000613d000000000101043b000000000101041a000001f7021001980000064b0000613d000000400b00043d0000021b0100004100000000001b04350000000401b00039000000020300002900000000003104350000000001000414000000040020008c0000064d0000c13d0000000003000031000000200030008c00000020040000390000000004034019000006780000013d0000000001000019000000000001042d000001f100b0009c000001f10300004100000000030b40190000004003300210000001f10010009c000001f101008041000000c001100210000000000131019f0000021c011001c700020000000b001d07c007bb0000040f000000020b0000290000006003100270000001f103300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000006680000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000006640000c13d000000000006004b000006750000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0000000100200190000006900000613d0000001f01400039000000600210018f0000000001b20019000000000021004b00000000020000390000000102004039000001f40010009c0000068a0000213d00000001002001900000068a0000c13d000000400010043f000000200030008c000006880000413d00000000010b0433000001f40010009c0000062b0000a13d0000000001000019000007c2000104300000022501000041000000000010043f0000004101000039000000040010043f0000021c01000041000007c2000104300000001f0530018f000001f306300198000000400200043d00000000046200190000069b0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000006970000c13d000000000005004b000006a80000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000001f10020009c000001f1020080410000004002200210000000000121019f000007c2000104300003000000000002000300000003001d000200000002001d000001f401100197000100000001001d000000000010043f0000000601000039000000200010043f0000000001000414000001f10010009c000001f101008041000000c001100210000001fb011001c7000080100200003907c007bb0000040f00000001002001900000075c0000613d000000030300002900000231043001980000001f0530018f00000002020000290000000106200367000000000201043b000000400100043d0000000003410019000006ce0000613d000000000706034f0000000008010019000000007907043c0000000008980436000000000038004b000006ca0000c13d000000000005004b000006db0000613d000000000446034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000430435000000030400002900000000034100190000000000230435000001f10010009c000001f10100804100000040011002100000002002400039000001f10020009c000001f1020080410000006002200210000000000121019f0000000002000414000001f10020009c000001f102008041000000c002200210000000000112019f00000213011001c7000080100200003907c007bb0000040f00000001002001900000075c0000613d000000000101043b000000000101041a000001f401100198000006f50000613d000000000001042d0000000101000029000000000010043f0000000401000039000000200010043f0000000001000414000001f10010009c000001f101008041000000c001100210000001fb011001c7000080100200003907c007bb0000040f00000001002001900000075c0000613d000000000101043b0000000101100039000000000101041a000001f7021001980000071f0000613d0000000301000029000002220010009c0000075c0000213d0000000301000029000000200010008c0000075c0000413d00000002010000290000000101100367000000000101043b000001f70010009c0000075c0000213d000000400b00043d0000021b0300004100000000003b04350000000403b0003900000000001304350000000001000414000000040020008c000007210000c13d0000000003000031000000200030008c000000200400003900000000040340190000074c0000013d0000000001000019000000000001042d000001f100b0009c000001f10300004100000000030b40190000004003300210000001f10010009c000001f101008041000000c001100210000000000131019f0000021c011001c700030000000b001d07c007bb0000040f000000030b0000290000006003100270000001f103300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b00190000073c0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000007380000c13d000000000006004b000007490000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0000000100200190000007640000613d0000001f01400039000000600210018f0000000001b20019000000000021004b00000000020000390000000102004039000001f40010009c0000075e0000213d00000001002001900000075e0000c13d000000400010043f000000200030008c0000075c0000413d00000000010b0433000001f40010009c000006f40000a13d0000000001000019000007c2000104300000022501000041000000000010043f0000004101000039000000040010043f0000021c01000041000007c2000104300000001f0530018f000001f306300198000000400200043d00000000046200190000076f0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000076b0000c13d000000000005004b0000077c0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000001f10020009c000001f1020080410000004002200210000000000121019f000007c2000104300000000001000411000000000010043f0000000301000039000000200010043f0000000001000414000001f10010009c000001f101008041000000c001100210000001fb011001c7000080100200003907c007bb0000040f0000000100200190000007940000613d000000000101043b000000000101041a000000000001004b000007960000613d000000000001042d0000000001000019000007c200010430000000400100043d00000221020000410000000000210435000000040210003900000000030004110000000000320435000001f10010009c000001f10100804100000040011002100000021c011001c7000007c200010430000001f10010009c000001f1010080410000004001100210000001f10020009c000001f1020080410000006002200210000000000112019f0000000002000414000001f10020009c000001f102008041000000c002200210000000000112019f00000213011001c7000080100200003907c007bb0000040f0000000100200190000007b40000613d000000000101043b000000000001042d0000000001000019000007c200010430000007b9002104210000000102000039000000000001042d0000000002000019000000000001042d000007be002104230000000102000039000000000001042d0000000002000019000000000001042d000007c000000432000007c10001042e000007c200010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000000000000000000000000000ffffffffffffffff80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffdf000000000000000000000000000000000000000000000000ffffffffffffffbf0200000000000000000000000000000000000040000000000000000000000000bfa87805ed57dc1f0d489ce33be4c4577d74ccde357eeeee058a32c55c44a5330200000000000000000000000000000000000020000000000000000000000000c3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda77580bfa87805ed57dc1f0d489ce33be4c4577d74ccde357eeeee058a32c55c44a532eb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef00000002000000000000000000000000000000400000010000000000000000009b15e16f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000091a2749900000000000000000000000000000000000000000000000000000000e0e03cad00000000000000000000000000000000000000000000000000000000e0e03cae00000000000000000000000000000000000000000000000000000000ea458c0c00000000000000000000000000000000000000000000000000000000f2fde38b0000000000000000000000000000000000000000000000000000000091a2749a00000000000000000000000000000000000000000000000000000000bf18402a00000000000000000000000000000000000000000000000000000000c92236250000000000000000000000000000000000000000000000000000000079ba50960000000000000000000000000000000000000000000000000000000079ba5097000000000000000000000000000000000000000000000000000000007a75a094000000000000000000000000000000000000000000000000000000008da5cb5b00000000000000000000000000000000000000000000000000000000181f5a77000000000000000000000000000000000000000000000000000000002451a62700000000000000000000000000000000000000000000000000000000294b56300200000000000000000000000000000000000000000000000000000000000000ed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278dad89dca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000800000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffdfffffffffffffffffffffffffffffffffffffffe0000000000000000000000000856c8247000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000fdffffffffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffff8002000000000000000000000000000000ffffffff000000000000000000000000606ff8179e5e3c059b82df931acc496b7b6053e8879042f8267f930e0595f69fd86ad9cf000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffff3f2b5c74de000000000000000000000000000000000000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000008579befe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000800000000000000000c6117ae200000000000000000000000000000000000000000000000000000000a2e43edcbc4fd175ae4bebbe3fd6139871ed1f1783cd4a1ace59b90d302c331902b543c6000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e00000000000000000000000000000000000000040000000000000000000000000405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace000000000000000000000000000000000000000000000000ffffffffffffff7f4e6f6e63654d616e6167657220312e362e302d646576000000000000000000000000000000000000000000000000000000000060000000c00000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffffc0") diff --git a/core/gethwrappers/ccip/generated_zks/offramp/offramp.go b/core/gethwrappers/ccip/generated_zks/offramp/offramp.go new file mode 100644 index 00000000000..2772753678e --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/offramp/offramp.go @@ -0,0 +1,2613 @@ +package offramp + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type ClientAny2EVMMessage struct { + MessageId [32]byte + SourceChainSelector uint64 + Sender []byte + Data []byte + DestTokenAmounts []ClientEVMTokenAmount +} + +type ClientEVMTokenAmount struct { + Token common.Address + Amount *big.Int +} + +type InternalAny2EVMRampMessage struct { + Header InternalRampMessageHeader + Sender []byte + Data []byte + Receiver common.Address + GasLimit *big.Int + TokenAmounts []InternalAny2EVMTokenTransfer +} + +type InternalAny2EVMTokenTransfer struct { + SourcePoolAddress []byte + DestTokenAddress common.Address + DestGasAmount uint32 + ExtraData []byte + Amount *big.Int +} + +type InternalExecutionReport struct { + SourceChainSelector uint64 + Messages []InternalAny2EVMRampMessage + OffchainTokenData [][][]byte + Proofs [][32]byte + ProofFlagBits *big.Int +} + +type InternalGasPriceUpdate struct { + DestChainSelector uint64 + UsdPerUnitGas *big.Int +} + +type InternalMerkleRoot struct { + SourceChainSelector uint64 + OnRampAddress []byte + MinSeqNr uint64 + MaxSeqNr uint64 + MerkleRoot [32]byte +} + +type InternalPriceUpdates struct { + TokenPriceUpdates []InternalTokenPriceUpdate + GasPriceUpdates []InternalGasPriceUpdate +} + +type InternalRampMessageHeader struct { + MessageId [32]byte + SourceChainSelector uint64 + DestChainSelector uint64 + SequenceNumber uint64 + Nonce uint64 +} + +type InternalTokenPriceUpdate struct { + SourceToken common.Address + UsdPerToken *big.Int +} + +type MultiOCR3BaseConfigInfo struct { + ConfigDigest [32]byte + F uint8 + N uint8 + IsSignatureVerificationEnabled bool +} + +type MultiOCR3BaseOCRConfig struct { + ConfigInfo MultiOCR3BaseConfigInfo + Signers []common.Address + Transmitters []common.Address +} + +type MultiOCR3BaseOCRConfigArgs struct { + ConfigDigest [32]byte + OcrPluginType uint8 + F uint8 + IsSignatureVerificationEnabled bool + Signers []common.Address + Transmitters []common.Address +} + +type OffRampDynamicConfig struct { + FeeQuoter common.Address + PermissionLessExecutionThresholdSeconds uint32 + IsRMNVerificationDisabled bool + MessageInterceptor common.Address +} + +type OffRampGasLimitOverride struct { + ReceiverExecutionGasLimit *big.Int + TokenGasOverrides []uint32 +} + +type OffRampSourceChainConfig struct { + Router common.Address + IsEnabled bool + MinSeqNr uint64 + OnRamp []byte +} + +type OffRampSourceChainConfigArgs struct { + Router common.Address + SourceChainSelector uint64 + IsEnabled bool + OnRamp []byte +} + +type OffRampStaticConfig struct { + ChainSelector uint64 + RmnRemote common.Address + TokenAdminRegistry common.Address + NonceManager common.Address +} + +var OffRampMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotTransferToSelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reportOnRamp\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"configOnRamp\",\"type\":\"bytes\"}],\"name\":\"CommitOnRampMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyBatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"EmptyReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ExecutionError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"ForkedChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumMultiOCR3Base.InvalidConfigErrorType\",\"name\":\"errorType\",\"type\":\"uint8\"}],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"}],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"InvalidInterval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenGasOverride\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionTokenGasOverride\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"messageDestChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidMessageDestChainSelector\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"newState\",\"type\":\"uint8\"}],\"name\":\"InvalidNewState\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidOnRampUpdate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeavesCannotBeEmpty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionGasAmountCountMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ManualExecutionGasLimitMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionNotYetEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"errorReason\",\"type\":\"bytes\"}],\"name\":\"MessageValidationError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonUniqueSignatures\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"notPool\",\"type\":\"address\"}],\"name\":\"NotACompatiblePool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerCannotBeZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ReceiverError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountReleased\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePre\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePost\",\"type\":\"uint256\"}],\"name\":\"ReleaseOrMintBalanceMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"name\":\"RootAlreadyCommitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"RootNotCommitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureVerificationNotAllowedInExecutionPlugin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureVerificationRequiredInCommitPlugin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignaturesOutOfRegistration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"reportSourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageSourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StaleCommitReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"StaticConfigCannotBeChanged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"TokenDataMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"TokenHandlingError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedTokenData\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"WrongMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroChainSelectorNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"AlreadyAttempted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"}],\"name\":\"CommitReportAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"DynamicConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"name\":\"ExecutionStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"RootRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"SkippedAlreadyExecutedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SkippedReportExecution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"sourceConfig\",\"type\":\"tuple\"}],\"name\":\"SourceChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"}],\"name\":\"StaticConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"Transmitted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigUpdates\",\"type\":\"tuple[]\"}],\"name\":\"applySourceChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"rawVs\",\"type\":\"bytes32\"}],\"name\":\"commit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllSourceChainConfigs\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"getExecutionState\",\"outputs\":[{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLatestPriceSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"getMerkleRoot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"getSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"latestConfigDetails\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"n\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"}],\"internalType\":\"structMultiOCR3Base.ConfigInfo\",\"name\":\"configInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfig\",\"name\":\"ocrConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReport[]\",\"name\":\"reports\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receiverExecutionGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"internalType\":\"structOffRamp.GasLimitOverride[][]\",\"name\":\"gasLimitOverrides\",\"type\":\"tuple[][]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfigArgs[]\",\"name\":\"ocrConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"setOCR3Configs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x6101206040523480156200001257600080fd5b5060405162006bed38038062006bed833981016040819052620000359162000880565b336000816200005757604051639b15e16f60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03848116919091179091558116156200008a576200008a81620001c4565b50504660805260208301516001600160a01b03161580620000b6575060408301516001600160a01b0316155b80620000cd575060608301516001600160a01b0316155b15620000ec576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b0316600003620001185760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001b0826200023e565b620001bb816200032c565b50505062000c72565b336001600160a01b03821603620001ee57604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b031662000267576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516001600160a01b039889166001600160c01b03199097168717600160a01b63ffffffff958616021760ff60c01b1916600160c01b911515919091021790965560608089018051600580546001600160a01b031916918b169190911790558251968752935190921693850193909352935115159183019190915251909216908201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9060800160405180910390a150565b60005b8151811015620005c1576000828281518110620003505762000350620009aa565b60200260200101519050600081602001519050806001600160401b03166000036200038e5760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316620003b7576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b03811660009081526008602052604090206060830151600182018054620003e590620009c0565b905060000362000448578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004b9565b8154600160a81b90046001600160401b03166001148015906200048b57508051602082012060405162000480906001850190620009fc565b604051809103902014155b15620004b957604051632105803760e11b81526001600160401b038416600482015260240160405180910390fd5b80511580620004ef5750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b156200050e576040516342bcdf7f60e11b815260040160405180910390fd5b600182016200051e828262000acf565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b0319909116171782556200056d60066001600160401b038516620005c5565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b83604051620005a9919062000b9b565b60405180910390a2505050508060010190506200032f565b5050565b6000620005d38383620005dc565b90505b92915050565b60008181526001830160205260408120546200062557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005d6565b506000620005d6565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200066957620006696200062e565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200069a576200069a6200062e565b604052919050565b80516001600160401b0381168114620006ba57600080fd5b919050565b6001600160a01b0381168114620006d557600080fd5b50565b80518015158114620006ba57600080fd5b6000601f83601f840112620006fd57600080fd5b825160206001600160401b03808311156200071c576200071c6200062e565b8260051b6200072d8382016200066f565b93845286810183019383810190898611156200074857600080fd5b84890192505b858310156200087357825184811115620007685760008081fd5b89016080601f19828d038101821315620007825760008081fd5b6200078c62000644565b888401516200079b81620006bf565b81526040620007ac858201620006a2565b8a8301526060620007bf818701620006d8565b83830152938501519389851115620007d75760008081fd5b84860195508f603f870112620007ef57600094508485fd5b8a8601519450898511156200080857620008086200062e565b620008198b858f880116016200066f565b93508484528f82868801011115620008315760008081fd5b60005b8581101562000851578681018301518582018d01528b0162000834565b5060009484018b0194909452509182015283525091840191908401906200074e565b9998505050505050505050565b60008060008385036101208112156200089857600080fd5b6080811215620008a757600080fd5b620008b162000644565b620008bc86620006a2565b81526020860151620008ce81620006bf565b60208201526040860151620008e381620006bf565b60408201526060860151620008f881620006bf565b606082015293506080607f19820112156200091257600080fd5b506200091d62000644565b60808501516200092d81620006bf565b815260a085015163ffffffff811681146200094757600080fd5b60208201526200095a60c08601620006d8565b604082015260e08501516200096f81620006bf565b60608201526101008501519092506001600160401b038111156200099257600080fd5b620009a086828701620006e9565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680620009d557607f821691505b602082108103620009f657634e487b7160e01b600052602260045260246000fd5b50919050565b600080835462000a0c81620009c0565b6001828116801562000a27576001811462000a3d5762000a6e565b60ff198416875282151583028701945062000a6e565b8760005260208060002060005b8581101562000a655781548a82015290840190820162000a4a565b50505082870194505b50929695505050505050565b601f82111562000aca576000816000526020600020601f850160051c8101602086101562000aa55750805b601f850160051c820191505b8181101562000ac65782815560010162000ab1565b5050505b505050565b81516001600160401b0381111562000aeb5762000aeb6200062e565b62000b038162000afc8454620009c0565b8462000a7a565b602080601f83116001811462000b3b576000841562000b225750858301515b600019600386901b1c1916600185901b17855562000ac6565b600085815260208120601f198616915b8281101562000b6c5788860151825594840194600190910190840162000b4b565b508582101562000b8b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000bf081620009c0565b8060a089015260c0600183166000811462000c14576001811462000c315762000c63565b60ff19841660c08b015260c083151560051b8b0101945062000c63565b85600052602060002060005b8481101562000c5a5781548c820185015290880190890162000c3d565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615efe62000cef600039600081816102070152612be30152600081816101d80152612eab0152600081816101a9015281816105820152818161073201526125e301526000818161017a0152818161278e0152612845015260008181611d120152611d450152615efe6000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637437ff9f116100ad578063c673e58411610071578063c673e58414610474578063ccd37ba314610494578063e9d68a8e146104d8578063f2fde38b146104f8578063f716f99f1461050b57600080fd5b80637437ff9f1461037357806379ba5097146104305780637edf52f41461043857806385572ffb1461044b5780638da5cb5b1461045957600080fd5b80633f4b04aa116100f45780633f4b04aa146102fc5780635215505b146103175780635e36480c1461032d5780635e7bb0081461034d57806360987c201461036057600080fd5b806304666f9c1461013157806306285c6914610146578063181f5a771461028d5780632d04ab76146102d6578063311cd513146102e9575b600080fd5b61014461013f366004613e22565b61051e565b005b61023760408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b604051610284919081516001600160401b031681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6102c96040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102849190613f90565b6101446102e4366004614040565b610532565b6101446102f73660046140f2565b610a46565b600b546040516001600160401b039091168152602001610284565b61031f610aaf565b60405161028492919061418c565b61034061033b36600461422d565b610d0a565b604051610284919061428a565b61014461035b3660046147f3565b610d5f565b61014461036e366004614a37565b610fee565b6103e960408051608081018252600080825260208201819052918101829052606081019190915250604080516080810182526004546001600160a01b038082168352600160a01b820463ffffffff166020840152600160c01b90910460ff16151592820192909252600554909116606082015290565b604051610284919081516001600160a01b03908116825260208084015163ffffffff1690830152604080840151151590830152606092830151169181019190915260800190565b6101446112a5565b610144610446366004614acb565b611328565b61014461012c366004614b30565b6001546040516001600160a01b039091168152602001610284565b610487610482366004614b7b565b611339565b6040516102849190614bdb565b6104ca6104a2366004614c50565b6001600160401b03919091166000908152600a60209081526040808320938352929052205490565b604051908152602001610284565b6104eb6104e6366004614c7a565b611497565b6040516102849190614c95565b610144610506366004614ca8565b6115a3565b610144610519366004614d2d565b6115b4565b6105266115f6565b61052f81611623565b50565b600061054087890189615082565b6004805491925090600160c01b900460ff166105ea57602082015151156105ea5760208201516040808401519051633854844f60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016926370a9089e926105b992309291906004016152aa565b60006040518083038186803b1580156105d157600080fd5b505afa1580156105e5573d6000803e3d6000fd5b505050505b8151515115158061060057508151602001515115155b156106cb57600b5460208b0135906001600160401b03808316911610156106a357600b805467ffffffffffffffff19166001600160401b03831617905581548351604051633937306f60e01b81526001600160a01b0390921691633937306f9161066c916004016153df565b600060405180830381600087803b15801561068657600080fd5b505af115801561069a573d6000803e3d6000fd5b505050506106c9565b8260200151516000036106c957604051632261116760e01b815260040160405180910390fd5b505b60005b826020015151811015610986576000836020015182815181106106f3576106f361530d565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa158015610779573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079d91906153f2565b156107cb57604051637edeb53960e11b81526001600160401b03821660048201526024015b60405180910390fd5b60006107d6826118ac565b9050806001016040516107e99190615449565b6040518091039020836020015180519060200120146108265782602001518160010160405163b80d8fa960e01b81526004016107c292919061553c565b60408301518154600160a81b90046001600160401b039081169116141580610867575082606001516001600160401b031683604001516001600160401b0316115b156108ac57825160408085015160608601519151636af0786b60e11b81526001600160401b0393841660048201529083166024820152911660448201526064016107c2565b6080830151806108cf5760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600a60209081526040808320848452909152902054156109275783516040516332cf0cbf60e01b81526001600160401b039091166004820152602481018290526044016107c2565b6060840151610937906001615577565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600a6020908152604080832094835293905291909120429055506001016106ce565b50602082015182516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e4926109be92909161559e565b60405180910390a1610a3a60008b8b8b8b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d9182918501908490808284376000920191909152508c92506118f8915050565b50505050505050505050565b610a86610a55828401846155c3565b6040805160008082526020820190925290610a80565b6060815260200190600190039081610a6b5790505b50611bf1565b604080516000808252602082019092529050610aa96001858585858660006118f8565b50505050565b6060806000610abe6006611cb4565b6001600160401b03811115610ad557610ad5613c42565b604051908082528060200260200182016040528015610b2657816020015b6040805160808101825260008082526020808301829052928201526060808201528252600019909201910181610af35790505b5090506000610b356006611cb4565b6001600160401b03811115610b4c57610b4c613c42565b604051908082528060200260200182016040528015610b75578160200160208202803683370190505b50905060005b610b856006611cb4565b811015610d0157610b97600682611cbe565b828281518110610ba957610ba961530d565b60200260200101906001600160401b031690816001600160401b03168152505060086000838381518110610bdf57610bdf61530d565b6020908102919091018101516001600160401b039081168352828201939093526040918201600020825160808101845281546001600160a01b038116825260ff600160a01b820416151593820193909352600160a81b90920490931691810191909152600182018054919291606084019190610c5a9061540f565b80601f0160208091040260200160405190810160405280929190818152602001828054610c869061540f565b8015610cd35780601f10610ca857610100808354040283529160200191610cd3565b820191906000526020600020905b815481529060010190602001808311610cb657829003601f168201915b505050505081525050838281518110610cee57610cee61530d565b6020908102919091010152600101610b7b565b50939092509050565b6000610d18600160046155f7565b6002610d25608085615620565b6001600160401b0316610d389190615646565b610d428585611cca565b901c166003811115610d5657610d56614260565b90505b92915050565b610d67611d0f565b815181518114610d8a576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610fde576000848281518110610da957610da961530d565b60200260200101519050600081602001515190506000858481518110610dd157610dd161530d565b6020026020010151905080518214610dfc576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610fcf576000828281518110610e1b57610e1b61530d565b6020026020010151600001519050600085602001518381518110610e4157610e4161530d565b6020026020010151905081600014610e95578060800151821015610e95578551815151604051633a98d46360e11b81526001600160401b0390921660048301526024820152604481018390526064016107c2565b838381518110610ea757610ea761530d565b602002602001015160200151518160a001515114610ef457805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b031660248201526044016107c2565b60005b8160a0015151811015610fc1576000858581518110610f1857610f1861530d565b6020026020010151602001518281518110610f3557610f3561530d565b602002602001015163ffffffff16905080600014610fb85760008360a001518381518110610f6557610f6561530d565b60200260200101516040015163ffffffff16905080821015610fb6578351516040516348e617b360e01b815260048101919091526024810184905260448101829052606481018390526084016107c2565b505b50600101610ef7565b505050806001019050610dff565b50505050806001019050610d8d565b50610fe98383611bf1565b505050565b33301461100e576040516306e34e6560e31b815260040160405180910390fd5b604080516000808252602082019092528161104b565b60408051808201909152600080825260208201528152602001906001900390816110245790505b5060a087015151909150156110815761107e8660a001518760200151886060015189600001516020015189898989611d77565b90505b6040805160a081018252875151815287516020908101516001600160401b03168183015288015181830152908701516060820152608081018290526005546001600160a01b03168015611174576040516308d450a160e01b81526001600160a01b038216906308d450a1906110fa9085906004016156fe565b600060405180830381600087803b15801561111457600080fd5b505af1925050508015611125575060015b611174573d808015611153576040519150601f19603f3d011682016040523d82523d6000602084013e611158565b606091505b50806040516309c2532560e01b81526004016107c29190613f90565b60408801515115801561118957506080880151155b806111a0575060608801516001600160a01b03163b155b806111c7575060608801516111c5906001600160a01b03166385572ffb60e01b611f28565b155b156111d45750505061129e565b87516020908101516001600160401b03166000908152600890915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf97983926112329289926113889291600401615711565b6000604051808303816000875af1158015611251573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611279919081019061574d565b509150915081610a3a57806040516302a35ba360e21b81526004016107c29190613f90565b5050505050565b6000546001600160a01b031633146112d05760405163015aa1e360e11b815260040160405180910390fd5b600180546001600160a01b0319808216339081179093556000805490911681556040516001600160a01b03909216929183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6113306115f6565b61052f81611f44565b61137c6040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c08201529485529182018054845181840281018401909552808552929385830193909283018282801561142557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611407575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561148757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611469575b5050505050815250509050919050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260088352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b9092049092169483019490945260018401805493949293918401916115239061540f565b80601f016020809104026020016040519081016040528092919081815260200182805461154f9061540f565b80156114875780601f1061157157610100808354040283529160200191611487565b820191906000526020600020905b81548152906001019060200180831161157f57505050919092525091949350505050565b6115ab6115f6565b61052f81612049565b6115bc6115f6565b60005b81518110156115f2576115ea8282815181106115dd576115dd61530d565b60200260200101516120c2565b6001016115bf565b5050565b6001546001600160a01b03163314611621576040516315ae3a6f60e11b815260040160405180910390fd5b565b60005b81518110156115f25760008282815181106116435761164361530d565b60200260200101519050600081602001519050806001600160401b03166000036116805760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166116a8576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b038116600090815260086020526040902060608301516001820180546116d49061540f565b905060000361173657815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a161179f565b8154600160a81b90046001600160401b031660011480159061177657508051602082012060405161176b906001850190615449565b604051809103902014155b1561179f57604051632105803760e11b81526001600160401b03841660048201526024016107c2565b805115806117d45750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b156117f2576040516342bcdf7f60e11b815260040160405180910390fd5b600182016118008282615832565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b029290921674ffffffffffffffffffffffffffffffffffffffffff199091161717825561185b60066001600160401b0385166123ec565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b8360405161189591906158f1565b60405180910390a250505050806001019050611626565b6001600160401b03811660009081526008602052604081208054600160a01b900460ff16610d595760405163ed053c5960e01b81526001600160401b03841660048201526024016107c2565b60ff878116600090815260026020908152604080832081516080810183528154815260019091015480861693820193909352610100830485169181019190915262010000909104909216151560608301528735906119578760a461593f565b905082606001511561199f578451611970906020615646565b865161197d906020615646565b6119889060a061593f565b611992919061593f565b61199c908261593f565b90505b3681146119c857604051638e1192e160e01b8152600481018290523660248201526044016107c2565b50815181146119f75781516040516324f7d61360e21b81526004810191909152602481018290526044016107c2565b6119ff611d0f565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611a4d57611a4d614260565b6002811115611a5e57611a5e614260565b9052509050600281602001516002811115611a7b57611a7b614260565b148015611acf5750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611ab757611ab761530d565b6000918252602090912001546001600160a01b031633145b611aec57604051631b41e11d60e31b815260040160405180910390fd5b50816060015115611b9c576020820151611b07906001615952565b60ff16855114611b2a576040516371253a2560e01b815260040160405180910390fd5b8351855114611b4c5760405163a75d88af60e01b815260040160405180910390fd5b60008787604051611b5e92919061596b565b604051908190038120611b75918b9060200161597b565b604051602081830303815290604052805190602001209050611b9a8a828888886123f8565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b8151600003611c135760405163c2e5347d60e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611c56565b604080518082019091526000815260606020820152815260200190600190039081611c2e5790505b50905060005b845181101561129e57611cac858281518110611c7a57611c7a61530d565b602002602001015184611ca657858381518110611c9957611c9961530d565b60200260200101516125b5565b836125b5565b600101611c5c565b6000610d59825490565b6000610d568383612e46565b6001600160401b038216600090815260096020526040812081611cee60808561598f565b6001600160401b031681526020810191909152604001600020549392505050565b467f00000000000000000000000000000000000000000000000000000000000000001461162157604051630f01ce8560e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016107c2565b606088516001600160401b03811115611d9257611d92613c42565b604051908082528060200260200182016040528015611dd757816020015b6040805180820190915260008082526020820152815260200190600190039081611db05790505b509050811560005b8a51811015611f1a5781611e7757848482818110611dff57611dff61530d565b9050602002016020810190611e1491906159b5565b63ffffffff1615611e7757848482818110611e3157611e3161530d565b9050602002016020810190611e4691906159b5565b8b8281518110611e5857611e5861530d565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611ef58b8281518110611e8c57611e8c61530d565b60200260200101518b8b8b8b8b87818110611ea957611ea961530d565b9050602002810190611ebb91906159d0565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612e7092505050565b838281518110611f0757611f0761530d565b6020908102919091010152600101611ddf565b505098975050505050505050565b6000611f3383613152565b8015610d565750610d568383613185565b80516001600160a01b0316611f6c576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516001600160a01b039889167fffffffffffffffff0000000000000000000000000000000000000000000000009097168717600160a01b63ffffffff958616021760ff60c01b1916600160c01b911515919091021790965560608089018051600580546001600160a01b031916918b169190911790558251968752935190921693850193909352935115159183019190915251909216908201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9060800160405180910390a150565b336001600160a01b0382160361207257604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff166000036120ed576000604051631b3fab5160e11b81526004016107c29190615a16565b60208082015160ff8082166000908152600290935260408320600181015492939092839216900361213e576060840151600182018054911515620100000262ff00001990921691909117905561217a565b6060840151600182015460ff620100009091041615159015151461217a576040516321fd80df60e21b815260ff841660048201526024016107c2565b60a0840151805161010010156121a6576001604051631b3fab5160e11b81526004016107c29190615a16565b80516000036121cb576005604051631b3fab5160e11b81526004016107c29190615a16565b612231848460030180548060200260200160405190810160405280929190818152602001828054801561222757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612209575b505050505061320f565b8460600151156123615761229f8484600201805480602002602001604051908101604052809291908181526020018280548015612227576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161220957505050505061320f565b6080850151805161010010156122cb576002604051631b3fab5160e11b81526004016107c29190615a16565b60408601516122db906003615a30565b60ff16815111612301576003604051631b3fab5160e11b81526004016107c29190615a16565b815181511015612327576001604051631b3fab5160e11b81526004016107c29190615a16565b805160018401805461ff00191661010060ff8416021790556123529060028601906020840190613bc8565b5061235f85826001613278565b505b61236d84826002613278565b80516123829060038501906020840190613bc8565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547936123db9389939260028a01929190615a4c565b60405180910390a161129e846133d3565b6000610d568383613456565b8251600090815b818110156125ab57600060018886846020811061241e5761241e61530d565b61242b91901a601b615952565b89858151811061243d5761243d61530d565b60200260200101518986815181106124575761245761530d565b602002602001015160405160008152602001604052604051612495949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa1580156124b7573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b0385168352815285822085870190965285548084168652939750909550929392840191610100900416600281111561251857612518614260565b600281111561252957612529614260565b905250905060018160200151600281111561254657612546614260565b1461256457604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b85161561258e57604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b8517945050508060010190506123ff565b5050505050505050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa158015612632573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265691906153f2565b156126c757801561268557604051637edeb53960e11b81526001600160401b03831660048201526024016107c2565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b60208401515160008190036126fd57845160405163676cf24b60e11b81526001600160401b0390911660048201526024016107c2565b8460400151518114612722576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b0381111561273c5761273c613c42565b604051908082528060200260200182016040528015612765578160200160208202803683370190505b50905060007f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f857f00000000000000000000000000000000000000000000000000000000000000006127b6886118ac565b6001016040516127c69190615449565b6040519081900381206127fe949392916020019384526001600160401b03928316602085015291166040830152606082015260800190565b60405160208183030381529060405280519060200120905060005b83811015612934576000886020015182815181106128395761283961530d565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b0316146128b05780516040908101519051631c21951160e11b81526001600160401b0390911660048201526024016107c2565b866001600160401b03168160000151602001516001600160401b03161461290457805160200151604051636c95f1eb60e01b81526001600160401b03808a16600483015290911660248201526044016107c2565b61290e81846134a5565b8483815181106129205761292061530d565b602090810291909101015250600101612819565b5050600061294c858389606001518a608001516135ad565b90508060000361297a57604051633ee8bd3f60e11b81526001600160401b03861660048201526024016107c2565b60005b838110156125ab5760005a90506000896020015183815181106129a2576129a261530d565b6020026020010151905060006129c089836000015160600151610d0a565b905060008160038111156129d6576129d6614260565b14806129f3575060038160038111156129f1576129f1614260565b145b612a4957815160600151604080516001600160401b03808d16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612e3e565b60608815612b28578a8581518110612a6357612a6361530d565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff16612a9188426155f7565b1190508080612ab157506003836003811115612aaf57612aaf614260565b145b612ad9576040516354e7e43160e11b81526001600160401b038c1660048201526024016107c2565b8b8681518110612aeb57612aeb61530d565b602002602001015160000151600014612b22578b8681518110612b1057612b1061530d565b60209081029190910101515160808501525b50612b94565b6000826003811115612b3c57612b3c614260565b14612b9457825160600151604080516001600160401b03808e16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612e3e565b8251608001516001600160401b031615612c6a576000826003811115612bbc57612bbc614260565b03612c6a5782516080015160208401516040516370701e5760e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e0e03cae92612c1a928f929190600401615afe565b6020604051808303816000875af1158015612c39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c5d91906153f2565b612c6a5750505050612e3e565b60008c604001518681518110612c8257612c8261530d565b6020026020010151905080518460a001515114612ccc57835160600151604051631cfe6d8b60e01b81526001600160401b03808e16600483015290911660248201526044016107c2565b612ce08b85600001516060015160016135ea565b600080612cee86848661368f565b91509150612d058d876000015160600151846135ea565b8b15612d5c576003826003811115612d1f57612d1f614260565b03612d5c576000856003811115612d3857612d38614260565b14612d5c57855151604051632b11b8d960e01b81526107c291908390600401615b2a565b6002826003811115612d7057612d70614260565b14612db1576003826003811115612d8957612d89614260565b14612db1578551606001516040516349362d1f60e11b81526107c2918f918590600401615b43565b8560000151600001518660000151606001516001600160401b03168e6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612e0957612e0961530d565b602002602001015186865a612e1e908f6155f7565b604051612e2e9493929190615b68565b60405180910390a4505050505050505b60010161297d565b6000826000018281548110612e5d57612e5d61530d565b9060005260206000200154905092915050565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612ef4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f189190615b9f565b90506001600160a01b0381161580612f475750612f456001600160a01b03821663aff2afbf60e01b611f28565b155b15612f705760405163ae9b4ce960e01b81526001600160a01b03821660048201526024016107c2565b600080612f8888858c6040015163ffffffff16613743565b91509150600080600061303b6040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b8152506040516024016130059190615bbc565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b17905287866113886084613828565b92509250925082613063578582604051634ff17cad60e11b81526004016107c2929190615c88565b8151602014613092578151604051631e3be00960e21b81526020600482015260248101919091526044016107c2565b6000828060200190518101906130a89190615caa565b9050866001600160a01b03168c6001600160a01b0316146131245760006130d98d8a6130d4868a6155f7565b613743565b509050868110806130f35750816130f088836155f7565b14155b156131225760405163a966e21f60e01b81526004810183905260248101889052604481018290526064016107c2565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b6000613165826301ffc9a760e01b613185565b8015610d59575061317e826001600160e01b0319613185565b1592915050565b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d915060005190508280156131f8575060208210155b80156132045750600081115b979650505050505050565b60005b8151811015610fe95760ff8316600090815260036020526040812083519091908490849081106132445761324461530d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff19169055600101613212565b60005b8251811015610aa95760008382815181106132985761329861530d565b60200260200101519050600060028111156132b5576132b5614260565b60ff80871660009081526003602090815260408083206001600160a01b038716845290915290205461010090041660028111156132f4576132f4614260565b14613315576004604051631b3fab5160e11b81526004016107c29190615a16565b6001600160a01b03811661333c5760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff16815260200184600281111561336257613362614260565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff1916176101008360028111156133bf576133bf614260565b02179055509050505080600101905061327b565b60ff8181166000818152600260205260409020600101546201000090049091169061342b5780613416576040516317bd8dd160e11b815260040160405180910390fd5b600b805467ffffffffffffffff191690555050565b60001960ff8316016115f25780156115f2576040516307b8c74d60e51b815260040160405180910390fd5b600081815260018301602052604081205461349d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d59565b506000610d59565b81518051606080850151908301516080808701519401516040516000958695889561350995919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a0015160405160200161354c9190615d64565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b6000806135bb858585613902565b6001600160401b0387166000908152600a6020908152604080832093835292905220549150505b949350505050565b600060026135f9608085615620565b6001600160401b031661360c9190615646565b9050600061361a8585611cca565b905081613629600160046155f7565b901b19168183600381111561364057613640614260565b6001600160401b03871660009081526009602052604081209190921b9290921791829161366e60808861598f565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c20906136bc90889088908890600401615dfb565b600060405180830381600087803b1580156136d657600080fd5b505af19250505080156136e7575060015b613726573d808015613715576040519150601f19603f3d011682016040523d82523d6000602084013e61371a565b606091505b5060039250905061373b565b50506040805160208101909152600081526002905b935093915050565b60008060008060006137a48860405160240161376e91906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b17905288886113886084613828565b925092509250826137cc578682604051634ff17cad60e11b81526004016107c2929190615c88565b60208251146137fb578151604051631e3be00960e21b81526020600482015260248101919091526044016107c2565b8180602001905181019061380f9190615caa565b61381982886155f7565b94509450505050935093915050565b6000606060008361ffff166001600160401b0381111561384a5761384a613c42565b6040519080825280601f01601f191660200182016040528015613874576020820181803683370190505b509150863b61388e5763030ed58f60e21b60005260046000fd5b5a858110156138a857632be8ca8b60e21b60005260046000fd5b85900360408104810387106138c8576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156138eb5750835b808352806000602085013e50955095509592505050565b825182516000919081830361392a57604051630469ac9960e21b815260040160405180910390fd5b610101821180159061393e57506101018111155b61395b576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613985576040516309bde33960e01b815260040160405180910390fd5b806000036139b257866000815181106139a0576139a061530d565b60200260200101519350505050613b80565b6000816001600160401b038111156139cc576139cc613c42565b6040519080825280602002602001820160405280156139f5578160200160208202803683370190505b50905060008080805b85811015613b1f5760006001821b8b811603613a595788851015613a42578c5160018601958e918110613a3357613a3361530d565b60200260200101519050613a7b565b8551600185019487918110613a3357613a3361530d565b8b5160018401938d918110613a7057613a7061530d565b602002602001015190505b600089861015613aab578d5160018701968f918110613a9c57613a9c61530d565b60200260200101519050613acd565b8651600186019588918110613ac257613ac261530d565b602002602001015190505b82851115613aee576040516309bde33960e01b815260040160405180910390fd5b613af88282613b87565b878481518110613b0a57613b0a61530d565b602090810291909101015250506001016139fe565b506001850382148015613b3157508683145b8015613b3c57508581145b613b59576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613b6e57613b6e61530d565b60200260200101519750505050505050505b9392505050565b6000818310613b9f57613b9a8284613ba5565b610d56565b610d5683835b60408051600160208201529081018390526060810182905260009060800161358f565b828054828255906000526020600020908101928215613c1d579160200282015b82811115613c1d57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613be8565b50613c29929150613c2d565b5090565b5b80821115613c295760008155600101613c2e565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613c7a57613c7a613c42565b60405290565b60405160a081016001600160401b0381118282101715613c7a57613c7a613c42565b60405160c081016001600160401b0381118282101715613c7a57613c7a613c42565b604080519081016001600160401b0381118282101715613c7a57613c7a613c42565b604051606081016001600160401b0381118282101715613c7a57613c7a613c42565b604051601f8201601f191681016001600160401b0381118282101715613d3057613d30613c42565b604052919050565b60006001600160401b03821115613d5157613d51613c42565b5060051b60200190565b6001600160a01b038116811461052f57600080fd5b80356001600160401b0381168114613d8757600080fd5b919050565b801515811461052f57600080fd5b8035613d8781613d8c565b60006001600160401b03821115613dbe57613dbe613c42565b50601f01601f191660200190565b600082601f830112613ddd57600080fd5b8135613df0613deb82613da5565b613d08565b818152846020838601011115613e0557600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613e3557600080fd5b82356001600160401b0380821115613e4c57600080fd5b818501915085601f830112613e6057600080fd5b8135613e6e613deb82613d38565b81815260059190911b83018401908481019088831115613e8d57600080fd5b8585015b83811015613f3357803585811115613ea95760008081fd5b86016080818c03601f1901811315613ec15760008081fd5b613ec9613c58565b89830135613ed681613d5b565b81526040613ee5848201613d70565b8b830152606080850135613ef881613d8c565b83830152928401359289841115613f1157600091508182fd5b613f1f8f8d86880101613dcc565b908301525085525050918601918601613e91565b5098975050505050505050565b60005b83811015613f5b578181015183820152602001613f43565b50506000910152565b60008151808452613f7c816020860160208601613f40565b601f01601f19169290920160200192915050565b602081526000610d566020830184613f64565b8060608101831015610d5957600080fd5b60008083601f840112613fc657600080fd5b5081356001600160401b03811115613fdd57600080fd5b602083019150836020828501011115613ff557600080fd5b9250929050565b60008083601f84011261400e57600080fd5b5081356001600160401b0381111561402557600080fd5b6020830191508360208260051b8501011115613ff557600080fd5b60008060008060008060008060e0898b03121561405c57600080fd5b6140668a8a613fa3565b975060608901356001600160401b038082111561408257600080fd5b61408e8c838d01613fb4565b909950975060808b01359150808211156140a757600080fd5b6140b38c838d01613ffc565b909750955060a08b01359150808211156140cc57600080fd5b506140d98b828c01613ffc565b999c989b50969995989497949560c00135949350505050565b60008060006080848603121561410757600080fd5b6141118585613fa3565b925060608401356001600160401b0381111561412c57600080fd5b61413886828701613fb4565b9497909650939450505050565b6001600160a01b0381511682526020810151151560208301526001600160401b03604082015116604083015260006060820151608060608501526135e26080850182613f64565b604080825283519082018190526000906020906060840190828701845b828110156141ce5781516001600160401b0316845292840192908401906001016141a9565b50505083810382850152845180825282820190600581901b8301840187850160005b8381101561421e57601f1986840301855261420c838351614145565b948701949250908601906001016141f0565b50909998505050505050505050565b6000806040838503121561424057600080fd5b61424983613d70565b915061425760208401613d70565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b6004811061428657614286614260565b9052565b60208101610d598284614276565b600060a082840312156142aa57600080fd5b6142b2613c80565b9050813581526142c460208301613d70565b60208201526142d560408301613d70565b60408201526142e660608301613d70565b60608201526142f760808301613d70565b608082015292915050565b8035613d8781613d5b565b803563ffffffff81168114613d8757600080fd5b600082601f83011261433257600080fd5b81356020614342613deb83613d38565b82815260059290921b8401810191818101908684111561436157600080fd5b8286015b848110156144315780356001600160401b03808211156143855760008081fd5b9088019060a0828b03601f190181131561439f5760008081fd5b6143a7613c80565b87840135838111156143b95760008081fd5b6143c78d8a83880101613dcc565b8252506040808501356143d981613d5b565b828a015260606143ea86820161430d565b828401526080915081860135858111156144045760008081fd5b6144128f8c838a0101613dcc565b9184019190915250919093013590830152508352918301918301614365565b509695505050505050565b6000610140828403121561444f57600080fd5b614457613ca2565b90506144638383614298565b815260a08201356001600160401b038082111561447f57600080fd5b61448b85838601613dcc565b602084015260c08401359150808211156144a457600080fd5b6144b085838601613dcc565b60408401526144c160e08501614302565b606084015261010084013560808401526101208401359150808211156144e657600080fd5b506144f384828501614321565b60a08301525092915050565b600082601f83011261451057600080fd5b81356020614520613deb83613d38565b82815260059290921b8401810191818101908684111561453f57600080fd5b8286015b848110156144315780356001600160401b038111156145625760008081fd5b6145708986838b010161443c565b845250918301918301614543565b600082601f83011261458f57600080fd5b8135602061459f613deb83613d38565b82815260059290921b840181019181810190868411156145be57600080fd5b8286015b848110156144315780356001600160401b03808211156145e157600080fd5b818901915089603f8301126145f557600080fd5b85820135614605613deb82613d38565b81815260059190911b830160400190878101908c83111561462557600080fd5b604085015b8381101561465e5780358581111561464157600080fd5b6146508f6040838a0101613dcc565b84525091890191890161462a565b508752505050928401925083016145c2565b600082601f83011261468157600080fd5b81356020614691613deb83613d38565b8083825260208201915060208460051b8701019350868411156146b357600080fd5b602086015b8481101561443157803583529183019183016146b8565b600082601f8301126146e057600080fd5b813560206146f0613deb83613d38565b82815260059290921b8401810191818101908684111561470f57600080fd5b8286015b848110156144315780356001600160401b03808211156147335760008081fd5b9088019060a0828b03601f190181131561474d5760008081fd5b614755613c80565b614760888501613d70565b8152604080850135848111156147765760008081fd5b6147848e8b838901016144ff565b8a840152506060808601358581111561479d5760008081fd5b6147ab8f8c838a010161457e565b83850152506080915081860135858111156147c65760008081fd5b6147d48f8c838a0101614670565b9184019190915250919093013590830152508352918301918301614713565b6000806040838503121561480657600080fd5b6001600160401b038335111561481b57600080fd5b61482884843585016146cf565b91506001600160401b036020840135111561484257600080fd5b6020830135830184601f82011261485857600080fd5b614865613deb8235613d38565b81358082526020808301929160051b84010187101561488357600080fd5b602083015b6020843560051b850101811015614a29576001600160401b03813511156148ae57600080fd5b87603f8235860101126148c057600080fd5b6148d3613deb6020833587010135613d38565b81358501602081810135808452908301929160059190911b016040018a10156148fb57600080fd5b604083358701015b83358701602081013560051b01604001811015614a19576001600160401b038135111561492f57600080fd5b833587018135016040818d03603f1901121561494a57600080fd5b614952613cc4565b604082013581526001600160401b036060830135111561497157600080fd5b8c605f60608401358401011261498657600080fd5b604060608301358301013561499d613deb82613d38565b808282526020820191508f60608460051b60608801358801010111156149c257600080fd5b6060808601358601015b60608460051b6060880135880101018110156149f9576149eb8161430d565b8352602092830192016149cc565b508060208501525050508085525050602083019250602081019050614903565b5084525060209283019201614888565b508093505050509250929050565b600080600080600060608688031215614a4f57600080fd5b85356001600160401b0380821115614a6657600080fd5b614a7289838a0161443c565b96506020880135915080821115614a8857600080fd5b614a9489838a01613ffc565b90965094506040880135915080821115614aad57600080fd5b50614aba88828901613ffc565b969995985093965092949392505050565b600060808284031215614add57600080fd5b614ae5613c58565b8235614af081613d5b565b8152614afe6020840161430d565b60208201526040830135614b1181613d8c565b60408201526060830135614b2481613d5b565b60608201529392505050565b600060208284031215614b4257600080fd5b81356001600160401b03811115614b5857600080fd5b820160a08185031215613b8057600080fd5b803560ff81168114613d8757600080fd5b600060208284031215614b8d57600080fd5b610d5682614b6a565b60008151808452602080850194506020840160005b83811015614bd05781516001600160a01b031687529582019590820190600101614bab565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614c2a60e0840182614b96565b90506040840151601f198483030160c0850152614c478282614b96565b95945050505050565b60008060408385031215614c6357600080fd5b614c6c83613d70565b946020939093013593505050565b600060208284031215614c8c57600080fd5b610d5682613d70565b602081526000610d566020830184614145565b600060208284031215614cba57600080fd5b8135613b8081613d5b565b600082601f830112614cd657600080fd5b81356020614ce6613deb83613d38565b8083825260208201915060208460051b870101935086841115614d0857600080fd5b602086015b84811015614431578035614d2081613d5b565b8352918301918301614d0d565b60006020808385031215614d4057600080fd5b82356001600160401b0380821115614d5757600080fd5b818501915085601f830112614d6b57600080fd5b8135614d79613deb82613d38565b81815260059190911b83018401908481019088831115614d9857600080fd5b8585015b83811015613f3357803585811115614db357600080fd5b860160c0818c03601f19011215614dca5760008081fd5b614dd2613ca2565b8882013581526040614de5818401614b6a565b8a8301526060614df6818501614b6a565b8284015260809150614e09828501613d9a565b9083015260a08381013589811115614e215760008081fd5b614e2f8f8d83880101614cc5565b838501525060c0840135915088821115614e495760008081fd5b614e578e8c84870101614cc5565b9083015250845250918601918601614d9c565b80356001600160e01b0381168114613d8757600080fd5b600082601f830112614e9257600080fd5b81356020614ea2613deb83613d38565b82815260069290921b84018101918181019086841115614ec157600080fd5b8286015b848110156144315760408189031215614ede5760008081fd5b614ee6613cc4565b614eef82613d70565b8152614efc858301614e6a565b81860152835291830191604001614ec5565b600082601f830112614f1f57600080fd5b81356020614f2f613deb83613d38565b82815260059290921b84018101918181019086841115614f4e57600080fd5b8286015b848110156144315780356001600160401b0380821115614f725760008081fd5b9088019060a0828b03601f1901811315614f8c5760008081fd5b614f94613c80565b614f9f888501613d70565b815260408085013584811115614fb55760008081fd5b614fc38e8b83890101613dcc565b8a8401525060609350614fd7848601613d70565b908201526080614fe8858201613d70565b93820193909352920135908201528352918301918301614f52565b600082601f83011261501457600080fd5b81356020615024613deb83613d38565b82815260069290921b8401810191818101908684111561504357600080fd5b8286015b8481101561443157604081890312156150605760008081fd5b615068613cc4565b813581528482013585820152835291830191604001615047565b6000602080838503121561509557600080fd5b82356001600160401b03808211156150ac57600080fd5b90840190606082870312156150c057600080fd5b6150c8613ce6565b8235828111156150d757600080fd5b830160408189038113156150ea57600080fd5b6150f2613cc4565b82358581111561510157600080fd5b8301601f81018b1361511257600080fd5b8035615120613deb82613d38565b81815260069190911b8201890190898101908d83111561513f57600080fd5b928a01925b8284101561518f5785848f03121561515c5760008081fd5b615164613cc4565b843561516f81613d5b565b815261517c858d01614e6a565b818d0152825292850192908a0190615144565b8452505050828701359150848211156151a757600080fd5b6151b38a838501614e81565b818801528352505082840135828111156151cc57600080fd5b6151d888828601614f0e565b858301525060408301359350818411156151f157600080fd5b6151fd87858501615003565b60408201529695505050505050565b600082825180855260208086019550808260051b84010181860160005b8481101561529d57601f19868403018952815160a06001600160401b0380835116865286830151828888015261526183880182613f64565b60408581015184169089015260608086015190931692880192909252506080928301519290950191909152509783019790830190600101615229565b5090979650505050505050565b6001600160a01b0384168152600060206060818401526152cd606084018661520c565b83810360408581019190915285518083528387019284019060005b8181101561421e578451805184528601518684015293850193918301916001016152e8565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b8181101561537a57835180516001600160a01b031684528501516001600160e01b0316858401529284019291850191600101615343565b50508583015187820388850152805180835290840192506000918401905b808310156153d357835180516001600160401b031683528501516001600160e01b031685830152928401926001929092019190850190615398565b50979650505050505050565b602081526000610d566020830184615323565b60006020828403121561540457600080fd5b8151613b8081613d8c565b600181811c9082168061542357607f821691505b60208210810361544357634e487b7160e01b600052602260045260246000fd5b50919050565b60008083546154578161540f565b6001828116801561546f5760018114615484576154b3565b60ff19841687528215158302870194506154b3565b8760005260208060002060005b858110156154aa5781548a820152908401908201615491565b50505082870194505b50929695505050505050565b600081546154cc8161540f565b8085526020600183811680156154e9576001811461550357615531565b60ff1985168884015283151560051b880183019550615531565b866000528260002060005b858110156155295781548a820186015290830190840161550e565b890184019650505b505050505092915050565b60408152600061554f6040830185613f64565b8281036020840152614c4781856154bf565b634e487b7160e01b600052601160045260246000fd5b6001600160401b0381811683821601908082111561559757615597615561565b5092915050565b6040815260006155b1604083018561520c565b8281036020840152614c478185615323565b6000602082840312156155d557600080fd5b81356001600160401b038111156155eb57600080fd5b6135e2848285016146cf565b81810381811115610d5957610d59615561565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b038084168061563a5761563a61560a565b92169190910692915050565b8082028115828204841417610d5957610d59615561565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261569060a0870182613f64565b9050606085015186820360608801526156a98282613f64565b608087810151898303918a01919091528051808352908601935060009250908501905b808310156153d357835180516001600160a01b03168352860151868301529285019260019290920191908401906156cc565b602081526000610d56602083018461565d565b608081526000615724608083018761565d565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b60008060006060848603121561576257600080fd5b835161576d81613d8c565b60208501519093506001600160401b0381111561578957600080fd5b8401601f8101861361579a57600080fd5b80516157a8613deb82613da5565b8181528760208385010111156157bd57600080fd5b6157ce826020830160208601613f40565b809450505050604084015190509250925092565b601f821115610fe9576000816000526020600020601f850160051c8101602086101561580b5750805b601f850160051c820191505b8181101561582a57828155600101615817565b505050505050565b81516001600160401b0381111561584b5761584b613c42565b61585f81615859845461540f565b846157e2565b602080601f831160018114615894576000841561587c5750858301515b600019600386901b1c1916600185901b17855561582a565b600085815260208120601f198616915b828110156158c3578886015182559484019460019091019084016158a4565b50858210156158e15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c16606084015250608080830152610d5660a08301600185016154bf565b80820180821115610d5957610d59615561565b60ff8181168382160190811115610d5957610d59615561565b8183823760009101908152919050565b828152606082602083013760800192915050565b60006001600160401b03808416806159a9576159a961560a565b92169190910492915050565b6000602082840312156159c757600080fd5b610d568261430d565b6000808335601e198436030181126159e757600080fd5b8301803591506001600160401b03821115615a0157600080fd5b602001915036819003821315613ff557600080fd5b6020810160068310615a2a57615a2a614260565b91905290565b60ff818116838216029081169081811461559757615597615561565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615aa45784546001600160a01b031683526001948501949284019201615a7f565b50508481036060860152865180825290820192508187019060005b81811015615ae45782516001600160a01b031685529383019391830191600101615abf565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b03808616835280851660208401525060606040830152614c476060830184613f64565b8281526040602082015260006135e26040830184613f64565b6001600160401b03848116825283166020820152606081016135e26040830184614276565b848152615b786020820185614276565b608060408201526000615b8e6080830185613f64565b905082606083015295945050505050565b600060208284031215615bb157600080fd5b8151613b8081613d5b565b6020815260008251610100806020850152615bdb610120850183613f64565b91506020850151615bf760408601826001600160401b03169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615c3160a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615c4e8483613f64565b935060c08701519150808685030160e0870152615c6b8483613f64565b935060e0870151915080868503018387015250615af48382613f64565b6001600160a01b03831681526040602082015260006135e26040830184613f64565b600060208284031215615cbc57600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b8481101561529d57601f19868403018952815160a08151818652615d0682870182613f64565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615d428382613f64565b6080948501519790940196909652505098840198925090830190600101615ce0565b602081526000610d566020830184615cc3565b60008282518085526020808601955060208260051b8401016020860160005b8481101561529d57601f19868403018952615db2838351613f64565b98840198925090830190600101615d96565b60008151808452602080850194506020840160005b83811015614bd057815163ffffffff1687529582019590820190600101615dd9565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615e636101a0850183613f64565b91506040870151605f198086850301610120870152615e828483613f64565b935060608901519150615e9f838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615ec88282615cc3565b9150508281036020840152615edd8186615d77565b90508281036040840152615af48185615dc456fea164736f6c6343000818000a", +} + +var OffRampABI = OffRampMetaData.ABI + +var OffRampBin = OffRampMetaData.Bin + +func DeployOffRamp(auth *bind.TransactOpts, backend bind.ContractBackend, staticConfig OffRampStaticConfig, dynamicConfig OffRampDynamicConfig, sourceChainConfigs []OffRampSourceChainConfigArgs) (common.Address, *generated_zks.Transaction, *OffRamp, error) { + parsed, err := OffRampMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(OffRampZKBin), backend, staticConfig, dynamicConfig, sourceChainConfigs) + contractReturn := &OffRamp{address: address, abi: *parsed, OffRampCaller: OffRampCaller{contract: contractBind}, OffRampTransactor: OffRampTransactor{contract: contractBind}, OffRampFilterer: OffRampFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(OffRampBin), backend, staticConfig, dynamicConfig, sourceChainConfigs) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &OffRamp{address: address, abi: *parsed, OffRampCaller: OffRampCaller{contract: contract}, OffRampTransactor: OffRampTransactor{contract: contract}, OffRampFilterer: OffRampFilterer{contract: contract}}, nil +} + +type OffRamp struct { + address common.Address + abi abi.ABI + OffRampCaller + OffRampTransactor + OffRampFilterer +} + +type OffRampCaller struct { + contract *bind.BoundContract +} + +type OffRampTransactor struct { + contract *bind.BoundContract +} + +type OffRampFilterer struct { + contract *bind.BoundContract +} + +type OffRampSession struct { + Contract *OffRamp + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type OffRampCallerSession struct { + Contract *OffRampCaller + CallOpts bind.CallOpts +} + +type OffRampTransactorSession struct { + Contract *OffRampTransactor + TransactOpts bind.TransactOpts +} + +type OffRampRaw struct { + Contract *OffRamp +} + +type OffRampCallerRaw struct { + Contract *OffRampCaller +} + +type OffRampTransactorRaw struct { + Contract *OffRampTransactor +} + +func NewOffRamp(address common.Address, backend bind.ContractBackend) (*OffRamp, error) { + abi, err := abi.JSON(strings.NewReader(OffRampABI)) + if err != nil { + return nil, err + } + contract, err := bindOffRamp(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &OffRamp{address: address, abi: abi, OffRampCaller: OffRampCaller{contract: contract}, OffRampTransactor: OffRampTransactor{contract: contract}, OffRampFilterer: OffRampFilterer{contract: contract}}, nil +} + +func NewOffRampCaller(address common.Address, caller bind.ContractCaller) (*OffRampCaller, error) { + contract, err := bindOffRamp(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &OffRampCaller{contract: contract}, nil +} + +func NewOffRampTransactor(address common.Address, transactor bind.ContractTransactor) (*OffRampTransactor, error) { + contract, err := bindOffRamp(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &OffRampTransactor{contract: contract}, nil +} + +func NewOffRampFilterer(address common.Address, filterer bind.ContractFilterer) (*OffRampFilterer, error) { + contract, err := bindOffRamp(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &OffRampFilterer{contract: contract}, nil +} + +func bindOffRamp(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := OffRampMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_OffRamp *OffRampRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OffRamp.Contract.OffRampCaller.contract.Call(opts, result, method, params...) +} + +func (_OffRamp *OffRampRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OffRamp.Contract.OffRampTransactor.contract.Transfer(opts) +} + +func (_OffRamp *OffRampRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OffRamp.Contract.OffRampTransactor.contract.Transact(opts, method, params...) +} + +func (_OffRamp *OffRampCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OffRamp.Contract.contract.Call(opts, result, method, params...) +} + +func (_OffRamp *OffRampTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OffRamp.Contract.contract.Transfer(opts) +} + +func (_OffRamp *OffRampTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OffRamp.Contract.contract.Transact(opts, method, params...) +} + +func (_OffRamp *OffRampCaller) CcipReceive(opts *bind.CallOpts, arg0 ClientAny2EVMMessage) error { + var out []interface{} + err := _OffRamp.contract.Call(opts, &out, "ccipReceive", arg0) + + if err != nil { + return err + } + + return err + +} + +func (_OffRamp *OffRampSession) CcipReceive(arg0 ClientAny2EVMMessage) error { + return _OffRamp.Contract.CcipReceive(&_OffRamp.CallOpts, arg0) +} + +func (_OffRamp *OffRampCallerSession) CcipReceive(arg0 ClientAny2EVMMessage) error { + return _OffRamp.Contract.CcipReceive(&_OffRamp.CallOpts, arg0) +} + +func (_OffRamp *OffRampCaller) GetAllSourceChainConfigs(opts *bind.CallOpts) ([]uint64, []OffRampSourceChainConfig, error) { + var out []interface{} + err := _OffRamp.contract.Call(opts, &out, "getAllSourceChainConfigs") + + if err != nil { + return *new([]uint64), *new([]OffRampSourceChainConfig), err + } + + out0 := *abi.ConvertType(out[0], new([]uint64)).(*[]uint64) + out1 := *abi.ConvertType(out[1], new([]OffRampSourceChainConfig)).(*[]OffRampSourceChainConfig) + + return out0, out1, err + +} + +func (_OffRamp *OffRampSession) GetAllSourceChainConfigs() ([]uint64, []OffRampSourceChainConfig, error) { + return _OffRamp.Contract.GetAllSourceChainConfigs(&_OffRamp.CallOpts) +} + +func (_OffRamp *OffRampCallerSession) GetAllSourceChainConfigs() ([]uint64, []OffRampSourceChainConfig, error) { + return _OffRamp.Contract.GetAllSourceChainConfigs(&_OffRamp.CallOpts) +} + +func (_OffRamp *OffRampCaller) GetDynamicConfig(opts *bind.CallOpts) (OffRampDynamicConfig, error) { + var out []interface{} + err := _OffRamp.contract.Call(opts, &out, "getDynamicConfig") + + if err != nil { + return *new(OffRampDynamicConfig), err + } + + out0 := *abi.ConvertType(out[0], new(OffRampDynamicConfig)).(*OffRampDynamicConfig) + + return out0, err + +} + +func (_OffRamp *OffRampSession) GetDynamicConfig() (OffRampDynamicConfig, error) { + return _OffRamp.Contract.GetDynamicConfig(&_OffRamp.CallOpts) +} + +func (_OffRamp *OffRampCallerSession) GetDynamicConfig() (OffRampDynamicConfig, error) { + return _OffRamp.Contract.GetDynamicConfig(&_OffRamp.CallOpts) +} + +func (_OffRamp *OffRampCaller) GetExecutionState(opts *bind.CallOpts, sourceChainSelector uint64, sequenceNumber uint64) (uint8, error) { + var out []interface{} + err := _OffRamp.contract.Call(opts, &out, "getExecutionState", sourceChainSelector, sequenceNumber) + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +func (_OffRamp *OffRampSession) GetExecutionState(sourceChainSelector uint64, sequenceNumber uint64) (uint8, error) { + return _OffRamp.Contract.GetExecutionState(&_OffRamp.CallOpts, sourceChainSelector, sequenceNumber) +} + +func (_OffRamp *OffRampCallerSession) GetExecutionState(sourceChainSelector uint64, sequenceNumber uint64) (uint8, error) { + return _OffRamp.Contract.GetExecutionState(&_OffRamp.CallOpts, sourceChainSelector, sequenceNumber) +} + +func (_OffRamp *OffRampCaller) GetLatestPriceSequenceNumber(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _OffRamp.contract.Call(opts, &out, "getLatestPriceSequenceNumber") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +func (_OffRamp *OffRampSession) GetLatestPriceSequenceNumber() (uint64, error) { + return _OffRamp.Contract.GetLatestPriceSequenceNumber(&_OffRamp.CallOpts) +} + +func (_OffRamp *OffRampCallerSession) GetLatestPriceSequenceNumber() (uint64, error) { + return _OffRamp.Contract.GetLatestPriceSequenceNumber(&_OffRamp.CallOpts) +} + +func (_OffRamp *OffRampCaller) GetMerkleRoot(opts *bind.CallOpts, sourceChainSelector uint64, root [32]byte) (*big.Int, error) { + var out []interface{} + err := _OffRamp.contract.Call(opts, &out, "getMerkleRoot", sourceChainSelector, root) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_OffRamp *OffRampSession) GetMerkleRoot(sourceChainSelector uint64, root [32]byte) (*big.Int, error) { + return _OffRamp.Contract.GetMerkleRoot(&_OffRamp.CallOpts, sourceChainSelector, root) +} + +func (_OffRamp *OffRampCallerSession) GetMerkleRoot(sourceChainSelector uint64, root [32]byte) (*big.Int, error) { + return _OffRamp.Contract.GetMerkleRoot(&_OffRamp.CallOpts, sourceChainSelector, root) +} + +func (_OffRamp *OffRampCaller) GetSourceChainConfig(opts *bind.CallOpts, sourceChainSelector uint64) (OffRampSourceChainConfig, error) { + var out []interface{} + err := _OffRamp.contract.Call(opts, &out, "getSourceChainConfig", sourceChainSelector) + + if err != nil { + return *new(OffRampSourceChainConfig), err + } + + out0 := *abi.ConvertType(out[0], new(OffRampSourceChainConfig)).(*OffRampSourceChainConfig) + + return out0, err + +} + +func (_OffRamp *OffRampSession) GetSourceChainConfig(sourceChainSelector uint64) (OffRampSourceChainConfig, error) { + return _OffRamp.Contract.GetSourceChainConfig(&_OffRamp.CallOpts, sourceChainSelector) +} + +func (_OffRamp *OffRampCallerSession) GetSourceChainConfig(sourceChainSelector uint64) (OffRampSourceChainConfig, error) { + return _OffRamp.Contract.GetSourceChainConfig(&_OffRamp.CallOpts, sourceChainSelector) +} + +func (_OffRamp *OffRampCaller) GetStaticConfig(opts *bind.CallOpts) (OffRampStaticConfig, error) { + var out []interface{} + err := _OffRamp.contract.Call(opts, &out, "getStaticConfig") + + if err != nil { + return *new(OffRampStaticConfig), err + } + + out0 := *abi.ConvertType(out[0], new(OffRampStaticConfig)).(*OffRampStaticConfig) + + return out0, err + +} + +func (_OffRamp *OffRampSession) GetStaticConfig() (OffRampStaticConfig, error) { + return _OffRamp.Contract.GetStaticConfig(&_OffRamp.CallOpts) +} + +func (_OffRamp *OffRampCallerSession) GetStaticConfig() (OffRampStaticConfig, error) { + return _OffRamp.Contract.GetStaticConfig(&_OffRamp.CallOpts) +} + +func (_OffRamp *OffRampCaller) LatestConfigDetails(opts *bind.CallOpts, ocrPluginType uint8) (MultiOCR3BaseOCRConfig, error) { + var out []interface{} + err := _OffRamp.contract.Call(opts, &out, "latestConfigDetails", ocrPluginType) + + if err != nil { + return *new(MultiOCR3BaseOCRConfig), err + } + + out0 := *abi.ConvertType(out[0], new(MultiOCR3BaseOCRConfig)).(*MultiOCR3BaseOCRConfig) + + return out0, err + +} + +func (_OffRamp *OffRampSession) LatestConfigDetails(ocrPluginType uint8) (MultiOCR3BaseOCRConfig, error) { + return _OffRamp.Contract.LatestConfigDetails(&_OffRamp.CallOpts, ocrPluginType) +} + +func (_OffRamp *OffRampCallerSession) LatestConfigDetails(ocrPluginType uint8) (MultiOCR3BaseOCRConfig, error) { + return _OffRamp.Contract.LatestConfigDetails(&_OffRamp.CallOpts, ocrPluginType) +} + +func (_OffRamp *OffRampCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OffRamp.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 + +} + +func (_OffRamp *OffRampSession) Owner() (common.Address, error) { + return _OffRamp.Contract.Owner(&_OffRamp.CallOpts) +} + +func (_OffRamp *OffRampCallerSession) Owner() (common.Address, error) { + return _OffRamp.Contract.Owner(&_OffRamp.CallOpts) +} + +func (_OffRamp *OffRampCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _OffRamp.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_OffRamp *OffRampSession) TypeAndVersion() (string, error) { + return _OffRamp.Contract.TypeAndVersion(&_OffRamp.CallOpts) +} + +func (_OffRamp *OffRampCallerSession) TypeAndVersion() (string, error) { + return _OffRamp.Contract.TypeAndVersion(&_OffRamp.CallOpts) +} + +func (_OffRamp *OffRampTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OffRamp.contract.Transact(opts, "acceptOwnership") +} + +func (_OffRamp *OffRampSession) AcceptOwnership() (*types.Transaction, error) { + return _OffRamp.Contract.AcceptOwnership(&_OffRamp.TransactOpts) +} + +func (_OffRamp *OffRampTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _OffRamp.Contract.AcceptOwnership(&_OffRamp.TransactOpts) +} + +func (_OffRamp *OffRampTransactor) ApplySourceChainConfigUpdates(opts *bind.TransactOpts, sourceChainConfigUpdates []OffRampSourceChainConfigArgs) (*types.Transaction, error) { + return _OffRamp.contract.Transact(opts, "applySourceChainConfigUpdates", sourceChainConfigUpdates) +} + +func (_OffRamp *OffRampSession) ApplySourceChainConfigUpdates(sourceChainConfigUpdates []OffRampSourceChainConfigArgs) (*types.Transaction, error) { + return _OffRamp.Contract.ApplySourceChainConfigUpdates(&_OffRamp.TransactOpts, sourceChainConfigUpdates) +} + +func (_OffRamp *OffRampTransactorSession) ApplySourceChainConfigUpdates(sourceChainConfigUpdates []OffRampSourceChainConfigArgs) (*types.Transaction, error) { + return _OffRamp.Contract.ApplySourceChainConfigUpdates(&_OffRamp.TransactOpts, sourceChainConfigUpdates) +} + +func (_OffRamp *OffRampTransactor) Commit(opts *bind.TransactOpts, reportContext [3][32]byte, report []byte, rs [][32]byte, ss [][32]byte, rawVs [32]byte) (*types.Transaction, error) { + return _OffRamp.contract.Transact(opts, "commit", reportContext, report, rs, ss, rawVs) +} + +func (_OffRamp *OffRampSession) Commit(reportContext [3][32]byte, report []byte, rs [][32]byte, ss [][32]byte, rawVs [32]byte) (*types.Transaction, error) { + return _OffRamp.Contract.Commit(&_OffRamp.TransactOpts, reportContext, report, rs, ss, rawVs) +} + +func (_OffRamp *OffRampTransactorSession) Commit(reportContext [3][32]byte, report []byte, rs [][32]byte, ss [][32]byte, rawVs [32]byte) (*types.Transaction, error) { + return _OffRamp.Contract.Commit(&_OffRamp.TransactOpts, reportContext, report, rs, ss, rawVs) +} + +func (_OffRamp *OffRampTransactor) Execute(opts *bind.TransactOpts, reportContext [3][32]byte, report []byte) (*types.Transaction, error) { + return _OffRamp.contract.Transact(opts, "execute", reportContext, report) +} + +func (_OffRamp *OffRampSession) Execute(reportContext [3][32]byte, report []byte) (*types.Transaction, error) { + return _OffRamp.Contract.Execute(&_OffRamp.TransactOpts, reportContext, report) +} + +func (_OffRamp *OffRampTransactorSession) Execute(reportContext [3][32]byte, report []byte) (*types.Transaction, error) { + return _OffRamp.Contract.Execute(&_OffRamp.TransactOpts, reportContext, report) +} + +func (_OffRamp *OffRampTransactor) ExecuteSingleMessage(opts *bind.TransactOpts, message InternalAny2EVMRampMessage, offchainTokenData [][]byte, tokenGasOverrides []uint32) (*types.Transaction, error) { + return _OffRamp.contract.Transact(opts, "executeSingleMessage", message, offchainTokenData, tokenGasOverrides) +} + +func (_OffRamp *OffRampSession) ExecuteSingleMessage(message InternalAny2EVMRampMessage, offchainTokenData [][]byte, tokenGasOverrides []uint32) (*types.Transaction, error) { + return _OffRamp.Contract.ExecuteSingleMessage(&_OffRamp.TransactOpts, message, offchainTokenData, tokenGasOverrides) +} + +func (_OffRamp *OffRampTransactorSession) ExecuteSingleMessage(message InternalAny2EVMRampMessage, offchainTokenData [][]byte, tokenGasOverrides []uint32) (*types.Transaction, error) { + return _OffRamp.Contract.ExecuteSingleMessage(&_OffRamp.TransactOpts, message, offchainTokenData, tokenGasOverrides) +} + +func (_OffRamp *OffRampTransactor) ManuallyExecute(opts *bind.TransactOpts, reports []InternalExecutionReport, gasLimitOverrides [][]OffRampGasLimitOverride) (*types.Transaction, error) { + return _OffRamp.contract.Transact(opts, "manuallyExecute", reports, gasLimitOverrides) +} + +func (_OffRamp *OffRampSession) ManuallyExecute(reports []InternalExecutionReport, gasLimitOverrides [][]OffRampGasLimitOverride) (*types.Transaction, error) { + return _OffRamp.Contract.ManuallyExecute(&_OffRamp.TransactOpts, reports, gasLimitOverrides) +} + +func (_OffRamp *OffRampTransactorSession) ManuallyExecute(reports []InternalExecutionReport, gasLimitOverrides [][]OffRampGasLimitOverride) (*types.Transaction, error) { + return _OffRamp.Contract.ManuallyExecute(&_OffRamp.TransactOpts, reports, gasLimitOverrides) +} + +func (_OffRamp *OffRampTransactor) SetDynamicConfig(opts *bind.TransactOpts, dynamicConfig OffRampDynamicConfig) (*types.Transaction, error) { + return _OffRamp.contract.Transact(opts, "setDynamicConfig", dynamicConfig) +} + +func (_OffRamp *OffRampSession) SetDynamicConfig(dynamicConfig OffRampDynamicConfig) (*types.Transaction, error) { + return _OffRamp.Contract.SetDynamicConfig(&_OffRamp.TransactOpts, dynamicConfig) +} + +func (_OffRamp *OffRampTransactorSession) SetDynamicConfig(dynamicConfig OffRampDynamicConfig) (*types.Transaction, error) { + return _OffRamp.Contract.SetDynamicConfig(&_OffRamp.TransactOpts, dynamicConfig) +} + +func (_OffRamp *OffRampTransactor) SetOCR3Configs(opts *bind.TransactOpts, ocrConfigArgs []MultiOCR3BaseOCRConfigArgs) (*types.Transaction, error) { + return _OffRamp.contract.Transact(opts, "setOCR3Configs", ocrConfigArgs) +} + +func (_OffRamp *OffRampSession) SetOCR3Configs(ocrConfigArgs []MultiOCR3BaseOCRConfigArgs) (*types.Transaction, error) { + return _OffRamp.Contract.SetOCR3Configs(&_OffRamp.TransactOpts, ocrConfigArgs) +} + +func (_OffRamp *OffRampTransactorSession) SetOCR3Configs(ocrConfigArgs []MultiOCR3BaseOCRConfigArgs) (*types.Transaction, error) { + return _OffRamp.Contract.SetOCR3Configs(&_OffRamp.TransactOpts, ocrConfigArgs) +} + +func (_OffRamp *OffRampTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _OffRamp.contract.Transact(opts, "transferOwnership", to) +} + +func (_OffRamp *OffRampSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _OffRamp.Contract.TransferOwnership(&_OffRamp.TransactOpts, to) +} + +func (_OffRamp *OffRampTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _OffRamp.Contract.TransferOwnership(&_OffRamp.TransactOpts, to) +} + +type OffRampAlreadyAttemptedIterator struct { + Event *OffRampAlreadyAttempted + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OffRampAlreadyAttemptedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OffRampAlreadyAttempted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OffRampAlreadyAttempted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OffRampAlreadyAttemptedIterator) Error() error { + return it.fail +} + +func (it *OffRampAlreadyAttemptedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OffRampAlreadyAttempted struct { + SourceChainSelector uint64 + SequenceNumber uint64 + Raw types.Log +} + +func (_OffRamp *OffRampFilterer) FilterAlreadyAttempted(opts *bind.FilterOpts) (*OffRampAlreadyAttemptedIterator, error) { + + logs, sub, err := _OffRamp.contract.FilterLogs(opts, "AlreadyAttempted") + if err != nil { + return nil, err + } + return &OffRampAlreadyAttemptedIterator{contract: _OffRamp.contract, event: "AlreadyAttempted", logs: logs, sub: sub}, nil +} + +func (_OffRamp *OffRampFilterer) WatchAlreadyAttempted(opts *bind.WatchOpts, sink chan<- *OffRampAlreadyAttempted) (event.Subscription, error) { + + logs, sub, err := _OffRamp.contract.WatchLogs(opts, "AlreadyAttempted") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OffRampAlreadyAttempted) + if err := _OffRamp.contract.UnpackLog(event, "AlreadyAttempted", 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 +} + +func (_OffRamp *OffRampFilterer) ParseAlreadyAttempted(log types.Log) (*OffRampAlreadyAttempted, error) { + event := new(OffRampAlreadyAttempted) + if err := _OffRamp.contract.UnpackLog(event, "AlreadyAttempted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OffRampCommitReportAcceptedIterator struct { + Event *OffRampCommitReportAccepted + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OffRampCommitReportAcceptedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OffRampCommitReportAccepted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OffRampCommitReportAccepted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OffRampCommitReportAcceptedIterator) Error() error { + return it.fail +} + +func (it *OffRampCommitReportAcceptedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OffRampCommitReportAccepted struct { + MerkleRoots []InternalMerkleRoot + PriceUpdates InternalPriceUpdates + Raw types.Log +} + +func (_OffRamp *OffRampFilterer) FilterCommitReportAccepted(opts *bind.FilterOpts) (*OffRampCommitReportAcceptedIterator, error) { + + logs, sub, err := _OffRamp.contract.FilterLogs(opts, "CommitReportAccepted") + if err != nil { + return nil, err + } + return &OffRampCommitReportAcceptedIterator{contract: _OffRamp.contract, event: "CommitReportAccepted", logs: logs, sub: sub}, nil +} + +func (_OffRamp *OffRampFilterer) WatchCommitReportAccepted(opts *bind.WatchOpts, sink chan<- *OffRampCommitReportAccepted) (event.Subscription, error) { + + logs, sub, err := _OffRamp.contract.WatchLogs(opts, "CommitReportAccepted") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OffRampCommitReportAccepted) + if err := _OffRamp.contract.UnpackLog(event, "CommitReportAccepted", 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 +} + +func (_OffRamp *OffRampFilterer) ParseCommitReportAccepted(log types.Log) (*OffRampCommitReportAccepted, error) { + event := new(OffRampCommitReportAccepted) + if err := _OffRamp.contract.UnpackLog(event, "CommitReportAccepted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OffRampConfigSetIterator struct { + Event *OffRampConfigSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OffRampConfigSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OffRampConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OffRampConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OffRampConfigSetIterator) Error() error { + return it.fail +} + +func (it *OffRampConfigSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OffRampConfigSet struct { + OcrPluginType uint8 + ConfigDigest [32]byte + Signers []common.Address + Transmitters []common.Address + F uint8 + Raw types.Log +} + +func (_OffRamp *OffRampFilterer) FilterConfigSet(opts *bind.FilterOpts) (*OffRampConfigSetIterator, error) { + + logs, sub, err := _OffRamp.contract.FilterLogs(opts, "ConfigSet") + if err != nil { + return nil, err + } + return &OffRampConfigSetIterator{contract: _OffRamp.contract, event: "ConfigSet", logs: logs, sub: sub}, nil +} + +func (_OffRamp *OffRampFilterer) WatchConfigSet(opts *bind.WatchOpts, sink chan<- *OffRampConfigSet) (event.Subscription, error) { + + logs, sub, err := _OffRamp.contract.WatchLogs(opts, "ConfigSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OffRampConfigSet) + if err := _OffRamp.contract.UnpackLog(event, "ConfigSet", 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 +} + +func (_OffRamp *OffRampFilterer) ParseConfigSet(log types.Log) (*OffRampConfigSet, error) { + event := new(OffRampConfigSet) + if err := _OffRamp.contract.UnpackLog(event, "ConfigSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OffRampDynamicConfigSetIterator struct { + Event *OffRampDynamicConfigSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OffRampDynamicConfigSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OffRampDynamicConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OffRampDynamicConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OffRampDynamicConfigSetIterator) Error() error { + return it.fail +} + +func (it *OffRampDynamicConfigSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OffRampDynamicConfigSet struct { + DynamicConfig OffRampDynamicConfig + Raw types.Log +} + +func (_OffRamp *OffRampFilterer) FilterDynamicConfigSet(opts *bind.FilterOpts) (*OffRampDynamicConfigSetIterator, error) { + + logs, sub, err := _OffRamp.contract.FilterLogs(opts, "DynamicConfigSet") + if err != nil { + return nil, err + } + return &OffRampDynamicConfigSetIterator{contract: _OffRamp.contract, event: "DynamicConfigSet", logs: logs, sub: sub}, nil +} + +func (_OffRamp *OffRampFilterer) WatchDynamicConfigSet(opts *bind.WatchOpts, sink chan<- *OffRampDynamicConfigSet) (event.Subscription, error) { + + logs, sub, err := _OffRamp.contract.WatchLogs(opts, "DynamicConfigSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OffRampDynamicConfigSet) + if err := _OffRamp.contract.UnpackLog(event, "DynamicConfigSet", 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 +} + +func (_OffRamp *OffRampFilterer) ParseDynamicConfigSet(log types.Log) (*OffRampDynamicConfigSet, error) { + event := new(OffRampDynamicConfigSet) + if err := _OffRamp.contract.UnpackLog(event, "DynamicConfigSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OffRampExecutionStateChangedIterator struct { + Event *OffRampExecutionStateChanged + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OffRampExecutionStateChangedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OffRampExecutionStateChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OffRampExecutionStateChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OffRampExecutionStateChangedIterator) Error() error { + return it.fail +} + +func (it *OffRampExecutionStateChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OffRampExecutionStateChanged struct { + SourceChainSelector uint64 + SequenceNumber uint64 + MessageId [32]byte + MessageHash [32]byte + State uint8 + ReturnData []byte + GasUsed *big.Int + Raw types.Log +} + +func (_OffRamp *OffRampFilterer) FilterExecutionStateChanged(opts *bind.FilterOpts, sourceChainSelector []uint64, sequenceNumber []uint64, messageId [][32]byte) (*OffRampExecutionStateChangedIterator, error) { + + var sourceChainSelectorRule []interface{} + for _, sourceChainSelectorItem := range sourceChainSelector { + sourceChainSelectorRule = append(sourceChainSelectorRule, sourceChainSelectorItem) + } + var sequenceNumberRule []interface{} + for _, sequenceNumberItem := range sequenceNumber { + sequenceNumberRule = append(sequenceNumberRule, sequenceNumberItem) + } + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _OffRamp.contract.FilterLogs(opts, "ExecutionStateChanged", sourceChainSelectorRule, sequenceNumberRule, messageIdRule) + if err != nil { + return nil, err + } + return &OffRampExecutionStateChangedIterator{contract: _OffRamp.contract, event: "ExecutionStateChanged", logs: logs, sub: sub}, nil +} + +func (_OffRamp *OffRampFilterer) WatchExecutionStateChanged(opts *bind.WatchOpts, sink chan<- *OffRampExecutionStateChanged, sourceChainSelector []uint64, sequenceNumber []uint64, messageId [][32]byte) (event.Subscription, error) { + + var sourceChainSelectorRule []interface{} + for _, sourceChainSelectorItem := range sourceChainSelector { + sourceChainSelectorRule = append(sourceChainSelectorRule, sourceChainSelectorItem) + } + var sequenceNumberRule []interface{} + for _, sequenceNumberItem := range sequenceNumber { + sequenceNumberRule = append(sequenceNumberRule, sequenceNumberItem) + } + var messageIdRule []interface{} + for _, messageIdItem := range messageId { + messageIdRule = append(messageIdRule, messageIdItem) + } + + logs, sub, err := _OffRamp.contract.WatchLogs(opts, "ExecutionStateChanged", sourceChainSelectorRule, sequenceNumberRule, messageIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OffRampExecutionStateChanged) + if err := _OffRamp.contract.UnpackLog(event, "ExecutionStateChanged", 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 +} + +func (_OffRamp *OffRampFilterer) ParseExecutionStateChanged(log types.Log) (*OffRampExecutionStateChanged, error) { + event := new(OffRampExecutionStateChanged) + if err := _OffRamp.contract.UnpackLog(event, "ExecutionStateChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OffRampOwnershipTransferRequestedIterator struct { + Event *OffRampOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OffRampOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OffRampOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OffRampOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OffRampOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *OffRampOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OffRampOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OffRamp *OffRampFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OffRampOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OffRamp.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &OffRampOwnershipTransferRequestedIterator{contract: _OffRamp.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_OffRamp *OffRampFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OffRampOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OffRamp.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OffRampOwnershipTransferRequested) + if err := _OffRamp.contract.UnpackLog(event, "OwnershipTransferRequested", 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 +} + +func (_OffRamp *OffRampFilterer) ParseOwnershipTransferRequested(log types.Log) (*OffRampOwnershipTransferRequested, error) { + event := new(OffRampOwnershipTransferRequested) + if err := _OffRamp.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OffRampOwnershipTransferredIterator struct { + Event *OffRampOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OffRampOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OffRampOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OffRampOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OffRampOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *OffRampOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OffRampOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OffRamp *OffRampFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OffRampOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OffRamp.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &OffRampOwnershipTransferredIterator{contract: _OffRamp.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_OffRamp *OffRampFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OffRampOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OffRamp.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OffRampOwnershipTransferred) + if err := _OffRamp.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 +} + +func (_OffRamp *OffRampFilterer) ParseOwnershipTransferred(log types.Log) (*OffRampOwnershipTransferred, error) { + event := new(OffRampOwnershipTransferred) + if err := _OffRamp.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OffRampRootRemovedIterator struct { + Event *OffRampRootRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OffRampRootRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OffRampRootRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OffRampRootRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OffRampRootRemovedIterator) Error() error { + return it.fail +} + +func (it *OffRampRootRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OffRampRootRemoved struct { + Root [32]byte + Raw types.Log +} + +func (_OffRamp *OffRampFilterer) FilterRootRemoved(opts *bind.FilterOpts) (*OffRampRootRemovedIterator, error) { + + logs, sub, err := _OffRamp.contract.FilterLogs(opts, "RootRemoved") + if err != nil { + return nil, err + } + return &OffRampRootRemovedIterator{contract: _OffRamp.contract, event: "RootRemoved", logs: logs, sub: sub}, nil +} + +func (_OffRamp *OffRampFilterer) WatchRootRemoved(opts *bind.WatchOpts, sink chan<- *OffRampRootRemoved) (event.Subscription, error) { + + logs, sub, err := _OffRamp.contract.WatchLogs(opts, "RootRemoved") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OffRampRootRemoved) + if err := _OffRamp.contract.UnpackLog(event, "RootRemoved", 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 +} + +func (_OffRamp *OffRampFilterer) ParseRootRemoved(log types.Log) (*OffRampRootRemoved, error) { + event := new(OffRampRootRemoved) + if err := _OffRamp.contract.UnpackLog(event, "RootRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OffRampSkippedAlreadyExecutedMessageIterator struct { + Event *OffRampSkippedAlreadyExecutedMessage + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OffRampSkippedAlreadyExecutedMessageIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OffRampSkippedAlreadyExecutedMessage) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OffRampSkippedAlreadyExecutedMessage) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OffRampSkippedAlreadyExecutedMessageIterator) Error() error { + return it.fail +} + +func (it *OffRampSkippedAlreadyExecutedMessageIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OffRampSkippedAlreadyExecutedMessage struct { + SourceChainSelector uint64 + SequenceNumber uint64 + Raw types.Log +} + +func (_OffRamp *OffRampFilterer) FilterSkippedAlreadyExecutedMessage(opts *bind.FilterOpts) (*OffRampSkippedAlreadyExecutedMessageIterator, error) { + + logs, sub, err := _OffRamp.contract.FilterLogs(opts, "SkippedAlreadyExecutedMessage") + if err != nil { + return nil, err + } + return &OffRampSkippedAlreadyExecutedMessageIterator{contract: _OffRamp.contract, event: "SkippedAlreadyExecutedMessage", logs: logs, sub: sub}, nil +} + +func (_OffRamp *OffRampFilterer) WatchSkippedAlreadyExecutedMessage(opts *bind.WatchOpts, sink chan<- *OffRampSkippedAlreadyExecutedMessage) (event.Subscription, error) { + + logs, sub, err := _OffRamp.contract.WatchLogs(opts, "SkippedAlreadyExecutedMessage") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OffRampSkippedAlreadyExecutedMessage) + if err := _OffRamp.contract.UnpackLog(event, "SkippedAlreadyExecutedMessage", 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 +} + +func (_OffRamp *OffRampFilterer) ParseSkippedAlreadyExecutedMessage(log types.Log) (*OffRampSkippedAlreadyExecutedMessage, error) { + event := new(OffRampSkippedAlreadyExecutedMessage) + if err := _OffRamp.contract.UnpackLog(event, "SkippedAlreadyExecutedMessage", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OffRampSkippedReportExecutionIterator struct { + Event *OffRampSkippedReportExecution + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OffRampSkippedReportExecutionIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OffRampSkippedReportExecution) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OffRampSkippedReportExecution) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OffRampSkippedReportExecutionIterator) Error() error { + return it.fail +} + +func (it *OffRampSkippedReportExecutionIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OffRampSkippedReportExecution struct { + SourceChainSelector uint64 + Raw types.Log +} + +func (_OffRamp *OffRampFilterer) FilterSkippedReportExecution(opts *bind.FilterOpts) (*OffRampSkippedReportExecutionIterator, error) { + + logs, sub, err := _OffRamp.contract.FilterLogs(opts, "SkippedReportExecution") + if err != nil { + return nil, err + } + return &OffRampSkippedReportExecutionIterator{contract: _OffRamp.contract, event: "SkippedReportExecution", logs: logs, sub: sub}, nil +} + +func (_OffRamp *OffRampFilterer) WatchSkippedReportExecution(opts *bind.WatchOpts, sink chan<- *OffRampSkippedReportExecution) (event.Subscription, error) { + + logs, sub, err := _OffRamp.contract.WatchLogs(opts, "SkippedReportExecution") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OffRampSkippedReportExecution) + if err := _OffRamp.contract.UnpackLog(event, "SkippedReportExecution", 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 +} + +func (_OffRamp *OffRampFilterer) ParseSkippedReportExecution(log types.Log) (*OffRampSkippedReportExecution, error) { + event := new(OffRampSkippedReportExecution) + if err := _OffRamp.contract.UnpackLog(event, "SkippedReportExecution", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OffRampSourceChainConfigSetIterator struct { + Event *OffRampSourceChainConfigSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OffRampSourceChainConfigSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OffRampSourceChainConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OffRampSourceChainConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OffRampSourceChainConfigSetIterator) Error() error { + return it.fail +} + +func (it *OffRampSourceChainConfigSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OffRampSourceChainConfigSet struct { + SourceChainSelector uint64 + SourceConfig OffRampSourceChainConfig + Raw types.Log +} + +func (_OffRamp *OffRampFilterer) FilterSourceChainConfigSet(opts *bind.FilterOpts, sourceChainSelector []uint64) (*OffRampSourceChainConfigSetIterator, error) { + + var sourceChainSelectorRule []interface{} + for _, sourceChainSelectorItem := range sourceChainSelector { + sourceChainSelectorRule = append(sourceChainSelectorRule, sourceChainSelectorItem) + } + + logs, sub, err := _OffRamp.contract.FilterLogs(opts, "SourceChainConfigSet", sourceChainSelectorRule) + if err != nil { + return nil, err + } + return &OffRampSourceChainConfigSetIterator{contract: _OffRamp.contract, event: "SourceChainConfigSet", logs: logs, sub: sub}, nil +} + +func (_OffRamp *OffRampFilterer) WatchSourceChainConfigSet(opts *bind.WatchOpts, sink chan<- *OffRampSourceChainConfigSet, sourceChainSelector []uint64) (event.Subscription, error) { + + var sourceChainSelectorRule []interface{} + for _, sourceChainSelectorItem := range sourceChainSelector { + sourceChainSelectorRule = append(sourceChainSelectorRule, sourceChainSelectorItem) + } + + logs, sub, err := _OffRamp.contract.WatchLogs(opts, "SourceChainConfigSet", sourceChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OffRampSourceChainConfigSet) + if err := _OffRamp.contract.UnpackLog(event, "SourceChainConfigSet", 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 +} + +func (_OffRamp *OffRampFilterer) ParseSourceChainConfigSet(log types.Log) (*OffRampSourceChainConfigSet, error) { + event := new(OffRampSourceChainConfigSet) + if err := _OffRamp.contract.UnpackLog(event, "SourceChainConfigSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OffRampSourceChainSelectorAddedIterator struct { + Event *OffRampSourceChainSelectorAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OffRampSourceChainSelectorAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OffRampSourceChainSelectorAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OffRampSourceChainSelectorAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OffRampSourceChainSelectorAddedIterator) Error() error { + return it.fail +} + +func (it *OffRampSourceChainSelectorAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OffRampSourceChainSelectorAdded struct { + SourceChainSelector uint64 + Raw types.Log +} + +func (_OffRamp *OffRampFilterer) FilterSourceChainSelectorAdded(opts *bind.FilterOpts) (*OffRampSourceChainSelectorAddedIterator, error) { + + logs, sub, err := _OffRamp.contract.FilterLogs(opts, "SourceChainSelectorAdded") + if err != nil { + return nil, err + } + return &OffRampSourceChainSelectorAddedIterator{contract: _OffRamp.contract, event: "SourceChainSelectorAdded", logs: logs, sub: sub}, nil +} + +func (_OffRamp *OffRampFilterer) WatchSourceChainSelectorAdded(opts *bind.WatchOpts, sink chan<- *OffRampSourceChainSelectorAdded) (event.Subscription, error) { + + logs, sub, err := _OffRamp.contract.WatchLogs(opts, "SourceChainSelectorAdded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OffRampSourceChainSelectorAdded) + if err := _OffRamp.contract.UnpackLog(event, "SourceChainSelectorAdded", 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 +} + +func (_OffRamp *OffRampFilterer) ParseSourceChainSelectorAdded(log types.Log) (*OffRampSourceChainSelectorAdded, error) { + event := new(OffRampSourceChainSelectorAdded) + if err := _OffRamp.contract.UnpackLog(event, "SourceChainSelectorAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OffRampStaticConfigSetIterator struct { + Event *OffRampStaticConfigSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OffRampStaticConfigSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OffRampStaticConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OffRampStaticConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OffRampStaticConfigSetIterator) Error() error { + return it.fail +} + +func (it *OffRampStaticConfigSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OffRampStaticConfigSet struct { + StaticConfig OffRampStaticConfig + Raw types.Log +} + +func (_OffRamp *OffRampFilterer) FilterStaticConfigSet(opts *bind.FilterOpts) (*OffRampStaticConfigSetIterator, error) { + + logs, sub, err := _OffRamp.contract.FilterLogs(opts, "StaticConfigSet") + if err != nil { + return nil, err + } + return &OffRampStaticConfigSetIterator{contract: _OffRamp.contract, event: "StaticConfigSet", logs: logs, sub: sub}, nil +} + +func (_OffRamp *OffRampFilterer) WatchStaticConfigSet(opts *bind.WatchOpts, sink chan<- *OffRampStaticConfigSet) (event.Subscription, error) { + + logs, sub, err := _OffRamp.contract.WatchLogs(opts, "StaticConfigSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OffRampStaticConfigSet) + if err := _OffRamp.contract.UnpackLog(event, "StaticConfigSet", 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 +} + +func (_OffRamp *OffRampFilterer) ParseStaticConfigSet(log types.Log) (*OffRampStaticConfigSet, error) { + event := new(OffRampStaticConfigSet) + if err := _OffRamp.contract.UnpackLog(event, "StaticConfigSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OffRampTransmittedIterator struct { + Event *OffRampTransmitted + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OffRampTransmittedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OffRampTransmitted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OffRampTransmitted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OffRampTransmittedIterator) Error() error { + return it.fail +} + +func (it *OffRampTransmittedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OffRampTransmitted struct { + OcrPluginType uint8 + ConfigDigest [32]byte + SequenceNumber uint64 + Raw types.Log +} + +func (_OffRamp *OffRampFilterer) FilterTransmitted(opts *bind.FilterOpts, ocrPluginType []uint8) (*OffRampTransmittedIterator, error) { + + var ocrPluginTypeRule []interface{} + for _, ocrPluginTypeItem := range ocrPluginType { + ocrPluginTypeRule = append(ocrPluginTypeRule, ocrPluginTypeItem) + } + + logs, sub, err := _OffRamp.contract.FilterLogs(opts, "Transmitted", ocrPluginTypeRule) + if err != nil { + return nil, err + } + return &OffRampTransmittedIterator{contract: _OffRamp.contract, event: "Transmitted", logs: logs, sub: sub}, nil +} + +func (_OffRamp *OffRampFilterer) WatchTransmitted(opts *bind.WatchOpts, sink chan<- *OffRampTransmitted, ocrPluginType []uint8) (event.Subscription, error) { + + var ocrPluginTypeRule []interface{} + for _, ocrPluginTypeItem := range ocrPluginType { + ocrPluginTypeRule = append(ocrPluginTypeRule, ocrPluginTypeItem) + } + + logs, sub, err := _OffRamp.contract.WatchLogs(opts, "Transmitted", ocrPluginTypeRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OffRampTransmitted) + if err := _OffRamp.contract.UnpackLog(event, "Transmitted", 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 +} + +func (_OffRamp *OffRampFilterer) ParseTransmitted(log types.Log) (*OffRampTransmitted, error) { + event := new(OffRampTransmitted) + if err := _OffRamp.contract.UnpackLog(event, "Transmitted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (_OffRamp *OffRamp) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _OffRamp.abi.Events["AlreadyAttempted"].ID: + return _OffRamp.ParseAlreadyAttempted(log) + case _OffRamp.abi.Events["CommitReportAccepted"].ID: + return _OffRamp.ParseCommitReportAccepted(log) + case _OffRamp.abi.Events["ConfigSet"].ID: + return _OffRamp.ParseConfigSet(log) + case _OffRamp.abi.Events["DynamicConfigSet"].ID: + return _OffRamp.ParseDynamicConfigSet(log) + case _OffRamp.abi.Events["ExecutionStateChanged"].ID: + return _OffRamp.ParseExecutionStateChanged(log) + case _OffRamp.abi.Events["OwnershipTransferRequested"].ID: + return _OffRamp.ParseOwnershipTransferRequested(log) + case _OffRamp.abi.Events["OwnershipTransferred"].ID: + return _OffRamp.ParseOwnershipTransferred(log) + case _OffRamp.abi.Events["RootRemoved"].ID: + return _OffRamp.ParseRootRemoved(log) + case _OffRamp.abi.Events["SkippedAlreadyExecutedMessage"].ID: + return _OffRamp.ParseSkippedAlreadyExecutedMessage(log) + case _OffRamp.abi.Events["SkippedReportExecution"].ID: + return _OffRamp.ParseSkippedReportExecution(log) + case _OffRamp.abi.Events["SourceChainConfigSet"].ID: + return _OffRamp.ParseSourceChainConfigSet(log) + case _OffRamp.abi.Events["SourceChainSelectorAdded"].ID: + return _OffRamp.ParseSourceChainSelectorAdded(log) + case _OffRamp.abi.Events["StaticConfigSet"].ID: + return _OffRamp.ParseStaticConfigSet(log) + case _OffRamp.abi.Events["Transmitted"].ID: + return _OffRamp.ParseTransmitted(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (OffRampAlreadyAttempted) Topic() common.Hash { + return common.HexToHash("0x3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120") +} + +func (OffRampCommitReportAccepted) Topic() common.Hash { + return common.HexToHash("0x35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e4") +} + +func (OffRampConfigSet) Topic() common.Hash { + return common.HexToHash("0xab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547") +} + +func (OffRampDynamicConfigSet) Topic() common.Hash { + return common.HexToHash("0xcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee") +} + +func (OffRampExecutionStateChanged) Topic() common.Hash { + return common.HexToHash("0x05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b") +} + +func (OffRampOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (OffRampOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (OffRampRootRemoved) Topic() common.Hash { + return common.HexToHash("0x202f1139a3e334b6056064c0e9b19fd07e44a88d8f6e5ded571b24cf8c371f12") +} + +func (OffRampSkippedAlreadyExecutedMessage) Topic() common.Hash { + return common.HexToHash("0x3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c") +} + +func (OffRampSkippedReportExecution) Topic() common.Hash { + return common.HexToHash("0xaab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d894933") +} + +func (OffRampSourceChainConfigSet) Topic() common.Hash { + return common.HexToHash("0x49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b") +} + +func (OffRampSourceChainSelectorAdded) Topic() common.Hash { + return common.HexToHash("0xf4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb9") +} + +func (OffRampStaticConfigSet) Topic() common.Hash { + return common.HexToHash("0x683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d8") +} + +func (OffRampTransmitted) Topic() common.Hash { + return common.HexToHash("0x198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0") +} + +func (_OffRamp *OffRamp) Address() common.Address { + return _OffRamp.address +} + +type OffRampInterface interface { + CcipReceive(opts *bind.CallOpts, arg0 ClientAny2EVMMessage) error + + GetAllSourceChainConfigs(opts *bind.CallOpts) ([]uint64, []OffRampSourceChainConfig, error) + + GetDynamicConfig(opts *bind.CallOpts) (OffRampDynamicConfig, error) + + GetExecutionState(opts *bind.CallOpts, sourceChainSelector uint64, sequenceNumber uint64) (uint8, error) + + GetLatestPriceSequenceNumber(opts *bind.CallOpts) (uint64, error) + + GetMerkleRoot(opts *bind.CallOpts, sourceChainSelector uint64, root [32]byte) (*big.Int, error) + + GetSourceChainConfig(opts *bind.CallOpts, sourceChainSelector uint64) (OffRampSourceChainConfig, error) + + GetStaticConfig(opts *bind.CallOpts) (OffRampStaticConfig, error) + + LatestConfigDetails(opts *bind.CallOpts, ocrPluginType uint8) (MultiOCR3BaseOCRConfig, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + ApplySourceChainConfigUpdates(opts *bind.TransactOpts, sourceChainConfigUpdates []OffRampSourceChainConfigArgs) (*types.Transaction, error) + + Commit(opts *bind.TransactOpts, reportContext [3][32]byte, report []byte, rs [][32]byte, ss [][32]byte, rawVs [32]byte) (*types.Transaction, error) + + Execute(opts *bind.TransactOpts, reportContext [3][32]byte, report []byte) (*types.Transaction, error) + + ExecuteSingleMessage(opts *bind.TransactOpts, message InternalAny2EVMRampMessage, offchainTokenData [][]byte, tokenGasOverrides []uint32) (*types.Transaction, error) + + ManuallyExecute(opts *bind.TransactOpts, reports []InternalExecutionReport, gasLimitOverrides [][]OffRampGasLimitOverride) (*types.Transaction, error) + + SetDynamicConfig(opts *bind.TransactOpts, dynamicConfig OffRampDynamicConfig) (*types.Transaction, error) + + SetOCR3Configs(opts *bind.TransactOpts, ocrConfigArgs []MultiOCR3BaseOCRConfigArgs) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + FilterAlreadyAttempted(opts *bind.FilterOpts) (*OffRampAlreadyAttemptedIterator, error) + + WatchAlreadyAttempted(opts *bind.WatchOpts, sink chan<- *OffRampAlreadyAttempted) (event.Subscription, error) + + ParseAlreadyAttempted(log types.Log) (*OffRampAlreadyAttempted, error) + + FilterCommitReportAccepted(opts *bind.FilterOpts) (*OffRampCommitReportAcceptedIterator, error) + + WatchCommitReportAccepted(opts *bind.WatchOpts, sink chan<- *OffRampCommitReportAccepted) (event.Subscription, error) + + ParseCommitReportAccepted(log types.Log) (*OffRampCommitReportAccepted, error) + + FilterConfigSet(opts *bind.FilterOpts) (*OffRampConfigSetIterator, error) + + WatchConfigSet(opts *bind.WatchOpts, sink chan<- *OffRampConfigSet) (event.Subscription, error) + + ParseConfigSet(log types.Log) (*OffRampConfigSet, error) + + FilterDynamicConfigSet(opts *bind.FilterOpts) (*OffRampDynamicConfigSetIterator, error) + + WatchDynamicConfigSet(opts *bind.WatchOpts, sink chan<- *OffRampDynamicConfigSet) (event.Subscription, error) + + ParseDynamicConfigSet(log types.Log) (*OffRampDynamicConfigSet, error) + + FilterExecutionStateChanged(opts *bind.FilterOpts, sourceChainSelector []uint64, sequenceNumber []uint64, messageId [][32]byte) (*OffRampExecutionStateChangedIterator, error) + + WatchExecutionStateChanged(opts *bind.WatchOpts, sink chan<- *OffRampExecutionStateChanged, sourceChainSelector []uint64, sequenceNumber []uint64, messageId [][32]byte) (event.Subscription, error) + + ParseExecutionStateChanged(log types.Log) (*OffRampExecutionStateChanged, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OffRampOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OffRampOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*OffRampOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OffRampOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OffRampOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*OffRampOwnershipTransferred, error) + + FilterRootRemoved(opts *bind.FilterOpts) (*OffRampRootRemovedIterator, error) + + WatchRootRemoved(opts *bind.WatchOpts, sink chan<- *OffRampRootRemoved) (event.Subscription, error) + + ParseRootRemoved(log types.Log) (*OffRampRootRemoved, error) + + FilterSkippedAlreadyExecutedMessage(opts *bind.FilterOpts) (*OffRampSkippedAlreadyExecutedMessageIterator, error) + + WatchSkippedAlreadyExecutedMessage(opts *bind.WatchOpts, sink chan<- *OffRampSkippedAlreadyExecutedMessage) (event.Subscription, error) + + ParseSkippedAlreadyExecutedMessage(log types.Log) (*OffRampSkippedAlreadyExecutedMessage, error) + + FilterSkippedReportExecution(opts *bind.FilterOpts) (*OffRampSkippedReportExecutionIterator, error) + + WatchSkippedReportExecution(opts *bind.WatchOpts, sink chan<- *OffRampSkippedReportExecution) (event.Subscription, error) + + ParseSkippedReportExecution(log types.Log) (*OffRampSkippedReportExecution, error) + + FilterSourceChainConfigSet(opts *bind.FilterOpts, sourceChainSelector []uint64) (*OffRampSourceChainConfigSetIterator, error) + + WatchSourceChainConfigSet(opts *bind.WatchOpts, sink chan<- *OffRampSourceChainConfigSet, sourceChainSelector []uint64) (event.Subscription, error) + + ParseSourceChainConfigSet(log types.Log) (*OffRampSourceChainConfigSet, error) + + FilterSourceChainSelectorAdded(opts *bind.FilterOpts) (*OffRampSourceChainSelectorAddedIterator, error) + + WatchSourceChainSelectorAdded(opts *bind.WatchOpts, sink chan<- *OffRampSourceChainSelectorAdded) (event.Subscription, error) + + ParseSourceChainSelectorAdded(log types.Log) (*OffRampSourceChainSelectorAdded, error) + + FilterStaticConfigSet(opts *bind.FilterOpts) (*OffRampStaticConfigSetIterator, error) + + WatchStaticConfigSet(opts *bind.WatchOpts, sink chan<- *OffRampStaticConfigSet) (event.Subscription, error) + + ParseStaticConfigSet(log types.Log) (*OffRampStaticConfigSet, error) + + FilterTransmitted(opts *bind.FilterOpts, ocrPluginType []uint8) (*OffRampTransmittedIterator, error) + + WatchTransmitted(opts *bind.WatchOpts, sink chan<- *OffRampTransmitted, ocrPluginType []uint8) (event.Subscription, error) + + ParseTransmitted(log types.Log) (*OffRampTransmitted, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var OffRampZKBin string = ("0x0004000000000002002b000000000002000000600310027000000c6d0030019d00000c6d033001970003000000310355001d00000001035300020000000103550000000100200190001c00000003001d000000290000c13d0000008001000039001500000001001d000000400010043f000000040030008c0000004c0000413d0000001d0100035f000000000101043b000000e00210027000000c910020009c000000580000a13d00000c920020009c0000001c01000029000000e50000213d00000c990020009c0000077b0000a13d00000c9a0020009c00000b2e0000613d00000c9b0020009c00000a760000613d00000c9c0020009c0000004c0000c13d0000000001000416000000000001004b0000004c0000c13d0000000101000039000000000101041a00000c7201100197000000800010043f00000caf01000041000031b20001042e0000012003000039000000400030043f0000000001000416000000000001004b0000004c0000c13d0000001c080000290000001f0180003900000c6e011001970000012001100039000000400010043f0000001f0480018f00000c6f0580019800000120025000390000001d0700035f0000003d0000613d000000000607034f000000006106043c0000000003130436000000000023004b000000390000c13d000000000004004b0000004a0000613d000000000157034f0000000303400210000000000402043300000000043401cf000000000434022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000141019f0000000000120435000001200080008c0000004e0000813d0000000001000019000031b300010430000000400100043d001d00000001001d00000c700010009c0000011a0000a13d00000d0a01000041000000000010043f0000004101000039000000040010043f00000c8501000041000031b30001043000000c9f0020009c0000001c01000029000001820000a13d00000ca00020009c0000076e0000a13d00000ca10020009c00000a250000613d00000ca20020009c000009e70000613d00000ca30020009c0000004c0000c13d0000001c0100002900120044001000940000004c0000413d0000000001000416000000000001004b0000004c0000c13d0000001d0100035f0000000401100370000000000201043b00000c710020009c0000004c0000213d00000023012000390000001c0010006c0000004c0000813d0000000403200039000c00000003001d0000001d0130035f000000000301043b00000c710030009c000000520000213d00000005043002100000003f0140003900000c730110019700000c700010009c000000520000213d0000008001100039000000400010043f000000800030043f000000240120003900000000020100190000000004140019000b00000004001d0000001c0040006c0000004c0000213d000000000003004b0000001d0700035f00000fb80000c13d0000002401700370000000000101043b001b00000001001d00000c710010009c0000004c0000213d0000001b0100002900000023011000390000001c0010006c000000000200001900000c750200804100000c7501100197000000000001004b000000000300001900000c750300404100000c750010009c000000000302c019000000000003004b0000004c0000c13d0000001b0100002900000004011000390000001d0110035f000000000501043b00000c710050009c000000520000213d00000005045002100000003f0140003900000c7301100197000000400300043d0000000002130019001900000003001d000000000032004b0000000001000039000000010100403900000c710020009c000000520000213d0000000100100190000000520000c13d000000400020043f00000019010000290000000001510436001800000001001d0000001b0100002900000024031000390000000002340019001a00000002001d0000001c0020006c0000004c0000213d000000000005004b0000001d0100035f0000167d0000c13d00000cc9010000410000000000100443000000000100041200000004001004430000002400000443000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000cca011001c7000080050200003931b131ac0000040f0000000100200190000025790000613d000000000101043b001d00000001001d00000c77010000410000000000100443000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c78011001c70000800b0200003931b131ac0000040f0000000100200190000025790000613d000000000101043b0000001d0010006b0000257a0000c13d00000019010000290000000002010433000000800100043d000000000021004b000000180f000029000018580000c13d000000000001004b000018090000c13d0000008001000039000000190200002931b129970000040f0000000001000019000031b20001042e00000c930020009c000007a70000a13d00000c940020009c00000b4b0000613d00000c950020009c00000aa40000613d00000c960020009c0000004c0000c13d0000001c01000029000000240210008c0000004c0000413d0000000001000416000000000001004b0000004c0000c13d0000001d0100035f0000000401100370000000000301043b00000c710030009c0000004c0000213d00000023013000390000001c0010006c0000004c0000813d00000004013000390000001d0110035f000000000601043b00000c710060009c000000520000213d00000005056002100000003f0150003900000c730110019700000c700010009c000000520000213d0000008001100039000000400010043f000000800060043f000000240430003900000000054500190000001c0050006c0000004c0000213d000000000006004b0000001d0100035f00000ec60000c13d0000000101000039000000000101041a00000c72011001970000000002000411000000000012004b00000e0a0000c13d000000800100043d000000000001004b00000b490000613d001100000000001d000001e80000013d0000001d010000290000008001100039000000400010043f000001200100043d00000c710010009c0000004c0000213d0000001d020000290000000001120436001b00000001001d000001400100043d00000c720010009c0000004c0000213d0000001b020000290000000000120435000001600100043d00000c720010009c0000004c0000213d0000001d020000290000004002200039001a00000002001d0000000000120435000001800100043d00000c720010009c0000004c0000213d0000001d020000290000006002200039001800000002001d0000000000120435000000400100043d001900000001001d00000c700010009c000000520000213d00000019010000290000008001100039000000400010043f000001a00100043d00000c720010009c0000004c0000213d00000019020000290000000001120436001700000001001d000001c00100043d00000c6d0010009c0000004c0000213d00000017020000290000000000120435000001e00100043d000000000001004b0000000002000039000000010200c039000000000021004b0000004c0000c13d00000019020000290000004002200039001600000002001d0000000000120435000002000100043d00000c720010009c0000004c0000213d00000019020000290000006002200039001500000002001d0000000000120435000002200400043d00000c710040009c0000004c0000213d0000001c0100002900000120021000390000013f01400039000000000021004b0000004c0000813d0000012003400039000000000603043300000c710060009c000000520000213d00000005056002100000003f0150003900000c7301100197000000400800043d0000000007180019001400000008001d000000000087004b0000000001000039000000010100403900000c710070009c000000520000213d0000000100100190000000520000c13d000000400070043f00000014010000290000000001610436001300000001001d00000140044000390000000005450019000000000025004b0000004c0000213d000000000006004b000016ff0000c13d0000000001000411000000000001004b000017600000c13d000000400100043d00000c8f0200004100000e0c0000013d00000ca60020009c000004c00000213d00000ca90020009c000007c80000613d00000caa0020009c0000004c0000c13d0000000001000416000000000001004b0000004c0000c13d31b1293c0000040f000000400100043d001d00000001001d31b1290b0000040f0000000001000412002b00000001001d002a00200000003d0000800501000039000000440300003900000000040004150000002b0440008a000000050440021000000cc90200004131b131890000040f00000c7102100197001b00000002001d0000001d010000290000000001210436001c00000001001d0000000001000412002900000001001d002800400000003d0000000004000415000000290440008a0000000504400210000080050100003900000cc902000041000000440300003931b131890000040f00000c72011001970000001c0200002900000000001204350000000001000412002700000001001d002600600000003d0000000004000415000000270440008a0000000504400210000080050100003900000cc902000041000000440300003931b131890000040f00000c72011001970000001d020000290000004002200039001a00000002001d00000000001204350000000001000412002500000001001d002400800000003d0000000004000415000000250440008a0000000504400210000080050100003900000cc902000041000000440300003931b131890000040f0000001d02000029000000600220003900000c72011001970000000000120435000000400100043d0000001b0300002900000000033104360000001c04000029000000000404043300000c720440019700000000004304350000001a03000029000000000303043300000c720330019700000040041000390000000000340435000000000202043300000c72022001970000006003100039000000000023043500000c6d0010009c00000c6d01008041000000400110021000000cf1011001c7000031b20001042e000000000001004b000018740000613d0000000b02000039000000000102041a00000cbb01100197000000000012041b0000001102000029001100010020003d000000800100043d000000110010006b00000b490000813d00000011010000290000000501100210000000a00110003900000000020104330000004001200039001000000001001d0000000001010433000000ff00100190000017f90000613d001200000002001d00000020012000390000000001010433000000ff0110018f001d00000001001d000000000010043f0000000201000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000120300002900000060053000390000000002050433000000000101043b001300000001001d0000000104100039000000000104041a000000ff00100190000002150000613d000000000002004b0000000002000039000000010200603900000cb2001001980000000001000039000000010100c039000000000121013f00000001001001900000021b0000c13d0000185b0000013d00000cb501100197000000000002004b00000cb6020000410000000002006019000000000112019f000000000014041b000000a001300039000d00000001001d00000000020104330000000031020434001700000003001d000001000010008c0000178c0000213d001900000005001d001800000002001d000f00000004001d000000400300043d000000000001004b000017ff0000613d00000013010000290000000301100039000000000201041a001b00000003001d001c00000002001d0000000002230436001a00000002001d000e00000001001d000000000010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c82011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d0000001c05000029000000000005004b0000001a02000029000002480000613d000000000101043b0000001a020000290000000003000019000000000401041a00000c7204400197000000000242043600000001011000390000000103300039000000000053004b000002410000413d0000001b0300002900000000013200490000001f0110003900000d0e021001970000000001320019000000000021004b0000000002000039000000010200403900000c710010009c000000520000213d0000000100200190000000520000c13d000000400010043f0000000001030433000000000001004b000002850000613d0000000001000019001c00000001001d0000001d01000029000000000010043f0000000301000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d0000001b0200002900000000020204330000001c03000029000000000032004b000025730000a13d00000005023002100000001a02200029000000000202043300000c7202200197000000000101043b000000000020043f000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b000000000001041b0000001c0200002900000001022000390000001b010000290000000001010433000000000012004b0000000001020019000002590000413d00000019010000290000000001010433000000000001004b0000001301000029001400020010003d000003a20000613d0000001401000029000000000301041a000000400200043d001b00000002001d001c00000003001d0000000002320436001a00000002001d000000000010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c82011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d0000001c05000029000000000005004b0000001a02000029000002aa0000613d000000000101043b0000001a020000290000000003000019000000000401041a00000c7204400197000000000242043600000001011000390000000103300039000000000053004b000002a30000413d0000001b0120006a0000001f0110003900000d0e021001970000001b01200029000000000021004b0000000002000039000000010200403900000c710010009c000000520000213d0000000100200190000000520000c13d000000400010043f0000001b010000290000000001010433000000000001004b000002e70000613d0000000001000019001c00000001001d0000001d01000029000000000010043f0000000301000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d0000001b0200002900000000020204330000001c03000029000000000032004b000025730000a13d00000005023002100000001a02200029000000000202043300000c7202200197000000000101043b000000000020043f000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b000000000001041b0000001c0200002900000001022000390000001b010000290000000001010433000000000012004b0000000001020019000002bb0000413d000000120100002900000080011000390000000001010433001600000001001d0000000014010434001500000001001d000001000040008c000018610000213d00000010010000290000000001010433000000fe0210018f000000550020008c0000000f03000029000000180200002900000b280000213d00000003011000c9000000ff0110018f000000000014004b000018670000a13d0000000001020433000000000014004b0000178c0000413d000000000103041a00000d0f0110019700000008024002100000ff000220018f000000000121019f000000000013041b0000001401000029000000000201041a000000000041041b001c00000004001d000000000024004b0000031e0000813d001b00000002001d0000001401000029000000000010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c82011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000201043b0000001c012000290000001b02200029000000000021004b0000031e0000813d000000000001041b0000000101100039000000000021004b0000031a0000413d0000001401000029000000000010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c82011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b000000000200001900000016030000290000001c0600002900000000041200190000002003300039000000000503043300000c7205500197000000000054041b0000000102200039000000000062004b0000032d0000413d00000016010000290000000001010433000000000001004b000003a20000613d0000000002000019001b00000002001d000000050120021000000015011000290000000001010433001c00000001001d0000001d01000029000000000010043f0000000301000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d0000001c0200002900000c7202200197000000000101043b001c00000002001d000000000020043f000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b000000000101041a0000000801100270000000ff0110018f000000020010008c000017df0000213d000000000001004b0000166b0000c13d000000400300043d0000001c0000006b0000001b02000029000016760000613d00000c880030009c000000520000213d0000004001300039000000400010043f000000ff0120018f001a00000003001d00000000021304360000000101000039001900000002001d00000000001204350000001d01000029000000000010043f0000000301000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b0000001c02000029000000000020043f000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b000000000201041a00000d10022001970000001a030000290000000003030433000000ff0330018f000000000232019f000000000021041b00000019030000290000000003030433000000020030008c000017df0000213d00000d0f0220019700000008033002100000ff000330018f000000000223019f000000000021041b0000001b02000029000000010220003900000016010000290000000001010433000000000012004b0000033a0000413d00000018010000290000000001010433000000000001004b000004120000613d0000000002000019001b00000002001d000000050120021000000017011000290000000001010433001c00000001001d0000001d01000029000000000010043f0000000301000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d0000001c0200002900000c7202200197000000000101043b001c00000002001d000000000020043f000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b000000000101041a0000000801100270000000ff0110018f000000020010008c000017df0000213d000000000001004b0000166b0000c13d000000400300043d0000001c0000006b0000001b02000029000016760000613d00000c880030009c000000520000213d0000004001300039000000400010043f000000ff0120018f001a00000003001d00000000021304360000000201000039001900000002001d00000000001204350000001d01000029000000000010043f0000000301000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b0000001c02000029000000000020043f000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b000000000201041a00000d10022001970000001a030000290000000003030433000000ff0330018f000000000232019f000000000021041b00000019030000290000000003030433000000020030008c000017df0000213d00000d0f0220019700000008033002100000ff000330018f000000000223019f000000000021041b0000001b02000029000000010220003900000018010000290000000001010433000000000012004b000003a70000413d00000c710010009c000004130000a13d000000520000013d00000000010000190000000e03000029000000000203041a000000000013041b001c00000001001d000000000021004b0000042e0000813d001b00000002001d000000000030043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c82011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000201043b0000001c012000290000001b02200029000000000021004b0000000e030000290000042e0000813d000000000001041b0000000101100039000000000021004b0000042a0000413d000000000030043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c82011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b0000001c06000029000000000006004b0000001805000029000004460000613d000000000200001900000000031200190000002005500039000000000405043300000c7204400197000000000043041b0000000102200039000000000062004b0000043e0000413d0000000f03000029000000000103041a00000d100110019700000010020000290000000002020433001c00ff002001930000001c011001af000000000013041b000000120100002900000000010104330000001302000029000000000012041b0000000d020000290000000002020433001b00000002001d000000400400043d0000004002400039000000a0030000390000000000320435000000200240003900000000001204350000001d010000290000000000140435001a00000004001d000000a0014000390000001402000029000000000302041a001900000003001d0000000000310435000000000020043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c82011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d0000001a05000029000000c0025000390000001907000029000000000007004b0000047d0000613d000000000101043b00000000030000190000001b06000029000000000401041a00000c7204400197000000000242043600000001011000390000000103300039000000000073004b000004750000413d0000047e0000013d0000001b0600002900000000015200490000006003500039000000000013043500000000030604330000000001320436000000000003004b0000048d0000613d00000000020000190000002006600039000000000406043300000c720440019700000000014104360000000102200039000000000032004b000004860000413d00000080025000390000001c030000290000000000320435000000000151004900000c6d0010009c00000c6d01008041000000600110021000000c6d0050009c00000c6d050080410000004002500210000000000121019f000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000121019f00000c83011001c70000800d02000039000000010300003900000cb90400004131b131a70000040f00000001002001900000004c0000613d0000001d01000029000000000010043f0000000201000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b0000000101100039000000000101041a0000001001100270000000ff0110018f0000001d02000029000000000002004b000001dd0000613d000000010020008c000001e30000c13d000000000001004b000001e30000613d000000400100043d00000cba0200004100000e0c0000013d00000ca70020009c000009d30000613d00000ca80020009c0000004c0000c13d0000001c01000029000000e40010008c0000004c0000413d0000000001000416000000000001004b0000004c0000c13d0000001d0100035f0000006401100370000000000301043b00000c710030009c0000004c0000213d00000023013000390000001c0010006c0000004c0000813d00000004023000390000001d0120035f000000000101043b001b00000001001d00000c710010009c0000004c0000213d0000002403300039001900000003001d0000001b03300029001a00000003001d0000001c0030006c0000004c0000213d0000001d0100035f0000008401100370000000000301043b00000c710030009c0000004c0000213d00000023013000390000001c0010006c0000004c0000813d00000004013000390000001d0110035f000000000101043b001800000001001d00000c710010009c0000004c0000213d000000240130003900000018030000290000000503300210001700000001001d001500000003001d0000000003130019001600000003001d0000001c0030006c0000004c0000213d0000001d0100035f000000a401100370000000000301043b00000c710030009c0000004c0000213d00000023013000390000001c0010006c0000004c0000813d00000004013000390000001d0110035f000000000101043b001400000001001d00000c710010009c0000004c0000213d0000001b01000029000000200010008c0000004c0000413d000000240130003900000014030000290000000503300210001300000001001d001100000003001d0000000003130019001200000003001d0000001c0030006c0000004c0000213d00000020012000390000001d0110035f000000000101043b00000c710010009c0000004c0000213d00000019011000290000001a0210006900000c740020009c0000004c0000213d000000600020008c0000004c0000413d000000e003000039000000400030043f0000001d0210035f000000000202043b00000c710020009c0000004c0000213d00000000021200190000001a0420006900000c740040009c0000004c0000213d000000400040008c0000004c0000413d0000012004000039000000400040043f0000001d0520035f000000000505043b00000c710050009c0000004c0000213d00000000052500190000001f065000390000001a0060006c0000004c0000813d0000001d0650035f000000000706043b00000c710070009c000000520000213d00000005067002100000003f0660003900000c730660019700000cd00060009c000000520000213d0000012006600039000000400060043f000001200070043f0000002005500039000000060670021000000000065600190000001a0060006c0000004c0000213d000000000007004b000019010000c13d000000e00040043f00000020042000390000001d0440035f000000000404043b00000c710040009c0000004c0000213d00000000052400190000001f025000390000001a06000029000000000062004b000000000400001900000c750400804100000c7502200197001c0c750060019b0000001c0620014f0000001c0020006c000000000200001900000c750200404100000c750060009c000000000204c019000000000002004b0000004c0000c13d0000001d0250035f000000000602043b00000c710060009c000000520000213d00000005026002100000003f0220003900000c7302200197000000400400043d0000000007240019000000000047004b0000000002000039000000010200403900000c710070009c000000520000213d0000000100200190000000520000c13d000000400070043f00000000006404350000002005500039000000060260021000000000065200190000001a0060006c0000004c0000213d000000000065004b0000058d0000813d00000000070400190000001a0250006900000c740020009c0000004c0000213d000000400020008c0000004c0000413d000000400800043d00000c880080009c000000520000213d0000004002800039000000400020043f0000001d0250035f000000000202043b00000c710020009c0000004c0000213d000000000228043600000020095000390000001d0990035f000000000909043b00000cf30090009c0000004c0000213d0000002007700039000000000092043500000000008704350000004005500039000000000065004b000005730000413d000001000040043f000000800030043f00000020021000390000001d0220035f000000000202043b00000c710020009c0000004c0000213d0000000002120019001000000002001d0000001f022000390000001a0020006c000000000300001900000c750300804100000c75022001970000001c0420014f0000001c0020006c000000000200001900000c750200404100000c750040009c000000000203c019000000000002004b0000004c0000c13d00000010030000290000001d0230035f000000000302043b00000c710030009c000000520000213d00000005043002100000003f0240003900000c7302200197000000400600043d0000000005260019000d00000006001d000000000065004b0000000002000039000000010200403900000c710050009c000000520000213d0000000100200190000000520000c13d000000400050043f0000000d020000290000000000320435000000100200002900000020052000390000000003540019000f00000003001d0000001a0030006c0000004c0000213d0000000f0050006c000006360000813d0000001a02000029000e0020002000920000000d090000290000001d0250035f000000000202043b00000c710020009c0000004c0000213d000000100d2000290000000e02d0006900000c740020009c0000004c0000213d000000a00020008c0000004c0000413d000000400a00043d00000cc500a0009c000000520000213d000000a002a00039000000400020043f0000002002d000390000001d0320035f000000000303043b00000c710030009c0000004c0000213d000000000c3a0436000000200b2000390000001d02b0035f000000000202043b00000c710020009c0000004c0000213d000000000fd200190000003f02f000390000001a0020006c000000000300001900000c750300804100000c75022001970000001c0420014f0000001c0020006c000000000200001900000c750200404100000c750040009c000000000203c019000000000002004b0000004c0000c13d0000002004f000390000001d0240035f000000000d02043b00000c7100d0009c000000520000213d0000001f02d0003900000d0e022001970000003f0220003900000d0e02200197000000400e00043d00000000032e00190000000000e3004b0000000002000039000000010200403900000c710030009c000000520000213d0000000100200190000000520000c13d0000004006f00039000000400030043f0000000002de043600000000036d00190000001a0030006c0000004c0000213d00000020034000390000001d0730035f00000d0e06d0019800000000046200190000060e0000613d000000000307034f000000000f020019000000003803043c000000000f8f043600000000004f004b0000060a0000c13d0000001f03d001900000061b0000613d000000000667034f0000000303300210000000000704043300000000073701cf000000000737022f000000000606043b0000010003300089000000000636022f00000000033601cf000000000373019f00000000003404350000000002d2001900000000000204350000000000ec04350000002002b000390000001d0320035f000000000303043b00000c710030009c0000004c0000213d0000004004a00039000000000034043500000020022000390000001d0320035f000000000303043b00000c710030009c0000004c0000213d00000020099000390000006004a00039000000000034043500000020022000390000001d0220035f000000000202043b0000008003a0003900000000002304350000000000a9043500000020055000390000000f0050006c000005c30000413d0000000d02000029000000a00020043f00000040021000390000001d0220035f000000000202043b00000c710020009c0000004c0000213d00000000031200190000001f013000390000001a0010006c000000000200001900000c750200804100000c75011001970000001c0410014f0000001c0010006c000000000100001900000c750100404100000c750040009c000000000102c019000000000001004b0000004c0000c13d0000001d0130035f000000000401043b00000c710040009c000000520000213d00000005014002100000003f0110003900000c7302100197000000400100043d0000000002210019000000000012004b0000000005000039000000010500403900000c710020009c000000520000213d0000000100500190000000520000c13d000000400020043f00000000004104350000002002300039000000060340021000000000032300190000001a0030006c0000004c0000213d000000000032004b0000067b0000813d00000000040100190000001a0520006900000c740050009c0000004c0000213d000000400050008c0000004c0000413d000000400500043d00000c880050009c000000520000213d00000020044000390000004006500039000000400060043f0000001d0620035f000000000606043b000000000665043600000020072000390000001d0770035f000000000707043b000000000076043500000000005404350000004002200039000000000032004b000006650000413d000000c00010043f0000000401000039000000000101041a00000cc300100198000006ef0000c13d000000a00100043d001d00000001001d0000000001010433000000000001004b000006ef0000613d00000cc90100004100000000001004430000000001000412000000040010044300000040010000390000002400100443000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000cca011001c7000080050200003931b131ac0000040f0000000100200190000025790000613d000000000101043b000000c00200043d001c00000002001d00000cd102000041000000000020044300000c7201100197000f00000001001d0000000400100443000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000cd2011001c7000080020200003931b131ac0000040f0000000100200190000025790000613d000000000101043b000000000001004b0000004c0000613d000000400400043d00000024014000390000006002000039000000000021043500000cf4010000410000000000140435000000000100041000000c7202100197000000040140003900000000002104350000001d02000029000000000202043300000005032002100000000003340019001000000004001d000000640440003900000000002404350000008403300039000000000002004b000025e80000c13d00000000011300490000001002000029000000440220003900000000001204350000001c0100002900000000020104330000000001230436000000000002004b000006d20000613d00000000030000190000001c040000290000002004400039001c00000004001d0000000004040433000000005404043400000000044104360000000005050433000000000054043500000040011000390000000103300039000000000023004b000006c60000413d00000000020004140000000f03000029000000040030008c000006ea0000613d0000001003000029000000000131004900000c6d0010009c00000c6d01008041000000600110021000000c6d0030009c00000c6d030080410000004003300210000000000131019f00000c6d0020009c00000c6d02008041000000c002200210000000000121019f0000000f0200002931b131ac0000040f000000600310027000010c6d0030019d000300000001035500000001002001900000261d0000613d000000100100002900000c710010009c000000520000213d0000001001000029000000400010043f000000800100043d001c00000001001d0000000021010434001d00000002001d0000000001010433000000000001004b000006fb0000c13d0000001d0100002900000000010104330000000001010433000000000001004b000021d70000613d00000024010000390000000201100367000000000101043b00000c71011001970000000b02000039000000000302041a00000c7104300197000000000014004b000021d00000813d00000cbb03300197000000000113019f000000000012041b0000000401000039000000000101041a00000cd102000041000000000020044300000c7201100197001000000001001d0000000400100443000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000cd2011001c7000080020200003931b131ac0000040f0000000100200190000025790000613d000000000101043b000000000001004b0000004c0000613d000000400500043d00000cf60100004100000000001504350000000401500039000000200200003900000000002104350000001c010000290000000003010433000000240150003900000040020000390000000000210435000000640250003900000000040304330000000000420435001c00000005001d0000008402500039000000000004004b000007390000613d000000000500001900000020033000390000000006030433000000007606043400000c72066001970000000006620436000000000707043300000cf307700197000000000076043500000040022000390000000105500039000000000045004b0000072d0000413d00000000011200490000001d0300002900000000030304330000001c040000290000004404400039000000000014043500000000040304330000000001420436000000000004004b000007500000613d000000000200001900000020033000390000000005030433000000006505043400000c71055001970000000005510436000000000606043300000cf306600197000000000065043500000040011000390000000102200039000000000042004b000007440000413d00000000020004140000001003000029000000040030008c000007680000613d0000001c03000029000000000131004900000c6d0010009c00000c6d01008041000000600110021000000c6d0030009c00000c6d030080410000004003300210000000000131019f00000c6d0020009c00000c6d02008041000000c002200210000000000121019f000000100200002931b131a70000040f000000600310027000010c6d0030019d000300000001035500000001002001900000262a0000613d0000001c0100002900000c710010009c000000520000213d0000001c01000029000000400010043f000021d70000013d00000ca40020009c00000aba0000613d00000ca50020009c0000004c0000c13d0000000001000416000000000001004b0000004c0000c13d0000000b01000039000000000101041a00000c7101100197000000800010043f00000caf01000041000031b20001042e00000c9d0020009c00000b8c0000613d00000c9e0020009c0000004c0000c13d0000000001000416000000000001004b0000004c0000c13d31b1293c0000040f000000400100043d001d00000001001d31b1290b0000040f0000000401000039000000000101041a00000cc3001001980000000002000039000000010200c0390000001d0400002900000040034000390000000000230435000000a00210027000000c6d022001970000002003400039000000000023043500000c720110019700000000001404350000000501000039000000000101041a00000c7201100197000000600340003900000000020400190000000000130435000000400100043d001c00000001001d31b129280000040f0000001c02000029000000000121004900000c6d0010009c00000c6d01008041000000600110021000000c6d0020009c00000c6d020080410000004002200210000000000121019f000031b20001042e00000c970020009c00000cdd0000613d00000c980020009c0000004c0000c13d0000001c01000029000000440010008c0000004c0000413d0000000001000416000000000001004b0000004c0000c13d0000001d0100035f0000000401100370000000000101043b00000c710010009c0000004c0000213d000000000010043f0000000a01000039000000200010043f0000004002000039000000000100001931b131740000040f0000001d0200035f0000002402200370000000000202043b000000000020043f000000200010043f0000000001000019000000400200003931b131740000040f000000000101041a000000800010043f00000caf01000041000031b20001042e001b0024001000940000004c0000413d0000000001000416000000000001004b0000004c0000c13d0000001d0100035f0000000401100370000000000301043b00000c710030009c0000004c0000213d00000023013000390000001c0010006c0000004c0000813d00000004013000390000001d0110035f000000000601043b00000c710060009c000000520000213d00000005056002100000003f0150003900000c730110019700000c700010009c000000520000213d0000008001100039000000400010043f000000800060043f000000240430003900000000054500190000001c0050006c0000004c0000213d000000000006004b00000e120000c13d0000000101000039000000000101041a00000c72011001970000000002000411000000000012004b00000e0a0000c13d000000800100043d000000000001004b00000b490000613d001900000000001d00000019010000290000000501100210000000a001100039000000000201043300000020012000390000000001010433001c0c710010019c000018710000613d001800000002001d000000000102043300000c72001001980000177e0000613d0000001c01000029000000000010043f0000000801000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000401043b0000000101400039001d00000001001d000000000101041a000000010210019000000001071002700000007f0770618f0000001f0070008c00000000030000390000000103002039000000000331013f000000010030019000000b860000c13d000000180300002900000060033000390000000005030433000000000304041a000000000007004b001700200050003d001b00000004001d001a00000005001d000008430000613d00000c800330019700000c810030009c000008940000613d000000400300043d0000000005730436000000000002004b0000085a0000613d001400000005001d001500000003001d0000001d01000029000000000010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c82011001c70000801002000039001600000007001d31b131ac0000040f000000160600002900000001002001900000004c0000613d000000000201043b000000000100001900000014050000290000000003510019000000000402041a000000000043043500000001022000390000002001100039000000000061004b0000083a0000413d00000015030000290000085d0000013d00000c860130019700000c81011001c7000000000014041b000000400100043d0000001c02000029000000000021043500000c6d0010009c00000c6d010080410000004001100210000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c82011001c70000800d02000039000000010300003900000c870400004131b131a70000040f0000001a050000290000000100200190000008940000c13d0000004c0000013d00000d1001100197000000000015043500000020010000390000003f0110003900000d0e021001970000000001320019000000000021004b0000000002000039000000010200403900000c710010009c000000520000213d0000000100200190000000520000c13d000000400010043f00000c6d0050009c00000c6d050080410000004001500210000000000203043300000c6d0020009c00000c6d020080410000006002200210000000000112019f000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c83011001c7000080100200003931b131ac0000040f0000001a0300002900000001002001900000004c0000613d000000170200002900000c6d0020009c00000c6d020080410000004002200210000000000303043300000c6d0030009c00000c6d030080410000006003300210000000000223019f000000000101043b001600000001001d000000000100041400000c6d0010009c00000c6d01008041000000c001100210000000000121019f00000c83011001c7000080100200003931b131ac0000040f0000001a0500002900000001002001900000004c0000613d000000000101043b000000160010006b00001b600000c13d0000000001050433000000000001004b0000177e0000613d00000c6d0010009c00000c6d010080410000006001100210000000170200002900000c6d0020009c00000c6d020080410000004002200210000000000121019f000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c83011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b001600000001001d000000400100043d00000020020000390000000002210436000000000002043500000c880010009c000000520000213d0000004003100039000000400030043f00000c6d0020009c00000c6d020080410000004002200210000000000101043300000c6d0010009c00000c6d010080410000006001100210000000000121019f000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c83011001c7000080100200003931b131ac0000040f0000001a0300002900000001002001900000004c0000613d000000000101043b000000160010006b0000177e0000613d000000000403043300000c710040009c000000520000213d0000001d01000029000000000101041a000000010010019000000001031002700000007f0330618f0000001f0030008c00000000020000390000000102002039000000000121013f00000001001001900000001b0600002900000b860000c13d000000200030008c001600000004001d000008f90000413d001500000003001d0000001d01000029000000000010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c82011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d00000016040000290000001f024000390000000502200270000000200040008c0000000002004019000000000301043b00000015010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b0000001b06000029000008f90000813d000000000002041b0000000102200039000000000012004b000008f50000413d000000200040008c000009250000413d0000001d01000029000000000010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c82011001c7000080100200003931b131ac0000040f0000001a0700002900000001002001900000004c0000613d000000160800002900000d0e02800198000000000101043b000009b10000613d000000010320008a00000005033002700000000003310019000000010430003900000020030000390000001b0600002900000000057300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000009110000c13d000000000082004b000009220000813d0000000302800210000000f80220018f00000d110220027f00000d110220016700000000037300190000000003030433000000000223016f000000000021041b000000010180021000000001011001bf000009310000013d000000000004004b000009300000613d000000030140021000000d110110027f00000d110110016700000017020000290000000002020433000000000112016f0000000102400210000000000121019f000009310000013d000000000100001900000018030000290000001d02000029000000000012041b00000040013000390000000001010433000000000001004b00000c89010000410000000001006019000000000206041a00000c8a02200197000000000112019f000000000203043300000c7202200197000000000121019f000000000016041b0000001c01000029000000000010043f0000000701000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b000000000101041a000000000001004b0000096c0000c13d0000000601000039000000000101041a00000c710010009c000000520000213d00000001021000390000000603000039000000000023041b00000c8b0110009a0000001c02000029000000000021041b000000000103041a001a00000001001d000000000020043f0000000701000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b0000001a02000029000000000021041b000000400600043d000000200100003900000000011604360000001b02000029000000000202041a00000080036000390000008004000039000000000043043500000c72032001970000000000310435000000a80120027000000c71011001970000006003600039000000000013043500000c8c002001980000000001000039000000010100c039000000400260003900000000001204350000001d01000029000000000101041a000000010210019000000001041002700000007f0440618f0000001f0040008c00000000030000390000000103002039000000000331013f000000010030019000000b860000c13d000000a0036000390000000000430435000000000002004b000009aa0000613d001a00000004001d001b00000006001d0000001d01000029000000000010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c82011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d0000001a07000029000000000007004b000009b60000613d0000001b06000029000000c002600039000000000301043b00000000010000190000000004210019000000000503041a000000000054043500000001033000390000002001100039000000000071004b000009a20000413d000009b80000013d00000d1001100197000000c0026000390000000000120435000000000004004b00000020010000390000000001006039000009b80000013d00000020030000390000001b06000029000000000082004b0000091a0000413d000009220000013d00000000010000190000001b0600002900000c6d0060009c00000c6d060080410000004002600210000000c00110003900000c6d0010009c00000c6d010080410000006001100210000000000121019f000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000121019f00000c83011001c70000800d02000039000000020300003900000c8d040000410000001c0500002931b131a70000040f00000001002001900000004c0000613d0000001902000029001900010020003d000000800100043d000000190010006b000007f20000413d00000b490000013d0000000001000416000000000001004b0000004c0000c13d000000c001000039000000400010043f0000001101000039000000800010043f00000d0b01000041000000a00010043f0000002001000039000000c00010043f0000008001000039000000e00200003931b129160000040f000000c00110008a00000c6d0010009c00000c6d01008041000000600110021000000d0c011001c7000031b20001042e000000440010008c0000004c0000413d0000000001000416000000000001004b0000004c0000c13d0000001d0100035f0000000401100370000000000101043b00000c710010009c0000004c0000213d0000001d0200035f0000002402200370000000000202043b001d00000002001d00000c710020009c0000004c0000213d000000000010043f0000000901000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b0000001d020000290000000702200270000000000020043f000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d0000001d030000290000000102300210000000000101043b000000000101041a0000007f0330019000000a1b0000613d000000ff0420018f00000000033400d9000000020030008c00000b280000c13d000000fe0220018f000000000121022f000000030110018f000000400200043d000000000012043500000c6d0020009c00000c6d02008041000000400120021000000cea011001c7000031b20001042e0000000001000416000000000001004b0000004c0000c13d0000000601000039000000000101041a001a00000001001d00000c710010009c000000520000213d0000001a0100002900000005021002100000003f0120003900000c730310019700000c700030009c000000520000213d0000008007300039000000400070043f0000001a01000029000000800010043f000000000001004b00000d3d0000c13d0000000003370019000000000073004b0000000001000039000000010100403900000c710030009c000000520000213d0000000100100190000000520000c13d000000400030043f0000001a010000290000000001170436001900000001001d0000001f0320018f000000000002004b00000a500000613d0000001c040000290000001d0140035f00000019040000290000000002240019000000001501043c0000000004540436000000000024004b00000a4c0000c13d000000000003004b0000001a0000006b00000d830000c13d000000400100043d000000400200003900000000032104360000000004070433000000400210003900000000004204350000006002100039000000000004004b00000a640000613d00000000050000190000002007700039000000000607043300000c710660019700000000026204360000000105500039000000000045004b00000a5d0000413d00000000041200490000000000430435000000800300043d0000000000320435000000050430021000000000044200190000002009400039000000000003004b00000f660000c13d000000000219004900000c6d0020009c00000c6d02008041000000600220021000000c6d0010009c00000c6d010080410000004001100210000000000112019f000031b20001042e000000840010008c0000004c0000413d0000000001000416000000000001004b0000004c0000c13d0000010001000039000000400010043f0000001d0100035f0000000401100370000000000101043b00000c720010009c0000004c0000213d000000800010043f0000001d0200035f0000002402200370000000000202043b00000c6d0020009c0000004c0000213d000000a00020043f0000001d0300035f0000004403300370000000000303043b000000000003004b0000000004000039000000010400c039000000000043004b0000004c0000c13d000000c00030043f0000001d0400035f0000006404400370000000000404043b00000c720040009c0000004c0000213d000000e00040043f0000000105000039000000000505041a00000c72055001970000000006000411000000000056004b00000e840000c13d000000000001004b00000f990000c13d00000cc001000041000001000010043f00000cbd01000041000031b300010430000000240010008c0000004c0000413d0000000001000416000000000001004b0000004c0000c13d0000001d0100035f0000000401100370000000000601043b00000c720060009c0000004c0000213d0000000101000039000000000101041a00000c72011001970000000005000411000000000015004b00000d390000c13d000000000056004b00000d530000c13d00000cae01000041000000800010043f00000cac01000041000031b300010430000000840010008c0000004c0000413d0000000001000416000000000001004b0000004c0000c13d0000001d0100035f0000006401100370000000000201043b00000c710020009c0000004c0000213d00000023012000390000001c0010006c0000004c0000813d00000004032000390000001d0130035f000000000101043b000f00000001001d00000c710010009c0000004c0000213d0000000f01000029000000200010008c0000004c0000413d0000002402200039000900000002001d0000000f02200029001b00000002001d0000001c0020006c0000004c0000213d00000020013000390000001d0110035f000000000101043b00000c710010009c0000004c0000213d0000000901100029000b00000001001d0000001f011000390000001b0010006c0000004c0000813d0000000b020000290000001d0120035f000000000101043b00000c710010009c000000520000213d00000005031002100000003f0230003900000c730220019700000c700020009c000000520000213d0000008002200039000000400020043f000000800010043f0000000b04000029000000200540003900000000040500190000000005530019000a00000005001d0000001b0050006c0000004c0000213d000000000001004b0000134b0000c13d00000cc70020009c000000520000213d0000002001200039000000400010043f0000000000020435000000800100003931b129970000040f000000400100043d001d00000001001d00000cc70010009c000000520000213d0000001d010000290000002002100039001c00000002001d000000400020043f00000000000104350000000101000039000000000010043f0000000201000039000000200010043f000000400100043d00000c700010009c000000520000213d0000008002100039000000400020043f00000ceb02000041000000000202041a001a00000002001d000000000521043600000cec02000041000000000202041a0000000803200270000000ff0330018f00000040041000390000000000340435000000ff0320018f001800000005001d0000000000350435000000600410003900000cb2032001980000000001000039000000010100c039001900000004001d000000000014043500000004010000390000000201100367000000000101043b000000a50200008a0000000f0020006b000017810000a13d00000d0a01000041000000000010043f0000001101000039000000040010043f00000c8501000041000031b3000104300000000001000416000000000001004b0000004c0000c13d000000000100041a00000c72021001970000000006000411000000000026004b00000d350000c13d0000000102000039000000000302041a00000c7604300197000000000464019f000000000042041b00000c7601100197000000000010041b000000000100041400000c720530019700000c6d0010009c00000c6d01008041000000c00110021000000c83011001c70000800d02000039000000030300003900000cc20400004131b131a70000040f00000001002001900000004c0000613d0000000001000019000031b20001042e000000240010008c0000004c0000413d0000000001000416000000000001004b0000004c0000c13d0000001d0100035f0000000401100370000000000101043b00000c710010009c0000004c0000213d0000010002000039000000400020043f000000800000043f000000a00000043f000000c00000043f0000006002000039000000e00020043f000000000010043f0000000801000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000400200043d001d00000002001d00000c700020009c000000520000213d000000000101043b0000001d040000290000008002400039000000400020043f000000000201041a00000c72032001970000000006340436000000a80320027000000c71033001970000004005400039000000000035043500000c8c002001980000000002000039000000010200c03900000000002604350000000101100039000000000201041a000000010320019000000001072002700000007f0770618f0000001f0070008c00000000040000390000000104002039000000000442013f000000010040019000000d600000613d00000d0a01000041000000000010043f0000002201000039000000040010043f00000c8501000041000031b300010430000000640010008c0000004c0000413d0000000001000416000000000001004b0000004c0000c13d0000001d0100035f0000000401100370000000000101043b00000c710010009c0000004c0000213d00000004021000390000001c0120006900000c740010009c0000004c0000213d000001400010008c0000004c0000413d000001e003000039000000400030043f0000001d0120035f000000000101043b000001400010043f00000020012000390000001d0410035f000000000404043b00000c710040009c0000004c0000213d000001600040043f00000020011000390000001d0410035f000000000404043b00000c710040009c0000004c0000213d000001800040043f00000020011000390000001d0410035f000000000404043b00000c710040009c0000004c0000213d000001a00040043f00000020011000390000001d0410035f000000000404043b00000c710040009c0000004c0000213d000001c00040043f0000014004000039000000800040043f00000020041000390000001d0140035f000000000101043b00000c710010009c0000004c0000213d00000000062100190000001f016000390000001c0010006c0000004c0000813d0000001d0160035f000000000501043b00000c710050009c000000520000213d0000001f0150003900000d0e011001970000003f0110003900000d0e0710019700000cc40070009c000000520000213d0000002001600039000001e006700039000000400060043f000001e00050043f00000000061500190000001c0060006c0000004c0000213d0000001d0710035f00000d0e085001980000001f0950018f000002000680003900000be00000613d000002000a000039000000000b07034f00000000b10b043c000000000a1a043600000000006a004b00000bdc0000c13d000000000009004b00000bed0000613d000000000187034f0000000307900210000000000806043300000000087801cf000000000878022f000000000101043b0000010007700089000000000171022f00000000017101cf000000000181019f000000000016043500000200015000390000000000010435000000a00030043f00000020034000390000001d0130035f000000000101043b00000c710010009c0000004c0000213d00000000062100190000001f016000390000001c0010006c0000004c0000813d0000001d0160035f000000000401043b00000c710040009c000000520000213d0000001f0140003900000d0e011001970000003f0110003900000d0e01100197000000400500043d0000000007150019000000000057004b0000000001000039000000010100403900000c710070009c000000520000213d0000000100100190000000520000c13d0000002001600039000000400070043f000000000645043600000000071400190000001c0070006c0000004c0000213d0000001d0810035f00000d0e094001980000001f0a40018f000000000796001900000c1b0000613d000000000b08034f000000000106001900000000bc0b043c0000000001c10436000000000071004b00000c170000c13d00000000000a004b00000c280000613d000000000198034f0000000308a00210000000000907043300000000098901cf000000000989022f000000000101043b0000010008800089000000000181022f00000000018101cf000000000191019f000000000017043500000000014600190000000000010435000000c00050043f00000020033000390000001d0130035f000000000101043b00000c720010009c0000004c0000213d000000e00010043f00000020013000390000001d0110035f000000000101043b000001000010043f00000040013000390000001d0110035f000000000101043b00000c710010009c0000004c0000213d0000000001210019001b00000001001d0000001f011000390000001c0010006c0000004c0000813d0000001b020000290000001d0120035f000000000601043b00000c710060009c000000520000213d00000005036002100000003f0130003900000c7301100197000000400400043d0000000002140019001900000004001d000000000042004b0000000001000039000000010100403900000c710020009c000000520000213d0000000100100190000000520000c13d000000400020043f000000190100002900000000006104350000001b0100002900000020041000390000000002430019001a00000002001d0000001c0020006c0000004c0000213d000000000006004b00001b660000c13d0000001901000029000001200010043f0000001d0100035f0000002401100370000000000101043b000c00000001001d00000c710010009c0000004c0000213d0000000c0100002900000023011000390000001c0010006c000000000200001900000c750200804100000c7501100197000000000001004b000000000300001900000c750300404100000c750010009c000000000302c019000000000003004b0000004c0000c13d0000000c0100002900000004011000390000001d0110035f000000000101043b000700000001001d00000c710010009c0000004c0000213d0000000c01000029001000240010003d0000000701000029000000050110021000000010011000290000001c0010006c0000004c0000213d0000001d0100035f0000004401100370000000000201043b00000c710020009c0000004c0000213d00000023012000390000001c0010006c000000000300001900000c750300804100000c7501100197000000000001004b000000000400001900000c750400404100000c750010009c000000000403c019000000000004004b0000004c0000c13d00000004012000390000001d0110035f000000000101043b000b00000001001d00000c710010009c0000004c0000213d000300240020003d0000000b01000029000000050110021000000003011000290000001c0010006c0000004c0000213d0000000001000415000200000001001d000000400100043d000f00000001001d00000000010004100000000002000411000000000012004b00001cf60000c13d0000000f0100002900000cc70010009c000000520000213d0000000f020000290000002001200039000000400010043f0000000000020435000001200100043d000900000001001d0000000021010434000800000002001d000000000001004b00001cfe0000c13d000000400100043d001d00000001001d00000cc50010009c000000520000213d000000800100043d0000002002100039000000000202043300000000010104330000001d07000029000000a003700039000000a00400043d000000c00500043d000000400030043f00000080067000390000000f03000029001b00000006001d00000000003604350000006003700039001a00000003001d00000000005304350000004003700039001900000003001d0000000000430435000000000317043600000c7101200197001800000003001d00000000001304350000000501000039000000000101041a001c0c720010019c00001d340000c13d000000c00100043d0000000001010433000000000001004b00001db70000c13d0000000001000415000000200110008a001c000500100218000001000100043d000000000001004b002000000000003d002000010000603d00001dbb0000c13d000028e80000013d000000240010008c0000004c0000413d0000000001000416000000000001004b0000004c0000c13d0000001d0100035f0000000401100370000000000101043b000000ff0010008c0000004c0000213d0000016002000039000000400020043f000000e00000043f000001000000043f000001200000043f000001400000043f000000e002000039000000800020043f0000006002000039000000a00020043f000000c00020043f000000000010043f0000000201000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b001c00000001001d000000400100043d001d00000001001d00000cb00010009c000000520000213d0000001d020000290000006001200039000000400010043f00000cb10020009c000000520000213d0000001d05000029000000e002500039000000400020043f0000001c06000029000000000206041a00000000002104350000000102600039000000000202041a0000008003500039000000ff0420018f000000000043043500000cb2002001980000000003000039000000010300c039000000c00450003900000000003404350000000001150436001800000001001d000000a0015000390000000802200270000000ff0220018f00000000002104350000000201600039000000000301041a000000400200043d001b00000002001d001900000003001d0000000002320436001a00000002001d000000000010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c82011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d0000001905000029000000000005004b000012c50000c13d0000001a04000029000012cf0000013d00000cc101000041000000800010043f00000cac01000041000031b30001043000000cab01000041000000800010043f00000cac01000041000031b30001043000000cd50030009c000000520000213d000000600400003900000000050000190000008001700039000000400010043f0000006001700039000000000041043500000040017000390000000000010435000000200170003900000000000104350000000000070435000000a0015000390000000000710435000000400700043d0000002005500039000000000025004b00000a390000813d00000c700070009c00000d410000a13d000000520000013d000000000100041a00000c7601100197000000000161019f000000000010041b000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c83011001c70000800d02000039000000030300003900000cad0400004100000b460000013d001b00000006001d001c00000005001d000000400500043d0000000004750436000000000003004b00000e880000613d001800000004001d001900000007001d001a00000005001d000000000010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c82011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d0000001906000029000000000006004b00000000020000190000001a05000029000000180700002900000e8d0000613d000000000101043b00000000020000190000000003720019000000000401041a000000000043043500000001011000390000002002200039000000000062004b00000d7b0000413d00000e8d0000013d0000000003000019001b00000007001d0000000601000039000000000101041a000000000031004b000025730000a13d0000000601000039000000000010043f0000000001070433000000000031004b000025730000a13d00000c8b0130009a000000000101041a00000c71011001970000000504300210001c00000004001d000000190240002900000000001204350000000002070433000000000032004b000025730000a13d001d00000003001d000000000010043f0000000801000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000400500043d00000c700050009c0000001b07000029000000520000213d000000000101043b0000008002500039000000400020043f000000000201041a000000a80320027000000c71033001970000004004500039000000000034043500000c7203200197000000000335043600000c8c002001980000000002000039000000010200c03900000000002304350000000101100039000000000201041a000000010320019000000001082002700000007f0880618f0000001f0080008c00000000040000390000000104002039000000000442013f000000010040019000000b860000c13d000000400600043d0000000004860436000000000003004b00000de50000613d001500000004001d001600000008001d001700000006001d001800000005001d000000000010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c82011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d0000001608000029000000000008004b00000deb0000613d000000000201043b00000000010000190000001b070000290000001805000029000000170600002900000015090000290000000003910019000000000402041a000000000043043500000001022000390000002001100039000000000081004b00000ddd0000413d00000def0000013d00000d10012001970000000000140435000000000008004b0000002001000039000000000100603900000def0000013d00000000010000190000001b07000029000000180500002900000017060000290000003f0110003900000d0e021001970000000001620019000000000021004b0000000002000039000000010200403900000c710010009c000000520000213d0000000100200190000000520000c13d000000400010043f00000060015000390000000000610435000000800100043d0000001d03000029000000000031004b000025730000a13d0000001c01000029000000a0011000390000000000510435000000800100043d000000000031004b000025730000a13d00000001033000390000001a0030006c00000d850000413d00000a530000013d000000400100043d00000cab02000041000000000021043500000c6d0010009c00000c6d01008041000000400110021000000c90011001c7000031b300010430000000a00600003900000e1c0000013d0000000001910019000000000001043500000060018000390000000000a1043500000000068604360000002004400039000000000054004b000007e80000813d0000001d0140035f000000000101043b00000c710010009c0000004c0000213d00000000093100190000001b0190006900000c740010009c0000004c0000213d000000800010008c0000004c0000413d000000400800043d00000c700080009c000000520000213d0000008001800039000000400010043f00000024019000390000001d0a10035f000000000a0a043b00000c7200a0009c0000004c0000213d000000000aa8043600000020011000390000001d0b10035f000000000b0b043b00000c7100b0009c0000004c0000213d0000000000ba0435000000200a1000390000001d01a0035f000000000101043b000000000001004b000000000b000039000000010b00c0390000000000b1004b0000004c0000c13d000000400b80003900000000001b04350000002001a000390000001d0110035f000000000101043b00000c710010009c0000004c0000213d000000000b9100190000004301b000390000001c0010006c000000000900001900000c750900804100000c7501100197000000000001004b000000000a00001900000c750a00404100000c750010009c000000000a09c01900000000000a004b0000004c0000c13d000000240cb000390000001d01c0035f000000000901043b00000c710090009c000000520000213d0000001f0190003900000d0e011001970000003f0110003900000d0e01100197000000400a00043d000000000d1a00190000000000ad004b0000000001000039000000010100403900000c7100d0009c000000520000213d0000000100100190000000520000c13d000000440bb000390000004000d0043f00000000019a0436000000000bb900190000001c00b0006c0000004c0000213d000000200bc000390000001d0db0035f00000d0e0e900198000000000ce1001900000e760000613d000000000f0d034f000000000b01001900000000f20f043c000000000b2b04360000000000cb004b00000e720000c13d0000001f0b90019000000e140000613d0000000002ed034f000000030bb00210000000000d0c0433000000000dbd01cf000000000dbd022f000000000202043b000001000bb000890000000002b2022f0000000002b201cf0000000002d2019f00000000002c043500000e140000013d00000cab01000041000001000010043f00000cbd01000041000031b30001043000000d10012001970000000000140435000000000007004b000000200200003900000000020060390000003f0220003900000d0e032001970000000002530019000000000032004b0000000003000039000000010300403900000c710020009c000000520000213d0000000100300190000000520000c13d0000000004050019000000400020043f0000001d05000029000000600350003900000000004304350000002004000039000000400200043d0000000004420436000000000505043300000c720550019700000000005404350000001b040000290000000004040433000000000004004b0000000004000039000000010400c039000000400520003900000000004504350000001c04000029000000000404043300000c7104400197000000600520003900000000004504350000000003030433000000800420003900000080050000390000000000540435000000a00420003900000000530304340000000000340435000000c004200039000000000003004b00000ec00000613d000000000600001900000000074600190000000008650019000000000808043300000000008704350000002006600039000000000036004b00000eb90000413d0000001f0530003900000d0e0150019700000000034300190000000000030435000000c0011000390000079f0000013d000000a00600003900000ecf0000013d000000a001700039000000000081043500000000067604360000002004400039000000000054004b0000001d0100035f0000010f0000813d000000000141034f000000000101043b00000c710010009c0000004c0000213d0000000008310019000000000182004900000c740010009c0000004c0000213d000000c00010008c0000004c0000413d000000400700043d00000cb30070009c000000520000213d000000c001700039000000400010043f00000024018000390000001d0110035f000000000101043b000000000917043600000044018000390000001d0a10035f000000000a0a043b000000ff00a0008c0000004c0000213d0000000000a9043500000020011000390000001d0910035f000000000909043b000000ff0090008c0000004c0000213d000000400a70003900000000009a043500000020091000390000001d0190035f000000000101043b000000000001004b000000000a000039000000010a00c0390000000000a1004b0000004c0000c13d000000600a70003900000000001a043500000020099000390000001d0190035f000000000101043b00000c710010009c0000004c0000213d000000000b8100190000004301b000390000001c0010006c000000000a00001900000c750a00804100000c7501100197000000000001004b000000000c00001900000c750c00404100000c750010009c000000000c0ac01900000000000c004b0000004c0000c13d0000002401b000390000001d0110035f000000000c01043b00000c7100c0009c000000520000213d000000050dc002100000003f01d0003900000c7301100197000000400a00043d000000000e1a00190000000000ae004b0000000001000039000000010100403900000c7100e0009c000000520000213d0000000100100190000000520000c13d0000004000e0043f0000000000ca0435000000440bb00039000000000cbd00190000001c00c0006c0000004c0000213d0000000000cb004b00000f2e0000813d000000000d0a00190000001d01b0035f000000000101043b00000c720010009c0000004c0000213d000000200dd0003900000000001d0435000000200bb000390000000000cb004b00000f250000413d00000080017000390000000000a1043500000020019000390000001d0110035f000000000101043b00000c710010009c0000004c0000213d000000000981001900000043019000390000001c0010006c000000000800001900000c750800804100000c7501100197000000000001004b000000000a00001900000c750a00404100000c750010009c000000000a08c01900000000000a004b0000004c0000c13d00000024019000390000001d0110035f000000000a01043b00000c7100a0009c000000520000213d000000050ba002100000003f01b0003900000c7301100197000000400800043d000000000c18001900000000008c004b0000000001000039000000010100403900000c7100c0009c000000520000213d0000000100100190000000520000c13d0000004000c0043f0000000000a804350000004409900039000000000a9b00190000001c00a0006c0000004c0000213d0000000000a9004b00000ec80000813d000000000b0800190000001d0190035f000000000101043b00000c720010009c0000004c0000213d000000200bb0003900000000001b043500000020099000390000000000a9004b00000f5c0000413d00000ec80000013d000000800400003900000000060000190000000007020019000000000804001900000f730000013d000000000b9a001900000000000b04350000001f0aa0003900000d0e0aa0019700000000099a00190000000106600039000000000036004b00000a6d0000813d000000000a290049000000200aa0008a00000020077000390000000000a704350000002008800039000000000a08043300000000cb0a043400000c720bb00197000000000bb90436000000000c0c043300000000000c004b000000000c000039000000010c00c0390000000000cb0435000000400ba00039000000000b0b043300000c710bb00197000000400c9000390000000000bc0435000000600aa00039000000000a0a0433000000600b90003900000000004b0435000000800c90003900000000ba0a04340000000000ac0435000000a00990003900000000000a004b00000f6b0000613d000000000c000019000000000d9c0019000000000ecb0019000000000e0e04330000000000ed0435000000200cc000390000000000ac004b00000f910000413d00000f6b0000013d000000a00520021000000c7c0550019700000cbe06100197000000000565019f000000000003004b000000000600001900000c7d0600c041000000000565019f0000000406000039000000000706041a00000c7b07700197000000000575019f000000000056041b0000000505000039000000000605041a00000c7606600197000000000646019f000000000065041b000001000010043f000001200020043f000001400030043f000001600040043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000cbf011001c70000800d02000039000000010300003900000c7e0400004100000b460000013d0000001c01000029001a00200010009200000fcb0000013d000000150400002900000020044000390000001005000029000000600150003900000000003104350000002001200039000000000117034f000000000101043b00000080025000390000000000120435001500000004001d00000000005404350000000d0200002900000020022000390000000b0020006c000000880000813d000d00000002001d000000000127034f000000000101043b00000c710010009c0000004c0000213d0000000c02100029001100000002001d0000001a0120006900000c740010009c0000004c0000213d000000a00010008c0000004c0000413d000000400100043d001000000001001d00000cc50010009c000000520000213d0000001001000029000000a001100039000000400010043f000000110100002900000020011000390000001d0210035f000000000202043b00000c710020009c0000004c0000213d00000010030000290000000002230436000e00000002001d00000020011000390000001d0110035f000000000101043b00000c710010009c0000004c0000213d00000011021000290000003f012000390000001c0010006c000000000300001900000c750300804100000c7501100197000000000001004b000000000400001900000c750400404100000c750010009c000000000403c019000000000004004b0000004c0000c13d00000020012000390000001d0110035f000000000301043b00000c710030009c000000520000213d00000005043002100000003f0140003900000c7301100197000000400600043d0000000005160019000f00000006001d000000000065004b0000000001000039000000010100403900000c710050009c000000520000213d0000000100100190000000520000c13d000000400050043f0000000f010000290000000000310435001400400020003d0000001402400029001300000002001d0000001c0020006c0000004c0000213d0000001302000029000000140020006b0000001d0e00035f000011d80000813d00000014020000290000000f03000029000010250000013d000000160300002900000020033000390000001902000029000000a00120003900000018040000290000000000410435000000000023043500000017020000290000002002200039000000130020006c000011d80000813d001600000003001d001700000002001d00000000012e034f000000000101043b00000c710010009c0000004c0000213d00000014031000290000001c0130006900000c740010009c0000004c0000213d000001400010008c0000004c0000413d000000400100043d001900000001001d00000cb30010009c000000520000213d0000001901000029000000c002100039000000400020043f00000ce30010009c000000520000213d00000019010000290000016001100039000000400010043f0000001d0130035f000000000101043b000000000012043500000020013000390000001d0410035f000000000404043b00000c710040009c0000004c0000213d0000001905000029000000e005500039000000000045043500000020011000390000001d0410035f000000000404043b00000c710040009c0000004c0000213d00000019050000290000010005500039000000000045043500000020011000390000001d0410035f000000000404043b00000c710040009c0000004c0000213d00000019050000290000012005500039000000000045043500000020011000390000001d0410035f000000000404043b00000c710040009c0000004c0000213d000000190500002900000000022504360000014005500039000000000045043500000020041000390000001d0140035f000000000101043b00000c710010009c0000004c0000213d000000000a3100190000001f01a000390000001c0010006c000000000500001900000c750500804100000c7501100197000000000001004b000000000600001900000c750600404100000c750010009c000000000605c019000000000006004b0000004c0000c13d0000001d01a0035f000000000801043b00000c710080009c000000520000213d0000001f0180003900000d0e011001970000003f0110003900000d0e01100197000000400900043d0000000005190019000000000095004b0000000001000039000000010100403900000c710050009c000000520000213d0000000100100190000000520000c13d0000002001a00039000000400050043f000000000a89043600000000051800190000001c0050006c0000004c0000213d0000001d0700035f000000000617034f00000d0e05800198000000000b5a0019000010950000613d000000000c06034f00000000010a001900000000cd0c043c0000000001d104360000000000b1004b000010910000c13d0000001f01800190000010a20000613d000000000556034f000000030110021000000000060b043300000000061601cf000000000616022f000000000505043b0000010001100089000000000515022f00000000011501cf000000000161019f00000000001b043500000000018a0019000000000001043500000000009204350000002002400039000000000127034f000000000101043b00000c710010009c0000004c0000213d00000000093100190000001f019000390000001c0010006c000000000400001900000c750400804100000c7501100197000000000001004b000000000500001900000c750500404100000c750010009c000000000504c019000000000005004b0000004c0000c13d0000001d0190035f000000000401043b00000c710040009c000000520000213d0000001f0140003900000d0e011001970000003f0110003900000d0e01100197000000400800043d0000000005180019000000000085004b0000000001000039000000010100403900000c710050009c000000520000213d0000000100100190000000520000c13d0000002001900039000000400050043f000000000948043600000000051400190000001c0050006c0000004c0000213d0000001d0700035f000000000617034f00000d0e05400198000000000a590019000010d90000613d000000000b06034f000000000109001900000000bc0b043c0000000001c104360000000000a1004b000010d50000c13d0000001f01400190000010e60000613d000000000556034f000000030110021000000000060a043300000000061601cf000000000616022f000000000505043b0000010001100089000000000515022f00000000011501cf000000000161019f00000000001a0435000000000149001900000000000104350000001901000029000000400110003900000000008104350000002002200039000000000127034f000000000101043b00000c720010009c0000004c0000213d00000019060000290000006004600039000000000014043500000020012000390000001d0110035f000000000101043b0000008004600039000000000014043500000040012000390000001d0110035f000000000101043b00000c710010009c0000004c0000213d0000000001310019001b00000001001d0000001f011000390000001c0010006c000000000200001900000c750200804100000c7501100197000000000001004b000000000300001900000c750300404100000c750010009c000000000302c019000000000003004b0000004c0000c13d0000001b020000290000001d0120035f000000000201043b00000c710020009c000000520000213d00000005042002100000003f0140003900000c7301100197000000400500043d0000000003150019001800000005001d000000000053004b0000000001000039000000010100403900000c710030009c000000520000213d0000000100100190000000520000c13d000000400030043f000000180100002900000000002104350000001b01000029000000200a1000390000000004a400190000001c0040006c0000004c0000213d00000000004a004b0000001d0e00035f0000101a0000813d0000001802000029000011380000013d00000020022000390000000001bf0019000000000001043500000060019000390000000000c104350000002001d0003900000000011e034f000000000101043b000000800390003900000000001304350000000000920435000000200aa0003900000000004a004b0000101a0000813d0000000001ae034f000000000101043b00000c710010009c0000004c0000213d0000001b0b1000290000001a01b0006900000c740010009c0000004c0000213d000000a00010008c0000004c0000413d000000400900043d00000cc50090009c000000520000213d000000200db000390000001d01d0035f000000a00c9000390000004000c0043f000000000101043b00000c710010009c0000004c0000213d0000000006b100190000003f016000390000001c0010006c000000000300001900000c750300804100000c7501100197000000000001004b000000000500001900000c750500404100000c750010009c000000000503c019000000000005004b0000004c0000c13d00000020086000390000001d0180035f000000000f01043b00000c7100f0009c000000520000213d0000001f01f0003900000d0e011001970000003f0110003900000d0e011001970000000001c1001900000c710010009c000000520000213d0000004003600039000000400010043f0000000000fc043500000000013f00190000001c0010006c0000004c0000213d00000020018000390000001d0310035f00000d0e05f00198000000c00e90003900000000065e0019000011770000613d000000000803034f00000000010e0019000000008708043c0000000001710436000000000061004b000011730000c13d0000001f01f00190000011840000613d000000000353034f0000000301100210000000000506043300000000051501cf000000000515022f000000000303043b0000010001100089000000000313022f00000000011301cf000000000151019f00000000001604350000000001ef001900000000000104350000000003c904360000002001d000390000001d0510035f000000000505043b00000c720050009c0000004c0000213d000000000053043500000020011000390000001d0310035f000000000303043b00000c6d0030009c0000004c0000213d00000040059000390000000000350435000000200d1000390000001d01d0035f000000000101043b00000c710010009c0000004c0000213d000000000fb100190000003f01f000390000001c0010006c000000000300001900000c750300804100000c7501100197000000000001004b000000000500001900000c750500404100000c750010009c000000000503c019000000000005004b0000004c0000c13d0000002006f000390000001d0160035f000000000b01043b00000c7100b0009c000000520000213d0000001f01b0003900000d0e011001970000003f0110003900000d0e01100197000000400c00043d00000000051c00190000000000c5004b0000000001000039000000010100403900000c710050009c000000520000213d0000000100100190000000520000c13d0000004001f00039000000400050043f000000000fbc043600000000011b00190000001c0010006c0000004c0000213d00000020016000390000001d0e00035f00000000051e034f00000d0e08b0019800000000068f0019000011ca0000613d000000000305034f00000000010f0019000000003703043c0000000001710436000000000061004b000011c60000c13d0000001f01b001900000112a0000613d000000000385034f0000000301100210000000000506043300000000051501cf000000000515022f000000000303043b0000010001100089000000000313022f00000000011301cf000000000151019f00000000001604350000112a0000013d0000000e010000290000000f0200002900000000002104350000001101000029000000600110003900000000011e034f000000000101043b00000c710010009c0000004c0000213d00000011031000290000003f013000390000001c0010006c000000000200001900000c750200804100000c7501100197000000000001004b000000000400001900000c750400404100000c750010009c000000000402c019000000000004004b0000004c0000c13d0000002002300039001800000002001d0000001d0120035f000000000201043b00000c710020009c000000520000213d00000005052002100000003f0150003900000c7301100197000000400600043d0000000004160019001700000006001d000000000064004b0000000001000039000000010100403900000c710040009c000000520000213d0000000100100190000000520000c13d000000400040043f0000001701000029000000000021043500000040043000390000000002450019001900000002001d0000001c0020006c0000004c0000213d000000190040006c0000001d0300035f0000128b0000813d0000001702000029000012150000013d0000001b0200002900000020022000390000000000a204350000002004400039000000190040006c0000001d0300035f0000128b0000813d001b00000002001d000000000143034f000000000101043b00000c710010009c0000004c0000213d00000018091000290000003f019000390000001c0010006c000000000200001900000c750200804100000c7501100197000000000001004b000000000300001900000c750300404100000c750010009c000000000302c019000000000003004b0000004c0000c13d00000020019000390000001d0110035f000000000201043b00000c710020009c000000520000213d00000005032002100000003f0130003900000c7301100197000000400a00043d00000000051a00190000000000a5004b0000000001000039000000010100403900000c710050009c000000520000213d0000000100100190000000520000c13d000000400050043f00000000002a0435000000400b900039000000000cb300190000001c00c0006c0000004c0000213d0000000000cb004b0000120e0000813d000000000d0a0019000012490000013d000000200dd000390000000001e3001900000000000104350000000000fd0435000000200bb000390000000000cb004b0000120e0000813d0000001d01b0035f000000000101043b00000c710010009c0000004c0000213d00000000039100190000005f013000390000001c0010006c000000000200001900000c750200804100000c7501100197000000000001004b000000000500001900000c750500404100000c750010009c000000000502c019000000000005004b0000004c0000c13d00000040063000390000001d0160035f000000000e01043b00000c7100e0009c000000520000213d0000001f01e0003900000d0e011001970000003f0110003900000d0e01100197000000400f00043d00000000021f00190000000000f2004b0000000001000039000000010100403900000c710020009c000000520000213d0000000100100190000000520000c13d0000006001300039000000400020043f0000000003ef043600000000011e00190000001c0010006c0000004c0000213d00000020016000390000001d0810035f00000d0e05e0019800000000065300190000127d0000613d000000000208034f0000000001030019000000002702043c0000000001710436000000000061004b000012790000c13d0000001f01e00190000012420000613d000000000258034f0000000301100210000000000506043300000000051501cf000000000515022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000151019f0000000000160435000012420000013d000000100100002900000040011000390000001702000029000000000021043500000011010000290000008002100039000000000123034f000000000101043b00000c710010009c0000004c0000213d00000011041000290000003f014000390000001c0010006c000000000300001900000c750300804100000c7501100197000000000001004b000000000500001900000c750500404100000c750010009c000000000503c019000000000005004b0000004c0000c13d00000020014000390000001d0110035f000000000501043b00000c710050009c000000520000213d00000005065002100000003f0160003900000c7301100197000000400300043d0000000008130019000000000038004b0000000001000039000000010100403900000c710080009c000000520000213d0000000100100190000000520000c13d0000004004400039000000400080043f000000000053043500000000054600190000001c0050006c0000004c0000213d000000000045004b0000001d0700035f00000fbb0000a13d0000000006030019000000000147034f000000000101043b000000200660003900000000001604350000002004400039000000000054004b000012bd0000413d00000fbb0000013d000000000101043b00000000020000190000001a04000029000000000301041a00000c7203300197000000000434043600000001011000390000000102200039000000000052004b000012c80000413d0000001b0140006a0000001f0110003900000d0e021001970000001b01200029000000000021004b0000000002000039000000010200403900000c710010009c000000520000213d0000000100200190000000520000c13d000000400010043f00000018010000290000001b0200002900000000002104350000001c010000290000000301100039000000000301041a000000400200043d001c00000002001d001b00000003001d0000000002320436001a00000002001d000000000010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c82011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d0000001b0000006b000012f40000c13d0000001a04000029000012ff0000013d000000000101043b00000000020000190000001a040000290000001b05000029000000000301041a00000c7203300197000000000434043600000001011000390000000102200039000000000052004b000012f80000413d0000001c0140006a0000001f0110003900000d0e021001970000001c01200029000000000021004b0000000002000039000000010200403900000c710010009c000000520000213d0000000100200190000000520000c13d000000400010043f0000001d0400002900000040024000390000001c0100002900000000001204350000002003000039000000400100043d00000000033104360000000004040433000000006504043400000000005304350000000003060433000000ff0330018f0000004005100039000000000035043500000040034000390000000003030433000000ff0330018f0000006005100039000000000035043500000060034000390000000003030433000000000003004b0000000003000039000000010300c0390000008004100039000000000034043500000018030000290000000004030433000000a003100039000000c0050000390000000000530435000000e003100039000000000504043300000000005304350000010003100039000000000005004b000013380000613d00000000060000190000002004400039000000000704043300000c720770019700000000037304360000000106600039000000000056004b000013310000413d0000000004130049000000200540008a0000000004020433000000c002100039000000000052043500000000050404330000000002530436000000000005004b000013490000613d00000000030000190000002004400039000000000604043300000c720660019700000000026204360000000103300039000000000053004b000013420000413d000000000212004900000a6e0000013d000d00800000003d0000001b0100002900190020001000920000001d0700035f000013600000013d0000000d0400002900000020044000390000001105000029000000600350003900000000002304350000002001100039000000000117034f000000000101043b00000080025000390000000000120435000d00000004001d00000000005404350000000c0400002900000020044000390000000a0040006c0000193f0000813d000c00000004001d000000000147034f000000000101043b00000c710010009c0000004c0000213d0000000b02100029001200000002001d000000190120006900000c740010009c0000004c0000213d000000a00010008c0000004c0000413d000000400100043d001100000001001d00000cc50010009c000000520000213d0000001101000029000000a001100039000000400010043f000000120100002900000020011000390000001d0210035f000000000202043b00000c710020009c0000004c0000213d00000011030000290000000002230436000e00000002001d00000020011000390000001d0110035f000000000101043b00000c710010009c0000004c0000213d00000012011000290000003f021000390000001b04000029000000000042004b000000000300001900000c750300804100000c750220019700000c7509400197000000000492013f000000000092004b000000000200001900000c750200404100000c750040009c000000000203c019000000000002004b0000004c0000c13d00000020021000390000001d0220035f000000000202043b00000c710020009c000000520000213d00000005032002100000003f0430003900000c7304400197000000400500043d0000000004450019001000000005001d000000000054004b0000000005000039000000010500403900000c710040009c000000520000213d0000000100500190000000520000c13d000000400040043f00000010040000290000000000240435001400400010003d0000001402300029001300000002001d0000001b0020006c0000004c0000213d0000001302000029000000140020006b0000001d0e00035f000015760000813d00000014020000290000001003000029000013bd0000013d000000150300002900000020033000390000001802000029000000a00120003900000017040000290000000000410435000000000023043500000016020000290000002002200039000000130020006c000015760000813d001500000003001d001600000002001d00000000012e034f000000000101043b00000c710010009c0000004c0000213d00000014011000290000001b0210006900000c740020009c0000004c0000213d000001400020008c0000004c0000413d000000400200043d001800000002001d00000cb30020009c000000520000213d0000001803000029000000c002300039000000400020043f00000ce30030009c000000520000213d00000018030000290000016003300039000000400030043f0000001d0310035f000000000303043b000000000032043500000020031000390000001d0430035f000000000404043b00000c710040009c0000004c0000213d0000001805000029000000e005500039000000000045043500000020033000390000001d0430035f000000000404043b00000c710040009c0000004c0000213d00000018050000290000010005500039000000000045043500000020033000390000001d0430035f000000000404043b00000c710040009c0000004c0000213d00000018050000290000012005500039000000000045043500000020033000390000001d0430035f000000000404043b00000c710040009c0000004c0000213d000000180500002900000000022504360000014005500039000000000045043500000020033000390000001d0430035f000000000404043b00000c710040009c0000004c0000213d000000000a1400190000001f04a000390000001b0040006c000000000500001900000c750500804100000c7504400197000000000694013f000000000094004b000000000400001900000c750400404100000c750060009c000000000405c019000000000004004b0000004c0000c13d0000001d04a0035f000000000704043b00000c710070009c000000520000213d0000001f0470003900000d0e044001970000003f0440003900000d0e04400197000000400800043d0000000004480019000000000084004b0000000005000039000000010500403900000c710040009c000000520000213d0000000100500190000000520000c13d0000002005a00039000000400040043f000000000a78043600000000045700190000001b0040006c0000004c0000213d0000001d0e00035f00000000055e034f00000d0e04700198000000000b4a00190000142e0000613d000000000c05034f000000000d0a001900000000c60c043c000000000d6d04360000000000bd004b0000142a0000c13d0000001f067001900000143b0000613d000000000445034f000000030560021000000000060b043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004b043500000000047a001900000000000404350000000000820435000000200230003900000000032e034f000000000303043b00000c710030009c0000004c0000213d00000000081300190000001f038000390000001b0030006c000000000400001900000c750400804100000c7503300197000000000593013f000000000093004b000000000300001900000c750300404100000c750050009c000000000304c019000000000003004b0000004c0000c13d0000001d0380035f000000000303043b00000c710030009c000000520000213d0000001f0430003900000d0e044001970000003f0440003900000d0e04400197000000400700043d0000000004470019000000000074004b0000000005000039000000010500403900000c710040009c000000520000213d0000000100500190000000520000c13d0000002005800039000000400040043f000000000837043600000000045300190000001b0040006c0000004c0000213d0000001d0d00035f00000000055d034f00000d0e04300198000000000a480019000014730000613d000000000b05034f000000000c08001900000000b60b043c000000000c6c04360000000000ac004b0000146f0000c13d0000001f06300190000014800000613d000000000445034f000000030560021000000000060a043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004a043500000000033800190000000000030435000000180300002900000040033000390000000000730435000000200220003900000000032d034f000000000303043b00000c720030009c0000004c0000213d00000018060000290000006004600039000000000034043500000020032000390000001d0330035f000000000303043b0000008004600039000000000034043500000040022000390000001d0220035f000000000202043b00000c710020009c0000004c0000213d0000000001120019001c00000001001d0000001f011000390000001b0010006c000000000200001900000c750200804100000c7501100197000000000391013f000000000091004b000000000100001900000c750100404100000c750030009c000000000102c019000000000001004b0000004c0000c13d0000001c020000290000001d0120035f000000000201043b00000c710020009c000000520000213d00000005032002100000003f0130003900000c7301100197000000400400043d0000000001140019001700000004001d000000000041004b0000000004000039000000010400403900000c710010009c000000520000213d0000000100400190000000520000c13d000000400010043f000000170100002900000000002104350000001c0100002900000020021000390000000003230019001a00000003001d0000001b0030006c0000004c0000213d0000001a0020006c0000001d0e00035f000013b20000813d000000170a000029000014d40000013d000000200aa000390000000001bf0019000000000001043500000060018000390000000000c104350000002001d0003900000000011e034f000000000101043b0000008003800039000000000013043500000000008a043500000020022000390000001a0020006c000013b20000813d00000000012e034f000000000101043b00000c710010009c0000004c0000213d0000001c0b1000290000001901b0006900000c740010009c0000004c0000213d000000a00010008c0000004c0000413d000000400800043d00000cc50080009c000000520000213d000000200db000390000001d01d0035f000000a00c8000390000004000c0043f000000000101043b00000c710010009c0000004c0000213d0000000005b100190000003f015000390000001b0010006c000000000400001900000c750400804100000c7501100197000000000691013f000000000091004b000000000100001900000c750100404100000c750060009c000000000104c019000000000001004b0000004c0000c13d00000020075000390000001d0170035f000000000f01043b00000c7100f0009c000000520000213d0000001f01f0003900000d0e011001970000003f0110003900000d0e011001970000000001c1001900000c710010009c000000520000213d0000004004500039000000400010043f0000000000fc043500000000014f00190000001b0010006c0000004c0000213d00000020017000390000001d0110035f00000d0e04f00198000000c0068000390000000005460019000015140000613d000000000701034f000000000e060019000000007307043c000000000e3e043600000000005e004b000015100000c13d0000001f07f00190000015210000613d000000000141034f0000000303700210000000000405043300000000043401cf000000000434022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000141019f000000000015043500000000016f001900000000000104350000000004c804360000002001d000390000001d0310035f000000000503043b00000c720050009c0000004c0000213d000000000054043500000020011000390000001d0310035f000000000403043b00000c6d0040009c0000004c0000213d00000040038000390000000000430435000000200d1000390000001d01d0035f000000000101043b00000c710010009c0000004c0000213d000000000fb100190000003f01f000390000001b0010006c000000000300001900000c750300804100000c7501100197000000000491013f000000000091004b000000000100001900000c750100404100000c750040009c000000000103c019000000000001004b0000004c0000c13d0000002005f000390000001d0150035f000000000b01043b00000c7100b0009c000000520000213d0000001f01b0003900000d0e011001970000003f0110003900000d0e01100197000000400c00043d00000000041c00190000000000c4004b0000000001000039000000010100403900000c710040009c000000520000213d0000000100100190000000520000c13d0000004001f00039000000400040043f000000000fbc043600000000011b00190000001b0010006c0000004c0000213d00000020015000390000001d0e00035f00000000041e034f00000d0e07b0019800000000057f0019000015680000613d000000000104034f00000000060f0019000000001301043c0000000006360436000000000056004b000015640000c13d0000001f01b00190000014c60000613d000000000374034f0000000301100210000000000405043300000000041401cf000000000414022f000000000303043b0000010001100089000000000313022f00000000011301cf000000000141019f0000000000150435000014c60000013d0000000e01000029000000100200002900000000002104350000001201000029000000600110003900000000011e034f000000000101043b00000c710010009c0000004c0000213d00000012021000290000003f012000390000001b0010006c000000000300001900000c750300804100000c7501100197000000000491013f000000000091004b000000000100001900000c750100404100000c750040009c000000000103c019000000000001004b0000004c0000c13d0000002003200039001700000003001d0000001d0130035f000000000101043b00000c710010009c000000520000213d00000005041002100000003f0340003900000c7303300197000000400500043d0000000003350019001600000005001d000000000053004b0000000005000039000000010500403900000c710030009c000000520000213d0000000100500190000000520000c13d000000400030043f00000016030000290000000000130435000000400120003900000000020100190000000003140019001800000003001d0000001b0030006c0000004c0000213d0000000001020019000000180010006c0000001d0200035f000016300000813d0000001603000029000015b70000013d0000001a0300002900000020033000390000000000a304350000001c010000290000002001100039000000180010006c0000001d0200035f000016300000813d001a00000003001d001c00000001001d000000000112034f000000000101043b00000c710010009c0000004c0000213d00000017081000290000003f018000390000001b0010006c000000000200001900000c750200804100000c7501100197000000000491013f000000000091004b000000000100001900000c750100404100000c750040009c000000000102c019000000000001004b0000004c0000c13d00000020018000390000001d0110035f000000000101043b00000c710010009c000000520000213d00000005021002100000003f0420003900000c7304400197000000400a00043d00000000044a00190000000000a4004b0000000005000039000000010500403900000c710040009c000000520000213d0000000100500190000000520000c13d000000400040043f00000000001a0435000000400b800039000000000cb200190000001b00c0006c0000004c0000213d0000000000cb004b000015af0000813d000000000d0a0019000015ed0000013d000000200dd000390000000001e2001900000000000104350000000000fd0435000000200bb000390000000000cb004b000015af0000813d0000001d01b0035f000000000101043b00000c710010009c0000004c0000213d00000000028100190000005f012000390000001b0010006c000000000400001900000c750400804100000c7501100197000000000591013f000000000091004b000000000100001900000c750100404100000c750050009c000000000104c019000000000001004b0000004c0000c13d00000040052000390000001d0150035f000000000e01043b00000c7100e0009c000000520000213d0000001f01e0003900000d0e011001970000003f0110003900000d0e01100197000000400f00043d00000000011f00190000000000f1004b0000000004000039000000010400403900000c710010009c000000520000213d0000000100400190000000520000c13d0000006004200039000000400010043f0000000002ef043600000000014e00190000001b0010006c0000004c0000213d00000020015000390000001d0710035f00000d0e04e001980000000005420019000016220000613d000000000107034f0000000006020019000000001301043c0000000006360436000000000056004b0000161e0000c13d0000001f01e00190000015e60000613d000000000347034f0000000301100210000000000405043300000000041401cf000000000414022f000000000303043b0000010001100089000000000313022f00000000011301cf000000000141019f0000000000150435000015e60000013d000000110100002900000040011000390000001603000029000000000031043500000012010000290000008001100039000000000212034f000000000202043b00000c710020009c0000004c0000213d00000012032000290000003f023000390000001b0020006c000000000400001900000c750400804100000c7502200197000000000592013f000000000092004b000000000200001900000c750200404100000c750050009c000000000204c019000000000002004b0000004c0000c13d00000020023000390000001d0220035f000000000402043b00000c710040009c000000520000213d00000005054002100000003f0250003900000c7306200197000000400200043d0000000007620019000000000027004b0000000006000039000000010600403900000c710070009c000000520000213d0000000100600190000000520000c13d0000004003300039000000400070043f000000000042043500000000043500190000001b0040006c0000004c0000213d000000000034004b0000001d0700035f000013500000a13d0000000005020019000000000637034f000000000606043b000000200550003900000000006504350000002003300039000000000043004b000016630000413d000013500000013d000000400100043d00000cb702000041000000000021043500000004021000390000000403000039000000000032043500000c6d0010009c00000c6d01008041000000400110021000000c85011001c7000031b30001043000000cb801000041000000000013043500000c6d0030009c00000c6d03008041000000400130021000000c90011001c7000031b3000104300000001805000029000016840000013d000000000575043600000020033000390000001a0030006c0000001d0100035f000000ba0000813d000000000131034f000000000101043b00000c710010009c0000004c0000213d0000001b0610002900000043016000390000001c0010006c000000000200001900000c750200804100000c7501100197000000000001004b000000000400001900000c750400404100000c750010009c000000000402c019000000000004004b0000004c0000c13d00000024016000390000001d0110035f000000000801043b00000c710080009c000000520000213d00000005098002100000003f0190003900000c7301100197000000400700043d0000000002170019000000000072004b0000000001000039000000010100403900000c710020009c000000520000213d0000000100100190000000520000c13d000000400020043f0000000000870435000000440860003900000000098900190000001c0090006c0000004c0000213d000000000098004b0000167f0000813d000000000a070019000016b60000013d000000200aa000390000000000dc04350000000000ba04350000002008800039000000000098004b0000167f0000813d0000001d0180035f000000000101043b00000c710010009c0000004c0000213d000000000d6100190000001201d0006900000c740010009c0000004c0000213d000000400010008c0000004c0000413d000000400b00043d00000c8800b0009c000000520000213d0000004001b00039000000400010043f0000004401d000390000001d0110035f000000000101043b000000000c1b04360000006401d000390000001d0110035f000000000101043b00000c710010009c0000004c0000213d000000000ed100190000006301e000390000001c0010006c000000000200001900000c750200804100000c7501100197000000000001004b000000000400001900000c750400404100000c750010009c000000000402c019000000000004004b0000004c0000c13d0000004401e000390000001d0110035f000000000f01043b00000c7100f0009c000000520000213d0000000502f002100000003f0120003900000c7301100197000000400d00043d00000000041d00190000000000d4004b0000000001000039000000010100403900000c710040009c000000520000213d0000000100100190000000520000c13d000000400040043f0000000000fd0435000000640ee00039000000000fe200190000001c00f0006c0000004c0000213d0000000000fe004b000016b00000813d00000000020d00190000001d01e0035f000000000101043b00000c6d0010009c0000004c0000213d00000020022000390000000000120435000000200ee000390000000000fe004b000016f50000413d000016b00000013d0000001c01000029000001000110003900000014070000290000170c0000013d00000020077000390000000009a900190000002009900039000000000009043500000060098000390000000000a904350000000000870435000000000054004b0000017c0000813d000000004804043400000c710080009c0000004c0000213d0000000009380019000000000891004900000c740080009c0000004c0000213d000000800080008c0000004c0000413d000000400800043d00000c700080009c000000520000213d000000800a8000390000004000a0043f000000200a900039000000000a0a043300000c7200a0009c0000004c0000213d000000000aa80436000000400b900039000000000b0b043300000c7100b0009c0000004c0000213d0000000000ba0435000000600a900039000000000a0a043300000000000a004b000000000b000039000000010b00c0390000000000ba004b0000004c0000c13d000000400b8000390000000000ab0435000000800a900039000000000a0a043300000c7100a0009c0000004c0000213d000000000b9a00190000003f09b00039000000000029004b000000000a00001900000c750a00804100000c7509900197000000000009004b000000000c00001900000c750c00404100000c750090009c000000000c0ac01900000000000c004b0000004c0000c13d0000002009b00039000000000909043300000c710090009c000000520000213d0000001f0a90003900000d0e0aa001970000003f0aa0003900000d0e0ca00197000000400a00043d000000000cca00190000000000ac004b000000000d000039000000010d00403900000c7100c0009c000000520000213d0000000100d00190000000520000c13d0000004000c0043f000000000c9a0436000000400bb00039000000000db9001900000000002d004b0000004c0000213d000000000009004b000017030000613d000000000d000019000000000edc0019000000000fbd0019000000000f0f04330000000000fe0435000000200dd0003900000000009d004b000017580000413d000017030000013d0000000102000039000000000302041a00000c7603300197000000000113019f000000000012041b00000c77010000410000000000100443000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c78011001c70000800b0200003931b131ac0000040f0000000100200190000025790000613d000000000101043b000000800010043f0000001b01000029000000000101043300000c72001001980000177e0000613d0000001a01000029000000000101043300000c72001001980000177e0000613d0000001801000029000000000101043300000c72001001980000186d0000c13d000000400100043d00000cc00200004100000e0c0000013d0000000f02000029000000a402200039000000000003004b000017a10000613d0000001d0300002900000000040304330000000503400210000000000004004b000017920000c13d000000a004000039000017980000013d000000400100043d00000cb702000041000000000021043500000004021000390000000103000039000016700000013d00000d120030009c00000b280000213d00000000044300d9000000200040008c00000b280000c13d000000a00430003900000000053400190000000002250019000000000052004b00000000050000390000000105004039000000000034001a00000b280000413d000000010050019000000b280000c13d0000000003000031000000000023004b000017e50000c13d0000001a0010006b000017f10000c13d00000cc9010000410000000000100443000000000100041200000004001004430000002400000443000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000cca011001c7000080050200003931b131ac0000040f0000000100200190000025790000613d000000000101043b001700000001001d00000c77010000410000000000100443000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c78011001c70000800b0200003931b131ac0000040f0000000100200190000025790000613d000000000101043b000000170010006b000018f90000c13d000000000100041100000c7201100197000000000010043f00000cef01000041000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000400200043d00000c880020009c000000520000213d000000000101043b0000004003200039000000400030043f000000000301041a000000ff0130018f00000000011204360000000803300270000000ff0330018f000000020030008c000019430000a13d00000d0a01000041000000000010043f0000002101000039000000040010043f00000c8501000041000031b300010430000000400100043d0000002404100039000000000034043500000ced0300004100000000003104350000000403100039000000000023043500000c6d0010009c00000c6d01008041000000400110021000000cd4011001c7000031b300010430000000400200043d0000002403200039000000000013043500000cee01000041000000000012043500000004012000390000001a03000029000025810000013d000000400100043d00000cb702000041000000000021043500000004021000390000000000020435000016710000013d00000cb701000041000000000013043500000004013000390000000502000039000000000021043500000c6d0030009c00000c6d03008041000000400130021000000c85011001c7000031b30001043000000000020000190000180e0000013d0000000102200039000000000012004b000000e00000813d00000005032002100000000004f300190000000004040433000000a00330003900000000030304330000000047040434000000200530003900000000050504330000000065050434000000000075004b000018580000c13d000000000005004b0000180b0000613d0000000007000019000018200000013d0000000107700039000000000057004b0000180b0000813d0000000508700210000000000984001900000000088600190000000008080433000000000909043300000000b9090434000000000009004b0000182c0000613d000000800a800039000000000a0a04330000000000a9004b0000192d0000413d000000a009800039000000000909043300000000a9090434000000000b0b043300000000bc0b04340000000000c9004b0000191c0000c13d000000000009004b0000181d0000613d000000000c0000190000183a0000013d000000010cc0003900000000009c004b0000181d0000813d000000050ec00210000000000deb0019000000000d0d043300000c6d0dd00198000018370000613d000000000eea0019000000000e0e0433000000400ee00039000000000e0e043300000c6d0ee001970000000000ed004b000018370000813d00000000010804330000000001010433000000400200043d00000064032000390000000000d3043500000044032000390000000000e3043500000024032000390000000000c3043500000ce80300004100000000003204350000000403200039000000000013043500000c6d0020009c00000c6d02008041000000400120021000000ce9011001c7000031b300010430000000400100043d00000ce50200004100000e0c0000013d000000400100043d00000cb402000041000000000021043500000004021000390000001d03000029000016700000013d000000400100043d00000cb702000041000000000021043500000004021000390000000203000039000016700000013d000000400100043d00000cb702000041000000000021043500000004021000390000000303000039000016700000013d0000001d01000029000000000101043300000c7101100198000018770000c13d000000400100043d00000d0d0200004100000e0c0000013d000000400100043d00000cbc0200004100000e0c0000013d000000a00010043f0000001b03000029000000000103043300000c7201100197000000c00010043f0000001a04000029000000000104043300000c7201100197000000e00010043f0000001805000029000000000105043300000c7201100197000001000010043f0000001d01000029000000000101043300000c7101100197000000400200043d0000000001120436000000000303043300000c72033001970000000000310435000000000104043300000c720110019700000040032000390000000000130435000000000105043300000c72011001970000006003200039000000000013043500000c6d0020009c00000c6d020080410000004001200210000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c79011001c70000800d02000039000000010300003900000c7a0400004131b131a70000040f00000001002001900000004c0000613d0000001901000029000000000101043300000c72011001980000177e0000613d0000000402000039000000000302041a00000c7b0330019700000017050000290000000004050433000000a00440021000000c7c04400197000000000343019f00000016060000290000000004060433000000000004004b00000c7d040000410000000004006019000000000343019f000000000313019f000000000032041b0000001507000029000000000207043300000c72022001970000000504000039000000000304041a00000c7603300197000000000223019f000000000024041b000000400200043d0000000001120436000000000305043300000c6d0330019700000000003104350000000001060433000000000001004b0000000001000039000000010100c03900000040032000390000000000130435000000000107043300000c72011001970000006003200039000000000013043500000c6d0020009c00000c6d020080410000004001200210000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c79011001c70000800d02000039000000010300003900000c7e0400004131b131a70000040f00000001002001900000004c0000613d00000014010000290000000001010433000000000001004b0000197b0000c13d000000800100043d00000140000004430000016000100443000000a00100043d00000020020000390000018000200443000001a000100443000000c00100043d0000004003000039000001c000300443000001e0001004430000006001000039000000e00300043d00000200001004430000022000300443000001000100043d00000080030000390000024000300443000002600010044300000100002004430000000501000039000001200010044300000c8e01000041000031b20001042e000000400200043d0000002403200039000000000013043500000ce401000041000000000012043500000004012000390000001703000029000025810000013d00000140070000390000001a0850006900000c740080009c0000004c0000213d000000400080008c0000004c0000413d000000400800043d00000c880080009c000000520000213d0000004009800039000000400090043f0000001d0950035f000000000909043b00000c720090009c0000004c0000213d0000000009980436000000200a5000390000001d0aa0035f000000000a0a043b00000cf300a0009c0000004c0000213d0000000000a9043500000000078704360000004005500039000000000065004b000019020000413d000005430000013d000000000108043300000000020104330000006001100039000000000101043300000c7101100197000000400300043d0000002404300039000000000014043500000ce70100004100000000001304350000000401300039000000000021043500000c6d0030009c00000c6d03008041000000400130021000000cd4011001c7000031b300010430000000000103043300000000020804330000000002020433000000400300043d000000440430003900000000009404350000002404300039000000000024043500000ce602000041000000000023043500000c71011001970000000402300039000000000012043500000c6d0030009c00000c6d03008041000000400130021000000cd9011001c7000031b300010430000000400200043d00000cc70020009c000000520000213d00000af80000013d0000000000310435000025870000c13d0000000101000039000000000010043f0000000201000039000000200010043f0000000001020433001700ff0010019300000cf001000041000000000201041a000000170020006c000025730000a13d000000000010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c82011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b0000001701100029000000000101041a00000c72011001970000000002000411000000000012004b000025870000c13d00000019010000290000000001010433000000000001004b00001c170000c13d00000024010000390000000201100367000000000101043b00000c7101100197000000400200043d000000200320003900000000001304350000001a01000029000000000012043500000c6d0020009c00000c6d020080410000004001200210000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c7f011001c70000800d020000390000000203000039000000010500003900000cf20400004100000b460000013d0000000002000019001600000002001d00000005012002100000001301100029000000000201043300000020012000390000000001010433001c0c710010019c000018710000613d001800000002001d000000000102043300000c72001001980000177e0000613d0000001c01000029000000000010043f0000000801000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b001a00000001001d0000000101100039001d00000001001d000000000101041a000000010210019000000001051002700000007f0550618f0000001f0050008c00000000030000390000000103002039000000000032004b00000b860000c13d0000001803000029000000600330003900000000040304330000001a03000029000000000303041a001b00000005001d000000000005004b001900000004001d001700200040003d000019cd0000613d00000c800330019700000c810030009c00001a200000613d000000400300043d001500000003001d0000001b040000290000000003430436001200000003001d000000000002004b000019e40000613d0000001d01000029000000000010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c82011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000201043b000000000100001900000012050000290000001b060000290000000003510019000000000402041a000000000043043500000001022000390000002001100039000000000061004b000019c50000413d000019e80000013d00000c860130019700000c81011001c70000001a02000029000000000012041b000000400100043d0000001c02000029000000000021043500000c6d0010009c00000c6d010080410000004001100210000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c82011001c70000800d02000039000000010300003900000c870400004131b131a70000040f000000010020019000001a200000c13d0000004c0000013d00000d10011001970000001202000029000000000012043500000020010000390000003f0110003900000d0e021001970000001501200029000000000021004b0000000002000039000000010200403900000c710010009c000000520000213d0000000100200190000000520000c13d000000400010043f000000120100002900000c6d0010009c00000c6d0100804100000040011002100000001502000029000000000202043300000c6d0020009c00000c6d020080410000006002200210000000000112019f000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c83011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000170200002900000c6d0020009c00000c6d0200804100000040022002100000001903000029000000000303043300000c6d0030009c00000c6d030080410000006003300210000000000223019f000000000101043b001b00000001001d000000000100041400000c6d0010009c00000c6d01008041000000c001100210000000000121019f00000c83011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b0000001b0010006b00001b600000c13d00000019010000290000000001010433000000000001004b0000177e0000613d00000c6d0010009c00000c6d010080410000006001100210000000170200002900000c6d0020009c00000c6d020080410000004002200210000000000121019f000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c83011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b001b00000001001d000000400100043d00000020020000390000000002210436000000000002043500000c880010009c000000520000213d0000004003100039000000400030043f00000c6d0020009c00000c6d020080410000004002200210000000000101043300000c6d0010009c00000c6d010080410000006001100210000000000121019f000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c83011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b0000001b0010006b0000177e0000613d00000019010000290000000001010433001b00000001001d00000c710010009c000000520000213d0000001d01000029000000000101041a000000010010019000000001031002700000007f0330618f0000001f0030008c00000000020000390000000102002039000000000121013f000000010010019000000b860000c13d001500000003001d000000200030008c00001a840000413d0000001d01000029000000000010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c82011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d0000001b030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000015010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b00001a840000813d000000000002041b0000000102200039000000000012004b00001a800000413d0000001b010000290000001f0010008c00001aa40000a13d0000001d01000029000000000010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c82011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000200200008a0000001b02200180000000000101043b00001ab20000613d000000010320008a0000000503300270000000000331001900000001043000390000002003000039000000190600002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b00001a9c0000c13d00001ab30000013d0000001b0000006b00001aa90000613d0000001701000029000000000101043300001aaa0000013d00000000010000190000001b04000029000000030240021000000d110220027f00000d1102200167000000000121016f0000000102400210000000000121019f00001ac00000013d00000020030000390000001b05000029000000000052004b00001abe0000813d0000000302500210000000f80220018f00000d110220027f00000d110220016700000019033000290000000003030433000000000223016f000000000021041b000000010150021000000001011001bf0000001d02000029000000000012041b000000180400002900000040014000390000000001010433000000000001004b00000c890100004100000000010060190000001a03000029000000000203041a00000c8a02200197000000000112019f000000000204043300000c7202200197000000000121019f000000000013041b0000001c01000029000000000010043f0000000701000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b000000000101041a000000000001004b00001afc0000c13d0000000601000039000000000101041a00000c710010009c000000520000213d00000001021000390000000603000039000000000023041b00000c8b0110009a0000001c02000029000000000021041b000000000103041a001b00000001001d000000000020043f0000000701000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b0000001b02000029000000000021041b000000400500043d000000200100003900000000011504360000001a02000029000000000202041a00000080035000390000008004000039000000000043043500000c72032001970000000000310435000000a80120027000000c71011001970000006003500039000000000013043500000c8c002001980000000001000039000000010100c039000000400250003900000000001204350000001d01000029000000000101041a000000010210019000000001041002700000007f0440618f0000001f0040008c00000000030000390000000103002039000000000331013f000000010030019000000b860000c13d001a00000005001d000000a003500039001b00000004001d0000000000430435000000000002004b00001b3a0000613d0000001d01000029000000000010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c82011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d0000001b0000006b00001b420000613d0000001a06000029000000c002600039000000000301043b00000000010000190000001b070000290000000004210019000000000503041a000000000054043500000001033000390000002001100039000000000071004b00001b320000413d00001b440000013d00000d10011001970000001a06000029000000c00260003900000000001204350000001b0000006b0000002001000039000000000100603900001b440000013d00000000010000190000001a0600002900000c6d0060009c00000c6d060080410000004002600210000000c00110003900000c6d0010009c00000c6d010080410000006001100210000000000121019f000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000121019f00000c83011001c70000800d02000039000000020300003900000c8d040000410000001c0500002931b131a70000040f00000001002001900000004c0000613d0000001602000029000000010220003900000014010000290000000001010433000000000012004b0000197c0000413d000018e10000013d000000400100043d00000c8402000041000000000021043500000004021000390000001c03000029000016700000013d0000001c01000029000000200610008a000000190700002900001b780000013d000000200770003900000000019c0019000000000001043500000060018000390000000000b104350000002001a000390000001d0110035f000000000101043b00000080028000390000000000120435000000000087043500000020044000390000001a0040006c00000c5c0000813d0000001d0140035f000000000101043b00000c710010009c0000004c0000213d0000001b09100029000000000196004900000c740010009c0000004c0000213d000000a00010008c0000004c0000413d000000400800043d00000cc50080009c000000520000213d000000200a9000390000001d01a0035f000000a00b8000390000004000b0043f000000000101043b00000c710010009c0000004c0000213d000000000d9100190000003f01d000390000001c0010006c000000000200001900000c750200804100000c7501100197000000000001004b000000000300001900000c750300404100000c750010009c000000000302c019000000000003004b0000004c0000c13d000000200ed000390000001d01e0035f000000000c01043b00000c7100c0009c000000520000213d0000001f01c0003900000d0e011001970000003f0110003900000d0e011001970000000001b1001900000c710010009c000000520000213d0000004002d00039000000400010043f0000000000cb043500000000012c00190000001c0010006c0000004c0000213d0000002001e000390000001d0210035f00000d0e03c00198000000c00d800039000000000e3d001900001bb70000613d000000000f02034f00000000010d001900000000f50f043c00000000015104360000000000e1004b00001bb30000c13d0000001f01c0019000001bc40000613d000000000232034f000000030110021000000000030e043300000000031301cf000000000313022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000131019f00000000001e04350000000001dc001900000000000104350000000002b804360000002001a000390000001d0310035f000000000303043b00000c720030009c0000004c0000213d000000000032043500000020011000390000001d0210035f000000000202043b00000c6d0020009c0000004c0000213d00000040038000390000000000230435000000200a1000390000001d01a0035f000000000101043b00000c710010009c0000004c0000213d000000000c9100190000003f01c000390000001c0010006c000000000200001900000c750200804100000c7501100197000000000001004b000000000300001900000c750300404100000c750010009c000000000302c019000000000003004b0000004c0000c13d000000200dc000390000001d01d0035f000000000901043b00000c710090009c000000520000213d0000001f0190003900000d0e011001970000003f0110003900000d0e01100197000000400b00043d00000000031b00190000000000b3004b0000000001000039000000010100403900000c710030009c000000520000213d0000000100100190000000520000c13d0000004001c00039000000400030043f000000000c9b043600000000011900190000001c0010006c0000004c0000213d0000002001d000390000001d0310035f00000d0e0e900198000000000dec001900001c090000613d000000000203034f00000000010c0019000000002502043c00000000015104360000000000d1004b00001c050000c13d0000001f0190019000001b6a0000613d0000000002e3034f000000030110021000000000030d043300000000031301cf000000000313022f000000000202043b0000010001100089000000000212022f00000000011201cf000000000131019f00000000001d043500001b6a0000013d00000018010000290000000001010433000000ff0110018f000000ff0010008c00000b280000613d00000001011000390000001d020000290000000002020433000000000012004b0000258a0000c13d0000000f010000290000001f0110003900000d0e011001970000003f0110003900000d0e02100197000000400100043d0000000002210019000000000012004b0000000004000039000000010400403900000c710020009c000000520000213d0000000100400190000000520000c13d000000400020043f0000000f0200002900000000022104360000001b05000029000000000050007c0000004c0000213d0000000f0500002900000d0e045001980000001f0550018f00000009030000290000000206300367000000000342001900001c420000613d000000000706034f0000000008020019000000007907043c0000000008980436000000000038004b00001c3e0000c13d000000000005004b00001c4f0000613d000000000446034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004304350000000f03200029000000000003043500000c6d0020009c00000c6d020080410000004002200210000000000101043300000c6d0010009c00000c6d010080410000006001100210000000000121019f000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c83011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000301043b000000400100043d00000020021000390000000000320435000000a003100039000000400410003900000004050000390000000205500367000000005605043c0000000004640436000000000034004b00001c6b0000c13d0000008004000039000000000041043500000cc50010009c000000520000213d000000400030043f00000c6d0020009c00000c6d020080410000004002200210000000000101043300000c6d0010009c00000c6d010080410000006001100210000000000121019f000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c83011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b001800000001001d0000001d010000290000000001010433001700000001001d000000000001004b000019640000613d001b00000000001d001900000000001d0000001b010000290000001f0010008c000025730000213d0000001d0100002900000000010104330000001b0010006c000025730000a13d0000001b0100002900000005011002100000001c011000290000000001010433000000400200043d000000600320003900000000001304350000004003200039000000000013043500000020012000390000001b03000039000000000031043500000018010000290000000000120435000000000000043f00000c6d0020009c00000c6d020080410000004001200210000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000cf1011001c7000000010200003931b131ac0000040f000000600310027000000c6d03300197000000200030008c00000020050000390000000005034019000000200450019000001cbd0000613d000000000601034f0000000007000019000000006806043c0000000007870436000000000047004b00001cb90000c13d0000001f0550019000001cca0000613d000000000641034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000100000003001f000300000001035500000001002001900000258d0000613d000000000100043d00000c7201100197000000000010043f00000cef01000041000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000400200043d00000c880020009c000000520000213d000000000101043b0000004003200039000000400030043f000000000301041a000000ff0130018f00000000021204360000000803300270000000ff0330018f000000020030008c000017df0000213d0000000000320435000000010030008c000025e20000c13d000000010110020f0000001900100180000025e50000c13d00190019001001b30000001b020000290000000102200039001b00000002001d000000170020006c00001c8f0000413d000019640000013d00000cc6010000410000000f02000029000000000012043500000c6d0020009c00000c6d02008041000000400120021000000c90011001c7000031b3000104300000000001000415000100000001001d0000000901000029000000000301043300000c710030009c000000520000213d00000005013002100000003f0210003900000c7302200197000000400500043d0000000004250019000f00000005001d000000000054004b0000000002000039000000010200403900000c710040009c000000520000213d0000000100200190000000520000c13d000000a00200043d000500000002001d000000e00200043d000600000002001d000000800200043d00000020022000390000000002020433000000400040043f0000000f040000290000000004340436001d00000004001d000000000003004b00001d2c0000613d0000000003000019000000400400043d00000c880040009c000000520000213d0000004005400039000000400050043f0000002005400039000000000005043500000000000404350000001d0530002900000000004504350000002003300039000000000013004b00001d1f0000413d00000009010000290000000001010433000000000001004b00001de70000c13d00000000010004150000000101100069000000000100000200000cb10000013d00000cd10100004100000000001004430000001c010000290000000400100443000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000cd2011001c7000080020200003931b131ac0000040f0000000100200190000025790000613d000000000101043b000000000001004b0000004c0000613d000000400500043d00000cde0100004100000000001504350000000401500039000000200200003900000000002104350000001d010000290000000002010433000000240150003900000000002104350000001802000029000000000202043300000c710220019700000044035000390000000000230435000000190200002900000000020204330000006403500039000000a0040000390000000000430435000000c40350003900000000420204340000000000230435001700000005001d000000e403500039000000000002004b00001d670000613d000000000500001900000000063500190000000007540019000000000707043300000000007604350000002005500039000000000025004b00001d600000413d000000000432001900000000000404350000001f0220003900000d0e02200197000000000232001900000000031200490000001a04000029000000000404043300000017050000290000008405500039000000000035043500000000430404340000000002320436000000000003004b00001d7e0000613d000000000500001900000000062500190000000007540019000000000707043300000000007604350000002005500039000000000035004b00001d770000413d000000000423001900000000000404350000001f0330003900000d0e03300197000000000423001900000000011400490000001b0200002900000000020204330000001703000029000000a403300039000000000013043500000000030204330000000001340436000000000003004b00001d990000613d000000000400001900000020022000390000000005020433000000006505043400000c720550019700000000055104360000000006060433000000000065043500000040011000390000000104400039000000000034004b00001d8e0000413d00000000020004140000001c03000029000000040030008c00001db10000613d0000001703000029000000000131004900000c6d0010009c00000c6d01008041000000600110021000000c6d0030009c00000c6d030080410000004003300210000000000131019f00000c6d0020009c00000c6d02008041000000c002200210000000000121019f0000001c0200002931b131a70000040f000000600310027000010c6d0030019d00030000000103550000000100200190000025990000613d000000170100002900000c710010009c000000520000213d0000001701000029000000400010043f00000cd00000013d0000000001000415000000210110008a001c000500100218002100000000003d000000e00100043d00000cd102000041000000000020044300000c72011001970000000400100443000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000cd2011001c7000080020200003931b131ac0000040f0000000100200190000025790000613d000000000101043b000000000001004b0000001c010000290000000501100270000000000100003f000000010100603f000028e80000613d000000e00300043d0000000001000415001c00000001001d000000400100043d000000200210003900000ccb040000410000000000420435000000240510003900000000004504350000002404000039000000000041043500000cb00010009c000000520000213d00000c72043001970000006003100039000000400030043f001700000004001d000000040040008c000025a00000c13d0000000001020433000000000010043f0000000103000031000025cb0000013d000000060300002900110c720030019b00040c710020019b001b00000000001d0000000b0000006b0000001b02000029001700050020021800001e010000613d0000001b030000290000000b0030006c000025730000813d000000170300002900000003023000290000000202200367000000000202043b00000c6d0020009c0000004c0000213d000000000002004b00001e010000613d00000017030000290000000801300029000000000101043300000040011000390000000000210435000000090100002900000000010104330000001b0010006c000025730000a13d0000001b02000029000000070020006c000025730000813d000000170200002900000008012000290000000001010433001900000001001d00000010012000290000000202000367000000000112034f000000000101043b00000000030000310000000c0430006a000000430440008a00000c750540019700000c7506100197000000000756013f000000000056004b000000000500001900000c7505004041000000000041004b000000000400001900000c750400804100000c750070009c000000000504c019000000000005004b0000004c0000c13d0000001004100029000000000142034f000000000101043b00000c710010009c0000004c0000213d0000000006130049000000200540003900000c750460019700000c7507500197000000000847013f000000000047004b000000000400001900000c7504004041000000000065004b000000000600001900000c750600204100000c750080009c000000000406c019000000000004004b0000004c0000c13d0000001f0410003900000d0e044001970000003f0440003900000d0e04400197000000400600043d0000000004460019001200000006001d000000000064004b0000000006000039000000010600403900000c710040009c000000520000213d0000000100600190000000520000c13d000000400040043f000000120400002900000000041404360000000006510019000000000036004b0000004c0000213d000000000352034f00000d0e05100198000000000254001900001e500000613d000000000603034f0000000007040019000000006806043c0000000007870436000000000027004b00001e4c0000c13d0000001f0610019000001e5d0000613d000000000353034f0000000305600210000000000602043300000000065601cf000000000656022f000000000303043b0000010005500089000000000353022f00000000035301cf000000000363019f0000000000320435000000000114001900000000000104350000000001000415000e00000001001d000000400100043d00000c880010009c000000520000213d0000004002100039000000400020043f000000200210003900000000000204350000000000010435000000190100002900000020011000390000000001010433000000400300043d00000cc802000041000000000023043500000c7202100197001c00000003001d0000000401300039001a00000002001d000000000021043500000cc90100004100000000001004430000000001000412000000040010044300000060010000390000002400100443000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000cca011001c7000080050200003931b131ac0000040f0000000100200190000025790000613d000000000201043b000000000100041400000c7202200197000000040020008c00001e8d0000c13d0000000103000031000000200030008c0000002004000039000000000403401900001eb60000013d0000001c0300002900000c6d0030009c00000c6d03008041000000400330021000000c6d0010009c00000c6d01008041000000c001100210000000000131019f00000c85011001c731b131ac0000040f000000600310027000000c6d03300197000000200030008c0000002004000039000000000403401900000020064001900000001c0560002900001ea50000613d000000000701034f0000001c08000029000000007907043c0000000008980436000000000058004b00001ea10000c13d0000001f0740019000001eb20000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000026370000613d0000001f01400039000000600210018f0000001c01200029000000000021004b0000000002000039000000010200403900000c710010009c000000520000213d0000000100200190000000520000c13d000000400010043f000000200030008c0000004c0000413d0000001c010000290000000001010433001c00000001001d00000c720010009c0000004c0000213d0000001c0000006b000026490000613d0000000001000415001600000001001d000000400100043d000000200210003900000ccb040000410000000000420435000000240310003900000000004304350000002403000039000000000031043500000cb00010009c000000520000213d0000006003100039000000400030043f0000001c03000029000000040030008c00001edf0000c13d0000000001020433000000000010043f000000010300003100001f090000013d00000c6d0020009c00000c6d020080410000004002200210000000000101043300000c6d0010009c00000c6d010080410000006001100210000000000121019f00000ccc011001c70000001c0200002931b131ac0000040f000000600310027000000c6d03300197000000200030008c00000020050000390000000005034019000000200450019000001ef70000613d000000000601034f0000000007000019000000006806043c0000000007870436000000000047004b00001ef30000c13d0000001f0550019000001f040000613d000000000641034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000100000003001f00030000000103550000000100200190000026460000613d000000000100043d000000200030008c000026460000413d000000000001004b000026460000613d000000400100043d000000200210003900000ccb040000410000000000420435000000240410003900000ccd0500004100000000005404350000002404000039000000000041043500000cb00010009c000000520000213d0000006004100039000000400040043f0000001c04000029000000040040008c00001f200000c13d0000000001020433000000000010043f00001f510000013d00000c6d0020009c00000c6d020080410000004002200210000000000101043300000c6d0010009c00000c6d010080410000006001100210000000000121019f00000ccc011001c70000001c0200002931b131ac0000040f000000600310027000000c6d03300197000000200030008c00000020050000390000000005034019000000200450019000001f380000613d000000000601034f0000000007000019000000006806043c0000000007870436000000000047004b00001f340000c13d0000001f0550019000001f450000613d000000000641034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f00000000005404350003000000010355000100000003001f0000001f0030008c00000000010000390000000101002039000000000112016f0000000002000415000000230220008a0018000500200218000000010010008c00001f560000c13d000000000100043d0000000002000415000000220220008a0018000500200218000000000001004b000026460000c13d000000400100043d000000200210003900000ccb040000410000000000420435000000240410003900000cce0500004100000000005404350000002404000039000000000041043500000cb00010009c000000520000213d0000006004100039000000400040043f0000001c04000029000000040040008c00001f690000c13d0000000001020433000000000010043f00001f930000013d00000c6d0020009c00000c6d020080410000004002200210000000000101043300000c6d0010009c00000c6d010080410000006001100210000000000121019f00000ccc011001c70000001c0200002931b131ac0000040f000000600310027000000c6d03300197000000200030008c00000020050000390000000005034019000000200450019000001f810000613d000000000601034f0000000007000019000000006806043c0000000007870436000000000047004b00001f7d0000c13d0000001f0550019000001f8e0000613d000000000641034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000100000003001f00030000000103550000000100200190000026430000613d000000000100043d000000200030008c000026430000413d000000000001004b00000018010000290000000501100270000000000100003f000000010100c03f000000000100041500000016011000690000000001000002000026490000613d000000190100002900000040011000390000000001010433000000400400043d000000200340003900000ccf02000041000a00000003001d000000000023043500000024024000390000001103000029000000000032043500000024020000390000000000240435001400000004001d00000cb00040009c000000520000213d00000014030000290000006002300039001800000002001d000000400020043f00000cd00030009c000000520000213d00130c6d0010019b00000014040000290000012001400039000000400010043f000000840200003900000018030000290000000000230435000000800340003900000000020000310000000202200367001600000003001d000000002402043c0000000003430436000000000013004b00001fbf0000c13d00000cd10100004100000000001004430000001a010000290000000400100443000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000cd2011001c7000080020200003931b131ac0000040f0000000100200190000025790000613d000000000101043b000000000001004b0000265b0000613d0000000001000414000013880110008c0000265f0000413d00000006021002700000000001210049000000130010006c000026630000a13d0000000001000414000d00000001001d0000001a01000029000000040010008c00001fe30000c13d00000003010003670000000104000031000000000200001900001ff70000013d0000000a0100002900000c6d0010009c00000c6d0100804100000040011002100000001402000029000000000202043300000c6d0020009c00000c6d020080410000006002200210000000000112019f0000001302000029000000c002200210000000000121019f0000001a0200002931b131a70000040f000000010220015f0003000000010355000000600310027000010c6d0030019d00000c6d043001970000000003000414000000840040008c000000840400803900000018050000290000000000450435000000e0064001900000001605600029000020050000613d000000000701034f0000001608000029000000007907043c0000000008980436000000000058004b000020010000c13d0000001f04400190000020120000613d000000000161034f0000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f000000000015043500000001002001900000264c0000c13d00000018010000290000000001010433000000200010008c000026700000c13d0000000d01300069001400130010007300000b280000413d000000400600043d00000cd50060009c000000520000213d00000016010000290000000001010433001300000001001d0000001902000029000000800120003900000000070104330000000004020433000000600120003900000000030104330000010001600039000000400010043f000000e00160003900000012020000290000000000210435000000c0026000390000000000320435000000a003600039000000000043043500000080046000390000001a0500002900000000005404350000006005600039000000000075043500000040076000390000001108000029000000000087043500000020096000390000000408000029000000000089043500000005080000290000000000860435000000400c00043d000000200ac0003900000cd608000041000d0000000a001d00000000008a04350000002408c00039000000200a0000390000000000a8043500000000060604330000004408c00039000001000a0000390000000000a80435000001440bc0003900000000a806043400000000008b043500190000000c001d0000016406c00039000000000008004b000020580000613d000000000b000019000000000c6b0019000000000dba0019000000000d0d04330000000000dc0435000000200bb0003900000000008b004b000020510000413d000000000a68001900000000000a0435000000000909043300000c7109900197000000190b000029000000640ab0003900000000009a0435000000000707043300000c72077001970000008409b0003900000000007904350000000005050433000000a407b000390000000000570435000000000404043300000c7204400197000000c405b0003900000000004504350000001f0480003900000d0e04400197000000e405b00039000000000303043300000120074000390000000000750435000000000664001900000000540304340000000003460436000000000004004b0000207d0000613d000000000600001900000000073600190000000008650019000000000808043300000000008704350000002006600039000000000046004b000020760000413d000000000534001900000000000504350000001f0440003900000d0e04400197000000000534001900000019040000290000000003450049000000440330008a00000000020204330000010404400039000000000034043500000000430204340000000002350436000000000003004b000020940000613d000000000500001900000000062500190000000007540019000000000707043300000000007604350000002005500039000000000035004b0000208d0000413d000000000423001900000000000404350000001f0330003900000d0e03300197000000000223001900000019040000290000000003420049000000440330008a00000000010104330000012404400039000000000034043500000000310104340000000002120436000000000001004b000020ab0000613d000000000400001900000000052400190000000006430019000000000606043300000000006504350000002004400039000000000014004b000020a40000413d00000000032100190000000000030435000000190400002900000000024200490000001f0110003900000d0e011001970000000001210019000000200210008a00000000002404350000001f0110003900000d0e011001970000000002410019000000000012004b00000000010000390000000101004039001800000002001d00000c710020009c000000520000213d0000000100100190000000520000c13d0000001801000029000000400010043f00000cb30010009c000000520000213d0000001803000029000000c001300039000000400010043f0000008402000039000000000323043600000000020000310000000202200367001600000003001d000000002402043c0000000003430436000000000013004b000020cb0000c13d00000cd10100004100000000001004430000001c010000290000000400100443000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000cd2011001c7000080020200003931b131ac0000040f0000000100200190000025790000613d000000000101043b000000000001004b0000265b0000613d0000000001000414000013880110008c0000265f0000413d00000006021002700000000001210049000000140010006c000026630000a13d0000000001000414001200000001001d0000001c01000029000000040010008c000020ef0000c13d000000030100036700000001040000310000000002000019000021050000013d0000000d0100002900000c6d0010009c00000c6d0100804100000040011002100000001902000029000000000202043300000c6d0020009c00000c6d020080410000006002200210000000000112019f000000140200002900000c6d0020009c00000c6d02008041000000c002200210000000000121019f0000001c0200002931b131a70000040f000000010220015f0003000000010355000000600310027000010c6d0030019d00000c6d043001970000000003000414000000840040008c000000840400803900000018050000290000000000450435000000e0064001900000001605600029000021130000613d000000000701034f0000001608000029000000007907043c0000000008980436000000000058004b0000210f0000c13d0000001f04400190000021200000613d000000000161034f0000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f00000000001504350000000100200190000026530000c13d00000018010000290000000001010433000000200010008c000026700000c13d0000001c02000029000000060120014f00000016020000290000000002020433001c00000002001d00000c7200100198000021b10000613d0000001201300069001400140010007300000b280000413d000000400300043d000000200230003900000ccf01000041000d00000002001d000000000012043500000024013000390000001102000029000000000021043500000024010000390000000000130435001600000003001d00000cb00030009c000000520000213d00000016020000290000006001200039001900000001001d000000400010043f00000cd00020009c000000520000213d00000016040000290000012001400039000000400010043f000000840200003900000019030000290000000000230435000000800340003900000000020000310000000202200367001800000003001d000000002402043c0000000003430436000000000013004b0000214d0000c13d00000cd10100004100000000001004430000001a010000290000000400100443000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000cd2011001c7000080020200003931b131ac0000040f0000000100200190000025790000613d000000000101043b000000000001004b0000265b0000613d0000000001000414000013880110008c0000265f0000413d00000006021002700000000001210049000000140010006c000026630000a13d0000000001000414001200000001001d0000001a01000029000000040010008c000021710000c13d000000030100036700000001040000310000000002000019000021870000013d0000000d0100002900000c6d0010009c00000c6d0100804100000040011002100000001602000029000000000202043300000c6d0020009c00000c6d020080410000006002200210000000000112019f000000140200002900000c6d0020009c00000c6d02008041000000c002200210000000000121019f0000001a0200002931b131a70000040f000000010220015f0003000000010355000000600310027000010c6d0030019d00000c6d043001970000000003000414000000840040008c000000840400803900000019050000290000000000450435000000e0064001900000001805600029000021950000613d000000000701034f0000001808000029000000007907043c0000000008980436000000000058004b000021910000c13d0000001f04400190000021a20000613d000000000161034f0000000304400210000000000605043300000000064601cf000000000646022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000161019f00000000001504350000000100200190000026670000c13d00000019010000290000000001010433000000200010008c000026700000c13d0000001201300069000000140010006c00000b280000213d00000018010000290000000001010433000000130210006c000026780000413d0000001c0020006c000026780000c13d000000400100043d00000c880010009c000000520000213d0000004002100039000000400020043f00000020021000390000001c0300002900000000003204350000001a02000029000000000021043500000000020004150000000e0220006900000000020000020000000f0200002900000000020204330000001b0020006c000025730000a13d00000017030000290000001d0230002900000000001204350000000f0100002900000000010104330000001b0010006c000025730000a13d000000090100002900000000010104330000001b02000029001b00010020003d0000001b0010006b00001deb0000413d00001d300000013d000000a00100043d0000000001010433000000000001004b000021d70000c13d000000400100043d00000cf50200004100000e0c0000013d000000a00200043d0000000001020433000000000001004b0000233b0000613d000d00000000001d0000000d010000290000000501100210000000000112001900000020011000390000000001010433001000000001001d0000000021010434000c00000002001d000000400300043d00000cf702000041000000000023043500000c7101100197001c00000001001d0000008001100210001d00000003001d0000000402300039000000000012043500000cc90100004100000000001004430000000001000412000000040010044300000040010000390000002400100443000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000cca011001c7000080050200003931b131ac0000040f0000000100200190000025790000613d000000000201043b000000000100041400000c7202200197000000040020008c000022060000c13d0000000103000031000000200030008c000000200400003900000000040340190000222f0000013d0000001d0300002900000c6d0030009c00000c6d03008041000000400330021000000c6d0010009c00000c6d01008041000000c001100210000000000131019f00000c85011001c731b131ac0000040f000000600310027000000c6d03300197000000200030008c0000002004000039000000000403401900000020064001900000001d056000290000221e0000613d000000000701034f0000001d08000029000000007907043c0000000008980436000000000058004b0000221a0000c13d0000001f074001900000222b0000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000026880000613d0000001f01400039000000600210018f0000001d01200029000000000021004b0000000002000039000000010200403900000c710010009c000000520000213d0000000100200190000000520000c13d000000400010043f000000200030008c0000004c0000413d0000001d020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b0000004c0000c13d000000000002004b000026940000c13d0000001c01000029000000000010043f0000000801000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b000e00000001001d000000000101041a00000c8c00100198000026960000613d0000000c010000290000000001010433000000200210003900000c6d0020009c00000c6d020080410000004002200210000000000101043300000c6d0010009c00000c6d010080410000006001100210000000000121019f000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c83011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d0000000e020000290000000102200039000a00000002001d000000000202041a000000010320019000000001052002700000007f0550618f000000400400043d000f00000004001d000000000101043b000b00000001001d001d00000005001d0000001f0050008c00000000010000390000000101002039000000000112013f000000010010019000000b860000c13d0000000f010000290000001d040000290000000001410436001c00000001001d000000000003004b0000229b0000613d0000000a01000029000000000010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c82011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d0000001d0000006b000022a20000613d000000000201043b00000000010000190000001c03100029000000000402041a0000000000430435000000010220003900000020011000390000001d0010006c000022930000413d000022a30000013d00000d10012001970000001c0200002900000000001204350000001d0000006b00000020010000390000000001006039000022a30000013d00000000010000190000003f0110003900000d0e021001970000000f01200029000000000021004b0000000002000039000000010200403900000c710010009c000000520000213d0000000100200190000000520000c13d000000400010043f0000001c0100002900000c6d0010009c00000c6d0100804100000040011002100000000f02000029000000000202043300000c6d0020009c00000c6d020080410000006002200210000000000112019f000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c83011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b0000000b0010006b000026990000c13d00000010020000290000006001200039001c00000001001d000000000101043300000c71011001970000004002200039000000000202043300000c71022001970000000e03000029000000000303041a000000a80330027000000c7103300197000000000023004b000026d90000c13d000000000013004b0000000002030019000026d90000213d000000100100002900000080011000390000000001010433001d00000001001d000000000001004b000026ea0000613d0000001001000029000000000101043300000c7101100197000000000010043f0000000a01000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b0000001d02000029000000000020043f000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b000000000101041a000000000001004b000026ed0000c13d0000001c01000029000000000101043300000c710110019700000c710010009c00000b280000613d0000000e03000029000000000203041a00000c8602200197000000a80110021000000c8a0110009a00000c8001100197000000000112019f000000000013041b00000cfb010000410000000000100443000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c78011001c70000800b0200003931b131ac0000040f0000000100200190000025790000613d000000000101043b001c00000001001d0000001001000029000000000101043300000c7101100197000000000010043f0000000a01000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b0000001d02000029000000000020043f000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b0000001c02000029000000000021041b0000000d03000029000d00010030003d000000a00200043d00000000010204330000000d0010006b000021dc0000413d000000800100043d001d00000001001d000000400100043d00000040030000390000000003310436001c00000003001d000000000702043300000005037002100000000003310019000000400810003900000000007804350000006003300039000000000007004b000026f90000c13d00000000021300490000001c0400002900000000002404350000001d020000290000000046020434000000400200003900000000022304360000004005300039000000000706043300000000007504350000006005300039000000000007004b000023630000613d00000000080000190000002006600039000000000906043300000000a909043400000c72099001970000000009950436000000000a0a043300000cf30aa001970000000000a9043500000040055000390000000108800039000000000078004b000023570000413d00000000040404330000000003350049000000000032043500000000030404330000000002350436000000000003004b000023770000613d000000000500001900000020044000390000000006040433000000007606043400000c71066001970000000006620436000000000707043300000cf307700197000000000076043500000040022000390000000105500039000000000035004b0000236b0000413d000000000212004900000c6d0020009c00000c6d02008041000000600220021000000c6d0010009c00000c6d010080410000004001100210000000000112019f000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000121019f00000c83011001c70000800d02000039000000010300003900000cff0400004131b131a70000040f00000001002001900000004c0000613d00000015010000290000003f0110003900000c7301100197000000400300043d0000000002130019001c00000003001d000000000032004b0000000001000039000000010100403900000c710020009c000000520000213d0000000100100190000000520000c13d0000000001000031000000400020043f00000018020000290000001c030000290000000002230436001500000002001d000000160010006b0000004c0000213d0000000202000367000000180000006b000023ad0000613d0000001c030000290000001705000029000000000452034f000000000404043b000000200330003900000000004304350000002005500039001700000005001d000000160050006c000023a40000413d000000c403200370000000000303043b001600000003001d00000011030000290000003f0330003900000c7303300197000000400400043d0000000003340019001800000004001d000000000043004b0000000004000039000000010400403900000c710030009c000000520000213d0000000100400190000000520000c13d000000400030043f000000140300002900000018040000290000000003340436001100000003001d000000120010006b0000004c0000213d000000140000006b000023d00000613d00000018030000290000001305000029000000000452034f000000000404043b000000200330003900000000004304350000002005500039001300000005001d000000120050006c000023c70000413d000000000000043f0000000203000039000000200030043f000000400300043d00000c700030009c000000520000213d0000008004300039000000400040043f00000d0004000041000000000404041a001700000004001d000000000743043600000d0104000041000000000404041a0000000805400270000000ff0550018f00000040063000390000000000560435000000ff0540018f001400000007001d0000000000570435000000600530003900000cb2044001980000000003000039000000010300c039001300000005001d00000000003504350000000402200370000000000202043b000000a50300008a0000001b0030006b00000b280000213d0000001b03000029000000a403300039000000000004004b000024100000613d0000001c0400002900000000050404330000000504500210000000000005004b000023fe0000613d00000d120040009c00000b280000213d00000000055400d9000000200050008c00000b280000c13d000000180500002900000000060504330000000505600210000000000006004b000024060000613d00000000066500d9000000200060008c00000b280000c13d000000a00640003900000000046500190000000003340019000000000043004b00000000040000390000000104004039000000000065001a00000b280000413d000000010040019000000b280000c13d000000000031004b0000272c0000c13d000000170020006b000027330000c13d00000cc9010000410000000000100443000000000100041200000004001004430000002400000443000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000cca011001c7000080050200003931b131ac0000040f0000000100200190000025790000613d000000000101043b001d00000001001d00000c77010000410000000000100443000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c78011001c70000800b0200003931b131ac0000040f0000000100200190000025790000613d000000000101043b0000001d0010006b0000257a0000c13d000000000100041100000c7201100197000000000010043f00000d0201000041000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000400200043d00000c880020009c000000520000213d000000000101043b0000004003200039000000400030043f000000000301041a000000ff0130018f00000000011204360000000803300270000000ff0330018f000000030030008c000017df0000813d0000000000310435000000020030008c000025870000c13d000000000000043f0000000201000039000000200010043f0000000001020433001d00ff0010019300000d0301000041000000000201041a0000001d0020006c000025730000a13d000000000010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c82011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b0000001d01100029000000000101041a00000c72011001970000000002000411000000000012004b000025870000c13d00000013010000290000000001010433000000000001004b0000255c0000613d00000014010000290000000001010433000000ff0110018f000000ff0010008c00000b280000613d0000001c0200002900000000020204330000000101100039000000000012004b0000258a0000c13d000000400100043d00000018030000290000000003030433000000000032004b0000273c0000c13d0000001b020000290000001f0220003900000d0e022001970000003f0220003900000d0e022001970000000002210019000000000012004b0000000004000039000000010400403900000c710020009c000000520000213d0000000100400190000000520000c13d000000400020043f0000001b0200002900000000022104360000001a05000029000000000050007c0000004c0000213d0000001b0500002900000d0e045001980000001f0550018f0000001903000029000000020630036700000000034200190000249d0000613d000000000706034f0000000008020019000000007907043c0000000008980436000000000038004b000024990000c13d000000000005004b000024aa0000613d000000000446034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004304350000001b03200029000000000003043500000c6d0020009c00000c6d020080410000004002200210000000000101043300000c6d0010009c00000c6d010080410000006001100210000000000121019f000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c83011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000301043b000000400100043d00000020021000390000000000320435000000a003100039000000400410003900000004050000390000000205500367000000005605043c0000000004640436000000000034004b000024c60000c13d0000008004000039000000000041043500000cc50010009c000000520000213d000000400030043f00000c6d0020009c00000c6d020080410000004002200210000000000101043300000c6d0010009c00000c6d010080410000006001100210000000000121019f000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c83011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b001a00000001001d0000001c010000290000000001010433001900000001001d000000000001004b0000255c0000613d001d00000000001d001b00000000001d0000001d010000290000001f0010008c000025730000213d0000001d01000029000000030110021000000016011001ef00000d070010009c00000b280000213d0000001c0200002900000000020204330000001d0020006c000025730000a13d000000180200002900000000020204330000001d0020006c000025730000a13d000000f8011002700000001b011000390000001d0200002900000005022002100000001103200029000000150220002900000000020204330000000003030433000000400400043d0000006005400039000000000035043500000040034000390000000000230435000000200240003900000000001204350000001a010000290000000000140435000000000000043f00000c6d0040009c00000c6d040080410000004001400210000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000cf1011001c7000000010200003931b131ac0000040f000000600310027000000c6d03300197000000200030008c000000200500003900000000050340190000002004500190000025240000613d000000000601034f0000000007000019000000006806043c0000000007870436000000000047004b000025200000c13d0000001f05500190000025310000613d000000000641034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000100000003001f000300000001035500000001002001900000273e0000613d000000000100043d00000c7201100197000000000010043f00000d0201000041000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000400200043d00000c880020009c000000520000213d000000000101043b0000004003200039000000400030043f000000000301041a000000ff0130018f00000000021204360000000803300270000000ff0330018f000000020030008c000017df0000213d0000000000320435000000010030008c000025e20000c13d000000010110020f0000001b00100180000025e50000c13d001b001b001001b30000001d020000290000000102200039001d00000002001d000000190020006c000024ea0000413d00000024010000390000000201100367000000000101043b00000c7101100197000000400200043d000000200320003900000000001304350000001701000029000000000012043500000c6d0020009c00000c6d020080410000004001200210000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c7f011001c70000800d02000039000000020300003900000cf204000041000000000500001900000b460000013d00000d0a01000041000000000010043f0000003201000039000000040010043f00000c8501000041000031b300010430000000000001042f000000400200043d0000002403200039000000000013043500000ce401000041000000000012043500000004012000390000001d03000029000000000031043500000c6d0020009c00000c6d02008041000000400120021000000cd4011001c7000031b300010430000000400100043d00000d040200004100000e0c0000013d000000400100043d00000d050200004100000e0c0000013d0000001f0530018f00000c6f06300198000000400200043d0000000004620019000028f80000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000025940000c13d000028f80000013d31b1294f0000040f00000cdf02000041000000400300043d001d00000003001d00000000002304350000000002010019000028dc0000013d00000c6d0020009c00000c6d020080410000004002200210000000000101043300000c6d0010009c00000c6d010080410000006001100210000000000121019f00000ccc011001c7000000170200002931b131ac0000040f000000600310027000000c6d03300197000000200030008c000000200400003900000000040340190000001f0540018f0000002004400190000025b90000613d000000000601034f0000000007000019000000006806043c0000000007870436000000000047004b000025b50000c13d000000000005004b000025c60000613d000000000641034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000100000003001f00030000000103550000000100200190000028620000613d000000000100043d000000200030008c000028620000413d000000000001004b000028620000613d000000400100043d000000200210003900000ccb040000410000000000420435000000240410003900000ccd0500004100000000005404350000002404000039000000000041043500000cb00010009c000000520000213d0000006004100039000000400040043f0000001704000029000000040040008c0000274a0000c13d0000000001020433000000000010043f0000277c0000013d000000400100043d00000d080200004100000e0c0000013d000000400100043d00000d090200004100000e0c0000013d000000a0050000390000000007000019000026010000013d000000000ba9001900000000000b0435000000400b800039000000000b0b043300000c710bb00197000000400c3000390000000000bc0435000000600b800039000000000b0b043300000c710bb00197000000600c3000390000000000bc043500000080033000390000008008800039000000000808043300000000008304350000001f0390003900000d0e033001970000000003a300190000000107700039000000000027004b000006bc0000813d000000100830006a000000840880008a000000200440003900000000008404350000001d080000290000002008800039001d00000008001d000000000808043300000000a908043400000c71099001970000000009930436000000000a0a04330000000000590435000000a00c30003900000000b90a043400000000009c0435000000c00a300039000000000009004b000025eb0000613d000000000c000019000000000dac0019000000000ecb0019000000000e0e04330000000000ed0435000000200cc0003900000000009c004b000026150000413d000025eb0000013d00000c6d033001970000001f0530018f00000c6f06300198000000400200043d0000000004620019000028f80000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000026250000c13d000028f80000013d00000c6d033001970000001f0530018f00000c6f06300198000000400200043d0000000004620019000028f80000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000026320000c13d000028f80000013d0000001f0530018f00000c6f06300198000000400200043d0000000004620019000028f80000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000263e0000c13d000028f80000013d00000018010000290000000501100270000000000100003f000000000100041500000016011000690000000001000002000000400100043d00000cdd0200004100001b620000013d000000400200043d001d00000002001d00000cda01000041000000000012043500000004012000390000001a02000029000026590000013d000000400200043d001d00000002001d00000cda01000041000000000012043500000004012000390000001c0200002900000018030000290000266e0000013d00000cdc01000041000000000010043f00000c9001000041000031b30001043000000cdb01000041000000000010043f00000c9001000041000031b30001043000000cd701000041000000000010043f00000c9001000041000031b300010430000000400200043d001d00000002001d00000cda01000041000000000012043500000004012000390000001a02000029000000190300002931b1315a0000040f000028de0000013d000000400200043d0000002403200039000000000013043500000cd301000041000000000012043500000004012000390000002003000039000025810000013d000000400200043d0000004403200039000000000013043500000024012000390000001303000029000000000031043500000cd801000041000000000012043500000004012000390000001c03000029000000000031043500000c6d0020009c00000c6d02008041000000400120021000000cd9011001c7000031b3000104300000001f0530018f00000c6f06300198000000400200043d0000000004620019000028f80000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000268f0000c13d000028f80000013d00000cf80200004100001b620000013d000000400100043d00000cfe0200004100001b620000013d0000000c010000290000000002010433000000400500043d00000cf9010000410000000000150435000000040150003900000040030000390000000000310435000000440350003900000000420204340000000000230435001b00000005001d0000006403500039000000000002004b000026b00000613d000000000500001900000000063500190000000007540019000000000707043300000000007604350000002005500039000000000025004b000026a90000413d000000000432001900000000000404350000001f0220003900000d0e02200197000000000232001900000000011200490000001b03000029000000240330003900000000001304350000000a01000029000000000101041a000000010310019000000001041002700000007f0440618f001d00000004001d0000001f0040008c00000000040000390000000104002039000000000441013f000000010040019000000b860000c13d0000001d040000290000000002420436001c00000002001d000000000003004b000027940000613d0000000a01000029000000000010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c82011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d0000001d0000006b0000279b0000c13d0000000001000019000027a40000013d00000010030000290000000003030433000000400400043d000000440540003900000000001504350000002401400039000000000021043500000cfd01000041000000000014043500000c71013001970000000402400039000000000012043500000c6d0040009c00000c6d04008041000000400140021000000cd9011001c7000031b300010430000000400100043d00000cfc0200004100000e0c0000013d00000010010000290000000001010433000000400200043d00000024032000390000001d04000029000000000043043500000cfa03000041000000000032043500000c710110019700000004032000390000000000130435000025820000013d000000a009000039000000000b000019000027120000013d0000000004ed001900000000000404350000004004c00039000000000404043300000c7104400197000000400530003900000000004504350000006004c00039000000000404043300000c71044001970000006005300039000000000045043500000080033000390000008004c00039000000000404043300000000004304350000001f03d0003900000d0e033001970000000003e30019000000010bb0003900000000007b004b000023490000813d0000000005130049000000600550008a000000200880003900000000005804350000002002200039000000000c02043300000000d50c043400000c71055001970000000005530436000000000d0d04330000000000950435000000a00530003900000000fd0d04340000000000d50435000000c00e30003900000000000d004b000026fc0000613d00000000050000190000000004e5001900000000065f00190000000006060433000000000064043500000020055000390000000000d5004b000027240000413d000026fc0000013d000000400200043d0000002404200039000000000014043500000ced0100004100000000001204350000000401200039000025810000013d000000400100043d0000002403100039000000000023043500000cee020000410000000000210435000000040210003900000017030000290000000000320435000017ec0000013d00000d060200004100000e0c0000013d0000001f0530018f00000c6f06300198000000400200043d0000000004620019000028f80000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000027450000c13d000028f80000013d00000c6d0020009c00000c6d020080410000004002200210000000000101043300000c6d0010009c00000c6d010080410000006001100210000000000121019f00000ccc011001c7000000170200002931b131ac0000040f000000600310027000000c6d03300197000000200030008c000000200400003900000000040340190000001f0540018f0000002004400190000027630000613d000000000601034f0000000007000019000000006806043c0000000007870436000000000047004b0000275f0000c13d000000000005004b000027700000613d000000000641034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f00000000005404350003000000010355000100000003001f0000001f0030008c00000000010000390000000101002039000000000112016f00000000020004150000001f0220008a0016000500200218000000010010008c000027810000c13d000000000100043d00000000020004150000001e0220008a0016000500200218000000000001004b000028620000c13d000000400100043d000000200210003900000ccb040000410000000000420435000000240410003900000ce00500004100000000005404350000002404000039000000000041043500000cb00010009c000000520000213d0000006004100039000000400040043f0000001704000029000000040040008c000027af0000c13d0000000001020433000000000010043f000027da0000013d00000d10011001970000001c0200002900000000001204350000001d0000006b00000020010000390000000001006039000027a40000013d000000000201043b00000000010000190000001c03100029000000000402041a0000000000430435000000010220003900000020011000390000001d0010006c0000279d0000413d0000001b030000290000001c02300069000000000112001900000c6d0010009c00000c6d01008041000000600110021000000c6d0030009c00000c6d030080410000004002300210000000000121019f000031b30001043000000c6d0020009c00000c6d020080410000004002200210000000000101043300000c6d0010009c00000c6d010080410000006001100210000000000121019f00000ccc011001c7000000170200002931b131ac0000040f000000600310027000000c6d03300197000000200030008c000000200400003900000000040340190000001f0540018f0000002004400190000027c80000613d000000000601034f0000000007000019000000006806043c0000000007870436000000000047004b000027c40000c13d000000000005004b000027d50000613d000000000641034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f0000000000540435000100000003001f000300000001035500000001002001900000285f0000613d000000000100043d000000200030008c0000285f0000413d000000000001004b00000016010000290000000501100270000000000100003f000000010100c03f00000000010004150000001c011000690000000001000002000028e80000613d000000800100043d0000002001100039000000000101043300000c7101100197000000000010043f0000000801000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000004c0000613d000000000101043b000000000201041a000001000100043d000000e00400043d000000400800043d00000ce1030000410000000003380436001c00000003001d0000000403800039000000800500003900000000005304350000001d030000290000000005030433000000840380003900000000005304350000001805000029000000000505043300000c7105500197000000a406800039000000000056043500000019050000290000000005050433000000c406800039000000a0070000390000000000760435000001240680003900000000750504340000000000560435001d00000008001d0000014406800039000000000005004b0000281d0000613d00000000080000190000000009680019000000000a870019000000000a0a04330000000000a904350000002008800039000000000058004b000028160000413d000000000765001900000000000704350000001f0550003900000d0e05500197000000000565001900000000063500490000001a0700002900000000070704330000001d08000029000000e408800039000000000068043500000000760704340000000005650436000000000006004b000028340000613d00000000080000190000000009580019000000000a870019000000000a0a04330000000000a904350000002008800039000000000068004b0000282d0000413d00000c720440019700000c7202200197000000000756001900000000000704350000001f0660003900000d0e06600197000000000756001900000000033700490000001b0500002900000000050504330000001d060000290000010406600039000000000036043500000000060504330000000003670436000000000006004b000028510000613d000000000700001900000020055000390000000008050433000000009808043400000c720880019700000000088304360000000009090433000000000098043500000040033000390000000107700039000000000067004b000028460000413d0000001d0600002900000064056000390000000000450435000000440460003900000000001404350000002401600039000013880400003900000000004104350000000001000414000000040020008c000028660000c13d000000030100036700000001030000310000287a0000013d00000016010000290000000501100270000000000100003f00000000010004150000001c011000690000000001000002000028e80000013d0000001d04000029000000000343004900000c6d0030009c00000c6d03008041000000600330021000000c6d0040009c00000c6d040080410000004004400210000000000343019f00000c6d0010009c00000c6d01008041000000c001100210000000000131019f31b131a70000040f000000600310027000010c6d0030019d00000c6d0330019700030000000103550000000100200190000028ed0000613d00000d0e043001980000001f0530018f0000001d02400029000028840000613d000000000601034f0000001d07000029000000006806043c0000000007870436000000000027004b000028800000c13d000000000005004b000028910000613d000000000141034f0000000304500210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000001f0130003900000d0e011001970000001d02100029000000000012004b0000000001000039000000010100403900000c710020009c000000520000213d0000000100100190000000520000c13d000000400020043f00000c740030009c0000004c0000213d000000600030008c0000004c0000413d0000001d010000290000000001010433000000000001004b0000000004000039000000010400c039000000000041004b0000004c0000c13d0000001c04000029000000000404043300000c710040009c0000004c0000213d0000001d053000290000001d034000290000001f04300039000000000054004b000000000600001900000c750600804100000c750440019700000c7507500197000000000874013f000000000074004b000000000400001900000c750400404100000c750080009c000000000406c019000000000004004b0000004c0000c13d000000004303043400000c710030009c000000520000213d0000001f0630003900000d0e066001970000003f0660003900000d0e06600197000000000626001900000c710060009c000000520000213d000000400060043f00000000063204360000000007430019000000000057004b0000004c0000213d000000000003004b000028d40000613d000000000500001900000000076500190000000008450019000000000808043300000000008704350000002005500039000000000035004b000028cd0000413d00000000036300190000000000030435000000000001004b000028e80000c13d000000400300043d001d00000003001d00000ce2010000410000000000130435000000040130003931b129820000040f0000001d02000029000000000121004900000c6d0010009c00000c6d01008041000000600110021000000c6d0020009c00000c6d020080410000004002200210000000000121019f000031b3000104300000000001000415000000020110006900000000010000020000000001000019000031b20001042e0000001f0530018f00000c6f06300198000000400200043d0000000004620019000028f80000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000028f40000c13d000000000005004b000029050000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000c6d0020009c00000c6d020080410000004002200210000000000112019f000031b30001043000000d130010009c000029100000813d0000008001100039000000400010043f000000000001042d00000d0a01000041000000000010043f0000004101000039000000040010043f00000c8501000041000031b30001043000000000430104340000000001320436000000000003004b000029220000613d000000000200001900000000051200190000000006240019000000000606043300000000006504350000002002200039000000000032004b0000291b0000413d000000000213001900000000000204350000001f0230003900000d0e022001970000000001210019000000000001042d000000004302043400000c72033001970000000003310436000000000404043300000c6d04400197000000000043043500000040032000390000000003030433000000000003004b0000000003000039000000010300c039000000400410003900000000003404350000006002200039000000000202043300000c7202200197000000600310003900000000002304350000008001100039000000000001042d000000400100043d00000d130010009c000029490000813d0000008002100039000000400020043f0000006002100039000000000002043500000040021000390000000000020435000000200210003900000000000204350000000000010435000000000001042d00000d0a01000041000000000010043f0000004101000039000000040010043f00000c8501000041000031b30001043000000001020000320000297a0000613d00000d140020009c0000297c0000813d0000001f0120003900000d0e011001970000003f0110003900000d0e04100197000000400100043d0000000004410019000000000014004b0000000005000039000000010500403900000c710040009c0000297c0000213d00000001005001900000297c0000c13d000000400040043f000000000621043600000d0e032001980000001f0420018f000000000236001900000003050003670000296c0000613d000000000705034f000000007807043c0000000006860436000000000026004b000029680000c13d000000000004004b0000297b0000613d000000000335034f0000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000320435000000000001042d0000006001000039000000000001042d00000d0a01000041000000000010043f0000004101000039000000040010043f00000c8501000041000031b30001043000000020030000390000000004310436000000003202043400000000002404350000004001100039000000000002004b000029910000613d000000000400001900000000051400190000000006430019000000000606043300000000006504350000002004400039000000000024004b0000298a0000413d000000000312001900000000000304350000001f0220003900000d0e022001970000000001120019000000000001042d001d000000000002000300000002001d000000400200043d000600000001001d0000000031010434000500000003001d000000000001004b000031580000613d000100000002001d00000d150020009c000030a20000813d00000003010000290000000021010434000200000002001d000400000001001d00000001020000290000002001200039000000400010043f000000000002043500000006010000290000000001010433000000000001004b000030990000613d0000000003000019000029b60000013d0000000703000029000000010330003900000006010000290000000001010433000000000013004b000030990000813d000000050130021000000005021000290000000002020433001100000002001d000000040000006b000700000003001d000029c40000613d00000003020000290000000002020433000000000032004b0000309c0000a13d00000002011000290000000001010433000029c50000013d0000000101000029001000000001001d0000000001010433000b00000001001d00000011010000290000000021010434001800000002001d000000400300043d00000cf702000041000000000023043500000c7102100197001c00000003001d0000000401300039001d00000002001d0000008002200210000000000021043500000cc90100004100000000001004430000000001000412000000040010044300000040010000390000002400100443000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000cca011001c7000080050200003931b131ac0000040f0000000b0000006b00000000030000390000000103006039000800000003001d0000000100200190000030ae0000613d000000000201043b000000000100041400000c7202200197000000040020008c000029f20000c13d0000000103000031000000200030008c000000200400003900000000040340190000001c0a00002900002a1c0000013d0000001c0300002900000c6d0030009c00000c6d03008041000000400330021000000c6d0010009c00000c6d01008041000000c001100210000000000131019f00000c85011001c731b131ac0000040f0000001c0a000029000000600310027000000c6d03300197000000200030008c00000020040000390000000004034019000000200640019000000000056a001900002a0b0000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000058004b00002a070000c13d0000001f0740019000002a180000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000100000003001f000300000001035500000001002001900000310f0000613d0000001f01400039000000600110018f0000000002a10019000000000012004b00000000010000390000000101004039001a00000002001d00000c710020009c000030a20000213d0000000100100190000030a20000c13d0000001a01000029000000400010043f0000001f0030008c0000309a0000a13d00000000010a0433000000000001004b0000000002000039000000010200c039000000000021004b0000309a0000c13d000000000001004b00002a480000613d0000000b0000006b000031080000c13d0000001d010000290000001a02000029000000000012043500000c6d0020009c00000c6d020080410000004001200210000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c82011001c70000800d02000039000000010300003900000d160400004131b131a70000040f0000000100200190000029b00000c13d0000309a0000013d000000180100002900000000010104330000000002010433000000000002004b0000312d0000613d00000011010000290000004001100039000a00000001001d00000000010104330000000001010433000000000012004b0000313a0000c13d001700000002001d00000c710020009c000030a20000213d000000170100002900000005011002100000003f0210003900000c73022001970000001a0220002900000c710020009c000030a20000213d000000400020043f0000001a0200002900000017030000290000000002320436000f00000002001d000000000001004b00002a6d0000613d0000000f04000029000000000214001900000000030000310000000203300367000000003503043c0000000004540436000000000024004b00002a690000c13d0000001f0010019000000cc90100004100000000001004430000000001000412000000040010044300000020010000390000002400100443000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000cca011001c7000080050200003931b131ac0000040f0000000100200190000030ae0000613d000000000101043b001c00000001001d0000001d01000029000000000010043f0000000801000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000309a0000613d000000400600043d000000000101043b000000000201041a00000c8c00200198000031420000613d0000000101100039000000000201041a000000010320019000000001052002700000007f0550618f0000001f0050008c00000000040000390000000104002039000000000043004b0000314c0000c13d0000000007560436000000000003004b00002abb0000613d001600000005001d001900000007001d001b00000006001d000000000010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c82011001c7000080100200003931b131ac0000040f00000001002001900000309a0000613d0000001608000029000000000008004b0000001b0600002900002ac20000613d000000000201043b0000000001000019000000200500008a00000019070000290000000003710019000000000402041a000000000043043500000001022000390000002001100039000000000081004b00002ab30000413d00002ac50000013d00000d10012001970000000000170435000000000005004b00000020010000390000000001006039000000200500008a00002ac50000013d0000000001000019000000200500008a00000019070000290000003f01100039000000000251016f0000000001620019000000000021004b0000000002000039000000010200403900000c710010009c000030a20000213d0000000100200190000030a20000c13d000000400010043f00000c6d0070009c00000c6d070080410000004001700210000000000206043300000c6d0020009c00000c6d020080410000006002200210000000000112019f000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c83011001c7000080100200003931b131ac0000040f00000001002001900000309a0000613d000000000201043b000000400100043d0000008003100039000000000023043500000040021000390000001d0300002900000000003204350000001c0200002900000c71032001970000006002100039001300000003001d0000000000320435000000200210003900000d180300004100000000003204350000008003000039000000000031043500000cc50010009c000030a20000213d000000a003100039000000400030043f00000c6d0020009c00000c6d020080410000004002200210000000000101043300000c6d0010009c00000c6d010080410000006001100210000000000121019f000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c83011001c7000080100200003931b131ac0000040f00000001002001900000309a0000613d000000000101043b001200000001001d0000000005000019000000180100002900000000020104330000000001020433000000000051004b0000309c0000a13d000000400100043d000000050350021000000020063000390000000002260019000000000802043300000000920804340000004003200039000000000303043300000c7103300197000000130030006c000030af0000c13d0000002003200039000000000303043300000c71033001970000001d0030006c000030b30000c13d001600000006001d001900000005001d0000006003800039000000000303043300000060042000390000000004040433000000000502043300000080022000390000000002020433000000800680003900000000060604330000008007100039000000000067043500000c7102200197000000a006100039000000000026043500000c71024001970000006004100039000000000024043500000c72023001970000004003100039000000000023043500000020021000390000000000520435000000a003000039000000000031043500000cb30010009c000030a20000213d001b00000009001d001c00000008001d000000c003100039000000400030043f00000c6d0020009c00000c6d020080410000004002200210000000000101043300000c6d0010009c00000c6d010080410000006001100210000000000121019f000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c83011001c7000080100200003931b131ac0000040f00000001002001900000309a0000613d0000001b020000290000000002020433000000200320003900000c6d0030009c00000c6d030080410000004003300210000000000202043300000c6d0020009c00000c6d020080410000006002200210000000000232019f000000000101043b001b00000001001d000000000100041400000c6d0010009c00000c6d01008041000000c001100210000000000121019f00000c83011001c7000080100200003931b131ac0000040f00000001002001900000309a0000613d0000001c0200002900000040022000390000000002020433000000200320003900000c6d0030009c00000c6d030080410000004003300210000000000202043300000c6d0020009c00000c6d020080410000006002200210000000000232019f000000000101043b001500000001001d000000000100041400000c6d0010009c00000c6d01008041000000c001100210000000000121019f00000c83011001c7000080100200003931b131ac0000040f00000001002001900000309a0000613d000000000101043b001400000001001d0000001c01000029000000a0011000390000000003010433000000400100043d00000020041000390000002002000039001c00000004001d0000000000240435000000000403043300000005054002100000000006510019000000400510003900000000004504350000006006600039000000000004004b00002bd90000613d000000000700001900002ba20000013d00000000029a0019000000000002043500000080026000390000008006800039000000000606043300000000006204350000001f02a000390000000002e2016f00000000069200190000000107700039000000000047004b00002bda0000813d0000000008160049000000600880008a000000200550003900000000008504350000002003300039000000000803043300000000c9080434000000a002000039000000000b260436000000a00a60003900000000d909043400000000009a0435000000c00a600039000000000009004b00002bb90000613d000000000e000019000000000fae00190000000002ed0019000000000202043300000000002f0435000000200ee0003900000000009e004b00002bb20000413d0000000002a90019000000000002043500000000020c043300000c720220019700000000002b04350000004002800039000000000202043300000c6d02200197000000400b60003900000000002b04350000001f02900039000000200e00008a0000000002e2016f0000000002a200190000000009620049000000600a600039000000600b800039000000000b0b043300000000009a043500000000ba0b04340000000009a2043600000000000a004b00002b960000613d000000000c00001900000000029c0019000000000dcb0019000000000d0d04330000000000d20435000000200cc000390000000000ac004b00002bd10000413d00002b960000013d000000200e00008a0000000002160049000000200320008a00000000003104350000001f022000390000000002e2016f0000000003120019000000000023004b0000000004000039000000010400403900000c710030009c000030a20000213d0000000100400190000030a20000c13d000000400030043f0000001c0200002900000c6d0020009c00000c6d020080410000004002200210000000000101043300000c6d0010009c00000c6d010080410000006001100210000000000121019f000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c83011001c7000080100200003931b131ac0000040f00000001002001900000309a0000613d000000000201043b000000400100043d000000c0031000390000000000230435000000a0021000390000001403000029000000000032043500000080021000390000001503000029000000000032043500000060021000390000001b030000290000000000320435000000400210003900000012030000290000000000320435000000c0020000390000000002210436000000000002043500000cb10010009c000030a20000213d000000e003100039000000400030043f00000c6d0020009c00000c6d020080410000004002200210000000000101043300000c6d0010009c00000c6d010080410000006001100210000000000121019f000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c83011001c7000080100200003931b131ac0000040f00000001002001900000309a0000613d0000001a0200002900000000020204330000001905000029000000000052004b0000309c0000a13d00000016030000290000001a02300029000000000101043b00000000001204350000000105500039000000170050006c00002b0c0000413d0000001a010000290000000006010433000000000006004b000031520000613d000001010060008c000030b70000213d000000110100002900000060011000390000000001010433000e00000001001d0000000021010434000d00000002001d000c00000001001d000001020010008c000030b70000813d0000000c01600029000900000001001d000000010710008a000001000070008c000030b70000213d000000000007004b00002cfa0000613d00000005017002100000003f0210003900000c7302200197000000400300043d0000000002230019001600000003001d000000000032004b0000000003000039000000010300403900000c710020009c000030a20000213d0000000100300190000030a20000c13d000000110300002900000080033000390000000003030433001300000003001d000000400020043f00000016020000290000000002720436001500000002001d000000000001004b00002c650000613d0000001504000029000000000214001900000000030000310000000203300367000000003503043c0000000004540436000000000024004b00002c610000c13d0000001f00100190000000000a000019001400000000001d00000000090000190000000008000019001200000006001d001100000007001d0000000101a0020f000000ff00a0008c0000000001002019000000130210017f000000000012004b00002c7c0000c13d000000000069004b00002c850000813d0000001a010000290000000001010433000000000091004b0000309c0000a13d000000050190021000000001099000390000000f0200002900002c8c0000013d0000000e010000290000000001010433000000140010006c0000309c0000a13d00000014020000290000000501200210001400010020003d0000000d0200002900002c8c0000013d00000016010000290000000001010433000000000081004b0000309c0000a13d00000005028002100000000108800039000000150100002900000000011200190000000001010433000000000069004b00002c980000813d0000001a020000290000000002020433000000000092004b0000309c0000a13d000000050290021000000001099000390000000f0300002900002c9f0000013d00000016020000290000000002020433000000000082004b0000309c0000a13d0000000503800210000000010880003900000015020000290000000000a8004b000030b70000213d00000000022300190000000004020433000000400200043d00000020032000390000000105000039000000000053043500000060052000390000004006200039000000000041004b001c00000008001d001b00000009001d00190000000a001d00002cc00000813d000000000016043500000000004504350000006001000039000000000012043500000c700020009c000030a20000213d0000008001200039000000400010043f00000c6d0030009c00000c6d030080410000004001300210000000000202043300000c6d0020009c00000c6d020080410000006002200210000000000112019f000000000200041400002cd10000013d000000000046043500000000001504350000006001000039000000000012043500000c700020009c000030a20000213d0000008001200039000000400010043f00000c6d0030009c00000c6d030080410000004001300210000000000202043300000c6d0020009c00000c6d020080410000006002200210000000000112019f000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c83011001c7000080100200003931b131ac0000040f00000001002001900000309a0000613d000000120600002900000016020000290000000002020433000000190a0000290000000000a2004b00000011030000290000001c080000290000001b090000290000309c0000a13d0000000502a002100000001502200029000000000101043b0000000000120435000000010aa0003900000000003a004b00002c6c0000413d0000000901000029000000020110008a000000000018004b000030b70000c13d000000000069004b000030b70000c13d00000014020000290000000c0020006c000030b70000c13d00000016010000290000000001010433000000000081004b0000309c0000a13d0000000501800210000000150110002900002cfb0000013d0000000f010000290000000001010433001c00000001001d0000001d01000029000000000010043f0000000a01000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000309a0000613d000000000101043b0000001c02000029000000000020043f000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000309a0000613d000000000101043b000000000101041a000900000001001d000000000001004b000031550000613d001b00000000001d00002d3e0000013d00000000044300190000000000040435000000600410003900000000002404350000001f0230003900000d0e02200197000000a00220003900000c6d0020009c00000c6d02008041000000600220021000000c6d0010009c00000c6d010080410000004001100210000000000112019f000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c83011001c70000800d02000039000000040300003900000d23040000410000001d0500002931b131a70000040f00000001002001900000309a0000613d0000001b020000290000000102200039001b00000002001d000000170020006c000029b00000813d0000000001000414001200000001001d0000001801000029000000000101043300000000020104330000001b03000029000000000032004b0000309c0000a13d0000000502300210001100000002001d001500200020003d00000015011000290000000001010433001c00000001001d0000000021010434001300000002001d00000060011000390000000001010433001900000001001d0000001d01000029000000000010043f0000000901000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000309a0000613d000000190200002900000c7102200197000000000101043b001600000002001d0000000702200270000000000020043f000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000309a0000613d00000016020000290000000102200210000000000101043b000000000101041a00000019030000290000007f0330019000002d790000613d000000ff0420018f00000000033400d9000000020030008c000030a80000c13d000000fe0220018f000000000121022f0000000302100190001900000002001d00002d990000613d000000030020008c00002e0e0000c13d0000000b0000006b00002d9c0000c13d0000001c0100002900000000010104330000006001100039000000000101043300000c7101100197000000400200043d000000200320003900000000001304350000001d01000029000000000012043500000c6d0020009c00000c6d020080410000004001200210000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c7f011001c70000800d02000039000000010300003900000d1c0400004100002e240000013d0000000b0000006b000000600300003900002dcc0000613d000000100100002900000000010104330000001b0010006c0000309c0000a13d00000015020000290000001001200029001600000001001d000000000101043300000020011000390000000001010433001400000001001d00000cfb010000410000000000100443000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c78011001c70000800b0200003931b131ac0000040f0000000100200190000030ae0000613d000000000101043b000000090110006c000030a80000413d0000001902000029000000030020008c00002dbe0000613d0000000402000039000000000202041a000000a00220027000000c6d02200197000000000021004b000030f10000a13d000000100100002900000000010104330000001b0010006c0000309c0000a13d000000160100002900000000010104330000000001010433000000000001004b000000140300002900002dcb0000613d0000001c02000029000000800220003900000000001204350000001902000029001400000003001d000000000002004b00002e6b0000c13d0000001c0100002900000000010104330000008001100039000000000101043300000c710110019800002e6b0000613d00000013020000290000000002020433000000400500043d0000004403500039000000600400003900000000004304350000002403500039000000000013043500000d1e01000041000000000015043500000004015000390000001d030000290000000000310435000000640350003900000000160204340000000000630435001600000005001d0000008402500039000000000006004b00002df10000613d000000000300001900000000042300190000000005310019000000000505043300000000005404350000002003300039000000000063004b00002dea0000413d000e00000006001d0000000001260019000000000001043500000cc90100004100000000001004430000000001000412000000040010044300000080010000390000002400100443000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000cca011001c7000080050200003931b131ac0000040f0000000100200190000030ae0000613d000000000201043b000000000100041400000c7202200197000000040020008c000000160a00002900002e250000c13d0000000103000031000000200030008c0000002004000039000000000403401900002e560000013d0000001c0100002900000000010104330000006001100039000000000101043300000c7101100197000000400200043d000000200320003900000000001304350000001d01000029000000000012043500000c6d0020009c00000c6d020080410000004001200210000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c7f011001c70000800d02000039000000010300003900000d1b0400004100002d360000013d0000000e030000290000001f0330003900000d0e0330019700000c6d00a0009c00000c6d0400004100000000040a40190000004004400210000000840330003900000c6d0030009c00000c6d030080410000006003300210000000000343019f00000c6d0010009c00000c6d01008041000000c001100210000000000131019f31b131a70000040f000000160a000029000000600310027000000c6d03300197000000200030008c00000020040000390000000004034019000000200640019000000000056a001900002e450000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000058004b00002e410000c13d0000001f0740019000002e520000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000030fc0000613d0000001f01400039000000600210018f0000000001a20019000000000021004b0000000002000039000000010200403900000c710010009c000030a20000213d0000000100200190000030a20000c13d000000400010043f000000200030008c0000309a0000413d00000000010a0433000000000001004b0000000002000039000000010200c039000000000021004b0000309a0000c13d000000000001004b00002d390000613d0000000a01000029000000000101043300000000020104330000001b0020006c0000309c0000a13d00000015021000290000001c0300002900000000010304330000006001100039000000000101043300000c710610019700000000040204330000000002040433000000a00530003900000000030504330000000003030433000000000023004b000030bf0000c13d000d00000005001d000e00000004001d001600000006001d00000001036002100000007f0110019000002e870000613d000000ff0230018f00000000011200d9000000020010008c000030a80000c13d001500000003001d0000001d01000029000000000010043f0000000901000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000309a0000613d000000000101043b00000016020000290000000702200270001600000002001d000000000020043f000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000309a0000613d000000000101043b000000000101041a000c00000001001d0000001d01000029000000000010043f0000000901000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000309a0000613d000000000101043b0000001602000029000000000020043f000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000309a0000613d0000001502000029000000fe0220018f000000030320020f00000d11033001670000000c0330017f000000010220020f000000000223019f000000000101043b000000000021041b00000cd101000041000000000010044300000000010004100000000400100443000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000cd2011001c7000080020200003931b131ac0000040f0000000100200190000030ae0000613d000000000101043b000000000001004b0000309a0000613d000000400800043d00000d200100004100000000071804360000000401800039000000600200003900000000002104350000001c010000290000000001010433000000003201043400000064048000390000000000240435000000000203043300000c7102200197000000840380003900000000002304350000004002100039000000000202043300000c7102200197000000a40380003900000000002304350000006002100039000000000202043300000c7102200197000000c40380003900000000002304350000008001100039000000000101043300000c7101100197000000e402800039000000000012043500000013010000290000000001010433000001040280003900000140030000390000000000320435000001a40480003900000000320104340000000000240435000001c401800039000000000002004b00002f0b0000613d000000000400001900000000051400190000000006430019000000000606043300000000006504350000002004400039000000000024004b00002f040000413d000000000312001900000000000304350000001f02200039000000200e00008a0000000002e2016f0000001c0300002900000040033000390000000003030433000001240480003900000160052000390000000000540435000000000112001900000000320304340000000001210436000000000002004b00002f230000613d000000000400001900000000051400190000000006430019000000000606043300000000006504350000002004400039000000000024004b00002f1c0000413d001600000007001d000000000312001900000000000304350000001c050000290000006003500039000000000303043300000c72033001970000014404800039000000000034043500000080035000390000000003030433000001640480003900000000003404350000001f022000390000000002e2016f00000000021200190000000001820049000000640110008a001500000008001d00000184048000390000000d030000290000000003030433000000000014043500000000040304330000000000420435000000050140021000000000011200190000002001100039000000000004004b00002f870000613d0000000005000019000000000602001900002f500000013d000000000a89001900000000000a043500000080011000390000008007700039000000000707043300000000007104350000001f019000390000000001e1016f00000000018100190000000105500039000000000045004b00002f870000813d0000000007210049000000200770008a000000200660003900000000007604350000002003300039000000000703043300000000b8070434000000a009000039000000000a910436000000a00910003900000000c80804340000000000890435000000c009100039000000000008004b00002f670000613d000000000d000019000000000e9d0019000000000fdc0019000000000f0f04330000000000fe0435000000200dd0003900000000008d004b00002f600000413d000000000c98001900000000000c0435000000000b0b043300000c720bb001970000000000ba0435000000400a700039000000000a0a043300000c6d0aa00197000000400b1000390000000000ab04350000001f08800039000000200e00008a0000000008e8016f00000000089800190000000009180049000000600a100039000000600b700039000000000b0b043300000000009a043500000000a90b04340000000008980436000000000009004b00002f440000613d000000000b000019000000000c8b0019000000000dba0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b00002f7f0000413d00002f440000013d000000150b0000290000000002b10049000000040220008a0000002403b0003900000000002304350000000e0c00002900000000020c04330000000000210435000000050320021000000000033100190000002005300039000000000002004b00002fb20000613d0000000003000019000000000401001900002f9f0000013d000000000756001900000000000704350000001f066000390000000006e6016f00000000055600190000000103300039000000000023004b00002fb20000813d0000000006150049000000200660008a00000020044000390000000000640435000000200cc0003900000000060c043300000000760604340000000005650436000000000006004b00002f970000613d00000000080000190000000009580019000000000a870019000000000a0a04330000000000a904350000002008800039000000000068004b00002faa0000413d00002f970000013d0000000001b50049000000040110008a0000004402b000390000000000120435000000140600002900000000020604330000000001250436000000000002004b00002fc50000613d000000000300001900000016080000290000002006600039000000000406043300000c6d0440019700000000014104360000000103300039000000000023004b00002fbd0000413d00002fc60000013d000000160800002900000000020004140000000003000410000000040030008c00002fe00000613d0000000001b1004900000c6d0010009c00000c6d01008041000000600110021000000c6d00b0009c00000c6d0300004100000000030b40190000004003300210000000000131019f00000c6d0020009c00000c6d02008041000000c002200210000000000121019f000000000200041031b131a70000040f000000150b0000290000001608000029000000600310027000010c6d0030019d000300000001035500000001002001900000306b0000613d00000c7100b0009c000030a20000213d0000004000b0043f00000cc700b0009c000030a20000213d000000400080043f00000000000b043500000001050000390000000204000039001300000005001d0000001c0100002900000000010104330000006001100039000000000101043300000c7102100197001400000002001d00000001032002100000007f0110019000002ff70000613d000000ff0230018f00000000011200d9000000020010008c000030a80000c13d000d00000003001d000e00000004001d00150000000b001d001600000008001d0000001d01000029000000000010043f0000000901000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000309a0000613d000000000101043b00000014020000290000000702200270001400000002001d000000000020043f000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000309a0000613d000000000101043b000000000101041a000c00000001001d0000001d01000029000000000010043f0000000901000039000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000309a0000613d000000000101043b0000001402000029000000000020043f000000200010043f000000000100041400000c6d0010009c00000c6d01008041000000c00110021000000c7f011001c7000080100200003931b131ac0000040f00000001002001900000309a0000613d0000000d02000029000000fe0220018f0000000e0900002900000000032901cf000000030220020f00000d11022001670000000c0220017f000000000232019f000000000101043b000000000021041b000000190000006b000000130200002900000001022061bf0000001c01000029000000000101043300000000070104330000000100200190000030cc0000613d0000001a0200002900000000020204330000001b0020006c000000160a00002900000015080000290000309c0000a13d0000006001100039000000000101043300000011030000290000000f0230002900000000030204330000000002000414000000120220006b000030a80000413d00000c7106100197000000400100043d000000400410003900000080050000390000000000540435000000200410003900000000009404350000000000310435000000000308043300000080041000390000000000340435000000a004100039000000000003004b00002d1e0000613d0000000005000019000000000845001900000000095a0019000000000909043300000000009804350000002005500039000000000035004b000030630000413d00002d1e0000013d00000c6d02300198000000080500002900000080080000390000000304000039000000600b00003900002fe90000613d0000001f0320003900000c6e033001970000003f0330003900000d2103300197000000400b00043d00000000033b00190000000000b3004b0000000004000039000000010400403900000c710030009c000030a20000213d0000000100400190000030a20000c13d000000400030043f00000000082b043600000c6f042001980000000003480019000030890000613d000000000501034f0000000006080019000000005705043c0000000006760436000000000036004b000030850000c13d0000001f02200190000030960000613d000000000141034f0000000302200210000000000403043300000000042401cf000000000424022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000141019f00000000001304350000000805000029000000030400003900002fe90000013d000000000001042d0000000001000019000031b30001043000000d0a01000041000000000010043f0000003201000039000000040010043f00000c8501000041000031b30001043000000d0a01000041000000000010043f0000004101000039000000040010043f00000c8501000041000031b30001043000000d0a01000041000000000010043f0000001101000039000000040010043f00000c8501000041000031b300010430000000000001042f00000d190200004100000000002104350000000402100039000030f60000013d0000002402100039000000000032043500000d1a02000041000030c30000013d000000400100043d00000d2502000041000000000021043500000c6d0010009c00000c6d01008041000000400110021000000c90011001c7000031b300010430000000400100043d0000002402100039000000000062043500000d1f02000041000000000021043500000004021000390000001d03000029000000000032043500000c6d0010009c00000c6d01008041000000400110021000000cd4011001c7000031b300010430000000400100043d00000024021000390000004003000039000000000032043500000d220200004100000000002104350000000402100039000000000072043500000015020000290000000002020433000000440310003900000000002304350000006403100039000000000002004b0000001607000029000030e40000613d000000000400001900000000053400190000000006470019000000000606043300000000006504350000002004400039000000000024004b000030dd0000413d0000001f0420003900000d0e0440019700000000023200190000000000020435000000640240003900000c6d0020009c00000c6d02008041000000600220021000000c6d0010009c00000c6d010080410000004001100210000000000112019f000031b300010430000000400100043d00000d1d02000041000000000021043500000004021000390000001d03000029000000000032043500000c6d0010009c00000c6d01008041000000400110021000000c85011001c7000031b3000104300000001f0530018f00000c6f06300198000000400200043d00000000046200190000311a0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000031030000c13d0000311a0000013d00000cf8010000410000001a03000029000000000013043500000004013000390000001d020000290000000000210435000031350000013d0000001f0530018f00000c6f06300198000000400200043d00000000046200190000311a0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000031160000c13d000000000005004b000031270000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000140435000000600130021000000c6d0020009c00000c6d020080410000004002200210000000000112019f000031b3000104300000001101000029000000000101043300000d27020000410000001a03000029000000000023043500000c71011001970000000402300039000000000012043500000c6d0030009c00000c6d03008041000000400130021000000c85011001c7000031b30001043000000d17010000410000001a02000029000000000012043500000c6d0020009c00000c6d02008041000000400120021000000c90011001c7000031b30001043000000cfe01000041000000000016043500000004016000390000001d02000029000000000021043500000c6d0060009c00000c6d06008041000000400160021000000c85011001c7000031b30001043000000d0a01000041000000000010043f0000002201000039000000040010043f00000c8501000041000031b300010430000000400100043d00000d2602000041000030b90000013d000000400100043d00000d2402000041000030f30000013d00000d28010000410000313c0000013d00000020041000390000004005000039000000000054043500000c720220019700000000002104350000004004100039000000003203043400000000002404350000006001100039000000000002004b0000316d0000613d000000000400001900000000051400190000000006430019000000000606043300000000006504350000002004400039000000000024004b000031660000413d000000000312001900000000000304350000001f0220003900000d0e022001970000000001120019000000000001042d000000000001042f00000c6d0010009c00000c6d01008041000000400110021000000c6d0020009c00000c6d020080410000006002200210000000000112019f000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000c83011001c7000080100200003931b131ac0000040f0000000100200190000031870000613d000000000101043b000000000001042d0000000001000019000031b30001043000000000050100190000000000200443000000050030008c000031970000413d000000040100003900000000020000190000000506200210000000000664001900000005066002700000000006060031000000000161043a0000000102200039000000000031004b0000318f0000413d00000c6d0030009c00000c6d030080410000006001300210000000000200041400000c6d0020009c00000c6d02008041000000c002200210000000000112019f00000d29011001c7000000000205001931b131ac0000040f0000000100200190000031a60000613d000000000101043b000000000001042d000000000001042f000031aa002104210000000102000039000000000001042d0000000002000019000000000001042d000031af002104230000000102000039000000000001042d0000000002000019000000000001042d000031b100000432000031b20001042e000031b30001043000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000000000000000000000000000ffffffffffffff7f000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b02000002000000000000000000000000000000040000000000000000000000000200000000000000000000000000000000000080000000000000000000000000683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d8ffffffffffffff000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000cbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee0200000000000000000000000000000000000040000000000000000000000000000000ffffffffffffffff000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000002000000000000000000000000000000000000200000000000000000000000000200000000000000000000000000000000000000000000000000000000000000420b006e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000ffffff0000000000000000fffffffffffffffffffffffffffffffffffffffffff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb9000000000000000000000000000000000000000000000000ffffffffffffffbf0000000000000000000000010000000000000000000000000000000000000000ffffffffffffffffffffff00000000000000000000000000000000000000000009addddcec1d7ba6ad726df49aeea3e93fb0c1037d551236841a60c0c883f2c10000000000000000000000ff000000000000000000000000000000000000000049f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b00000002000000000000000000000000000001800000010000000000000000009b15e16f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000060987c1f00000000000000000000000000000000000000000000000000000000c673e58300000000000000000000000000000000000000000000000000000000e9d68a8d00000000000000000000000000000000000000000000000000000000e9d68a8e00000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000f716f99f00000000000000000000000000000000000000000000000000000000c673e58400000000000000000000000000000000000000000000000000000000ccd37ba30000000000000000000000000000000000000000000000000000000079ba50960000000000000000000000000000000000000000000000000000000079ba5097000000000000000000000000000000000000000000000000000000007edf52f4000000000000000000000000000000000000000000000000000000008da5cb5b0000000000000000000000000000000000000000000000000000000060987c20000000000000000000000000000000000000000000000000000000007437ff9f00000000000000000000000000000000000000000000000000000000311cd512000000000000000000000000000000000000000000000000000000005215505a000000000000000000000000000000000000000000000000000000005215505b000000000000000000000000000000000000000000000000000000005e36480c000000000000000000000000000000000000000000000000000000005e7bb00800000000000000000000000000000000000000000000000000000000311cd513000000000000000000000000000000000000000000000000000000003f4b04aa00000000000000000000000000000000000000000000000000000000181f5a7600000000000000000000000000000000000000000000000000000000181f5a77000000000000000000000000000000000000000000000000000000002d04ab760000000000000000000000000000000000000000000000000000000004666f9c0000000000000000000000000000000000000000000000000000000006285c692b5c74de000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000800000000000000000ed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278dad89dca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000800000000000000000000000000000000000000000000000000000000000000000ffffffffffffff9f000000000000000000000000000000000000000000000000ffffffffffffff1f0000000000000000000000000000000000000000000000000000000000ff0000000000000000000000000000000000000000000000000000ffffffffffffff3f87f6037c00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff0000000000000000000000000000000000000000000000000000000000010000367f56a200000000000000000000000000000000000000000000000000000000d6c62c9b00000000000000000000000000000000000000000000000000000000ab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547f718e9a000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff00000000000000002f7b1ba2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000001000000000000000000ffffffffffffff0000000000ffffffffffffffffffffffffffffffffffffffff02000000000000000000000000000000000000800000010000000000000000008579befe0000000000000000000000000000000000000000000000000000000002b543c6000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e000000000000000ff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffe1f000000000000000000000000000000000000000000000000ffffffffffffff5f371a732800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffdfbbe4f6db00000000000000000000000000000000000000000000000000000000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e020000020000000000000000000000000000004400000000000000000000000001ffc9a7000000000000000000000000000000000000000000000000000000000000000000007530000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000aff2afbf0000000000000000000000000000000000000000000000000000000070a0823100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffedf1806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83020000020000000000000000000000000000002400000000000000000000000078ef8024000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffeff390775370000000000000000000000000000000000000000000000000000000037c3be2900000000000000000000000000000000000000000000000000000000a966e21f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000009fe2f95a00000000000000000000000000000000000000000000000000000000afa32a2c000000000000000000000000000000000000000000000000000000000c3b563c00000000000000000000000000000000000000000000000000000000ae9b4ce90000000000000000000000000000000000000000000000000000000008d450a10000000000000000000000000000000000000000000000000000000009c253250000000000000000000000000000000000000000000000000000000085572ffb000000000000000000000000000000000000000000000000000000003cf97983000000000000000000000000000000000000000000000000000000000a8d6e8c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffe9f0f01ce850000000000000000000000000000000000000000000000000000000083e3f564000000000000000000000000000000000000000000000000000000007531a8c60000000000000000000000000000000000000000000000000000000070a193fd0000000000000000000000000000000000000000000000000000000048e617b30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000000000000000000000000000000000000000000020000000000000000000000000e90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e0e90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e18e1192e10000000000000000000000000000000000000000000000000000000093df584c00000000000000000000000000000000000000000000000000000000a15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054ce90b7bceb6e7df5418fb78d8ee546e97c83a08bbccc01a0644d599ccd2a7c2e30000000000000000000000000000000000000080000000000000000000000000198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff70a9089e0000000000000000000000000000000000000000000000000000000022611167000000000000000000000000000000000000000000000000000000003937306f000000000000000000000000000000000000000000000000000000002cbc26bb00000000000000000000000000000000000000000000000000000000fdbd6a7200000000000000000000000000000000000000000000000000000000b80d8fa90000000000000000000000000000000000000000000000000000000032cf0cbf00000000000000000000000000000000000000000000000000000000796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d95539132504570e300000000000000000000000000000000000000000000000000000000d5e0f0d600000000000000000000000000000000000000000000000000000000ed053c590000000000000000000000000000000000000000000000000000000035c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e4ac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077bac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077c3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92effac33ff75c19e70fe83507db0d683fd3465c996598dc972688b7ace676c89077eda0f08e80000000000000000000000000000000000000000000000000000000071253a2500000000000000000000000000000000000000000000000000000000a75d88af00000000000000000000000000000000000000000000000000000000e4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffca31867a00000000000000000000000000000000000000000000000000000000f67bc7c4000000000000000000000000000000000000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000004f666652616d7020312e362e302d6465760000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000c656089500000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f000000000000000000000000000000000000000000000000ffffffffffffff800000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffffffffffffffe0aab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d89493357e0e083000000000000000000000000000000000000000000000000000000002425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f38432a22000000000000000000000000000000000000000000000000000000006c95f1eb000000000000000000000000000000000000000000000000000000003b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120a9cfc86200000000000000000000000000000000000000000000000000000000e0e03cae000000000000000000000000000000000000000000000000000000001cfe6d8b0000000000000000000000000000000000000000000000000000000060987c200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffe02b11b8d90000000000000000000000000000000000000000000000000000000005665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b7dd17a7e0000000000000000000000000000000000000000000000000000000009bde3390000000000000000000000000000000000000000000000000000000011a6b26400000000000000000000000000000000000000000000000000000000ced9e49600000000000000000000000000000000000000000000000000000000c2e5347d0000000000000000000000000000000000000000000000000000000002000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000") diff --git a/core/gethwrappers/ccip/generated_zks/onramp/onramp.go b/core/gethwrappers/ccip/generated_zks/onramp/onramp.go new file mode 100644 index 00000000000..10aacf2caf1 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/onramp/onramp.go @@ -0,0 +1,1917 @@ +package onramp + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type ClientEVM2AnyMessage struct { + Receiver []byte + Data []byte + TokenAmounts []ClientEVMTokenAmount + FeeToken common.Address + ExtraArgs []byte +} + +type ClientEVMTokenAmount struct { + Token common.Address + Amount *big.Int +} + +type InternalEVM2AnyRampMessage struct { + Header InternalRampMessageHeader + Sender common.Address + Data []byte + Receiver []byte + ExtraArgs []byte + FeeToken common.Address + FeeTokenAmount *big.Int + FeeValueJuels *big.Int + TokenAmounts []InternalEVM2AnyTokenTransfer +} + +type InternalEVM2AnyTokenTransfer struct { + SourcePoolAddress common.Address + DestTokenAddress []byte + ExtraData []byte + Amount *big.Int + DestExecData []byte +} + +type InternalRampMessageHeader struct { + MessageId [32]byte + SourceChainSelector uint64 + DestChainSelector uint64 + SequenceNumber uint64 + Nonce uint64 +} + +type OnRampAllowlistConfigArgs struct { + DestChainSelector uint64 + AllowlistEnabled bool + AddedAllowlistedSenders []common.Address + RemovedAllowlistedSenders []common.Address +} + +type OnRampDestChainConfigArgs struct { + DestChainSelector uint64 + Router common.Address + AllowlistEnabled bool +} + +type OnRampDynamicConfig struct { + FeeQuoter common.Address + ReentrancyGuardEntered bool + MessageInterceptor common.Address + FeeAggregator common.Address + AllowlistAdmin common.Address +} + +type OnRampStaticConfig struct { + ChainSelector uint64 + RmnRemote common.Address + NonceManager common.Address + TokenAdminRegistry common.Address +} + +var OnRampMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowlistAdmin\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowlistEnabled\",\"type\":\"bool\"}],\"internalType\":\"structOnRamp.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CannotSendZeroTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotTransferToSelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GetSupportedTokensFunctionalityRemovedCheckAdminRegistry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidAllowListRequest\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidDestChainConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeCalledByRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrAllowlistAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterMustSetOriginalSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"UnsupportedToken\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"allowlistAdmin\",\"type\":\"address\"}],\"name\":\"AllowListAdminSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"senders\",\"type\":\"address[]\"}],\"name\":\"AllowListSendersAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"senders\",\"type\":\"address[]\"}],\"name\":\"AllowListSendersRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"feeValueJuels\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sourcePoolAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"destExecData\",\"type\":\"bytes\"}],\"internalType\":\"structInternal.EVM2AnyTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structInternal.EVM2AnyRampMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"CCIPMessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOnRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowlistAdmin\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"allowlistEnabled\",\"type\":\"bool\"}],\"name\":\"DestChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FeeTokenWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowlistEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"addedAllowlistedSenders\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"removedAllowlistedSenders\",\"type\":\"address[]\"}],\"internalType\":\"structOnRamp.AllowlistConfigArgs[]\",\"name\":\"allowlistConfigArgsItems\",\"type\":\"tuple[]\"}],\"name\":\"applyAllowlistUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowlistEnabled\",\"type\":\"bool\"}],\"internalType\":\"structOnRamp.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"applyDestChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"}],\"name\":\"forwardFromRouter\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getAllowedSendersList\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"configuredAddresses\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getDestChainConfig\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"allowlistEnabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowlistAdmin\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getExpectedNextSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"contractIERC20\",\"name\":\"sourceToken\",\"type\":\"address\"}],\"name\":\"getPoolBySourceToken\",\"outputs\":[{\"internalType\":\"contractIPoolV1\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"name\":\"getSupportedTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reentrancyGuardEntered\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeAggregator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowlistAdmin\",\"type\":\"address\"}],\"internalType\":\"structOnRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"feeTokens\",\"type\":\"address[]\"}],\"name\":\"withdrawFeeTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x6101006040523480156200001257600080fd5b506040516200409f3803806200409f833981016040819052620000359162000709565b336000816200005757604051639b15e16f60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03848116919091179091558116156200008a576200008a816200014f565b505082516001600160401b03161580620000af575060208301516001600160a01b0316155b80620000c6575060408301516001600160a01b0316155b80620000dd575060608301516001600160a01b0316155b15620000fc576040516306b7c75960e31b815260040160405180910390fd5b82516001600160401b031660805260208301516001600160a01b0390811660a0526040840151811660c05260608401511660e0526200013b82620001c9565b620001468162000378565b5050506200080a565b336001600160a01b038216036200017957604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b03161580620001ec575060608101516001600160a01b0316155b80620001f9575080602001515b1562000218576040516306b7c75960e31b815260040160405180910390fd5b8051600280546020808501511515600160a01b026001600160a81b03199092166001600160a01b039485161791909117909155604080840151600380549185166001600160a01b0319928316179055606080860151600480549187169184169190911790556080808701516005805491881691909416179092558251808301845291516001600160401b0316825260a05185169382019390935260c05184168183015260e05190931691830191909152517fc7372d2d886367d7bb1b0e0708a5436f2c91d6963de210eb2dc1ec2ecd6d21f1916200036d91849082516001600160401b031681526020808401516001600160a01b03908116828401526040858101518216818501526060958601518216868501528451821660808086019190915292850151151560a0850152840151811660c084015293830151841660e0830152909101519091166101008201526101200190565b60405180910390a150565b60005b8151811015620004cb5760008282815181106200039c576200039c620007f4565b602002602001015190506000838381518110620003bd57620003bd620007f4565b6020026020010151600001519050806001600160401b0316600003620004055760405163c35aa79d60e01b81526001600160401b038216600482015260240160405180910390fd5b6001600160401b0381811660008181526006602090815260409182902086820151815488850151600160401b600160e81b031990911669010000000000000000006001600160a01b0390931692830260ff60401b19161768010000000000000000911515820217808455855197811688529387019190915260ff920491909116151591840191909152917fd5ad72bc37dc7a80a8b9b9df20500046fd7341adb1be2258a540466fdd7dcef59060600160405180910390a25050508060010190506200037b565b5050565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b03811182821017156200050a576200050a620004cf565b60405290565b604051601f8201601f191681016001600160401b03811182821017156200053b576200053b620004cf565b604052919050565b80516001600160401b03811681146200055b57600080fd5b919050565b6001600160a01b03811681146200057657600080fd5b50565b805180151581146200055b57600080fd5b600060a082840312156200059d57600080fd5b60405160a081016001600160401b0381118282101715620005c257620005c2620004cf565b80604052508091508251620005d78162000560565b8152620005e76020840162000579565b60208201526040830151620005fc8162000560565b60408201526060830151620006118162000560565b60608201526080830151620006268162000560565b6080919091015292915050565b600082601f8301126200064557600080fd5b815160206001600160401b03821115620006635762000663620004cf565b62000673818360051b0162000510565b828152606092830285018201928282019190878511156200069357600080fd5b8387015b85811015620006fc5781818a031215620006b15760008081fd5b620006bb620004e5565b620006c68262000543565b815285820151620006d78162000560565b818701526040620006ea83820162000579565b90820152845292840192810162000697565b5090979650505050505050565b60008060008385036101408112156200072157600080fd5b60808112156200073057600080fd5b50604051608081016001600160401b038082118383101715620007575762000757620004cf565b81604052620007668762000543565b8352602087015191506200077a8262000560565b81602084015260408701519150620007928262000560565b81604084015260608701519150620007aa8262000560565b816060840152829550620007c288608089016200058a565b9450610120870151925080831115620007da57600080fd5b5050620007ea8682870162000633565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e05161381c62000883600039600081816101fc015281816107670152611ac40152600081816101c0015281816114b90152611a9d015260008181610184015281816105a50152611a7301526000818161015401528181611040015281816115d60152611a4f015261381c6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c80637437ff9f116100b2578063972b461211610081578063df0aa9e911610066578063df0aa9e9146104fb578063f2fde38b1461050e578063fbca3b741461052157600080fd5b8063972b4612146104c7578063c9b146b3146104e857600080fd5b80637437ff9f146103cb57806379ba5097146104755780638da5cb5b1461047d5780639041be3d1461049b57600080fd5b806327e936f1116100ee57806327e936f1146102ce57806348a98aa4146102e15780635cb80c5d146103195780636def4ce71461032c57600080fd5b806306285c6914610120578063181f5a771461024f57806320487ded146102985780632716072b146102b9575b600080fd5b61023960408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16815250905090565b6040516102469190612589565b60405180910390f35b61028b6040518060400160405280601081526020017f4f6e52616d7020312e362e302d6465760000000000000000000000000000000081525081565b604051610246919061264e565b6102ab6102a636600461268f565b610541565b604051908152602001610246565b6102cc6102c73660046127fd565b6106fa565b005b6102cc6102dc3660046128eb565b61070e565b6102f46102ef366004612983565b61071f565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610246565b6102cc610327366004612a08565b6107d4565b61038f61033a366004612a4a565b67ffffffffffffffff9081166000908152600660205260409020549081169168010000000000000000820460ff16916901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1690565b6040805167ffffffffffffffff9094168452911515602084015273ffffffffffffffffffffffffffffffffffffffff1690820152606001610246565b6104686040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a08101825260025473ffffffffffffffffffffffffffffffffffffffff80821683527401000000000000000000000000000000000000000090910460ff161515602083015260035481169282019290925260045482166060820152600554909116608082015290565b6040516102469190612a67565b6102cc610956565b60015473ffffffffffffffffffffffffffffffffffffffff166102f4565b6104ae6104a9366004612a4a565b610a24565b60405167ffffffffffffffff9091168152602001610246565b6104da6104d5366004612a4a565b610a4d565b604051610246929190612b12565b6102cc6104f6366004612a08565b610a91565b6102ab610509366004612b2d565b610dad565b6102cc61051c366004612b99565b6116bb565b61053461052f366004612a4a565b6116cc565b6040516102469190612bb6565b6040517f2cbc26bb00000000000000000000000000000000000000000000000000000000815277ffffffffffffffff00000000000000000000000000000000608084901b16600482015260009073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa1580156105ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106109190612bc9565b15610658576040517ffdbd6a7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff841660048201526024015b60405180910390fd5b6002546040517fd8694ccd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063d8694ccd906106b09086908690600401612ce8565b602060405180830381865afa1580156106cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f19190612e31565b90505b92915050565b610702611700565b61070b81611753565b50565b610716611700565b61070b816118f6565b6040517fbbe4f6db00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa1580156107b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f19190612e4a565b60045473ffffffffffffffffffffffffffffffffffffffff1660005b8281101561095057600084848381811061080c5761080c612e67565b90506020020160208101906108219190612b99565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290915060009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610891573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b59190612e31565b90508015610946576108de73ffffffffffffffffffffffffffffffffffffffff83168583611b26565b8173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f508d7d183612c18fc339b42618912b9fa3239f631dd7ec0671f950200a0fa66e8360405161093d91815260200190565b60405180910390a35b50506001016107f0565b50505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146109a7576040517f02b543c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000008082163390811790935560008054909116815560405173ffffffffffffffffffffffffffffffffffffffff909216929183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b67ffffffffffffffff80821660009081526006602052604081205490916106f491166001612ec5565b67ffffffffffffffff8116600090815260066020526040812080546060916801000000000000000090910460ff1690610a8890600101611bb3565b91509150915091565b60015473ffffffffffffffffffffffffffffffffffffffff163314610b015760055473ffffffffffffffffffffffffffffffffffffffff163314610b01576040517f905d7d9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610da8576000838383818110610b2057610b20612e67565b9050602002810190610b329190612ee6565b610b3b90612f97565b805167ffffffffffffffff1660009081526006602090815260409182902090830151815490151568010000000000000000027fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff90911617815590820151519192509015610cfb57816020015115610cba5760005b826040015151811015610c6a57600083604001518281518110610bd457610bd4612e67565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c535783516040517f463258ff00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161064f565b610c606001840182611bc7565b5050600101610baf565b50816000015167ffffffffffffffff167f330939f6eafe8bb516716892fe962ff19770570838686e6579dbc1cc51fc32818360400151604051610cad9190612bb6565b60405180910390a2610cfb565b81516040517f463258ff00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161064f565b60005b826060015151811015610d4757610d3e83606001518281518110610d2457610d24612e67565b602002602001015183600101611be990919063ffffffff16565b50600101610cfe565b5060608201515115610d9e57816000015167ffffffffffffffff167fc237ec1921f855ccd5e9a5af9733f2d58943a5a8501ec5988e305d7a4d4215868360600151604051610d959190612bb6565b60405180910390a25b5050600101610b04565b505050565b60025460009074010000000000000000000000000000000000000000900460ff1615610e05576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905567ffffffffffffffff8516600090815260066020526040902073ffffffffffffffffffffffffffffffffffffffff8316610eaa576040517fa4ec747900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805468010000000000000000900460ff1615610f1b57610ecd6001820184611c0b565b610f1b576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260240161064f565b80546901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610f78576040517f1c0a352900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035473ffffffffffffffffffffffffffffffffffffffff16801561101e576040517fe0a0e50600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063e0a0e50690610feb908a908a90600401612ce8565b600060405180830381600087803b15801561100557600080fd5b505af1158015611019573d6000803e3d6000fd5b505050505b50604080516101c081019091526000610120820181815267ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811661014085015289811661016085015284549293928392916101808401918791879161108c9116613048565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905567ffffffffffffffff168152602001600067ffffffffffffffff1681525081526020018573ffffffffffffffffffffffffffffffffffffffff168152602001878060200190611100919061306f565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602001611144888061306f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250938552505060408051602081810183529381529284019290925250016111a06080890160608a01612b99565b73ffffffffffffffffffffffffffffffffffffffff168152602001868152602001600081526020018780604001906111d891906130d4565b905067ffffffffffffffff8111156111f2576111f26126df565b60405190808252806020026020018201604052801561126b57816020015b6112586040518060a00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016060815260200160008152602001606081525090565b8152602001906001900390816112105790505b5090529050600061127f60408801886130d4565b808060200260200160405190810160405280939291908181526020016000905b828210156112cb576112bc6040830286013681900381019061313c565b8152602001906001019061129f565b5050505050905060005b6112e260408901896130d4565b905081101561137c5761135282828151811061130057611300612e67565b60209081029190910101518a6113168b8061306f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250611c3a915050565b836101000151828151811061136957611369612e67565b60209081029190910101526001016112d5565b50600254600090606090819073ffffffffffffffffffffffffffffffffffffffff1663430d138c8c6113b360808e018e8601612b99565b8c8e80608001906113c4919061306f565b8b61010001518b6040518863ffffffff1660e01b81526004016113ed9796959493929190613259565b600060405180830381865afa15801561140a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611450919081019061338b565b60e0890193909352909450925090508261152b576040517fea458c0c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8c16600482015273ffffffffffffffffffffffffffffffffffffffff89811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063ea458c0c906044016020604051808303816000875af1158015611502573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611526919061347e565b61152e565b60005b855167ffffffffffffffff909116608091820152850182905260005b856101000151518110156115a05781818151811061156a5761156a612e67565b6020026020010151866101000151828151811061158957611589612e67565b60209081029190910101516080015260010161154a565b50604080517f130ac867e79e2789f923760a88743d292acdf7002139a588206e2260f73f7321602082015267ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811692820192909252908c16606082015230608082015261163090869060a00160405160208183030381529060405280519060200120611f51565b85515284516060015160405167ffffffffffffffff918216918d16907f192442a2b2adb6a7948f097023cb6b57d29d3a7a5dd33e6666d33c39cc456f329061167990899061349b565b60405180910390a35050600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff169055505051519150505b949350505050565b6116c3611700565b61070b816120a3565b60606040517f9e7177c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff163314611751576040517f2b5c74de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60005b81518110156118f257600082828151811061177357611773612e67565b60200260200101519050600083838151811061179157611791612e67565b60200260200101516000015190508067ffffffffffffffff166000036117ef576040517fc35aa79d00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8216600482015260240161064f565b67ffffffffffffffff818116600081815260066020908152604091829020868201518154888501517fffffff000000000000000000000000000000000000000000ffffffffffffffff909116690100000000000000000073ffffffffffffffffffffffffffffffffffffffff9093169283027fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff161768010000000000000000911515820217808455855197811688529387019190915260ff920491909116151591840191909152917fd5ad72bc37dc7a80a8b9b9df20500046fd7341adb1be2258a540466fdd7dcef59060600160405180910390a2505050806001019050611756565b5050565b805173ffffffffffffffffffffffffffffffffffffffff1615806119325750606081015173ffffffffffffffffffffffffffffffffffffffff16155b8061193e575080602001515b15611975576040517f35be3ac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805160028054602080850151151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00000000000000000000000000000000000000000090921673ffffffffffffffffffffffffffffffffffffffff9485161791909117909155604080840151600380549185167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179055606080860151600480549187169184169190911790556080808701516005805491881691909416179092558251918201835267ffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001682527f00000000000000000000000000000000000000000000000000000000000000008516938201939093527f00000000000000000000000000000000000000000000000000000000000000008416818301527f000000000000000000000000000000000000000000000000000000000000000090931691830191909152517fc7372d2d886367d7bb1b0e0708a5436f2c91d6963de210eb2dc1ec2ecd6d21f191611b1b9184906135f3565b60405180910390a150565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610da8908490612167565b60606000611bc083612273565b9392505050565b60006106f18373ffffffffffffffffffffffffffffffffffffffff84166122cf565b60006106f18373ffffffffffffffffffffffffffffffffffffffff841661231e565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260018301602052604081205415156106f1565b611c826040518060a00160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001606081526020016060815260200160008152602001606081525090565b8460200151600003611cc0576040517f5cf0444900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611cd085876000015161071f565b905073ffffffffffffffffffffffffffffffffffffffff81161580611da057506040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527faff2afbf00000000000000000000000000000000000000000000000000000000600482015273ffffffffffffffffffffffffffffffffffffffff8216906301ffc9a790602401602060405180830381865afa158015611d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9e9190612bc9565b155b15611df25785516040517fbf16aab600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015260240161064f565b60008173ffffffffffffffffffffffffffffffffffffffff16639a4575b96040518060a001604052808881526020018967ffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018a6020015181526020018a6000015173ffffffffffffffffffffffffffffffffffffffff168152506040518263ffffffff1660e01b8152600401611e9191906136a1565b6000604051808303816000875af1158015611eb0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052611ef69190810190613717565b6040805160a08101825273ffffffffffffffffffffffffffffffffffffffff90941684528151602080860191909152918201518482015288820151606085015280519182019052600081526080830152509050949350505050565b60008060001b8284602001518560000151606001518660000151608001518760a001518860c00151604051602001611fcf95949392919073ffffffffffffffffffffffffffffffffffffffff958616815267ffffffffffffffff94851660208201529290931660408301529092166060830152608082015260a00190565b6040516020818303038152906040528051906020012085606001518051906020012086604001518051906020012087610100015160405160200161201391906137a8565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201206080808d0151805190840120928501999099529183019690965260608201949094529485019190915260a084015260c083015260e08201526101000160405160208183030381529060405280519060200120905092915050565b3373ffffffffffffffffffffffffffffffffffffffff8216036120f2576040517fdad89dca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60006121c9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166124189092919063ffffffff16565b805190915015610da857808060200190518101906121e79190612bc9565b610da8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161064f565b6060816000018054806020026020016040519081016040528092919081815260200182805480156122c357602002820191906000526020600020905b8154815260200190600101908083116122af575b50505050509050919050565b6000818152600183016020526040812054612316575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556106f4565b5060006106f4565b600081815260018301602052604081205480156124075760006123426001836137bb565b8554909150600090612356906001906137bb565b90508082146123bb57600086600001828154811061237657612376612e67565b906000526020600020015490508087600001848154811061239957612399612e67565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806123cc576123cc6137ce565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506106f4565b60009150506106f4565b5092915050565b60606116b38484600085856000808673ffffffffffffffffffffffffffffffffffffffff16858760405161244c91906137fd565b60006040518083038185875af1925050503d8060008114612489576040519150601f19603f3d011682016040523d82523d6000602084013e61248e565b606091505b509150915061249f878383876124aa565b979650505050505050565b606083156125405782516000036125395773ffffffffffffffffffffffffffffffffffffffff85163b612539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161064f565b50816116b3565b6116b383838151156125555781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064f919061264e565b608081016106f4828467ffffffffffffffff8151168252602081015173ffffffffffffffffffffffffffffffffffffffff808216602085015280604084015116604085015280606084015116606085015250505050565b60005b838110156125fb5781810151838201526020016125e3565b50506000910152565b6000815180845261261c8160208601602086016125e0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006106f16020830184612604565b67ffffffffffffffff8116811461070b57600080fd5b600060a0828403121561268957600080fd5b50919050565b600080604083850312156126a257600080fd5b82356126ad81612661565b9150602083013567ffffffffffffffff8111156126c957600080fd5b6126d585828601612677565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff81118282101715612731576127316126df565b60405290565b6040805190810167ffffffffffffffff81118282101715612731576127316126df565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156127a1576127a16126df565b604052919050565b600067ffffffffffffffff8211156127c3576127c36126df565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461070b57600080fd5b801515811461070b57600080fd5b6000602080838503121561281057600080fd5b823567ffffffffffffffff81111561282757600080fd5b8301601f8101851361283857600080fd5b803561284b612846826127a9565b61275a565b8181526060918202830184019184820191908884111561286a57600080fd5b938501935b838510156128cf5780858a0312156128875760008081fd5b61288f61270e565b853561289a81612661565b8152858701356128a9816127cd565b818801526040868101356128bc816127ef565b908201528352938401939185019161286f565b50979650505050505050565b80356128e6816127cd565b919050565b600060a082840312156128fd57600080fd5b60405160a0810181811067ffffffffffffffff82111715612920576129206126df565b604052823561292e816127cd565b8152602083013561293e816127ef565b60208201526040830135612951816127cd565b60408201526060830135612964816127cd565b60608201526080830135612977816127cd565b60808201529392505050565b6000806040838503121561299657600080fd5b82356129a181612661565b915060208301356129b1816127cd565b809150509250929050565b60008083601f8401126129ce57600080fd5b50813567ffffffffffffffff8111156129e657600080fd5b6020830191508360208260051b8501011115612a0157600080fd5b9250929050565b60008060208385031215612a1b57600080fd5b823567ffffffffffffffff811115612a3257600080fd5b612a3e858286016129bc565b90969095509350505050565b600060208284031215612a5c57600080fd5b8135611bc081612661565b60a081016106f4828473ffffffffffffffffffffffffffffffffffffffff808251168352602082015115156020840152806040830151166040840152806060830151166060840152806080830151166080840152505050565b60008151808452602080850194506020840160005b83811015612b0757815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101612ad5565b509495945050505050565b82151581526040602082015260006116b36040830184612ac0565b60008060008060808587031215612b4357600080fd5b8435612b4e81612661565b9350602085013567ffffffffffffffff811115612b6a57600080fd5b612b7687828801612677565b935050604085013591506060850135612b8e816127cd565b939692955090935050565b600060208284031215612bab57600080fd5b8135611bc0816127cd565b6020815260006106f16020830184612ac0565b600060208284031215612bdb57600080fd5b8151611bc0816127ef565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612c1b57600080fd5b830160208101925035905067ffffffffffffffff811115612c3b57600080fd5b803603821315612a0157600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b85811015612b07578135612cb6816127cd565b73ffffffffffffffffffffffffffffffffffffffff168752818301358388015260409687019690910190600101612ca3565b600067ffffffffffffffff808516835260406020840152612d098485612be6565b60a06040860152612d1e60e086018284612c4a565b915050612d2e6020860186612be6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc080878503016060880152612d64848385612c4a565b9350604088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1883603018312612d9d57600080fd5b60209288019283019235915084821115612db657600080fd5b8160061b3603831315612dc857600080fd5b80878503016080880152612ddd848385612c93565b9450612deb606089016128db565b73ffffffffffffffffffffffffffffffffffffffff811660a08901529350612e166080890189612be6565b94509250808786030160c0880152505061249f838383612c4a565b600060208284031215612e4357600080fd5b5051919050565b600060208284031215612e5c57600080fd5b8151611bc0816127cd565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b67ffffffffffffffff81811683821601908082111561241157612411612e96565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112612f1a57600080fd5b9190910192915050565b600082601f830112612f3557600080fd5b81356020612f45612846836127a9565b8083825260208201915060208460051b870101935086841115612f6757600080fd5b602086015b84811015612f8c578035612f7f816127cd565b8352918301918301612f6c565b509695505050505050565b600060808236031215612fa957600080fd5b6040516080810167ffffffffffffffff8282108183111715612fcd57612fcd6126df565b8160405284359150612fde82612661565b908252602084013590612ff0826127ef565b816020840152604085013591508082111561300a57600080fd5b61301636838701612f24565b6040840152606085013591508082111561302f57600080fd5b5061303c36828601612f24565b60608301525092915050565b600067ffffffffffffffff80831681810361306557613065612e96565b6001019392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126130a457600080fd5b83018035915067ffffffffffffffff8211156130bf57600080fd5b602001915036819003821315612a0157600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261310957600080fd5b83018035915067ffffffffffffffff82111561312457600080fd5b6020019150600681901b3603821315612a0157600080fd5b60006040828403121561314e57600080fd5b613156612737565b8235613161816127cd565b81526020928301359281019290925250919050565b600082825180855260208086019550808260051b84010181860160005b8481101561324c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018952815160a073ffffffffffffffffffffffffffffffffffffffff82511685528582015181878701526131f582870182612604565b9150506040808301518683038288015261320f8382612604565b925050506060808301518187015250608080830151925085820381870152506132388183612604565b9a86019a9450505090830190600101613193565b5090979650505050505050565b67ffffffffffffffff881681526000602073ffffffffffffffffffffffffffffffffffffffff808a1682850152604089604086015260c060608601526132a360c08601898b612c4a565b85810360808701526132b58189613176565b86810360a0880152875180825285890192509085019060005b818110156132f55783518051871684528701518784015292860192918401916001016132ce565b50909e9d5050505050505050505050505050565b600082601f83011261331a57600080fd5b815167ffffffffffffffff811115613334576133346126df565b61336560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161275a565b81815284602083860101111561337a57600080fd5b6116b38260208301602087016125e0565b600080600080608085870312156133a157600080fd5b845193506020808601516133b4816127ef565b604087015190945067ffffffffffffffff808211156133d257600080fd5b6133de89838a01613309565b945060608801519150808211156133f457600080fd5b818801915088601f83011261340857600080fd5b8151613416612846826127a9565b81815260059190911b8301840190848101908b83111561343557600080fd5b8585015b8381101561346d578051858111156134515760008081fd5b61345f8e89838a0101613309565b845250918601918601613439565b50989b979a50959850505050505050565b60006020828403121561349057600080fd5b8151611bc081612661565b602081526134ec60208201835180518252602081015167ffffffffffffffff808216602085015280604084015116604085015280606084015116606085015280608084015116608085015250505050565b6000602083015161351560c084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516101a08060e08501526135326101c0850183612604565b915060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06101008187860301818801526135708584612604565b945060808801519250818786030161012088015261358e8584612604565b945060a088015192506135ba61014088018473ffffffffffffffffffffffffffffffffffffffff169052565b60c088015161016088015260e08801516101808801528701518685039091018387015290506135e98382613176565b9695505050505050565b610120810161364b828567ffffffffffffffff8151168252602081015173ffffffffffffffffffffffffffffffffffffffff808216602085015280604084015116604085015280606084015116606085015250505050565b825173ffffffffffffffffffffffffffffffffffffffff9081166080848101919091526020850151151560a08501526040850151821660c08501526060850151821660e085015284015116610100830152611bc0565b602081526000825160a060208401526136bd60c0840182612604565b905067ffffffffffffffff6020850151166040840152604084015173ffffffffffffffffffffffffffffffffffffffff8082166060860152606086015160808601528060808701511660a086015250508091505092915050565b60006020828403121561372957600080fd5b815167ffffffffffffffff8082111561374157600080fd5b908301906040828603121561375557600080fd5b61375d612737565b82518281111561376c57600080fd5b61377887828601613309565b82525060208301518281111561378d57600080fd5b61379987828601613309565b60208301525095945050505050565b6020815260006106f16020830184613176565b818103818111156106f4576106f4612e96565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008251612f1a8184602087016125e056fea164736f6c6343000818000a", +} + +var OnRampABI = OnRampMetaData.ABI + +var OnRampBin = OnRampMetaData.Bin + +func DeployOnRamp(auth *bind.TransactOpts, backend bind.ContractBackend, staticConfig OnRampStaticConfig, dynamicConfig OnRampDynamicConfig, destChainConfigArgs []OnRampDestChainConfigArgs) (common.Address, *generated_zks.Transaction, *OnRamp, error) { + parsed, err := OnRampMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(OnRampZKBin), backend, staticConfig, dynamicConfig, destChainConfigArgs) + contractReturn := &OnRamp{address: address, abi: *parsed, OnRampCaller: OnRampCaller{contract: contractBind}, OnRampTransactor: OnRampTransactor{contract: contractBind}, OnRampFilterer: OnRampFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(OnRampBin), backend, staticConfig, dynamicConfig, destChainConfigArgs) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &OnRamp{address: address, abi: *parsed, OnRampCaller: OnRampCaller{contract: contract}, OnRampTransactor: OnRampTransactor{contract: contract}, OnRampFilterer: OnRampFilterer{contract: contract}}, nil +} + +type OnRamp struct { + address common.Address + abi abi.ABI + OnRampCaller + OnRampTransactor + OnRampFilterer +} + +type OnRampCaller struct { + contract *bind.BoundContract +} + +type OnRampTransactor struct { + contract *bind.BoundContract +} + +type OnRampFilterer struct { + contract *bind.BoundContract +} + +type OnRampSession struct { + Contract *OnRamp + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type OnRampCallerSession struct { + Contract *OnRampCaller + CallOpts bind.CallOpts +} + +type OnRampTransactorSession struct { + Contract *OnRampTransactor + TransactOpts bind.TransactOpts +} + +type OnRampRaw struct { + Contract *OnRamp +} + +type OnRampCallerRaw struct { + Contract *OnRampCaller +} + +type OnRampTransactorRaw struct { + Contract *OnRampTransactor +} + +func NewOnRamp(address common.Address, backend bind.ContractBackend) (*OnRamp, error) { + abi, err := abi.JSON(strings.NewReader(OnRampABI)) + if err != nil { + return nil, err + } + contract, err := bindOnRamp(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &OnRamp{address: address, abi: abi, OnRampCaller: OnRampCaller{contract: contract}, OnRampTransactor: OnRampTransactor{contract: contract}, OnRampFilterer: OnRampFilterer{contract: contract}}, nil +} + +func NewOnRampCaller(address common.Address, caller bind.ContractCaller) (*OnRampCaller, error) { + contract, err := bindOnRamp(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &OnRampCaller{contract: contract}, nil +} + +func NewOnRampTransactor(address common.Address, transactor bind.ContractTransactor) (*OnRampTransactor, error) { + contract, err := bindOnRamp(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &OnRampTransactor{contract: contract}, nil +} + +func NewOnRampFilterer(address common.Address, filterer bind.ContractFilterer) (*OnRampFilterer, error) { + contract, err := bindOnRamp(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &OnRampFilterer{contract: contract}, nil +} + +func bindOnRamp(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := OnRampMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_OnRamp *OnRampRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OnRamp.Contract.OnRampCaller.contract.Call(opts, result, method, params...) +} + +func (_OnRamp *OnRampRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OnRamp.Contract.OnRampTransactor.contract.Transfer(opts) +} + +func (_OnRamp *OnRampRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OnRamp.Contract.OnRampTransactor.contract.Transact(opts, method, params...) +} + +func (_OnRamp *OnRampCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OnRamp.Contract.contract.Call(opts, result, method, params...) +} + +func (_OnRamp *OnRampTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OnRamp.Contract.contract.Transfer(opts) +} + +func (_OnRamp *OnRampTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OnRamp.Contract.contract.Transact(opts, method, params...) +} + +func (_OnRamp *OnRampCaller) GetAllowedSendersList(opts *bind.CallOpts, destChainSelector uint64) (GetAllowedSendersList, + + error) { + var out []interface{} + err := _OnRamp.contract.Call(opts, &out, "getAllowedSendersList", destChainSelector) + + outstruct := new(GetAllowedSendersList) + if err != nil { + return *outstruct, err + } + + outstruct.IsEnabled = *abi.ConvertType(out[0], new(bool)).(*bool) + outstruct.ConfiguredAddresses = *abi.ConvertType(out[1], new([]common.Address)).(*[]common.Address) + + return *outstruct, err + +} + +func (_OnRamp *OnRampSession) GetAllowedSendersList(destChainSelector uint64) (GetAllowedSendersList, + + error) { + return _OnRamp.Contract.GetAllowedSendersList(&_OnRamp.CallOpts, destChainSelector) +} + +func (_OnRamp *OnRampCallerSession) GetAllowedSendersList(destChainSelector uint64) (GetAllowedSendersList, + + error) { + return _OnRamp.Contract.GetAllowedSendersList(&_OnRamp.CallOpts, destChainSelector) +} + +func (_OnRamp *OnRampCaller) GetDestChainConfig(opts *bind.CallOpts, destChainSelector uint64) (GetDestChainConfig, + + error) { + var out []interface{} + err := _OnRamp.contract.Call(opts, &out, "getDestChainConfig", destChainSelector) + + outstruct := new(GetDestChainConfig) + if err != nil { + return *outstruct, err + } + + outstruct.SequenceNumber = *abi.ConvertType(out[0], new(uint64)).(*uint64) + outstruct.AllowlistEnabled = *abi.ConvertType(out[1], new(bool)).(*bool) + outstruct.Router = *abi.ConvertType(out[2], new(common.Address)).(*common.Address) + + return *outstruct, err + +} + +func (_OnRamp *OnRampSession) GetDestChainConfig(destChainSelector uint64) (GetDestChainConfig, + + error) { + return _OnRamp.Contract.GetDestChainConfig(&_OnRamp.CallOpts, destChainSelector) +} + +func (_OnRamp *OnRampCallerSession) GetDestChainConfig(destChainSelector uint64) (GetDestChainConfig, + + error) { + return _OnRamp.Contract.GetDestChainConfig(&_OnRamp.CallOpts, destChainSelector) +} + +func (_OnRamp *OnRampCaller) GetDynamicConfig(opts *bind.CallOpts) (OnRampDynamicConfig, error) { + var out []interface{} + err := _OnRamp.contract.Call(opts, &out, "getDynamicConfig") + + if err != nil { + return *new(OnRampDynamicConfig), err + } + + out0 := *abi.ConvertType(out[0], new(OnRampDynamicConfig)).(*OnRampDynamicConfig) + + return out0, err + +} + +func (_OnRamp *OnRampSession) GetDynamicConfig() (OnRampDynamicConfig, error) { + return _OnRamp.Contract.GetDynamicConfig(&_OnRamp.CallOpts) +} + +func (_OnRamp *OnRampCallerSession) GetDynamicConfig() (OnRampDynamicConfig, error) { + return _OnRamp.Contract.GetDynamicConfig(&_OnRamp.CallOpts) +} + +func (_OnRamp *OnRampCaller) GetExpectedNextSequenceNumber(opts *bind.CallOpts, destChainSelector uint64) (uint64, error) { + var out []interface{} + err := _OnRamp.contract.Call(opts, &out, "getExpectedNextSequenceNumber", destChainSelector) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +func (_OnRamp *OnRampSession) GetExpectedNextSequenceNumber(destChainSelector uint64) (uint64, error) { + return _OnRamp.Contract.GetExpectedNextSequenceNumber(&_OnRamp.CallOpts, destChainSelector) +} + +func (_OnRamp *OnRampCallerSession) GetExpectedNextSequenceNumber(destChainSelector uint64) (uint64, error) { + return _OnRamp.Contract.GetExpectedNextSequenceNumber(&_OnRamp.CallOpts, destChainSelector) +} + +func (_OnRamp *OnRampCaller) GetFee(opts *bind.CallOpts, destChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) { + var out []interface{} + err := _OnRamp.contract.Call(opts, &out, "getFee", destChainSelector, message) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_OnRamp *OnRampSession) GetFee(destChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) { + return _OnRamp.Contract.GetFee(&_OnRamp.CallOpts, destChainSelector, message) +} + +func (_OnRamp *OnRampCallerSession) GetFee(destChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) { + return _OnRamp.Contract.GetFee(&_OnRamp.CallOpts, destChainSelector, message) +} + +func (_OnRamp *OnRampCaller) GetPoolBySourceToken(opts *bind.CallOpts, arg0 uint64, sourceToken common.Address) (common.Address, error) { + var out []interface{} + err := _OnRamp.contract.Call(opts, &out, "getPoolBySourceToken", arg0, sourceToken) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_OnRamp *OnRampSession) GetPoolBySourceToken(arg0 uint64, sourceToken common.Address) (common.Address, error) { + return _OnRamp.Contract.GetPoolBySourceToken(&_OnRamp.CallOpts, arg0, sourceToken) +} + +func (_OnRamp *OnRampCallerSession) GetPoolBySourceToken(arg0 uint64, sourceToken common.Address) (common.Address, error) { + return _OnRamp.Contract.GetPoolBySourceToken(&_OnRamp.CallOpts, arg0, sourceToken) +} + +func (_OnRamp *OnRampCaller) GetStaticConfig(opts *bind.CallOpts) (OnRampStaticConfig, error) { + var out []interface{} + err := _OnRamp.contract.Call(opts, &out, "getStaticConfig") + + if err != nil { + return *new(OnRampStaticConfig), err + } + + out0 := *abi.ConvertType(out[0], new(OnRampStaticConfig)).(*OnRampStaticConfig) + + return out0, err + +} + +func (_OnRamp *OnRampSession) GetStaticConfig() (OnRampStaticConfig, error) { + return _OnRamp.Contract.GetStaticConfig(&_OnRamp.CallOpts) +} + +func (_OnRamp *OnRampCallerSession) GetStaticConfig() (OnRampStaticConfig, error) { + return _OnRamp.Contract.GetStaticConfig(&_OnRamp.CallOpts) +} + +func (_OnRamp *OnRampCaller) GetSupportedTokens(opts *bind.CallOpts, arg0 uint64) ([]common.Address, error) { + var out []interface{} + err := _OnRamp.contract.Call(opts, &out, "getSupportedTokens", arg0) + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +func (_OnRamp *OnRampSession) GetSupportedTokens(arg0 uint64) ([]common.Address, error) { + return _OnRamp.Contract.GetSupportedTokens(&_OnRamp.CallOpts, arg0) +} + +func (_OnRamp *OnRampCallerSession) GetSupportedTokens(arg0 uint64) ([]common.Address, error) { + return _OnRamp.Contract.GetSupportedTokens(&_OnRamp.CallOpts, arg0) +} + +func (_OnRamp *OnRampCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OnRamp.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 + +} + +func (_OnRamp *OnRampSession) Owner() (common.Address, error) { + return _OnRamp.Contract.Owner(&_OnRamp.CallOpts) +} + +func (_OnRamp *OnRampCallerSession) Owner() (common.Address, error) { + return _OnRamp.Contract.Owner(&_OnRamp.CallOpts) +} + +func (_OnRamp *OnRampCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _OnRamp.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_OnRamp *OnRampSession) TypeAndVersion() (string, error) { + return _OnRamp.Contract.TypeAndVersion(&_OnRamp.CallOpts) +} + +func (_OnRamp *OnRampCallerSession) TypeAndVersion() (string, error) { + return _OnRamp.Contract.TypeAndVersion(&_OnRamp.CallOpts) +} + +func (_OnRamp *OnRampTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OnRamp.contract.Transact(opts, "acceptOwnership") +} + +func (_OnRamp *OnRampSession) AcceptOwnership() (*types.Transaction, error) { + return _OnRamp.Contract.AcceptOwnership(&_OnRamp.TransactOpts) +} + +func (_OnRamp *OnRampTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _OnRamp.Contract.AcceptOwnership(&_OnRamp.TransactOpts) +} + +func (_OnRamp *OnRampTransactor) ApplyAllowlistUpdates(opts *bind.TransactOpts, allowlistConfigArgsItems []OnRampAllowlistConfigArgs) (*types.Transaction, error) { + return _OnRamp.contract.Transact(opts, "applyAllowlistUpdates", allowlistConfigArgsItems) +} + +func (_OnRamp *OnRampSession) ApplyAllowlistUpdates(allowlistConfigArgsItems []OnRampAllowlistConfigArgs) (*types.Transaction, error) { + return _OnRamp.Contract.ApplyAllowlistUpdates(&_OnRamp.TransactOpts, allowlistConfigArgsItems) +} + +func (_OnRamp *OnRampTransactorSession) ApplyAllowlistUpdates(allowlistConfigArgsItems []OnRampAllowlistConfigArgs) (*types.Transaction, error) { + return _OnRamp.Contract.ApplyAllowlistUpdates(&_OnRamp.TransactOpts, allowlistConfigArgsItems) +} + +func (_OnRamp *OnRampTransactor) ApplyDestChainConfigUpdates(opts *bind.TransactOpts, destChainConfigArgs []OnRampDestChainConfigArgs) (*types.Transaction, error) { + return _OnRamp.contract.Transact(opts, "applyDestChainConfigUpdates", destChainConfigArgs) +} + +func (_OnRamp *OnRampSession) ApplyDestChainConfigUpdates(destChainConfigArgs []OnRampDestChainConfigArgs) (*types.Transaction, error) { + return _OnRamp.Contract.ApplyDestChainConfigUpdates(&_OnRamp.TransactOpts, destChainConfigArgs) +} + +func (_OnRamp *OnRampTransactorSession) ApplyDestChainConfigUpdates(destChainConfigArgs []OnRampDestChainConfigArgs) (*types.Transaction, error) { + return _OnRamp.Contract.ApplyDestChainConfigUpdates(&_OnRamp.TransactOpts, destChainConfigArgs) +} + +func (_OnRamp *OnRampTransactor) ForwardFromRouter(opts *bind.TransactOpts, destChainSelector uint64, message ClientEVM2AnyMessage, feeTokenAmount *big.Int, originalSender common.Address) (*types.Transaction, error) { + return _OnRamp.contract.Transact(opts, "forwardFromRouter", destChainSelector, message, feeTokenAmount, originalSender) +} + +func (_OnRamp *OnRampSession) ForwardFromRouter(destChainSelector uint64, message ClientEVM2AnyMessage, feeTokenAmount *big.Int, originalSender common.Address) (*types.Transaction, error) { + return _OnRamp.Contract.ForwardFromRouter(&_OnRamp.TransactOpts, destChainSelector, message, feeTokenAmount, originalSender) +} + +func (_OnRamp *OnRampTransactorSession) ForwardFromRouter(destChainSelector uint64, message ClientEVM2AnyMessage, feeTokenAmount *big.Int, originalSender common.Address) (*types.Transaction, error) { + return _OnRamp.Contract.ForwardFromRouter(&_OnRamp.TransactOpts, destChainSelector, message, feeTokenAmount, originalSender) +} + +func (_OnRamp *OnRampTransactor) SetDynamicConfig(opts *bind.TransactOpts, dynamicConfig OnRampDynamicConfig) (*types.Transaction, error) { + return _OnRamp.contract.Transact(opts, "setDynamicConfig", dynamicConfig) +} + +func (_OnRamp *OnRampSession) SetDynamicConfig(dynamicConfig OnRampDynamicConfig) (*types.Transaction, error) { + return _OnRamp.Contract.SetDynamicConfig(&_OnRamp.TransactOpts, dynamicConfig) +} + +func (_OnRamp *OnRampTransactorSession) SetDynamicConfig(dynamicConfig OnRampDynamicConfig) (*types.Transaction, error) { + return _OnRamp.Contract.SetDynamicConfig(&_OnRamp.TransactOpts, dynamicConfig) +} + +func (_OnRamp *OnRampTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _OnRamp.contract.Transact(opts, "transferOwnership", to) +} + +func (_OnRamp *OnRampSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _OnRamp.Contract.TransferOwnership(&_OnRamp.TransactOpts, to) +} + +func (_OnRamp *OnRampTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _OnRamp.Contract.TransferOwnership(&_OnRamp.TransactOpts, to) +} + +func (_OnRamp *OnRampTransactor) WithdrawFeeTokens(opts *bind.TransactOpts, feeTokens []common.Address) (*types.Transaction, error) { + return _OnRamp.contract.Transact(opts, "withdrawFeeTokens", feeTokens) +} + +func (_OnRamp *OnRampSession) WithdrawFeeTokens(feeTokens []common.Address) (*types.Transaction, error) { + return _OnRamp.Contract.WithdrawFeeTokens(&_OnRamp.TransactOpts, feeTokens) +} + +func (_OnRamp *OnRampTransactorSession) WithdrawFeeTokens(feeTokens []common.Address) (*types.Transaction, error) { + return _OnRamp.Contract.WithdrawFeeTokens(&_OnRamp.TransactOpts, feeTokens) +} + +type OnRampAllowListAdminSetIterator struct { + Event *OnRampAllowListAdminSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OnRampAllowListAdminSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OnRampAllowListAdminSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OnRampAllowListAdminSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OnRampAllowListAdminSetIterator) Error() error { + return it.fail +} + +func (it *OnRampAllowListAdminSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OnRampAllowListAdminSet struct { + AllowlistAdmin common.Address + Raw types.Log +} + +func (_OnRamp *OnRampFilterer) FilterAllowListAdminSet(opts *bind.FilterOpts, allowlistAdmin []common.Address) (*OnRampAllowListAdminSetIterator, error) { + + var allowlistAdminRule []interface{} + for _, allowlistAdminItem := range allowlistAdmin { + allowlistAdminRule = append(allowlistAdminRule, allowlistAdminItem) + } + + logs, sub, err := _OnRamp.contract.FilterLogs(opts, "AllowListAdminSet", allowlistAdminRule) + if err != nil { + return nil, err + } + return &OnRampAllowListAdminSetIterator{contract: _OnRamp.contract, event: "AllowListAdminSet", logs: logs, sub: sub}, nil +} + +func (_OnRamp *OnRampFilterer) WatchAllowListAdminSet(opts *bind.WatchOpts, sink chan<- *OnRampAllowListAdminSet, allowlistAdmin []common.Address) (event.Subscription, error) { + + var allowlistAdminRule []interface{} + for _, allowlistAdminItem := range allowlistAdmin { + allowlistAdminRule = append(allowlistAdminRule, allowlistAdminItem) + } + + logs, sub, err := _OnRamp.contract.WatchLogs(opts, "AllowListAdminSet", allowlistAdminRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OnRampAllowListAdminSet) + if err := _OnRamp.contract.UnpackLog(event, "AllowListAdminSet", 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 +} + +func (_OnRamp *OnRampFilterer) ParseAllowListAdminSet(log types.Log) (*OnRampAllowListAdminSet, error) { + event := new(OnRampAllowListAdminSet) + if err := _OnRamp.contract.UnpackLog(event, "AllowListAdminSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OnRampAllowListSendersAddedIterator struct { + Event *OnRampAllowListSendersAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OnRampAllowListSendersAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OnRampAllowListSendersAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OnRampAllowListSendersAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OnRampAllowListSendersAddedIterator) Error() error { + return it.fail +} + +func (it *OnRampAllowListSendersAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OnRampAllowListSendersAdded struct { + DestChainSelector uint64 + Senders []common.Address + Raw types.Log +} + +func (_OnRamp *OnRampFilterer) FilterAllowListSendersAdded(opts *bind.FilterOpts, destChainSelector []uint64) (*OnRampAllowListSendersAddedIterator, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + + logs, sub, err := _OnRamp.contract.FilterLogs(opts, "AllowListSendersAdded", destChainSelectorRule) + if err != nil { + return nil, err + } + return &OnRampAllowListSendersAddedIterator{contract: _OnRamp.contract, event: "AllowListSendersAdded", logs: logs, sub: sub}, nil +} + +func (_OnRamp *OnRampFilterer) WatchAllowListSendersAdded(opts *bind.WatchOpts, sink chan<- *OnRampAllowListSendersAdded, destChainSelector []uint64) (event.Subscription, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + + logs, sub, err := _OnRamp.contract.WatchLogs(opts, "AllowListSendersAdded", destChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OnRampAllowListSendersAdded) + if err := _OnRamp.contract.UnpackLog(event, "AllowListSendersAdded", 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 +} + +func (_OnRamp *OnRampFilterer) ParseAllowListSendersAdded(log types.Log) (*OnRampAllowListSendersAdded, error) { + event := new(OnRampAllowListSendersAdded) + if err := _OnRamp.contract.UnpackLog(event, "AllowListSendersAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OnRampAllowListSendersRemovedIterator struct { + Event *OnRampAllowListSendersRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OnRampAllowListSendersRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OnRampAllowListSendersRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OnRampAllowListSendersRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OnRampAllowListSendersRemovedIterator) Error() error { + return it.fail +} + +func (it *OnRampAllowListSendersRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OnRampAllowListSendersRemoved struct { + DestChainSelector uint64 + Senders []common.Address + Raw types.Log +} + +func (_OnRamp *OnRampFilterer) FilterAllowListSendersRemoved(opts *bind.FilterOpts, destChainSelector []uint64) (*OnRampAllowListSendersRemovedIterator, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + + logs, sub, err := _OnRamp.contract.FilterLogs(opts, "AllowListSendersRemoved", destChainSelectorRule) + if err != nil { + return nil, err + } + return &OnRampAllowListSendersRemovedIterator{contract: _OnRamp.contract, event: "AllowListSendersRemoved", logs: logs, sub: sub}, nil +} + +func (_OnRamp *OnRampFilterer) WatchAllowListSendersRemoved(opts *bind.WatchOpts, sink chan<- *OnRampAllowListSendersRemoved, destChainSelector []uint64) (event.Subscription, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + + logs, sub, err := _OnRamp.contract.WatchLogs(opts, "AllowListSendersRemoved", destChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OnRampAllowListSendersRemoved) + if err := _OnRamp.contract.UnpackLog(event, "AllowListSendersRemoved", 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 +} + +func (_OnRamp *OnRampFilterer) ParseAllowListSendersRemoved(log types.Log) (*OnRampAllowListSendersRemoved, error) { + event := new(OnRampAllowListSendersRemoved) + if err := _OnRamp.contract.UnpackLog(event, "AllowListSendersRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OnRampCCIPMessageSentIterator struct { + Event *OnRampCCIPMessageSent + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OnRampCCIPMessageSentIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OnRampCCIPMessageSent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OnRampCCIPMessageSent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OnRampCCIPMessageSentIterator) Error() error { + return it.fail +} + +func (it *OnRampCCIPMessageSentIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OnRampCCIPMessageSent struct { + DestChainSelector uint64 + SequenceNumber uint64 + Message InternalEVM2AnyRampMessage + Raw types.Log +} + +func (_OnRamp *OnRampFilterer) FilterCCIPMessageSent(opts *bind.FilterOpts, destChainSelector []uint64, sequenceNumber []uint64) (*OnRampCCIPMessageSentIterator, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + var sequenceNumberRule []interface{} + for _, sequenceNumberItem := range sequenceNumber { + sequenceNumberRule = append(sequenceNumberRule, sequenceNumberItem) + } + + logs, sub, err := _OnRamp.contract.FilterLogs(opts, "CCIPMessageSent", destChainSelectorRule, sequenceNumberRule) + if err != nil { + return nil, err + } + return &OnRampCCIPMessageSentIterator{contract: _OnRamp.contract, event: "CCIPMessageSent", logs: logs, sub: sub}, nil +} + +func (_OnRamp *OnRampFilterer) WatchCCIPMessageSent(opts *bind.WatchOpts, sink chan<- *OnRampCCIPMessageSent, destChainSelector []uint64, sequenceNumber []uint64) (event.Subscription, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + var sequenceNumberRule []interface{} + for _, sequenceNumberItem := range sequenceNumber { + sequenceNumberRule = append(sequenceNumberRule, sequenceNumberItem) + } + + logs, sub, err := _OnRamp.contract.WatchLogs(opts, "CCIPMessageSent", destChainSelectorRule, sequenceNumberRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OnRampCCIPMessageSent) + if err := _OnRamp.contract.UnpackLog(event, "CCIPMessageSent", 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 +} + +func (_OnRamp *OnRampFilterer) ParseCCIPMessageSent(log types.Log) (*OnRampCCIPMessageSent, error) { + event := new(OnRampCCIPMessageSent) + if err := _OnRamp.contract.UnpackLog(event, "CCIPMessageSent", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OnRampConfigSetIterator struct { + Event *OnRampConfigSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OnRampConfigSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OnRampConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OnRampConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OnRampConfigSetIterator) Error() error { + return it.fail +} + +func (it *OnRampConfigSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OnRampConfigSet struct { + StaticConfig OnRampStaticConfig + DynamicConfig OnRampDynamicConfig + Raw types.Log +} + +func (_OnRamp *OnRampFilterer) FilterConfigSet(opts *bind.FilterOpts) (*OnRampConfigSetIterator, error) { + + logs, sub, err := _OnRamp.contract.FilterLogs(opts, "ConfigSet") + if err != nil { + return nil, err + } + return &OnRampConfigSetIterator{contract: _OnRamp.contract, event: "ConfigSet", logs: logs, sub: sub}, nil +} + +func (_OnRamp *OnRampFilterer) WatchConfigSet(opts *bind.WatchOpts, sink chan<- *OnRampConfigSet) (event.Subscription, error) { + + logs, sub, err := _OnRamp.contract.WatchLogs(opts, "ConfigSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OnRampConfigSet) + if err := _OnRamp.contract.UnpackLog(event, "ConfigSet", 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 +} + +func (_OnRamp *OnRampFilterer) ParseConfigSet(log types.Log) (*OnRampConfigSet, error) { + event := new(OnRampConfigSet) + if err := _OnRamp.contract.UnpackLog(event, "ConfigSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OnRampDestChainConfigSetIterator struct { + Event *OnRampDestChainConfigSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OnRampDestChainConfigSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OnRampDestChainConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OnRampDestChainConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OnRampDestChainConfigSetIterator) Error() error { + return it.fail +} + +func (it *OnRampDestChainConfigSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OnRampDestChainConfigSet struct { + DestChainSelector uint64 + SequenceNumber uint64 + Router common.Address + AllowlistEnabled bool + Raw types.Log +} + +func (_OnRamp *OnRampFilterer) FilterDestChainConfigSet(opts *bind.FilterOpts, destChainSelector []uint64) (*OnRampDestChainConfigSetIterator, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + + logs, sub, err := _OnRamp.contract.FilterLogs(opts, "DestChainConfigSet", destChainSelectorRule) + if err != nil { + return nil, err + } + return &OnRampDestChainConfigSetIterator{contract: _OnRamp.contract, event: "DestChainConfigSet", logs: logs, sub: sub}, nil +} + +func (_OnRamp *OnRampFilterer) WatchDestChainConfigSet(opts *bind.WatchOpts, sink chan<- *OnRampDestChainConfigSet, destChainSelector []uint64) (event.Subscription, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + + logs, sub, err := _OnRamp.contract.WatchLogs(opts, "DestChainConfigSet", destChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OnRampDestChainConfigSet) + if err := _OnRamp.contract.UnpackLog(event, "DestChainConfigSet", 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 +} + +func (_OnRamp *OnRampFilterer) ParseDestChainConfigSet(log types.Log) (*OnRampDestChainConfigSet, error) { + event := new(OnRampDestChainConfigSet) + if err := _OnRamp.contract.UnpackLog(event, "DestChainConfigSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OnRampFeeTokenWithdrawnIterator struct { + Event *OnRampFeeTokenWithdrawn + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OnRampFeeTokenWithdrawnIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OnRampFeeTokenWithdrawn) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OnRampFeeTokenWithdrawn) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OnRampFeeTokenWithdrawnIterator) Error() error { + return it.fail +} + +func (it *OnRampFeeTokenWithdrawnIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OnRampFeeTokenWithdrawn struct { + FeeAggregator common.Address + FeeToken common.Address + Amount *big.Int + Raw types.Log +} + +func (_OnRamp *OnRampFilterer) FilterFeeTokenWithdrawn(opts *bind.FilterOpts, feeAggregator []common.Address, feeToken []common.Address) (*OnRampFeeTokenWithdrawnIterator, error) { + + var feeAggregatorRule []interface{} + for _, feeAggregatorItem := range feeAggregator { + feeAggregatorRule = append(feeAggregatorRule, feeAggregatorItem) + } + var feeTokenRule []interface{} + for _, feeTokenItem := range feeToken { + feeTokenRule = append(feeTokenRule, feeTokenItem) + } + + logs, sub, err := _OnRamp.contract.FilterLogs(opts, "FeeTokenWithdrawn", feeAggregatorRule, feeTokenRule) + if err != nil { + return nil, err + } + return &OnRampFeeTokenWithdrawnIterator{contract: _OnRamp.contract, event: "FeeTokenWithdrawn", logs: logs, sub: sub}, nil +} + +func (_OnRamp *OnRampFilterer) WatchFeeTokenWithdrawn(opts *bind.WatchOpts, sink chan<- *OnRampFeeTokenWithdrawn, feeAggregator []common.Address, feeToken []common.Address) (event.Subscription, error) { + + var feeAggregatorRule []interface{} + for _, feeAggregatorItem := range feeAggregator { + feeAggregatorRule = append(feeAggregatorRule, feeAggregatorItem) + } + var feeTokenRule []interface{} + for _, feeTokenItem := range feeToken { + feeTokenRule = append(feeTokenRule, feeTokenItem) + } + + logs, sub, err := _OnRamp.contract.WatchLogs(opts, "FeeTokenWithdrawn", feeAggregatorRule, feeTokenRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OnRampFeeTokenWithdrawn) + if err := _OnRamp.contract.UnpackLog(event, "FeeTokenWithdrawn", 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 +} + +func (_OnRamp *OnRampFilterer) ParseFeeTokenWithdrawn(log types.Log) (*OnRampFeeTokenWithdrawn, error) { + event := new(OnRampFeeTokenWithdrawn) + if err := _OnRamp.contract.UnpackLog(event, "FeeTokenWithdrawn", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OnRampOwnershipTransferRequestedIterator struct { + Event *OnRampOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OnRampOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OnRampOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OnRampOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OnRampOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *OnRampOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OnRampOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OnRamp *OnRampFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OnRampOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OnRamp.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &OnRampOwnershipTransferRequestedIterator{contract: _OnRamp.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_OnRamp *OnRampFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OnRampOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OnRamp.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OnRampOwnershipTransferRequested) + if err := _OnRamp.contract.UnpackLog(event, "OwnershipTransferRequested", 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 +} + +func (_OnRamp *OnRampFilterer) ParseOwnershipTransferRequested(log types.Log) (*OnRampOwnershipTransferRequested, error) { + event := new(OnRampOwnershipTransferRequested) + if err := _OnRamp.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OnRampOwnershipTransferredIterator struct { + Event *OnRampOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OnRampOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OnRampOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OnRampOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OnRampOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *OnRampOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OnRampOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OnRamp *OnRampFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OnRampOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OnRamp.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &OnRampOwnershipTransferredIterator{contract: _OnRamp.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_OnRamp *OnRampFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OnRampOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OnRamp.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OnRampOwnershipTransferred) + if err := _OnRamp.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 +} + +func (_OnRamp *OnRampFilterer) ParseOwnershipTransferred(log types.Log) (*OnRampOwnershipTransferred, error) { + event := new(OnRampOwnershipTransferred) + if err := _OnRamp.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type GetAllowedSendersList struct { + IsEnabled bool + ConfiguredAddresses []common.Address +} +type GetDestChainConfig struct { + SequenceNumber uint64 + AllowlistEnabled bool + Router common.Address +} + +func (_OnRamp *OnRamp) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _OnRamp.abi.Events["AllowListAdminSet"].ID: + return _OnRamp.ParseAllowListAdminSet(log) + case _OnRamp.abi.Events["AllowListSendersAdded"].ID: + return _OnRamp.ParseAllowListSendersAdded(log) + case _OnRamp.abi.Events["AllowListSendersRemoved"].ID: + return _OnRamp.ParseAllowListSendersRemoved(log) + case _OnRamp.abi.Events["CCIPMessageSent"].ID: + return _OnRamp.ParseCCIPMessageSent(log) + case _OnRamp.abi.Events["ConfigSet"].ID: + return _OnRamp.ParseConfigSet(log) + case _OnRamp.abi.Events["DestChainConfigSet"].ID: + return _OnRamp.ParseDestChainConfigSet(log) + case _OnRamp.abi.Events["FeeTokenWithdrawn"].ID: + return _OnRamp.ParseFeeTokenWithdrawn(log) + case _OnRamp.abi.Events["OwnershipTransferRequested"].ID: + return _OnRamp.ParseOwnershipTransferRequested(log) + case _OnRamp.abi.Events["OwnershipTransferred"].ID: + return _OnRamp.ParseOwnershipTransferred(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (OnRampAllowListAdminSet) Topic() common.Hash { + return common.HexToHash("0xb8c9b44ae5b5e3afb195f67391d9ff50cb904f9c0fa5fd520e497a97c1aa5a1e") +} + +func (OnRampAllowListSendersAdded) Topic() common.Hash { + return common.HexToHash("0x330939f6eafe8bb516716892fe962ff19770570838686e6579dbc1cc51fc3281") +} + +func (OnRampAllowListSendersRemoved) Topic() common.Hash { + return common.HexToHash("0xc237ec1921f855ccd5e9a5af9733f2d58943a5a8501ec5988e305d7a4d421586") +} + +func (OnRampCCIPMessageSent) Topic() common.Hash { + return common.HexToHash("0x192442a2b2adb6a7948f097023cb6b57d29d3a7a5dd33e6666d33c39cc456f32") +} + +func (OnRampConfigSet) Topic() common.Hash { + return common.HexToHash("0xc7372d2d886367d7bb1b0e0708a5436f2c91d6963de210eb2dc1ec2ecd6d21f1") +} + +func (OnRampDestChainConfigSet) Topic() common.Hash { + return common.HexToHash("0xd5ad72bc37dc7a80a8b9b9df20500046fd7341adb1be2258a540466fdd7dcef5") +} + +func (OnRampFeeTokenWithdrawn) Topic() common.Hash { + return common.HexToHash("0x508d7d183612c18fc339b42618912b9fa3239f631dd7ec0671f950200a0fa66e") +} + +func (OnRampOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (OnRampOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (_OnRamp *OnRamp) Address() common.Address { + return _OnRamp.address +} + +type OnRampInterface interface { + GetAllowedSendersList(opts *bind.CallOpts, destChainSelector uint64) (GetAllowedSendersList, + + error) + + GetDestChainConfig(opts *bind.CallOpts, destChainSelector uint64) (GetDestChainConfig, + + error) + + GetDynamicConfig(opts *bind.CallOpts) (OnRampDynamicConfig, error) + + GetExpectedNextSequenceNumber(opts *bind.CallOpts, destChainSelector uint64) (uint64, error) + + GetFee(opts *bind.CallOpts, destChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) + + GetPoolBySourceToken(opts *bind.CallOpts, arg0 uint64, sourceToken common.Address) (common.Address, error) + + GetStaticConfig(opts *bind.CallOpts) (OnRampStaticConfig, error) + + GetSupportedTokens(opts *bind.CallOpts, arg0 uint64) ([]common.Address, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + ApplyAllowlistUpdates(opts *bind.TransactOpts, allowlistConfigArgsItems []OnRampAllowlistConfigArgs) (*types.Transaction, error) + + ApplyDestChainConfigUpdates(opts *bind.TransactOpts, destChainConfigArgs []OnRampDestChainConfigArgs) (*types.Transaction, error) + + ForwardFromRouter(opts *bind.TransactOpts, destChainSelector uint64, message ClientEVM2AnyMessage, feeTokenAmount *big.Int, originalSender common.Address) (*types.Transaction, error) + + SetDynamicConfig(opts *bind.TransactOpts, dynamicConfig OnRampDynamicConfig) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + WithdrawFeeTokens(opts *bind.TransactOpts, feeTokens []common.Address) (*types.Transaction, error) + + FilterAllowListAdminSet(opts *bind.FilterOpts, allowlistAdmin []common.Address) (*OnRampAllowListAdminSetIterator, error) + + WatchAllowListAdminSet(opts *bind.WatchOpts, sink chan<- *OnRampAllowListAdminSet, allowlistAdmin []common.Address) (event.Subscription, error) + + ParseAllowListAdminSet(log types.Log) (*OnRampAllowListAdminSet, error) + + FilterAllowListSendersAdded(opts *bind.FilterOpts, destChainSelector []uint64) (*OnRampAllowListSendersAddedIterator, error) + + WatchAllowListSendersAdded(opts *bind.WatchOpts, sink chan<- *OnRampAllowListSendersAdded, destChainSelector []uint64) (event.Subscription, error) + + ParseAllowListSendersAdded(log types.Log) (*OnRampAllowListSendersAdded, error) + + FilterAllowListSendersRemoved(opts *bind.FilterOpts, destChainSelector []uint64) (*OnRampAllowListSendersRemovedIterator, error) + + WatchAllowListSendersRemoved(opts *bind.WatchOpts, sink chan<- *OnRampAllowListSendersRemoved, destChainSelector []uint64) (event.Subscription, error) + + ParseAllowListSendersRemoved(log types.Log) (*OnRampAllowListSendersRemoved, error) + + FilterCCIPMessageSent(opts *bind.FilterOpts, destChainSelector []uint64, sequenceNumber []uint64) (*OnRampCCIPMessageSentIterator, error) + + WatchCCIPMessageSent(opts *bind.WatchOpts, sink chan<- *OnRampCCIPMessageSent, destChainSelector []uint64, sequenceNumber []uint64) (event.Subscription, error) + + ParseCCIPMessageSent(log types.Log) (*OnRampCCIPMessageSent, error) + + FilterConfigSet(opts *bind.FilterOpts) (*OnRampConfigSetIterator, error) + + WatchConfigSet(opts *bind.WatchOpts, sink chan<- *OnRampConfigSet) (event.Subscription, error) + + ParseConfigSet(log types.Log) (*OnRampConfigSet, error) + + FilterDestChainConfigSet(opts *bind.FilterOpts, destChainSelector []uint64) (*OnRampDestChainConfigSetIterator, error) + + WatchDestChainConfigSet(opts *bind.WatchOpts, sink chan<- *OnRampDestChainConfigSet, destChainSelector []uint64) (event.Subscription, error) + + ParseDestChainConfigSet(log types.Log) (*OnRampDestChainConfigSet, error) + + FilterFeeTokenWithdrawn(opts *bind.FilterOpts, feeAggregator []common.Address, feeToken []common.Address) (*OnRampFeeTokenWithdrawnIterator, error) + + WatchFeeTokenWithdrawn(opts *bind.WatchOpts, sink chan<- *OnRampFeeTokenWithdrawn, feeAggregator []common.Address, feeToken []common.Address) (event.Subscription, error) + + ParseFeeTokenWithdrawn(log types.Log) (*OnRampFeeTokenWithdrawn, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OnRampOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OnRampOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*OnRampOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OnRampOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OnRampOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*OnRampOwnershipTransferred, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var OnRampZKBin string = ("0x0004000000000002001c0000000000020000006004100270000005150340019700030000003103550002000000010355000005150040019d0000000100200190000000280000c13d0000008002000039000000400020043f000000040030008c000000490000413d000000000201043b000000e0022002700000052d0020009c000000540000a13d0000052e0020009c000000cd0000a13d0000052f0020009c000001bc0000a13d000005300020009c000006760000613d000005310020009c0000040b0000613d000005320020009c000000490000c13d000000240030008c000000490000413d0000000002000416000000000002004b000000490000c13d0000000401100370000000000101043b000005190010009c000000490000213d0000054501000041000000800010043f000005460100004100001452000104300000010004000039000000400040043f0000000002000416000000000002004b000000490000c13d0000001f0230003900000516022001970000010002200039000000400020043f0000001f0530018f000005170630019800000100026000390000003a0000613d000000000701034f000000007807043c0000000004840436000000000024004b000000360000c13d000000000005004b000000470000613d000000000161034f0000000304500210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000001400030008c0000004b0000813d00000000010000190000145200010430000000400800043d000005180080009c000000700000a13d0000057101000041000000000010043f0000004101000039000000040010043f000005510100004100001452000104300000053a0020009c000000f00000213d000005400020009c000001290000213d000005430020009c000004200000613d000005440020009c000000490000c13d0000000001000416000000000001004b000000490000c13d000000c001000039000000400010043f0000001001000039000000800010043f0000058901000041000000a00010043f0000002001000039000000c00010043f0000008001000039000000e002000039145011de0000040f000000c00110008a000005150010009c000005150100804100000060011002100000058a011001c7000014510001042e0000008001800039000000400010043f000001000100043d000005190010009c000000490000213d0000000007180436000001200100043d0000051a0010009c000000490000213d0000000000170435000001400100043d0000051a0010009c000000490000213d00000040098000390000000000190435000001600100043d0000051a0010009c000000490000213d000000600a80003900000000001a0435000000400100043d0000051b0010009c0000004e0000213d000000a002100039000000400020043f000001800200043d0000051a0020009c000000490000213d0000000002210436000001a00400043d000000000004004b0000000005000039000000010500c039000000000054004b000000490000c13d0000000000420435000001c00500043d0000051a0050009c000000490000213d00000040041000390000000000540435000001e00600043d0000051a0060009c000000490000213d00000060051000390000000000650435000002000b00043d0000051a00b0009c000000490000213d0000008006100039001400000006001d0000000000b60435000002200b00043d0000051900b0009c000000490000213d00000100033000390000011f06b00039000000000036004b000000490000813d0000010006b00039000000000d0604330000051900d0009c0000004e0000213d0000000506d002100000003f066000390000051c06600197000000400e00043d000000000c6e001900100000000e001d0000000000ec004b000000000600003900000001060040390000051900c0009c0000004e0000213d00000001006001900000004e0000c13d0000004000c0043f00000010060000290000000006d60436000f00000006001d000001200bb000390000006006d000c9000000000cb6001900000000003c004b000000490000213d00000000000d004b00000cbd0000c13d0000000003000411000000000003004b00000cde0000c13d000000400100043d0000052c0200004100000c170000013d000005350020009c000001050000213d000005380020009c000003d90000613d000005390020009c000000490000c13d0000000001000416000000000001004b000000490000c13d000000000100041a0000051a021001970000000006000411000000000026004b000006d60000c13d0000000102000039000000000302041a0000051f04300197000000000464019f000000000042041b0000051f01100197000000000010041b00000000010004140000051a05300197000005150010009c0000051501008041000000c00110021000000548011001c70000800d0200003900000003030000390000057504000041145014460000040f0000000100200190000000490000613d0000000001000019000014510001042e0000053b0020009c0000019d0000213d0000053e0020009c0000045e0000613d0000053f0020009c000000490000c13d000000440030008c000000490000413d0000000002000416000000000002004b000000490000c13d0000000402100370000000000202043b000005190020009c000000490000213d0000002401100370000000000101043b0000051a0010009c000000490000213d145013330000040f000006df0000013d000005360020009c000004020000613d000005370020009c000000490000c13d000000240030008c000000490000413d0000000002000416000000000002004b000000490000c13d0000000401100370000000000101043b000005190010009c000000490000213d000000000010043f0000000601000039000000200010043f0000000001000414000005150010009c0000051501008041000000c00110021000000523011001c700008010020000391450144b0000040f0000000100200190000000490000613d000000000101043b000000000101041a0000051901100197000005190010009c000006de0000c13d0000057101000041000000000010043f0000001101000039000000040010043f00000551010000410000145200010430000005410020009c0000051d0000613d000005420020009c000000490000c13d000000240030008c000000490000413d0000000002000416000000000002004b000000490000c13d0000000402100370000000000202043b000005190020009c000000490000213d0000002304200039000000000034004b000000490000813d0000000404200039000000000441034f000000000504043b000005190050009c0000004e0000213d00000005045002100000003f044000390000051c04400197000005180040009c0000004e0000213d0000008004400039000000400040043f000000800050043f000000240220003900000060045000c90000000004240019000000000034004b000000490000213d000000000005004b000007810000c13d0000000101000039000000000101041a0000051a011001970000000002000411000000000012004b000007aa0000c13d000000800100043d000000000001004b000000ee0000613d001400000000001d00000014010000290000000501100210000000a0011000390000000001010433001300000001001d0000000021010434001200000002001d000005190110019800000db90000613d001100000001001d000000000010043f0000000601000039000000200010043f0000000001000414000005150010009c0000051501008041000000c00110021000000523011001c700008010020000391450144b0000040f0000000100200190000000490000613d0000001202000029000000000202043300000048032002100000052403300197000000000101043b000000000401041a0000052505400197000000000335019f000000130500002900000040055000390000000005050433000000000005004b0000000005000019000005260500c041000000000353019f000000000031041b0000000001000039000000010100c039000000400300043d000000400530003900000000001504350000051a012001970000002002300039000000000012043500000519014001970000000000130435000005150030009c000005150300804100000040013002100000000002000414000005150020009c0000051502008041000000c002200210000000000112019f00000527011001c70000800d02000039000000020300003900000528040000410000001105000029145014460000040f0000000100200190000000490000613d0000001402000029001400010020003d000000800100043d000000140010006b000001570000413d000000ee0000013d0000053c0020009c000005500000613d0000053d0020009c000000490000c13d000000240030008c000000490000413d0000000002000416000000000002004b000000490000c13d0000000401100370000000000101043b000005190010009c000000490000213d000000000010043f0000000601000039000000200010043f00000040020000390000000001000019145014180000040f000000000101041a0000051902100197000000800020043f0000054f001001980000000002000039000000010200c039000000a00020043f00000048011002700000051a01100197000000c00010043f0000057701000041000014510001042e000005330020009c000006a80000613d000005340020009c000000490000c13d000000240030008c000000490000413d0000000002000416000000000002004b000000490000c13d0000000402100370000000000202043b000900000002001d000005190020009c000000490000213d00000009020000290000002302200039000000000032004b000000490000813d00000009020000290000000402200039000000000121034f000000000101043b000800000001001d000005190010009c000000490000213d0000000901000029000a00240010003d000000080100002900000005011002100000000a01100029000000000031004b000000490000213d0000000101000039000000000101041a0000051a021001970000000001000411000000000021004b000001e70000613d0000000502000039000000000202041a0000051a02200197000000000021004b000007a60000c13d000000080000006b000000ee0000613d000b00000000001d000002040000013d0000000001230049000005150010009c00000515010080410000006001100210000005150020009c00000515020080410000004002200210000000000121019f0000000002000414000005150020009c0000051502008041000000c002200210000000000121019f00000548011001c70000800d0200003900000002030000390000057204000041145014460000040f0000000100200190000000490000613d0000000b020000290000000102200039000b00000002001d000000080020006c000000ee0000813d0000000b0100002900000005011002100000000a021000290000000201000367000000000221034f000000000302043b0000000002000031000000090420006a000000a30440008a00000559054001970000055906300197000000000756013f000000000056004b00000000050000190000055905004041000000000043004b00000000040000190000055904008041000005590070009c000000000504c019000000000005004b000000490000c13d0000000a0330002900000000043200490000051d0040009c000000490000213d000000800040008c000000490000413d000000400400043d000c00000004001d000005180040009c0000004e0000213d0000000c040000290000008004400039000000400040043f000000000431034f000000000404043b000005190040009c000000490000213d0000000c05000029000000000c4504360000002004300039000000000541034f000000000505043b000000000005004b0000000006000039000000010600c039000000000065004b000000490000c13d00000000005c04350000002005400039000000000451034f000000000404043b000005190040009c000000490000213d00000000073400190000001f04700039000000000024004b0000000006000019000005590600804100000559084001970000055904200197000000000948013f000000000048004b00000000080000190000055908004041000005590090009c000000000806c019000000000008004b000000490000c13d000000000671034f000000000806043b000005190080009c0000004e0000213d00000005098002100000003f069000390000051c0a600197000000400600043d000000000aa6001900000000006a004b000000000b000039000000010b0040390000051900a0009c0000004e0000213d0000000100b001900000004e0000c13d0000004000a0043f000000000086043500000020077000390000000008790019000000000028004b000000490000213d000000000087004b0000026c0000813d0000000009060019000000000a71034f000000000a0a043b0000051a00a0009c000000490000213d00000020099000390000000000a904350000002007700039000000000087004b000002630000413d0000000c070000290000004007700039001000000007001d00000000006704350000002005500039000000000551034f000000000505043b000005190050009c000000490000213d00000000053500190000001f03500039000000000023004b000000000600001900000559060080410000055903300197000000000743013f000000000043004b00000000030000190000055903004041000005590070009c000000000306c019000000000003004b000000490000c13d000000000351034f000000000403043b000005190040009c0000004e0000213d00000005064002100000003f036000390000051c07300197000000400300043d0000000007730019000000000037004b00000000080000390000000108004039000005190070009c0000004e0000213d00000001008001900000004e0000c13d000000400070043f000000000043043500000020045000390000000005460019000000000025004b000000490000213d000000000054004b000002a50000813d0000000002030019000000000641034f000000000606043b0000051a0060009c000000490000213d000000200220003900000000006204350000002004400039000000000054004b0000029c0000413d0000000c010000290000006002100039000f00000002001d000000000032043500000000010104330000051901100197000000000010043f0000000601000039000000200010043f0000000001000414000005150010009c0000051501008041000000c00110021000000523011001c7000080100200003900140000000c001d1450144b0000040f00000014030000290000000100200190000000490000613d000000000201043b000000000102041a0000056d011001970000000003030433000000000003004b00000526040000410000000004006019000000000141019f000000000012041b000000100100002900000000010104330000000004010433000000000004004b001400020020003d0000033c0000613d000000000003004b00000c1d0000613d001300010020003d0000000003000019000002d40000013d00000012030000290000000103300039000000100100002900000000010104330000000002010433000000000023004b000003140000813d001200000003001d00000005023002100000000001210019000000200110003900000000010104330000051a0110019800000c1d0000613d001100000001001d000000000010043f0000001401000029000000200010043f0000000001000414000005150010009c0000051501008041000000c00110021000000523011001c700008010020000391450144b0000040f0000000100200190000000490000613d000000000101043b000000000101041a000000000001004b000002cd0000c13d0000001302000029000000000102041a000005190010009c0000004e0000213d000e00000001001d0000000101100039000000000012041b000000000020043f0000000001000414000005150010009c0000051501008041000000c0011002100000056e011001c700008010020000391450144b0000040f0000000100200190000000490000613d000000000101043b0000000e011000290000001102000029000000000021041b0000001301000029000000000101041a000e00000001001d000000000020043f0000001401000029000000200010043f0000000001000414000005150010009c0000051501008041000000c00110021000000523011001c700008010020000391450144b0000040f0000000100200190000000490000613d000000000101043b0000000e02000029000000000021041b000002cd0000013d0000000c020000290000000005020433000000400200043d000000200300003900000000033204360000000004010433000000000043043500000040032000390000051905500197000000000004004b000003270000613d0000000006000019000000200110003900000000070104330000051a0770019700000000037304360000000106600039000000000046004b000003200000413d0000000001230049000005150010009c00000515010080410000006001100210000005150020009c00000515020080410000004002200210000000000121019f0000000002000414000005150020009c0000051502008041000000c002200210000000000121019f00000548011001c70000800d0200003900000002030000390000056f04000041145014460000040f00000001002001900000033d0000c13d000000490000013d001300010020003d0000000f0100002900000000010104330000000002010433000000000002004b000001ff0000613d00000000030000190000034d0000013d000000000101043b000000000001041b000000110300002900000001033000390000000f0100002900000000010104330000000002010433000000000023004b000003c30000813d001100000003001d00000005023002100000000001210019000000200110003900000000010104330000051a01100197001000000001001d000000000010043f0000001401000029000000200010043f0000000001000414000005150010009c0000051501008041000000c00110021000000523011001c700008010020000391450144b0000040f0000000100200190000000490000613d000000000101043b000000000201041a000000000002004b000003460000613d0000001301000029000000000301041a000000000003004b000001230000613d000000000032004b001200000002001d000003a40000613d000e00000003001d000000000010043f0000000001000414000005150010009c0000051501008041000000c0011002100000056e011001c700008010020000391450144b0000040f0000000100200190000000490000613d0000001202000029000d000100200092000000000101043b0000001303000029000000000203041a0000000d0020006c0000119e0000a13d0000000e02000029000000010220008a0000000001120019000000000101041a000e00000001001d000000000030043f0000000001000414000005150010009c0000051501008041000000c0011002100000056e011001c700008010020000391450144b0000040f0000000100200190000000490000613d000000000101043b0000000d011000290000000e02000029000000000021041b000000000020043f0000001401000029000000200010043f0000000001000414000005150010009c0000051501008041000000c00110021000000523011001c700008010020000391450144b0000040f0000000100200190000000490000613d000000000101043b0000001202000029000000000021041b0000001301000029000000000201041a001200000002001d000000000002004b00000caa0000613d000000000010043f0000000001000414000005150010009c0000051501008041000000c0011002100000056e011001c700008010020000391450144b0000040f0000000100200190000000490000613d0000001202000029000000010220008a000000000101043b0000000001210019000000000001041b0000001301000029000000000021041b0000001001000029000000000010043f0000001401000029000000200010043f0000000001000414000005150010009c0000051501008041000000c00110021000000523011001c700008010020000391450144b0000040f0000000100200190000003440000c13d000000490000013d000000000002004b000001ff0000613d0000000c020000290000000005020433000000400200043d000000200300003900000000033204360000000004010433000000000043043500000040032000390000051905500197000000000004004b000001eb0000613d0000000006000019000000200110003900000000070104330000051a0770019700000000037304360000000106600039000000000046004b000003d10000413d000001eb0000013d0000000001000416000000000001004b000000490000c13d0000012001000039000000400010043f000000800000043f000000a00000043f000000c00000043f000000e00000043f000001000000043f145011c10000040f0000000201000039000000000101041a0000051a02100197000001200020043f0000054b001001980000000001000039000000010100c039000001400010043f0000000301000039000000000101041a0000051a01100197000001600010043f0000000401000039000000000101041a0000051a01100197000001800010043f0000000501000039000000000101041a0000051a01100197000001a00010043f000000400200043d001400000002001d0000012001000039145011f00000040f0000001401000029000005150010009c0000051501008041000000400110021000000576011001c7000014510001042e0000000001000416000000000001004b000000490000c13d0000000101000039000000000101041a0000051a01100197000000800010043f0000057301000041000014510001042e000000240030008c000000490000413d0000000002000416000000000002004b000000490000c13d0000000401100370000000000601043b0000051a0060009c000000490000213d0000000101000039000000000101041a0000051a011001970000000005000411000000000015004b000006da0000c13d000000000056004b000006e60000c13d0000054a01000041000000800010043f000005460100004100001452000104300000000001000416000000000001004b000000490000c13d000000800000043f000000a00000043f000000c00000043f000000e00000043f0000018001000039000000400010043f0000000001000412001c00000001001d001b00000000003d0000800501000039000000440300003900000000040004150000001c0440008a000000050440021000000557020000411450142d0000040f0000051901100197000001000010043f0000000001000412001a00000001001d001900200000003d00000000040004150000001a0440008a00000005044002100000800501000039000005570200004100000044030000391450142d0000040f0000051a01100197000001200010043f0000000001000412001800000001001d001700400000003d0000000004000415000000180440008a00000005044002100000800501000039000005570200004100000044030000391450142d0000040f0000051a01100197000001400010043f0000000001000412001600000001001d001500600000003d0000000004000415000000160440008a00000005044002100000800501000039000005570200004100000044030000391450142d0000040f0000051a01100197000001600010043f00000100010000390000018002000039145011b00000040f0000058b01000041000014510001042e000000a40030008c000000490000413d0000000002000416000000000002004b000000490000c13d0000012002000039000000400020043f0000000402100370000000000202043b0000051a0020009c000000490000213d000000800020043f0000002403100370000000000503043b000000000005004b0000000003000039000000010300c039000000000035004b000000490000c13d000000a00050043f0000004403100370000000000303043b0000051a0030009c000000490000213d000000c00030043f0000006404100370000000000404043b0000051a0040009c000000490000213d000000e00040043f0000008401100370000000000101043b0000051a0010009c000000490000213d000001000010043f0000000106000039000000000606041a0000051a066001970000000007000411000000000067004b00000bb50000c13d000000000005004b00000bd90000c13d000000000002004b00000bd90000613d000000000004004b00000bd90000613d0000051a011001970000000205000039000000000605041a0000052006600197000000000226019f000000000025041b0000000302000039000000000502041a0000051f05500197000000000335019f000000000032041b0000000402000039000000000302041a0000051f03300197000000000343019f000000000032041b0000000502000039000000000302041a0000051f03300197000000000113019f000000000012041b000001a001000039000000400010043f000005570100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000005150010009c0000051501008041000000c00110021000000558011001c700008005020000391450144b0000040f00000001002001900000119d0000613d000000000101043b0000051901100197000001200010043f0000055701000041000000000010044300000000010004120000000400100443000000200100003900000024001004430000000001000414000005150010009c0000051501008041000000c00110021000000558011001c700008005020000391450144b0000040f00000001002001900000119d0000613d000000000101043b0000051a01100197000001400010043f0000055701000041000000000010044300000000010004120000000400100443000000400100003900000024001004430000000001000414000005150010009c0000051501008041000000c00110021000000558011001c700008005020000391450144b0000040f00000001002001900000119d0000613d000000000101043b0000051a01100197000001600010043f0000055701000041000000000010044300000000010004120000000400100443000000600100003900000024001004430000000001000414000005150010009c0000051501008041000000c00110021000000558011001c700008005020000391450144b0000040f00000001002001900000119d0000613d000000000101043b0000051a01100197000001800010043f000001200100043d0000051902100197000000400100043d0000000002210436000001400300043d0000051a033001970000000000320435000001600200043d0000051a0220019700000040031000390000000000230435000001800200043d0000051a0220019700000060031000390000000000230435000000800200043d0000051a0220019700000080031000390000000000230435000000a00200043d000000000002004b0000000002000039000000010200c039000000a0031000390000000000230435000000c00200043d0000051a02200197000000c0031000390000000000230435000000e00200043d0000051a02200197000000e0031000390000000000230435000001000200043d0000051a0220019700000100031000390000000000230435000005150010009c000005150100804100000040011002100000000002000414000005150020009c0000051502008041000000c002200210000000000112019f00000521011001c70000800d0200003900000001030000390000052204000041000000eb0000013d000000440030008c000000490000413d0000000002000416000000000002004b000000490000c13d0000000402100370000000000202043b001400000002001d000005190020009c000000490000213d0000002401100370000000000101043b001300000001001d000005190010009c000000490000213d000000130130006a0000051d0010009c000000490000213d000000a40010008c000000490000413d0000058401000041000000800010043f000000140100002900000080011002100000058501100197000000840010043f0000055701000041000000000010044300000000010004120000000400100443000000200100003900000024001004430000000001000414000005150010009c0000051501008041000000c00110021000000558011001c700008005020000391450144b0000040f00000001002001900000119d0000613d000000000201043b00000000010004140000051a02200197000000040020008c000006f30000c13d0000000103000031000000200030008c00000020040000390000000004034019000007180000013d000000240030008c000000490000413d0000000002000416000000000002004b000000490000c13d0000000402100370000000000202043b000005190020009c000000490000213d0000002304200039000000000034004b000000490000813d0000000404200039000000000141034f000000000101043b001000000001001d000005190010009c000000490000213d000f00240020003d000000100100002900000005011002100000000f01100029000000000031004b000000490000213d000000100000006b000000ee0000613d0000000401000039000000000101041a0012051a0010019b001400000000001d000005870000013d000000400100043d0000000000a10435000005150010009c000005150100804100000040011002100000000002000414000005150020009c0000051502008041000000c002200210000000000121019f0000056e011001c70000800d0200003900000003030000390000057f0400004100000012050000290000000006090019145014460000040f0000000100200190000000490000613d00000014020000290000000102200039001400000002001d000000100020006c000000ee0000813d000000140100002900000005011002100000000f011000290000000201100367000000000901043b0000051a0090009c000000490000213d000000400a00043d000005780100004100000000001a04350000000401a00039000000000200041000000000002104350000000001000414000000040090008c001300000009001d0000059d0000c13d0000000103000031000000200030008c00000020040000390000000004034019000005ca0000013d0000051500a0009c000005150200004100000000020a40190000004002200210000005150010009c0000051501008041000000c001100210000000000121019f00000551011001c7000000000209001900110000000a001d1450144b0000040f000000110a00002900000060031002700000051503300197000000200030008c00000020040000390000000004034019000000200640019000000000056a0019000005b80000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000058004b000005b40000c13d0000001f07400190000005c50000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000000130900002900000c400000613d0000001f01400039000000600210018f0000000001a20019000000000021004b00000000020000390000000102004039000005190010009c0000004e0000213d00000001002001900000004e0000c13d000000400010043f000000200040008c000000490000413d000000000a0a043300000000000a004b000005820000613d00000044021000390000000000a2043500000020041000390000057902000041000000000024043500000024021000390000001205000029000000000052043500000044020000390000000000210435000005180010009c0000004e0000213d000000800b1000390000004000b0043f000005610010009c0000004e0000213d000000c002100039000000400020043f000000200200003900000000002b0435000000a0021000390000057a05000041000000000052043500000000050104330000000001000414000000040090008c00000001020000390000060c0000613d000005150040009c00000515040080410000004002400210000005150050009c00000515050080410000006003500210000000000223019f000005150010009c0000051501008041000000c001100210000000000112019f000000000209001900110000000a001d000e0000000b001d145014460000040f0000000e0b000029000000110a000029000000130900002900030000000103550000006001100270000105150010019d0000051503100197000000000003004b000000800c000039000000600d000039000006380000613d000005190030009c0000004e0000213d0000001f013000390000058c011001970000003f011000390000058c01100197000000400d00043d00000000011d00190000000000d1004b00000000040000390000000104004039000005190010009c0000004e0000213d00000001004001900000004e0000c13d000000400010043f000000000c3d04360000058c0430019800000000014c001900000003050003670000062b0000613d000000000605034f00000000070c0019000000006806043c0000000007870436000000000017004b000006270000c13d0000001f03300190000006380000613d000000000445034f0000000303300210000000000501043300000000053501cf000000000535022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000353019f000000000031043500000000030d0433000000010020019000000c2a0000613d000000000003004b000006560000c13d000e0000000d001d000d0000000c001d00110000000a001d0000055301000041000000000010044300000004009004430000000001000414000005150010009c0000051501008041000000c00110021000000554011001c700008002020000391450144b0000040f00000001002001900000119d0000613d000000000101043b000000000001004b0000000e0100002900000c990000613d0000000003010433000000000003004b0000001309000029000000110a0000290000000d0c0000290000056f0000613d0000051d0030009c000000490000213d000000200030008c000000490000413d00000000020c0433000000000002004b0000000001000039000000010100c039000000000012004b000000490000c13d000000400100043d000000000002004b000005700000c13d00000064021000390000057c03000041000000000032043500000044021000390000057d03000041000000000032043500000024021000390000002a0300003900000000003204350000057b020000410000000000210435000000040210003900000020030000390000000000320435000005150010009c000005150100804100000040011002100000057e011001c70000145200010430000000840030008c000000490000413d0000000002000416000000000002004b000000490000c13d0000000402100370000000000202043b001400000002001d000005190020009c000000490000213d0000002402100370000000000202043b000005190020009c000000490000213d00000000022300490000051d0020009c000000490000213d000000a40020008c000000490000413d0000006401100370000000000101043b001300000001001d0000051a0010009c000000490000213d0000000202000039000000000102041a0000054b001001980000073c0000c13d0000054d011001970000054e011001c7000000000012041b0000001401000029000000000010043f0000000601000039000000200010043f0000000001000414000005150010009c0000051501008041000000c00110021000000523011001c700008010020000391450144b0000040f0000000100200190000000490000613d000000000201043b000000130000006b000007ad0000c13d000000400100043d0000056b0200004100000c170000013d000000240030008c000000490000413d0000000002000416000000000002004b000000490000c13d0000000401100370000000000101043b000005190010009c000000490000213d000000000010043f0000000601000039000000200010043f0000000001000414000005150010009c0000051501008041000000c00110021000000523011001c700008010020000391450144b0000040f0000000100200190000000490000613d000000000101043b000000000201041a001300000002001d0000000101100039000000000301041a000000400200043d001400000002001d001100000003001d0000000002320436001200000002001d000000000010043f0000000001000414000005150010009c0000051501008041000000c0011002100000056e011001c700008010020000391450144b0000040f0000000100200190000000490000613d0000001105000029000000000005004b000007400000c13d0000001204000029000007490000013d0000057401000041000000800010043f000005460100004100001452000104300000054701000041000000800010043f000005460100004100001452000104300000000101100039000000400200043d0000000000120435000005150020009c0000051502008041000000400120021000000564011001c7000014510001042e000000000100041a0000051f01100197000000000161019f000000000010041b0000000001000414000005150010009c0000051501008041000000c00110021000000548011001c70000800d0200003900000003030000390000054904000041000000eb0000013d000005150010009c0000051501008041000000c00110021000000586011001c71450144b0000040f00000060031002700000051503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000007070000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b000007030000c13d000000000006004b000007140000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000007630000613d0000001f01400039000000600110018f00000080021001bf001200000002001d000000400020043f000000200030008c000000490000413d000000800200043d000000000002004b0000000003000039000000010300c039000000000032004b000000490000c13d00000084011001bf000000000002004b00000bb90000c13d0000000202000039000000000202041a001100000002001d000005880200004100000012030000290000000000230435000000130200002900000004032000390000001402000029145012160000040f000000000300041400000011020000290000051a02200197000000040020008c00000bdd0000c13d0000000103000031000000200030008c0000002004000039000000000403401900000c090000013d0000054c01000041000000800010043f00000546010000410000145200010430000000000101043b00000000020000190000001204000029000000000301041a000000000434043600000001011000390000000102200039000000000052004b000007430000413d00000014010000290000000002140049145011cc0000040f000000400300043d001200000003001d00000020013000390000004002000039000000000021043500000013010000290000054f001001980000000001000039000000010100c039000000000013043500000040023000390000001401000029145012080000040f00000012020000290000000001210049000005150010009c0000051501008041000005150020009c000005150200804100000060011002100000004002200210000000000121019f000014510001042e0000001f0530018f0000051706300198000000400200043d00000000046200190000076e0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000076a0000c13d000000000005004b0000077b0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000005150020009c00000515020080410000004002200210000000000112019f0000145200010430000000a00500003900000000062300490000051d0060009c000000490000213d000000600060008c000000490000413d000000400600043d0000051e0060009c0000004e0000213d0000006007600039000000400070043f000000000721034f000000000707043b000005190070009c000000490000213d00000000087604360000002007200039000000000971034f000000000909043b0000051a0090009c000000490000213d00000000009804350000002007700039000000000771034f000000000707043b000000000007004b0000000008000039000000010800c039000000000087004b000000490000c13d0000004008600039000000000078043500000000056504360000006002200039000000000042004b000007820000413d0000014d0000013d0000056c01000041000000800010043f00000546010000410000145200010430000000400100043d000005470200004100000c170000013d000000000102041a001200000001001d0000054f00100198001100000002001d00000bc10000c13d000000120100002900000048011002700000051a011001970000000002000411000000000012004b00000c150000c13d0000000301000039000000000101041a0012051a0010019c00000c580000c13d0000001101000029000000000101041a0000051902100197000005190020009c000001230000613d00000556021001970000000101100039001005190010019b00000010012001af0000001102000029000000000012041b000000400100043d001200000001001d0000051b0010009c0000004e0000213d0000001202000029000000a001200039000000400010043f0000000001020436001100000001001d000005570100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000005150010009c0000051501008041000000c00110021000000558011001c700008005020000391450144b0000040f00000001002001900000119d0000613d000000000101043b00000012040000290000006002400039000000100300002900000000003204350000004002400039000000140300002900000000003204350000051901100197000000110200002900000000001204350000008001400039000000000001043500000002020003670000002401200370000000000301043b0000002404300039000000000142034f000000000801043b0000000405300039000000000100003100000000065100490000001f0660008a00000559076001970000055909800197000000000a79013f000000000079004b00000000090000190000055909004041000000000068004b000000000b000019000005590b0080410000055900a0009c00000000090bc019000000000009004b000000490000c13d0000000008580019000000000982034f000000000b09043b0000051900b0009c000000490000213d0000000009b10049000000200f8000390000055908900197000005590af00197000000000c8a013f00000000008a004b0000000008000019000005590800404100000000009f004b000000000900001900000559090020410000055900c0009c000000000809c019000000000008004b000000490000c13d000000200440008a000000000842034f000000000808043b0000055909800197000000000a79013f000000000079004b00000000090000190000055909004041000000000068004b000000000c000019000005590c0080410000055900a0009c00000000090cc019000000000009004b000000490000c13d0000000009580019000000000892034f000000000808043b000005190080009c000000490000213d000000000a810049000000200e9000390000055909a00197000005590ce00197000000000d9c013f00000000009c004b000000000900001900000559090040410000000000ae004b000000000a000019000005590a0020410000055900d0009c00000000090ac019000000000009004b000000490000c13d0000006004400039000000000942034f000000000909043b001100000009001d0000051a0090009c000000490000213d000000200440008a000000000442034f000000000404043b001005590040019b000000100a70014f000000100070006b00000000070000190000055907004041000000000064004b000000000600001900000559060080410000055900a0009c000000000706c019000000000007004b000000490000c13d0000000005540019000000000652034f000000000606043b000f00000006001d000005190060009c000000490000213d0000000f06000029000e0006006002180000000e0610006a00000020055000390000055907600197000005590a500197000000000c7a013f00000000007a004b00000000070000190000055907004041000000000065004b000000000600001900000559060020410000055900c0009c000000000706c019000000000007004b000000490000c13d0000000f06000029000000050c6002100000003f06c00039000b051c0060019b000000400700043d0000000b06700029000d00000007001d000000000076004b00000000070000390000000107004039000005190060009c0000004e0000213d00000001007001900000004e0000c13d000000400060043f0000000f060000290000000d070000290000000007670436000000000006004b0000088e0000613d000000600d0000390000000006000019000000400a00043d0000051b00a0009c0000004e0000213d000000a009a00039000000400090043f0000008009a000390000000000d904350000004009a000390000000000d904350000002009a000390000000000d904350000006009a00039000000000009043500000000000a043500000000096700190000000000a9043500000020066000390000000000c6004b0000087b0000413d000000400600043d000800000006001d0000055a0060009c0000004e0000213d00000008070000290000012006700039000000400060043f00000012060000290000000006670436000700000006001d000000130700002900000000007604350000001f06b000390000058c066001970000003f066000390000058c06600197000000400c00043d00000000066c00190000000000c6004b00000000070000390000000107004039000005190060009c0000004e0000213d00000001007001900000004e0000c13d000000400060043f0000000006bc0436001200000006001d0000000006fb0019000000000016004b000000490000213d000c000000f203530000058c0db001980000001f0fb0018f0000001207d00029000008b80000613d0000000c0a00035f000000120600002900000000a90a043c0000000006960436000000000076004b000008b40000c13d00000000000f004b000008c50000613d0000000c06d0035f0000000309f00210000000000a070433000000000a9a01cf000000000a9a022f000000000606043b0000010009900089000000000696022f00000000069601cf0000000006a6019f00000000006704350000001206b00029000000000006043500000008060000290000004006600039000600000006001d0000000000c604350000001f068000390000058c066001970000003f066000390000058c06600197000000400b00043d00000000066b00190000000000b6004b00000000070000390000000107004039000005190060009c0000004e0000213d00000001007001900000004e0000c13d000000400060043f000000000c8b04360000000006e80019000000000016004b000000490000213d0000000006e2034f0000058c0d8001980000001f0e80018f0000000007dc0019000008e80000613d000000000a06034f000000000f0c001900000000a90a043c000000000f9f043600000000007f004b000008e40000c13d00000000000e004b000008f50000613d0000000006d6034f0000000309e00210000000000a070433000000000a9a01cf000000000a9a022f000000000606043b0000010009900089000000000696022f00000000069601cf0000000006a6019f000000000067043500000000068c0019000000000006043500000008060000290000006006600039000500000006001d0000000000b60435000000400600043d0000055b0060009c0000004e0000213d0000000007310049000000230770008a000000000074004b000000000800001900000559080080410000055907700197000000100970014f000000100070006b00000000070000190000055907004041000005590090009c000000000708c0190000002008600039000000400080043f000000000006043500000011080000290000051a088001970000000809000029000000a00a90003900030000000a001d00000000008a04350000008008900039000400000008001d00000000006804350000004406200370000000000606043b0000010008900039000c00000008001d0000000d0a0000290000000000a80435000000c008900039000100000008001d0000000000680435000000e006900039000200000006001d0000000000060435000000000007004b000000490000c13d000000400700043d0000000b06700029000b00000007001d000000000076004b00000000070000390000000107004039000005190060009c0000004e0000213d00000001007001900000004e0000c13d000000400060043f0000000b060000290000000f070000290000000006760436000d00000006001d0000000e06500029000000000016004b000000490000213d000000000065004b000009500000813d0000000d0700002900000000085100490000051d0080009c000000490000213d000000400080008c000000490000413d000000400800043d0000055c0080009c0000004e0000213d0000004009800039000000400090043f000000000952034f000000000909043b0000051a0090009c000000490000213d0000000009980436000000200a500039000000000aa2034f000000000a0a043b0000000000a9043500000000078704360000004005500039000000000065004b000009390000413d00000013050000290009051a0050019b0000001405000029000a05190050019b001300000000001d00000004053000390000000006450019000000000462034f000000000404043b000005190040009c000000490000213d000000060740021000000000077100490000002006600039000000000076004b0000000008000019000005590800204100000559077001970000055906600197000000000976013f000000000076004b00000000060000190000055906004041000005590090009c000000000608c019000000000006004b000000490000c13d000000130040006b00000dc60000813d0000000b040000290000000004040433000000130040006c0000119e0000a13d0000000004310049000000000352034f000000000303043b000000230440008a00000559064001970000055907300197000000000867013f000000000067004b00000000060000190000055906004041000000000043004b00000000040000190000055904008041000005590080009c000000000604c019000000000006004b000000490000c13d00000013040000290000000506400210000e00000006001d0000000d046000290000000004040433001100000004001d0000000004530019000000000342034f000000000303043b000005190030009c000000490000213d0000000006310049000000200540003900000559046001970000055907500197000000000847013f000000000047004b00000000040000190000055904004041000000000065004b00000000060000190000055906002041000005590080009c000000000406c019000000000004004b000000490000c13d0000001f043000390000058c044001970000003f044000390000058c04400197000000400600043d0000000004460019001000000006001d000000000064004b00000000060000390000000106004039000005190040009c0000004e0000213d00000001006001900000004e0000c13d000000400040043f000000100400002900000000043404360000000006530019000000000016004b000000490000213d000000000252034f0000058c053001980000000001540019000009ba0000613d000000000602034f0000000007040019000000006806043c0000000007870436000000000017004b000009b60000c13d0000001f06300190000009c70000613d000000000252034f0000000305600210000000000601043300000000065601cf000000000656022f000000000202043b0000010005500089000000000252022f00000000025201cf000000000262019f000000000021043500000000013400190000000000010435000000400100043d0000051b0010009c0000004e0000213d000000a002100039000000400020043f0000008002100039000000600300003900000000003204350000004002100039000000000032043500000020021000390000000000320435000000600210003900000000000204350000000000010435000000400100043d001200000001001d00000011010000290000002001100039000f00000001001d0000000001010433000000000001004b00000e4a0000613d0000001101000029000000000101043300000565020000410000001203000029000000000023043500000004023000390000051a0110019700000000001204350000055701000041000000000010044300000000010004120000000400100443000000600100003900000024001004430000000001000414000005150010009c0000051501008041000000c00110021000000558011001c700008005020000391450144b0000040f00000001002001900000119d0000613d000000000201043b00000000010004140000051a02200197000000040020008c00000a010000c13d0000000103000031000000200030008c0000002004000039000000000403401900000a2a0000013d0000001203000029000005150030009c00000515030080410000004003300210000005150010009c0000051501008041000000c001100210000000000131019f00000551011001c71450144b0000040f00000060031002700000051503300197000000200030008c000000200400003900000000040340190000002006400190000000120560002900000a190000613d000000000701034f0000001208000029000000007907043c0000000008980436000000000058004b00000a150000c13d0000001f0740019000000a260000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000e600000613d0000001f01400039000000600110018f0000001202100029000000000012004b00000000010000390000000101004039001400000002001d000005190020009c0000004e0000213d00000001001001900000004e0000c13d0000001401000029000000400010043f000000200030008c000000490000413d00000012010000290000000001010433001200000001001d0000051a0010009c000000490000213d000000120000006b00000e530000613d00000566010000410000001402000029000000000012043500000004012000390000056702000041000000000021043500000000010004140000001202000029000000040020008c000000200400003900000a750000613d0000001402000029000005150020009c00000515020080410000004002200210000005150010009c0000051501008041000000c001100210000000000121019f00000551011001c700000012020000291450144b0000040f00000060031002700000051503300197000000200030008c000000200400003900000000040340190000002006400190000000140560002900000a640000613d000000000701034f0000001408000029000000007907043c0000000008980436000000000058004b00000a600000c13d0000001f0740019000000a710000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000e6c0000613d0000001f01400039000000600110018f0000001404100029000005190040009c0000004e0000213d000000400040043f000000200030008c000000490000413d00000014010000290000000001010433000000000001004b0000000002000039000000010200c039000000000021004b000000490000c13d000000000001004b00000e520000613d0000051b0040009c0000004e0000213d0000000f01000029000000000501043300000011010000290000000001010433000000a002400039000000400020043f0000051a02100197000000800140003900000000002104350000006002400039000000000052043500000040054000390000000906000029000000000065043500000020064000390000000a07000029000000000076043500000010070000290000000000740435000000400900043d0000056807000041000000000079043500000004079000390000002008000039000000000087043500000000040404330000002407900039000000a0080000390000000000870435000000c40890003900000000740404340000000000480435001400000009001d000000e408900039000000000004004b00000ab40000613d0000000009000019000000000a890019000000000b970019000000000b0b04330000000000ba04350000002009900039000000000049004b00000aad0000413d000000000784001900000000000704350000000006060433000005190660019700000014080000290000004407800039000000000067043500000000050504330000051a0550019700000064068000390000000000560435000000000202043300000084058000390000000000250435000000a40280003900000000010104330000051a01100197000000000012043500000000010004140000001202000029000000040020008c00000acc0000c13d000000030100036700000ae30000013d0000001f024000390000058c02200197000000e402200039000005150020009c000005150200804100000060022002100000001403000029000005150030009c00000515030080410000004003300210000000000232019f000005150010009c0000051501008041000000c001100210000000000121019f0000001202000029145014460000040f0000006003100270000105150030019d00000515033001970003000000010355000000010020019000000e780000613d0000058c04300198000000140240002900000aec0000613d000000000501034f0000001406000029000000005705043c0000000006760436000000000026004b00000ae80000c13d0000001f0530019000000af90000613d000000000141034f0000000304500210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000001f013000390000058c021001970000001401200029000000000021004b00000000020000390000000102004039000005190010009c0000004e0000213d00000001002001900000004e0000c13d000000400010043f0000051d0030009c000000490000213d000000200030008c000000490000413d00000014020000290000000002020433000005190020009c000000490000213d00000000042300490000051d0040009c000000490000213d000000400040008c000000490000413d0000055c0010009c0000004e0000213d00000014042000290000004005100039000000400050043f0000000062040434000005190020009c000000490000213d0000000007420019000000140230002900000559032001970000001f087000390000055909800197000000000a39013f000000000039004b00000000090000190000055909004041000000000028004b000000000800001900000559080080410000055900a0009c000000000908c019000000000009004b000000490000c13d0000000087070434000005190070009c0000004e0000213d0000001f097000390000058c099001970000003f099000390000058c099001970000000009590019000005190090009c0000004e0000213d000000400090043f00000000007504350000000009870019000000000029004b000000490000213d0000006009100039000000000007004b00000b430000613d000000000a000019000000000b9a0019000000000c8a0019000000000c0c04330000000000cb0435000000200aa0003900000000007a004b00000b3c0000413d0000000007970019000000000007043500000000055104360000000006060433000005190060009c000000490000213d00000000044600190000001f06400039000000000026004b000000000700001900000559070080410000055906600197000000000836013f000000000036004b00000000030000190000055903004041000005590080009c000000000307c019000000000003004b000000490000c13d0000000064040434000005190040009c0000004e0000213d0000001f034000390000058c033001970000003f033000390000058c07300197000000400300043d0000000007730019000000000037004b00000000080000390000000108004039000005190070009c0000004e0000213d00000001008001900000004e0000c13d000000400070043f00000000074304360000000008640019000000000028004b000000490000213d000000000004004b00000b760000613d000000000200001900000000087200190000000009620019000000000909043300000000009804350000002002200039000000000042004b00000b6f0000413d000000000247001900000000000204350000000000350435000000400200043d0000051b0020009c0000004e0000213d00000000010104330000000f040000290000000004040433000000a005200039000000400050043f00000060052000390000000000450435000000400420003900000000003404350000002003200039000000000013043500000012010000290000000000120435000000400100043d0000055b0010009c0000004e0000213d0000002003100039000000400030043f0000000000010435000000800320003900000000001304350000000c0100002900000000010104330000000003010433000000130030006c0000119e0000a13d0000000e03100029000000200330003900000000002304350000000001010433000000130010006c0000119e0000a13d00000002020003670000002401200370000000000301043b0000004401300039000000000112034f000000000401043b00000000010000310000000005310049000000230550008a00000559065001970000055907400197000000000867013f000000000067004b00000000060000190000055906002041000000000054004b00000000050000190000055905004041000005590080009c000000000605c0190000001305000029001300010050003d000000000006004b000009550000c13d000000490000013d0000054701000041000001200010043f0000058201000041000014520001043000000587020000410000001203000029000000000023043500000014020000290000000000210435000000400130021000000551011001c700001452000104300000001301000029000000000010043f0000000201200039000000200010043f0000000001000414000005150010009c0000051501008041000000c00110021000000523011001c700008010020000391450144b0000040f0000000100200190000000490000613d000000000101043b000000000101041a000000000001004b000007b20000c13d000000400100043d0000055002000041000000000021043500000004021000390000001303000029000000000032043500000dbe0000013d0000052a01000041000001200010043f0000058201000041000014520001043000000012040000290000000001410049000005150010009c000005150100804100000060011002100000004004400210000000000141019f000005150030009c0000051503008041000000c003300210000000000131019f1450144b0000040f00000060031002700000051503300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000120570002900000bf80000613d000000000801034f0000001209000029000000008a08043c0000000009a90436000000000059004b00000bf40000c13d000000000006004b00000c050000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000c4c0000613d0000001f01400039000000600110018f0000001201100029000000400010043f000000200030008c000000490000413d000000120200002900000000020204330000000000210435000000400110021000000564011001c7000014510001042e000000400100043d00000552020000410000000000210435000005150010009c000005150100804100000040011002100000052b011001c700001452000104300000000c010000290000000001010433000000400200043d00000570030000410000000000320435000005190110019700000004032000390000000000130435000005150020009c0000051502008041000000400120021000000551011001c70000145200010430000000000003004b00000c910000c13d00000000010b0019000000400400043d001400000004001d0000057b0200004100000000002404350000000403400039000000200200003900000000002304350000002402400039145011de0000040f00000014020000290000000001210049000005150010009c0000051501008041000005150020009c000005150200804100000060011002100000004002200210000000000121019f00001452000104300000001f0530018f0000051706300198000000400200043d00000000046200190000076e0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000c470000c13d0000076e0000013d0000001f0530018f0000051706300198000000400200043d00000000046200190000076e0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000c530000c13d0000076e0000013d00000553010000410000000000100443000000120100002900000004001004430000000001000414000005150010009c0000051501008041000000c00110021000000554011001c700008002020000391450144b0000040f00000001002001900000119d0000613d000000000101043b000000000001004b000000490000613d000000400200043d0000055501000041000000000012043500000024010000390000000201100367000000000101043b0000000403100039001000000002001d00000004012000390000001402000029145012160000040f00000000020004140000001203000029000000040030008c00000c8b0000613d00000010030000290000000001310049000005150010009c00000515010080410000006001100210000005150030009c00000515030080410000004003300210000000000131019f000005150020009c0000051502008041000000c002200210000000000121019f0000001202000029145014460000040f0000006003100270000105150030019d0003000000010355000000010020019000000cb00000613d0000001001000029000005190010009c0000004e0000213d0000001001000029000000400010043f000007bc0000013d0000051500c0009c000005150c0080410000004002c00210000005150030009c00000515030080410000006001300210000000000121019f0000145200010430000000400100043d00000044021000390000058003000041000000000032043500000024021000390000001d0300003900000000003204350000057b020000410000000000210435000000040210003900000020030000390000000000320435000005150010009c0000051501008041000000400110021000000581011001c700001452000104300000057101000041000000000010043f0000003101000039000000040010043f0000055101000041000014520001043000000515033001970000001f0530018f0000051706300198000000400200043d00000000046200190000076e0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000cb80000c13d0000076e0000013d0000000f0d0000290000000006b300490000051d0060009c000000490000213d000000600060008c000000490000413d000000400e00043d0000051e00e0009c0000004e0000213d0000006006e00039000000400060043f00000000f60b0434000005190060009c000000490000213d00000000066e0436000000000f0f04330000051a00f0009c000000490000213d0000000000f604350000004006b00039000000000f06043300000000000f004b0000000006000039000000010600c03900000000006f004b000000490000c13d0000004006e000390000000000f60435000000000ded0436000000600bb000390000000000cb004b00000cbe0000413d000000c70000013d0000000106000039000000000b06041a0000051f0bb0019700000000033b019f000000000036041b0000000003080433000005190330019800000dc30000613d00000000060704330000051a0060019800000dc30000613d00000000060904330000051a0060019800000dc30000613d00000000060a04330000051a0060019800000dc30000613d000000800030043f00000000060704330000051a07600197000000a00070043f00000000060904330000051a08600197000000c00080043f00000000060a04330000051a09600197000000e00090043f00000000060104330000051a0b60019800000dc30000613d00000000060504330000051a0a60019800000dc30000613d0000000006020433000000000006004b00000dc30000c13d0000000206000039000000000c06041a000005200cc00197000000000bbc019f0000000000b6041b00000000060404330000051a06600197000000030b000039000000000c0b041a0000051f0cc0019700000000066c019f00000000006b041b000000040b00003900000000060b041a0000051f066001970000000006a6019f00000000006b041b000000140600002900000000060604330000051a06600197000000050a000039000000000b0a041a0000051f0bb0019700000000066b019f00000000006a041b000000400a00043d0000051800a0009c0000004e0000213d0000008006a00039000000400060043f0000006006a0003900000000009604350000004009a0003900000000008904350000002008a00039000000000078043500000000003a0435000000400700043d000000000337043600000000080804330000051a08800197000000000083043500000000030904330000051a033001970000004008700039000000000038043500000000030604330000051a033001970000006006700039000000000036043500000000010104330000051a01100197000000800370003900000000001304350000000001020433000000000001004b0000000001000039000000010100c039000000a002700039000000000012043500000000010404330000051a01100197000000c002700039000000000012043500000000010504330000051a01100197000000e0027000390000000000120435000000140100002900000000010104330000051a0110019700000100027000390000000000120435000005150070009c000005150700804100000040017002100000000002000414000005150020009c0000051502008041000000c002200210000000000112019f00000521011001c70000800d0200003900000001030000390000052204000041145014460000040f0000000100200190000000490000613d00000010010000290000000001010433000000000001004b00000da50000613d0000000002000019001200000002001d00000005012002100000000f011000290000000001010433001400000001001d0000000021010434001300000002001d000005190110019800000db90000613d001100000001001d000000000010043f0000000601000039000000200010043f0000000001000414000005150010009c0000051501008041000000c00110021000000523011001c700008010020000391450144b0000040f0000000100200190000000490000613d0000001302000029000000000202043300000048032002100000052403300197000000000101043b000000000401041a0000052505400197000000000335019f000000140500002900000040055000390000000005050433000000000005004b0000000005000019000005260500c041000000000353019f000000000031041b0000000001000039000000010100c039000000400300043d000000400530003900000000001504350000051a012001970000002002300039000000000012043500000519014001970000000000130435000005150030009c000005150300804100000040013002100000000002000414000005150020009c0000051502008041000000c002200210000000000112019f00000527011001c70000800d02000039000000020300003900000528040000410000001105000029145014460000040f0000000100200190000000490000613d0000001202000029000000010220003900000010010000290000000001010433000000000012004b00000d5f0000413d000000800100043d00000140000004430000016000100443000000a00100043d00000020020000390000018000200443000001a000100443000000c00100043d0000004003000039000001c000300443000001e0001004430000006001000039000000e00300043d000002000010044300000220003004430000010000200443000000040100003900000120001004430000052901000041000014510001042e000000400100043d0000058302000041000000000021043500000004021000390000000000020435000005150010009c0000051501008041000000400110021000000551011001c70000145200010430000000400100043d0000052a0200004100000c170000013d0000006407300039000000000672034f0000000204000039000000000404041a000000000606043b0000051a0060009c000000490000213d00000000083100490000002003700039000000000332034f000000000303043b000000230780008a00000559087001970000055909300197000000000a89013f000000000089004b00000000080000190000055908004041000000000073004b000000000700001900000559070080410000055900a0009c000000000807c019000000000008004b000000490000c13d0000000005530019000000000352034f000000000303043b000005190030009c000000490000213d0000000001310049000000200550003900000559071001970000055908500197000000000978013f000000000078004b00000000070000190000055907004041000000000015004b00000000010000190000055901002041000005590090009c000000000701c019000000000007004b000000490000c13d0000000c010000290000000001010433000000400900043d000000240790003900000000006704350000055d060000410000000006690436001100000006001d00000004069000390000000a0700002900000000007604350000004406200370000000000606043b0000006407900039000000c008000039000000000087043500000044079000390000000000670435000000000652034f000000c40290003900000000003204350000058c073001980000001f0830018f001400000009001d000000e402900039000000000572001900000e140000613d000000000906034f000000000a020019000000009b09043c000000000aba043600000000005a004b00000e100000c13d000000000008004b00000e210000613d000000000676034f0000000307800210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f00000000006504350013051a0040019b000000000432001900000000000404350000001f033000390000058c03300197000000e0043000390000001405000029000000840550003900000000004504350000000002320019145013b80000040f0000001403000029000000a4023000390000000003310049000000040330008a00000000003204350000000b0200002900000000020204330000000001210436000000000002004b00000e430000613d00000000030000190000000d050000290000000054050434000d00000005001d00000000540404340000051a0440019700000000044104360000000005050433000000000054043500000040011000390000000103300039000000000023004b00000e370000413d00000000020004140000001303000029000000040030008c00000e840000c13d0000000301000367000000010300003100000e990000013d0000056a0100004100000012020000290000000000120435000005150020009c000005150200804100000040012002100000052b011001c70000145200010430001400000004001d000000110100002900000000010104330000056902000041000000140300002900000000002304350000051a0110019700000004023000390000000000120435000005150030009c0000051503008041000000400130021000000551011001c700001452000104300000001f0530018f0000051706300198000000400200043d00000000046200190000076e0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000e670000c13d0000076e0000013d0000001f0530018f0000051706300198000000400200043d00000000046200190000076e0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000e730000c13d0000076e0000013d0000001f0530018f0000051706300198000000400200043d00000000046200190000076e0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000e7f0000c13d0000076e0000013d00000014030000290000000001310049000005150010009c00000515010080410000006001100210000005150030009c00000515030080410000004003300210000000000131019f000005150020009c0000051502008041000000c002200210000000000121019f00000013020000291450144b0000040f0000006003100270000105150030019d00000515033001970003000000010355000000010020019000000f870000613d0000058c043001980000001f0530018f000000140240002900000ea30000613d000000000601034f0000001407000029000000006806043c0000000007870436000000000027004b00000e9f0000c13d000000000005004b00000eb00000613d000000000141034f0000000304500210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001204350000001f013000390000058c011001970000001402100029000000000012004b00000000010000390000000101004039001200000002001d000005190020009c0000004e0000213d00000001001001900000004e0000c13d0000001201000029000000400010043f0000051d0030009c000000490000213d000000800030008c000000490000413d00000011010000290000000001010433000000000001004b0000000002000039000000010200c039000000000021004b000000490000c13d000000140200002900000040022000390000000002020433000005190020009c000000490000213d0000001404200029000000140230002900000559032001970000001f054000390000055906500197000000000736013f000000000036004b00000000060000190000055906004041000000000025004b00000000050000190000055905008041000005590070009c000000000605c019000000000006004b000000490000c13d0000000065040434000005190050009c0000004e0000213d0000001f045000390000058c044001970000003f044000390000058c044001970000001207400029000005190070009c0000004e0000213d00000014040000290000000004040433000000400070043f000000120700002900000000075704360000000008650019000000000028004b000000490000213d000000000005004b00000ef90000613d00000000080000190000000009780019000000000a680019000000000a0a04330000000000a904350000002008800039000000000058004b00000ef20000413d00000000057500190000000000050435000000140500002900000060055000390000000005050433000005190050009c000000490000213d00000014055000290000001f06500039000000000026004b000000000700001900000559070080410000055906600197000000000836013f000000000036004b00000000060000190000055906004041000005590080009c000000000607c019000000000006004b000000490000c13d0000000067050434000005190070009c0000004e0000213d00000005087002100000003f098000390000051c09900197000000400a00043d00000000099a001900140000000a001d0000000000a9004b000000000a000039000000010a004039000005190090009c0000004e0000213d0000000100a001900000004e0000c13d000000400090043f000000140900002900000000007904350000000007860019000000000027004b000000490000213d000000000076004b00000f5f0000813d00000014080000290000000069060434000005190090009c000000490000213d000000000b5900190000003f09b00039000000000029004b000000000a000019000005590a0080410000055909900197000000000c39013f000000000039004b000000000900001900000559090040410000055900c0009c00000000090ac019000000000009004b000000490000c13d0000002009b000390000000009090433000005190090009c0000004e0000213d0000001f0a9000390000058c0aa001970000003f0aa000390000058c0ca00197000000400a00043d000000000cca00190000000000ac004b000000000d000039000000010d0040390000051900c0009c0000004e0000213d0000000100d001900000004e0000c13d0000004000c0043f000000000c9a0436000000400bb00039000000000db9001900000000002d004b000000490000213d000000000009004b00000f590000613d000000000d000019000000000ecd0019000000000fbd0019000000000f0f04330000000000fe0435000000200dd0003900000000009d004b00000f520000413d000000200880003900000000099c001900000000000904350000000000a80435000000000076004b00000f270000413d00000002020000290000000000420435000000000001004b000000000100001900000fce0000c13d000000400300043d0000002401300039000000090200002900000000002104350000055e010000410000000000130435001300000003001d00000004013000390000000a0200002900000000002104350000055701000041000000000010044300000000010004120000000400100443000000400100003900000024001004430000000001000414000005150010009c0000051501008041000000c00110021000000558011001c700008005020000391450144b0000040f00000001002001900000119d0000613d000000000201043b00000000010004140000051a02200197000000040020008c00000f930000c13d0000000103000031000000200030008c0000002004000039000000000403401900000fbd0000013d0000001f0530018f0000051706300198000000400200043d00000000046200190000076e0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000f8e0000c13d0000076e0000013d0000001303000029000005150030009c00000515030080410000004003300210000005150010009c0000051501008041000000c001100210000000000131019f0000055f011001c7145014460000040f00000060031002700000051503300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000130570002900000fac0000613d000000000801034f0000001309000029000000008a08043c0000000009a90436000000000059004b00000fa80000c13d000000000006004b00000fb90000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000011a40000613d0000001f01400039000000600210018f0000001301200029000000000021004b00000000020000390000000102004039000005190010009c0000004e0000213d00000001002001900000004e0000c13d000000400010043f000000200030008c000000490000413d00000013010000290000000001010433000005190010009c000000490000213d00000008020000290000000002020433000000800220003900000000001204350000000401000029000000120200002900000000002104350000000c0100002900000000010104330000000002010433000000000002004b00000fed0000613d000000000200001900000014030000290000000003030433000000000023004b0000119e0000a13d0000000503200210000000200330003900000000011300190000001403300029000000000303043300000000010104330000008001100039000000000031043500000001022000390000000c0100002900000000010104330000000003010433000000000032004b00000fdb0000413d000000400100043d001400000001001d00000020021000390000056001000041001300000002001d0000000000120435000005570100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000005150010009c0000051501008041000000c00110021000000558011001c700008005020000391450144b0000040f00000001002001900000119d0000613d000000000101043b000000140400002900000080024000390000000003000410000000000032043500000060024000390000000a030000290000000000320435000005190110019700000040024000390000000000120435000000800100003900000000001404350000051b0040009c0000004e0000213d0000001402000029000000a001200039000000400010043f0000001301000029000005150010009c000005150100804100000040011002100000000002020433000005150020009c00000515020080410000006002200210000000000112019f0000000002000414000005150020009c0000051502008041000000c002200210000000000112019f00000548011001c700008010020000391450144b0000040f0000000100200190000000490000613d0000000802000029000000000202043300000080032000390000006002200039000000000101043b001200000001001d00000007010000290000000001010433000000000202043300000000030304330000000304000029000000000404043300000001050000290000000005050433000000400700043d000000a00670003900000000005604350000051a04400197000000800570003900000000004504350000051903300197000000600470003900000000003404350000051902200197000000400370003900000000002304350000051a0210019700000020017000390000000000210435000000a0020000390000000000270435001400000007001d000005610070009c0000004e0000213d0000001403000029000000c002300039001300000002001d000000400020043f000005150010009c000005150100804100000040011002100000000002030433000005150020009c00000515020080410000006002200210000000000112019f0000000002000414000005150020009c0000051502008041000000c002200210000000000112019f00000548011001c700008010020000391450144b0000040f0000000100200190000000490000613d000000050200002900000000020204330000002003200039000005150030009c000005150300804100000040033002100000000002020433000005150020009c00000515020080410000006002200210000000000232019f000000000101043b001100000001001d0000000001000414000005150010009c0000051501008041000000c001100210000000000121019f00000548011001c700008010020000391450144b0000040f0000000100200190000000490000613d000000060200002900000000020204330000002003200039000005150030009c000005150300804100000040033002100000000002020433000005150020009c00000515020080410000006002200210000000000232019f000000000101043b001000000001001d0000000001000414000005150010009c0000051501008041000000c001100210000000000121019f00000548011001c700008010020000391450144b0000040f0000000100200190000000490000613d000000000101043b000f00000001001d0000000c0100002900000000010104330000001404000029000000e0034000390000002002000039000e00000003001d00000000002304350000010002400039145013b80000040f000000140110006a000000e00210008a00000013030000290000000000230435000000a10110008a0000058c021001970000000001320019000000000021004b00000000020000390000000102004039000005190010009c0000004e0000213d00000001002001900000004e0000c13d000000400010043f0000000e01000029000005150010009c0000051501008041000000400110021000000013020000290000000002020433000005150020009c00000515020080410000006002200210000000000112019f0000000002000414000005150020009c0000051502008041000000c002200210000000000112019f00000548011001c700008010020000391450144b0000040f0000000100200190000000490000613d000000040200002900000000020204330000002003200039000005150030009c000005150300804100000040033002100000000002020433000005150020009c00000515020080410000006002200210000000000232019f000000000101043b001400000001001d0000000001000414000005150010009c0000051501008041000000c001100210000000000121019f00000548011001c700008010020000391450144b0000040f0000000100200190000000490000613d000000000201043b000000400100043d000000e0031000390000000000230435000000c00210003900000014030000290000000000320435000000a0021000390000000f030000290000000000320435000000800210003900000010030000290000000000320435000000600210003900000011030000290000000000320435000000400210003900000012030000290000000000320435000000e00200003900000000022104360000000000020435000005620010009c0000004e0000213d0000010003100039000000400030043f000005150020009c000005150200804100000040022002100000000001010433000005150010009c00000515010080410000006001100210000000000121019f0000000002000414000005150020009c0000051502008041000000c002200210000000000112019f00000548011001c700008010020000391450144b0000040f0000000100200190000000490000613d000000000101043b000000080300002900000000020304330000000000120435000000000103043300000060011000390000000001010433000000400600043d0000002002000039000000000226043600000000030304330000000054030434000000000042043500000000020504330000051902200197000000400460003900000000002404350000004002300039000000000202043300000519022001970000006004600039000000000024043500000060023000390000000002020433000005190220019700000080046000390000000000240435000000800230003900000000020204330000051902200197000000a0036000390000000000230435000000070200002900000000020204330000051a02200197000000c003600039000000000023043500000006020000290000000002020433000000e003600039000001a0040000390000000000430435000001c005600039000000004302043400000000003504350000000008060019000001e002600039000000000003004b000011360000613d000000000500001900000000062500190000000007540019000000000707043300000000007604350000002005500039000000000035004b0000112f0000413d000000000423001900000000000404350000001f033000390000058c03300197000000050400002900000000040404330000010005800039000001c0063000390000000000650435000000000223001900000000430404340000000002320436000000000003004b0000114c0000613d000000000500001900000000062500190000000007540019000000000707043300000000007604350000002005500039000000000035004b000011450000413d001405190010019b000000000123001900000000000104350000001f013000390000058c0110019700000000012100190000000002810049000000200220008a000000040300002900000000030304330000012004800039000000000024043500000000320304340000000001210436000000000002004b000011640000613d000000000400001900000000051400190000000006430019000000000606043300000000006504350000002004400039000000000024004b0000115d0000413d00000000031200190000000000030435000000030300002900000000030304330000051a03300197001300000008001d00000140048000390000000000340435000000010300002900000000030304330000016004800039000000000034043500000002030000290000000003030433000001800480003900000000003404350000001f022000390000058c0220019700000000021200190000000001820049000000200310008a0000000c010000290000000001010433000001a0048000390000000000340435145013b80000040f00000013020000290000000001210049000005150020009c00000515020080410000004002200210000005150010009c00000515010080410000006001100210000000000121019f0000000002000414000005150020009c0000051502008041000000c002200210000000000121019f00000548011001c70000800d02000039000000030300003900000563040000410000000a050000290000001406000029145014460000040f0000000100200190000000490000613d0000000202000039000000000102041a0000054d01100197000000000012041b000000080100002900000000010104330000000001010433000006df0000013d000000000001042f0000057101000041000000000010043f0000003201000039000000040010043f000005510100004100001452000104300000001f0530018f0000051706300198000000400200043d00000000046200190000076e0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000011ab0000c13d0000076e0000013d00000000430104340000051903300197000000000332043600000000040404330000051a044001970000000000430435000000400310003900000000030304330000051a03300197000000400420003900000000003404350000006002200039000000600110003900000000010104330000051a011001970000000000120435000000000001042d0000058d0010009c000011c60000813d000000a001100039000000400010043f000000000001042d0000057101000041000000000010043f0000004101000039000000040010043f000005510100004100001452000104300000001f022000390000058c022001970000000001120019000000000021004b00000000020000390000000102004039000005190010009c000011d80000213d0000000100200190000011d80000c13d000000400010043f000000000001042d0000057101000041000000000010043f0000004101000039000000040010043f0000055101000041000014520001043000000000430104340000000001320436000000000003004b000011ea0000613d000000000200001900000000051200190000000006240019000000000606043300000000006504350000002002200039000000000032004b000011e30000413d000000000213001900000000000204350000001f023000390000058c022001970000000001210019000000000001042d00000000430104340000051a0330019700000000033204360000000004040433000000000004004b0000000004000039000000010400c0390000000000430435000000400310003900000000030304330000051a0330019700000040042000390000000000340435000000600310003900000000030304330000051a03300197000000600420003900000000003404350000008002200039000000800110003900000000010104330000051a011001970000000000120435000000000001042d000000000301001900000000040104330000000001420436000000000004004b000012150000613d0000000002000019000000200330003900000000050304330000051a0550019700000000015104360000000102200039000000000042004b0000120e0000413d000000000001042d0001000000000002000000200410003900000040050000390000000000540435000005190220019700000000002104350000000202000367000000000432034f000000000404043b000100000000003500000000063000790000001f0660008a00000559076001970000055908400197000000000978013f000000000078004b00000000080000190000055908002041000000000064004b000000000a000019000005590a004041000005590090009c00000000080ac019000000000008004b000013310000613d0000000004340019000000000842034f000000000908043b000005190090009c000013310000213d00000020044000390000000108900069000000000084004b000000000a000019000005590a0020410000055908800197000005590b400197000000000c8b013f00000000008b004b000000000800001900000559080040410000055900c0009c00000000080ac019000000000008004b000013310000c13d0000004008100039000000a00a0000390000000000a80435000000e0081000390000000000980435000000000a42034f0000058c0c9001980000001f0d90018f000001000b1000390000000008cb0019000012540000613d000000000e0a034f000000000f0b001900000000e40e043c000000000f4f043600000000008f004b000012500000c13d00000000000d004b000012610000613d0000000004ca034f000000030ad00210000000000c080433000000000cac01cf000000000cac022f000000000404043b000001000aa000890000000004a4022f0000000004a401cf0000000004c4019f00000000004804350000000004b900190000000000040435000000200a3000390000000004a2034f000000000804043b0000055904800197000000000c74013f000000000074004b00000000040000190000055904004041000000000068004b000000000d000019000005590d0080410000055900c0009c00000000040dc019000000000004004b000013310000c13d0000000004380019000000000842034f000000000808043b000005190080009c000013310000213d000000200c400039000000010480006900000000004c004b000000000d000019000005590d0020410000055904400197000005590ec00197000000000f4e013f00000000004e004b000000000400001900000559040040410000055900f0009c00000000040dc019000000000004004b000013310000c13d0000001f049000390000058c044001970000000009b40019000000c004400039000000600b10003900000000004b0435000000000cc2034f00000000048904360000058c0d8001980000001f0e80018f0000000009d40019000012980000613d000000000f0c034f000000000b04001900000000f50f043c000000000b5b043600000000009b004b000012940000c13d00000000000e004b000012a50000613d0000000005dc034f000000030be00210000000000c090433000000000cbc01cf000000000cbc022f000000000505043b000001000bb000890000000005b5022f0000000005b501cf0000000005c5019f0000000000590435000000000548001900000000000504350000002009a00039000000000592034f000000000a05043b0000055905a00197000000000b75013f000000000075004b0000000005000019000005590500404100000000006a004b000000000c000019000005590c0080410000055900b0009c00000000050cc019000000000005004b000013310000c13d000000000b3a00190000000005b2034f000000000a05043b0000051900a0009c000013310000213d000000200cb000390000000605a00210000000010550006900000000005c004b000000000b000019000005590b0020410000055905500197000005590dc00197000000000e5d013f00000000005d004b000000000500001900000559050040410000055900e0009c00000000050bc019000000000005004b000013310000c13d0000001f058000390000058c0550019700000000044500190000000005140049000000400550008a000000800810003900000000005804350000000008a4043600000000000a004b000012e40000613d000000000b0000190000000004c2034f000000000404043b0000051a0040009c000013310000213d00000000044804360000002005c00039000000000552034f000000000505043b0000000000540435000000400cc000390000004008800039000000010bb000390000000000ab004b000012d60000413d0000002004900039000000000542034f000000000905043b0000051a0090009c000013310000213d000000a00510003900000000009504350000002004400039000000000442034f000000000904043b0000055904900197000000000574013f000000000074004b00000000040000190000055904004041000000000069004b00000000060000190000055906008041000005590050009c000000000406c019000000000004004b000013310000c13d0000000004390019000000000342034f000000000303043b000005190030009c000013310000213d00000020064000390000000104300069000000000046004b0000000005000019000005590500204100000559044001970000055907600197000000000947013f000000000047004b00000000040000190000055904004041000005590090009c000000000405c019000000000004004b000013310000c13d0000000004180049000000400440008a000000c0011000390000000000410435000000000562034f00000000013804360000058c063001980000001f0730018f00000000026100190000131e0000613d000000000805034f0000000004010019000000008908043c0000000004940436000000000024004b0000131a0000c13d000000000007004b0000132b0000613d000000000465034f0000000305700210000000000602043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000420435000000000231001900000000000204350000001f023000390000058c022001970000000001210019000000000001042d000000000100001900001452000104300001000000000002000000400300043d000005650200004100000000002304350000051a01100197000100000003001d000000040230003900000000001204350000055701000041000000000010044300000000010004120000000400100443000000600100003900000024001004430000000001000414000005150010009c0000051501008041000000c00110021000000558011001c700008005020000391450144b0000040f0000000100200190000013930000613d000000000201043b00000000010004140000051a02200197000000040020008c000013550000c13d0000000103000031000000200030008c00000020040000390000000004034019000000010b000029000013800000013d0000000103000029000005150030009c00000515030080410000004003300210000005150010009c0000051501008041000000c001100210000000000131019f00000551011001c71450144b0000040f000000010b00002900000060031002700000051503300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b00190000136f0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b0000136b0000c13d000000000006004b0000137c0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f000300000001035500000001002001900000139a0000613d0000001f01400039000000600210018f0000000001b20019000000000021004b00000000020000390000000102004039000005190010009c000013940000213d0000000100200190000013940000c13d000000400010043f0000001f0030008c000013910000a13d00000000010b04330000051a0010009c000013910000213d000000000001042d00000000010000190000145200010430000000000001042f0000057101000041000000000010043f0000004101000039000000040010043f000005510100004100001452000104300000001f0530018f0000051706300198000000400200043d0000000004620019000013a50000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000013a10000c13d000000000005004b000013b20000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000005150020009c00000515020080410000004002200210000000000112019f000014520001043000000000040104330000000000420435000000050340021000000000033200190000002003300039000000000004004b000014150000613d000000a00500003900000000070000190000000008020019000013cb0000013d000000000a39001900000000000a04350000001f099000390000058c0990019700000000033900190000000107700039000000000047004b000014150000813d0000000009230049000000200990008a000000200880003900000000009804350000002001100039000000000901043300000000ba0904340000051a0aa00197000000000aa30436000000000b0b043300000000005a0435000000a00d30003900000000ca0b04340000000000ad0435000000c00b30003900000000000a004b000013e40000613d000000000d000019000000000ebd0019000000000fdc0019000000000f0f04330000000000fe0435000000200dd000390000000000ad004b000013dd0000413d000000000cba001900000000000c04350000001f0aa000390000058c0aa00197000000000aba0019000000400b900039000000000b0b0433000000000c3a0049000000400d3000390000000000cd043500000000cb0b0434000000000aba043600000000000b004b000013fa0000613d000000000d000019000000000ead0019000000000fdc0019000000000f0f04330000000000fe0435000000200dd000390000000000bd004b000013f30000413d000000000cab001900000000000c0435000000600c900039000000000c0c0433000000600d3000390000000000cd04350000001f0bb000390000058c0bb00197000000000bab001900000080099000390000000009090433000000000a3b004900000080033000390000000000a3043500000000a909043400000000039b0436000000000009004b000013c30000613d000000000b000019000000000c3b0019000000000dba0019000000000d0d04330000000000dc0435000000200bb0003900000000009b004b0000140d0000413d000013c30000013d0000000001030019000000000001042d000000000001042f000005150010009c00000515010080410000004001100210000005150020009c00000515020080410000006002200210000000000112019f0000000002000414000005150020009c0000051502008041000000c002200210000000000112019f00000548011001c700008010020000391450144b0000040f00000001002001900000142b0000613d000000000101043b000000000001042d0000000001000019000014520001043000000000050100190000000000200443000000040100003900000005024002700000000002020031000000000121043a0000002004400039000000000031004b000014300000413d000005150030009c000005150300804100000060013002100000000002000414000005150020009c0000051502008041000000c002200210000000000112019f0000058e011001c700000000020500191450144b0000040f0000000100200190000014450000613d000000000101043b000000000001042d000000000001042f00001449002104210000000102000039000000000001042d0000000002000019000000000001042d0000144e002104230000000102000039000000000001042d0000000002000019000000000001042d0000145000000432000014510001042e0000145200010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000000000000000000000000000ffffffffffffff7f000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffff5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffff9fffffffffffffffffffffffff0000000000000000000000000000000000000000ffffffffffffffffffffff0000000000000000000000000000000000000000000200000000000000000000000000000000000120000000000000000000000000c7372d2d886367d7bb1b0e0708a5436f2c91d6963de210eb2dc1ec2ecd6d21f10200000000000000000000000000000000000040000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000000000000000000000100000000000000000200000000000000000000000000000000000060000000000000000000000000d5ad72bc37dc7a80a8b9b9df20500046fd7341adb1be2258a540466fdd7dcef5000000020000000000000000000000000000014000000100000000000000000035be3ac80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000009b15e16f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007437ff9e00000000000000000000000000000000000000000000000000000000972b461100000000000000000000000000000000000000000000000000000000df0aa9e800000000000000000000000000000000000000000000000000000000df0aa9e900000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000fbca3b7400000000000000000000000000000000000000000000000000000000972b461200000000000000000000000000000000000000000000000000000000c9b146b3000000000000000000000000000000000000000000000000000000008da5cb5a000000000000000000000000000000000000000000000000000000008da5cb5b000000000000000000000000000000000000000000000000000000009041be3d000000000000000000000000000000000000000000000000000000007437ff9f0000000000000000000000000000000000000000000000000000000079ba50970000000000000000000000000000000000000000000000000000000027e936f0000000000000000000000000000000000000000000000000000000005cb80c5c000000000000000000000000000000000000000000000000000000005cb80c5d000000000000000000000000000000000000000000000000000000006def4ce70000000000000000000000000000000000000000000000000000000027e936f10000000000000000000000000000000000000000000000000000000048a98aa40000000000000000000000000000000000000000000000000000000020487dec0000000000000000000000000000000000000000000000000000000020487ded000000000000000000000000000000000000000000000000000000002716072b0000000000000000000000000000000000000000000000000000000006285c6900000000000000000000000000000000000000000000000000000000181f5a779e7177c80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000008000000000000000002b5c74de000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000ed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278dad89dca000000000000000000000000000000000000000000000000000000000000000000000000000000ff00000000000000000000000000000000000000003ee5aeb500000000000000000000000000000000000000000000000000000000ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff00000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000ff0000000000000000d0d259760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000001c0a3529000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000e0a0e50600000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e02000002000000000000000000000000000000440000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffedf000000000000000000000000000000000000000000000000ffffffffffffffdf000000000000000000000000000000000000000000000000ffffffffffffffbf430d138c00000000000000000000000000000000000000000000000000000000ea458c0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000130ac867e79e2789f923760a88743d292acdf7002139a588206e2260f73f7321000000000000000000000000000000000000000000000000ffffffffffffff3f000000000000000000000000000000000000000000000000fffffffffffffeff192442a2b2adb6a7948f097023cb6b57d29d3a7a5dd33e6666d33c39cc456f320000000000000000000000000000000000000020000000000000000000000000bbe4f6db0000000000000000000000000000000000000000000000000000000001ffc9a700000000000000000000000000000000000000000000000000000000aff2afbf000000000000000000000000000000000000000000000000000000009a4575b900000000000000000000000000000000000000000000000000000000bf16aab6000000000000000000000000000000000000000000000000000000005cf0444900000000000000000000000000000000000000000000000000000000a4ec747900000000000000000000000000000000000000000000000000000000905d7d9b00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff0200000000000000000000000000000000000020000000000000000000000000330939f6eafe8bb516716892fe962ff19770570838686e6579dbc1cc51fc3281463258ff000000000000000000000000000000000000000000000000000000004e487b7100000000000000000000000000000000000000000000000000000000c237ec1921f855ccd5e9a5af9733f2d58943a5a8501ec5988e305d7a4d421586000000000000000000000000000000000000002000000080000000000000000002b543c6000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000006000000080000000000000000070a0823100000000000000000000000000000000000000000000000000000000a9059cbb000000000000000000000000000000000000000000000000000000005361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656408c379a0000000000000000000000000000000000000000000000000000000006f742073756363656564000000000000000000000000000000000000000000005361666545524332303a204552433230206f7065726174696f6e20646964206e0000000000000000000000000000000000000084000000000000000000000000508d7d183612c18fc339b42618912b9fa3239f631dd7ec0671f950200a0fa66e416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000004000001200000000000000000c35aa79d000000000000000000000000000000000000000000000000000000002cbc26bb000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000024000000800000000000000000fdbd6a7200000000000000000000000000000000000000000000000000000000d8694ccd000000000000000000000000000000000000000000000000000000004f6e52616d7020312e362e302d646576000000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000080000001800000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff600200000200000000000000000000000000000000000000000000000000000000") diff --git a/core/gethwrappers/ccip/generated_zks/ping_pong_demo/ping_pong_demo.go b/core/gethwrappers/ccip/generated_zks/ping_pong_demo/ping_pong_demo.go new file mode 100644 index 00000000000..929a1ba38d6 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/ping_pong_demo/ping_pong_demo.go @@ -0,0 +1,1232 @@ +package ping_pong_demo + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type ClientAny2EVMMessage struct { + MessageId [32]byte + SourceChainSelector uint64 + Sender []byte + Data []byte + DestTokenAmounts []ClientEVMTokenAmount +} + +type ClientEVMTokenAmount struct { + Token common.Address + Amount *big.Int +} + +var PingPongDemoMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"feeToken\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CannotTransferToSelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"name\":\"InvalidRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerCannotBeZero\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isOutOfOrder\",\"type\":\"bool\"}],\"name\":\"OutOfOrderExecutionChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Ping\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"pingPongCount\",\"type\":\"uint256\"}],\"name\":\"Pong\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCounterpartChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOutOfOrderExecution\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"counterpartChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"counterpartAddress\",\"type\":\"address\"}],\"name\":\"setCounterpart\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setCounterpartAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"setCounterpartChainSelector\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"outOfOrderExecution\",\"type\":\"bool\"}],\"name\":\"setOutOfOrderExecution\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"pause\",\"type\":\"bool\"}],\"name\":\"setPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startPingPong\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", + Bin: "0x60a06040523480156200001157600080fd5b50604051620014a8380380620014a88339810160408190526200003491620001ff565b336000836001600160a01b03811662000067576040516335fdcccd60e21b81526000600482015260240160405180910390fd5b6001600160a01b0390811660805282166200009557604051639b15e16f60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0384811691909117909155811615620000c857620000c8816200016c565b50506002805460ff60a01b19169055600380546001600160a01b0319166001600160a01b0383811691821790925560405163095ea7b360e01b8152918416600483015260001960248301529063095ea7b3906044016020604051808303816000875af11580156200013d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016391906200023e565b50505062000269565b336001600160a01b038216036200019657604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6001600160a01b0381168114620001fc57600080fd5b50565b600080604083850312156200021357600080fd5b82516200022081620001e6565b60208401519092506200023381620001e6565b809150509250929050565b6000602082840312156200025157600080fd5b815180151581146200026257600080fd5b9392505050565b6080516112156200029360003960008181610295015281816106520152610a5901526112156000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c80638da5cb5b116100b2578063b187bd2611610081578063bee518a411610066578063bee518a4146102ef578063ca709a251461032d578063f2fde38b1461034b57600080fd5b8063b187bd26146102b9578063b5a11011146102dc57600080fd5b80638da5cb5b1461023f5780639d2aede51461025d578063ae90de5514610270578063b0f479a11461029357600080fd5b80632874d8bf11610109578063665ed537116100ee578063665ed5371461021157806379ba50971461022457806385572ffb1461022c57600080fd5b80632874d8bf146101ca5780632b6e5d63146101d257600080fd5b806301ffc9a71461013b57806316c38b3c14610163578063181f5a77146101785780631892b906146101b7575b600080fd5b61014e610149366004610c29565b61035e565b60405190151581526020015b60405180910390f35b610176610171366004610c72565b6103f7565b005b604080518082018252601281527f50696e67506f6e6744656d6f20312e352e3000000000000000000000000000006020820152905161015a9190610cf8565b6101766101c5366004610d28565b610449565b6101766104a4565b60025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161015a565b61017661021f366004610c72565b6104e0565b61017661056c565b61017661023a366004610d43565b61063a565b60015473ffffffffffffffffffffffffffffffffffffffff166101ec565b61017661026b366004610da2565b6106c3565b60035474010000000000000000000000000000000000000000900460ff1661014e565b7f00000000000000000000000000000000000000000000000000000000000000006101ec565b60025474010000000000000000000000000000000000000000900460ff1661014e565b6101766102ea366004610dbd565b610712565b60015474010000000000000000000000000000000000000000900467ffffffffffffffff1660405167ffffffffffffffff909116815260200161015a565b60035473ffffffffffffffffffffffffffffffffffffffff166101ec565b610176610359366004610da2565b6107b4565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f85572ffb0000000000000000000000000000000000000000000000000000000014806103f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6103ff6107c5565b6002805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6104516107c5565b6001805467ffffffffffffffff90921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055565b6104ac6107c5565b600280547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556104de6001610816565b565b6104e86107c5565b6003805482151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff9091161790556040517f05a3fef9935c9013a24c6193df2240d34fcf6b0ebf8786b85efe8401d696cdd99061056190831515815260200190565b60405180910390a150565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105bd576040517f02b543c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000008082163390811790935560008054909116815560405173ffffffffffffffffffffffffffffffffffffffff909216929183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146106af576040517fd7f7333400000000000000000000000000000000000000000000000000000000815233600482015260240160405180910390fd5b6106c06106bb82610ff3565b610b0f565b50565b6106cb6107c5565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61071a6107c5565b6001805467ffffffffffffffff90931674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909316929092179091556002805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055565b6107bc6107c5565b6106c081610b65565b60015473ffffffffffffffffffffffffffffffffffffffff1633146104de576040517f2b5c74de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600116600103610859576040518181527f48257dc961b6f792c2b78a080dacfed693b660960a702de21cee364e20270e2f9060200160405180910390a161088d565b6040518181527f58b69f57828e6962d216502094c54f6562f3bf082ba758966c3454f9e37b15259060200160405180910390a15b6040805160a0810190915260025473ffffffffffffffffffffffffffffffffffffffff1660c08201526000908060e081016040516020818303038152906040528152602001836040516020016108e591815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528152602001600060405190808252806020026020018201604052801561095f57816020015b60408051808201909152600080825260208201528152602001906001900390816109385790505b50815260035473ffffffffffffffffffffffffffffffffffffffff811660208084019190915260408051808201825262030d408082527401000000000000000000000000000000000000000090940460ff16151590830190815281516024810194909452511515604480850191909152815180850390910181526064909301815290820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f181dcf1000000000000000000000000000000000000000000000000000000000179052909101526001546040517f96f4e9f90000000000000000000000000000000000000000000000000000000081529192507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16916396f4e9f991610ac7917401000000000000000000000000000000000000000090910467ffffffffffffffff169085906004016110a0565b6020604051808303816000875af1158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a91906111b5565b505050565b60008160600151806020019051810190610b2991906111b5565b60025490915074010000000000000000000000000000000000000000900460ff16610b6157610b61610b5c8260016111ce565b610816565b5050565b3373ffffffffffffffffffffffffffffffffffffffff821603610bb4576040517fdad89dca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215610c3b57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610c6b57600080fd5b9392505050565b600060208284031215610c8457600080fd5b81358015158114610c6b57600080fd5b6000815180845260005b81811015610cba57602081850181015186830182015201610c9e565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000610c6b6020830184610c94565b803567ffffffffffffffff81168114610d2357600080fd5b919050565b600060208284031215610d3a57600080fd5b610c6b82610d0b565b600060208284031215610d5557600080fd5b813567ffffffffffffffff811115610d6c57600080fd5b820160a08185031215610c6b57600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610d2357600080fd5b600060208284031215610db457600080fd5b610c6b82610d7e565b60008060408385031215610dd057600080fd5b610dd983610d0b565b9150610de760208401610d7e565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610e4257610e42610df0565b60405290565b60405160a0810167ffffffffffffffff81118282101715610e4257610e42610df0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610eb257610eb2610df0565b604052919050565b600082601f830112610ecb57600080fd5b813567ffffffffffffffff811115610ee557610ee5610df0565b610f1660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610e6b565b818152846020838601011115610f2b57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112610f5957600080fd5b8135602067ffffffffffffffff821115610f7557610f75610df0565b610f83818360051b01610e6b565b82815260069290921b84018101918181019086841115610fa257600080fd5b8286015b84811015610fe85760408189031215610fbf5760008081fd5b610fc7610e1f565b610fd082610d7e565b81528185013585820152835291830191604001610fa6565b509695505050505050565b600060a0823603121561100557600080fd5b61100d610e48565b8235815261101d60208401610d0b565b6020820152604083013567ffffffffffffffff8082111561103d57600080fd5b61104936838701610eba565b6040840152606085013591508082111561106257600080fd5b61106e36838701610eba565b6060840152608085013591508082111561108757600080fd5b5061109436828601610f48565b60808301525092915050565b6000604067ffffffffffffffff851683526020604081850152845160a060408601526110cf60e0860182610c94565b9050818601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08087840301606088015261110a8383610c94565b6040890151888203830160808a01528051808352908601945060009350908501905b8084101561116b578451805173ffffffffffffffffffffffffffffffffffffffff1683528601518683015293850193600193909301929086019061112c565b50606089015173ffffffffffffffffffffffffffffffffffffffff1660a08901526080890151888203830160c08a015295506111a78187610c94565b9a9950505050505050505050565b6000602082840312156111c757600080fd5b5051919050565b808201808211156103f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fdfea164736f6c6343000818000a", +} + +var PingPongDemoABI = PingPongDemoMetaData.ABI + +var PingPongDemoBin = PingPongDemoMetaData.Bin + +func DeployPingPongDemo(auth *bind.TransactOpts, backend bind.ContractBackend, router common.Address, feeToken common.Address) (common.Address, *generated_zks.Transaction, *PingPongDemo, error) { + parsed, err := PingPongDemoMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(PingPongDemoZKBin), backend, router, feeToken) + contractReturn := &PingPongDemo{address: address, abi: *parsed, PingPongDemoCaller: PingPongDemoCaller{contract: contractBind}, PingPongDemoTransactor: PingPongDemoTransactor{contract: contractBind}, PingPongDemoFilterer: PingPongDemoFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(PingPongDemoBin), backend, router, feeToken) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &PingPongDemo{address: address, abi: *parsed, PingPongDemoCaller: PingPongDemoCaller{contract: contract}, PingPongDemoTransactor: PingPongDemoTransactor{contract: contract}, PingPongDemoFilterer: PingPongDemoFilterer{contract: contract}}, nil +} + +type PingPongDemo struct { + address common.Address + abi abi.ABI + PingPongDemoCaller + PingPongDemoTransactor + PingPongDemoFilterer +} + +type PingPongDemoCaller struct { + contract *bind.BoundContract +} + +type PingPongDemoTransactor struct { + contract *bind.BoundContract +} + +type PingPongDemoFilterer struct { + contract *bind.BoundContract +} + +type PingPongDemoSession struct { + Contract *PingPongDemo + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type PingPongDemoCallerSession struct { + Contract *PingPongDemoCaller + CallOpts bind.CallOpts +} + +type PingPongDemoTransactorSession struct { + Contract *PingPongDemoTransactor + TransactOpts bind.TransactOpts +} + +type PingPongDemoRaw struct { + Contract *PingPongDemo +} + +type PingPongDemoCallerRaw struct { + Contract *PingPongDemoCaller +} + +type PingPongDemoTransactorRaw struct { + Contract *PingPongDemoTransactor +} + +func NewPingPongDemo(address common.Address, backend bind.ContractBackend) (*PingPongDemo, error) { + abi, err := abi.JSON(strings.NewReader(PingPongDemoABI)) + if err != nil { + return nil, err + } + contract, err := bindPingPongDemo(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &PingPongDemo{address: address, abi: abi, PingPongDemoCaller: PingPongDemoCaller{contract: contract}, PingPongDemoTransactor: PingPongDemoTransactor{contract: contract}, PingPongDemoFilterer: PingPongDemoFilterer{contract: contract}}, nil +} + +func NewPingPongDemoCaller(address common.Address, caller bind.ContractCaller) (*PingPongDemoCaller, error) { + contract, err := bindPingPongDemo(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &PingPongDemoCaller{contract: contract}, nil +} + +func NewPingPongDemoTransactor(address common.Address, transactor bind.ContractTransactor) (*PingPongDemoTransactor, error) { + contract, err := bindPingPongDemo(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &PingPongDemoTransactor{contract: contract}, nil +} + +func NewPingPongDemoFilterer(address common.Address, filterer bind.ContractFilterer) (*PingPongDemoFilterer, error) { + contract, err := bindPingPongDemo(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &PingPongDemoFilterer{contract: contract}, nil +} + +func bindPingPongDemo(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := PingPongDemoMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_PingPongDemo *PingPongDemoRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _PingPongDemo.Contract.PingPongDemoCaller.contract.Call(opts, result, method, params...) +} + +func (_PingPongDemo *PingPongDemoRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PingPongDemo.Contract.PingPongDemoTransactor.contract.Transfer(opts) +} + +func (_PingPongDemo *PingPongDemoRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _PingPongDemo.Contract.PingPongDemoTransactor.contract.Transact(opts, method, params...) +} + +func (_PingPongDemo *PingPongDemoCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _PingPongDemo.Contract.contract.Call(opts, result, method, params...) +} + +func (_PingPongDemo *PingPongDemoTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PingPongDemo.Contract.contract.Transfer(opts) +} + +func (_PingPongDemo *PingPongDemoTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _PingPongDemo.Contract.contract.Transact(opts, method, params...) +} + +func (_PingPongDemo *PingPongDemoCaller) GetCounterpartAddress(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _PingPongDemo.contract.Call(opts, &out, "getCounterpartAddress") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_PingPongDemo *PingPongDemoSession) GetCounterpartAddress() (common.Address, error) { + return _PingPongDemo.Contract.GetCounterpartAddress(&_PingPongDemo.CallOpts) +} + +func (_PingPongDemo *PingPongDemoCallerSession) GetCounterpartAddress() (common.Address, error) { + return _PingPongDemo.Contract.GetCounterpartAddress(&_PingPongDemo.CallOpts) +} + +func (_PingPongDemo *PingPongDemoCaller) GetCounterpartChainSelector(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _PingPongDemo.contract.Call(opts, &out, "getCounterpartChainSelector") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +func (_PingPongDemo *PingPongDemoSession) GetCounterpartChainSelector() (uint64, error) { + return _PingPongDemo.Contract.GetCounterpartChainSelector(&_PingPongDemo.CallOpts) +} + +func (_PingPongDemo *PingPongDemoCallerSession) GetCounterpartChainSelector() (uint64, error) { + return _PingPongDemo.Contract.GetCounterpartChainSelector(&_PingPongDemo.CallOpts) +} + +func (_PingPongDemo *PingPongDemoCaller) GetFeeToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _PingPongDemo.contract.Call(opts, &out, "getFeeToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_PingPongDemo *PingPongDemoSession) GetFeeToken() (common.Address, error) { + return _PingPongDemo.Contract.GetFeeToken(&_PingPongDemo.CallOpts) +} + +func (_PingPongDemo *PingPongDemoCallerSession) GetFeeToken() (common.Address, error) { + return _PingPongDemo.Contract.GetFeeToken(&_PingPongDemo.CallOpts) +} + +func (_PingPongDemo *PingPongDemoCaller) GetOutOfOrderExecution(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _PingPongDemo.contract.Call(opts, &out, "getOutOfOrderExecution") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_PingPongDemo *PingPongDemoSession) GetOutOfOrderExecution() (bool, error) { + return _PingPongDemo.Contract.GetOutOfOrderExecution(&_PingPongDemo.CallOpts) +} + +func (_PingPongDemo *PingPongDemoCallerSession) GetOutOfOrderExecution() (bool, error) { + return _PingPongDemo.Contract.GetOutOfOrderExecution(&_PingPongDemo.CallOpts) +} + +func (_PingPongDemo *PingPongDemoCaller) GetRouter(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _PingPongDemo.contract.Call(opts, &out, "getRouter") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_PingPongDemo *PingPongDemoSession) GetRouter() (common.Address, error) { + return _PingPongDemo.Contract.GetRouter(&_PingPongDemo.CallOpts) +} + +func (_PingPongDemo *PingPongDemoCallerSession) GetRouter() (common.Address, error) { + return _PingPongDemo.Contract.GetRouter(&_PingPongDemo.CallOpts) +} + +func (_PingPongDemo *PingPongDemoCaller) IsPaused(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _PingPongDemo.contract.Call(opts, &out, "isPaused") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_PingPongDemo *PingPongDemoSession) IsPaused() (bool, error) { + return _PingPongDemo.Contract.IsPaused(&_PingPongDemo.CallOpts) +} + +func (_PingPongDemo *PingPongDemoCallerSession) IsPaused() (bool, error) { + return _PingPongDemo.Contract.IsPaused(&_PingPongDemo.CallOpts) +} + +func (_PingPongDemo *PingPongDemoCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _PingPongDemo.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 + +} + +func (_PingPongDemo *PingPongDemoSession) Owner() (common.Address, error) { + return _PingPongDemo.Contract.Owner(&_PingPongDemo.CallOpts) +} + +func (_PingPongDemo *PingPongDemoCallerSession) Owner() (common.Address, error) { + return _PingPongDemo.Contract.Owner(&_PingPongDemo.CallOpts) +} + +func (_PingPongDemo *PingPongDemoCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _PingPongDemo.contract.Call(opts, &out, "supportsInterface", interfaceId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_PingPongDemo *PingPongDemoSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _PingPongDemo.Contract.SupportsInterface(&_PingPongDemo.CallOpts, interfaceId) +} + +func (_PingPongDemo *PingPongDemoCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _PingPongDemo.Contract.SupportsInterface(&_PingPongDemo.CallOpts, interfaceId) +} + +func (_PingPongDemo *PingPongDemoCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _PingPongDemo.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_PingPongDemo *PingPongDemoSession) TypeAndVersion() (string, error) { + return _PingPongDemo.Contract.TypeAndVersion(&_PingPongDemo.CallOpts) +} + +func (_PingPongDemo *PingPongDemoCallerSession) TypeAndVersion() (string, error) { + return _PingPongDemo.Contract.TypeAndVersion(&_PingPongDemo.CallOpts) +} + +func (_PingPongDemo *PingPongDemoTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PingPongDemo.contract.Transact(opts, "acceptOwnership") +} + +func (_PingPongDemo *PingPongDemoSession) AcceptOwnership() (*types.Transaction, error) { + return _PingPongDemo.Contract.AcceptOwnership(&_PingPongDemo.TransactOpts) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _PingPongDemo.Contract.AcceptOwnership(&_PingPongDemo.TransactOpts) +} + +func (_PingPongDemo *PingPongDemoTransactor) CcipReceive(opts *bind.TransactOpts, message ClientAny2EVMMessage) (*types.Transaction, error) { + return _PingPongDemo.contract.Transact(opts, "ccipReceive", message) +} + +func (_PingPongDemo *PingPongDemoSession) CcipReceive(message ClientAny2EVMMessage) (*types.Transaction, error) { + return _PingPongDemo.Contract.CcipReceive(&_PingPongDemo.TransactOpts, message) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) CcipReceive(message ClientAny2EVMMessage) (*types.Transaction, error) { + return _PingPongDemo.Contract.CcipReceive(&_PingPongDemo.TransactOpts, message) +} + +func (_PingPongDemo *PingPongDemoTransactor) SetCounterpart(opts *bind.TransactOpts, counterpartChainSelector uint64, counterpartAddress common.Address) (*types.Transaction, error) { + return _PingPongDemo.contract.Transact(opts, "setCounterpart", counterpartChainSelector, counterpartAddress) +} + +func (_PingPongDemo *PingPongDemoSession) SetCounterpart(counterpartChainSelector uint64, counterpartAddress common.Address) (*types.Transaction, error) { + return _PingPongDemo.Contract.SetCounterpart(&_PingPongDemo.TransactOpts, counterpartChainSelector, counterpartAddress) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) SetCounterpart(counterpartChainSelector uint64, counterpartAddress common.Address) (*types.Transaction, error) { + return _PingPongDemo.Contract.SetCounterpart(&_PingPongDemo.TransactOpts, counterpartChainSelector, counterpartAddress) +} + +func (_PingPongDemo *PingPongDemoTransactor) SetCounterpartAddress(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) { + return _PingPongDemo.contract.Transact(opts, "setCounterpartAddress", addr) +} + +func (_PingPongDemo *PingPongDemoSession) SetCounterpartAddress(addr common.Address) (*types.Transaction, error) { + return _PingPongDemo.Contract.SetCounterpartAddress(&_PingPongDemo.TransactOpts, addr) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) SetCounterpartAddress(addr common.Address) (*types.Transaction, error) { + return _PingPongDemo.Contract.SetCounterpartAddress(&_PingPongDemo.TransactOpts, addr) +} + +func (_PingPongDemo *PingPongDemoTransactor) SetCounterpartChainSelector(opts *bind.TransactOpts, chainSelector uint64) (*types.Transaction, error) { + return _PingPongDemo.contract.Transact(opts, "setCounterpartChainSelector", chainSelector) +} + +func (_PingPongDemo *PingPongDemoSession) SetCounterpartChainSelector(chainSelector uint64) (*types.Transaction, error) { + return _PingPongDemo.Contract.SetCounterpartChainSelector(&_PingPongDemo.TransactOpts, chainSelector) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) SetCounterpartChainSelector(chainSelector uint64) (*types.Transaction, error) { + return _PingPongDemo.Contract.SetCounterpartChainSelector(&_PingPongDemo.TransactOpts, chainSelector) +} + +func (_PingPongDemo *PingPongDemoTransactor) SetOutOfOrderExecution(opts *bind.TransactOpts, outOfOrderExecution bool) (*types.Transaction, error) { + return _PingPongDemo.contract.Transact(opts, "setOutOfOrderExecution", outOfOrderExecution) +} + +func (_PingPongDemo *PingPongDemoSession) SetOutOfOrderExecution(outOfOrderExecution bool) (*types.Transaction, error) { + return _PingPongDemo.Contract.SetOutOfOrderExecution(&_PingPongDemo.TransactOpts, outOfOrderExecution) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) SetOutOfOrderExecution(outOfOrderExecution bool) (*types.Transaction, error) { + return _PingPongDemo.Contract.SetOutOfOrderExecution(&_PingPongDemo.TransactOpts, outOfOrderExecution) +} + +func (_PingPongDemo *PingPongDemoTransactor) SetPaused(opts *bind.TransactOpts, pause bool) (*types.Transaction, error) { + return _PingPongDemo.contract.Transact(opts, "setPaused", pause) +} + +func (_PingPongDemo *PingPongDemoSession) SetPaused(pause bool) (*types.Transaction, error) { + return _PingPongDemo.Contract.SetPaused(&_PingPongDemo.TransactOpts, pause) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) SetPaused(pause bool) (*types.Transaction, error) { + return _PingPongDemo.Contract.SetPaused(&_PingPongDemo.TransactOpts, pause) +} + +func (_PingPongDemo *PingPongDemoTransactor) StartPingPong(opts *bind.TransactOpts) (*types.Transaction, error) { + return _PingPongDemo.contract.Transact(opts, "startPingPong") +} + +func (_PingPongDemo *PingPongDemoSession) StartPingPong() (*types.Transaction, error) { + return _PingPongDemo.Contract.StartPingPong(&_PingPongDemo.TransactOpts) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) StartPingPong() (*types.Transaction, error) { + return _PingPongDemo.Contract.StartPingPong(&_PingPongDemo.TransactOpts) +} + +func (_PingPongDemo *PingPongDemoTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _PingPongDemo.contract.Transact(opts, "transferOwnership", to) +} + +func (_PingPongDemo *PingPongDemoSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _PingPongDemo.Contract.TransferOwnership(&_PingPongDemo.TransactOpts, to) +} + +func (_PingPongDemo *PingPongDemoTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _PingPongDemo.Contract.TransferOwnership(&_PingPongDemo.TransactOpts, to) +} + +type PingPongDemoOutOfOrderExecutionChangeIterator struct { + Event *PingPongDemoOutOfOrderExecutionChange + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *PingPongDemoOutOfOrderExecutionChangeIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(PingPongDemoOutOfOrderExecutionChange) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(PingPongDemoOutOfOrderExecutionChange) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *PingPongDemoOutOfOrderExecutionChangeIterator) Error() error { + return it.fail +} + +func (it *PingPongDemoOutOfOrderExecutionChangeIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type PingPongDemoOutOfOrderExecutionChange struct { + IsOutOfOrder bool + Raw types.Log +} + +func (_PingPongDemo *PingPongDemoFilterer) FilterOutOfOrderExecutionChange(opts *bind.FilterOpts) (*PingPongDemoOutOfOrderExecutionChangeIterator, error) { + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "OutOfOrderExecutionChange") + if err != nil { + return nil, err + } + return &PingPongDemoOutOfOrderExecutionChangeIterator{contract: _PingPongDemo.contract, event: "OutOfOrderExecutionChange", logs: logs, sub: sub}, nil +} + +func (_PingPongDemo *PingPongDemoFilterer) WatchOutOfOrderExecutionChange(opts *bind.WatchOpts, sink chan<- *PingPongDemoOutOfOrderExecutionChange) (event.Subscription, error) { + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "OutOfOrderExecutionChange") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(PingPongDemoOutOfOrderExecutionChange) + if err := _PingPongDemo.contract.UnpackLog(event, "OutOfOrderExecutionChange", 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 +} + +func (_PingPongDemo *PingPongDemoFilterer) ParseOutOfOrderExecutionChange(log types.Log) (*PingPongDemoOutOfOrderExecutionChange, error) { + event := new(PingPongDemoOutOfOrderExecutionChange) + if err := _PingPongDemo.contract.UnpackLog(event, "OutOfOrderExecutionChange", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type PingPongDemoOwnershipTransferRequestedIterator struct { + Event *PingPongDemoOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *PingPongDemoOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(PingPongDemoOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(PingPongDemoOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *PingPongDemoOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *PingPongDemoOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type PingPongDemoOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_PingPongDemo *PingPongDemoFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*PingPongDemoOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &PingPongDemoOwnershipTransferRequestedIterator{contract: _PingPongDemo.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_PingPongDemo *PingPongDemoFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *PingPongDemoOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(PingPongDemoOwnershipTransferRequested) + if err := _PingPongDemo.contract.UnpackLog(event, "OwnershipTransferRequested", 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 +} + +func (_PingPongDemo *PingPongDemoFilterer) ParseOwnershipTransferRequested(log types.Log) (*PingPongDemoOwnershipTransferRequested, error) { + event := new(PingPongDemoOwnershipTransferRequested) + if err := _PingPongDemo.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type PingPongDemoOwnershipTransferredIterator struct { + Event *PingPongDemoOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *PingPongDemoOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(PingPongDemoOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(PingPongDemoOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *PingPongDemoOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *PingPongDemoOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type PingPongDemoOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_PingPongDemo *PingPongDemoFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*PingPongDemoOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &PingPongDemoOwnershipTransferredIterator{contract: _PingPongDemo.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_PingPongDemo *PingPongDemoFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *PingPongDemoOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(PingPongDemoOwnershipTransferred) + if err := _PingPongDemo.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 +} + +func (_PingPongDemo *PingPongDemoFilterer) ParseOwnershipTransferred(log types.Log) (*PingPongDemoOwnershipTransferred, error) { + event := new(PingPongDemoOwnershipTransferred) + if err := _PingPongDemo.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type PingPongDemoPingIterator struct { + Event *PingPongDemoPing + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *PingPongDemoPingIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(PingPongDemoPing) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(PingPongDemoPing) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *PingPongDemoPingIterator) Error() error { + return it.fail +} + +func (it *PingPongDemoPingIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type PingPongDemoPing struct { + PingPongCount *big.Int + Raw types.Log +} + +func (_PingPongDemo *PingPongDemoFilterer) FilterPing(opts *bind.FilterOpts) (*PingPongDemoPingIterator, error) { + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "Ping") + if err != nil { + return nil, err + } + return &PingPongDemoPingIterator{contract: _PingPongDemo.contract, event: "Ping", logs: logs, sub: sub}, nil +} + +func (_PingPongDemo *PingPongDemoFilterer) WatchPing(opts *bind.WatchOpts, sink chan<- *PingPongDemoPing) (event.Subscription, error) { + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "Ping") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(PingPongDemoPing) + if err := _PingPongDemo.contract.UnpackLog(event, "Ping", 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 +} + +func (_PingPongDemo *PingPongDemoFilterer) ParsePing(log types.Log) (*PingPongDemoPing, error) { + event := new(PingPongDemoPing) + if err := _PingPongDemo.contract.UnpackLog(event, "Ping", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type PingPongDemoPongIterator struct { + Event *PingPongDemoPong + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *PingPongDemoPongIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(PingPongDemoPong) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(PingPongDemoPong) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *PingPongDemoPongIterator) Error() error { + return it.fail +} + +func (it *PingPongDemoPongIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type PingPongDemoPong struct { + PingPongCount *big.Int + Raw types.Log +} + +func (_PingPongDemo *PingPongDemoFilterer) FilterPong(opts *bind.FilterOpts) (*PingPongDemoPongIterator, error) { + + logs, sub, err := _PingPongDemo.contract.FilterLogs(opts, "Pong") + if err != nil { + return nil, err + } + return &PingPongDemoPongIterator{contract: _PingPongDemo.contract, event: "Pong", logs: logs, sub: sub}, nil +} + +func (_PingPongDemo *PingPongDemoFilterer) WatchPong(opts *bind.WatchOpts, sink chan<- *PingPongDemoPong) (event.Subscription, error) { + + logs, sub, err := _PingPongDemo.contract.WatchLogs(opts, "Pong") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(PingPongDemoPong) + if err := _PingPongDemo.contract.UnpackLog(event, "Pong", 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 +} + +func (_PingPongDemo *PingPongDemoFilterer) ParsePong(log types.Log) (*PingPongDemoPong, error) { + event := new(PingPongDemoPong) + if err := _PingPongDemo.contract.UnpackLog(event, "Pong", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (_PingPongDemo *PingPongDemo) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _PingPongDemo.abi.Events["OutOfOrderExecutionChange"].ID: + return _PingPongDemo.ParseOutOfOrderExecutionChange(log) + case _PingPongDemo.abi.Events["OwnershipTransferRequested"].ID: + return _PingPongDemo.ParseOwnershipTransferRequested(log) + case _PingPongDemo.abi.Events["OwnershipTransferred"].ID: + return _PingPongDemo.ParseOwnershipTransferred(log) + case _PingPongDemo.abi.Events["Ping"].ID: + return _PingPongDemo.ParsePing(log) + case _PingPongDemo.abi.Events["Pong"].ID: + return _PingPongDemo.ParsePong(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (PingPongDemoOutOfOrderExecutionChange) Topic() common.Hash { + return common.HexToHash("0x05a3fef9935c9013a24c6193df2240d34fcf6b0ebf8786b85efe8401d696cdd9") +} + +func (PingPongDemoOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (PingPongDemoOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (PingPongDemoPing) Topic() common.Hash { + return common.HexToHash("0x48257dc961b6f792c2b78a080dacfed693b660960a702de21cee364e20270e2f") +} + +func (PingPongDemoPong) Topic() common.Hash { + return common.HexToHash("0x58b69f57828e6962d216502094c54f6562f3bf082ba758966c3454f9e37b1525") +} + +func (_PingPongDemo *PingPongDemo) Address() common.Address { + return _PingPongDemo.address +} + +type PingPongDemoInterface interface { + GetCounterpartAddress(opts *bind.CallOpts) (common.Address, error) + + GetCounterpartChainSelector(opts *bind.CallOpts) (uint64, error) + + GetFeeToken(opts *bind.CallOpts) (common.Address, error) + + GetOutOfOrderExecution(opts *bind.CallOpts) (bool, error) + + GetRouter(opts *bind.CallOpts) (common.Address, error) + + IsPaused(opts *bind.CallOpts) (bool, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + CcipReceive(opts *bind.TransactOpts, message ClientAny2EVMMessage) (*types.Transaction, error) + + SetCounterpart(opts *bind.TransactOpts, counterpartChainSelector uint64, counterpartAddress common.Address) (*types.Transaction, error) + + SetCounterpartAddress(opts *bind.TransactOpts, addr common.Address) (*types.Transaction, error) + + SetCounterpartChainSelector(opts *bind.TransactOpts, chainSelector uint64) (*types.Transaction, error) + + SetOutOfOrderExecution(opts *bind.TransactOpts, outOfOrderExecution bool) (*types.Transaction, error) + + SetPaused(opts *bind.TransactOpts, pause bool) (*types.Transaction, error) + + StartPingPong(opts *bind.TransactOpts) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + FilterOutOfOrderExecutionChange(opts *bind.FilterOpts) (*PingPongDemoOutOfOrderExecutionChangeIterator, error) + + WatchOutOfOrderExecutionChange(opts *bind.WatchOpts, sink chan<- *PingPongDemoOutOfOrderExecutionChange) (event.Subscription, error) + + ParseOutOfOrderExecutionChange(log types.Log) (*PingPongDemoOutOfOrderExecutionChange, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*PingPongDemoOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *PingPongDemoOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*PingPongDemoOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*PingPongDemoOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *PingPongDemoOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*PingPongDemoOwnershipTransferred, error) + + FilterPing(opts *bind.FilterOpts) (*PingPongDemoPingIterator, error) + + WatchPing(opts *bind.WatchOpts, sink chan<- *PingPongDemoPing) (event.Subscription, error) + + ParsePing(log types.Log) (*PingPongDemoPing, error) + + FilterPong(opts *bind.FilterOpts) (*PingPongDemoPongIterator, error) + + WatchPong(opts *bind.WatchOpts, sink chan<- *PingPongDemoPong) (event.Subscription, error) + + ParsePong(log types.Log) (*PingPongDemoPong, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var PingPongDemoZKBin string = ("0x00030000000000020005000000000002000200000001035500000060031002700000017b0030019d0000017b0330019700000001002001900000012f0000c13d0000008002000039000000400020043f000000040030008c000004640000413d000000000201043b000000e002200270000001890020009c000001620000213d000001960020009c000001810000a13d000001970020009c000001da0000a13d000001980020009c000002640000613d000001990020009c000002420000613d0000019a0020009c000004640000c13d000000240030008c000004640000413d0000000002000416000000000002004b000004640000c13d0000000401100370000000000101043b000300000001001d000001830010009c000004640000213d000000030130006a000001aa0010009c000004640000213d000000a40010008c000004640000413d000001ab01000041000000000010044300000000010004120000000400100443000000240000044300000000010004140000017b0010009c0000017b01008041000000c001100210000001ac011001c7000080050200003905e805e30000040f00000001002001900000040a0000613d000000400200043d000000000101043b0000017e011001970000000003000411000000000013004b0000040b0000c13d000001ad0020009c000004d30000213d000000a001200039000000400010043f000000030500002900000004035000390000000201000367000000000331034f000000000303043b00000000043204360000002403500039000000000531034f000000000505043b000001830050009c000004640000213d00000000005404350000002005300039000000000351034f000000000303043b000001830030009c000004640000213d00000003093000290000002306900039000001ae076001970000000003000031000001ae04300197000000000847013f000000000047004b0000000007000019000001ae07004041000000000036004b0000000006000019000001ae06008041000001ae0080009c000000000706c019000000000007004b000004640000c13d000000040a9000390000000006a1034f000000000606043b000001830060009c000004d30000213d0000001f07600039000001c5077001970000003f07700039000001c508700197000000400700043d0000000008870019000000000078004b000000000b000039000000010b004039000001830080009c000004d30000213d0000000100b00190000004d30000c13d000000400080043f000000000867043600000000096900190000002409900039000000000039004b000004640000213d0000002009a00039000000000a91034f000001c50b6001980000001f0c60018f0000000009b80019000000860000613d000000000d0a034f000000000e08001900000000df0d043c000000000efe043600000000009e004b000000820000c13d00000000000c004b000000930000613d000000000aba034f000000030bc00210000000000c090433000000000cbc01cf000000000cbc022f000000000a0a043b000001000bb00089000000000aba022f000000000aba01cf000000000aca019f0000000000a9043500000000066800190000000000060435000000400620003900000000007604350000002006500039000000000561034f000000000505043b000001830050009c000004640000213d00000003095000290000002305900039000000000035004b0000000007000019000001ae07008041000001ae05500197000000000845013f000000000045004b0000000005000019000001ae05004041000001ae0080009c000000000507c019000000000005004b000004640000c13d000000040a9000390000000005a1034f000000000505043b000001830050009c000004d30000213d0000001f07500039000001c5077001970000003f07700039000001c508700197000000400700043d0000000008870019000000000078004b000000000b000039000000010b004039000001830080009c000004d30000213d0000000100b00190000004d30000c13d000000400080043f000000000857043600000000095900190000002409900039000000000039004b000004640000213d0000002009a00039000000000a91034f000001c50b5001980000001f0c50018f0000000009b80019000000ce0000613d000000000d0a034f000000000e08001900000000df0d043c000000000efe043600000000009e004b000000ca0000c13d00000000000c004b000000db0000613d000000000aba034f000000030bc00210000000000c090433000000000cbc01cf000000000cbc022f000000000a0a043b000001000bb00089000000000aba022f000000000aba01cf000000000aca019f0000000000a9043500000000055800190000000000050435000000600520003900000000007504350000002006600039000000000661034f000000000606043b000001830060009c000004640000213d00000003066000290000002307600039000000000037004b0000000008000019000001ae08008041000001ae07700197000000000947013f000000000047004b0000000004000019000001ae04004041000001ae0090009c000000000408c019000000000004004b000004640000c13d0000000404600039000000000441034f000000000804043b000001830080009c000004d30000213d00000005048002100000003f04400039000001af07400197000000400400043d0000000007740019000000000047004b00000000090000390000000109004039000001830070009c000004d30000213d0000000100900190000004d30000c13d000000400070043f0000000000840435000000240660003900000006078002100000000007670019000000000037004b000004640000213d000000000008004b000004720000c13d0000008001200039000000000041043500000000010504330000000012010434000001aa0020009c000004640000213d000000200020008c000004640000413d0000000202000039000000000202041a000300000002001d000001a900200198000004230000c13d0000000001010433000000010010003a000005a30000413d0000000102100039000000400100043d00000000002104350000017b0010009c0000017b010080410000004001100210000200000002001d00000001002001900000048c0000c13d00000000020004140000017b0020009c0000017b02008041000000c002200210000000000112019f000001b1011001c70000800d020000390000000103000039000001b304000041000004950000013d000000a004000039000000400040043f0000000002000416000000000002004b000004640000c13d0000001f023000390000017c02200197000000a002200039000000400020043f0000001f0530018f0000017d06300198000000a002600039000001410000613d000000000701034f000000007807043c0000000004840436000000000024004b0000013d0000c13d000000000005004b0000014e0000613d000000000161034f0000000304500210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000400030008c000004640000413d000000a00300043d0000017e0030009c000004640000213d000000c00200043d0000017e0020009c000004640000213d0000017e01300198000002070000c13d000000400100043d00000187020000410000000000210435000000040210003900000000000204350000017b0010009c0000017b01008041000000400110021000000188011001c7000005ea000104300000018a0020009c0000019c0000a13d0000018b0020009c000001e30000a13d0000018c0020009c000002880000613d0000018d0020009c0000025b0000613d0000018e0020009c000004640000c13d000000240030008c000004640000413d0000000002000416000000000002004b000004640000c13d0000000401100370000000000601043b0000017e0060009c000004640000213d0000000101000039000000000101041a0000017e011001970000000005000411000000000015004b0000039d0000c13d000000000056004b000004140000c13d000001a401000041000000800010043f000001a501000041000005ea000104300000019d0020009c000001b20000213d000001a00020009c000002130000613d000001a10020009c000004640000c13d000000240030008c000004640000413d0000000002000416000000000002004b000004640000c13d0000000401100370000000000201043b000000000002004b0000000001000039000000010100c039000300000002001d000000000012004b000004640000c13d05e805bb0000040f000000030000006b0000000001000019000001bc0100c0410000000202000039000000000302041a0000018003300197000001c70000013d000001910020009c000001cb0000213d000001940020009c000002240000613d000001950020009c000004640000c13d000000240030008c000004640000413d0000000002000416000000000002004b000004640000c13d0000000401100370000000000101043b000300000001001d0000017e0010009c000004640000213d05e805bb0000040f0000000201000039000000000201041a0000017f022001970000000303000029000002030000013d0000019e0020009c000002290000613d0000019f0020009c000004640000c13d000000240030008c000004640000413d0000000002000416000000000002004b000004640000c13d0000000401100370000000000101043b000300000001001d000001830010009c000004640000213d05e805bb0000040f0000000301000029000000a001100210000001a7011001970000000102000039000000000302041a000001a803300197000000000113019f000000000012041b0000000001000019000005e90001042e000001920020009c0000023d0000613d000001930020009c000004640000c13d0000000001000416000000000001004b000004640000c13d0000000001000412000500000001001d000400000000003d0000000001000415000000050110008a000000050110021005e805cb0000040f000002600000013d0000019b0020009c000002920000613d0000019c0020009c000004640000c13d0000000001000416000000000001004b000004640000c13d00000002010000390000025f0000013d0000018f0020009c000003740000613d000001900020009c000004640000c13d000000440030008c000004640000413d0000000002000416000000000002004b000004640000c13d0000000402100370000000000202043b000300000002001d000001830020009c000004640000213d0000002401100370000000000101043b000200000001001d0000017e0010009c000004640000213d05e805bb0000040f0000000301000029000000a001100210000001a7011001970000000102000039000000000302041a000001a803300197000000000113019f000000000012041b0000000201000039000000000201041a0000017f022001970000000203000029000000000232019f000000000021041b0000000001000019000005e90001042e000000800030043f000000400b00043d0000000003000411000000000003004b0000037f0000c13d000001850100004100000000001b04350000017b00b0009c0000017b0b0080410000004001b0021000000186011001c7000005ea00010430000000240030008c000004640000413d0000000002000416000000000002004b000004640000c13d0000000401100370000000000101043b000001c200100198000004640000c13d000001c30010009c00000000020000390000000102006039000001c40010009c00000001022061bf000000800020043f000001a601000041000005e90001042e0000000001000416000000000001004b000004640000c13d00000001010000390000025f0000013d0000000001000416000000000001004b000004640000c13d000000c001000039000000400010043f0000001201000039000000800010043f000001c001000041000000a00010043f0000002001000039000000c00010043f0000008001000039000000e00200003905e805a90000040f000000c00110008a0000017b0010009c0000017b010080410000006001100210000001c1011001c7000005e90001042e0000000001000416000000000001004b000004640000c13d0000000301000039000003780000013d0000000001000416000000000001004b000004640000c13d000000000100041a0000017e021001970000000006000411000000000026004b000003e80000c13d0000000102000039000000000302041a0000017f04300197000000000464019f000000000042041b0000017f01100197000000000010041b00000000010004140000017e053001970000017b0010009c0000017b01008041000000c001100210000001a2011001c70000800d020000390000000303000039000001bb04000041000004200000013d0000000001000416000000000001004b000004640000c13d0000000301000039000000000101041a0000017e01100197000000800010043f000001a601000041000005e90001042e000000240030008c000004640000413d0000000002000416000000000002004b000004640000c13d0000000401100370000000000101043b000000000001004b0000000002000039000000010200c039000000000021004b000004640000c13d0000000102000039000000000202041a0000017e022001970000000003000411000000000023004b0000039d0000c13d0000000302000039000000000302041a0000018003300197000000000001004b0000000004000019000001bc0400c041000000000343019f000000000032041b000000800010043f00000000010004140000017b0010009c0000017b01008041000000c001100210000001bd011001c70000800d020000390000000103000039000001be04000041000004200000013d0000000001000416000000000001004b000004640000c13d0000000101000039000000000101041a000000a0011002700000018301100197000000800010043f000001a601000041000005e90001042e0000000001000416000000000001004b000004640000c13d0000000103000039000000000103041a0000017e011001970000000002000411000000000012004b0000039d0000c13d0000000201000039000000000201041a000300000002001d0000018002200197000000000021041b000000800030043f00000000010004140000017b0010009c0000017b01008041000000c001100210000001bd011001c70000800d02000039000001b20400004105e805de0000040f0000000100200190000004640000613d00000003010000290000017e02100197000000400100043d0000002003100039000000000023043500000020020000390000000000210435000001b00010009c000004d30000213d0000004004100039000000400040043f0000006003100039000000010500003900000000005304350000000000240435000001b40010009c000004d30000213d0000008005100039000000400050043f000001ad0010009c000004d30000213d000000a002100039000000400020043f0000000000050435000000400300043d000001b00030009c000004d30000213d0000000302000039000000000202041a0000004006300039000000400060043f000001a9002001980000000006000039000000010600c03900000020073000390000000000670435000001b5060000410000000000630435000000400600043d0000002008600039000001b60900004100000000009804350000000003030433000000240860003900000000003804350000000003070433000000000003004b0000000003000039000000010300c0390000004407600039000000000037043500000044030000390000000000360435000001b40060009c000004d30000213d0000008007600039000000400070043f000001b70060009c000004d30000213d0000012003600039000000400030043f00000000001704350000017e01200197000000e0026000390000000000120435000000c003600039000000000053043500000100016000390000000000610435000000a00560003900000000004504350000000104000039000000000404041a000000400900043d000000240690003900000040080000390000000000860435000001b8060000410000000000690435000000a00440027000000183044001970000000406900039000000000046043500000000040704330000004406900039000000a0070000390000000000760435000000e40890003900000000760404340000000000680435000300000009001d0000010404900039000000000006004b000003110000613d00000000080000190000000009480019000000000a870019000000000a0a04330000000000a904350000002008800039000000000068004b0000030a0000413d000000000764001900000000000704350000001f06600039000001c506600197000000000464001900000003070000290000000006740049000000440660008a00000000050504330000006407700039000000000067043500000000650504340000000004540436000000000005004b000003280000613d000000000700001900000000084700190000000009760019000000000909043300000000009804350000002007700039000000000057004b000003210000413d000000000654001900000000000604350000001f05500039000001c505500197000000000654001900000003070000290000000004760049000000440540008a00000000040304330000008403700039000000000053043500000000050404330000000003560436000000000005004b000003430000613d00000000060000190000002004400039000000000704043300000000870704340000017e0770019700000000077304360000000008080433000000000087043500000040033000390000000106600039000000000056004b000003380000413d00000000020204330000017e022001970000000305000029000000a40450003900000000002404350000000002530049000000440220008a0000000001010433000000c404500039000000000024043500000000160104340000000005630436000000000006004b000003590000613d000000000200001900000000035200190000000004210019000000000404043300000000004304350000002002200039000000000062004b000003520000413d000200000005001d000100000006001d00000000016500190000000000010435000001ab01000041000000000010044300000000010004120000000400100443000000240000044300000000010004140000017b0010009c0000017b01008041000000c001100210000001ac011001c7000080050200003905e805e30000040f00000001002001900000040a0000613d000000000201043b00000000010004140000017e02200197000000040020008c000004250000c13d0000000104000031000000200040008c0000002004008039000004570000013d0000000001000416000000000001004b000004640000c13d0000000201000039000000000101041a000001a9001001980000000001000039000000010100c039000000800010043f000001a601000041000005e90001042e0000017e022001970000000105000039000000000405041a0000017f04400197000000000334019f000000000035041b0000000203000039000000000403041a0000018004400197000000000043041b0000000303000039000000000403041a0000017f04400197000000000424019f000000000043041b0000002403b00039000000010400008a0000000000430435000001810300004100000000003b04350000000403b0003900000000001304350000000001000414000000040020008c000003a10000c13d0000000103000031000000200030008c00000020040000390000000004034019000003cc0000013d000001bf01000041000000800010043f000001a501000041000005ea000104300000017b00b0009c0000017b0300004100000000030b401900000040033002100000017b0010009c0000017b01008041000000c001100210000000000131019f00000182011001c700030000000b001d05e805de0000040f000000030b00002900000060031002700000017b03300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000003bc0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000003b80000c13d000000000006004b000003c90000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0000000100200190000003ec0000613d0000001f01400039000000600210018f0000000001b20019000000000021004b00000000020000390000000102004039000001830010009c000004d30000213d0000000100200190000004d30000c13d000000400010043f000000200030008c000004640000413d00000000010b0433000000000001004b0000000002000039000000010200c039000000000021004b000004640000c13d000000800100043d0000014000000443000001600010044300000020010000390000010000100443000000010100003900000120001004430000018401000041000005e90001042e000001ba01000041000000800010043f000001a501000041000005ea000104300000001f0530018f0000017d06300198000000400200043d0000000004620019000003f70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000003f30000c13d000000000005004b000004040000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f000000000014043500000060013002100000017b0020009c0000017b020080410000004002200210000000000112019f000005ea00010430000000000001042f00000187010000410000000000120435000000040120003900000000003104350000017b0020009c0000017b02008041000000400120021000000188011001c7000005ea00010430000000000100041a0000017f01100197000000000161019f000000000010041b00000000010004140000017b0010009c0000017b01008041000000c001100210000001a2011001c70000800d020000390000000303000039000001a30400004105e805de0000040f0000000100200190000004640000613d0000000001000019000005e90001042e00000001030000290000001f03300039000001c5033001970000000305000029000000000353004900000002033000290000017b0050009c0000017b04000041000000000405401900000040044002100000017b0030009c0000017b030080410000006003300210000000000343019f0000017b0010009c0000017b01008041000000c001100210000000000131019f05e805de0000040f00000060031002700000017b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000305700029000004470000613d000000000801034f0000000309000029000000008a08043c0000000009a90436000000000059004b000004430000c13d000000000006004b000004540000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0000000100200190000004660000613d0000001f01400039000000600210018f0000000301200029000000000021004b00000000020000390000000102004039000001830010009c000004d30000213d0000000100200190000004d30000c13d000000400010043f000000200040008c000004230000813d0000000001000019000005ea000104300000001f0530018f0000017d06300198000000400200043d0000000004620019000003f70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000046d0000c13d000003f70000013d00000000080400190000000009630049000001aa0090009c000004640000213d000000400090008c000004640000413d000000400900043d000001b00090009c000004d30000213d000000400a9000390000004000a0043f000000000a61034f000000000a0a043b0000017e00a0009c000004640000213d0000002008800039000000000aa90436000000200b600039000000000bb1034f000000000b0b043b0000000000ba043500000000009804350000004006600039000000000076004b000004730000413d0000010c0000013d00000000020004140000017b0020009c0000017b02008041000000c002200210000000000112019f000001b1011001c70000800d020000390000000103000039000001b20400004105e805de0000040f0000000100200190000004640000613d00000003010000290000017e02100197000000400100043d0000002003100039000000000023043500000020020000390000000000210435000001b00010009c000004d30000213d0000004004100039000000400040043f0000006003100039000000020500002900000000005304350000000000240435000001b40010009c000004d30000213d0000008005100039000000400050043f000001ad0010009c000004d30000213d000000a002100039000000400020043f0000000000050435000000400300043d000001b00030009c000004d30000213d0000000302000039000000000202041a0000004006300039000000400060043f000001a9002001980000000006000039000000010600c03900000020073000390000000000670435000001b5060000410000000000630435000000400600043d0000002008600039000001b60900004100000000009804350000000003030433000000240860003900000000003804350000000003070433000000000003004b0000000003000039000000010300c0390000004407600039000000000037043500000044030000390000000000360435000001b40060009c000004d30000213d0000008007600039000000400070043f000001b70060009c000004d90000a13d000001b901000041000000000010043f0000004101000039000000040010043f0000018801000041000005ea000104300000012003600039000000400030043f00000000001704350000017e01200197000000e0026000390000000000120435000000c003600039000000000053043500000100016000390000000000610435000000a00560003900000000004504350000000104000039000000000404041a000000400900043d000000240690003900000040080000390000000000860435000001b8060000410000000000690435000000a00440027000000183044001970000000406900039000000000046043500000000040704330000004406900039000000a0070000390000000000760435000000e40690003900000000740404340000000000460435000300000009001d0000010406900039000000000004004b000005040000613d00000000080000190000000009680019000000000a870019000000000a0a04330000000000a904350000002008800039000000000048004b000004fd0000413d000000000746001900000000000704350000001f04400039000001c504400197000000000446001900000003070000290000000006740049000000440660008a00000000050504330000006407700039000000000067043500000000650504340000000004540436000000000005004b0000051b0000613d000000000700001900000000084700190000000009760019000000000909043300000000009804350000002007700039000000000057004b000005140000413d000000000654001900000000000604350000001f05500039000001c505500197000000000654001900000003070000290000000004760049000000440540008a00000000040304330000008403700039000000000053043500000000050404330000000003560436000000000005004b000005360000613d00000000060000190000002004400039000000000704043300000000870704340000017e0770019700000000077304360000000008080433000000000087043500000040033000390000000106600039000000000056004b0000052b0000413d00000000020204330000017e022001970000000305000029000000a40450003900000000002404350000000002530049000000440220008a0000000001010433000000c404500039000000000024043500000000420104340000000001230436000000000002004b0000054c0000613d000000000300001900000000051300190000000006340019000000000606043300000000006504350000002003300039000000000023004b000005450000413d0000000003210019000000000003043500000000030004140000000004000411000000040040008c000005570000c13d0000000103000031000000200030008c00000020040000390000000004034019000005890000013d0000001f02200039000001c5022001970000000304000029000000000242004900000000011200190000017b0010009c0000017b0100804100000060011002100000017b0040009c0000017b0200004100000000020440190000004002200210000000000121019f0000017b0030009c0000017b03008041000000c002300210000000000112019f000000000200041105e805de0000040f00000060031002700000017b03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000305700029000005790000613d000000000801034f0000000309000029000000008a08043c0000000009a90436000000000059004b000005750000c13d000000000006004b000005860000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0000000100200190000005970000613d0000001f01400039000000600210018f0000000301200029000000000021004b00000000020000390000000102004039000001830010009c000004d30000213d0000000100200190000004d30000c13d000000400010043f000000200030008c000004230000813d000004640000013d0000001f0530018f0000017d06300198000000400200043d0000000004620019000003f70000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000059e0000c13d000003f70000013d000001b901000041000000000010043f0000001101000039000000040010043f0000018801000041000005ea0001043000000000430104340000000001320436000000000003004b000005b50000613d000000000200001900000000052100190000000006240019000000000606043300000000006504350000002002200039000000000032004b000005ae0000413d000000000231001900000000000204350000001f02300039000001c5022001970000000001210019000000000001042d0000000101000039000000000101041a0000017e011001970000000002000411000000000012004b000005c20000c13d000000000001042d000000400100043d000001bf0200004100000000002104350000017b0010009c0000017b01008041000000400110021000000186011001c7000005ea00010430000000000001042f000001ab0200004100000000002004430000000501100270000000000201003100000004002004430000000101010031000000240010044300000000010004140000017b0010009c0000017b01008041000000c001100210000001ac011001c7000080050200003905e805e30000040f0000000100200190000005dd0000613d000000000101043b000000000001042d000000000001042f000005e1002104210000000102000039000000000001042d0000000002000019000000000001042d000005e6002104230000000102000039000000000001042d0000000002000019000000000001042d000005e800000432000005e90001042e000005ea00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff095ea7b3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff00000002000000000000000000000000000000800000010000000000000000009b15e16f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000d7f73334000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000000000008da5cb5a00000000000000000000000000000000000000000000000000000000b187bd2500000000000000000000000000000000000000000000000000000000bee518a300000000000000000000000000000000000000000000000000000000bee518a400000000000000000000000000000000000000000000000000000000ca709a2500000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000b187bd2600000000000000000000000000000000000000000000000000000000b5a1101100000000000000000000000000000000000000000000000000000000ae90de5400000000000000000000000000000000000000000000000000000000ae90de5500000000000000000000000000000000000000000000000000000000b0f479a1000000000000000000000000000000000000000000000000000000008da5cb5b000000000000000000000000000000000000000000000000000000009d2aede5000000000000000000000000000000000000000000000000000000002874d8be00000000000000000000000000000000000000000000000000000000665ed53600000000000000000000000000000000000000000000000000000000665ed5370000000000000000000000000000000000000000000000000000000079ba50970000000000000000000000000000000000000000000000000000000085572ffb000000000000000000000000000000000000000000000000000000002874d8bf000000000000000000000000000000000000000000000000000000002b6e5d6300000000000000000000000000000000000000000000000000000000181f5a7600000000000000000000000000000000000000000000000000000000181f5a77000000000000000000000000000000000000000000000000000000001892b9060000000000000000000000000000000000000000000000000000000001ffc9a70000000000000000000000000000000000000000000000000000000016c38b3c0200000000000000000000000000000000000000000000000000000000000000ed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278dad89dca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000800000000000000000000000000000000000000000000000000000002000000080000000000000000000000000ffffffffffffffff0000000000000000000000000000000000000000ffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff0000000000000000000000ff00000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e0200000200000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5f80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffffbf020000000000000000000000000000000000002000000000000000000000000048257dc961b6f792c2b78a080dacfed693b660960a702de21cee364e20270e2f58b69f57828e6962d216502094c54f6562f3bf082ba758966c3454f9e37b1525000000000000000000000000000000000000000000000000ffffffffffffff7f0000000000000000000000000000000000000000000000000000000000030d40181dcf1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffedf96f4e9f9000000000000000000000000000000000000000000000000000000004e487b710000000000000000000000000000000000000000000000000000000002b543c6000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e00000000000000000000000010000000000000000000000000000000000000000020000000000000000000000000000000000002000000080000000000000000005a3fef9935c9013a24c6193df2240d34fcf6b0ebf8786b85efe8401d696cdd92b5c74de0000000000000000000000000000000000000000000000000000000050696e67506f6e6744656d6f20312e352e3000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffc9a70000000000000000000000000000000000000000000000000000000085572ffb00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000000000000000000000000000000000000000000000000000000000000") diff --git a/core/gethwrappers/ccip/generated_zks/registry_module_owner_custom/registry_module_owner_custom.go b/core/gethwrappers/ccip/generated_zks/registry_module_owner_custom/registry_module_owner_custom.go new file mode 100644 index 00000000000..814eeec7b18 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/registry_module_owner_custom/registry_module_owner_custom.go @@ -0,0 +1,408 @@ +package registry_module_owner_custom + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var RegistryModuleOwnerCustomMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AddressZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"CanOnlySelfRegister\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"msgSender\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"RequiredRoleNotFound\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"administrator\",\"type\":\"address\"}],\"name\":\"AdministratorRegistered\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"registerAccessControlDefaultAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"registerAdminViaGetCCIPAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"registerAdminViaOwner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60a060405234801561001057600080fd5b5060405161064a38038061064a83398101604081905261002f91610067565b6001600160a01b03811661005657604051639fabe1c160e01b815260040160405180910390fd5b6001600160a01b0316608052610097565b60006020828403121561007957600080fd5b81516001600160a01b038116811461009057600080fd5b9392505050565b6080516105986100b260003960006103db01526105986000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063181f5a771461005157806369c0081e146100a357806396ea2f7a146100b8578063ff12c354146100cb575b600080fd5b61008d6040518060400160405280601f81526020017f52656769737472794d6f64756c654f776e6572437573746f6d20312e362e300081525081565b60405161009a9190610480565b60405180910390f35b6100b66100b136600461050f565b6100de565b005b6100b66100c636600461050f565b610255565b6100b66100d936600461050f565b6102d0565b60008173ffffffffffffffffffffffffffffffffffffffff1663a217fddf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561012b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061014f9190610533565b6040517f91d148540000000000000000000000000000000000000000000000000000000081526004810182905233602482015290915073ffffffffffffffffffffffffffffffffffffffff8316906391d1485490604401602060405180830381865afa1580156101c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e7919061054c565b610247576040517f86e0b3440000000000000000000000000000000000000000000000000000000081523360048201526024810182905273ffffffffffffffffffffffffffffffffffffffff831660448201526064015b60405180910390fd5b610251823361031f565b5050565b6102cd818273ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102c8919061056e565b61031f565b50565b6102cd818273ffffffffffffffffffffffffffffffffffffffff16638fd6a6ac6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102a4573d6000803e3d6000fd5b73ffffffffffffffffffffffffffffffffffffffff8116331461038e576040517fc454d18200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301528316602482015260440161023e565b6040517fe677ae3700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff838116600483015282811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063e677ae3790604401600060405180830381600087803b15801561041f57600080fd5b505af1158015610433573d6000803e3d6000fd5b505060405173ffffffffffffffffffffffffffffffffffffffff8085169350851691507f09590fb70af4b833346363965e043a9339e8c7d378b8a2b903c75c277faec4f990600090a35050565b60006020808352835180602085015260005b818110156104ae57858101830151858201604001528201610492565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b73ffffffffffffffffffffffffffffffffffffffff811681146102cd57600080fd5b60006020828403121561052157600080fd5b813561052c816104ed565b9392505050565b60006020828403121561054557600080fd5b5051919050565b60006020828403121561055e57600080fd5b8151801515811461052c57600080fd5b60006020828403121561058057600080fd5b815161052c816104ed56fea164736f6c6343000818000a", +} + +var RegistryModuleOwnerCustomABI = RegistryModuleOwnerCustomMetaData.ABI + +var RegistryModuleOwnerCustomBin = RegistryModuleOwnerCustomMetaData.Bin + +func DeployRegistryModuleOwnerCustom(auth *bind.TransactOpts, backend bind.ContractBackend, tokenAdminRegistry common.Address) (common.Address, *generated_zks.Transaction, *RegistryModuleOwnerCustom, error) { + parsed, err := RegistryModuleOwnerCustomMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(RegistryModuleOwnerCustomZKBin), backend, tokenAdminRegistry) + contractReturn := &RegistryModuleOwnerCustom{address: address, abi: *parsed, RegistryModuleOwnerCustomCaller: RegistryModuleOwnerCustomCaller{contract: contractBind}, RegistryModuleOwnerCustomTransactor: RegistryModuleOwnerCustomTransactor{contract: contractBind}, RegistryModuleOwnerCustomFilterer: RegistryModuleOwnerCustomFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(RegistryModuleOwnerCustomBin), backend, tokenAdminRegistry) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &RegistryModuleOwnerCustom{address: address, abi: *parsed, RegistryModuleOwnerCustomCaller: RegistryModuleOwnerCustomCaller{contract: contract}, RegistryModuleOwnerCustomTransactor: RegistryModuleOwnerCustomTransactor{contract: contract}, RegistryModuleOwnerCustomFilterer: RegistryModuleOwnerCustomFilterer{contract: contract}}, nil +} + +type RegistryModuleOwnerCustom struct { + address common.Address + abi abi.ABI + RegistryModuleOwnerCustomCaller + RegistryModuleOwnerCustomTransactor + RegistryModuleOwnerCustomFilterer +} + +type RegistryModuleOwnerCustomCaller struct { + contract *bind.BoundContract +} + +type RegistryModuleOwnerCustomTransactor struct { + contract *bind.BoundContract +} + +type RegistryModuleOwnerCustomFilterer struct { + contract *bind.BoundContract +} + +type RegistryModuleOwnerCustomSession struct { + Contract *RegistryModuleOwnerCustom + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type RegistryModuleOwnerCustomCallerSession struct { + Contract *RegistryModuleOwnerCustomCaller + CallOpts bind.CallOpts +} + +type RegistryModuleOwnerCustomTransactorSession struct { + Contract *RegistryModuleOwnerCustomTransactor + TransactOpts bind.TransactOpts +} + +type RegistryModuleOwnerCustomRaw struct { + Contract *RegistryModuleOwnerCustom +} + +type RegistryModuleOwnerCustomCallerRaw struct { + Contract *RegistryModuleOwnerCustomCaller +} + +type RegistryModuleOwnerCustomTransactorRaw struct { + Contract *RegistryModuleOwnerCustomTransactor +} + +func NewRegistryModuleOwnerCustom(address common.Address, backend bind.ContractBackend) (*RegistryModuleOwnerCustom, error) { + abi, err := abi.JSON(strings.NewReader(RegistryModuleOwnerCustomABI)) + if err != nil { + return nil, err + } + contract, err := bindRegistryModuleOwnerCustom(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &RegistryModuleOwnerCustom{address: address, abi: abi, RegistryModuleOwnerCustomCaller: RegistryModuleOwnerCustomCaller{contract: contract}, RegistryModuleOwnerCustomTransactor: RegistryModuleOwnerCustomTransactor{contract: contract}, RegistryModuleOwnerCustomFilterer: RegistryModuleOwnerCustomFilterer{contract: contract}}, nil +} + +func NewRegistryModuleOwnerCustomCaller(address common.Address, caller bind.ContractCaller) (*RegistryModuleOwnerCustomCaller, error) { + contract, err := bindRegistryModuleOwnerCustom(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &RegistryModuleOwnerCustomCaller{contract: contract}, nil +} + +func NewRegistryModuleOwnerCustomTransactor(address common.Address, transactor bind.ContractTransactor) (*RegistryModuleOwnerCustomTransactor, error) { + contract, err := bindRegistryModuleOwnerCustom(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &RegistryModuleOwnerCustomTransactor{contract: contract}, nil +} + +func NewRegistryModuleOwnerCustomFilterer(address common.Address, filterer bind.ContractFilterer) (*RegistryModuleOwnerCustomFilterer, error) { + contract, err := bindRegistryModuleOwnerCustom(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &RegistryModuleOwnerCustomFilterer{contract: contract}, nil +} + +func bindRegistryModuleOwnerCustom(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := RegistryModuleOwnerCustomMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_RegistryModuleOwnerCustom *RegistryModuleOwnerCustomRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _RegistryModuleOwnerCustom.Contract.RegistryModuleOwnerCustomCaller.contract.Call(opts, result, method, params...) +} + +func (_RegistryModuleOwnerCustom *RegistryModuleOwnerCustomRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _RegistryModuleOwnerCustom.Contract.RegistryModuleOwnerCustomTransactor.contract.Transfer(opts) +} + +func (_RegistryModuleOwnerCustom *RegistryModuleOwnerCustomRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _RegistryModuleOwnerCustom.Contract.RegistryModuleOwnerCustomTransactor.contract.Transact(opts, method, params...) +} + +func (_RegistryModuleOwnerCustom *RegistryModuleOwnerCustomCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _RegistryModuleOwnerCustom.Contract.contract.Call(opts, result, method, params...) +} + +func (_RegistryModuleOwnerCustom *RegistryModuleOwnerCustomTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _RegistryModuleOwnerCustom.Contract.contract.Transfer(opts) +} + +func (_RegistryModuleOwnerCustom *RegistryModuleOwnerCustomTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _RegistryModuleOwnerCustom.Contract.contract.Transact(opts, method, params...) +} + +func (_RegistryModuleOwnerCustom *RegistryModuleOwnerCustomCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _RegistryModuleOwnerCustom.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_RegistryModuleOwnerCustom *RegistryModuleOwnerCustomSession) TypeAndVersion() (string, error) { + return _RegistryModuleOwnerCustom.Contract.TypeAndVersion(&_RegistryModuleOwnerCustom.CallOpts) +} + +func (_RegistryModuleOwnerCustom *RegistryModuleOwnerCustomCallerSession) TypeAndVersion() (string, error) { + return _RegistryModuleOwnerCustom.Contract.TypeAndVersion(&_RegistryModuleOwnerCustom.CallOpts) +} + +func (_RegistryModuleOwnerCustom *RegistryModuleOwnerCustomTransactor) RegisterAccessControlDefaultAdmin(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) { + return _RegistryModuleOwnerCustom.contract.Transact(opts, "registerAccessControlDefaultAdmin", token) +} + +func (_RegistryModuleOwnerCustom *RegistryModuleOwnerCustomSession) RegisterAccessControlDefaultAdmin(token common.Address) (*types.Transaction, error) { + return _RegistryModuleOwnerCustom.Contract.RegisterAccessControlDefaultAdmin(&_RegistryModuleOwnerCustom.TransactOpts, token) +} + +func (_RegistryModuleOwnerCustom *RegistryModuleOwnerCustomTransactorSession) RegisterAccessControlDefaultAdmin(token common.Address) (*types.Transaction, error) { + return _RegistryModuleOwnerCustom.Contract.RegisterAccessControlDefaultAdmin(&_RegistryModuleOwnerCustom.TransactOpts, token) +} + +func (_RegistryModuleOwnerCustom *RegistryModuleOwnerCustomTransactor) RegisterAdminViaGetCCIPAdmin(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) { + return _RegistryModuleOwnerCustom.contract.Transact(opts, "registerAdminViaGetCCIPAdmin", token) +} + +func (_RegistryModuleOwnerCustom *RegistryModuleOwnerCustomSession) RegisterAdminViaGetCCIPAdmin(token common.Address) (*types.Transaction, error) { + return _RegistryModuleOwnerCustom.Contract.RegisterAdminViaGetCCIPAdmin(&_RegistryModuleOwnerCustom.TransactOpts, token) +} + +func (_RegistryModuleOwnerCustom *RegistryModuleOwnerCustomTransactorSession) RegisterAdminViaGetCCIPAdmin(token common.Address) (*types.Transaction, error) { + return _RegistryModuleOwnerCustom.Contract.RegisterAdminViaGetCCIPAdmin(&_RegistryModuleOwnerCustom.TransactOpts, token) +} + +func (_RegistryModuleOwnerCustom *RegistryModuleOwnerCustomTransactor) RegisterAdminViaOwner(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) { + return _RegistryModuleOwnerCustom.contract.Transact(opts, "registerAdminViaOwner", token) +} + +func (_RegistryModuleOwnerCustom *RegistryModuleOwnerCustomSession) RegisterAdminViaOwner(token common.Address) (*types.Transaction, error) { + return _RegistryModuleOwnerCustom.Contract.RegisterAdminViaOwner(&_RegistryModuleOwnerCustom.TransactOpts, token) +} + +func (_RegistryModuleOwnerCustom *RegistryModuleOwnerCustomTransactorSession) RegisterAdminViaOwner(token common.Address) (*types.Transaction, error) { + return _RegistryModuleOwnerCustom.Contract.RegisterAdminViaOwner(&_RegistryModuleOwnerCustom.TransactOpts, token) +} + +type RegistryModuleOwnerCustomAdministratorRegisteredIterator struct { + Event *RegistryModuleOwnerCustomAdministratorRegistered + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RegistryModuleOwnerCustomAdministratorRegisteredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RegistryModuleOwnerCustomAdministratorRegistered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RegistryModuleOwnerCustomAdministratorRegistered) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RegistryModuleOwnerCustomAdministratorRegisteredIterator) Error() error { + return it.fail +} + +func (it *RegistryModuleOwnerCustomAdministratorRegisteredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RegistryModuleOwnerCustomAdministratorRegistered struct { + Token common.Address + Administrator common.Address + Raw types.Log +} + +func (_RegistryModuleOwnerCustom *RegistryModuleOwnerCustomFilterer) FilterAdministratorRegistered(opts *bind.FilterOpts, token []common.Address, administrator []common.Address) (*RegistryModuleOwnerCustomAdministratorRegisteredIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var administratorRule []interface{} + for _, administratorItem := range administrator { + administratorRule = append(administratorRule, administratorItem) + } + + logs, sub, err := _RegistryModuleOwnerCustom.contract.FilterLogs(opts, "AdministratorRegistered", tokenRule, administratorRule) + if err != nil { + return nil, err + } + return &RegistryModuleOwnerCustomAdministratorRegisteredIterator{contract: _RegistryModuleOwnerCustom.contract, event: "AdministratorRegistered", logs: logs, sub: sub}, nil +} + +func (_RegistryModuleOwnerCustom *RegistryModuleOwnerCustomFilterer) WatchAdministratorRegistered(opts *bind.WatchOpts, sink chan<- *RegistryModuleOwnerCustomAdministratorRegistered, token []common.Address, administrator []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var administratorRule []interface{} + for _, administratorItem := range administrator { + administratorRule = append(administratorRule, administratorItem) + } + + logs, sub, err := _RegistryModuleOwnerCustom.contract.WatchLogs(opts, "AdministratorRegistered", tokenRule, administratorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RegistryModuleOwnerCustomAdministratorRegistered) + if err := _RegistryModuleOwnerCustom.contract.UnpackLog(event, "AdministratorRegistered", 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 +} + +func (_RegistryModuleOwnerCustom *RegistryModuleOwnerCustomFilterer) ParseAdministratorRegistered(log types.Log) (*RegistryModuleOwnerCustomAdministratorRegistered, error) { + event := new(RegistryModuleOwnerCustomAdministratorRegistered) + if err := _RegistryModuleOwnerCustom.contract.UnpackLog(event, "AdministratorRegistered", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (_RegistryModuleOwnerCustom *RegistryModuleOwnerCustom) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _RegistryModuleOwnerCustom.abi.Events["AdministratorRegistered"].ID: + return _RegistryModuleOwnerCustom.ParseAdministratorRegistered(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (RegistryModuleOwnerCustomAdministratorRegistered) Topic() common.Hash { + return common.HexToHash("0x09590fb70af4b833346363965e043a9339e8c7d378b8a2b903c75c277faec4f9") +} + +func (_RegistryModuleOwnerCustom *RegistryModuleOwnerCustom) Address() common.Address { + return _RegistryModuleOwnerCustom.address +} + +type RegistryModuleOwnerCustomInterface interface { + TypeAndVersion(opts *bind.CallOpts) (string, error) + + RegisterAccessControlDefaultAdmin(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) + + RegisterAdminViaGetCCIPAdmin(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) + + RegisterAdminViaOwner(opts *bind.TransactOpts, token common.Address) (*types.Transaction, error) + + FilterAdministratorRegistered(opts *bind.FilterOpts, token []common.Address, administrator []common.Address) (*RegistryModuleOwnerCustomAdministratorRegisteredIterator, error) + + WatchAdministratorRegistered(opts *bind.WatchOpts, sink chan<- *RegistryModuleOwnerCustomAdministratorRegistered, token []common.Address, administrator []common.Address) (event.Subscription, error) + + ParseAdministratorRegistered(log types.Log) (*RegistryModuleOwnerCustomAdministratorRegistered, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var RegistryModuleOwnerCustomZKBin string = ("0x00010000000000020004000000000002000000600310027000000094033001970000000100200190000000260000c13d0000008002000039000000400020043f000000040030008c000001420000413d000000000201043b000000e0022002700000009b0020009c000000530000213d0000009e0020009c000000970000613d0000009f0020009c000001420000c13d000000240030008c000001420000413d0000000002000416000000000002004b000001420000c13d0000000401100370000000000101043b000000970010009c000001420000213d0000009705100197000000a302000041000000800020043f0000000002000414000000040050008c000000c40000c13d0000000003000031000000200030008c00000020040000390000000004034019000000ed0000013d0000000002000416000000000002004b000001420000c13d0000001f023000390000009502200197000000a002200039000000400020043f0000001f0430018f0000009605300198000000a002500039000000370000613d000000a006000039000000000701034f000000007807043c0000000006860436000000000026004b000000330000c13d000000000004004b000000440000613d000000000151034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000200030008c000001420000413d000000a00100043d000000970010009c000001420000213d0000009701100198000000bb0000c13d000000400100043d00000099020000410000000000210435000000940010009c000000940100804100000040011002100000009a011001c70000024e000104300000009c0020009c000000a70000613d0000009d0020009c000001420000c13d000000240030008c000001420000413d0000000002000416000000000002004b000001420000c13d0000000401100370000000000101043b000000970010009c000001420000213d0000009702100197000000a003000041000000800030043f0000000003000414000000040020008c000000b60000613d000400000001001d000000940030009c0000009403008041000000c001300210000000a1011001c7024c02470000040f000000800a00003900000060031002700000009403300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf0000007b0000613d000000000801034f000000008908043c000000000a9a043600000000005a004b000000770000c13d000000000006004b000000880000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0000000100200190000001380000c13d0000001f0530018f0000009606300198000000400200043d0000000004620019000001a10000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000000920000c13d000001a10000013d0000000001000416000000000001004b000001420000c13d000000c001000039000000400010043f0000001f01000039000000800010043f000000a802000041000000a00020043f0000002003000039000000c00030043f000000e00010043f000001000020043f0000011f0000043f000000a9010000410000024d0001042e000000240030008c000001420000413d0000000002000416000000000002004b000001420000c13d0000000401100370000000000101043b000000970010009c000001420000213d0000009702100197000000a203000041000000800030043f0000000003000414000000040020008c000001130000c13d0000000003000031000000200030008c00000020040000390000000004034019000001390000013d000000800010043f00000140000004430000016000100443000000200100003900000100001004430000000101000039000001200010044300000098010000410000024d0001042e000400000001001d000000940020009c0000009402008041000000c001200210000000a1011001c7000300000005001d0000000002050019024c02470000040f00000060031002700000009403300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000000db0000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b000000d70000c13d000000000006004b000000e80000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0000000100200190000001470000613d000000040100002900000003050000290000001f02400039000000600420018f000000800b4001bf0000004000b0043f000000200030008c000001420000413d000000800600043d000000a40200004100000000002b043500000084024001bf0000000000620435000000a403400039000000000200041100000000002304350000000003000414000000040050008c0000015f0000c13d00000000044b0019000000400040043f00000000070b0433000000000007004b0000000003000039000000010300c039000000000037004b000001420000c13d000000000007004b000001440000c13d000000a601000041000000000014043500000004014001bf000000000021043500000044024000390000000000520435000000240240003900000000006204350000004001400210000000a7011001c70000024e00010430000400000001001d000000940030009c0000009403008041000000c001300210000000a1011001c7024c02470000040f00000060031002700000009403300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000001280000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b000001240000c13d000000000006004b000001350000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0000000100200190000001530000613d00000004010000290000001f02400039000000600220018f00000080022001bf000000400020043f000000200030008c000001420000413d000000800200043d000000970020009c000001440000a13d00000000010000190000024e00010430024c01b40000040f00000000010000190000024d0001042e0000001f0530018f0000009606300198000000400200043d0000000004620019000001a10000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000014e0000c13d000001a10000013d0000001f0530018f0000009606300198000000400200043d0000000004620019000001a10000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000015a0000c13d000001a10000013d000100000006001d000400000001001d000000940030009c0000009403008041000000c0013002100000004002b00210000000000121019f000000a5011001c7000300000005001d000000000205001900020000000b001d024c02470000040f000000020b00002900000060031002700000009403300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b00190000017b0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000001770000c13d000000000006004b000001880000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000000003001f0000000100200190000001960000613d0000001f01400039000000600110018f0000000004b10019000000400040043f000000200030008c0000000401000029000000030500002900000001060000290000000002000411000001000000813d000001420000013d0000001f0530018f0000009606300198000000400200043d0000000004620019000001a10000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000019d0000c13d000000000005004b000001ae0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000000940020009c00000094020080410000004002200210000000000112019f0000024e000104300003000000000002000200000001001d000300970020019b0000000001000411000000030010006b0000020d0000c13d000000ab0100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000000940010009c0000009401008041000000c001100210000000ac011001c70000800502000039024c02470000040f00000001002001900000020a0000613d000000000101043b000000ad0200004100000000002004430000009701100197000100000001001d00000004001004430000000001000414000000940010009c0000009401008041000000c001100210000000ae011001c70000800202000039024c02470000040f00000001002001900000020a0000613d000000000101043b000000000001004b0000020b0000613d000000400400043d000000240140003900000003020000290000000000210435000000af010000410000000000140435000000020100002900000097051001970000000401400039000000000051043500000000010004140000000102000029000000040020008c000001fa0000613d000000940040009c000000940300004100000000030440190000004003300210000000940010009c0000009401008041000000c001100210000000000131019f000000a5011001c7000200000005001d000100000004001d024c02420000040f000000010400002900000002050000290000006003100270000000940030019d0000000100200190000002220000613d000000b00040009c0000021c0000813d000000400040043f0000000001000414000000940010009c0000009401008041000000c001100210000000b1011001c70000800d020000390000000303000039000000b2040000410000000306000029024c02420000040f00000001002001900000020b0000613d000000000001042d000000000001042f00000000010000190000024e0001043000000002010000290000009701100197000000400200043d00000024032000390000000000130435000000aa010000410000000000120435000000040120003900000003030000290000000000310435000000940020009c00000094020080410000004001200210000000a5011001c70000024e00010430000000b301000041000000000010043f0000004101000039000000040010043f000000b4010000410000024e0001043000000094033001970000001f0530018f0000009606300198000000400200043d00000000046200190000022e0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000022a0000c13d000000000005004b0000023b0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000000940020009c00000094020080410000004002200210000000000112019f0000024e00010430000000000001042f00000245002104210000000102000039000000000001042d0000000002000019000000000001042d0000024a002104230000000102000039000000000001042d0000000002000019000000000001042d0000024c000004320000024d0001042e0000024e00010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000002000000000000000000000000000000800000010000000000000000009fabe1c10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000096ea2f790000000000000000000000000000000000000000000000000000000096ea2f7a00000000000000000000000000000000000000000000000000000000ff12c35400000000000000000000000000000000000000000000000000000000181f5a770000000000000000000000000000000000000000000000000000000069c0081e8fd6a6ac0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000008000000000000000008da5cb5b00000000000000000000000000000000000000000000000000000000a217fddf0000000000000000000000000000000000000000000000000000000091d1485400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004400000000000000000000000086e0b34400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006400000000000000000000000052656769737472794d6f64756c654f776e6572437573746f6d20312e362e30000000000000000000000000000000000000000060000000c00000000000000000c454d18200000000000000000000000000000000000000000000000000000000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e02000002000000000000000000000000000000440000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000e677ae37000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000020000000000000000000000000000000000000000000000000000000000000009590fb70af4b833346363965e043a9339e8c7d378b8a2b903c75c277faec4f94e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000") diff --git a/core/gethwrappers/ccip/generated_zks/report_codec/report_codec.go b/core/gethwrappers/ccip/generated_zks/report_codec/report_codec.go new file mode 100644 index 00000000000..7bc29c27c99 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/report_codec/report_codec.go @@ -0,0 +1,567 @@ +package report_codec + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type IRMNRemoteSignature struct { + R [32]byte + S [32]byte +} + +type InternalAny2EVMRampMessage struct { + Header InternalRampMessageHeader + Sender []byte + Data []byte + Receiver common.Address + GasLimit *big.Int + TokenAmounts []InternalAny2EVMTokenTransfer +} + +type InternalAny2EVMTokenTransfer struct { + SourcePoolAddress []byte + DestTokenAddress common.Address + DestGasAmount uint32 + ExtraData []byte + Amount *big.Int +} + +type InternalExecutionReport struct { + SourceChainSelector uint64 + Messages []InternalAny2EVMRampMessage + OffchainTokenData [][][]byte + Proofs [][32]byte + ProofFlagBits *big.Int +} + +type InternalGasPriceUpdate struct { + DestChainSelector uint64 + UsdPerUnitGas *big.Int +} + +type InternalMerkleRoot struct { + SourceChainSelector uint64 + OnRampAddress []byte + MinSeqNr uint64 + MaxSeqNr uint64 + MerkleRoot [32]byte +} + +type InternalPriceUpdates struct { + TokenPriceUpdates []InternalTokenPriceUpdate + GasPriceUpdates []InternalGasPriceUpdate +} + +type InternalRampMessageHeader struct { + MessageId [32]byte + SourceChainSelector uint64 + DestChainSelector uint64 + SequenceNumber uint64 + Nonce uint64 +} + +type InternalTokenPriceUpdate struct { + SourceToken common.Address + UsdPerToken *big.Int +} + +type OffRampCommitReport struct { + PriceUpdates InternalPriceUpdates + MerkleRoots []InternalMerkleRoot + RmnSignatures []IRMNRemoteSignature +} + +var ReportCodecMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMNRemote.Signature[]\",\"name\":\"rmnSignatures\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"report\",\"type\":\"tuple\"}],\"name\":\"CommitReportDecoded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structInternal.ExecutionReport[]\",\"name\":\"report\",\"type\":\"tuple[]\"}],\"name\":\"ExecuteReportDecoded\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"decodeCommitReport\",\"outputs\":[{\"components\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMNRemote.Signature[]\",\"name\":\"rmnSignatures\",\"type\":\"tuple[]\"}],\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"decodeExecuteReport\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReport[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b506113c3806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80636fb349561461003b578063f816ec6014610064575b600080fd5b61004e610049366004610231565b610084565b60405161005b91906104ee565b60405180910390f35b610077610072366004610231565b6100a0565b60405161005b9190610833565b60608180602001905181019061009a9190610e6d565b92915050565b6040805160a08101825260608082018181526080830182905282526020808301829052928201528251909161009a918401810190840161122d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561012d5761012d6100db565b60405290565b60405160c0810167ffffffffffffffff8111828210171561012d5761012d6100db565b6040805190810167ffffffffffffffff8111828210171561012d5761012d6100db565b6040516060810167ffffffffffffffff8111828210171561012d5761012d6100db565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156101e3576101e36100db565b604052919050565b600067ffffffffffffffff821115610205576102056100db565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60006020828403121561024357600080fd5b813567ffffffffffffffff81111561025a57600080fd5b8201601f8101841361026b57600080fd5b803561027e610279826101eb565b61019c565b81815285602083850101111561029357600080fd5b81602084016020830137600091810160200191909152949350505050565b60005b838110156102cc5781810151838201526020016102b4565b50506000910152565b600081518084526102ed8160208601602086016102b1565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b848110156103eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018952815160a08151818652610380828701826102d5565b91505073ffffffffffffffffffffffffffffffffffffffff868301511686860152604063ffffffff81840151168187015250606080830151868303828801526103c983826102d5565b608094850151979094019690965250509884019892509083019060010161033c565b5090979650505050505050565b6000828251808552602080860195506005818360051b8501018287016000805b868110156104a3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe088850381018c5283518051808752908801908887019080891b88018a01865b8281101561048c57858a830301845261047a8286516102d5565b948c0194938c01939150600101610460565b509e8a019e97505050938701935050600101610418565b50919998505050505050505050565b60008151808452602080850194506020840160005b838110156104e3578151875295820195908201906001016104c7565b509495945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156106d6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452815160a0860167ffffffffffffffff8083511688528883015160a08a8a015282815180855260c08b01915060c08160051b8c010194508b8301925060005b8181101561067f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408c87030183528351805180518852868f820151168f890152866040820151166040890152866060820151166060890152866080820151166080890152508d81015161014060a08901526106026101408901826102d5565b9050604082015188820360c08a015261061b82826102d5565b915050606082015161064560e08a018273ffffffffffffffffffffffffffffffffffffffff169052565b50608082015161010089015260a0820151915087810361012089015261066b818361031f565b97505050928c0192918c0191600101610582565b50505050506040820151878203604089015261069b82826103f8565b915050606082015187820360608901526106b582826104b2565b60809384015198909301979097525094509285019290850190600101610515565b5092979650505050505050565b60008151808452602080850194506020840160005b838110156104e3578151805167ffffffffffffffff1688528301517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1683880152604090960195908201906001016106f8565b600082825180855260208086019550808260051b84010181860160005b848110156103eb577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868403018952815160a067ffffffffffffffff8083511686528683015182888801526107bb838801826102d5565b60408581015184169089015260608086015190931692880192909252506080928301519290950191909152509783019790830190600101610764565b60008151808452602080850194506020840160005b838110156104e357815180518852830151838801526040909601959082019060010161080c565b602080825282516060838301528051604060808501819052815160c086018190526000949392840191859160e08801905b808410156108c1578451805173ffffffffffffffffffffffffffffffffffffffff1683528701517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1687830152938601936001939093019290820190610864565b50938501518785037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800160a0890152936108fb81866106e3565b9450505050508185015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08085830301604086015261093c8284610747565b925060408601519150808584030160608601525061095a82826107f7565b95945050505050565b600067ffffffffffffffff82111561097d5761097d6100db565b5060051b60200190565b805167ffffffffffffffff8116811461099f57600080fd5b919050565b600060a082840312156109b657600080fd5b6109be61010a565b9050815181526109d060208301610987565b60208201526109e160408301610987565b60408201526109f260608301610987565b6060820152610a0360808301610987565b608082015292915050565b600082601f830112610a1f57600080fd5b8151610a2d610279826101eb565b818152846020838601011115610a4257600080fd5b610a538260208301602087016102b1565b949350505050565b805173ffffffffffffffffffffffffffffffffffffffff8116811461099f57600080fd5b600082601f830112610a9057600080fd5b81516020610aa061027983610963565b82815260059290921b84018101918181019086841115610abf57600080fd5b8286015b84811015610bbb57805167ffffffffffffffff80821115610ae45760008081fd5b818901915060a0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d03011215610b1d5760008081fd5b610b2561010a565b8784015183811115610b375760008081fd5b610b458d8a83880101610a0e565b8252506040610b55818601610a5b565b8983015260608086015163ffffffff81168114610b725760008081fd5b808385015250608091508186015185811115610b8e5760008081fd5b610b9c8f8c838a0101610a0e565b9184019190915250919093015190830152508352918301918301610ac3565b509695505050505050565b600082601f830112610bd757600080fd5b81516020610be761027983610963565b82815260059290921b84018101918181019086841115610c0657600080fd5b8286015b84811015610bbb57805167ffffffffffffffff80821115610c2b5760008081fd5b8189019150610140807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d03011215610c655760008081fd5b610c6d610133565b610c798c8986016109a4565b815260c084015183811115610c8e5760008081fd5b610c9c8d8a83880101610a0e565b898301525060e084015183811115610cb45760008081fd5b610cc28d8a83880101610a0e565b604083015250610cd56101008501610a5b565b60608201526101208401516080820152908301519082821115610cf85760008081fd5b610d068c8984870101610a7f565b60a08201528652505050918301918301610c0a565b600082601f830112610d2c57600080fd5b81516020610d3c61027983610963565b82815260059290921b84018101918181019086841115610d5b57600080fd5b8286015b84811015610bbb57805167ffffffffffffffff80821115610d7f57600080fd5b818901915089603f830112610d9357600080fd5b85820151610da361027982610963565b81815260059190911b830160400190878101908c831115610dc357600080fd5b604085015b83811015610dfc57805185811115610ddf57600080fd5b610dee8f6040838a0101610a0e565b845250918901918901610dc8565b50875250505092840192508301610d5f565b600082601f830112610e1f57600080fd5b81516020610e2f61027983610963565b8083825260208201915060208460051b870101935086841115610e5157600080fd5b602086015b84811015610bbb5780518352918301918301610e56565b60006020808385031215610e8057600080fd5b825167ffffffffffffffff80821115610e9857600080fd5b818501915085601f830112610eac57600080fd5b8151610eba61027982610963565b81815260059190911b83018401908481019088831115610ed957600080fd5b8585015b83811015610fd357805185811115610ef457600080fd5b860160a0818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0011215610f295760008081fd5b610f3161010a565b610f3c898301610987565b815260408083015188811115610f525760008081fd5b610f608e8c83870101610bc6565b8b8401525060608084015189811115610f795760008081fd5b610f878f8d83880101610d1b565b8385015250608091508184015189811115610fa25760008081fd5b610fb08f8d83880101610e0e565b918401919091525060a09290920151918101919091528352918601918601610edd565b5098975050505050505050565b80517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116811461099f57600080fd5b600082601f83011261101d57600080fd5b8151602061102d61027983610963565b82815260069290921b8401810191818101908684111561104c57600080fd5b8286015b84811015610bbb57604081890312156110695760008081fd5b611071610156565b61107a82610987565b8152611087858301610fe0565b81860152835291830191604001611050565b600082601f8301126110aa57600080fd5b815160206110ba61027983610963565b82815260059290921b840181019181810190868411156110d957600080fd5b8286015b84811015610bbb57805167ffffffffffffffff808211156110fe5760008081fd5b818901915060a0807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d030112156111375760008081fd5b61113f61010a565b61114a888501610987565b8152604080850151848111156111605760008081fd5b61116e8e8b83890101610a0e565b8a8401525060609350611182848601610987565b908201526080611193858201610987565b938201939093529201519082015283529183019183016110dd565b600082601f8301126111bf57600080fd5b815160206111cf61027983610963565b82815260069290921b840181019181810190868411156111ee57600080fd5b8286015b84811015610bbb576040818903121561120b5760008081fd5b611213610156565b8151815284820151858201528352918301916040016111f2565b6000602080838503121561124057600080fd5b825167ffffffffffffffff8082111561125857600080fd5b908401906060828703121561126c57600080fd5b611274610179565b82518281111561128357600080fd5b8301604081890381131561129657600080fd5b61129e610156565b8251858111156112ad57600080fd5b8301601f81018b136112be57600080fd5b80516112cc61027982610963565b81815260069190911b8201890190898101908d8311156112eb57600080fd5b928a01925b828410156113395785848f0312156113085760008081fd5b611310610156565b61131985610a5b565b81526113268c8601610fe0565b818d0152825292850192908a01906112f0565b84525050508287015191508482111561135157600080fd5b61135d8a83850161100c565b8188015283525050828401518281111561137657600080fd5b61138288828601611099565b8583015250604083015193508184111561139b57600080fd5b6113a7878585016111ae565b6040820152969550505050505056fea164736f6c6343000818000a", +} + +var ReportCodecABI = ReportCodecMetaData.ABI + +var ReportCodecBin = ReportCodecMetaData.Bin + +func DeployReportCodec(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *generated_zks.Transaction, *ReportCodec, error) { + parsed, err := ReportCodecMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(ReportCodecZKBin), backend) + contractReturn := &ReportCodec{address: address, abi: *parsed, ReportCodecCaller: ReportCodecCaller{contract: contractBind}, ReportCodecTransactor: ReportCodecTransactor{contract: contractBind}, ReportCodecFilterer: ReportCodecFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ReportCodecBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &ReportCodec{address: address, abi: *parsed, ReportCodecCaller: ReportCodecCaller{contract: contract}, ReportCodecTransactor: ReportCodecTransactor{contract: contract}, ReportCodecFilterer: ReportCodecFilterer{contract: contract}}, nil +} + +type ReportCodec struct { + address common.Address + abi abi.ABI + ReportCodecCaller + ReportCodecTransactor + ReportCodecFilterer +} + +type ReportCodecCaller struct { + contract *bind.BoundContract +} + +type ReportCodecTransactor struct { + contract *bind.BoundContract +} + +type ReportCodecFilterer struct { + contract *bind.BoundContract +} + +type ReportCodecSession struct { + Contract *ReportCodec + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type ReportCodecCallerSession struct { + Contract *ReportCodecCaller + CallOpts bind.CallOpts +} + +type ReportCodecTransactorSession struct { + Contract *ReportCodecTransactor + TransactOpts bind.TransactOpts +} + +type ReportCodecRaw struct { + Contract *ReportCodec +} + +type ReportCodecCallerRaw struct { + Contract *ReportCodecCaller +} + +type ReportCodecTransactorRaw struct { + Contract *ReportCodecTransactor +} + +func NewReportCodec(address common.Address, backend bind.ContractBackend) (*ReportCodec, error) { + abi, err := abi.JSON(strings.NewReader(ReportCodecABI)) + if err != nil { + return nil, err + } + contract, err := bindReportCodec(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ReportCodec{address: address, abi: abi, ReportCodecCaller: ReportCodecCaller{contract: contract}, ReportCodecTransactor: ReportCodecTransactor{contract: contract}, ReportCodecFilterer: ReportCodecFilterer{contract: contract}}, nil +} + +func NewReportCodecCaller(address common.Address, caller bind.ContractCaller) (*ReportCodecCaller, error) { + contract, err := bindReportCodec(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ReportCodecCaller{contract: contract}, nil +} + +func NewReportCodecTransactor(address common.Address, transactor bind.ContractTransactor) (*ReportCodecTransactor, error) { + contract, err := bindReportCodec(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ReportCodecTransactor{contract: contract}, nil +} + +func NewReportCodecFilterer(address common.Address, filterer bind.ContractFilterer) (*ReportCodecFilterer, error) { + contract, err := bindReportCodec(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ReportCodecFilterer{contract: contract}, nil +} + +func bindReportCodec(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ReportCodecMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_ReportCodec *ReportCodecRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ReportCodec.Contract.ReportCodecCaller.contract.Call(opts, result, method, params...) +} + +func (_ReportCodec *ReportCodecRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ReportCodec.Contract.ReportCodecTransactor.contract.Transfer(opts) +} + +func (_ReportCodec *ReportCodecRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ReportCodec.Contract.ReportCodecTransactor.contract.Transact(opts, method, params...) +} + +func (_ReportCodec *ReportCodecCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ReportCodec.Contract.contract.Call(opts, result, method, params...) +} + +func (_ReportCodec *ReportCodecTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ReportCodec.Contract.contract.Transfer(opts) +} + +func (_ReportCodec *ReportCodecTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ReportCodec.Contract.contract.Transact(opts, method, params...) +} + +func (_ReportCodec *ReportCodecCaller) DecodeCommitReport(opts *bind.CallOpts, report []byte) (OffRampCommitReport, error) { + var out []interface{} + err := _ReportCodec.contract.Call(opts, &out, "decodeCommitReport", report) + + if err != nil { + return *new(OffRampCommitReport), err + } + + out0 := *abi.ConvertType(out[0], new(OffRampCommitReport)).(*OffRampCommitReport) + + return out0, err + +} + +func (_ReportCodec *ReportCodecSession) DecodeCommitReport(report []byte) (OffRampCommitReport, error) { + return _ReportCodec.Contract.DecodeCommitReport(&_ReportCodec.CallOpts, report) +} + +func (_ReportCodec *ReportCodecCallerSession) DecodeCommitReport(report []byte) (OffRampCommitReport, error) { + return _ReportCodec.Contract.DecodeCommitReport(&_ReportCodec.CallOpts, report) +} + +func (_ReportCodec *ReportCodecCaller) DecodeExecuteReport(opts *bind.CallOpts, report []byte) ([]InternalExecutionReport, error) { + var out []interface{} + err := _ReportCodec.contract.Call(opts, &out, "decodeExecuteReport", report) + + if err != nil { + return *new([]InternalExecutionReport), err + } + + out0 := *abi.ConvertType(out[0], new([]InternalExecutionReport)).(*[]InternalExecutionReport) + + return out0, err + +} + +func (_ReportCodec *ReportCodecSession) DecodeExecuteReport(report []byte) ([]InternalExecutionReport, error) { + return _ReportCodec.Contract.DecodeExecuteReport(&_ReportCodec.CallOpts, report) +} + +func (_ReportCodec *ReportCodecCallerSession) DecodeExecuteReport(report []byte) ([]InternalExecutionReport, error) { + return _ReportCodec.Contract.DecodeExecuteReport(&_ReportCodec.CallOpts, report) +} + +type ReportCodecCommitReportDecodedIterator struct { + Event *ReportCodecCommitReportDecoded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ReportCodecCommitReportDecodedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ReportCodecCommitReportDecoded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ReportCodecCommitReportDecoded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ReportCodecCommitReportDecodedIterator) Error() error { + return it.fail +} + +func (it *ReportCodecCommitReportDecodedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ReportCodecCommitReportDecoded struct { + Report OffRampCommitReport + Raw types.Log +} + +func (_ReportCodec *ReportCodecFilterer) FilterCommitReportDecoded(opts *bind.FilterOpts) (*ReportCodecCommitReportDecodedIterator, error) { + + logs, sub, err := _ReportCodec.contract.FilterLogs(opts, "CommitReportDecoded") + if err != nil { + return nil, err + } + return &ReportCodecCommitReportDecodedIterator{contract: _ReportCodec.contract, event: "CommitReportDecoded", logs: logs, sub: sub}, nil +} + +func (_ReportCodec *ReportCodecFilterer) WatchCommitReportDecoded(opts *bind.WatchOpts, sink chan<- *ReportCodecCommitReportDecoded) (event.Subscription, error) { + + logs, sub, err := _ReportCodec.contract.WatchLogs(opts, "CommitReportDecoded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ReportCodecCommitReportDecoded) + if err := _ReportCodec.contract.UnpackLog(event, "CommitReportDecoded", 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 +} + +func (_ReportCodec *ReportCodecFilterer) ParseCommitReportDecoded(log types.Log) (*ReportCodecCommitReportDecoded, error) { + event := new(ReportCodecCommitReportDecoded) + if err := _ReportCodec.contract.UnpackLog(event, "CommitReportDecoded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ReportCodecExecuteReportDecodedIterator struct { + Event *ReportCodecExecuteReportDecoded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ReportCodecExecuteReportDecodedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ReportCodecExecuteReportDecoded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ReportCodecExecuteReportDecoded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ReportCodecExecuteReportDecodedIterator) Error() error { + return it.fail +} + +func (it *ReportCodecExecuteReportDecodedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ReportCodecExecuteReportDecoded struct { + Report []InternalExecutionReport + Raw types.Log +} + +func (_ReportCodec *ReportCodecFilterer) FilterExecuteReportDecoded(opts *bind.FilterOpts) (*ReportCodecExecuteReportDecodedIterator, error) { + + logs, sub, err := _ReportCodec.contract.FilterLogs(opts, "ExecuteReportDecoded") + if err != nil { + return nil, err + } + return &ReportCodecExecuteReportDecodedIterator{contract: _ReportCodec.contract, event: "ExecuteReportDecoded", logs: logs, sub: sub}, nil +} + +func (_ReportCodec *ReportCodecFilterer) WatchExecuteReportDecoded(opts *bind.WatchOpts, sink chan<- *ReportCodecExecuteReportDecoded) (event.Subscription, error) { + + logs, sub, err := _ReportCodec.contract.WatchLogs(opts, "ExecuteReportDecoded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ReportCodecExecuteReportDecoded) + if err := _ReportCodec.contract.UnpackLog(event, "ExecuteReportDecoded", 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 +} + +func (_ReportCodec *ReportCodecFilterer) ParseExecuteReportDecoded(log types.Log) (*ReportCodecExecuteReportDecoded, error) { + event := new(ReportCodecExecuteReportDecoded) + if err := _ReportCodec.contract.UnpackLog(event, "ExecuteReportDecoded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (_ReportCodec *ReportCodec) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _ReportCodec.abi.Events["CommitReportDecoded"].ID: + return _ReportCodec.ParseCommitReportDecoded(log) + case _ReportCodec.abi.Events["ExecuteReportDecoded"].ID: + return _ReportCodec.ParseExecuteReportDecoded(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (ReportCodecCommitReportDecoded) Topic() common.Hash { + return common.HexToHash("0x31a4e1cb25733cdb9679561cd59cdc238d70a7d486f8bfc1f13242efd60fc29d") +} + +func (ReportCodecExecuteReportDecoded) Topic() common.Hash { + return common.HexToHash("0x9467c8093a35a72f74398d5b6e351d67dc82eddc378efc6177eafb4fc7a01d39") +} + +func (_ReportCodec *ReportCodec) Address() common.Address { + return _ReportCodec.address +} + +type ReportCodecInterface interface { + DecodeCommitReport(opts *bind.CallOpts, report []byte) (OffRampCommitReport, error) + + DecodeExecuteReport(opts *bind.CallOpts, report []byte) ([]InternalExecutionReport, error) + + FilterCommitReportDecoded(opts *bind.FilterOpts) (*ReportCodecCommitReportDecodedIterator, error) + + WatchCommitReportDecoded(opts *bind.WatchOpts, sink chan<- *ReportCodecCommitReportDecoded) (event.Subscription, error) + + ParseCommitReportDecoded(log types.Log) (*ReportCodecCommitReportDecoded, error) + + FilterExecuteReportDecoded(opts *bind.FilterOpts) (*ReportCodecExecuteReportDecodedIterator, error) + + WatchExecuteReportDecoded(opts *bind.WatchOpts, sink chan<- *ReportCodecExecuteReportDecoded) (event.Subscription, error) + + ParseExecuteReportDecoded(log types.Log) (*ReportCodecExecuteReportDecoded, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var ReportCodecZKBin string = ("0x000e0000000000020000000100200190000000890000c13d0000006002100270000001f904200197000001a003000039000000400030043f000000040040008c000000b70000413d000000000201043b000000e002200270000001fb0020009c000000930000613d000001fc0020009c000000b70000c13d000000240040008c000000b70000413d0000000002000416000000000002004b000000b70000c13d0000000402100370000000000602043b000001fd0060009c000000b70000213d0000002302600039000000000042004b000000b70000813d0000000407600039000000000271034f000000000502043b000002070050009c000000aa0000813d0000001f025000390000020c022001970000003f022000390000020c02200197000001fe0020009c000000aa0000213d000001a002200039000000400020043f000001a00050043f00000000025600190000002402200039000000000042004b000000b70000213d0000002002700039000000000421034f0000020c065001980000001f0750018f000001c001600039000000390000613d000001c008000039000000000904034f000000009209043c0000000008280436000000000018004b000000350000c13d000000000007004b000000460000613d000000000264034f0000000304700210000000000601043300000000064601cf000000000646022f000000000202043b0000010004400089000000000242022f00000000024201cf000000000262019f0000000000210435000001c0015000390000000000010435000000e00030043f000001a00300043d000001800030043f000002010030009c000000b70000213d000000200030008c000000b70000413d000001c00100043d000001200010043f000001fd0010009c000000b70000213d000001c002300039000001df03100039000000000023004b0000000004000019000002020400804100000202022001970000020203300197000000000523013f000000000023004b00000000020000190000020202004041000002020050009c000000000204c019000000000002004b000000b70000c13d000001c0011000390000000001010433000001000010043f000001fd0010009c000000aa0000213d00000005021002100000003f022000390000020302200197000000400300043d0000000002230019000000000032004b00000000040000390000000104004039000001fd0020009c000000aa0000213d0000000100400190000000aa0000c13d000000400020043f000000a00030043f000001600030043f0000000000130435000000a00100043d0000002001100039000000a00010043f000001400010043f000000e00100043d000001800200043d0000000005120019000001200200043d00000000031200190000004004300039000001000200043d000000050220021000000000022400190000002005500039000000000052004b000000b70000213d000000c00040043f000000d40000013d0000008001000039000000400010043f0000000001000416000000000001004b000000b70000c13d000000200100003900000100001004430000012000000443000001fa01000041000007df0001042e000000240040008c000000b70000413d0000000002000416000000000002004b000000b70000c13d0000000402100370000000000502043b000001fd0050009c000000b70000213d0000002302500039000000000042004b000000b70000813d0000000406500039000000000261034f000000000302043b000001fd0030009c000000aa0000213d0000001f073000390000020c077001970000003f077000390000020c07700197000001fe0070009c000000b00000a13d0000020a01000041000000000010043f0000004101000039000000040010043f0000020b01000041000007e000010430000001a007700039000000400070043f000001a00030043f00000000053500190000002405500039000000000045004b000004540000a13d0000000001000019000007e000010430000000030400002900000060014000390000000000310435000001200100043d000000800200043d0000000001120019000000e00200043d0000000001210019000000c001100039000000000101043300000080024000390000000000120435000000a00100043d0000000000410435000000a00100043d0000002001100039000000a00010043f000000c00100043d0000002004100039000000c00040043f000001200200043d000000e00100043d0000000003210019000001000200043d000000050220021000000000023200190000004002200039000000000024004b0000064e0000813d0000000002040433000000800020043f000001fd0020009c000000b70000213d00000000033200190000000001310049000001800200043d0000000001210019000000200110008a000002010010009c000000b70000213d000000a00010008c000000b70000413d000000400100043d000300000001001d000002000010009c000000aa0000213d0000000301000029000000a001100039000000400010043f00000040013000390000000001010433000001fd0010009c000000b70000213d00000003020000290000000001120436000100000001001d000000800100043d000001200200043d0000000001120019000000e00200043d000000000121001900000060031000390000000003030433000b00000003001d000001fd0030009c000000b70000213d0000000b01100029000001800300043d000000000232001900000020022000390000005f03100039000000000023004b0000000004000019000002020400804100000202022001970000020203300197000000000523013f000000000023004b00000000020000190000020202004041000002020050009c000000000204c019000000000002004b000000b70000c13d00000040011000390000000003010433000001fd0030009c000000aa0000213d00000005013002100000003f021000390000020302200197000000400400043d0000000002240019000200000004001d000000000042004b00000000040000390000000104004039000001fd0020009c000000aa0000213d0000000100400190000000aa0000c13d000000400020043f00000002020000290000000000320435000000e00300043d0000000b02300029000000800400043d0000000002420019000001200400043d0000000004420019000001800200043d0000000002320019000800600010003d00000008014000290000002002200039000000000021004b000000b70000213d0000006002400039000000000012004b000003360000813d0000000b01000029000400e00010003d000500c00010003d000600a00010003d000700800010003d0000000205000029000001490000013d000000090500002900000020055000390000000d02000029000000a0012000390000000c0300002900000000003104350000000000250435000000800100043d0000000b01100029000001200200043d0000000001210019000000e00300043d000000000431001900000008014000290000000a02000029000000000012004b000003360000813d000900000005001d0000000021020434000a00000002001d000001fd0010009c000000b70000213d00000000044100190000000002430049000001800300043d0000000002320019000000400220008a000002010020009c000000b70000213d000001400020008c000000b70000413d000000400200043d000d00000002001d000002080020009c000000aa0000213d0000000d02000029000000c003200039000000400030043f000002090020009c000000aa0000213d0000000d020000290000016002200039000000400020043f0000006002400039000000000202043300000000002304350000000702100029000000800400043d0000000002420019000001200400043d0000000002420019000000e00400043d00000000024200190000000002020433000001fd0020009c000000b70000213d0000000d04000029000000e0044000390000000000240435000000060e100029000000800200043d0000000002e20019000001200400043d0000000002420019000000e00400043d00000000024200190000000002020433000001fd0020009c000000b70000213d0000000d0400002900000100044000390000000000240435000000050f100029000000800200043d0000000002f20019000001200400043d0000000002420019000000e00400043d00000000024200190000000002020433000001fd0020009c000000b70000213d0000000d04000029000001200440003900000000002404350000000402100029000000800400043d0000000002420019000001200400043d0000000002420019000000e00400043d00000000024200190000000002020433000001fd0020009c000000b70000213d0000000d040000290000000003340436000001400440003900000000002404350000000b01100029000000800200043d0000000002120019000001200400043d0000000004420019000000e00200043d000000000424001900000100054000390000000005050433000001fd0050009c000000b70000213d0000000005540019000001800400043d0000000002420019000000200620003900000202026001970000007f045000390000020207400197000000000827013f000000000027004b00000000020000190000020202004041000000000064004b00000000040000190000020204008041000002020080009c000000000204c019000000000002004b000000b70000c13d00000060025000390000000004020433000001fd0040009c000000aa0000213d0000001f024000390000020c022001970000003f022000390000020c02200197000000400700043d0000000002270019000000000072004b00000000080000390000000108004039000001fd0020009c000000aa0000213d0000000100800190000000aa0000c13d000000400020043f000000000847043600000080055000390000000002540019000000000062004b000000b70000213d000000000004004b000001d90000613d000000000600001900000000028600190000000009560019000000000909043300000000009204350000002006600039000000000046004b000001d20000413d000000000248001900000000000204350000000000730435000000800200043d0000000002120019000001200300043d0000000003320019000000e00200043d000000000323001900000120043000390000000004040433000001fd0040009c000000b70000213d0000000004430019000001800300043d0000000002320019000000200520003900000202025001970000007f034000390000020206300197000000000726013f000000000026004b00000000020000190000020202004041000000000053004b00000000030000190000020203008041000002020070009c000000000203c019000000000002004b000000b70000c13d00000060024000390000000003020433000001fd0030009c000000aa0000213d0000001f023000390000020c022001970000003f022000390000020c02200197000000400600043d0000000002260019000000000062004b00000000070000390000000107004039000001fd0020009c000000aa0000213d0000000100700190000000aa0000c13d000000400020043f000000000736043600000080044000390000000002430019000000000052004b000000b70000213d000000000003004b000002190000613d000000000500001900000000027500190000000008450019000000000808043300000000008204350000002005500039000000000035004b000002120000413d000000000237001900000000000204350000000d0200002900000040022000390000000000620435000000800200043d0000000002210019000001200300043d0000000002320019000000e00300043d000000000232001900000140022000390000000002020433000002050020009c000000b70000213d0000000d0400002900000060034000390000000000230435000000800200043d0000000002210019000001200300043d0000000002320019000000e00300043d00000000023200190000016002200039000000800340003900000000020204330000000000230435000000800200043d0000000002120019000001200300043d0000000003320019000000e00200043d000000000423001900000180034000390000000003030433000001fd0030009c000000b70000213d0000000004340019000001800500043d000000000252001900000020022000390000007f05400039000000000025004b0000000006000019000002020600804100000202022001970000020205500197000000000725013f000000000025004b00000000020000190000020202004041000002020070009c000000000206c019000000000002004b000000b70000c13d00000060024000390000000004020433000001fd0040009c000000aa0000213d00000005054002100000003f025000390000020302200197000000400600043d0000000002260019000c00000006001d000000000062004b00000000060000390000000106004039000001fd0020009c000000aa0000213d0000000100600190000000aa0000c13d000000400020043f0000000c0200002900000000004204350000000007130019000000e00400043d0000000002470019000000800100043d0000000002120019000001200600043d0000000008620019000001800200043d0000000002420019000000000985001900000020022000390000008009900039000000000029004b000000b70000213d0000000002410019000000200170003900000000021200190000000006620019000000600550003900000000025600190000008008800039000000000028004b000001380000813d000e000000f3001d000000000ee3001900000100097000390000000c030000290000029a0000013d000000200330003900000000024a0019000000000002043500000060026000390000000000c204350000000002b90019000000800400043d0000000002420019000001200400043d0000000002420019000000e00400043d00000000024200190000000002020433000000800460003900000000002404350000000000630435000000800200043d0000000002120019000001200400043d0000000002420019000000e00400043d00000000064200190000000002560019000000000028004b000001380000813d000000008b080434000001fd00b0009c000000b70000213d000001800200043d0000000007420019000000000a6b00190000000002a70049000000400220008a000002010020009c000000b70000213d000000a00020008c000000b70000413d000000400600043d000002000060009c000000aa0000213d000000a004600039000000400040043f0000006002a000390000000002020433000001fd0020009c000000b70000213d000000200aa00039000000000a2a0019000000200c7000390000005f02a000390000020207200197000002020dc00197000000000fd7013f0000000000d7004b000000000700001900000202070040410000000000c2004b000000000200001900000202020080410000020200f0009c000000000702c019000000000007004b000000b70000c13d0000004002a000390000000007020433000001fd0070009c000000aa0000213d0000001f027000390000020c022001970000003f022000390000020c022001970000000002420019000001fd0020009c000000aa0000213d000000400020043f0000000000740435000000600aa000390000000002a700190000000000c2004b000000b70000213d000000c00c600039000000000007004b000002dc0000613d000000000d0000190000000002cd0019000000000fad0019000000000f0f04330000000000f20435000000200dd0003900000000007d004b000002d50000413d0000000002c70019000000000002043500000000044604360000000002be0019000000800700043d0000000002720019000001200700043d0000000002720019000000e00700043d00000000027200190000000002020433000002050020009c000000b70000213d00000000002404350000000e02b00029000000800400043d0000000002420019000001200400043d0000000002420019000000e00400043d00000000024200190000000002020433000001f90020009c000000b70000213d0000004004600039000000000024043500000000021b0019000000800400043d0000000002420019000001200400043d0000000004420019000000e00200043d0000000004240019000000c0074000390000000007070433000001fd0070009c000000b70000213d0000000004470019000001800700043d0000000002720019000000200720003900000202027001970000007f0a400039000002020ca00197000000000d2c013f00000000002c004b0000000002000019000002020200404100000000007a004b000000000a000019000002020a0080410000020200d0009c00000000020ac019000000000002004b000000b70000c13d000000200d4000390000004002d000390000000004020433000001fd0040009c000000aa0000213d0000001f024000390000020c022001970000003f022000390000020c02200197000000400c00043d00000000022c00190000000000c2004b000000000a000039000000010a004039000001fd0020009c000000aa0000213d0000000100a00190000000aa0000c13d000000400020043f000000000a4c0436000000600dd000390000000002d40019000000000072004b000000b70000213d000000000004004b000002810000613d00000000070000190000000002a70019000000000fd70019000000000f0f04330000000000f204350000002007700039000000000047004b0000032e0000413d000002810000013d000000010100002900000002020000290000000000210435000000800100043d000001200200043d0000000001120019000000e00200043d000000000121001900000080031000390000000003030433000001fd0030009c000000b70000213d0000000001310019000001800400043d000000000242001900000020022000390000005f04100039000000000024004b0000000005000019000002020500804100000202022001970000020204400197000000000624013f000000000024004b00000000020000190000020202004041000002020060009c000000000205c019000000000002004b000000b70000c13d00000040011000390000000004010433000001fd0040009c000000aa0000213d00000005014002100000003f021000390000020302200197000000400500043d0000000002250019000d00000005001d000000000052004b00000000050000390000000105004039000001fd0020009c000000aa0000213d0000000100500190000000aa0000c13d000000400020043f0000000d020000290000000000420435000000e00700043d0000000002370019000000800400043d0000000002420019000001200400043d0000000009420019000001800200043d0000000002720019000e00600010003d0000000e019000290000002002200039000000000021004b000000b70000213d0000006005900039000000000015004b000004030000813d0000000d06000029000003850000013d00000020066000390000000000760435000000800100043d0000000001310019000001200200043d0000000001210019000000e00700043d00000000097100190000000e01900029000000000015004b000004030000813d0000000058050434000001fd0080009c000000b70000213d0000000001980019000001800200043d000000000227001900000020022000390000007f07100039000000000027004b0000000009000019000002020900804100000202022001970000020207700197000000000a27013f000000000027004b000000000200001900000202020040410000020200a0009c000000000209c019000000000002004b000000b70000c13d00000060011000390000000001010433000001fd0010009c000000aa0000213d00000005091002100000003f029000390000020302200197000000400700043d0000000002270019000000000072004b000000000a000039000000010a004039000001fd0020009c000000aa0000213d0000000100a00190000000aa0000c13d000000400020043f00000000001704350000000008380019000000e00c00043d00000000018c0019000000800200043d0000000001210019000001200200043d000000000d210019000001800100043d0000000002c10019000000800990003900000000019d00190000002002200039000000000021004b000000b70000213d000000800ad0003900000000001a004b0000037a0000813d000000000b070019000003cc0000013d000000200bb000390000000001c1001900000000000104350000000000fb0435000000800100043d0000000001810019000001200200043d0000000001210019000000e00c00043d000000000dc1001900000000019d001900000000001a004b0000037a0000813d00000000a10a0434000001fd0010009c000000b70000213d000000000dd10019000001800100043d00000000011c0019000000200e1000390000020201e001970000009f02d00039000002020c200197000000000f1c013f00000000001c004b000000000100001900000202010040410000000000e2004b000000000200001900000202020080410000020200f0009c000000000102c019000000000001004b000000b70000c13d0000008001d00039000000000c010433000001fd00c0009c000000aa0000213d0000001f01c000390000020c011001970000003f011000390000020c01100197000000400f00043d00000000011f00190000000000f1004b00000000020000390000000102004039000001fd0010009c000000aa0000213d0000000100200190000000aa0000c13d000000400010043f0000000001cf0436000000a00dd000390000000002dc00190000000000e2004b000000b70000213d00000000000c004b000003bf0000613d000000000e00001900000000021e00190000000004de001900000000040404330000000000420435000000200ee000390000000000ce004b000003fb0000413d000003bf0000013d000000030100002900000040011000390000000d020000290000000000210435000000800100043d000001200200043d0000000001120019000000e00200043d0000000003210019000000a0013000390000000001010433000001fd0010009c000000b70000213d0000000003130019000001800400043d000000000242001900000020022000390000005f04300039000000000024004b0000000005000019000002020500804100000202022001970000020204400197000000000624013f000000000024004b00000000020000190000020202004041000002020060009c000000000205c019000000000002004b000000b70000c13d00000040023000390000000005020433000001fd0050009c000000aa0000213d00000005045002100000003f024000390000020302200197000000400300043d0000000002230019000000000032004b00000000060000390000000106004039000001fd0020009c000000aa0000213d0000000100600190000000aa0000c13d000000400020043f0000000000530435000000e00200043d000000800500043d0000000005250019000001800600043d00000000072600190000000006150019000001200200043d0000000006260019000000600440003900000000086400190000002007700039000000000078004b000000b70000213d0000000001140019000000000415001900000000022400190000006004600039000000000024004b000000b90000813d0000000005030019000000200550003900000000420404340000000000250435000000800200043d0000000002120019000001200600043d0000000002620019000000e00600043d0000000002620019000000000024004b000004480000413d000000b90000013d0000002004600039000000000441034f0000020c053001980000001f0630018f000001c001500039000004600000613d000001c007000039000000000804034f000000008908043c0000000007970436000000000017004b0000045c0000c13d000000000006004b0000046d0000613d000000000454034f0000000305600210000000000601043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000410435000001c0013000390000000000010435000000400300043d000001ff0030009c000000aa0000213d0000006004300039000000400040043f000002000030009c000000aa0000213d000000a001300039000000400010043f000000600100003900000000001404350000004005300039000000000015043500000020053000390000000000150435000000000043043500000080033000390000000000130435000001a00900043d000002010090009c000000b70000213d000000200090008c000000b70000413d000001c00500043d000001fd0050009c000000b70000213d000001a004900039000001a0065000390000000003640049000002010030009c000000b70000213d000000600030008c000000b70000413d000000400300043d000001ff0030009c000000aa0000213d0000006008300039000000400080043f000001c0075000390000000007070433000001fd0070009c000000b70000213d000000000a6700190000000004a40049000002010040009c000000b70000213d000000400040008c000000b70000413d000002000030009c000000aa0000213d000000a004300039000e00000004001d000000400040043f0000002004a000390000000007040433000001fd0070009c000000b70000213d000001c004900039000000000ca700190000003f07c00039000000000047004b000000000b000019000002020b0080410000020207700197000d02020040019b0000000d0d70014f0000000d0070006c000000000700001900000202070040410000020200d0009c00000000070bc019000000000007004b000000b70000c13d0000002007c00039000000000e070433000001fd00e0009c000000aa0000213d0000000507e002100000003f0770003900000203077001970000000e07700029000001fd0070009c000000aa0000213d000000400070043f0000000e070000290000000000e704350000004007c00039000000060be00210000000000d7b001900000000004d004b000000b70000213d00000000000e004b0000078f0000c13d0000000e0700002900000000007804350000004007a000390000000007070433000001fd0070009c000000b70000213d000000000aa700190000003f07a00039000000000047004b000000000b000019000002020b00804100000202077001970000000d0c70014f0000000d0070006c000000000700001900000202070040410000020200c0009c00000000070bc019000000000007004b000000b70000c13d0000002007a00039000000000c070433000001fd00c0009c000000aa0000213d0000000507c002100000003f077000390000020307700197000000400b00043d00000000077b00190000000000b7004b000000000d000039000000010d004039000001fd0070009c000000aa0000213d0000000100d00190000000aa0000c13d000000400070043f0000000000cb04350000004007a00039000000060cc00210000000000c7c001900000000004c004b000000b70000213d0000000000c7004b000005140000813d000000000d0b0019000000000e0700190000000007740049000002010070009c000000b70000213d000000400070008c000000b70000413d000000400700043d000002040070009c000000aa0000213d000000400f7000390000004000f0043f000000000f0e0433000001fd00f0009c000000b70000213d000000000ff70436000000600aa00039000000000a0a04330000020600a0009c000000b70000213d000000200dd000390000000000af043500000000007d04350000004007e000390000000000c7004b000000000a0e0019000004fa0000413d0000000007830436000700000007001d00000080073000390000000000b70435000001e0075000390000000007070433000001fd0070009c000000b70000213d0000000007670019000a00000007001d0000003f07700039000000000047004b0000000008000019000002020800804100000202077001970000000d0a70014f0000000d0070006c000000000700001900000202070040410000020200a0009c000000000708c019000000000007004b000000b70000c13d0000000a0700002900000020077000390000000007070433000001fd0070009c000000aa0000213d00000005087002100000003f0a800039000002030aa00197000000400b00043d000000000aab001900060000000b001d0000000000ba004b000000000b000039000000010b004039000001fd00a0009c000000aa0000213d0000000100b00190000000aa0000c13d0000004000a0043f000000060a00002900000000007a04350000000a07000029000e00400070003d0000000e07800029000900000007001d000000000047004b000000b70000213d00000009080000290000000e0080006b000005af0000813d000801800090003d000c00060000002d0000000e080000290000000087080434000e00000008001d000001fd0070009c000000b70000213d0000000a0f7000290000000807f00069000002010070009c000000b70000213d000000a00070008c000000b70000413d000000400800043d000002000080009c000000aa0000213d000000a007800039000000400070043f0000004007f000390000000007070433000001fd0070009c000000b70000213d0000000007780436000b00000007001d0000006007f000390000000007070433000001fd0070009c000000b70000213d0000000009f700190000005f07900039000000000047004b000000000a000019000002020a00804100000202077001970000000d0b70014f0000000d0070006c000000000700001900000202070040410000020200b0009c00000000070ac019000000000007004b000000b70000c13d0000004007900039000000000a070433000001fd00a0009c000000aa0000213d0000001f07a000390000020c077001970000003f077000390000020c07700197000000400d00043d00000000077d00190000000000d7004b000000000b000039000000010b004039000001fd0070009c000000aa0000213d0000000100b00190000000aa0000c13d000000400070043f0000000007ad04360000006009900039000000000b9a001900000000004b004b000000b70000213d00000000000a004b000005940000613d000000000b000019000000000c7b0019000000000e9b0019000000000e0e04330000000000ec0435000000200bb000390000000000ab004b0000058d0000413d0000000007a7001900000000000704350000000b070000290000000000d704350000008007f000390000000007070433000001fd0070009c000000b70000213d00000040098000390000000000790435000000a007f000390000000007070433000001fd0070009c000000b70000213d0000000c0a000029000000200aa0003900000060098000390000000000790435000000c007f00039000000000707043300000080098000390000000000790435000c0000000a001d00000000008a043500000009080000290000000e0080006b0000054b0000413d00000007070000290000000608000029000000000087043500000200055000390000000005050433000001fd0050009c000000b70000213d00000000056500190000003f06500039000000000046004b0000000007000019000002020700804100000202066001970000000d0860014f0000000d0060006c00000000060000190000020206004041000002020080009c000000000607c019000000000006004b000000b70000c13d00000020065000390000000007060433000001fd0070009c000000aa0000213d00000005067002100000003f066000390000020308600197000000400600043d0000000008860019000000000068004b00000000090000390000000109004039000001fd0080009c000000aa0000213d0000000100900190000000aa0000c13d000000400080043f0000000000760435000000060770021000000040055000390000000007750019000000000047004b000000b70000213d000000000075004b000005f10000813d00000000080600190000000009540049000002010090009c000000b70000213d000000400090008c000000b70000413d000000400900043d000002040090009c000000aa0000213d0000002008800039000000400a9000390000004000a0043f00000000ba050434000000000aa90436000000000b0b04330000000000ba043500000000009804350000004005500039000000000075004b000005de0000413d0000004004300039000d00000004001d00000000006404350000002006000039000000400400043d0000000006640436000000000303043300000000001604350000008007400039000000400800003900000000160304340000000000870435000000c00340003900000000070604330000000000730435000e00000004001d000000e003400039000000000007004b000006110000613d00000000080000190000002006600039000000000906043300000000a909043400000205099001970000000009930436000000000a0a0433000002060aa001970000000000a9043500000040033000390000000108800039000000000078004b000006050000413d0000000e040000290000000006430049000000800760008a0000000006010433000000a001400039000000000071043500000000070604330000000001730436000000000007004b000006280000613d0000000003000019000000200660003900000000080604330000000098080434000001fd08800197000000000881043600000000090904330000020609900197000000000098043500000040011000390000000103300039000000000073004b0000061c0000413d0000000e040000290000000003410049000000200630008a000000070300002900000000030304330000004007400039000000000067043500000000070304330000000000710435000000050670021000000000066100190000002006600039000000000007004b000007aa0000c13d0000000e030000290000000001360049000000200110008a0000000d0200002900000000020204330000006003300039000000000013043500000000030204330000000001360436000000000003004b0000064c0000613d000000000500001900000020022000390000000004020433000000006404043400000000044104360000000006060433000000000064043500000040011000390000000105500039000000000035004b000006420000413d0000000e020000290000065c0000013d000000400300043d00000020010000390000000001130436000001600200043d00000000020204330000000000210435000500000003001d000800400030003d00000005012002100000000801100029000400000002001d000000000002004b000006650000c13d00000005020000290000000001210049000001f90010009c000001f9010080410000006001100210000001f90020009c000001f9020080410000004002200210000000000121019f000007df0001042e000001400600043d00000000040000190000000003010019000006740000013d00000007060000290000008002700039000000090300002900000080033000390000000003030433000000000032043500000006040000290000000104400039000000040040006c00000000030100190000065b0000813d000600000004001d000000050130006a000000400110008a00000008020000290000000002120436000800000002001d0000000061060434000700000006001d000900000001001d0000000021010434000001fd0110019700000000011304360000000004020433000000a0020000390000000000210435000000a00130003900000000020404330000000000210435000000c0053000390000000501200210000000000b510019000a00000002001d000000000002004b000b00000003001d0000073a0000613d0000000002000019000006960000013d0000000c0200002900000001022000390000000a0020006c0000000b030000290000000e040000290000000d050000290000073a0000813d000c00000002001d00000000013b0049000000c00110008a0000000005150436000d00000005001d0000002004400039000e00000004001d00000000010404330000000032010434000000005402043400000000044b04360000000005050433000001fd05500197000000000054043500000040042000390000000004040433000001fd044001970000004005b00039000000000045043500000060042000390000000004040433000001fd044001970000006005b00039000000000045043500000080022000390000000002020433000001fd022001970000008004b0003900000000002404350000000002030433000000a003b00039000001400400003900000000004304350000014004b00039000000005302043400000000003404350000016004b00039000000000003004b000006c50000613d000000000600001900000000024600190000000008650019000000000808043300000000008204350000002006600039000000000036004b000006be0000413d000000000243001900000000000204350000001f023000390000020c022001970000000002420019000000400310003900000000030304330000000004b20049000000c005b00039000000000045043500000000540304340000000003420436000000000004004b000006db0000613d000000000600001900000000023600190000000008650019000000000808043300000000008204350000002006600039000000000046004b000006d40000413d00000000023400190000000000020435000000600210003900000000020204330000020502200197000000e005b000390000000000250435000000800210003900000000020204330000010005b0003900000000002504350000001f024000390000020c02200197000000000a3200190000000002ba00490000012004b00039000000a00110003900000000030104330000000000240435000000000403043300000000004a0435000000050140021000000000011a0019000000200b100039000000000004004b0000068f0000613d000000000500001900000000010a0019000007040000013d000000000268001900000000000204350000008002b000390000008007900039000000000707043300000000007204350000001f028000390000020c02200197000000000b6200190000000105500039000000000045004b0000068f0000813d0000000002ab0049000000200220008a000000200110003900000000002104350000002003300039000000000903043300000000e2090434000000a006000039000000000d6b0436000000a006b0003900000000c80204340000000000860435000000c006b00039000000000008004b0000071b0000613d00000000020000190000000007620019000000000f2c0019000000000f0f04330000000000f704350000002002200039000000000082004b000007140000413d0000000002680019000000000002043500000000020e0433000002050220019700000000002d043500000040029000390000000002020433000001f9022001970000004007b0003900000000002704350000001f028000390000020c0220019700000000026200190000000006b200490000006007b0003900000060089000390000000008080433000000000067043500000000c80804340000000006820436000000000008004b000006f80000613d00000000020000190000000007620019000000000d2c0019000000000d0d04330000000000d704350000002002200039000000000082004b000007320000413d000006f80000013d00000009010000290000004001100039000000000101043300000000023b004900000040033000390000000000230435000000000301043300000000003b0435000000050230021000000000022b00190000002005200039000e00000003001d000000000003004b0000077a0000613d0000000004000019000000000a0b00190000074f0000013d00000001044000390000000e0040006c00000000050d00190000077b0000813d0000000002b50049000000200220008a000000200aa0003900000000002a043500000020011000390000000009010433000000000c0904330000000000c504350000000502c002100000000002250019000000200d20003900000000000c004b0000074b0000613d000000000e000019000000000f050019000007670000013d000000000268001900000000000204350000001f028000390000020c02200197000000000d620019000000010ee000390000000000ce004b0000074b0000813d00000000025d0049000000200220008a000000200ff0003900000000002f043500000020099000390000000002090433000000003802043400000000068d0436000000000008004b0000075f0000613d00000000020000190000000007620019000000000d230019000000000d0d04330000000000d704350000002002200039000000000082004b000007720000413d0000075f0000013d000000000d0500190000000901000029000000600110003900000000030104330000000b0700002900000000017d004900000060027000390000000000120435000000000403043300000000014d0436000000000004004b000006690000613d000000000500001900000007060000290000002003300039000000000203043300000000012104360000000105500039000000000045004b000007880000413d0000066a0000013d000000c00e300039000000000f0700190000000007740049000002010070009c000000b70000213d000000400070008c000000b70000413d000000400700043d000002040070009c000000aa0000213d000000400b7000390000004000b0043f000000000b0f04330000020500b0009c000000b70000213d000000000bb70436000000600cc00039000000000c0c04330000020600c0009c000000b70000213d0000000000cb0435000000000e7e04360000004007f000390000000000d7004b000000000c0f0019000007900000413d000004cc0000013d000000a0080000390000000009000019000000000a010019000007c40000013d0000000004dc001900000000000404350000004004b000390000000004040433000001fd04400197000000400560003900000000004504350000006004b000390000000004040433000001fd044001970000006005600039000000000045043500000080046000390000008005b00039000000000505043300000000005404350000001f04c000390000020c044001970000000006d400190000000109900039000000000079004b000006360000813d000000000b160049000000200bb0008a000000200aa000390000000000ba04350000002003300039000000000b03043300000000dc0b0434000001fd0cc00197000000000cc60436000000000d0d043300000000008c0435000000a00f60003900000000ec0d04340000000000cf0435000000c00d60003900000000000c004b000007ae0000613d000000000f0000190000000005df00190000000004fe001900000000040404330000000000450435000000200ff000390000000000cf004b000007d60000413d000007ae0000013d000007de00000432000007df0001042e000007e00001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000f816ec60000000000000000000000000000000000000000000000000000000006fb34956000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000000000000000000000000000fffffffffffffe5f000000000000000000000000000000000000000000000000ffffffffffffff9f000000000000000000000000000000000000000000000000ffffffffffffff5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffffbf000000000000000000000000ffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffffffffffffff3f000000000000000000000000000000000000000000000000fffffffffffffe9f4e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0") diff --git a/core/gethwrappers/ccip/generated_zks/rmn_home/rmn_home.go b/core/gethwrappers/ccip/generated_zks/rmn_home/rmn_home.go new file mode 100644 index 00000000000..e9561e565ce --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/rmn_home/rmn_home.go @@ -0,0 +1,1512 @@ +package rmn_home + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type RMNHomeDynamicConfig struct { + SourceChains []RMNHomeSourceChain + OffchainConfig []byte +} + +type RMNHomeNode struct { + PeerId [32]byte + OffchainPublicKey [32]byte +} + +type RMNHomeSourceChain struct { + ChainSelector uint64 + F uint64 + ObserverNodesBitmap *big.Int +} + +type RMNHomeStaticConfig struct { + Nodes []RMNHomeNode + OffchainConfig []byte +} + +type RMNHomeVersionedConfig struct { + Version uint32 + ConfigDigest [32]byte + StaticConfig RMNHomeStaticConfig + DynamicConfig RMNHomeDynamicConfig +} + +var RMNHomeMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"name\":\"CannotTransferToSelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expectedConfigDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"gotConfigDigest\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"DigestNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateOffchainPublicKey\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicatePeerId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateSourceChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeProposedOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoOpStateTransitionNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughObservers\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBoundsNodesLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBoundsObserverNodeIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RevokingZeroDigestNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"ActiveConfigRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"CandidateConfigRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"ConfigPromoted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"peerId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"offchainPublicKey\",\"type\":\"bytes32\"}],\"internalType\":\"structRMNHome.Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structRMNHome.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"observerNodesBitmap\",\"type\":\"uint256\"}],\"internalType\":\"structRMNHome.SourceChain[]\",\"name\":\"sourceChains\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structRMNHome.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"observerNodesBitmap\",\"type\":\"uint256\"}],\"internalType\":\"structRMNHome.SourceChain[]\",\"name\":\"sourceChains\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structRMNHome.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"DynamicConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getActiveDigest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllConfigs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"peerId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"offchainPublicKey\",\"type\":\"bytes32\"}],\"internalType\":\"structRMNHome.Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"observerNodesBitmap\",\"type\":\"uint256\"}],\"internalType\":\"structRMNHome.SourceChain[]\",\"name\":\"sourceChains\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"internalType\":\"structRMNHome.VersionedConfig\",\"name\":\"activeConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"peerId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"offchainPublicKey\",\"type\":\"bytes32\"}],\"internalType\":\"structRMNHome.Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"observerNodesBitmap\",\"type\":\"uint256\"}],\"internalType\":\"structRMNHome.SourceChain[]\",\"name\":\"sourceChains\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"internalType\":\"structRMNHome.VersionedConfig\",\"name\":\"candidateConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCandidateDigest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"peerId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"offchainPublicKey\",\"type\":\"bytes32\"}],\"internalType\":\"structRMNHome.Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"observerNodesBitmap\",\"type\":\"uint256\"}],\"internalType\":\"structRMNHome.SourceChain[]\",\"name\":\"sourceChains\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"internalType\":\"structRMNHome.VersionedConfig\",\"name\":\"versionedConfig\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"ok\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfigDigests\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"activeConfigDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"candidateConfigDigest\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"digestToPromote\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digestToRevoke\",\"type\":\"bytes32\"}],\"name\":\"promoteCandidateAndRevokeActive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"revokeCandidate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"peerId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"offchainPublicKey\",\"type\":\"bytes32\"}],\"internalType\":\"structRMNHome.Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"observerNodesBitmap\",\"type\":\"uint256\"}],\"internalType\":\"structRMNHome.SourceChain[]\",\"name\":\"sourceChains\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"digestToOverwrite\",\"type\":\"bytes32\"}],\"name\":\"setCandidate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"newConfigDigest\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"observerNodesBitmap\",\"type\":\"uint256\"}],\"internalType\":\"structRMNHome.SourceChain[]\",\"name\":\"sourceChains\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.DynamicConfig\",\"name\":\"newDynamicConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"currentDigest\",\"type\":\"bytes32\"}],\"name\":\"setDynamicConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x6080604052600e80546001600160401b03191690553480156200002157600080fd5b50336000816200004457604051639b15e16f60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b0384811691909117909155811615620000775762000077816200007f565b5050620000f9565b336001600160a01b03821603620000a957604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6128cb80620001096000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80636dd5b69d1161008c5780638c76967f116100665780638c76967f146101d45780638da5cb5b146101e7578063f2fde38b1461020f578063fb4022d41461022257600080fd5b80636dd5b69d14610196578063736be802146101b757806379ba5097146101cc57600080fd5b80633567e6b4116100bd5780633567e6b41461015b57806338354c5c14610178578063635079561461018057600080fd5b8063118dbac5146100e4578063123e65db1461010a578063181f5a7714610112575b600080fd5b6100f76100f236600461186a565b610235565b6040519081526020015b60405180910390f35b6100f7610418565b61014e6040518060400160405280601181526020017f524d4e486f6d6520312e362e302d64657600000000000000000000000000000081525081565b6040516101019190611945565b610163610457565b60408051928352602083019190915201610101565b6100f76104d8565b6101886104f7565b604051610101929190611ab0565b6101a96101a4366004611ad5565b610a79565b604051610101929190611aee565b6101ca6101c5366004611b12565b610d5d565b005b6101ca610e79565b6101ca6101e2366004611b57565b610f47565b60015460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b6101ca61021d366004611b79565b61115a565b6101ca610230366004611ad5565b61116e565b600061023f61128a565b61025961024b85611d2b565b61025485611e2c565b6112dd565b60006102636104d8565b90508281146102ad576040517f93df584c00000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044015b60405180910390fd5b80156102df5760405183907f53f5d9228f0a4173bea6e5931c9b3afe6eeb6692ede1d182952970f152534e3b90600090a25b600e80546000919082906102f89063ffffffff16611f41565b91906101000a81548163ffffffff021916908363ffffffff160217905590506103408660405160200161032b91906120ec565b60405160208183030381529060405282611455565b600e54909350600090600290640100000000900463ffffffff1660011863ffffffff1660028110610373576103736120ff565b600602016001810185905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8416178155905086600282016103bd828261234c565b50869050600482016103cf828261254b565b905050837ff6c6d1be15ba0acc8ee645c1ec613c360ef786d2d3200eb8e695b6dec757dbf08389896040516104069392919061278f565b60405180910390a25050509392505050565b60006002610434600e5463ffffffff6401000000009091041690565b63ffffffff166002811061044a5761044a6120ff565b6006020160010154905090565b6000806002610474600e5463ffffffff6401000000009091041690565b63ffffffff166002811061048a5761048a6120ff565b600602016001015460026104b2600e54600163ffffffff640100000000909204919091161890565b63ffffffff16600281106104c8576104c86120ff565b6006020160010154915091509091565b600e54600090600290640100000000900463ffffffff16600118610434565b6104ff6117ec565b6105076117ec565b60006002610523600e5463ffffffff6401000000009091041690565b63ffffffff1660028110610539576105396120ff565b6040805160808101825260069290920292909201805463ffffffff16825260018101546020808401919091528351600283018054606093810283018401875282870181815295969495948701949293919284929091849160009085015b828210156105dc57838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190610596565b5050505081526020016001820180546105f490612193565b80601f016020809104026020016040519081016040528092919081815260200182805461062090612193565b801561066d5780601f106106425761010080835404028352916020019161066d565b820191906000526020600020905b81548152906001019060200180831161065057829003601f168201915b50505050508152505081526020016004820160405180604001604052908160008201805480602002602001604051908101604052809291908181526020016000905b8282101561070f5760008481526020908190206040805160608101825260028602909201805467ffffffffffffffff80821685526801000000000000000090910416838501526001908101549183019190915290835290920191016106af565b50505050815260200160018201805461072790612193565b80601f016020809104026020016040519081016040528092919081815260200182805461075390612193565b80156107a05780601f10610775576101008083540402835291602001916107a0565b820191906000526020600020905b81548152906001019060200180831161078357829003601f168201915b505050919092525050509052506020810151909150156107be578092505b600e54600090600290640100000000900463ffffffff1660011863ffffffff16600281106107ee576107ee6120ff565b6040805160808101825260069290920292909201805463ffffffff16825260018101546020808401919091528351600283018054606093810283018401875282870181815295969495948701949293919284929091849160009085015b828210156108915783829060005260206000209060020201604051806040016040529081600082015481526020016001820154815250508152602001906001019061084b565b5050505081526020016001820180546108a990612193565b80601f01602080910402602001604051908101604052809291908181526020018280546108d590612193565b80156109225780601f106108f757610100808354040283529160200191610922565b820191906000526020600020905b81548152906001019060200180831161090557829003601f168201915b50505050508152505081526020016004820160405180604001604052908160008201805480602002602001604051908101604052809291908181526020016000905b828210156109c45760008481526020908190206040805160608101825260028602909201805467ffffffffffffffff8082168552680100000000000000009091041683850152600190810154918301919091529083529092019101610964565b5050505081526020016001820180546109dc90612193565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0890612193565b8015610a555780601f10610a2a57610100808354040283529160200191610a55565b820191906000526020600020905b815481529060010190602001808311610a3857829003601f168201915b50505091909252505050905250602081015190915015610a73578092505b50509091565b610a816117ec565b6000805b6002811015610d52578360028260028110610aa257610aa26120ff565b6006020160010154148015610ab657508315155b15610d4a5760028160028110610ace57610ace6120ff565b6040805160808101825260069290920292909201805463ffffffff16825260018082015460208085019190915284516002840180546060938102830184018852828801818152959794969588958701948492849160009085015b82821015610b6e57838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190610b28565b505050508152602001600182018054610b8690612193565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb290612193565b8015610bff5780601f10610bd457610100808354040283529160200191610bff565b820191906000526020600020905b815481529060010190602001808311610be257829003601f168201915b50505050508152505081526020016004820160405180604001604052908160008201805480602002602001604051908101604052809291908181526020016000905b82821015610ca15760008481526020908190206040805160608101825260028602909201805467ffffffffffffffff8082168552680100000000000000009091041683850152600190810154918301919091529083529092019101610c41565b505050508152602001600182018054610cb990612193565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce590612193565b8015610d325780601f10610d0757610100808354040283529160200191610d32565b820191906000526020600020905b815481529060010190602001808311610d1557829003601f168201915b50505091909252505050905250969095509350505050565b600101610a85565b509092600092509050565b610d6561128a565b60005b6002811015610e3f578160028260028110610d8557610d856120ff565b6006020160010154148015610d9957508115155b15610e3757610dd0610daa84611e2c565b60028360028110610dbd57610dbd6120ff565b600602016002016000018054905061155d565b8260028260028110610de457610de46120ff565b600602016004018181610df7919061254b565b905050817f1f69d1a2edb327babc986b3deb80091f101b9105d42a6c30db4d99c31d7e629484604051610e2a91906127ca565b60405180910390a2505050565b600101610d68565b506040517fd0b2c031000000000000000000000000000000000000000000000000000000008152600481018290526024016102a4565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610eca576040517f02b543c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000008082163390811790935560008054909116815560405173ffffffffffffffffffffffffffffffffffffffff909216929183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610f4f61128a565b81158015610f5b575080155b15610f92576040517f7b4d1e4f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e54600163ffffffff6401000000009092048216181682600282818110610fbc57610fbc6120ff565b6006020160010154146110225760028160028110610fdc57610fdc6120ff565b6006020160010154836040517f93df584c0000000000000000000000000000000000000000000000000000000081526004016102a4929190918252602082015260400190565b6000600261103e600e5463ffffffff6401000000009091041690565b63ffffffff1660028110611054576110546120ff565b600602019050828160010154146110a75760018101546040517f93df584c0000000000000000000000000000000000000000000000000000000081526004810191909152602481018490526044016102a4565b6000600180830191909155600e805463ffffffff6401000000008083048216909418169092027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff90921691909117905582156111295760405183907f0b31c0055e2d464bef7781994b98c4ff9ef4ae0d05f59feb6a68c42de5e201b890600090a25b60405184907ffc3e98dbbd47c3fa7c1c05b6ec711caeaf70eca4554192b9ada8fc11a37f298e90600090a250505050565b61116261128a565b61116b81611728565b50565b61117661128a565b806111ad576040517f0849d8cc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e54600163ffffffff64010000000090920482161816816002828181106111d7576111d76120ff565b60060201600101541461123d57600281600281106111f7576111f76120ff565b6006020160010154826040517f93df584c0000000000000000000000000000000000000000000000000000000081526004016102a4929190918252602082015260400190565b60405182907f53f5d9228f0a4173bea6e5931c9b3afe6eeb6692ede1d182952970f152534e3b90600090a26002816002811061127b5761127b6120ff565b60060201600101600090555050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146112db576040517f2b5c74de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b815151610100101561131b576040517faf26d5e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251518110156114455760006113358260016127dd565b90505b83515181101561143c578351805182908110611356576113566120ff565b60200260200101516000015184600001518381518110611378576113786120ff565b602002602001015160000151036113bb576040517f221a8ae800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83518051829081106113cf576113cf6120ff565b602002602001015160200151846000015183815181106113f1576113f16120ff565b60200260200101516020015103611434576040517fae00651d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101611338565b5060010161131e565b50610e758183600001515161155d565b604080517f45564d00000000000000000000000000000000000000000000000000000000006020820152469181019190915230606082015263ffffffff821660808201526000907dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060a001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526114fc9186906020016127f0565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529190528051602090910120167e0b0000000000000000000000000000000000000000000000000000000000001790505b92915050565b81515160005b8181101561172257600084600001518281518110611583576115836120ff565b60200260200101519050600082600161159c91906127dd565b90505b8381101561161f5785518051829081106115bb576115bb6120ff565b60200260200101516000015167ffffffffffffffff16826000015167ffffffffffffffff1603611617576040517f3857f84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60010161159f565b506040810151806116328661010061281f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff901c82161461168e576040517f2847b60600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81156116b6576116a260018361281f565b909116906116af81612832565b9050611691565b60208301516116c690600261286a565b6116d1906001612896565b67ffffffffffffffff16811015611714576040517fa804bcb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050806001019050611563565b50505050565b3373ffffffffffffffffffffffffffffffffffffffff821603611777576040517fdad89dca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6040518060800160405280600063ffffffff1681526020016000801916815260200161182b604051806040016040528060608152602001606081525090565b815260200161184d604051806040016040528060608152602001606081525090565b905290565b60006040828403121561186457600080fd5b50919050565b60008060006060848603121561187f57600080fd5b833567ffffffffffffffff8082111561189757600080fd5b6118a387838801611852565b945060208601359150808211156118b957600080fd5b506118c686828701611852565b925050604084013590509250925092565b60005b838110156118f25781810151838201526020016118da565b50506000910152565b600081518084526119138160208601602086016118d7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061195860208301846118fb565b9392505050565b8051604080845281518482018190526000926060916020918201918388019190865b828110156119bb578451805167ffffffffffffffff9081168652838201511683860152870151878501529381019392850192600101611981565b50808801519550888303818a015250506119d581856118fb565b979650505050505050565b63ffffffff81511682526000602080830151818501526040808401516080604087015260c0860181516040608089015281815180845260e08a0191508683019350600092505b80831015611a4f5783518051835287015187830152928601926001929092019190850190611a26565b50948301518886037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800160a08a015294611a8981876118fb565b9550505050505060608301518482036060860152611aa7828261195f565b95945050505050565b604081526000611ac360408301856119e0565b8281036020840152611aa781856119e0565b600060208284031215611ae757600080fd5b5035919050565b604081526000611b0160408301856119e0565b905082151560208301529392505050565b60008060408385031215611b2557600080fd5b823567ffffffffffffffff811115611b3c57600080fd5b611b4885828601611852565b95602094909401359450505050565b60008060408385031215611b6a57600080fd5b50508035926020909101359150565b600060208284031215611b8b57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461195857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715611c0157611c01611baf565b60405290565b6040516060810167ffffffffffffffff81118282101715611c0157611c01611baf565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611c7157611c71611baf565b604052919050565b600067ffffffffffffffff821115611c9357611c93611baf565b5060051b60200190565b600082601f830112611cae57600080fd5b813567ffffffffffffffff811115611cc857611cc8611baf565b611cf960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611c2a565b818152846020838601011115611d0e57600080fd5b816020850160208301376000918101602001919091529392505050565b60006040808336031215611d3e57600080fd5b611d46611bde565b833567ffffffffffffffff80821115611d5e57600080fd5b9085019036601f830112611d7157600080fd5b81356020611d86611d8183611c79565b611c2a565b82815260069290921b84018101918181019036841115611da557600080fd5b948201945b83861015611de557878636031215611dc25760008081fd5b611dca611bde565b86358152838701358482015282529487019490820190611daa565b86525087810135955082861115611dfb57600080fd5b611e0736878a01611c9d565b90850152509195945050505050565b67ffffffffffffffff8116811461116b57600080fd5b60006040808336031215611e3f57600080fd5b611e47611bde565b833567ffffffffffffffff80821115611e5f57600080fd5b9085019036601f830112611e7257600080fd5b81356020611e82611d8183611c79565b82815260609283028501820192828201919036851115611ea157600080fd5b958301955b84871015611efb57808736031215611ebe5760008081fd5b611ec6611c07565b8735611ed181611e16565b815287850135611ee081611e16565b81860152878a01358a82015283529586019591830191611ea6565b5086525087810135955082861115611dfb57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff808316818103611f5a57611f5a611f12565b6001019392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611f9957600080fd5b830160208101925035905067ffffffffffffffff811115611fb957600080fd5b803603821315611fc857600080fd5b9250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000604080840183357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe185360301811261205157600080fd5b8401602081810191359067ffffffffffffffff82111561207057600080fd5b8160061b360383131561208257600080fd5b6040885292819052909160009190606088015b828410156120bb5784358152818501358282015293850193600193909301928501612095565b6120c86020890189611f64565b9650945088810360208a01526120df818787611fcf565b9998505050505050505050565b6020815260006119586020830184612018565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261216357600080fd5b83018035915067ffffffffffffffff82111561217e57600080fd5b602001915036819003821315611fc857600080fd5b600181811c908216806121a757607f821691505b602082108103611864577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f82111561222c576000816000526020600020601f850160051c810160208610156122095750805b601f850160051c820191505b8181101561222857828155600101612215565b5050505b505050565b67ffffffffffffffff83111561224957612249611baf565b61225d836122578354612193565b836121e0565b6000601f8411600181146122af57600085156122795750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355612345565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156122fe57868501358255602094850194600190920191016122de565b5086821015612339577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe183360301811261237e57600080fd5b8201803567ffffffffffffffff81111561239757600080fd5b6020820191508060061b36038213156123af57600080fd5b680100000000000000008111156123c8576123c8611baf565b8254818455808210156124555760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316831461240957612409611f12565b808416841461241a5761241a611f12565b5060008560005260206000208360011b81018560011b820191505b80821015612450578282558284830155600282019150612435565b505050505b5060008381526020902060005b8281101561248e5783358255602084013560018301556040939093019260029190910190600101612462565b5050505061249f602083018361212e565b611722818360018601612231565b81356124b881611e16565b67ffffffffffffffff811690508154817fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000821617835560208401356124fc81611e16565b6fffffffffffffffff00000000000000008160401b16837fffffffffffffffffffffffffffffffff00000000000000000000000000000000841617178455505050604082013560018201555050565b81357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe183360301811261257d57600080fd5b8201803567ffffffffffffffff81111561259657600080fd5b602082019150606080820236038313156125af57600080fd5b680100000000000000008211156125c8576125c8611baf565b8354828555808310156126555760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316831461260957612609611f12565b808516851461261a5761261a611f12565b5060008660005260206000208360011b81018660011b820191505b80821015612650578282558284830155600282019150612635565b505050505b5060008481526020902060005b838110156126875761267485836124ad565b9382019360029190910190600101612662565b505050505061249f602083018361212e565b6000604080840183357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18536030181126126d257600080fd5b8401602081810191359067ffffffffffffffff808311156126f257600080fd5b6060808402360385131561270557600080fd5b60408a529483905292936000939060608a015b8486101561275c57863561272b81611e16565b831681528684013561273c81611e16565b831681850152868801358882015295810195600195909501948101612718565b61276960208b018b611f64565b985096508a810360208c0152612780818989611fcf565b9b9a5050505050505050505050565b63ffffffff841681526060602082015260006127ae6060830185612018565b82810360408401526127c08185612699565b9695505050505050565b6020815260006119586020830184612699565b8082018082111561155757611557611f12565b600083516128028184602088016118d7565b8351908301906128168183602088016118d7565b01949350505050565b8181038181111561155757611557611f12565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361286357612863611f12565b5060010190565b67ffffffffffffffff81811683821602808216919082811461288e5761288e611f12565b505092915050565b67ffffffffffffffff8181168382160190808211156128b7576128b7611f12565b509291505056fea164736f6c6343000818000a", +} + +var RMNHomeABI = RMNHomeMetaData.ABI + +var RMNHomeBin = RMNHomeMetaData.Bin + +func DeployRMNHome(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *generated_zks.Transaction, *RMNHome, error) { + parsed, err := RMNHomeMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(RMNHomeZKBin), backend) + contractReturn := &RMNHome{address: address, abi: *parsed, RMNHomeCaller: RMNHomeCaller{contract: contractBind}, RMNHomeTransactor: RMNHomeTransactor{contract: contractBind}, RMNHomeFilterer: RMNHomeFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(RMNHomeBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &RMNHome{address: address, abi: *parsed, RMNHomeCaller: RMNHomeCaller{contract: contract}, RMNHomeTransactor: RMNHomeTransactor{contract: contract}, RMNHomeFilterer: RMNHomeFilterer{contract: contract}}, nil +} + +type RMNHome struct { + address common.Address + abi abi.ABI + RMNHomeCaller + RMNHomeTransactor + RMNHomeFilterer +} + +type RMNHomeCaller struct { + contract *bind.BoundContract +} + +type RMNHomeTransactor struct { + contract *bind.BoundContract +} + +type RMNHomeFilterer struct { + contract *bind.BoundContract +} + +type RMNHomeSession struct { + Contract *RMNHome + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type RMNHomeCallerSession struct { + Contract *RMNHomeCaller + CallOpts bind.CallOpts +} + +type RMNHomeTransactorSession struct { + Contract *RMNHomeTransactor + TransactOpts bind.TransactOpts +} + +type RMNHomeRaw struct { + Contract *RMNHome +} + +type RMNHomeCallerRaw struct { + Contract *RMNHomeCaller +} + +type RMNHomeTransactorRaw struct { + Contract *RMNHomeTransactor +} + +func NewRMNHome(address common.Address, backend bind.ContractBackend) (*RMNHome, error) { + abi, err := abi.JSON(strings.NewReader(RMNHomeABI)) + if err != nil { + return nil, err + } + contract, err := bindRMNHome(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &RMNHome{address: address, abi: abi, RMNHomeCaller: RMNHomeCaller{contract: contract}, RMNHomeTransactor: RMNHomeTransactor{contract: contract}, RMNHomeFilterer: RMNHomeFilterer{contract: contract}}, nil +} + +func NewRMNHomeCaller(address common.Address, caller bind.ContractCaller) (*RMNHomeCaller, error) { + contract, err := bindRMNHome(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &RMNHomeCaller{contract: contract}, nil +} + +func NewRMNHomeTransactor(address common.Address, transactor bind.ContractTransactor) (*RMNHomeTransactor, error) { + contract, err := bindRMNHome(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &RMNHomeTransactor{contract: contract}, nil +} + +func NewRMNHomeFilterer(address common.Address, filterer bind.ContractFilterer) (*RMNHomeFilterer, error) { + contract, err := bindRMNHome(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &RMNHomeFilterer{contract: contract}, nil +} + +func bindRMNHome(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := RMNHomeMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_RMNHome *RMNHomeRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _RMNHome.Contract.RMNHomeCaller.contract.Call(opts, result, method, params...) +} + +func (_RMNHome *RMNHomeRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _RMNHome.Contract.RMNHomeTransactor.contract.Transfer(opts) +} + +func (_RMNHome *RMNHomeRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _RMNHome.Contract.RMNHomeTransactor.contract.Transact(opts, method, params...) +} + +func (_RMNHome *RMNHomeCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _RMNHome.Contract.contract.Call(opts, result, method, params...) +} + +func (_RMNHome *RMNHomeTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _RMNHome.Contract.contract.Transfer(opts) +} + +func (_RMNHome *RMNHomeTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _RMNHome.Contract.contract.Transact(opts, method, params...) +} + +func (_RMNHome *RMNHomeCaller) GetActiveDigest(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _RMNHome.contract.Call(opts, &out, "getActiveDigest") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +func (_RMNHome *RMNHomeSession) GetActiveDigest() ([32]byte, error) { + return _RMNHome.Contract.GetActiveDigest(&_RMNHome.CallOpts) +} + +func (_RMNHome *RMNHomeCallerSession) GetActiveDigest() ([32]byte, error) { + return _RMNHome.Contract.GetActiveDigest(&_RMNHome.CallOpts) +} + +func (_RMNHome *RMNHomeCaller) GetAllConfigs(opts *bind.CallOpts) (GetAllConfigs, + + error) { + var out []interface{} + err := _RMNHome.contract.Call(opts, &out, "getAllConfigs") + + outstruct := new(GetAllConfigs) + if err != nil { + return *outstruct, err + } + + outstruct.ActiveConfig = *abi.ConvertType(out[0], new(RMNHomeVersionedConfig)).(*RMNHomeVersionedConfig) + outstruct.CandidateConfig = *abi.ConvertType(out[1], new(RMNHomeVersionedConfig)).(*RMNHomeVersionedConfig) + + return *outstruct, err + +} + +func (_RMNHome *RMNHomeSession) GetAllConfigs() (GetAllConfigs, + + error) { + return _RMNHome.Contract.GetAllConfigs(&_RMNHome.CallOpts) +} + +func (_RMNHome *RMNHomeCallerSession) GetAllConfigs() (GetAllConfigs, + + error) { + return _RMNHome.Contract.GetAllConfigs(&_RMNHome.CallOpts) +} + +func (_RMNHome *RMNHomeCaller) GetCandidateDigest(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _RMNHome.contract.Call(opts, &out, "getCandidateDigest") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +func (_RMNHome *RMNHomeSession) GetCandidateDigest() ([32]byte, error) { + return _RMNHome.Contract.GetCandidateDigest(&_RMNHome.CallOpts) +} + +func (_RMNHome *RMNHomeCallerSession) GetCandidateDigest() ([32]byte, error) { + return _RMNHome.Contract.GetCandidateDigest(&_RMNHome.CallOpts) +} + +func (_RMNHome *RMNHomeCaller) GetConfig(opts *bind.CallOpts, configDigest [32]byte) (GetConfig, + + error) { + var out []interface{} + err := _RMNHome.contract.Call(opts, &out, "getConfig", configDigest) + + outstruct := new(GetConfig) + if err != nil { + return *outstruct, err + } + + outstruct.VersionedConfig = *abi.ConvertType(out[0], new(RMNHomeVersionedConfig)).(*RMNHomeVersionedConfig) + outstruct.Ok = *abi.ConvertType(out[1], new(bool)).(*bool) + + return *outstruct, err + +} + +func (_RMNHome *RMNHomeSession) GetConfig(configDigest [32]byte) (GetConfig, + + error) { + return _RMNHome.Contract.GetConfig(&_RMNHome.CallOpts, configDigest) +} + +func (_RMNHome *RMNHomeCallerSession) GetConfig(configDigest [32]byte) (GetConfig, + + error) { + return _RMNHome.Contract.GetConfig(&_RMNHome.CallOpts, configDigest) +} + +func (_RMNHome *RMNHomeCaller) GetConfigDigests(opts *bind.CallOpts) (GetConfigDigests, + + error) { + var out []interface{} + err := _RMNHome.contract.Call(opts, &out, "getConfigDigests") + + outstruct := new(GetConfigDigests) + if err != nil { + return *outstruct, err + } + + outstruct.ActiveConfigDigest = *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + outstruct.CandidateConfigDigest = *abi.ConvertType(out[1], new([32]byte)).(*[32]byte) + + return *outstruct, err + +} + +func (_RMNHome *RMNHomeSession) GetConfigDigests() (GetConfigDigests, + + error) { + return _RMNHome.Contract.GetConfigDigests(&_RMNHome.CallOpts) +} + +func (_RMNHome *RMNHomeCallerSession) GetConfigDigests() (GetConfigDigests, + + error) { + return _RMNHome.Contract.GetConfigDigests(&_RMNHome.CallOpts) +} + +func (_RMNHome *RMNHomeCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _RMNHome.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 + +} + +func (_RMNHome *RMNHomeSession) Owner() (common.Address, error) { + return _RMNHome.Contract.Owner(&_RMNHome.CallOpts) +} + +func (_RMNHome *RMNHomeCallerSession) Owner() (common.Address, error) { + return _RMNHome.Contract.Owner(&_RMNHome.CallOpts) +} + +func (_RMNHome *RMNHomeCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _RMNHome.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_RMNHome *RMNHomeSession) TypeAndVersion() (string, error) { + return _RMNHome.Contract.TypeAndVersion(&_RMNHome.CallOpts) +} + +func (_RMNHome *RMNHomeCallerSession) TypeAndVersion() (string, error) { + return _RMNHome.Contract.TypeAndVersion(&_RMNHome.CallOpts) +} + +func (_RMNHome *RMNHomeTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _RMNHome.contract.Transact(opts, "acceptOwnership") +} + +func (_RMNHome *RMNHomeSession) AcceptOwnership() (*types.Transaction, error) { + return _RMNHome.Contract.AcceptOwnership(&_RMNHome.TransactOpts) +} + +func (_RMNHome *RMNHomeTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _RMNHome.Contract.AcceptOwnership(&_RMNHome.TransactOpts) +} + +func (_RMNHome *RMNHomeTransactor) PromoteCandidateAndRevokeActive(opts *bind.TransactOpts, digestToPromote [32]byte, digestToRevoke [32]byte) (*types.Transaction, error) { + return _RMNHome.contract.Transact(opts, "promoteCandidateAndRevokeActive", digestToPromote, digestToRevoke) +} + +func (_RMNHome *RMNHomeSession) PromoteCandidateAndRevokeActive(digestToPromote [32]byte, digestToRevoke [32]byte) (*types.Transaction, error) { + return _RMNHome.Contract.PromoteCandidateAndRevokeActive(&_RMNHome.TransactOpts, digestToPromote, digestToRevoke) +} + +func (_RMNHome *RMNHomeTransactorSession) PromoteCandidateAndRevokeActive(digestToPromote [32]byte, digestToRevoke [32]byte) (*types.Transaction, error) { + return _RMNHome.Contract.PromoteCandidateAndRevokeActive(&_RMNHome.TransactOpts, digestToPromote, digestToRevoke) +} + +func (_RMNHome *RMNHomeTransactor) RevokeCandidate(opts *bind.TransactOpts, configDigest [32]byte) (*types.Transaction, error) { + return _RMNHome.contract.Transact(opts, "revokeCandidate", configDigest) +} + +func (_RMNHome *RMNHomeSession) RevokeCandidate(configDigest [32]byte) (*types.Transaction, error) { + return _RMNHome.Contract.RevokeCandidate(&_RMNHome.TransactOpts, configDigest) +} + +func (_RMNHome *RMNHomeTransactorSession) RevokeCandidate(configDigest [32]byte) (*types.Transaction, error) { + return _RMNHome.Contract.RevokeCandidate(&_RMNHome.TransactOpts, configDigest) +} + +func (_RMNHome *RMNHomeTransactor) SetCandidate(opts *bind.TransactOpts, staticConfig RMNHomeStaticConfig, dynamicConfig RMNHomeDynamicConfig, digestToOverwrite [32]byte) (*types.Transaction, error) { + return _RMNHome.contract.Transact(opts, "setCandidate", staticConfig, dynamicConfig, digestToOverwrite) +} + +func (_RMNHome *RMNHomeSession) SetCandidate(staticConfig RMNHomeStaticConfig, dynamicConfig RMNHomeDynamicConfig, digestToOverwrite [32]byte) (*types.Transaction, error) { + return _RMNHome.Contract.SetCandidate(&_RMNHome.TransactOpts, staticConfig, dynamicConfig, digestToOverwrite) +} + +func (_RMNHome *RMNHomeTransactorSession) SetCandidate(staticConfig RMNHomeStaticConfig, dynamicConfig RMNHomeDynamicConfig, digestToOverwrite [32]byte) (*types.Transaction, error) { + return _RMNHome.Contract.SetCandidate(&_RMNHome.TransactOpts, staticConfig, dynamicConfig, digestToOverwrite) +} + +func (_RMNHome *RMNHomeTransactor) SetDynamicConfig(opts *bind.TransactOpts, newDynamicConfig RMNHomeDynamicConfig, currentDigest [32]byte) (*types.Transaction, error) { + return _RMNHome.contract.Transact(opts, "setDynamicConfig", newDynamicConfig, currentDigest) +} + +func (_RMNHome *RMNHomeSession) SetDynamicConfig(newDynamicConfig RMNHomeDynamicConfig, currentDigest [32]byte) (*types.Transaction, error) { + return _RMNHome.Contract.SetDynamicConfig(&_RMNHome.TransactOpts, newDynamicConfig, currentDigest) +} + +func (_RMNHome *RMNHomeTransactorSession) SetDynamicConfig(newDynamicConfig RMNHomeDynamicConfig, currentDigest [32]byte) (*types.Transaction, error) { + return _RMNHome.Contract.SetDynamicConfig(&_RMNHome.TransactOpts, newDynamicConfig, currentDigest) +} + +func (_RMNHome *RMNHomeTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _RMNHome.contract.Transact(opts, "transferOwnership", to) +} + +func (_RMNHome *RMNHomeSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _RMNHome.Contract.TransferOwnership(&_RMNHome.TransactOpts, to) +} + +func (_RMNHome *RMNHomeTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _RMNHome.Contract.TransferOwnership(&_RMNHome.TransactOpts, to) +} + +type RMNHomeActiveConfigRevokedIterator struct { + Event *RMNHomeActiveConfigRevoked + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RMNHomeActiveConfigRevokedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RMNHomeActiveConfigRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RMNHomeActiveConfigRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RMNHomeActiveConfigRevokedIterator) Error() error { + return it.fail +} + +func (it *RMNHomeActiveConfigRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RMNHomeActiveConfigRevoked struct { + ConfigDigest [32]byte + Raw types.Log +} + +func (_RMNHome *RMNHomeFilterer) FilterActiveConfigRevoked(opts *bind.FilterOpts, configDigest [][32]byte) (*RMNHomeActiveConfigRevokedIterator, error) { + + var configDigestRule []interface{} + for _, configDigestItem := range configDigest { + configDigestRule = append(configDigestRule, configDigestItem) + } + + logs, sub, err := _RMNHome.contract.FilterLogs(opts, "ActiveConfigRevoked", configDigestRule) + if err != nil { + return nil, err + } + return &RMNHomeActiveConfigRevokedIterator{contract: _RMNHome.contract, event: "ActiveConfigRevoked", logs: logs, sub: sub}, nil +} + +func (_RMNHome *RMNHomeFilterer) WatchActiveConfigRevoked(opts *bind.WatchOpts, sink chan<- *RMNHomeActiveConfigRevoked, configDigest [][32]byte) (event.Subscription, error) { + + var configDigestRule []interface{} + for _, configDigestItem := range configDigest { + configDigestRule = append(configDigestRule, configDigestItem) + } + + logs, sub, err := _RMNHome.contract.WatchLogs(opts, "ActiveConfigRevoked", configDigestRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RMNHomeActiveConfigRevoked) + if err := _RMNHome.contract.UnpackLog(event, "ActiveConfigRevoked", 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 +} + +func (_RMNHome *RMNHomeFilterer) ParseActiveConfigRevoked(log types.Log) (*RMNHomeActiveConfigRevoked, error) { + event := new(RMNHomeActiveConfigRevoked) + if err := _RMNHome.contract.UnpackLog(event, "ActiveConfigRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type RMNHomeCandidateConfigRevokedIterator struct { + Event *RMNHomeCandidateConfigRevoked + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RMNHomeCandidateConfigRevokedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RMNHomeCandidateConfigRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RMNHomeCandidateConfigRevoked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RMNHomeCandidateConfigRevokedIterator) Error() error { + return it.fail +} + +func (it *RMNHomeCandidateConfigRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RMNHomeCandidateConfigRevoked struct { + ConfigDigest [32]byte + Raw types.Log +} + +func (_RMNHome *RMNHomeFilterer) FilterCandidateConfigRevoked(opts *bind.FilterOpts, configDigest [][32]byte) (*RMNHomeCandidateConfigRevokedIterator, error) { + + var configDigestRule []interface{} + for _, configDigestItem := range configDigest { + configDigestRule = append(configDigestRule, configDigestItem) + } + + logs, sub, err := _RMNHome.contract.FilterLogs(opts, "CandidateConfigRevoked", configDigestRule) + if err != nil { + return nil, err + } + return &RMNHomeCandidateConfigRevokedIterator{contract: _RMNHome.contract, event: "CandidateConfigRevoked", logs: logs, sub: sub}, nil +} + +func (_RMNHome *RMNHomeFilterer) WatchCandidateConfigRevoked(opts *bind.WatchOpts, sink chan<- *RMNHomeCandidateConfigRevoked, configDigest [][32]byte) (event.Subscription, error) { + + var configDigestRule []interface{} + for _, configDigestItem := range configDigest { + configDigestRule = append(configDigestRule, configDigestItem) + } + + logs, sub, err := _RMNHome.contract.WatchLogs(opts, "CandidateConfigRevoked", configDigestRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RMNHomeCandidateConfigRevoked) + if err := _RMNHome.contract.UnpackLog(event, "CandidateConfigRevoked", 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 +} + +func (_RMNHome *RMNHomeFilterer) ParseCandidateConfigRevoked(log types.Log) (*RMNHomeCandidateConfigRevoked, error) { + event := new(RMNHomeCandidateConfigRevoked) + if err := _RMNHome.contract.UnpackLog(event, "CandidateConfigRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type RMNHomeConfigPromotedIterator struct { + Event *RMNHomeConfigPromoted + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RMNHomeConfigPromotedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RMNHomeConfigPromoted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RMNHomeConfigPromoted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RMNHomeConfigPromotedIterator) Error() error { + return it.fail +} + +func (it *RMNHomeConfigPromotedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RMNHomeConfigPromoted struct { + ConfigDigest [32]byte + Raw types.Log +} + +func (_RMNHome *RMNHomeFilterer) FilterConfigPromoted(opts *bind.FilterOpts, configDigest [][32]byte) (*RMNHomeConfigPromotedIterator, error) { + + var configDigestRule []interface{} + for _, configDigestItem := range configDigest { + configDigestRule = append(configDigestRule, configDigestItem) + } + + logs, sub, err := _RMNHome.contract.FilterLogs(opts, "ConfigPromoted", configDigestRule) + if err != nil { + return nil, err + } + return &RMNHomeConfigPromotedIterator{contract: _RMNHome.contract, event: "ConfigPromoted", logs: logs, sub: sub}, nil +} + +func (_RMNHome *RMNHomeFilterer) WatchConfigPromoted(opts *bind.WatchOpts, sink chan<- *RMNHomeConfigPromoted, configDigest [][32]byte) (event.Subscription, error) { + + var configDigestRule []interface{} + for _, configDigestItem := range configDigest { + configDigestRule = append(configDigestRule, configDigestItem) + } + + logs, sub, err := _RMNHome.contract.WatchLogs(opts, "ConfigPromoted", configDigestRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RMNHomeConfigPromoted) + if err := _RMNHome.contract.UnpackLog(event, "ConfigPromoted", 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 +} + +func (_RMNHome *RMNHomeFilterer) ParseConfigPromoted(log types.Log) (*RMNHomeConfigPromoted, error) { + event := new(RMNHomeConfigPromoted) + if err := _RMNHome.contract.UnpackLog(event, "ConfigPromoted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type RMNHomeConfigSetIterator struct { + Event *RMNHomeConfigSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RMNHomeConfigSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RMNHomeConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RMNHomeConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RMNHomeConfigSetIterator) Error() error { + return it.fail +} + +func (it *RMNHomeConfigSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RMNHomeConfigSet struct { + ConfigDigest [32]byte + Version uint32 + StaticConfig RMNHomeStaticConfig + DynamicConfig RMNHomeDynamicConfig + Raw types.Log +} + +func (_RMNHome *RMNHomeFilterer) FilterConfigSet(opts *bind.FilterOpts, configDigest [][32]byte) (*RMNHomeConfigSetIterator, error) { + + var configDigestRule []interface{} + for _, configDigestItem := range configDigest { + configDigestRule = append(configDigestRule, configDigestItem) + } + + logs, sub, err := _RMNHome.contract.FilterLogs(opts, "ConfigSet", configDigestRule) + if err != nil { + return nil, err + } + return &RMNHomeConfigSetIterator{contract: _RMNHome.contract, event: "ConfigSet", logs: logs, sub: sub}, nil +} + +func (_RMNHome *RMNHomeFilterer) WatchConfigSet(opts *bind.WatchOpts, sink chan<- *RMNHomeConfigSet, configDigest [][32]byte) (event.Subscription, error) { + + var configDigestRule []interface{} + for _, configDigestItem := range configDigest { + configDigestRule = append(configDigestRule, configDigestItem) + } + + logs, sub, err := _RMNHome.contract.WatchLogs(opts, "ConfigSet", configDigestRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RMNHomeConfigSet) + if err := _RMNHome.contract.UnpackLog(event, "ConfigSet", 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 +} + +func (_RMNHome *RMNHomeFilterer) ParseConfigSet(log types.Log) (*RMNHomeConfigSet, error) { + event := new(RMNHomeConfigSet) + if err := _RMNHome.contract.UnpackLog(event, "ConfigSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type RMNHomeDynamicConfigSetIterator struct { + Event *RMNHomeDynamicConfigSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RMNHomeDynamicConfigSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RMNHomeDynamicConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RMNHomeDynamicConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RMNHomeDynamicConfigSetIterator) Error() error { + return it.fail +} + +func (it *RMNHomeDynamicConfigSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RMNHomeDynamicConfigSet struct { + ConfigDigest [32]byte + DynamicConfig RMNHomeDynamicConfig + Raw types.Log +} + +func (_RMNHome *RMNHomeFilterer) FilterDynamicConfigSet(opts *bind.FilterOpts, configDigest [][32]byte) (*RMNHomeDynamicConfigSetIterator, error) { + + var configDigestRule []interface{} + for _, configDigestItem := range configDigest { + configDigestRule = append(configDigestRule, configDigestItem) + } + + logs, sub, err := _RMNHome.contract.FilterLogs(opts, "DynamicConfigSet", configDigestRule) + if err != nil { + return nil, err + } + return &RMNHomeDynamicConfigSetIterator{contract: _RMNHome.contract, event: "DynamicConfigSet", logs: logs, sub: sub}, nil +} + +func (_RMNHome *RMNHomeFilterer) WatchDynamicConfigSet(opts *bind.WatchOpts, sink chan<- *RMNHomeDynamicConfigSet, configDigest [][32]byte) (event.Subscription, error) { + + var configDigestRule []interface{} + for _, configDigestItem := range configDigest { + configDigestRule = append(configDigestRule, configDigestItem) + } + + logs, sub, err := _RMNHome.contract.WatchLogs(opts, "DynamicConfigSet", configDigestRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RMNHomeDynamicConfigSet) + if err := _RMNHome.contract.UnpackLog(event, "DynamicConfigSet", 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 +} + +func (_RMNHome *RMNHomeFilterer) ParseDynamicConfigSet(log types.Log) (*RMNHomeDynamicConfigSet, error) { + event := new(RMNHomeDynamicConfigSet) + if err := _RMNHome.contract.UnpackLog(event, "DynamicConfigSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type RMNHomeOwnershipTransferRequestedIterator struct { + Event *RMNHomeOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RMNHomeOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RMNHomeOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RMNHomeOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RMNHomeOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *RMNHomeOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RMNHomeOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_RMNHome *RMNHomeFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNHomeOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _RMNHome.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &RMNHomeOwnershipTransferRequestedIterator{contract: _RMNHome.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_RMNHome *RMNHomeFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *RMNHomeOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _RMNHome.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RMNHomeOwnershipTransferRequested) + if err := _RMNHome.contract.UnpackLog(event, "OwnershipTransferRequested", 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 +} + +func (_RMNHome *RMNHomeFilterer) ParseOwnershipTransferRequested(log types.Log) (*RMNHomeOwnershipTransferRequested, error) { + event := new(RMNHomeOwnershipTransferRequested) + if err := _RMNHome.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type RMNHomeOwnershipTransferredIterator struct { + Event *RMNHomeOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RMNHomeOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RMNHomeOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RMNHomeOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RMNHomeOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *RMNHomeOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RMNHomeOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_RMNHome *RMNHomeFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNHomeOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _RMNHome.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &RMNHomeOwnershipTransferredIterator{contract: _RMNHome.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_RMNHome *RMNHomeFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *RMNHomeOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _RMNHome.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RMNHomeOwnershipTransferred) + if err := _RMNHome.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 +} + +func (_RMNHome *RMNHomeFilterer) ParseOwnershipTransferred(log types.Log) (*RMNHomeOwnershipTransferred, error) { + event := new(RMNHomeOwnershipTransferred) + if err := _RMNHome.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type GetAllConfigs struct { + ActiveConfig RMNHomeVersionedConfig + CandidateConfig RMNHomeVersionedConfig +} +type GetConfig struct { + VersionedConfig RMNHomeVersionedConfig + Ok bool +} +type GetConfigDigests struct { + ActiveConfigDigest [32]byte + CandidateConfigDigest [32]byte +} + +func (_RMNHome *RMNHome) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _RMNHome.abi.Events["ActiveConfigRevoked"].ID: + return _RMNHome.ParseActiveConfigRevoked(log) + case _RMNHome.abi.Events["CandidateConfigRevoked"].ID: + return _RMNHome.ParseCandidateConfigRevoked(log) + case _RMNHome.abi.Events["ConfigPromoted"].ID: + return _RMNHome.ParseConfigPromoted(log) + case _RMNHome.abi.Events["ConfigSet"].ID: + return _RMNHome.ParseConfigSet(log) + case _RMNHome.abi.Events["DynamicConfigSet"].ID: + return _RMNHome.ParseDynamicConfigSet(log) + case _RMNHome.abi.Events["OwnershipTransferRequested"].ID: + return _RMNHome.ParseOwnershipTransferRequested(log) + case _RMNHome.abi.Events["OwnershipTransferred"].ID: + return _RMNHome.ParseOwnershipTransferred(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (RMNHomeActiveConfigRevoked) Topic() common.Hash { + return common.HexToHash("0x0b31c0055e2d464bef7781994b98c4ff9ef4ae0d05f59feb6a68c42de5e201b8") +} + +func (RMNHomeCandidateConfigRevoked) Topic() common.Hash { + return common.HexToHash("0x53f5d9228f0a4173bea6e5931c9b3afe6eeb6692ede1d182952970f152534e3b") +} + +func (RMNHomeConfigPromoted) Topic() common.Hash { + return common.HexToHash("0xfc3e98dbbd47c3fa7c1c05b6ec711caeaf70eca4554192b9ada8fc11a37f298e") +} + +func (RMNHomeConfigSet) Topic() common.Hash { + return common.HexToHash("0xf6c6d1be15ba0acc8ee645c1ec613c360ef786d2d3200eb8e695b6dec757dbf0") +} + +func (RMNHomeDynamicConfigSet) Topic() common.Hash { + return common.HexToHash("0x1f69d1a2edb327babc986b3deb80091f101b9105d42a6c30db4d99c31d7e6294") +} + +func (RMNHomeOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (RMNHomeOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (_RMNHome *RMNHome) Address() common.Address { + return _RMNHome.address +} + +type RMNHomeInterface interface { + GetActiveDigest(opts *bind.CallOpts) ([32]byte, error) + + GetAllConfigs(opts *bind.CallOpts) (GetAllConfigs, + + error) + + GetCandidateDigest(opts *bind.CallOpts) ([32]byte, error) + + GetConfig(opts *bind.CallOpts, configDigest [32]byte) (GetConfig, + + error) + + GetConfigDigests(opts *bind.CallOpts) (GetConfigDigests, + + error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + PromoteCandidateAndRevokeActive(opts *bind.TransactOpts, digestToPromote [32]byte, digestToRevoke [32]byte) (*types.Transaction, error) + + RevokeCandidate(opts *bind.TransactOpts, configDigest [32]byte) (*types.Transaction, error) + + SetCandidate(opts *bind.TransactOpts, staticConfig RMNHomeStaticConfig, dynamicConfig RMNHomeDynamicConfig, digestToOverwrite [32]byte) (*types.Transaction, error) + + SetDynamicConfig(opts *bind.TransactOpts, newDynamicConfig RMNHomeDynamicConfig, currentDigest [32]byte) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + FilterActiveConfigRevoked(opts *bind.FilterOpts, configDigest [][32]byte) (*RMNHomeActiveConfigRevokedIterator, error) + + WatchActiveConfigRevoked(opts *bind.WatchOpts, sink chan<- *RMNHomeActiveConfigRevoked, configDigest [][32]byte) (event.Subscription, error) + + ParseActiveConfigRevoked(log types.Log) (*RMNHomeActiveConfigRevoked, error) + + FilterCandidateConfigRevoked(opts *bind.FilterOpts, configDigest [][32]byte) (*RMNHomeCandidateConfigRevokedIterator, error) + + WatchCandidateConfigRevoked(opts *bind.WatchOpts, sink chan<- *RMNHomeCandidateConfigRevoked, configDigest [][32]byte) (event.Subscription, error) + + ParseCandidateConfigRevoked(log types.Log) (*RMNHomeCandidateConfigRevoked, error) + + FilterConfigPromoted(opts *bind.FilterOpts, configDigest [][32]byte) (*RMNHomeConfigPromotedIterator, error) + + WatchConfigPromoted(opts *bind.WatchOpts, sink chan<- *RMNHomeConfigPromoted, configDigest [][32]byte) (event.Subscription, error) + + ParseConfigPromoted(log types.Log) (*RMNHomeConfigPromoted, error) + + FilterConfigSet(opts *bind.FilterOpts, configDigest [][32]byte) (*RMNHomeConfigSetIterator, error) + + WatchConfigSet(opts *bind.WatchOpts, sink chan<- *RMNHomeConfigSet, configDigest [][32]byte) (event.Subscription, error) + + ParseConfigSet(log types.Log) (*RMNHomeConfigSet, error) + + FilterDynamicConfigSet(opts *bind.FilterOpts, configDigest [][32]byte) (*RMNHomeDynamicConfigSetIterator, error) + + WatchDynamicConfigSet(opts *bind.WatchOpts, sink chan<- *RMNHomeDynamicConfigSet, configDigest [][32]byte) (event.Subscription, error) + + ParseDynamicConfigSet(log types.Log) (*RMNHomeDynamicConfigSet, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNHomeOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *RMNHomeOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*RMNHomeOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNHomeOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *RMNHomeOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*RMNHomeOwnershipTransferred, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var RMNHomeZKBin string = ("0x0002000000000002000d00000000000200010000000103550000006004100270000003720040019d0000008003000039000000400030043f0000000100200190000000210000c13d0000037202400197000000040020008c0000094b0000413d000000000401043b000000e004400270000003780040009c000000390000a13d000003790040009c000000550000a13d0000037a0040009c000000c70000213d0000037d0040009c000000de0000613d0000037e0040009c0000094b0000c13d0000000001000416000000000001004b0000094b0000c13d0000000101000039000000000101041a0000038901100197000000800010043f000003910100004100000dc50001042e0000000001000416000000000001004b0000094b0000c13d0000000001000411000000000001004b0000002b0000c13d0000037601000041000000800010043f000003770100004100000dc6000104300000000102000039000000000302041a0000037303300197000000000113019f000000000012041b0000000e01000039000000000201041a0000037402200197000000000021041b000000200100003900000100001004430000012000000443000003750100004100000dc50001042e000003820040009c000000740000213d000003860040009c000001590000613d000003870040009c000002110000613d000003880040009c0000094b0000c13d0000000001000416000000000001004b0000094b0000c13d000000c001000039000000400010043f0000001101000039000000800010043f000003aa01000041000000a00010043f0000002001000039000000c00010043f0000008001000039000000e0020000390dc40b690000040f000000c00110008a000003720010009c00000372010080410000006001100210000003ab011001c700000dc50001042e0000037f0040009c000001090000613d000003800040009c000001350000613d000003810040009c0000094b0000c13d0000000001000416000000000001004b0000094b0000c13d000000000100041a00000389021001970000000006000411000000000026004b0000023f0000c13d0000000102000039000000000302041a0000037304300197000000000464019f000000000042041b0000037301100197000000000010041b00000000010004140000038905300197000003720010009c0000037201008041000000c0011002100000038c011001c70000800d0200003900000003030000390000039704000041000002b60000013d000003830040009c000001fd0000613d000003840040009c000002200000613d000003850040009c0000094b0000c13d0000000001000416000000000001004b0000094b0000c13d000000800000043f000000a00000043f0000006001000039000001000010043f000001200010043f0000010002000039000000c00020043f000001400010043f000001600010043f0000014002000039000000e00020043f000001800000043f000001a00000043f000002000010043f000002200010043f0000020002000039000001c00020043f0000028002000039000000400020043f000002400010043f000002600010043f0000024001000039000001e00010043f0000000e01000039000000000101041a00000020011002700000037201100197000000010010008c0000021a0000213d000b00000001001d00000006011000c900000002011000390dc40c940000040f000800000001001d00000020021000390000000001020433000700000001001d0000000b01000029000000010110015f00000006011000c900000002011000390dc40c940000040f000a00000001001d00000020021000390000000001020433000900000001001d0000004001000039000000400200043d000b00000002001d0000000001120436000600000001001d000000070000006b0000000801000029000000800100603900000040022000390dc40b7b0000040f00000000020100190000000b0120006a00000006030000290000000000130435000000090000006b0000000a0100002900000180010060390dc40b7b0000040f0000000b020000290000000001210049000003720020009c00000372020080410000004002200210000003720010009c00000372010080410000006001100210000000000121019f00000dc50001042e0000037b0040009c000000f30000613d0000037c0040009c0000094b0000c13d000000240020008c0000094b0000413d0000000002000416000000000002004b0000094b0000c13d0000000401100370000000000501043b0000000101000039000000000101041a00000389011001970000000002000411000000000012004b0000022b0000c13d000000000005004b0000028e0000c13d0000038e01000041000000800010043f000003770100004100000dc600010430000000440020008c0000094b0000413d0000000002000416000000000002004b0000094b0000c13d0000002402100370000000000502043b0000000401100370000000000401043b0000000101000039000000000101041a00000389011001970000000002000411000000000012004b0000022b0000c13d00000000005401a0000002430000c13d0000039501000041000000800010043f000003770100004100000dc600010430000000240020008c0000094b0000413d0000000002000416000000000002004b0000094b0000c13d0000000401100370000000000101043b000003890010009c0000094b0000213d0000000102000039000000000202041a00000389022001970000000005000411000000000025004b0000022b0000c13d0000038906100197000000000056004b000002aa0000c13d0000039001000041000000800010043f000003770100004100000dc600010430000000240020008c0000094b0000413d0000000002000416000000000002004b0000094b0000c13d0000000401100370000000000101043b000000800000043f000000a00000043f0000006002000039000001000020043f000001200020043f0000010004000039000000c00040043f0000018004000039000000400040043f000001400020043f000001600020043f0000014002000039000000e00020043f000000000001004b0000022f0000c13d0000000002000019000900000004001d000a00000002001d00000040010000390000000001140436000b00000001001d000000400240003900000000010300190dc40b7b0000040f0000000b020000290000000a03000029000000000032043500000009020000290000000001210049000003720010009c00000372010080410000006001100210000003720020009c00000372020080410000004002200210000000000121019f00000dc50001042e000000440020008c0000094b0000413d0000000003000416000000000003004b0000094b0000c13d0000000403100370000000000303043b000b00000003001d000003980030009c0000094b0000213d0000000b0220006a000003990020009c0000094b0000213d000000440020008c0000094b0000413d0000000102000039000000000202041a00000389022001970000000003000411000000000023004b0000022b0000c13d0000002401100370000000000301043b0000000002000415000000000003004b000002bb0000c13d000000400100043d000003a502000041000000000021043500000004021000390000000000320435000003720010009c00000372010080410000004001100210000003a6011001c700000dc600010430000000640020008c0000094b0000413d0000000003000416000000000003004b0000094b0000c13d0000000403100370000000000403043b000003980040009c0000094b0000213d0000000003420049000003990030009c0000094b0000213d000000440030008c0000094b0000413d0000002403100370000000000303043b000003980030009c0000094b0000213d0000000005320049000003990050009c0000094b0000213d000000440050008c0000094b0000413d0000000105000039000000000505041a00000389055001970000000006000411000000000056004b0000022b0000c13d000000c005000039000000400050043f0000000406400039000000000761034f000000000707043b000003980070009c0000094b0000213d00000000074700190000002308700039000000000028004b0000094b0000813d000000040d7000390000000008d1034f000000000808043b0000039e0080009c000002880000813d00000005098002100000003f099000390000039c09900197000003ad0090009c000002880000213d000000c009900039000000400090043f000000c00080043f000b00240070003d00000006078002100000000b07700029000000000027004b0000094b0000213d000000000008004b000001ac0000613d000000e0080000390000000b09000029000000000a9200490000039900a0009c0000094b0000213d0000004000a0008c0000094b0000413d000000400a00043d0000039a00a0009c000002880000213d000000400ba000390000004000b0043f000000000b91034f000000000b0b043b000000000bba0436000000200c900039000000000cc1034f000000000c0c043b0000000000cb04350000000008a804360000004009900039000000000079004b000001970000413d000000800050043f0000002005600039000000000551034f000000000505043b000003980050009c0000094b0000213d00000000074500190000002304700039000000000024004b00000000050000190000039b050080410000039b04400197000000000004004b00000000060000190000039b060040410000039b0040009c000000000605c019000000000006004b0000094b0000c13d0000000408700039000000000481034f000000000404043b000003980040009c000002880000213d0000001f05400039000003bf055001970000003f05500039000003bf06500197000000400500043d0000000006650019000000000056004b00000000090000390000000109004039000003980060009c000002880000213d0000000100900190000002880000c13d000000400060043f000000000645043600000000074700190000002407700039000000000027004b0000094b0000213d00080000000d001d0000002007800039000000000771034f000003bf084001980000001f0940018f0000000001860019000001e40000613d000000000a07034f000000000b06001900000000ac0a043c000000000bcb043600000000001b004b000001e00000c13d000000000009004b000001f10000613d000000000787034f0000000308900210000000000901043300000000098901cf000000000989022f000000000707043b0000010008800089000000000787022f00000000078701cf000000000797019f000000000071043500000000014600190000000000010435000000a00050043f00000004013000390dc40be30000040f000000800200043d0000000032020434000001000020008c000004b70000a13d000000400100043d000003be02000041000005100000013d0000000001000416000000000001004b0000094b0000c13d0000000e01000039000000000101041a00000020011002700000037201100197000000010010008c0000021a0000213d000000010210015f00000006022000c90000000302200039000000000202041a00000006011000c90000000301100039000000000101041a000000800010043f000000a00020043f000003a90100004100000dc50001042e0000000001000416000000000001004b0000094b0000c13d0000000e01000039000000000101041a00000020011002700000037201100197000000010010008c000002390000a13d000003ba01000041000000000010043f0000003201000039000000040010043f000003a60100004100000dc6000104300000000001000416000000000001004b0000094b0000c13d0dc40c830000040f000000400200043d0000000000120435000003720020009c00000372020080410000004001200210000003a8011001c700000dc50001042e000003ac01000041000000800010043f000003770100004100000dc6000104300000000302000039000000000202041a000000000012004b000002700000c13d000000070400003900000006050000390000000506000039000000040200003900000002030000390000027a0000013d00000006011000c90000000301100039000000000101041a000000800010043f000003910100004100000dc50001042e0000039601000041000000800010043f000003770100004100000dc6000104300000000e01000039000000000201041a00000020022002700000037202200197000000010020008c0000021a0000213d000000010320015f00000006033000c90000000303300039000000000303041a000000000043004b000003050000c13d00000006022000c90000000303200039000000000203041a000000000052004b000003d80000c13d000b00000004001d000000000003041b000000000201041a0000039202200167000000000021041b000000000005004b000002660000613d0000000001000414000003720010009c0000037201008041000000c0011002100000038c011001c70000800d02000039000000020300003900000393040000410dc40dba0000040f00000001002001900000094b0000613d0000000001000414000003720010009c0000037201008041000000c0011002100000038c011001c70000800d02000039000000020300003900000394040000410000000b05000029000002b60000013d0000000902000039000000000202041a000000000012004b0000000002000019000001200000c13d0000000d040000390000000c050000390000000b060000390000000a020000390000000803000039000000000303041a0000037203300197000001800030043f000001a00010043f0000024001000039000000400010043f000000000302041a000003980030009c000002880000213d00000005013002100000003f011000390000039c01100197000003a70010009c000002ca0000a13d000003ba01000041000000000010043f0000004101000039000000040010043f000003a60100004100000dc6000104300000000e01000039000000000101041a00000020011002700000037201100197000000010010008c0000021a0000213d000000010110015f00000006011000c90000000302100039000000000102041a000000000051004b000003d20000c13d000b00000002001d0000000001000414000003720010009c0000037201008041000000c0011002100000038c011001c70000800d0200003900000002030000390000038d040000410dc40dba0000040f00000001002001900000094b0000613d0000000b01000029000000000001041b000000000100001900000dc50001042e000000000100041a0000037301100197000000000161019f000000000010041b0000000001000414000003720010009c0000037201008041000000c0011002100000038c011001c70000800d0200003900000003030000390000038f040000410dc40dba0000040f00000001002001900000094b0000613d000000000100001900000dc50001042e00000000040004150000000d0440008a0000000504400210000d00030000003d0000000301000039000000000101041a000000000031004b0000030b0000c13d000500000004001d000700000003001d000800000002001d000600070000003d000900060000003d0000000403000039000003190000013d000a00000006001d000b00000005001d000800000004001d0000024001100039000000400010043f000900000003001d000002400030043f000000000020043f0000000001000414000003720010009c0000037201008041000000c0011002100000039f011001c700008010020000390dc40dbf0000040f00000001002001900000094b0000613d0000000909000029000000000009004b0000000b060000290000000a070000290000024008000039000002f30000613d000000000101043b0000000002000019000000400300043d0000039a0030009c000002880000213d0000004004300039000000400040043f000000000401041a00000000044304360000000105100039000000000505041a00000000005404350000002008800039000000000038043500000002011000390000000102200039000000000092004b000002e30000413d0000024001000039000002000010043f000000000107041a000000010210019000000001041002700000007f0440618f0000001f0040008c00000000030000390000000103002039000000000331013f0000000100300190000003de0000613d000003ba01000041000000000010043f0000002201000039000000040010043f000003a60100004100000dc6000104300000038a01000041000000800010043f000000840030043f000000a40040043f0000038b0100004100000dc60001043000000000040004150000000c0440008a0000000504400210000c00030000003d0000000901000039000000000101041a000000000031004b0000014f0000c13d000500000004001d000700000003001d000800000002001d0006000d0000003d0009000c0000003d0000000a030000390000000b01000029000a00040010003d00000000010000310000000a0210006a000003990020009c0000094b0000213d000000400020008c0000094b0000413d000000400500043d0000039a0050009c000002880000213d000000000303041a0000004007500039000000400070043f00000001060003670000000a04600360000000000404043b000003980040009c0000094b0000213d0000000a094000290000001f08900039000000000018004b000000000a0000190000039b0a0080410000039b0b8001970000039b08100197000000000c8b013f00000000008b004b000000000b0000190000039b0b0040410000039b00c0009c000000000b0ac01900000000000b004b0000094b0000c13d000000000a96034f000000000a0a043b00040000000a001d0000039800a0009c000002880000213d000000040a000029000000050aa002100000003f0aa000390000039c0aa00197000000000a7a00190000039800a0009c000002880000213d0000004000a0043f000000040a0000290000000000a70435000300200090003d0000006009a000c90000000309900029000000000019004b0000094b0000213d000000040000006b0000047c0000c13d00000000077504360000000a090000290000002009900039000000000996034f000000000909043b000003980090009c0000094b0000213d0000000a0b9000290000001f09b00039000000000019004b000000000a0000190000039b0a0080410000039b09900197000000000c89013f000000000089004b00000000080000190000039b080040410000039b00c0009c00000000080ac019000000000008004b0000094b0000c13d0000000008b6034f000000000808043b000003980080009c000002880000213d0000001f09800039000003bf099001970000003f09900039000003bf0a900197000000400900043d000000000aa9001900000000009a004b000000000c000039000000010c0040390000039800a0009c000002880000213d0000000100c00190000002880000c13d0000004000a0043f000000000a890436000000200bb00039000000000cb8001900000000001c004b0000094b0000213d0002000000b60353000003bf0c8001980000001f0d80018f0000000006ca0019000003880000613d000000020e00035f000000000f0a001900000000eb0e043c000000000fbf043600000000006f004b000003840000c13d00000000000d004b000003950000613d000000020bc0035f000000030cd00210000000000d060433000000000dcd01cf000000000dcd022f000000000b0b043b000001000cc00089000000000bcb022f000000000bcb01cf000000000bdb019f0000000000b604350000000b06000029000200240060003d00000000068a0019000000000006043500000000009704350000010007300089000003c00670027f000000ff0070008c00000000060020190000000007050433000000200570003900000000070704330000000008000019000000000078004b000005430000813d0000000509800210000000000959001900000000090904330000000108800039000000000078004b000003b60000813d000000000a090433000000000b080019000000050cb00210000000000c5c0019000000000c0c0433000000000c0c0433000000000cac013f0000039800c001980000050b0000613d000000010bb0003900000000007b004b000003ac0000413d000001000030008c0000053d0000213d000000400a900039000000000b0a0433000000000a6b016f0000000000ba004b000005160000c13d00000000000b004b000003c60000613d000000000a000019000000010aa0003a0000053d0000613d000000010cb0008a000000000bbc0170000003c00000c13d000003c70000013d000000000a00001900000020099000390000000009090433000000010b900210000003a309b00197000003a40bb001970000000000b9004b0000053d0000c13d00000001099001bf00000000009a004b000003a20000813d000004ee0000013d0000038a02000041000000800020043f000000840010043f000000a40050043f0000038b0100004100000dc6000104300000038a01000041000000800010043f000000840020043f000000a40050043f0000038b0100004100000dc600010430000000400500043d0000000003450436000000000002004b000004000000613d000600000003001d000700000004001d000900000005001d000000000070043f0000000001000414000003720010009c0000037201008041000000c0011002100000039f011001c700008010020000390dc40dbf0000040f00000001002001900000094b0000613d0000000707000029000000000007004b00000000020000190000000b0600002900000009050000290000000608000029000004050000613d000000000101043b00000000020000190000000003280019000000000401041a000000000043043500000001011000390000002002200039000000000072004b000003f80000413d000004050000013d000003c1011001970000000000130435000000000004004b000000200200003900000000020060390000003f01200039000003bf011001970000000002510019000000000012004b00000000010000390000000101004039000003980020009c000002880000213d0000000100100190000002880000c13d000000400020043f000002200050043f0000020001000039000001c00010043f0000039a0020009c000002880000213d0000004001200039000b00000001001d000000400010043f000000000406041a000003980040009c000002880000213d00000005014002100000003f011000390000039c011001970000000b01100029000003980010009c000002880000213d000a00000002001d000000400010043f0000000b01000029000900000004001d0000000000410435000000000060043f0000000001000414000003720010009c0000037201008041000000c0011002100000039f011001c700008010020000390dc40dbf0000040f00000001002001900000094b0000613d000000090a00002900000000000a004b00000008080000290000000a090000290000044d0000613d0000006002900039000000000101043b0000000003000019000000400400043d0000039d0040009c000002880000213d0000006005400039000000400050043f000000000501041a0000004006500270000003980660019700000020074000390000000000670435000003980550019700000000005404350000000105100039000000000505041a000000400640003900000000005604350000000002420436000000020110003900000001033000390000000000a3004b000004380000413d0000000b010000290000000001190436000900000001001d000000000108041a000000010210019000000001031002700000007f0330618f000b00000003001d0000001f0030008c00000000030000390000000103002039000000000331013f0000000100300190000002ff0000c13d000000400300043d000700000003001d0000000b040000290000000003430436000600000003001d000000000002004b0000049d0000613d0000000801000029000000000010043f0000000001000414000003720010009c0000037201008041000000c0011002100000039f011001c700008010020000390dc40dbf0000040f00000001002001900000094b0000613d0000000b05000029000000000005004b00000000020000190000000606000029000004a30000613d000000000101043b00000000020000190000000003260019000000000401041a000000000043043500000001011000390000002002200039000000000052004b000004740000413d000004a30000013d000000600a500039000000030b000029000000000cb100490000039900c0009c0000094b0000213d0000006000c0008c0000094b0000413d000000400c00043d0000039d00c0009c000002880000213d000000600dc000390000004000d0043f000000000db6034f000000000d0d043b0000039800d0009c0000094b0000213d000000000edc0436000000200db00039000000000fd6034f000000000f0f043b0000039800f0009c0000094b0000213d0000000000fe0435000000200dd00039000000000dd6034f000000000d0d043b000000400ec000390000000000de0435000000000aca0436000000600bb0003900000000009b004b0000047e0000413d000003510000013d000003c101100197000000060200002900000000001204350000000b0000006b000000200200003900000000020060390000003f01200039000003bf021001970000000701200029000000000021004b00000000020000390000000102004039000003980010009c0000000a03000029000002880000213d0000000100200190000002880000c13d000000400010043f000000090100002900000007020000290000000000210435000001e00030043f00000001020000390000018003000039000000400400043d000001200000013d000000000002004b000004f10000c13d0000010003200089000003c00230027f000000ff0030008c00000000020020190000000003010433000000200130003900000000030304330000000004000019000000000034004b000005190000813d0000000505400210000000000515001900000000050504330000000104400039000000000034004b000004d50000813d000000000605043300000000070400190000000508700210000000000818001900000000080804330000000008080433000000000868013f00000398008001980000050b0000613d0000000107700039000000000037004b000004cb0000413d00000040065000390000000007060433000000000627016f000000000076004b000005160000c13d000000000007004b000004e30000613d0000000006000019000000010660003a0000053d0000613d000000010870008a0000000007780170000004dd0000c13d000004e40000013d0000000006000019000000200550003900000000050504330000000107500210000003a305700197000003a407700197000000000075004b0000053d0000c13d00000001055001bf000000000056004b000004c10000813d000000400100043d000003bc02000041000005100000013d0000000004000019000004f60000013d0000000104400039000000000024004b000004b90000813d0000000505400210000000000535001900000000060400190000000106600039000000000026004b000004f30000813d00000005076002100000000007370019000000000707043300000000790704340000000008050433000000008a08043400000000009a004b0000050e0000613d00000000070704330000000008080433000000000078004b000004f90000c13d000000400100043d000003ae02000041000005100000013d000000400100043d000003bd02000041000005100000013d000000400100043d000003b0020000410000000000210435000003720010009c00000372010080410000004001100210000003af011001c700000dc600010430000000400100043d000003bb02000041000005100000013d0000000e01000039000000000101041a000700000001001d00000020011002700000037202100197000000020020008c0000021a0000813d00000044010000390000000101100367000000000101043b000000010220015f00000006022000c90000000302200039000000000502041a000000000015004b0000061c0000c13d000000000005004b000005390000613d0000000001000414000003720010009c0000037201008041000000c0011002100000038c011001c70000800d0200003900000002030000390000038d040000410dc40dba0000040f00000001002001900000094b0000613d0000000e01000039000000000101041a000700000001001d00000007010000290000037201100197000003720010009c000006280000c13d000003ba01000041000000000010043f0000001101000039000000040010043f000003a60100004100000dc6000104300000001f0220008a000000000024004b00000000030000190000039b030080410000039b044001970000039b02200197000000000524013f000000000024004b00000000020000190000039b020040410000039b0050009c000000000203c019000000000002004b0000094b0000c13d000000600300008a00000004023000b900000000011200190000000303000029000000000013004b00000000020000190000039b020020410000039b011001970000039b03300197000000000413013f000000000013004b00000000010000190000039b010040410000039b0040009c000000000102c019000000000001004b0000094b0000c13d00000004010000290000039e0010009c000002880000213d0000000902000029000000000302041a0000000401000029000000000012041b000100000003001d000000000031004b000005890000813d0000000101000029000003990010009c0000053d0000213d0000000901000029000000000010043f0000000001000414000003720010009c0000037201008041000000c0011002100000039f011001c700008010020000390dc40dbf0000040f00000001002001900000094b0000613d00000004020000290000000102200210000000000301043b0000000001230019000000010200002900000001022002100000000002230019000000000021004b000005890000813d000000000001041b0000000103100039000000000003041b0000000201100039000000000021004b000005830000413d0000000901000029000000000010043f0000000001000414000003720010009c0000037201008041000000c0011002100000039f011001c700008010020000390dc40dbf0000040f00000001002001900000094b0000613d0000000102000367000000040000006b000005b50000613d000000000101043b00000000030000190000000304200360000000000404043b000003980040009c0000094b0000213d00000003050000290000002005500039000000000652034f000000000606043b000003980060009c0000094b0000213d000000000701041a000003a0077001970000004006600210000003a106600197000000000676019f000000000446019f000000000041041b0000002004500039000000000442034f000000000404043b0000000105100039000000000045041b00000002011000390000000304000029000300600040003d0000000103300039000000040030006c000005990000413d0000000201200360000000000301043b00000000010000310000000b0410006a000000230440008a0000039b054001970000039b06300197000000000756013f000000000056004b00000000050000190000039b05004041000000000043004b00000000040000190000039b040080410000039b0070009c000000000504c019000000000005004b0000094b0000c13d0000000a03300029000000000232034f000000000202043b000900000002001d000003980020009c0000094b0000213d000000090110006a00000020053000390000039b021001970000039b03500197000000000423013f000000000023004b00000000020000190000039b02004041000b00000005001d000000000015004b00000000010000190000039b010020410000039b0040009c000000000201c019000000000002004b0000094b0000c13d0000000601000029000000000101041a000000010010019000000001021002700000007f0220618f000400000002001d0000001f0020008c00000000020000390000000102002039000000000121013f0000000100100190000002ff0000c13d0000000401000029000000200010008c000006080000413d0000000601000029000000000010043f0000000001000414000003720010009c0000037201008041000000c0011002100000039f011001c700008010020000390dc40dbf0000040f00000001002001900000094b0000613d00000009030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000004010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b000006080000813d000000000002041b0000000102200039000000000012004b000006040000413d00000009010000290000001f0010008c0000081a0000a13d0000000601000029000000000010043f0000000001000414000003720010009c0000037201008041000000c0011002100000039f011001c700008010020000390dc40dbf0000040f00000001002001900000094b0000613d000000200200008a0000000903200180000000000101043b0000082f0000c13d0000000002000019000008390000013d000000400200043d000000240320003900000000001304350000038a01000041000000000012043500000004012000390000000000510435000003720020009c00000372020080410000004001200210000003b1011001c700000dc6000104300000000702000029000003b2012001970000000102200039000503720020019b00000005011001af0000000e02000039000000000012041b000000400100043d000600000001001d00000020021000390000002001000039000a00000002001d000000000012043500000001010003670000000402100370000000000202043b0000000403200039000000000231034f000000000602043b000000000200003100000000043200490000001f0440008a0000039b054001970000039b07600197000000000857013f000000000057004b00000000070000190000039b07004041000000000046004b00000000090000190000039b090080410000039b0080009c000000000709c019000000000007004b0000094b0000c13d0000000006360019000000000761034f000000000807043b000003980080009c0000094b0000213d000000200960003900000006068002100000000006620049000000000069004b00000000070000190000039b070020410000039b066001970000039b0a900197000000000b6a013f00000000006a004b00000000060000190000039b060040410000039b00b0009c000000000607c019000000000006004b0000094b0000c13d000000060b0000290000008007b000390000004006b00039000000400a0000390000000000a604350000000000870435000000a007b00039000000000008004b000006760000613d000000000a000019000000000b91034f000000000b0b043b000000000bb70436000000200c900039000000000cc1034f000000000c0c043b0000000000cb043500000040099000390000004007700039000000010aa0003900000000008a004b0000066a0000413d0000002008300039000000000881034f000000000808043b0000039b09800197000000000a59013f000000000059004b00000000050000190000039b05004041000000000048004b00000000040000190000039b040080410000039b00a0009c000000000504c019000000000005004b0000094b0000c13d0000000004380019000000000341034f000000000303043b000003980030009c0000094b0000213d00000020044000390000000002320049000000000024004b00000000050000190000039b050020410000039b022001970000039b08400197000000000928013f000000000028004b00000000020000190000039b020040410000039b0090009c000000000205c019000000000002004b0000094b0000c13d0000000002670049000000060500002900000060055000390000000000250435000000000441034f0000000001370436000003bf053001980000001f0630018f0000000002510019000006a90000613d000000000704034f0000000008010019000000007907043c0000000008980436000000000028004b000006a50000c13d000000000006004b000006b60000613d000000000454034f0000000305600210000000000602043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f000000000042043500000000021300190000000000020435000000060400002900000000014100490000001f02300039000003bf022001970000000001120019000000200210008a00000000002404350000001f01100039000003bf011001970000000002410019000000000012004b00000000010000390000000101004039000400000002001d000003980020009c000002880000213d0000000100100190000002880000c13d0000000401000029000000400010043f0000002002100039000003b301000041000900000002001d0000000000120435000003b40100004100000000001004430000000001000414000003720010009c0000037201008041000000c001100210000003b5011001c70000800b020000390dc40dbf0000040f0000000100200190000008190000613d000000000101043b00000004040000290000008002400039000000050300002900000000003204350000006002400039000000000300041000000000003204350000004002400039000000000012043500000080010000390000000000140435000003b60040009c000002880000213d0000000403000029000000c002300039000000a001300039000000400010043f0000000003030433000000000003004b000006f80000613d000000000400001900000000052400190000000906400029000000000606043300000000006504350000002004400039000000000034004b000006f10000413d0000000004230019000000000004043500000006050000290000000005050433000000000005004b000007060000613d000000000600001900000000074600190000000a08600029000000000808043300000000008704350000002006600039000000000056004b000006ff0000413d00000000044500190000000000040435000000000335001900000000003104350000003f03300039000003bf043001970000000003140019000000000043004b00000000040000390000000104004039000003980030009c000002880000213d0000000100400190000002880000c13d000000400030043f000003720020009c000003720200804100000040022002100000000001010433000003720010009c00000372010080410000006001100210000000000121019f0000000002000414000003720020009c0000037202008041000000c002200210000000000112019f0000038c011001c700008010020000390dc40dbf0000040f00000001002001900000094b0000613d000000000201043b000000070100002900000020011002700000037201100197000000010010008c0000021a0000213d000003b702200197000003b8022001c7000000010110015f00000006031000c90000000301300039000900000002001d000000000021041b000a00000003001d0000000201300039000000000201041a000003b20220019700000005022001af000000000021041b00000001020003670000000401200370000000000301043b00000000010000310000000004310049000000230440008a0000000403300039000000000332034f000000000303043b000000000043004b00000000050000190000039b050080410000039b044001970000039b03300197000000000643013f000000000043004b00000000030000190000039b030040410000039b0060009c000000000305c019000000000003004b00000008030000290000094b0000c13d000000000232034f000000000202043b000003980020009c0000094b0000213d000000060320021000000000013100490000000b04000029000000000014004b00000000030000190000039b030020410000039b011001970000039b04400197000000000514013f000000000014004b00000000010000190000039b010040410000039b0050009c000000000103c019000000000001004b0000094b0000c13d0000000a010000290000000401100039000000000301041a000700000001001d000000000021041b000600000003001d000000000032004b0000078c0000813d0000000601000029000003990010009c0000053d0000213d0000000701000029000000000010043f0000000001000414000003720010009c0000037201008041000000c0011002100000039f011001c700008010020000390dc40dbf0000040f000000010020019000000008040000290000094b0000613d00000006020000290000000102200210000000000301043b00000000012300190000000102400367000000000202043b00000001022002100000000002320019000000000012004b0000078c0000813d000000000002041b0000000103200039000000000003041b0000000202200039000000000012004b000007860000413d0000000701000029000000000010043f0000000001000414000003720010009c0000037201008041000000c0011002100000039f011001c700008010020000390dc40dbf0000040f000000010020019000000008030000290000094b0000613d0000000102000367000000000332034f000000000303043b000000000003004b000007ad0000613d000000000101043b00000000040000190000000b07000029000000000572034f000000000505043b000000000051041b0000002005700039000000000552034f000000000505043b0000000106100039000000000056041b0000000201100039000b00400070003d0000000104400039000000000034004b0000079f0000413d0000000401200370000000000301043b0000002401300039000000000112034f000000000401043b00000000010000310000000005310049000000230550008a0000039b065001970000039b07400197000000000867013f000000000067004b00000000060000190000039b06004041000000000054004b00000000050000190000039b050080410000039b0080009c000000000605c019000000000006004b0000094b0000c13d00000000034300190000000403300039000000000232034f000000000202043b000800000002001d000003980020009c0000094b0000213d000000080110006a00000020053000390000039b021001970000039b03500197000000000423013f000000000023004b00000000020000190000039b02004041000b00000005001d000000000015004b00000000010000190000039b010020410000039b0040009c000000000201c019000000000002004b0000094b0000c13d0000000a010000290000000501100039000700000001001d000000000101041a000000010210019000000001011002700000007f0110618f000600000001001d0000001f0010008c00000000010000390000000101002039000000000012004b000002ff0000c13d0000000601000029000000200010008c000008050000413d0000000701000029000000000010043f0000000001000414000003720010009c0000037201008041000000c0011002100000039f011001c700008010020000390dc40dbf0000040f00000001002001900000094b0000613d00000008030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000006010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b000008050000813d000000000002041b0000000102200039000000000012004b000008010000413d00000008010000290000001f0010008c000008f50000a13d0000000701000029000000000010043f0000000001000414000003720010009c0000037201008041000000c0011002100000039f011001c700008010020000390dc40dbf0000040f00000001002001900000094b0000613d000000200200008a0000000802200180000000000101043b000009030000c13d00000000030000190000090d0000013d000000000001042f000000090000006b0000000001000019000008200000613d0000000b010000290000000101100367000000000101043b000000050200002900000005022002700000000002020031000000090500002900000000032501cf000000ff0020008c0000000003002019000000010400008a000000000234022f000000ff0030008c000000000442a13f000000000114016f0000000102500210000000000121019f0000084c0000013d000000010400036700000000020000190000000b05200029000000000554034f000000000505043b000000000051041b00000001011000390000002002200039000000000032004b000008310000413d000000090030006c000008490000813d00000005030000290000000503300270000000000303003100000009043001ef000000f80440018f000003c00440027f000003c004400167000000ff0030008c00000000040020190000000b022000290000000102200367000000000202043b000000000224016f000000000021041b0000000901000029000000010110021000000001011001bf0000000602000029000000000012041b0000002002000039000000400100043d00000000032104360000000202000029000000200420008a0000000102000367000000000442034f000000000704043b00000000040000310000000a0540006a0000001f0550008a0000039b065001970000039b08700197000000000968013f000000000068004b00000000080000190000039b08004041000000000057004b000000000a0000190000039b0a0080410000039b0090009c00000000080ac019000000000008004b0000094b0000c13d0000000a07700029000000000872034f000000000808043b000003980080009c0000094b0000213d0000002009700039000003c2078000d10000000007470019000000000079004b000000000a0000190000039b0a0020410000039b077001970000039b0b900197000000000c7b013f00000000007b004b00000000070000190000039b070040410000039b00c0009c00000000070ac019000000000007004b0000094b0000c13d0000006007100039000000400a0000390000000000a3043500000000008704350000008007100039000000000008004b000008980000613d000000000a000019000000000b92034f000000000b0b043b0000039800b0009c0000094b0000213d000000000cb70436000000200b900039000000000db2034f000000000d0d043b0000039800d0009c0000094b0000213d0000000000dc0435000000200bb00039000000000bb2034f000000000b0b043b000000400c7000390000000000bc043500000060099000390000006007700039000000010aa0003900000000008a004b000008830000413d0000000208200360000000000808043b0000039b09800197000000000a69013f000000000069004b00000000060000190000039b06004041000000000058004b00000000050000190000039b050080410000039b00a0009c000000000605c019000000000006004b0000094b0000c13d0000000a06800029000000000562034f000000000505043b000003980050009c0000094b0000213d00000020066000390000000004540049000000000046004b00000000080000190000039b080020410000039b044001970000039b09600197000000000a49013f000000000049004b00000000040000190000039b040040410000039b00a0009c000000000408c019000000000004004b0000094b0000c13d000000000337004900000040041000390000000000340435000000000462034f0000000002570436000003bf065001980000001f0750018f0000000003620019000008c90000613d000000000804034f0000000009020019000000008a08043c0000000009a90436000000000039004b000008c50000c13d000000000007004b000008d60000613d000000000464034f0000000306700210000000000703043300000000076701cf000000000767022f000000000404043b0000010006600089000000000464022f00000000046401cf000000000474019f0000000000430435000000000325001900000000000304350000001f03500039000003bf0330019700000000021200490000000002320019000003720020009c00000372020080410000006002200210000003720010009c00000372010080410000004001100210000000000112019f0000000002000414000003720020009c0000037202008041000000c002200210000000000112019f0000038c011001c70000800d020000390000000203000039000003a20400004100000007050000290dc40dba0000040f00000001002001900000094b0000613d000000000100041500000008011000690000000001000002000000000100001900000dc50001042e000000080000006b0000000001000019000008fb0000613d0000000b010000290000000101100367000000000101043b00000008040000290000000302400210000003c00220027f000003c002200167000000000121016f0000000102400210000000000121019f0000091c0000013d000000010400036700000000030000190000000b05300029000000000554034f000000000505043b000000000051041b00000001011000390000002003300039000000000023004b000009050000413d000000080020006c000009190000813d00000008020000290000000302200210000000f80220018f000003c00220027f000003c0022001670000000b033000290000000103300367000000000303043b000000000223016f000000000021041b0000000801000029000000010110021000000001011001bf0000000702000029000000000012041b00000001020003670000002401200370000000000301043b0000000401300039000000000112034f000000000401043b00000000010000310000000005310049000000230550008a0000039b065001970000039b07400197000000000867013f000000000067004b00000000060000190000039b06002041000000000054004b00000000050000190000039b050040410000039b0080009c000000000605c019000000000006004b0000094b0000613d0000000003340019000800040030003d0000000802200360000000000202043b000003980020009c0000094b0000213d000003c2042000d1000000000114001900000024063000390000039b031001970000039b04600197000000000534013f000000000034004b00000000030000190000039b03004041000b00000006001d000000000016004b00000000010000190000039b010020410000039b0050009c000000000301c019000000000003004b0000094d0000613d000000000100001900000dc6000104300000000a010000290000000601100039000000000301041a000700000001001d000000000021041b000600000003001d000000000032004b000009740000813d0000000601000029000003990010009c0000053d0000213d0000000701000029000000000010043f0000000001000414000003720010009c0000037201008041000000c0011002100000039f011001c700008010020000390dc40dbf0000040f00000001002001900000094b0000613d00000006020000290000000102200210000000000301043b000000000123001900000008020000290000000102200367000000000202043b00000001022002100000000002320019000000000012004b000009740000813d000000000002041b0000000103200039000000000003041b0000000202200039000000000012004b0000096e0000413d0000000701000029000000000010043f0000000001000414000003720010009c0000037201008041000000c0011002100000039f011001c700008010020000390dc40dbf0000040f00000001002001900000094b0000613d00000001020003670000000803200360000000000303043b000000000003004b000009a20000613d000000000101043b00000000040000190000000b05200360000000000505043b000003980050009c0000094b0000213d0000000b060000290000002006600039000000000762034f000000000707043b000003980070009c0000094b0000213d000000000801041a000003a0088001970000004007700210000003a107700197000000000787019f000000000557019f000000000051041b0000002005600039000000000552034f000000000505043b0000000106100039000000000056041b00000002011000390000000b05000029000b00600050003d0000000104400039000000000034004b000009860000413d0000002401200370000000000301043b0000002401300039000000000112034f000000000401043b00000000010000310000000005310049000000230550008a0000039b065001970000039b07400197000000000867013f000000000067004b00000000060000190000039b06004041000000000054004b00000000050000190000039b050080410000039b0080009c000000000605c019000000000006004b0000094b0000c13d00000000034300190000000403300039000000000232034f000000000202043b000800000002001d000003980020009c0000094b0000213d000000080110006a00000020053000390000039b021001970000039b03500197000000000423013f000000000023004b00000000020000190000039b02004041000b00000005001d000000000015004b00000000010000190000039b010020410000039b0040009c000000000201c019000000000002004b0000094b0000c13d0000000a010000290000000701100039000a00000001001d000000000101041a000000010010019000000001021002700000007f0220618f000700000002001d0000001f0020008c00000000020000390000000102002039000000000121013f0000000100100190000002ff0000c13d0000000701000029000000200010008c000009fb0000413d0000000a01000029000000000010043f0000000001000414000003720010009c0000037201008041000000c0011002100000039f011001c700008010020000390dc40dbf0000040f00000001002001900000094b0000613d00000008030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b00000007010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b000009fb0000813d000000000002041b0000000102200039000000000012004b000009f70000413d00000008010000290000001f0010008c0007000100100218000600030010021800000a110000a13d0000000a01000029000000000010043f0000000001000414000003720010009c0000037201008041000000c0011002100000039f011001c700008010020000390dc40dbf0000040f00000001002001900000094b0000613d000000200200008a0000000802200180000000000101043b00000a1d0000c13d000000000300001900000a270000013d000000080000006b000000000100001900000a170000613d0000000b010000290000000101100367000000000101043b000000010300008a0000000602300250000000000232013f000000000121016f00000007011001af00000a340000013d000000010400036700000000030000190000000b05300029000000000554034f000000000505043b000000000051041b00000001011000390000002003300039000000000023004b00000a1f0000413d000000080020006c00000a320000813d0000000602000029000000f80220018f000003c00220027f000003c0022001670000000b033000290000000103300367000000000303043b000000000223016f000000000021041b000000070100002900000001011001bf0000000a02000029000000000012041b000000400100043d0000002002100039000000600300003900000000003204350000000502000029000000000021043500000001020003670000000403200370000000000303043b0000000404300039000000000342034f000000000703043b000000000300003100000000054300490000001f0550008a0000039b065001970000039b08700197000000000968013f000000000068004b00000000080000190000039b08004041000000000057004b000000000a0000190000039b0a0080410000039b0090009c00000000080ac019000000000008004b0000094b0000c13d0000000007470019000000000872034f000000000908043b000003980090009c0000094b0000213d000000200a7000390000000607900210000000000773004900000000007a004b00000000080000190000039b080020410000039b077001970000039b0ba00197000000000c7b013f00000000007b004b00000000070000190000039b070040410000039b00c0009c000000000708c019000000000007004b0000094b0000c13d000000a0071000390000006008100039000000400b0000390000000000b804350000000000970435000000c007100039000000000009004b00000a7c0000613d000000000b000019000000000ca2034f000000000c0c043b000000000cc70436000000200da00039000000000dd2034f000000000d0d043b0000000000dc0435000000400aa000390000004007700039000000010bb0003900000000009b004b00000a700000413d0000002009400039000000000992034f000000000909043b0000039b0a900197000000000b6a013f00000000006a004b00000000060000190000039b06004041000000000059004b00000000050000190000039b050080410000039b00b0009c000000000605c019000000000006004b0000094b0000c13d0000000005490019000000000452034f000000000404043b000003980040009c0000094b0000213d00000020055000390000000006430049000000000065004b00000000090000190000039b090020410000039b066001970000039b0a500197000000000b6a013f00000000006a004b00000000060000190000039b060040410000039b00b0009c000000000609c019000000000006004b0000094b0000c13d000000000687004900000080081000390000000000680435000000000852034f0000000005470436000003bf074001980000001f0940018f000000000675001900000aae0000613d000000000a08034f000000000b05001900000000ac0a043c000000000bcb043600000000006b004b00000aaa0000c13d000000000009004b00000abb0000613d000000000778034f0000000308900210000000000906043300000000098901cf000000000989022f000000000707043b0000010008800089000000000787022f00000000078701cf000000000797019f0000000000760435000000000654001900000000000604350000001f04400039000003bf0440019700000000045400190000000005140049000000400610003900000000005604350000002405200370000000000505043b0000000405500039000000000652034f000000000806043b00000000065300490000001f0660008a0000039b076001970000039b09800197000000000a79013f000000000079004b00000000090000190000039b09004041000000000068004b000000000b0000190000039b0b0080410000039b00a0009c00000000090bc019000000000009004b0000094b0000c13d0000000008580019000000000982034f000000000a09043b0000039800a0009c0000094b0000213d000000200b800039000003c208a000d1000000000838001900000000008b004b00000000090000190000039b090020410000039b088001970000039b0cb00197000000000d8c013f00000000008c004b00000000080000190000039b080040410000039b00d0009c000000000809c019000000000008004b0000094b0000c13d0000004009400039000000400800003900000000088404360000000000a90435000000600940003900000000000a004b00000b090000613d000000000c000019000000000db2034f000000000d0d043b0000039800d0009c0000094b0000213d000000000ed90436000000200db00039000000000fd2034f000000000f0f043b0000039800f0009c0000094b0000213d0000000000fe0435000000200dd00039000000000dd2034f000000000d0d043b000000400e9000390000000000de0435000000600bb000390000006009900039000000010cc000390000000000ac004b00000af40000413d000000200a500039000000000aa2034f000000000a0a043b0000039b0ba00197000000000c7b013f00000000007b004b00000000070000190000039b0700404100000000006a004b00000000060000190000039b060080410000039b00c0009c000000000706c019000000000007004b0000094b0000c13d00000000065a0019000000000562034f000000000505043b000003980050009c0000094b0000213d00000020066000390000000003530049000000000036004b00000000070000190000039b070020410000039b033001970000039b0a600197000000000b3a013f00000000003a004b00000000030000190000039b030040410000039b00b0009c000000000307c019000000000003004b0000094b0000c13d00000000034900490000000000380435000000000462034f0000000002590436000003bf065001980000001f0750018f000000000362001900000b3a0000613d000000000804034f0000000009020019000000008a08043c0000000009a90436000000000039004b00000b360000c13d000000000007004b00000b470000613d000000000464034f0000000306700210000000000703043300000000076701cf000000000767022f000000000404043b0000010006600089000000000464022f00000000046401cf000000000474019f0000000000430435000000000325001900000000000304350000001f03500039000003bf0330019700000000021200490000000002320019000003720020009c00000372020080410000006002200210000003720010009c00000372010080410000004001100210000000000112019f0000000002000414000003720020009c0000037202008041000000c002200210000000000112019f0000038c011001c70000800d020000390000000203000039000003b90400004100000009050000290dc40dba0000040f00000001002001900000094b0000613d000000400100043d00000009020000290000000000210435000003720010009c00000372010080410000004001100210000003a8011001c700000dc50001042e00000000430104340000000001320436000000000003004b00000b750000613d000000000200001900000000051200190000000006240019000000000606043300000000006504350000002002200039000000000032004b00000b6e0000413d000000000213001900000000000204350000001f02300039000003bf022001970000000001210019000000000001042d00000000430104340000037203300197000000000332043600000000040404330000000000430435000000400310003900000000030304330000004004200039000000800500003900000000005404350000008005200039000000400400003900000000360304340000000000450435000000c00520003900000000070604330000000000750435000000e005200039000000000007004b00000b9a0000613d00000000080000190000002006600039000000000906043300000000a90904340000000009950436000000000a0a04330000000000a9043500000040055000390000000108800039000000000078004b00000b900000413d0000000006250049000000800660008a0000000003030433000000a007200039000000000067043500000000630304340000000005350436000000000003004b00000bab0000613d000000000700001900000000085700190000000009760019000000000909043300000000009804350000002007700039000000000037004b00000ba40000413d000000000653001900000000000604350000001f06300039000003bf06600197000000000556001900000060011000390000000001010433000000000625004900000060022000390000000000620435000000002601043400000000014504360000004004500039000000000706043300000000007404350000006004500039000000000007004b00000bce0000613d00000000080000190000002006600039000000000906043300000000ba090434000003980aa00197000000000aa40436000000000b0b0433000003980bb001970000000000ba043500000040099000390000000009090433000000400a40003900000000009a043500000060044000390000000108800039000000000078004b00000bbe0000413d00000000020204330000000005540049000000000051043500000000520204340000000001240436000000000002004b00000bdd0000613d000000000400001900000000061400190000000007450019000000000707043300000000007604350000002004400039000000000024004b00000bd60000413d000000000412001900000000000404350000001f02200039000003bf022001970000000001120019000000000001042d00000000030100190000000001120049000003990010009c00000c7b0000213d0000003f0010008c00000c7b0000a13d000000400100043d000003c30010009c00000c7d0000813d0000004005100039000000400050043f0000000104000367000000000634034f000000000606043b000003980060009c00000c7b0000213d00000000073600190000001f06700039000000000026004b00000000080000190000039b080080410000039b096001970000039b06200197000000000a69013f000000000069004b00000000090000190000039b090040410000039b00a0009c000000000908c019000000000009004b00000c7b0000c13d000000000874034f000000000808043b000003980080009c00000c7d0000213d00000005098002100000003f099000390000039c099001970000000009590019000003980090009c00000c7d0000213d000000400090043f000000000085043500000060088000c900000020077000390000000008870019000000000028004b00000c7b0000213d000000000087004b00000c340000813d0000006009100039000000000a7200490000039900a0009c00000c7b0000213d0000006000a0008c00000c7b0000413d000000400a00043d0000039d00a0009c00000c7d0000213d000000600ba000390000004000b0043f000000000b74034f000000000b0b043b0000039800b0009c00000c7b0000213d000000000cba0436000000200b700039000000000db4034f000000000d0d043b0000039800d0009c00000c7b0000213d0000000000dc0435000000200bb00039000000000bb4034f000000000b0b043b000000400ca000390000000000bc04350000000009a904360000006007700039000000000087004b00000c160000413d00000000055104360000002007300039000000000774034f000000000707043b000003980070009c00000c7b0000213d00000000083700190000001f03800039000000000023004b00000000070000190000039b070080410000039b03300197000000000963013f000000000063004b00000000030000190000039b030040410000039b0090009c000000000307c019000000000003004b00000c7b0000c13d000000000384034f000000000303043b000003980030009c00000c7d0000213d0000001f06300039000003bf066001970000003f06600039000003bf07600197000000400600043d0000000007760019000000000067004b000000000a000039000000010a004039000003980070009c00000c7d0000213d0000000100a0019000000c7d0000c13d000000400070043f00000000073604360000002008800039000000000a83001900000000002a004b00000c7b0000213d000000000484034f000003bf083001980000001f0930018f000000000287001900000c6a0000613d000000000a04034f000000000b07001900000000ac0a043c000000000bcb043600000000002b004b00000c660000c13d000000000009004b00000c770000613d000000000484034f0000000308900210000000000902043300000000098901cf000000000989022f000000000404043b0000010008800089000000000484022f00000000048401cf000000000494019f0000000000420435000000000237001900000000000204350000000000650435000000000001042d000000000100001900000dc600010430000003ba01000041000000000010043f0000004101000039000000040010043f000003a60100004100000dc6000104300000000e01000039000000000101041a00000020011002700000037201100197000000020010008c00000c8e0000813d000000010110015f00000006011000c90000000301100039000000000101041a000000000001042d000003ba01000041000000000010043f0000003201000039000000040010043f000003a60100004100000dc6000104300007000000000002000000400200043d000700000002001d000003c40020009c00000dab0000813d00000007020000290000008003200039000000400030043f000000000301041a000003720330019700000000033204360000000102100039000000000202041a0000000000230435000000400400043d0000039a0040009c00000dab0000213d00000002031000390000004005400039000000400050043f000000000603041a000003980060009c00000dab0000213d00000005026002100000003f022000390000039c022001970000000002520019000003980020009c00000dab0000213d000500000004001d000600000001001d000000400020043f000400000005001d0000000000650435000000000030043f0000000001000414000003720010009c0000037201008041000000c0011002100000039f011001c70000801002000039000300000006001d0dc40dbf0000040f000000010020019000000db10000613d000000030a00002900000000000a004b00000006070000290000000508000029000000040900002900000cda0000613d000000000101043b00000000020000190000000003090019000000400400043d0000039a0040009c00000dab0000213d0000004005400039000000400050043f000000000501041a00000000055404360000000106100039000000000606041a000000000065043500000020033000390000000000430435000000020110003900000001022000390000000000a2004b00000cca0000413d00000000059804360000000301700039000000000201041a000000010320019000000001092002700000007f0990618f0000001f0090008c00000000040000390000000104002039000000000043004b00000db30000c13d000000400600043d0000000004960436000000000003004b00000d090000613d000100000004001d000200000009001d000300000006001d000400000005001d000000000010043f0000000001000414000003720010009c0000037201008041000000c0011002100000039f011001c700008010020000390dc40dbf0000040f000000010020019000000db10000613d0000000209000029000000000009004b00000d0f0000613d000000000201043b00000000010000190000000607000029000000050800002900000004050000290000000306000029000000010a00002900000000031a0019000000000402041a000000000043043500000001022000390000002001100039000000000091004b00000d010000413d00000d140000013d000003c1012001970000000000140435000000000009004b0000002001000039000000000100603900000d140000013d000000000100001900000006070000290000000508000029000000040500002900000003060000290000003f01100039000003bf021001970000000001620019000000000021004b00000000020000390000000102004039000003980010009c00000dab0000213d000000010020019000000dab0000c13d000000400010043f0000000000650435000000070100002900000040011000390000000000810435000000400300043d0000039a0030009c00000dab0000213d00000004017000390000004004300039000000400040043f000000000501041a000003980050009c00000dab0000213d00000005025002100000003f022000390000039c022001970000000002420019000003980020009c00000dab0000213d000500000003001d000000400020043f000400000004001d0000000000540435000000000010043f0000000001000414000003720010009c0000037201008041000000c0011002100000039f011001c70000801002000039000300000005001d0dc40dbf0000040f000000010020019000000db10000613d000000030b00002900000000000b004b00000006080000290000000509000029000000040a00002900000d5f0000613d0000006002900039000000000101043b0000000003000019000000400400043d0000039d0040009c00000dab0000213d0000006005400039000000400050043f000000000501041a0000004006500270000003980660019700000020074000390000000000670435000003980550019700000000005404350000000105100039000000000505041a000000400640003900000000005604350000000002420436000000020110003900000001033000390000000000b3004b00000d4a0000413d0000000006a904360000000501800039000000000201041a000000010320019000000001052002700000007f0550618f0000001f0050008c00000000040000390000000104002039000000000442013f000000010040019000000db30000c13d000000400700043d0000000004570436000000000003004b00000d8f0000613d000200000004001d000600000005001d000300000007001d000400000006001d000000000010043f0000000001000414000003720010009c0000037201008041000000c0011002100000039f011001c700008010020000390dc40dbf0000040f000000010020019000000db10000613d0000000608000029000000000008004b00000d960000613d000000000201043b0000000001000019000000200500008a000000050900002900000004060000290000000307000029000000020a00002900000000031a0019000000000402041a000000000043043500000001022000390000002001100039000000000081004b00000d870000413d00000d9b0000013d000003c1012001970000000000140435000000000005004b00000020010000390000000001006039000000200500008a00000d9b0000013d0000000001000019000000200500008a0000000509000029000000040600002900000003070000290000003f01100039000000000251016f0000000001720019000000000021004b00000000020000390000000102004039000003980010009c00000dab0000213d000000010020019000000dab0000c13d000000400010043f0000000000760435000000070100002900000060021000390000000000920435000000000001042d000003ba01000041000000000010043f0000004101000039000000040010043f000003a60100004100000dc600010430000000000100001900000dc600010430000003ba01000041000000000010043f0000002201000039000000040010043f000003a60100004100000dc600010430000000000001042f00000dbd002104210000000102000039000000000001042d0000000002000019000000000001042d00000dc2002104230000000102000039000000000001042d0000000002000019000000000001042d00000dc40000043200000dc50001042e00000dc600010430000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000002000000000000000000000000000000400000010000000000000000009b15e16f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000800000000000000000000000000000000000000000000000000000000000000000000000006dd5b69c000000000000000000000000000000000000000000000000000000008c76967e00000000000000000000000000000000000000000000000000000000f2fde38a00000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000fb4022d4000000000000000000000000000000000000000000000000000000008c76967f000000000000000000000000000000000000000000000000000000008da5cb5b000000000000000000000000000000000000000000000000000000006dd5b69d00000000000000000000000000000000000000000000000000000000736be8020000000000000000000000000000000000000000000000000000000079ba5097000000000000000000000000000000000000000000000000000000003567e6b3000000000000000000000000000000000000000000000000000000003567e6b40000000000000000000000000000000000000000000000000000000038354c5c000000000000000000000000000000000000000000000000000000006350795600000000000000000000000000000000000000000000000000000000118dbac500000000000000000000000000000000000000000000000000000000123e65db00000000000000000000000000000000000000000000000000000000181f5a77000000000000000000000000ffffffffffffffffffffffffffffffffffffffff93df584c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000800000000000000000020000000000000000000000000000000000000000000000000000000000000053f5d9228f0a4173bea6e5931c9b3afe6eeb6692ede1d182952970f152534e3b0849d8cc00000000000000000000000000000000000000000000000000000000ed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278dad89dca00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000080000000000000000000000000000000000000000000000000000000000000000000000001000000000b31c0055e2d464bef7781994b98c4ff9ef4ae0d05f59feb6a68c42de5e201b8fc3e98dbbd47c3fa7c1c05b6ec711caeaf70eca4554192b9ada8fc11a37f298e7b4d1e4f0000000000000000000000000000000000000000000000000000000002b543c6000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0000000000000000000000000000000000000000000000000ffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffbf80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff9f00000000000000000000000000000000000000000000000100000000000000000200000000000000000000000000000000000020000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000001f69d1a2edb327babc986b3deb80091f101b9105d42a6c30db4d99c31d7e6294000000000000000000000000000000000000000000000000fffffffffffffffe000000000000000000000000000000000000000000000001fffffffffffffffed0b2c031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffdbf00000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000040000000800000000000000000524d4e486f6d6520312e362e302d6465760000000000000000000000000000000000000000000000000000000000000000000000000000c000000000000000002b5c74de00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff3fae00651d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000221a8ae8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000045564d00000000000000000000000000000000000000000000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b0200000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5f0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000b000000000000000000000000000000000000000000000000000000000000f6c6d1be15ba0acc8ee645c1ec613c360ef786d2d3200eb8e695b6dec757dbf04e487b71000000000000000000000000000000000000000000000000000000002847b60600000000000000000000000000000000000000000000000000000000a804bcb3000000000000000000000000000000000000000000000000000000003857f84d00000000000000000000000000000000000000000000000000000000af26d5e300000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0000000000000000000000000000000000000000000000000ffffffffffffffc0000000000000000000000000000000000000000000000000ffffffffffffff80") diff --git a/core/gethwrappers/ccip/generated_zks/rmn_proxy_contract/rmn_proxy_contract.go b/core/gethwrappers/ccip/generated_zks/rmn_proxy_contract/rmn_proxy_contract.go new file mode 100644 index 00000000000..dc31c3cd7b0 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/rmn_proxy_contract/rmn_proxy_contract.go @@ -0,0 +1,747 @@ +package rmn_proxy_contract + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var RMNProxyContractMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"arm\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"arm\",\"type\":\"address\"}],\"name\":\"ARMSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getARM\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"arm\",\"type\":\"address\"}],\"name\":\"setARM\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b5060405161084138038061084183398101604081905261002f91610255565b33806000816100855760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b03848116919091179091558116156100b5576100b5816100cd565b5050506100c78161017660201b60201c565b50610285565b336001600160a01b038216036101255760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161007c565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61017e6101f9565b6001600160a01b0381166101a5576040516342bcdf7f60e11b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fef31f568d741a833c6a9dc85a6e1c65e06fa772740d5dc94d1da21827a4e0cab9060200160405180910390a150565b6000546001600160a01b031633146102535760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161007c565b565b60006020828403121561026757600080fd5b81516001600160a01b038116811461027e57600080fd5b9392505050565b6105ad806102946000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806379ba50971161005057806379ba5097146101615780638da5cb5b14610169578063f2fde38b1461018757610072565b8063181f5a77146100bb5780632e90aa211461010d578063458fec3b1461014c575b60025473ffffffffffffffffffffffffffffffffffffffff16803b61009657600080fd5b366000803760008036600080855af13d6000803e80156100b5573d6000f35b503d6000fd5b6100f76040518060400160405280600e81526020017f41524d50726f787920312e302e3000000000000000000000000000000000000081525081565b60405161010491906104f6565b60405180910390f35b60025473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610104565b61015f61015a366004610563565b61019a565b005b61015f610268565b60005473ffffffffffffffffffffffffffffffffffffffff16610127565b61015f610195366004610563565b61036a565b6101a261037e565b73ffffffffffffffffffffffffffffffffffffffff81166101ef576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fef31f568d741a833c6a9dc85a6e1c65e06fa772740d5dc94d1da21827a4e0cab9060200160405180910390a150565b60015473ffffffffffffffffffffffffffffffffffffffff1633146102ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b61037261037e565b61037b81610401565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016102e5565b565b3373ffffffffffffffffffffffffffffffffffffffff821603610480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016102e5565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60006020808352835180602085015260005b8181101561052457858101830151858201604001528201610508565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b60006020828403121561057557600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461059957600080fd5b939250505056fea164736f6c6343000818000a", +} + +var RMNProxyContractABI = RMNProxyContractMetaData.ABI + +var RMNProxyContractBin = RMNProxyContractMetaData.Bin + +func DeployRMNProxyContract(auth *bind.TransactOpts, backend bind.ContractBackend, arm common.Address) (common.Address, *generated_zks.Transaction, *RMNProxyContract, error) { + parsed, err := RMNProxyContractMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(RMNProxyContractZKBin), backend, arm) + contractReturn := &RMNProxyContract{address: address, abi: *parsed, RMNProxyContractCaller: RMNProxyContractCaller{contract: contractBind}, RMNProxyContractTransactor: RMNProxyContractTransactor{contract: contractBind}, RMNProxyContractFilterer: RMNProxyContractFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(RMNProxyContractBin), backend, arm) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &RMNProxyContract{address: address, abi: *parsed, RMNProxyContractCaller: RMNProxyContractCaller{contract: contract}, RMNProxyContractTransactor: RMNProxyContractTransactor{contract: contract}, RMNProxyContractFilterer: RMNProxyContractFilterer{contract: contract}}, nil +} + +type RMNProxyContract struct { + address common.Address + abi abi.ABI + RMNProxyContractCaller + RMNProxyContractTransactor + RMNProxyContractFilterer +} + +type RMNProxyContractCaller struct { + contract *bind.BoundContract +} + +type RMNProxyContractTransactor struct { + contract *bind.BoundContract +} + +type RMNProxyContractFilterer struct { + contract *bind.BoundContract +} + +type RMNProxyContractSession struct { + Contract *RMNProxyContract + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type RMNProxyContractCallerSession struct { + Contract *RMNProxyContractCaller + CallOpts bind.CallOpts +} + +type RMNProxyContractTransactorSession struct { + Contract *RMNProxyContractTransactor + TransactOpts bind.TransactOpts +} + +type RMNProxyContractRaw struct { + Contract *RMNProxyContract +} + +type RMNProxyContractCallerRaw struct { + Contract *RMNProxyContractCaller +} + +type RMNProxyContractTransactorRaw struct { + Contract *RMNProxyContractTransactor +} + +func NewRMNProxyContract(address common.Address, backend bind.ContractBackend) (*RMNProxyContract, error) { + abi, err := abi.JSON(strings.NewReader(RMNProxyContractABI)) + if err != nil { + return nil, err + } + contract, err := bindRMNProxyContract(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &RMNProxyContract{address: address, abi: abi, RMNProxyContractCaller: RMNProxyContractCaller{contract: contract}, RMNProxyContractTransactor: RMNProxyContractTransactor{contract: contract}, RMNProxyContractFilterer: RMNProxyContractFilterer{contract: contract}}, nil +} + +func NewRMNProxyContractCaller(address common.Address, caller bind.ContractCaller) (*RMNProxyContractCaller, error) { + contract, err := bindRMNProxyContract(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &RMNProxyContractCaller{contract: contract}, nil +} + +func NewRMNProxyContractTransactor(address common.Address, transactor bind.ContractTransactor) (*RMNProxyContractTransactor, error) { + contract, err := bindRMNProxyContract(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &RMNProxyContractTransactor{contract: contract}, nil +} + +func NewRMNProxyContractFilterer(address common.Address, filterer bind.ContractFilterer) (*RMNProxyContractFilterer, error) { + contract, err := bindRMNProxyContract(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &RMNProxyContractFilterer{contract: contract}, nil +} + +func bindRMNProxyContract(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := RMNProxyContractMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_RMNProxyContract *RMNProxyContractRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _RMNProxyContract.Contract.RMNProxyContractCaller.contract.Call(opts, result, method, params...) +} + +func (_RMNProxyContract *RMNProxyContractRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _RMNProxyContract.Contract.RMNProxyContractTransactor.contract.Transfer(opts) +} + +func (_RMNProxyContract *RMNProxyContractRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _RMNProxyContract.Contract.RMNProxyContractTransactor.contract.Transact(opts, method, params...) +} + +func (_RMNProxyContract *RMNProxyContractCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _RMNProxyContract.Contract.contract.Call(opts, result, method, params...) +} + +func (_RMNProxyContract *RMNProxyContractTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _RMNProxyContract.Contract.contract.Transfer(opts) +} + +func (_RMNProxyContract *RMNProxyContractTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _RMNProxyContract.Contract.contract.Transact(opts, method, params...) +} + +func (_RMNProxyContract *RMNProxyContractCaller) GetARM(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _RMNProxyContract.contract.Call(opts, &out, "getARM") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_RMNProxyContract *RMNProxyContractSession) GetARM() (common.Address, error) { + return _RMNProxyContract.Contract.GetARM(&_RMNProxyContract.CallOpts) +} + +func (_RMNProxyContract *RMNProxyContractCallerSession) GetARM() (common.Address, error) { + return _RMNProxyContract.Contract.GetARM(&_RMNProxyContract.CallOpts) +} + +func (_RMNProxyContract *RMNProxyContractCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _RMNProxyContract.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 + +} + +func (_RMNProxyContract *RMNProxyContractSession) Owner() (common.Address, error) { + return _RMNProxyContract.Contract.Owner(&_RMNProxyContract.CallOpts) +} + +func (_RMNProxyContract *RMNProxyContractCallerSession) Owner() (common.Address, error) { + return _RMNProxyContract.Contract.Owner(&_RMNProxyContract.CallOpts) +} + +func (_RMNProxyContract *RMNProxyContractCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _RMNProxyContract.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_RMNProxyContract *RMNProxyContractSession) TypeAndVersion() (string, error) { + return _RMNProxyContract.Contract.TypeAndVersion(&_RMNProxyContract.CallOpts) +} + +func (_RMNProxyContract *RMNProxyContractCallerSession) TypeAndVersion() (string, error) { + return _RMNProxyContract.Contract.TypeAndVersion(&_RMNProxyContract.CallOpts) +} + +func (_RMNProxyContract *RMNProxyContractTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _RMNProxyContract.contract.Transact(opts, "acceptOwnership") +} + +func (_RMNProxyContract *RMNProxyContractSession) AcceptOwnership() (*types.Transaction, error) { + return _RMNProxyContract.Contract.AcceptOwnership(&_RMNProxyContract.TransactOpts) +} + +func (_RMNProxyContract *RMNProxyContractTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _RMNProxyContract.Contract.AcceptOwnership(&_RMNProxyContract.TransactOpts) +} + +func (_RMNProxyContract *RMNProxyContractTransactor) SetARM(opts *bind.TransactOpts, arm common.Address) (*types.Transaction, error) { + return _RMNProxyContract.contract.Transact(opts, "setARM", arm) +} + +func (_RMNProxyContract *RMNProxyContractSession) SetARM(arm common.Address) (*types.Transaction, error) { + return _RMNProxyContract.Contract.SetARM(&_RMNProxyContract.TransactOpts, arm) +} + +func (_RMNProxyContract *RMNProxyContractTransactorSession) SetARM(arm common.Address) (*types.Transaction, error) { + return _RMNProxyContract.Contract.SetARM(&_RMNProxyContract.TransactOpts, arm) +} + +func (_RMNProxyContract *RMNProxyContractTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _RMNProxyContract.contract.Transact(opts, "transferOwnership", to) +} + +func (_RMNProxyContract *RMNProxyContractSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _RMNProxyContract.Contract.TransferOwnership(&_RMNProxyContract.TransactOpts, to) +} + +func (_RMNProxyContract *RMNProxyContractTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _RMNProxyContract.Contract.TransferOwnership(&_RMNProxyContract.TransactOpts, to) +} + +func (_RMNProxyContract *RMNProxyContractTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _RMNProxyContract.contract.RawTransact(opts, calldata) +} + +func (_RMNProxyContract *RMNProxyContractSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _RMNProxyContract.Contract.Fallback(&_RMNProxyContract.TransactOpts, calldata) +} + +func (_RMNProxyContract *RMNProxyContractTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _RMNProxyContract.Contract.Fallback(&_RMNProxyContract.TransactOpts, calldata) +} + +type RMNProxyContractARMSetIterator struct { + Event *RMNProxyContractARMSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RMNProxyContractARMSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RMNProxyContractARMSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RMNProxyContractARMSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RMNProxyContractARMSetIterator) Error() error { + return it.fail +} + +func (it *RMNProxyContractARMSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RMNProxyContractARMSet struct { + Arm common.Address + Raw types.Log +} + +func (_RMNProxyContract *RMNProxyContractFilterer) FilterARMSet(opts *bind.FilterOpts) (*RMNProxyContractARMSetIterator, error) { + + logs, sub, err := _RMNProxyContract.contract.FilterLogs(opts, "ARMSet") + if err != nil { + return nil, err + } + return &RMNProxyContractARMSetIterator{contract: _RMNProxyContract.contract, event: "ARMSet", logs: logs, sub: sub}, nil +} + +func (_RMNProxyContract *RMNProxyContractFilterer) WatchARMSet(opts *bind.WatchOpts, sink chan<- *RMNProxyContractARMSet) (event.Subscription, error) { + + logs, sub, err := _RMNProxyContract.contract.WatchLogs(opts, "ARMSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RMNProxyContractARMSet) + if err := _RMNProxyContract.contract.UnpackLog(event, "ARMSet", 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 +} + +func (_RMNProxyContract *RMNProxyContractFilterer) ParseARMSet(log types.Log) (*RMNProxyContractARMSet, error) { + event := new(RMNProxyContractARMSet) + if err := _RMNProxyContract.contract.UnpackLog(event, "ARMSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type RMNProxyContractOwnershipTransferRequestedIterator struct { + Event *RMNProxyContractOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RMNProxyContractOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RMNProxyContractOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RMNProxyContractOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RMNProxyContractOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *RMNProxyContractOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RMNProxyContractOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_RMNProxyContract *RMNProxyContractFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNProxyContractOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _RMNProxyContract.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &RMNProxyContractOwnershipTransferRequestedIterator{contract: _RMNProxyContract.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_RMNProxyContract *RMNProxyContractFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *RMNProxyContractOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _RMNProxyContract.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RMNProxyContractOwnershipTransferRequested) + if err := _RMNProxyContract.contract.UnpackLog(event, "OwnershipTransferRequested", 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 +} + +func (_RMNProxyContract *RMNProxyContractFilterer) ParseOwnershipTransferRequested(log types.Log) (*RMNProxyContractOwnershipTransferRequested, error) { + event := new(RMNProxyContractOwnershipTransferRequested) + if err := _RMNProxyContract.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type RMNProxyContractOwnershipTransferredIterator struct { + Event *RMNProxyContractOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RMNProxyContractOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RMNProxyContractOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RMNProxyContractOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RMNProxyContractOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *RMNProxyContractOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RMNProxyContractOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_RMNProxyContract *RMNProxyContractFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNProxyContractOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _RMNProxyContract.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &RMNProxyContractOwnershipTransferredIterator{contract: _RMNProxyContract.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_RMNProxyContract *RMNProxyContractFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *RMNProxyContractOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _RMNProxyContract.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RMNProxyContractOwnershipTransferred) + if err := _RMNProxyContract.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 +} + +func (_RMNProxyContract *RMNProxyContractFilterer) ParseOwnershipTransferred(log types.Log) (*RMNProxyContractOwnershipTransferred, error) { + event := new(RMNProxyContractOwnershipTransferred) + if err := _RMNProxyContract.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (_RMNProxyContract *RMNProxyContract) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _RMNProxyContract.abi.Events["ARMSet"].ID: + return _RMNProxyContract.ParseARMSet(log) + case _RMNProxyContract.abi.Events["OwnershipTransferRequested"].ID: + return _RMNProxyContract.ParseOwnershipTransferRequested(log) + case _RMNProxyContract.abi.Events["OwnershipTransferred"].ID: + return _RMNProxyContract.ParseOwnershipTransferred(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (RMNProxyContractARMSet) Topic() common.Hash { + return common.HexToHash("0xef31f568d741a833c6a9dc85a6e1c65e06fa772740d5dc94d1da21827a4e0cab") +} + +func (RMNProxyContractOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (RMNProxyContractOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (_RMNProxyContract *RMNProxyContract) Address() common.Address { + return _RMNProxyContract.address +} + +type RMNProxyContractInterface interface { + GetARM(opts *bind.CallOpts) (common.Address, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + SetARM(opts *bind.TransactOpts, arm common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) + + FilterARMSet(opts *bind.FilterOpts) (*RMNProxyContractARMSetIterator, error) + + WatchARMSet(opts *bind.WatchOpts, sink chan<- *RMNProxyContractARMSet) (event.Subscription, error) + + ParseARMSet(log types.Log) (*RMNProxyContractARMSet, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNProxyContractOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *RMNProxyContractOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*RMNProxyContractOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNProxyContractOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *RMNProxyContractOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*RMNProxyContractOwnershipTransferred, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var RMNProxyContractZKBin string = ("0x000400000000000200010000000000020000006004100270000000670340019700030000003103550002000000010355000000670040019d00000001002001900000002b0000c13d0000008002000039000000400020043f000000040030008c000000820000413d000000000201043b000000e002200270000000740020009c000000620000213d000000780020009c000000ce0000613d000000790020009c000000de0000613d0000007a0020009c000000820000c13d000000240030008c0000018a0000413d0000000002000416000000000002004b0000018a0000c13d0000000401100370000000000101043b0000006a0010009c0000018a0000213d000000000200041a0000006a022001970000000003000411000000000023004b000001530000c13d000000000001004b000001690000c13d0000006f01000041000000800010043f000000840100004100000199000104300000000002000416000000000002004b0000018a0000c13d0000001f0230003900000068022001970000008002200039000000400020043f0000001f0430018f000000690530019800000080025000390000003c0000613d0000008006000039000000000701034f000000007807043c0000000006860436000000000026004b000000380000c13d000000000004004b000000490000613d000000000151034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000200030008c0000018a0000413d000000800100043d0000006a0010009c0000018a0000213d0000000003000411000000000003004b000001050000c13d000000400100043d00000044021000390000007103000041000000000032043500000024021000390000001803000039000000000032043500000072020000410000000000210435000000040210003900000020030000390000000000320435000000670010009c0000006701008041000000400110021000000073011001c70000019900010430000000750020009c000000e40000613d000000760020009c000000fd0000613d000000770020009c000000820000c13d000000240030008c0000018a0000413d0000000002000416000000000002004b0000018a0000c13d0000000401100370000000000601043b0000006a0060009c0000018a0000213d000000000100041a0000006a011001970000000005000411000000000015004b000001530000c13d000000000056004b000001780000c13d0000007201000041000000800010043f0000002001000039000000840010043f0000001701000039000000a40010043f0000007d01000041000000c40010043f0000007e0100004100000199000104300000000001000416000000000001004b0000018a0000c13d0000000201000039000000000101041a000000870200004100000000002004430000006a01100197000100000001001d00000004001004430000000001000414000000670010009c0000006701008041000000c00110021000000088011001c70000800202000039019701920000040f0000000100200190000000cd0000613d000000000101043b000000000001004b0000018a0000613d0000000204000367000000000100003100000089031001980000001f0510018f000000a30000613d000000000604034f0000000007000019000000006806043c0000000007870436000000000037004b0000009f0000c13d000000000005004b000000b00000613d000000000434034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f000000000043043500000000030004140000000102000029000000040020008c000001130000c13d0000000303000367000000010100003100000089021001980000001f0410018f000000bf0000613d000000000503034f0000000006000019000000005705043c0000000006760436000000000026004b000000bb0000c13d000000000004004b000001350000613d000000000323034f0000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000320435000001350000013d000000000001042f0000000001000416000000000001004b0000018a0000c13d000000c001000039000000400010043f0000000e01000039000000800010043f0000008502000041000000a00020043f0000002003000039000000c00030043f000000e00010043f000001000020043f0000010e0000043f0000008601000041000001980001042e0000000001000416000000000001004b0000018a0000c13d0000000201000039000000000101041a000001010000013d0000000001000416000000000001004b0000018a0000c13d0000000101000039000000000201041a0000006a032001970000000006000411000000000036004b0000015d0000c13d000000000300041a0000006b04300197000000000464019f000000000040041b0000006b02200197000000000021041b00000000010004140000006a05300197000000670010009c0000006701008041000000c0011002100000007b011001c70000800d0200003900000003030000390000008104000041000001850000013d0000000001000416000000000001004b0000018a0000c13d000000000100041a0000006a01100197000000800010043f0000007f01000041000001980001042e0000006a02100198000000000100041a0000006b01100197000000000131019f000000000010041b000000400100043d000001390000c13d0000006f020000410000000000210435000000670010009c0000006701008041000000400110021000000070011001c700000199000104300000006001100210000000670030009c0000006703008041000000c00330021000000000011300190197018d0000040f000300000001035500000060031002700000001f0530018f000100670030019d0000006904300198000001250000613d000000000601034f0000000007000019000000006806043c0000000007870436000000000047004b000001210000c13d000000000005004b000001320000613d000000000141034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f000000000014043500000067013001970000000100200190000001670000613d000000670010009c00000067010080410000006001100210000001980001042e0000000203000039000000000403041a0000006b04400197000000000424019f000000000043041b0000000000210435000000670010009c000000670100804100000040011002100000000002000414000000670020009c0000006702008041000000c002200210000000000112019f0000006c011001c70000800d0200003900000001030000390000006d040000410197018d0000040f00000001002001900000018a0000613d0000002001000039000001000010044300000120000004430000006e01000041000001980001042e0000007201000041000000800010043f0000002001000039000000840010043f0000001601000039000000a40010043f0000008201000041000000c40010043f0000007e0100004100000199000104300000007201000041000000800010043f0000002001000039000000840010043f0000001601000039000000a40010043f0000008001000041000000c40010043f0000007e010000410000019900010430000000600110021000000199000104300000000202000039000000000302041a0000006b03300197000000000313019f000000000032041b000000800010043f0000000001000414000000670010009c0000006701008041000000c00110021000000083011001c70000800d0200003900000001030000390000006d04000041000001850000013d0000000101000039000000000201041a0000006b02200197000000000262019f000000000021041b0000000001000414000000670010009c0000006701008041000000c0011002100000007b011001c70000800d0200003900000003030000390000007c040000410197018d0000040f00000001002001900000018a0000613d0000000001000019000001980001042e00000000010000190000019900010430000000000001042f00000190002104210000000102000039000000000001042d0000000002000019000000000001042d00000195002104230000000102000039000000000001042d0000000002000019000000000001042d0000019700000432000001980001042e00000199000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000200000000000000000000000000000000000020000000000000000000000000ef31f568d741a833c6a9dc85a6e1c65e06fa772740d5dc94d1da21827a4e0cab00000002000000000000000000000000000000400000010000000000000000008579befe00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000043616e6e6f7420736574206f776e657220746f207a65726f000000000000000008c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000000000000000000000079ba50960000000000000000000000000000000000000000000000000000000079ba5097000000000000000000000000000000000000000000000000000000008da5cb5b00000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000181f5a77000000000000000000000000000000000000000000000000000000002e90aa2100000000000000000000000000000000000000000000000000000000458fec3b0200000000000000000000000000000000000000000000000000000000000000ed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae127843616e6e6f74207472616e7366657220746f2073656c66000000000000000000000000000000000000000000000000000000006400000080000000000000000000000000000000000000000000000000000000200000008000000000000000004d7573742062652070726f706f736564206f776e6572000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e04f6e6c792063616c6c61626c65206279206f776e6572000000000000000000000200000000000000000000000000000000000020000000800000000000000000000000000000000000000000000000000000000400000080000000000000000041524d50726f787920312e302e300000000000000000000000000000000000000000000000000000000000000000000000000060000000c000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000000000000000000000000000000000000000000000000000000000000") diff --git a/core/gethwrappers/ccip/generated_zks/rmn_remote/rmn_remote.go b/core/gethwrappers/ccip/generated_zks/rmn_remote/rmn_remote.go new file mode 100644 index 00000000000..dd7559fd882 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/rmn_remote/rmn_remote.go @@ -0,0 +1,1239 @@ +package rmn_remote + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type IRMNRemoteSignature struct { + R [32]byte + S [32]byte +} + +type InternalMerkleRoot struct { + SourceChainSelector uint64 + OnRampAddress []byte + MinSeqNr uint64 + MaxSeqNr uint64 + MerkleRoot [32]byte +} + +type RMNRemoteConfig struct { + RmnHomeContractConfigDigest [32]byte + Signers []RMNRemoteSigner + F uint64 +} + +type RMNRemoteSigner struct { + OnchainPublicKey common.Address + NodeIndex uint64 +} + +var RMNRemoteMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"localChainSelector\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"AlreadyCursed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotTransferToSelf\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ConfigNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateOnchainPublicKey\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignerOrder\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeProposedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"NotCursed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfOrderSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ThresholdNotMet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroValueNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"onchainPublicKey\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"nodeIndex\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structRMNRemote.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"Cursed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"Uncursed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"curse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"curse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCursedSubjects\",\"outputs\":[{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLocalChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"localChainSelector\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReportDigestHeader\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"digestHeader\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVersionedConfig\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"onchainPublicKey\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"nodeIndex\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"isCursed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCursed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"onchainPublicKey\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"nodeIndex\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Config\",\"name\":\"newConfig\",\"type\":\"tuple\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"uncurse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"uncurse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"offrampAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMNRemote.Signature[]\",\"name\":\"signatures\",\"type\":\"tuple[]\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60a06040523480156200001157600080fd5b50604051620020ff380380620020ff833981016040819052620000349162000142565b336000816200005657604051639b15e16f60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b038481169190911790915581161562000089576200008981620000c8565b5050806001600160401b0316600003620000b65760405163273e150360e21b815260040160405180910390fd5b6001600160401b031660805262000174565b336001600160a01b03821603620000f257604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000602082840312156200015557600080fd5b81516001600160401b03811681146200016d57600080fd5b9392505050565b608051611f68620001976000396000818161027a0152610a2c0152611f686000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806370a9089e11610097578063d881e09211610066578063d881e09214610257578063eaa83ddd1461026c578063f2fde38b146102a4578063f8bb876e146102b757600080fd5b806370a9089e1461020157806379ba5097146102145780638da5cb5b1461021c5780639a19b3291461024457600080fd5b8063397796f7116100d3578063397796f7146101a557806362eed415146101ad5780636509a954146101c05780636d2d3993146101ee57600080fd5b8063181f5a7714610105578063198f0f77146101575780631add205f1461016c5780632cbc26bb14610182575b600080fd5b6101416040518060400160405280601381526020017f524d4e52656d6f746520312e362e302d6465760000000000000000000000000081525081565b60405161014e9190611389565b60405180910390f35b61016a61016536600461139c565b6102ca565b005b6101746106c4565b60405161014e9291906113d7565b6101956101903660046114b5565b6107bc565b604051901515815260200161014e565b610195610819565b61016a6101bb3660046114b5565b610893565b6040517f9651943783dbf81935a60e98f218a9d9b5b28823fb2228bbd91320d632facf53815260200161014e565b61016a6101fc3660046114b5565b610907565b61016a61020f36600461153e565b610977565b61016a610cd2565b60015460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161014e565b61016a6102523660046116bd565b610da0565b61025f610ea6565b60405161014e919061175a565b60405167ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161014e565b61016a6102b23660046117c0565b610eb2565b61016a6102c53660046116bd565b610ec6565b6102d2610fb8565b803561030a576040517f9cf8540c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015b61031a60208301836117dd565b90508110156103ea5761033060208301836117dd565b8281811061034057610340611845565b90506040020160200160208101906103589190611895565b67ffffffffffffffff1661036f60208401846117dd565b61037a6001856118e1565b81811061038957610389611845565b90506040020160200160208101906103a19190611895565b67ffffffffffffffff16106103e2576040517f4485151700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60010161030d565b506103fb6060820160408301611895565b6104069060026118f4565b610411906001611920565b67ffffffffffffffff1661042860208301836117dd565b90501015610462576040517f014c502000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003545b80156104f45760086000600361047d6001856118e1565b8154811061048d5761048d611845565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556104ed81611941565b9050610466565b5060005b61050560208301836117dd565b905081101561063a576008600061051f60208501856117dd565b8481811061052f5761052f611845565b61054592602060409092020190810191506117c0565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205460ff16156105a6576040517f28cae27d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600860006105b960208601866117dd565b858181106105c9576105c9611845565b6105df92602060409092020190810191506117c0565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790556001016104f8565b508060026106488282611a2f565b5050600580546000919082906106639063ffffffff16611b6a565b91906101000a81548163ffffffff021916908363ffffffff160217905590508063ffffffff167f7f22bf988149dbe8de8fb879c6b97a4e56e68b2bd57421ce1a4e79d4ef6b496c836040516106b89190611b8d565b60405180910390a25050565b6040805160608082018352600080835260208301919091529181018290526005546040805160608101825260028054825260038054845160208281028201810190965281815263ffffffff9096169592948593818601939092909160009084015b82821015610793576000848152602090819020604080518082019091529084015473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900467ffffffffffffffff1681830152825260019092019101610725565b505050908252506002919091015467ffffffffffffffff16602090910152919491935090915050565b60006107c8600661100b565b6000036107d757506000919050565b6107e2600683611015565b80610813575061081360067f0100000000000000000000000000000100000000000000000000000000000000611015565b92915050565b6000610825600661100b565b6000036108325750600090565b61085d60067f0100000000000000000000000000000000000000000000000000000000000000611015565b8061088e575061088e60067f0100000000000000000000000000000100000000000000000000000000000000611015565b905090565b6040805160018082528183019092526000916020808301908036833701905050905081816000815181106108c9576108c9611845565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000009092166020928302919091019091015261090381610ec6565b5050565b60408051600180825281830190925260009160208083019080368337019050509050818160008151811061093d5761093d611845565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000009092166020928302919091019091015261090381610da0565b60055463ffffffff166000036109b9576040517face124bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004546109d19067ffffffffffffffff166001611920565b67ffffffffffffffff16811015610a14576040517f59fa4a9300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825246815267ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166020820152309181019190915273ffffffffffffffffffffffffffffffffffffffff8616606082015260025460808201526000907f9651943783dbf81935a60e98f218a9d9b5b28823fb2228bbd91320d632facf539060a08101610ab08789611c97565b9052604051610ac3929190602001611df7565b60405160208183030381529060405280519060200120905060008060005b84811015610cc757600184601b888885818110610b0057610b00611845565b90506040020160000135898986818110610b1c57610b1c611845565b9050604002016020013560405160008152602001604052604051610b5c949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015610b7e573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015192505073ffffffffffffffffffffffffffffffffffffffff8216610bf6576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1610610c5b576040517fbbe15e7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526008602052604090205460ff16610cba576040517faaaa914100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9091508190600101610ae1565b505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d23576040517f02b543c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000008082163390811790935560008054909116815560405173ffffffffffffffffffffffffffffffffffffffff909216929183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610da8610fb8565b60005b8151811015610e6b57610de1828281518110610dc957610dc9611845565b6020026020010151600661105390919063ffffffff16565b610e6357818181518110610df757610df7611845565b60200260200101516040517f73281fa1000000000000000000000000000000000000000000000000000000008152600401610e5a91907fffffffffffffffffffffffffffffffff0000000000000000000000000000000091909116815260200190565b60405180910390fd5b600101610dab565b507f0676e709c9cc74fa0519fd78f7c33be0f1b2b0bae0507c724aef7229379c6ba181604051610e9b919061175a565b60405180910390a150565b606061088e6006611081565b610eba610fb8565b610ec38161108e565b50565b610ece610fb8565b60005b8151811015610f8857610f07828281518110610eef57610eef611845565b6020026020010151600661115290919063ffffffff16565b610f8057818181518110610f1d57610f1d611845565b60200260200101516040517f19d5c79b000000000000000000000000000000000000000000000000000000008152600401610e5a91907fffffffffffffffffffffffffffffffff0000000000000000000000000000000091909116815260200190565b600101610ed1565b507f1716e663a90a76d3b6c7e5f680673d1b051454c19c627e184c8daf28f3104f7481604051610e9b919061175a565b60015473ffffffffffffffffffffffffffffffffffffffff163314611009576040517f2b5c74de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610813825490565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008116600090815260018301602052604081205415155b9392505050565b600061104c837fffffffffffffffffffffffffffffffff000000000000000000000000000000008416611180565b6060600061104c8361127a565b3373ffffffffffffffffffffffffffffffffffffffff8216036110dd576040517fdad89dca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600061104c837fffffffffffffffffffffffffffffffff0000000000000000000000000000000084166112d6565b600081815260018301602052604081205480156112695760006111a46001836118e1565b85549091506000906111b8906001906118e1565b905080821461121d5760008660000182815481106111d8576111d8611845565b90600052602060002001549050808760000184815481106111fb576111fb611845565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061122e5761122e611f2c565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610813565b6000915050610813565b5092915050565b6060816000018054806020026020016040519081016040528092919081815260200182805480156112ca57602002820191906000526020600020905b8154815260200190600101908083116112b6575b50505050509050919050565b600081815260018301602052604081205461131d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610813565b506000610813565b6000815180845260005b8181101561134b5760208185018101518683018201520161132f565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061104c6020830184611325565b6000602082840312156113ae57600080fd5b813567ffffffffffffffff8111156113c557600080fd5b82016060818503121561104c57600080fd5b63ffffffff831681526040602080830182905283518383015283810151606080850152805160a085018190526000939291820190849060c08701905b8083101561145c578351805173ffffffffffffffffffffffffffffffffffffffff16835285015167ffffffffffffffff1685830152928401926001929092019190850190611413565b50604088015167ffffffffffffffff81166080890152945098975050505050505050565b80357fffffffffffffffffffffffffffffffff00000000000000000000000000000000811681146114b057600080fd5b919050565b6000602082840312156114c757600080fd5b61104c82611480565b73ffffffffffffffffffffffffffffffffffffffff81168114610ec357600080fd5b60008083601f84011261150457600080fd5b50813567ffffffffffffffff81111561151c57600080fd5b6020830191508360208260061b850101111561153757600080fd5b9250929050565b60008060008060006060868803121561155657600080fd5b8535611561816114d0565b9450602086013567ffffffffffffffff8082111561157e57600080fd5b818801915088601f83011261159257600080fd5b8135818111156115a157600080fd5b8960208260051b85010111156115b657600080fd5b6020830196508095505060408801359150808211156115d457600080fd5b506115e1888289016114f2565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715611644576116446115f2565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611691576116916115f2565b604052919050565b600067ffffffffffffffff8211156116b3576116b36115f2565b5060051b60200190565b600060208083850312156116d057600080fd5b823567ffffffffffffffff8111156116e757600080fd5b8301601f810185136116f857600080fd5b803561170b61170682611699565b61164a565b81815260059190911b8201830190838101908783111561172a57600080fd5b928401925b8284101561174f5761174084611480565b8252928401929084019061172f565b979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156117b45783517fffffffffffffffffffffffffffffffff000000000000000000000000000000001683529284019291840191600101611776565b50909695505050505050565b6000602082840312156117d257600080fd5b813561104c816114d0565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261181257600080fd5b83018035915067ffffffffffffffff82111561182d57600080fd5b6020019150600681901b360382131561153757600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b67ffffffffffffffff81168114610ec357600080fd5b80356114b081611874565b6000602082840312156118a757600080fd5b813561104c81611874565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115610813576108136118b2565b67ffffffffffffffff818116838216028082169190828114611918576119186118b2565b505092915050565b67ffffffffffffffff818116838216019080821115611273576112736118b2565b600081611950576119506118b2565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b6000813561081381611874565b813561198e816114d0565b73ffffffffffffffffffffffffffffffffffffffff811690508154817fffffffffffffffffffffffff0000000000000000000000000000000000000000821617835560208401356119de81611874565b7bffffffffffffffff00000000000000000000000000000000000000008160a01b16837fffffffff000000000000000000000000000000000000000000000000000000008416171784555050505050565b81358155600180820160208401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1853603018112611a6d57600080fd5b8401803567ffffffffffffffff811115611a8657600080fd5b6020820191508060061b3603821315611a9e57600080fd5b68010000000000000000811115611ab757611ab76115f2565b825481845580821015611aec576000848152602081208381019083015b80821015611ae85782825590870190611ad4565b5050505b50600092835260208320925b81811015611b1c57611b0a8385611983565b92840192604092909201918401611af8565b5050505050610903611b3060408401611976565b6002830167ffffffffffffffff82167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008254161781555050565b600063ffffffff808316818103611b8357611b836118b2565b6001019392505050565b6000602080835260808301843582850152818501357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1863603018112611bd257600080fd5b8501828101903567ffffffffffffffff80821115611bef57600080fd5b8160061b3603831315611c0157600080fd5b6040606060408901528483865260a089019050849550600094505b83851015611c6c578535611c2f816114d0565b73ffffffffffffffffffffffffffffffffffffffff16815285870135611c5481611874565b83168188015294810194600194909401938101611c1c565b611c7860408b0161188a565b67ffffffffffffffff811660608b015296509998505050505050505050565b6000611ca561170684611699565b80848252602080830192508560051b850136811115611cc357600080fd5b855b81811015611deb57803567ffffffffffffffff80821115611ce65760008081fd5b818901915060a08236031215611cfc5760008081fd5b611d04611621565b8235611d0f81611874565b81528286013582811115611d235760008081fd5b8301601f3681830112611d365760008081fd5b813584811115611d4857611d486115f2565b611d77897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848401160161164a565b94508085523689828501011115611d9057600091508182fd5b808984018a8701376000898287010152505050818682015260409150611db782840161188a565b8282015260609150611dca82840161188a565b91810191909152608091820135918101919091528552938201938201611cc5565b50919695505050505050565b60006040848352602060408185015261010084018551604086015281860151606067ffffffffffffffff808316606089015260408901519250608073ffffffffffffffffffffffffffffffffffffffff80851660808b015260608b0151945060a081861660a08c015260808c015160c08c015260a08c0151955060c060e08c015286915085518088526101209750878c019250878160051b8d01019750888701965060005b81811015611f19577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee08d8a030184528751868151168a528a810151848c8c0152611ee8858c0182611325565b828e015189168c8f01528983015189168a8d0152918701519a87019a909a5298509689019692890192600101611e9c565b50969d9c50505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", +} + +var RMNRemoteABI = RMNRemoteMetaData.ABI + +var RMNRemoteBin = RMNRemoteMetaData.Bin + +func DeployRMNRemote(auth *bind.TransactOpts, backend bind.ContractBackend, localChainSelector uint64) (common.Address, *generated_zks.Transaction, *RMNRemote, error) { + parsed, err := RMNRemoteMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(RMNRemoteZKBin), backend, localChainSelector) + contractReturn := &RMNRemote{address: address, abi: *parsed, RMNRemoteCaller: RMNRemoteCaller{contract: contractBind}, RMNRemoteTransactor: RMNRemoteTransactor{contract: contractBind}, RMNRemoteFilterer: RMNRemoteFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(RMNRemoteBin), backend, localChainSelector) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &RMNRemote{address: address, abi: *parsed, RMNRemoteCaller: RMNRemoteCaller{contract: contract}, RMNRemoteTransactor: RMNRemoteTransactor{contract: contract}, RMNRemoteFilterer: RMNRemoteFilterer{contract: contract}}, nil +} + +type RMNRemote struct { + address common.Address + abi abi.ABI + RMNRemoteCaller + RMNRemoteTransactor + RMNRemoteFilterer +} + +type RMNRemoteCaller struct { + contract *bind.BoundContract +} + +type RMNRemoteTransactor struct { + contract *bind.BoundContract +} + +type RMNRemoteFilterer struct { + contract *bind.BoundContract +} + +type RMNRemoteSession struct { + Contract *RMNRemote + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type RMNRemoteCallerSession struct { + Contract *RMNRemoteCaller + CallOpts bind.CallOpts +} + +type RMNRemoteTransactorSession struct { + Contract *RMNRemoteTransactor + TransactOpts bind.TransactOpts +} + +type RMNRemoteRaw struct { + Contract *RMNRemote +} + +type RMNRemoteCallerRaw struct { + Contract *RMNRemoteCaller +} + +type RMNRemoteTransactorRaw struct { + Contract *RMNRemoteTransactor +} + +func NewRMNRemote(address common.Address, backend bind.ContractBackend) (*RMNRemote, error) { + abi, err := abi.JSON(strings.NewReader(RMNRemoteABI)) + if err != nil { + return nil, err + } + contract, err := bindRMNRemote(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &RMNRemote{address: address, abi: abi, RMNRemoteCaller: RMNRemoteCaller{contract: contract}, RMNRemoteTransactor: RMNRemoteTransactor{contract: contract}, RMNRemoteFilterer: RMNRemoteFilterer{contract: contract}}, nil +} + +func NewRMNRemoteCaller(address common.Address, caller bind.ContractCaller) (*RMNRemoteCaller, error) { + contract, err := bindRMNRemote(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &RMNRemoteCaller{contract: contract}, nil +} + +func NewRMNRemoteTransactor(address common.Address, transactor bind.ContractTransactor) (*RMNRemoteTransactor, error) { + contract, err := bindRMNRemote(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &RMNRemoteTransactor{contract: contract}, nil +} + +func NewRMNRemoteFilterer(address common.Address, filterer bind.ContractFilterer) (*RMNRemoteFilterer, error) { + contract, err := bindRMNRemote(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &RMNRemoteFilterer{contract: contract}, nil +} + +func bindRMNRemote(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := RMNRemoteMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_RMNRemote *RMNRemoteRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _RMNRemote.Contract.RMNRemoteCaller.contract.Call(opts, result, method, params...) +} + +func (_RMNRemote *RMNRemoteRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _RMNRemote.Contract.RMNRemoteTransactor.contract.Transfer(opts) +} + +func (_RMNRemote *RMNRemoteRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _RMNRemote.Contract.RMNRemoteTransactor.contract.Transact(opts, method, params...) +} + +func (_RMNRemote *RMNRemoteCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _RMNRemote.Contract.contract.Call(opts, result, method, params...) +} + +func (_RMNRemote *RMNRemoteTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _RMNRemote.Contract.contract.Transfer(opts) +} + +func (_RMNRemote *RMNRemoteTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _RMNRemote.Contract.contract.Transact(opts, method, params...) +} + +func (_RMNRemote *RMNRemoteCaller) GetCursedSubjects(opts *bind.CallOpts) ([][16]byte, error) { + var out []interface{} + err := _RMNRemote.contract.Call(opts, &out, "getCursedSubjects") + + if err != nil { + return *new([][16]byte), err + } + + out0 := *abi.ConvertType(out[0], new([][16]byte)).(*[][16]byte) + + return out0, err + +} + +func (_RMNRemote *RMNRemoteSession) GetCursedSubjects() ([][16]byte, error) { + return _RMNRemote.Contract.GetCursedSubjects(&_RMNRemote.CallOpts) +} + +func (_RMNRemote *RMNRemoteCallerSession) GetCursedSubjects() ([][16]byte, error) { + return _RMNRemote.Contract.GetCursedSubjects(&_RMNRemote.CallOpts) +} + +func (_RMNRemote *RMNRemoteCaller) GetLocalChainSelector(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _RMNRemote.contract.Call(opts, &out, "getLocalChainSelector") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +func (_RMNRemote *RMNRemoteSession) GetLocalChainSelector() (uint64, error) { + return _RMNRemote.Contract.GetLocalChainSelector(&_RMNRemote.CallOpts) +} + +func (_RMNRemote *RMNRemoteCallerSession) GetLocalChainSelector() (uint64, error) { + return _RMNRemote.Contract.GetLocalChainSelector(&_RMNRemote.CallOpts) +} + +func (_RMNRemote *RMNRemoteCaller) GetReportDigestHeader(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _RMNRemote.contract.Call(opts, &out, "getReportDigestHeader") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +func (_RMNRemote *RMNRemoteSession) GetReportDigestHeader() ([32]byte, error) { + return _RMNRemote.Contract.GetReportDigestHeader(&_RMNRemote.CallOpts) +} + +func (_RMNRemote *RMNRemoteCallerSession) GetReportDigestHeader() ([32]byte, error) { + return _RMNRemote.Contract.GetReportDigestHeader(&_RMNRemote.CallOpts) +} + +func (_RMNRemote *RMNRemoteCaller) GetVersionedConfig(opts *bind.CallOpts) (GetVersionedConfig, + + error) { + var out []interface{} + err := _RMNRemote.contract.Call(opts, &out, "getVersionedConfig") + + outstruct := new(GetVersionedConfig) + if err != nil { + return *outstruct, err + } + + outstruct.Version = *abi.ConvertType(out[0], new(uint32)).(*uint32) + outstruct.Config = *abi.ConvertType(out[1], new(RMNRemoteConfig)).(*RMNRemoteConfig) + + return *outstruct, err + +} + +func (_RMNRemote *RMNRemoteSession) GetVersionedConfig() (GetVersionedConfig, + + error) { + return _RMNRemote.Contract.GetVersionedConfig(&_RMNRemote.CallOpts) +} + +func (_RMNRemote *RMNRemoteCallerSession) GetVersionedConfig() (GetVersionedConfig, + + error) { + return _RMNRemote.Contract.GetVersionedConfig(&_RMNRemote.CallOpts) +} + +func (_RMNRemote *RMNRemoteCaller) IsCursed(opts *bind.CallOpts, subject [16]byte) (bool, error) { + var out []interface{} + err := _RMNRemote.contract.Call(opts, &out, "isCursed", subject) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_RMNRemote *RMNRemoteSession) IsCursed(subject [16]byte) (bool, error) { + return _RMNRemote.Contract.IsCursed(&_RMNRemote.CallOpts, subject) +} + +func (_RMNRemote *RMNRemoteCallerSession) IsCursed(subject [16]byte) (bool, error) { + return _RMNRemote.Contract.IsCursed(&_RMNRemote.CallOpts, subject) +} + +func (_RMNRemote *RMNRemoteCaller) IsCursed0(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _RMNRemote.contract.Call(opts, &out, "isCursed0") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_RMNRemote *RMNRemoteSession) IsCursed0() (bool, error) { + return _RMNRemote.Contract.IsCursed0(&_RMNRemote.CallOpts) +} + +func (_RMNRemote *RMNRemoteCallerSession) IsCursed0() (bool, error) { + return _RMNRemote.Contract.IsCursed0(&_RMNRemote.CallOpts) +} + +func (_RMNRemote *RMNRemoteCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _RMNRemote.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 + +} + +func (_RMNRemote *RMNRemoteSession) Owner() (common.Address, error) { + return _RMNRemote.Contract.Owner(&_RMNRemote.CallOpts) +} + +func (_RMNRemote *RMNRemoteCallerSession) Owner() (common.Address, error) { + return _RMNRemote.Contract.Owner(&_RMNRemote.CallOpts) +} + +func (_RMNRemote *RMNRemoteCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _RMNRemote.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_RMNRemote *RMNRemoteSession) TypeAndVersion() (string, error) { + return _RMNRemote.Contract.TypeAndVersion(&_RMNRemote.CallOpts) +} + +func (_RMNRemote *RMNRemoteCallerSession) TypeAndVersion() (string, error) { + return _RMNRemote.Contract.TypeAndVersion(&_RMNRemote.CallOpts) +} + +func (_RMNRemote *RMNRemoteCaller) Verify(opts *bind.CallOpts, offrampAddress common.Address, merkleRoots []InternalMerkleRoot, signatures []IRMNRemoteSignature) error { + var out []interface{} + err := _RMNRemote.contract.Call(opts, &out, "verify", offrampAddress, merkleRoots, signatures) + + if err != nil { + return err + } + + return err + +} + +func (_RMNRemote *RMNRemoteSession) Verify(offrampAddress common.Address, merkleRoots []InternalMerkleRoot, signatures []IRMNRemoteSignature) error { + return _RMNRemote.Contract.Verify(&_RMNRemote.CallOpts, offrampAddress, merkleRoots, signatures) +} + +func (_RMNRemote *RMNRemoteCallerSession) Verify(offrampAddress common.Address, merkleRoots []InternalMerkleRoot, signatures []IRMNRemoteSignature) error { + return _RMNRemote.Contract.Verify(&_RMNRemote.CallOpts, offrampAddress, merkleRoots, signatures) +} + +func (_RMNRemote *RMNRemoteTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _RMNRemote.contract.Transact(opts, "acceptOwnership") +} + +func (_RMNRemote *RMNRemoteSession) AcceptOwnership() (*types.Transaction, error) { + return _RMNRemote.Contract.AcceptOwnership(&_RMNRemote.TransactOpts) +} + +func (_RMNRemote *RMNRemoteTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _RMNRemote.Contract.AcceptOwnership(&_RMNRemote.TransactOpts) +} + +func (_RMNRemote *RMNRemoteTransactor) Curse(opts *bind.TransactOpts, subject [16]byte) (*types.Transaction, error) { + return _RMNRemote.contract.Transact(opts, "curse", subject) +} + +func (_RMNRemote *RMNRemoteSession) Curse(subject [16]byte) (*types.Transaction, error) { + return _RMNRemote.Contract.Curse(&_RMNRemote.TransactOpts, subject) +} + +func (_RMNRemote *RMNRemoteTransactorSession) Curse(subject [16]byte) (*types.Transaction, error) { + return _RMNRemote.Contract.Curse(&_RMNRemote.TransactOpts, subject) +} + +func (_RMNRemote *RMNRemoteTransactor) Curse0(opts *bind.TransactOpts, subjects [][16]byte) (*types.Transaction, error) { + return _RMNRemote.contract.Transact(opts, "curse0", subjects) +} + +func (_RMNRemote *RMNRemoteSession) Curse0(subjects [][16]byte) (*types.Transaction, error) { + return _RMNRemote.Contract.Curse0(&_RMNRemote.TransactOpts, subjects) +} + +func (_RMNRemote *RMNRemoteTransactorSession) Curse0(subjects [][16]byte) (*types.Transaction, error) { + return _RMNRemote.Contract.Curse0(&_RMNRemote.TransactOpts, subjects) +} + +func (_RMNRemote *RMNRemoteTransactor) SetConfig(opts *bind.TransactOpts, newConfig RMNRemoteConfig) (*types.Transaction, error) { + return _RMNRemote.contract.Transact(opts, "setConfig", newConfig) +} + +func (_RMNRemote *RMNRemoteSession) SetConfig(newConfig RMNRemoteConfig) (*types.Transaction, error) { + return _RMNRemote.Contract.SetConfig(&_RMNRemote.TransactOpts, newConfig) +} + +func (_RMNRemote *RMNRemoteTransactorSession) SetConfig(newConfig RMNRemoteConfig) (*types.Transaction, error) { + return _RMNRemote.Contract.SetConfig(&_RMNRemote.TransactOpts, newConfig) +} + +func (_RMNRemote *RMNRemoteTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _RMNRemote.contract.Transact(opts, "transferOwnership", to) +} + +func (_RMNRemote *RMNRemoteSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _RMNRemote.Contract.TransferOwnership(&_RMNRemote.TransactOpts, to) +} + +func (_RMNRemote *RMNRemoteTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _RMNRemote.Contract.TransferOwnership(&_RMNRemote.TransactOpts, to) +} + +func (_RMNRemote *RMNRemoteTransactor) Uncurse(opts *bind.TransactOpts, subject [16]byte) (*types.Transaction, error) { + return _RMNRemote.contract.Transact(opts, "uncurse", subject) +} + +func (_RMNRemote *RMNRemoteSession) Uncurse(subject [16]byte) (*types.Transaction, error) { + return _RMNRemote.Contract.Uncurse(&_RMNRemote.TransactOpts, subject) +} + +func (_RMNRemote *RMNRemoteTransactorSession) Uncurse(subject [16]byte) (*types.Transaction, error) { + return _RMNRemote.Contract.Uncurse(&_RMNRemote.TransactOpts, subject) +} + +func (_RMNRemote *RMNRemoteTransactor) Uncurse0(opts *bind.TransactOpts, subjects [][16]byte) (*types.Transaction, error) { + return _RMNRemote.contract.Transact(opts, "uncurse0", subjects) +} + +func (_RMNRemote *RMNRemoteSession) Uncurse0(subjects [][16]byte) (*types.Transaction, error) { + return _RMNRemote.Contract.Uncurse0(&_RMNRemote.TransactOpts, subjects) +} + +func (_RMNRemote *RMNRemoteTransactorSession) Uncurse0(subjects [][16]byte) (*types.Transaction, error) { + return _RMNRemote.Contract.Uncurse0(&_RMNRemote.TransactOpts, subjects) +} + +type RMNRemoteConfigSetIterator struct { + Event *RMNRemoteConfigSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RMNRemoteConfigSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RMNRemoteConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RMNRemoteConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RMNRemoteConfigSetIterator) Error() error { + return it.fail +} + +func (it *RMNRemoteConfigSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RMNRemoteConfigSet struct { + Version uint32 + Config RMNRemoteConfig + Raw types.Log +} + +func (_RMNRemote *RMNRemoteFilterer) FilterConfigSet(opts *bind.FilterOpts, version []uint32) (*RMNRemoteConfigSetIterator, error) { + + var versionRule []interface{} + for _, versionItem := range version { + versionRule = append(versionRule, versionItem) + } + + logs, sub, err := _RMNRemote.contract.FilterLogs(opts, "ConfigSet", versionRule) + if err != nil { + return nil, err + } + return &RMNRemoteConfigSetIterator{contract: _RMNRemote.contract, event: "ConfigSet", logs: logs, sub: sub}, nil +} + +func (_RMNRemote *RMNRemoteFilterer) WatchConfigSet(opts *bind.WatchOpts, sink chan<- *RMNRemoteConfigSet, version []uint32) (event.Subscription, error) { + + var versionRule []interface{} + for _, versionItem := range version { + versionRule = append(versionRule, versionItem) + } + + logs, sub, err := _RMNRemote.contract.WatchLogs(opts, "ConfigSet", versionRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RMNRemoteConfigSet) + if err := _RMNRemote.contract.UnpackLog(event, "ConfigSet", 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 +} + +func (_RMNRemote *RMNRemoteFilterer) ParseConfigSet(log types.Log) (*RMNRemoteConfigSet, error) { + event := new(RMNRemoteConfigSet) + if err := _RMNRemote.contract.UnpackLog(event, "ConfigSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type RMNRemoteCursedIterator struct { + Event *RMNRemoteCursed + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RMNRemoteCursedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RMNRemoteCursed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RMNRemoteCursed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RMNRemoteCursedIterator) Error() error { + return it.fail +} + +func (it *RMNRemoteCursedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RMNRemoteCursed struct { + Subjects [][16]byte + Raw types.Log +} + +func (_RMNRemote *RMNRemoteFilterer) FilterCursed(opts *bind.FilterOpts) (*RMNRemoteCursedIterator, error) { + + logs, sub, err := _RMNRemote.contract.FilterLogs(opts, "Cursed") + if err != nil { + return nil, err + } + return &RMNRemoteCursedIterator{contract: _RMNRemote.contract, event: "Cursed", logs: logs, sub: sub}, nil +} + +func (_RMNRemote *RMNRemoteFilterer) WatchCursed(opts *bind.WatchOpts, sink chan<- *RMNRemoteCursed) (event.Subscription, error) { + + logs, sub, err := _RMNRemote.contract.WatchLogs(opts, "Cursed") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RMNRemoteCursed) + if err := _RMNRemote.contract.UnpackLog(event, "Cursed", 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 +} + +func (_RMNRemote *RMNRemoteFilterer) ParseCursed(log types.Log) (*RMNRemoteCursed, error) { + event := new(RMNRemoteCursed) + if err := _RMNRemote.contract.UnpackLog(event, "Cursed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type RMNRemoteOwnershipTransferRequestedIterator struct { + Event *RMNRemoteOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RMNRemoteOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RMNRemoteOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RMNRemoteOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RMNRemoteOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *RMNRemoteOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RMNRemoteOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_RMNRemote *RMNRemoteFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNRemoteOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _RMNRemote.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &RMNRemoteOwnershipTransferRequestedIterator{contract: _RMNRemote.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_RMNRemote *RMNRemoteFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *RMNRemoteOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _RMNRemote.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RMNRemoteOwnershipTransferRequested) + if err := _RMNRemote.contract.UnpackLog(event, "OwnershipTransferRequested", 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 +} + +func (_RMNRemote *RMNRemoteFilterer) ParseOwnershipTransferRequested(log types.Log) (*RMNRemoteOwnershipTransferRequested, error) { + event := new(RMNRemoteOwnershipTransferRequested) + if err := _RMNRemote.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type RMNRemoteOwnershipTransferredIterator struct { + Event *RMNRemoteOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RMNRemoteOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RMNRemoteOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RMNRemoteOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RMNRemoteOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *RMNRemoteOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RMNRemoteOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_RMNRemote *RMNRemoteFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNRemoteOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _RMNRemote.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &RMNRemoteOwnershipTransferredIterator{contract: _RMNRemote.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_RMNRemote *RMNRemoteFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *RMNRemoteOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _RMNRemote.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RMNRemoteOwnershipTransferred) + if err := _RMNRemote.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 +} + +func (_RMNRemote *RMNRemoteFilterer) ParseOwnershipTransferred(log types.Log) (*RMNRemoteOwnershipTransferred, error) { + event := new(RMNRemoteOwnershipTransferred) + if err := _RMNRemote.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type RMNRemoteUncursedIterator struct { + Event *RMNRemoteUncursed + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RMNRemoteUncursedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RMNRemoteUncursed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RMNRemoteUncursed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RMNRemoteUncursedIterator) Error() error { + return it.fail +} + +func (it *RMNRemoteUncursedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RMNRemoteUncursed struct { + Subjects [][16]byte + Raw types.Log +} + +func (_RMNRemote *RMNRemoteFilterer) FilterUncursed(opts *bind.FilterOpts) (*RMNRemoteUncursedIterator, error) { + + logs, sub, err := _RMNRemote.contract.FilterLogs(opts, "Uncursed") + if err != nil { + return nil, err + } + return &RMNRemoteUncursedIterator{contract: _RMNRemote.contract, event: "Uncursed", logs: logs, sub: sub}, nil +} + +func (_RMNRemote *RMNRemoteFilterer) WatchUncursed(opts *bind.WatchOpts, sink chan<- *RMNRemoteUncursed) (event.Subscription, error) { + + logs, sub, err := _RMNRemote.contract.WatchLogs(opts, "Uncursed") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RMNRemoteUncursed) + if err := _RMNRemote.contract.UnpackLog(event, "Uncursed", 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 +} + +func (_RMNRemote *RMNRemoteFilterer) ParseUncursed(log types.Log) (*RMNRemoteUncursed, error) { + event := new(RMNRemoteUncursed) + if err := _RMNRemote.contract.UnpackLog(event, "Uncursed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type GetVersionedConfig struct { + Version uint32 + Config RMNRemoteConfig +} + +func (_RMNRemote *RMNRemote) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _RMNRemote.abi.Events["ConfigSet"].ID: + return _RMNRemote.ParseConfigSet(log) + case _RMNRemote.abi.Events["Cursed"].ID: + return _RMNRemote.ParseCursed(log) + case _RMNRemote.abi.Events["OwnershipTransferRequested"].ID: + return _RMNRemote.ParseOwnershipTransferRequested(log) + case _RMNRemote.abi.Events["OwnershipTransferred"].ID: + return _RMNRemote.ParseOwnershipTransferred(log) + case _RMNRemote.abi.Events["Uncursed"].ID: + return _RMNRemote.ParseUncursed(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (RMNRemoteConfigSet) Topic() common.Hash { + return common.HexToHash("0x7f22bf988149dbe8de8fb879c6b97a4e56e68b2bd57421ce1a4e79d4ef6b496c") +} + +func (RMNRemoteCursed) Topic() common.Hash { + return common.HexToHash("0x1716e663a90a76d3b6c7e5f680673d1b051454c19c627e184c8daf28f3104f74") +} + +func (RMNRemoteOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (RMNRemoteOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (RMNRemoteUncursed) Topic() common.Hash { + return common.HexToHash("0x0676e709c9cc74fa0519fd78f7c33be0f1b2b0bae0507c724aef7229379c6ba1") +} + +func (_RMNRemote *RMNRemote) Address() common.Address { + return _RMNRemote.address +} + +type RMNRemoteInterface interface { + GetCursedSubjects(opts *bind.CallOpts) ([][16]byte, error) + + GetLocalChainSelector(opts *bind.CallOpts) (uint64, error) + + GetReportDigestHeader(opts *bind.CallOpts) ([32]byte, error) + + GetVersionedConfig(opts *bind.CallOpts) (GetVersionedConfig, + + error) + + IsCursed(opts *bind.CallOpts, subject [16]byte) (bool, error) + + IsCursed0(opts *bind.CallOpts) (bool, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + Verify(opts *bind.CallOpts, offrampAddress common.Address, merkleRoots []InternalMerkleRoot, signatures []IRMNRemoteSignature) error + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + Curse(opts *bind.TransactOpts, subject [16]byte) (*types.Transaction, error) + + Curse0(opts *bind.TransactOpts, subjects [][16]byte) (*types.Transaction, error) + + SetConfig(opts *bind.TransactOpts, newConfig RMNRemoteConfig) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + Uncurse(opts *bind.TransactOpts, subject [16]byte) (*types.Transaction, error) + + Uncurse0(opts *bind.TransactOpts, subjects [][16]byte) (*types.Transaction, error) + + FilterConfigSet(opts *bind.FilterOpts, version []uint32) (*RMNRemoteConfigSetIterator, error) + + WatchConfigSet(opts *bind.WatchOpts, sink chan<- *RMNRemoteConfigSet, version []uint32) (event.Subscription, error) + + ParseConfigSet(log types.Log) (*RMNRemoteConfigSet, error) + + FilterCursed(opts *bind.FilterOpts) (*RMNRemoteCursedIterator, error) + + WatchCursed(opts *bind.WatchOpts, sink chan<- *RMNRemoteCursed) (event.Subscription, error) + + ParseCursed(log types.Log) (*RMNRemoteCursed, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNRemoteOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *RMNRemoteOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*RMNRemoteOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RMNRemoteOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *RMNRemoteOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*RMNRemoteOwnershipTransferred, error) + + FilterUncursed(opts *bind.FilterOpts) (*RMNRemoteUncursedIterator, error) + + WatchUncursed(opts *bind.WatchOpts, sink chan<- *RMNRemoteUncursed) (event.Subscription, error) + + ParseUncursed(log types.Log) (*RMNRemoteUncursed, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var RMNRemoteZKBin string = ("0x0002000000000002000c00000000000200010000000103550000006003100270000002140030019d00000214033001970000000100200190000000370000c13d0000008002000039000000400020043f000000040030008c0000030e0000413d000000000401043b000000e0044002700000021d0040009c000000600000213d000002290040009c000000850000213d0000022f0040009c000001070000213d000002320040009c0000026d0000613d000002330040009c0000030e0000c13d000000240030008c0000030e0000413d0000000002000416000000000002004b0000030e0000c13d0000000402100370000000000202043b000600000002001d000002170020009c0000030e0000213d000000060530006a0000024f0050009c0000030e0000213d000000640050008c0000030e0000413d0000000104000039000000000204041a00000237022001970000000006000411000000000026004b0000033f0000c13d00000006020000290000000406200039000000000261034f000000000202043b000000000002004b000003ba0000c13d0000021a01000041000000800010043f00000241010000410000084d000104300000000002000416000000000002004b0000030e0000c13d0000001f023000390000021502200197000000a002200039000000400020043f0000001f0430018f0000021605300198000000a002500039000000480000613d000000a006000039000000000701034f000000007807043c0000000006860436000000000026004b000000440000c13d000000000004004b000000550000613d000000000151034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000200030008c0000030e0000413d000000a00100043d000002170010009c0000030e0000213d0000000003000411000000000003004b000001210000c13d000000400100043d0000021c020000410000012a0000013d0000021e0040009c000000f00000213d000002240040009c000001300000213d000002270040009c000002810000613d000002280040009c0000030e0000c13d0000000001000416000000000001004b0000030e0000c13d000000000100041a00000237021001970000000006000411000000000026004b000003100000c13d0000000102000039000000000302041a0000021804300197000000000464019f000000000042041b0000021801100197000000000010041b00000000010004140000023705300197000002140010009c0000021401008041000000c0011002100000023d011001c70000800d0200003900000003030000390000024a04000041084b08410000040f00000001002001900000030e0000613d00000000010000190000084c0001042e0000022a0040009c000001810000213d0000022d0040009c000002b50000613d0000022e0040009c0000030e0000c13d000000240030008c0000030e0000413d0000000002000416000000000002004b0000030e0000c13d0000000401100370000000000101043b00000236001001980000030e0000c13d000000c002000039000000400020043f0000000102000039000000800020043f0000023801100197000000a00010043f000000000102041a00000237011001970000000002000411000000000012004b000003140000c13d0000000002000019000a00000002001d0000000501200210000000a00110003900000000010104330000023801100197000900000001001d000000000010043f0000000701000039000000200010043f0000000001000414000002140010009c0000021401008041000000c00110021000000239011001c70000801002000039084b08460000040f00000001002001900000030e0000613d000000000101043b000000000101041a000000000001004b000004a20000c13d0000000603000039000000000103041a000002170010009c000002ef0000213d0000000102100039000000000023041b0000023c0110009a0000000902000029000000000021041b000000000103041a000800000001001d000000000020043f0000000701000039000000200010043f0000000001000414000002140010009c0000021401008041000000c00110021000000239011001c70000801002000039084b08460000040f00000001002001900000030e0000613d000000000101043b0000000802000029000000000021041b0000000a020000290000000102200039000000800100043d000000000012004b000000a00000413d000000400100043d00000020020000390000000002210436000000800300043d00000000003204350000004002100039000000000003004b000000e60000613d0000008004000039000000000500001900000020044000390000000006040433000002380660019700000000026204360000000105500039000000000035004b000000df0000413d0000000002120049000002140020009c00000214020080410000006002200210000002140010009c00000214010080410000004001100210000000000112019f00000000020004140000025c0000013d0000021f0040009c0000020d0000213d000002220040009c000002cd0000613d000002230040009c0000030e0000c13d0000000001000416000000000001004b0000030e0000c13d0000000001000412000c00000001001d000b00000000003d0000800501000039000000440300003900000000040004150000000c0440008a00000005044002100000024202000041084b08230000040f0000021701100197000000800010043f00000243010000410000084c0001042e000002300040009c000002d80000613d000002310040009c0000030e0000c13d000000240030008c0000030e0000413d0000000002000416000000000002004b0000030e0000c13d0000000401100370000000000101043b00000236001001980000030e0000c13d0000000602000039000000000202041a000000000002004b0000000002000019000003430000c13d000000010120018f000000400200043d0000000000120435000002140020009c000002140200804100000040012002100000025e011001c70000084c0001042e00000217001001980000000102000039000000000402041a0000021804400197000000000334019f000000000032041b000002650000c13d000000400100043d0000021a020000410000000000210435000002140010009c000002140100804100000040011002100000021b011001c70000084d00010430000002250040009c000002f50000613d000002260040009c0000030e0000c13d000000240030008c0000030e0000413d0000000002000416000000000002004b0000030e0000c13d0000000402100370000000000202043b000002170020009c0000030e0000213d0000002304200039000000000034004b0000030e0000813d0000000404200039000000000441034f000000000504043b000002170050009c000002ef0000213d00000005045002100000003f064000390000023406600197000002350060009c000002ef0000213d0000008006600039000000400060043f000000800050043f00000024022000390000000004240019000000000034004b0000030e0000213d000000000005004b0000015d0000613d0000008003000039000000000521034f000000000505043b00000236005001980000030e0000c13d000000200330003900000000005304350000002002200039000000000042004b000001540000413d0000000101000039000000000101041a00000237011001970000000002000411000000000012004b000004090000c13d000000800100043d000000000001004b0000040c0000c13d000000400100043d00000020020000390000000002210436000000800300043d00000000003204350000004002100039000000000003004b000001770000613d0000008004000039000000000500001900000020044000390000000006040433000002380660019700000000026204360000000105500039000000000035004b000001700000413d0000000002120049000002140020009c00000214020080410000006002200210000002140010009c00000214010080410000004001100210000000000112019f0000000002000414000002040000013d0000022b0040009c000002fe0000613d0000022c0040009c0000030e0000c13d000000240030008c0000030e0000413d0000000002000416000000000002004b0000030e0000c13d0000000401100370000000000101043b00000236001001980000030e0000c13d000000c002000039000000400020043f0000000102000039000000800020043f0000023801100197000000a00010043f000000000102041a00000237011001970000000002000411000000000012004b000003140000c13d0000000002000019000a00000002001d0000000501200210000000a00110003900000000010104330000023801100197000900000001001d000000000010043f0000000701000039000000200010043f0000000001000414000002140010009c0000021401008041000000c00110021000000239011001c70000801002000039084b08460000040f00000001002001900000030e0000613d000000000101043b000000000301041a000000000003004b0000045e0000613d0000000601000039000000000201041a000000000002004b000004b60000613d000000010130008a000000000023004b000001d20000613d000000000012004b000006e70000a13d000002460130009a000002460220009a000000000202041a000000000021041b000000000020043f0000000701000039000000200010043f0000000001000414000002140010009c0000021401008041000000c00110021000000239011001c70000801002000039000800000003001d084b08460000040f00000001002001900000030e0000613d000000000101043b0000000802000029000000000021041b0000000601000039000000000301041a000000000003004b000004650000613d000000010130008a000002460230009a000000000002041b0000000602000039000000000012041b0000000901000029000000000010043f0000000701000039000000200010043f0000000001000414000002140010009c0000021401008041000000c00110021000000239011001c70000801002000039084b08460000040f00000001002001900000030e0000613d000000000101043b000000000001041b0000000a020000290000000102200039000000800100043d000000000012004b0000019a0000413d000000400100043d00000020020000390000000002210436000000800300043d00000000003204350000004002100039000000000003004b000001fb0000613d0000008004000039000000000500001900000020044000390000000006040433000002380660019700000000026204360000000105500039000000000035004b000001f40000413d0000000002120049000002140020009c00000214020080410000006002200210000002140010009c00000214010080410000004001100210000000000112019f0000000002000414000002140020009c0000021402008041000000c002200210000000000121019f0000023d011001c70000800d0200003900000001030000390000024804000041000002640000013d000002200040009c000003050000613d000002210040009c0000030e0000c13d000000240030008c0000030e0000413d0000000004000416000000000004004b0000030e0000c13d0000000404100370000000000404043b000002170040009c0000030e0000213d0000002305400039000000000035004b0000030e0000813d0000000405400039000000000551034f000000000605043b000002170060009c000002ef0000213d00000005056002100000003f075000390000023407700197000002350070009c000002ef0000213d0000008007700039000000400070043f000000800060043f00000024044000390000000005450019000000000035004b0000030e0000213d000000000006004b000002390000613d000000000341034f000000000303043b00000236003001980000030e0000c13d000000200220003900000000003204350000002004400039000000000054004b000002300000413d0000000101000039000000000101041a00000237011001970000000002000411000000000012004b000004090000c13d000000800100043d000000000001004b0000046b0000c13d000000400100043d00000020020000390000000002210436000000800300043d00000000003204350000004002100039000000000003004b000002530000613d0000008004000039000000000500001900000020044000390000000006040433000002380660019700000000026204360000000105500039000000000035004b0000024c0000413d0000000002120049000002140020009c00000214020080410000006002200210000002140010009c00000214010080410000004001100210000000000112019f0000000002000414000002140020009c0000021402008041000000c002200210000000000121019f0000023d011001c70000800d0200003900000001030000390000023e04000041000000800000013d000000800010043f0000014000000443000001600010044300000020010000390000010000100443000001200020044300000219010000410000084c0001042e0000000001000416000000000001004b0000030e0000c13d000000c001000039000000400010043f0000001301000039000000800010043f0000026f01000041000000a00010043f0000002001000039000000c00010043f0000008001000039000000e002000039084b07f30000040f000000c00110008a000002140010009c0000021401008041000000600110021000000270011001c70000084c0001042e000000640030008c0000030e0000413d0000000002000416000000000002004b0000030e0000c13d0000000402100370000000000202043b000a00000002001d000002370020009c0000030e0000213d0000002402100370000000000202043b000002170020009c0000030e0000213d0000002304200039000000000034004b0000030e0000813d0000000404200039000000000441034f000000000404043b000002170040009c0000030e0000213d000000050440021000000000024200190000002402200039000000000032004b0000030e0000213d0000004402100370000000000202043b000002170020009c0000030e0000213d0000002304200039000000000034004b0000030e0000813d000600040020003d0000000601100360000000000101043b000002170010009c0000030e0000213d000500240020003d00000006021002100000000502200029000000000032004b0000030e0000213d0000000502000039000000000202041a0000021400200198000004b10000c13d0000025701000041000000800010043f00000241010000410000084d000104300000000001000416000000000001004b0000030e0000c13d0000000601000039000000000101041a000000000001004b00000000010000190000035f0000613d0000025a01000041000000000010043f0000000701000039000000200010043f0000025b01000041000000000101041a000000000001004b0000035e0000c13d0000025c01000041000000000010043f0000025d01000041000000000101041a000000000001004b0000000001000039000000010100c0390000035f0000013d0000000001000416000000000001004b0000030e0000c13d0000000602000039000000000102041a000000800010043f000000000020043f000000000001004b000003180000c13d0000002002000039000003230000013d0000000001000416000000000001004b0000030e0000c13d000000800000043f0000006002000039000000a00020043f000000c00000043f0000000501000039000000000301041a0000014004000039000000400040043f0000000201000039000000000101041a000000e00010043f0000000306000039000000000506041a0000025f0050009c000002ef0000813d00000005015002100000003f011000390000023401100197000002600010009c000003630000a13d0000025801000041000000000010043f0000004101000039000000040010043f0000023b010000410000084d000104300000000001000416000000000001004b0000030e0000c13d0000000101000039000000000101041a0000023701100197000000800010043f00000243010000410000084c0001042e0000000001000416000000000001004b0000030e0000c13d0000025201000041000000800010043f00000243010000410000084c0001042e000000240030008c0000030e0000413d0000000002000416000000000002004b0000030e0000c13d0000000401100370000000000601043b000002370060009c000003330000a13d00000000010000190000084d000104300000024901000041000000800010043f00000241010000410000084d000104300000024501000041000000c00010043f00000259010000410000084d00010430000000a004000039000002440200004100000000030000190000000005040019000000000402041a000000000445043600000001022000390000000103300039000000000013004b0000031b0000413d000000600250008a0000008001000039084b07e10000040f000000400100043d000a00000001001d0000008002000039084b08050000040f0000000a020000290000000001210049000002140010009c00000214010080410000006001100210000002140020009c00000214020080410000004002200210000000000121019f0000084c0001042e0000000101000039000000000101041a00000237011001970000000005000411000000000015004b0000033f0000c13d000000000056004b000003ad0000c13d0000024001000041000000800010043f00000241010000410000084d000104300000024501000041000000800010043f00000241010000410000084d000104300000023801100197000000000010043f0000000701000039000000200010043f0000000001000414000002140010009c0000021401008041000000c00110021000000239011001c70000801002000039084b08460000040f00000001002001900000030e0000613d000000000101043b000000000101041a000000000001004b000004070000c13d0000025c01000041000000000010043f0000000701000039000000200010043f0000025d01000041000000000101041a000000000001004b0000000002000039000000010200c039000001190000013d0000000101000039000000010110018f000000800010043f00000243010000410000084c0001042e0000014001100039000000400010043f000001400050043f000000000060043f000000000005004b0000037d0000613d000001600600003900000261070000410000000008000019000002620010009c000002ef0000213d0000004009100039000000400090043f000000000907041a000000a00a900270000002170aa00197000000200b1000390000000000ab04350000023709900197000000000091043500000000061604360000000107700039000000400100043d0000000108800039000000000058004b0000036c0000413d0000021403300197000001000040043f0000000404000039000000000404041a0000021704400197000001200040043f00000020041000390000004005000039000000000054043500000000003104350000004003100039000000e00400043d00000000004304350000006004100039000001000300043d0000000000240435000000a00210003900000000040304330000000000420435000000c002100039000000000004004b000003a00000613d00000000050000190000002003300039000000000603043300000000760604340000023706600197000000000662043600000000070704330000021707700197000000000076043500000040022000390000000105500039000000000045004b000003940000413d000001200300043d0000021703300197000000800410003900000000003404350000000002120049000002140020009c00000214020080410000006002200210000002140010009c00000214010080410000004001100210000000000112019f0000084c0001042e000000000100041a0000021801100197000000000161019f000000000010041b0000000001000414000002140010009c0000021401008041000000c0011002100000023d011001c70000800d0200003900000003030000390000023f04000041000000800000013d000400000002001d000900000006001d000800200060003d0000000802100360000000000202043b000000230850008a0000025105200197000302510080019b000000030650014f000000030050006c00000000050000190000025105004041000200000008001d000000000082004b00000000070000190000025107008041000002510060009c000000000507c019000000000005004b0000030e0000c13d0000000906200029000000000561034f000000000505043b000002170050009c0000030e0000213d000000060750021000000000077300490000002008600039000000000078004b0000000009000019000002510900204100000251077001970000025108800197000000000a78013f000000000078004b000000000700001900000251070040410000025100a0009c000000000709c019000000000007004b0000030e0000c13d000000020050008c000003f50000413d00000006074002100000000008670019000000000781034f000000000707043b000002170070009c0000030e0000213d0000004008800039000000000881034f000000000808043b000002170080009c0000030e0000213d000000000087004b000004bc0000813d0000000104400039000000000054004b000003e50000413d00000008040000290000002004400039000000000441034f000000000404043b000002170040009c0000030e0000213d000000010640021000000264046001970000026506600197000000000064004b000004b60000c13d00000001044001bf000000000045004b0000062b0000813d0000026e01000041000000800010043f00000241010000410000084d000104300000000102000039000001190000013d000000400100043d00000245020000410000012a0000013d0000000002000019000a00000002001d0000000501200210000000a00110003900000000010104330000023801100197000900000001001d000000000010043f0000000701000039000000200010043f0000000001000414000002140010009c0000021401008041000000c00110021000000239011001c70000801002000039084b08460000040f00000001002001900000030e0000613d000000000101043b000000000301041a000000000003004b0000045e0000613d0000000601000039000000000201041a000000000002004b000004b60000613d000000010130008a000000000023004b000004450000613d000000000012004b000006e70000a13d000002460130009a000002460220009a000000000202041a000000000021041b000000000020043f0000000701000039000000200010043f0000000001000414000002140010009c0000021401008041000000c00110021000000239011001c70000801002000039000800000003001d084b08460000040f00000001002001900000030e0000613d000000000101043b0000000802000029000000000021041b0000000601000039000000000301041a000000000003004b000004650000613d000000010130008a000002460230009a000000000002041b0000000602000039000000000012041b0000000901000029000000000010043f0000000701000039000000200010043f0000000001000414000002140010009c0000021401008041000000c00110021000000239011001c70000801002000039084b08460000040f00000001002001900000030e0000613d000000000101043b000000000001041b0000000a020000290000000102200039000000800100043d000000000012004b0000040d0000413d000001660000013d00000080010000390000000a02000029084b08150000040f0000000001010433000000400200043d0000024703000041000004a80000013d0000025801000041000000000010043f0000003101000039000000040010043f0000023b010000410000084d000104300000000002000019000a00000002001d0000000501200210000000a00110003900000000010104330000023801100197000900000001001d000000000010043f0000000701000039000000200010043f0000000001000414000002140010009c0000021401008041000000c00110021000000239011001c70000801002000039084b08460000040f00000001002001900000030e0000613d000000000101043b000000000101041a000000000001004b000004a20000c13d0000000603000039000000000103041a000002170010009c000002ef0000213d0000000102100039000000000023041b0000023c0110009a0000000902000029000000000021041b000000000103041a000800000001001d000000000020043f0000000701000039000000200010043f0000000001000414000002140010009c0000021401008041000000c00110021000000239011001c70000801002000039084b08460000040f00000001002001900000030e0000613d000000000101043b0000000802000029000000000021041b0000000a020000290000000102200039000000800100043d000000000012004b0000046c0000413d000002420000013d00000080010000390000000a02000029084b08150000040f0000000001010433000000400200043d0000023a030000410000000000320435000002380110019700000004032000390000000000130435000002140020009c000002140200804100000040012002100000023b011001c70000084d000104300000000402000039000000000202041a0000021702200197000002170020009c000004c00000c13d0000025801000041000000000010043f0000001101000039000000040010043f0000023b010000410000084d000104300000026301000041000000800010043f00000241010000410000084d00010430000000000021004b000006ed0000a13d0000000201000039000000000101041a000900000001001d0000014001000039000000400010043f0000024c0100004100000000001004430000000001000414000002140010009c0000021401008041000000c0011002100000024d011001c70000800b02000039084b08460000040f0000000100200190000006f10000613d000000000101043b000000800010043f000002420100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000002140010009c0000021401008041000000c0011002100000024e011001c70000800502000039084b08460000040f0000000100200190000006f10000613d000000000101043b0000021701100197000000a00010043f0000000001000410000000c00010043f0000000a01000029000000e00010043f0000000901000029000001000010043f00000001020003670000002401200370000000000101043b000900000001001d0000000401100039000000000112034f000000000101043b000002170010009c000002ef0000213d00000005031002100000003f043000390000023404400197000000400500043d0000000004450019000400000005001d000000000054004b00000000050000390000000105004039000002170040009c000002ef0000213d0000000100500190000002ef0000c13d000000400040043f0000000404000029000000000014043500000009010000290000002405100039000800000053001d000000080050006c000005820000813d0000000001000031000a00000001001d00070024001000920000000409000029000000000152034f000000000101043b000002170010009c0000030e0000213d000000090410002900000007014000690000024f0010009c0000030e0000213d000000a00010008c0000030e0000413d000000400a00043d0000025000a0009c000002ef0000213d000000a001a00039000000400010043f0000002401400039000000000312034f000000000303043b000002170030009c0000030e0000213d000000000c3a0436000000200b1000390000000001b2034f000000000101043b000002170010009c0000030e0000213d000000000441001900000043014000390000000a06000029000000000061004b0000000003000019000002510300804100000251011001970000025106600197000000000861013f000000000061004b00000000010000190000025101004041000002510080009c000000000103c019000000000001004b0000030e0000c13d0000002403400039000000000132034f000000000d01043b0000021700d0009c000002ef0000213d0000001f01d0003900000271011001970000003f011000390000027101100197000000400e00043d00000000061e00190000000000e6004b00000000010000390000000101004039000002170060009c000002ef0000213d0000000100100190000002ef0000c13d000000400060043f0000000001de04360000000004d4001900000044044000390000000a0040006c0000030e0000213d0000002003300039000000000832034f0000027106d0019800000000046100190000055a0000613d000000000308034f000000000f010019000000003703043c000000000f7f043600000000004f004b000005560000c13d0000001f03d00190000005670000613d000000000668034f0000000303300210000000000704043300000000073701cf000000000737022f000000000606043b0000010003300089000000000636022f00000000033601cf000000000373019f00000000003404350000000001d1001900000000000104350000000000ec04350000002001b00039000000000312034f000000000303043b000002170030009c0000030e0000213d0000004004a0003900000000003404350000002001100039000000000312034f000000000303043b000002170030009c0000030e0000213d00000020099000390000006004a0003900000000003404350000002001100039000000000112034f000000000101043b0000008003a0003900000000001304350000000000a904350000002005500039000000080050006c0000050d0000413d0000000401000029000001200010043f000000400200043d0000004001200039000000400300003900000000003104350000002003200039000002520100004100000000001304350000006001200039000000800400043d0000000000410435000000a00100043d000002170110019700000080042000390000000000140435000000c00100043d0000023701100197000000a0042000390000000000140435000000e00100043d0000023701100197000000c0042000390000000000140435000000e001200039000001000400043d00000000004104350000010001200039000000c005000039000001200400043d0000000000510435000001200120003900000000050404330000000000510435000001400620003900000005015002100000000007610019000000000005004b000007880000c13d0000000001270049000000200410008a00000000004204350000001f0110003900000271041001970000000001240019000000000041004b00000000040000390000000104004039000002170010009c000002ef0000213d0000000100400190000002ef0000c13d000000400010043f000002140030009c000002140300804100000040013002100000000002020433000002140020009c00000214020080410000006002200210000000000112019f0000000002000414000002140020009c0000021402008041000000c002200210000000000112019f0000023d011001c70000801002000039084b08460000040f00000001002001900000030e0000613d00000001020003670000000603200360000000000101043b000800000001001d000000000103043b000000000001004b000000830000613d000900000000001d000a00000000001d0000000a01000029000000060110021000000005011000290000002003100039000000000332034f000000000112034f000000000101043b000000000203043b000000400300043d000000600430003900000000002404350000004002300039000000000012043500000020013000390000001b02000039000000000021043500000008010000290000000000130435000000000000043f000002140030009c000002140300804100000040013002100000000002000414000002140020009c0000021402008041000000c002200210000000000112019f00000253011001c70000000102000039084b08460000040f00000060031002700000021403300197000000200030008c000000200500003900000000050340190000002004500190000005fd0000613d000000000601034f0000000007000019000000006806043c0000000007870436000000000047004b000005f90000c13d0000001f055001900000060a0000613d000000000641034f0000000305500210000000000704043300000000075701cf000000000757022f000000000606043b0000010005500089000000000656022f00000000055601cf000000000575019f00000000005404350000000100200190000007ba0000613d000000000100043d0000023702100198000007d80000613d000000090020006b000007db0000813d000900000002001d000000000020043f0000000801000039000000200010043f0000000001000414000002140010009c0000021401008041000000c00110021000000239011001c70000801002000039084b08460000040f00000001002001900000030e0000613d000000000101043b000000000101041a000000ff00100190000007de0000613d00000001020003670000000601200360000000000101043b0000000a03000029000a00010030003d0000000a0010006b000900090000002d000005d20000413d000000830000013d0000000304000039000000000404041a000000000004004b000006500000613d0000000601000029000700240010003d000a0001004000920000000301000039000000000101041a0000000a0010006b000006e70000813d000002660140009a000000000101041a0000023701100197000000000010043f0000000801000039000000200010043f0000000001000414000002140010009c0000021401008041000000c00110021000000239011001c70000801002000039084b08460000040f00000001002001900000030e0000613d000000000101043b000000000201041a0000027202200197000000000021041b0000000a04000029000000000004004b000006310000c13d000000000300003100000001010003670000000702100360000000000202043b000000230400008a00050006004000720000000504300029000000000042004b0000000005000019000002510500804100000251044001970000025106200197000000000746013f000000000046004b00000000040000190000025104004041000002510070009c000000000405c019000000000004004b0000030e0000c13d0000000604000029000100440040003d000000000a0000190000000905200029000000000451034f000000000404043b000002170040009c0000030e0000213d00000006064002100000000006630049000000200550003900000251076001970000025108500197000000000978013f000000000078004b00000000070000190000025107004041000000000065004b00000000060000190000025106002041000002510090009c000000000706c019000000000007004b0000030e0000c13d00000000004a004b000006f20000813d0007000600a002180000000702500029000000000121034f000000000101043b000002370010009c0000030e0000213d000000000010043f0000000801000039000000200010043f0000000001000414000002140010009c0000021401008041000000c00110021000000239011001c70000801002000039000a0000000a001d084b08460000040f0000000a0800002900000001002001900000030e0000613d000000000101043b000000000101041a000000ff00100190000007850000c13d00000001010003670000000802100360000000000302043b0000000002000031000000060420006a000000230440008a00000251054001970000025106300197000000000756013f000000000056004b00000000050000190000025105004041000000000043004b00000000040000190000025104008041000002510070009c000000000504c019000000000005004b0000030e0000c13d0000000904300029000000000341034f000000000303043b000002170030009c0000030e0000213d00000006053002100000000005520049000000200240003900000251045001970000025106200197000000000746013f000000000046004b00000000040000190000025104004041000000000052004b00000000050000190000025105002041000002510070009c000000000405c019000000000004004b0000030e0000c13d000000000038004b000006e70000813d0000000702200029000000000121034f000000000101043b000002370010009c0000030e0000213d000000000010043f0000000801000039000000200010043f0000000001000414000002140010009c0000021401008041000000c00110021000000239011001c70000801002000039084b08460000040f0000000a0a00002900000001002001900000030e0000613d000000000101043b000000000201041a000002720220019700000001022001bf000000000021041b00000001010003670000000802100360000000000202043b0000000003000031000000050430002900000251054001970000025106200197000000000756013f000000000056004b00000000050000190000025105002041000000000042004b00000000040000190000025104004041000002510070009c000000000504c019000000010aa00039000000000005004b000006630000c13d0000030e0000013d0000025801000041000000000010043f0000003201000039000000040010043f0000023b010000410000084d000104300000024b01000041000000800010043f00000241010000410000084d00010430000000000001042f00000002060000390000000407000029000000000076041b0000000306000039000000000706041a000000000046041b000000000074004b000007020000813d000002670640009a000002670770009a000000000076004b000007020000813d000000000006041b0000000106600039000000000076004b000006fe0000413d0000000306000039000000000060043f000000000004004b0000071d0000613d00000261060000410000000007000019000000000851034f000000000808043b000002370080009c0000030e0000213d0000002009500039000000000991034f000000000909043b000002170090009c0000030e0000213d000000000a06041a000002680aa00197000000a00990021000000269099001970000000009a9019f000000000889019f000000000086041b000000010660003900000040055000390000000107700039000000000047004b000007080000413d0000000104100360000000000404043b000002170040009c0000030e0000213d0000000405000039000000000605041a0000026a06600197000000000646019f000000000065041b0000000506000039000000000506041a0000021407500197000002140070009c000004b60000613d0000026b0750019700000001055000390000021405500197000000000775019f000000000076041b000000400600043d000000200760003900000004080000290000000000870435000000020020006c000000000700001900000251070080410000025108200197000000030980014f000000030080006c00000000080000190000025108004041000002510090009c000000000807c01900000020070000390000000000760435000000000008004b0000030e0000c13d00000006072000290000000402700039000000000221034f000000000202043b000002170020009c0000030e0000213d000000240770003900000006082002100000000003830049000000000037004b0000000008000019000002510800204100000251033001970000025109700197000000000a39013f000000000039004b000000000300001900000251030040410000025100a0009c000000000308c019000000000003004b0000030e0000c13d00000080036000390000004008600039000000600900003900000000009804350000000000230435000000a003600039000000000002004b000007710000613d0000000008000019000000000971034f000000000909043b000002370090009c0000030e0000213d0000000009930436000000200a700039000000000aa1034f000000000a0a043b0000021700a0009c0000030e0000213d0000000000a90435000000400770003900000040033000390000000108800039000000000028004b000007610000413d000000600160003900000000004104350000000001630049000002140010009c00000214010080410000006001100210000002140060009c00000214060080410000004002600210000000000121019f0000000002000414000002140020009c0000021402008041000000c002200210000000000121019f0000023d011001c70000800d0200003900000002030000390000026c04000041000002640000013d000000400100043d0000026d020000410000012a0000013d000000a0080000390000000009000019000007a10000013d0000000001bc001900000000000104350000004001a0003900000000010104330000021701100197000000400d70003900000000001d04350000006001a0003900000000010104330000021701100197000000600d70003900000000001d043500000080017000390000008007a00039000000000707043300000000007104350000001f01b00039000002710110019700000000071c00190000000109900039000000000059004b000005a90000813d0000000001270049000001400110008a00000000061604360000002004400039000000000a04043300000000b10a043400000217011001970000000001170436000000000b0b04330000000000810435000000a00170003900000000db0b04340000000000b10435000000c00c70003900000000000b004b0000078b0000613d000000000e0000190000000001ce0019000000000fed0019000000000f0f04330000000000f10435000000200ee000390000000000be004b000007b20000413d0000078b0000013d0000001f0530018f0000021606300198000000400200043d0000000004620019000007c50000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000007c10000c13d000000000005004b000007d20000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000002140020009c00000214020080410000004002200210000000000112019f0000084d00010430000000400100043d00000256020000410000012a0000013d000000400100043d00000254020000410000012a0000013d000000400100043d00000255020000410000012a0000013d0000001f0220003900000271022001970000000001120019000000000021004b00000000020000390000000102004039000002170010009c000007ed0000213d0000000100200190000007ed0000c13d000000400010043f000000000001042d0000025801000041000000000010043f0000004101000039000000040010043f0000023b010000410000084d0001043000000000430104340000000001320436000000000003004b000007ff0000613d000000000200001900000000052100190000000006240019000000000606043300000000006504350000002002200039000000000032004b000007f80000413d000000000231001900000000000204350000001f0230003900000271022001970000000001210019000000000001042d00000020030000390000000004310436000000000302043300000000003404350000004001100039000000000003004b000008140000613d000000000400001900000020022000390000000005020433000002380550019700000000015104360000000104400039000000000034004b0000080d0000413d000000000001042d0000000003010433000000000023004b0000081c0000a13d000000050220021000000000012100190000002001100039000000000001042d0000025801000041000000000010043f0000003201000039000000040010043f0000023b010000410000084d00010430000000000001042f00000000050100190000000000200443000000050030008c000008310000413d000000040100003900000000020000190000000506200210000000000664001900000005066002700000000006060031000000000161043a0000000102200039000000000031004b000008290000413d000002140030009c000002140300804100000060013002100000000002000414000002140020009c0000021402008041000000c002200210000000000112019f00000273011001c70000000002050019084b08460000040f0000000100200190000008400000613d000000000101043b000000000001042d000000000001042f00000844002104210000000102000039000000000001042d0000000002000019000000000001042d00000849002104230000000102000039000000000001042d0000000002000019000000000001042d0000084b000004320000084c0001042e0000084d000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000002000000000000000000000000000000800000010000000000000000009cf8540c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000009b15e16f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070a9089d00000000000000000000000000000000000000000000000000000000d881e09100000000000000000000000000000000000000000000000000000000f2fde38a00000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000f8bb876e00000000000000000000000000000000000000000000000000000000d881e09200000000000000000000000000000000000000000000000000000000eaa83ddd000000000000000000000000000000000000000000000000000000008da5cb5a000000000000000000000000000000000000000000000000000000008da5cb5b000000000000000000000000000000000000000000000000000000009a19b3290000000000000000000000000000000000000000000000000000000070a9089e0000000000000000000000000000000000000000000000000000000079ba509700000000000000000000000000000000000000000000000000000000397796f6000000000000000000000000000000000000000000000000000000006509a953000000000000000000000000000000000000000000000000000000006509a954000000000000000000000000000000000000000000000000000000006d2d399300000000000000000000000000000000000000000000000000000000397796f70000000000000000000000000000000000000000000000000000000062eed415000000000000000000000000000000000000000000000000000000001add205e000000000000000000000000000000000000000000000000000000001add205f000000000000000000000000000000000000000000000000000000002cbc26bb00000000000000000000000000000000000000000000000000000000181f5a7700000000000000000000000000000000000000000000000000000000198f0f777fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff7f00000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000020000000000000000000000000000000000004000000000000000000000000019d5c79b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000009addddcec1d7ba6ad726df49aeea3e93fb0c1037d551236841a60c0c883f2c102000000000000000000000000000000000000000000000000000000000000001716e663a90a76d3b6c7e5f680673d1b051454c19c627e184c8daf28f3104f74ed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278dad89dca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000800000000000000000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e0000000000000000000000000000000000000020000000800000000000000000f652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f2b5c74de0000000000000000000000000000000000000000000000000000000009addddcec1d7ba6ad726df49aeea3e93fb0c1037d551236841a60c0c883f2c273281fa1000000000000000000000000000000000000000000000000000000000676e709c9cc74fa0519fd78f7c33be0f1b2b0bae0507c724aef7229379c6ba102b543c6000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e059fa4a93000000000000000000000000000000000000000000000000000000009a8a0592ac89c5ad3bc6df8224c17b485976f597df104ee20d0df415241f670b020000020000000000000000000000000000000400000000000000000000000002000002000000000000000000000000000000440000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffff5f80000000000000000000000000000000000000000000000000000000000000009651943783dbf81935a60e98f218a9d9b5b28823fb2228bbd91320d632facf530000000000000000000000000000000000000080000000000000000000000000bbe15e7f00000000000000000000000000000000000000000000000000000000aaaa9141000000000000000000000000000000000000000000000000000000008baa579f00000000000000000000000000000000000000000000000000000000ace124bc000000000000000000000000000000000000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000c0000000000000000001000000000000000000000000000000000000000000000000000000000000007dde556524061d0ce70b736a6e842a48e4927608bf87fd31432ced12a03ffeb8010000000000000000000000000000010000000000000000000000000000000070b766b11586b6b505ed3893938b0cc6c6c98bd6f65e969ac311168d34e4f9e200000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000fffffffffffffebfc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b000000000000000000000000000000000000000000000000ffffffffffffffbf4485151700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffffe000000000000000000000000000000000000000000000001fffffffffffffffe3da8a5f161a6c3ff06a60736d0ed24d7963cc6a5c4fafd2fa1dae9bb908e07a63da8a5f161a6c3ff06a60736d0ed24d7963cc6a5c4fafd2fa1dae9bb908e07a5ffffffff0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff0000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007f22bf988149dbe8de8fb879c6b97a4e56e68b2bd57421ce1a4e79d4ef6b496c28cae27d00000000000000000000000000000000000000000000000000000000014c502000000000000000000000000000000000000000000000000000000000524d4e52656d6f746520312e362e302d646576000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0002000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000") diff --git a/core/gethwrappers/ccip/generated_zks/router/router.go b/core/gethwrappers/ccip/generated_zks/router/router.go new file mode 100644 index 00000000000..618e45ca33c --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/router/router.go @@ -0,0 +1,1435 @@ +package router + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type ClientAny2EVMMessage struct { + MessageId [32]byte + SourceChainSelector uint64 + Sender []byte + Data []byte + DestTokenAmounts []ClientEVMTokenAmount +} + +type ClientEVM2AnyMessage struct { + Receiver []byte + Data []byte + TokenAmounts []ClientEVMTokenAmount + FeeToken common.Address + ExtraArgs []byte +} + +type ClientEVMTokenAmount struct { + Token common.Address + Amount *big.Int +} + +type RouterOffRamp struct { + SourceChainSelector uint64 + OffRamp common.Address +} + +type RouterOnRamp struct { + DestChainSelector uint64 + OnRamp common.Address +} + +var RouterMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wrappedNative\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"armProxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BadARMSignal\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedToSendValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientFeeTokenAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMsgValue\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"InvalidRecipientAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"offRamp\",\"type\":\"address\"}],\"name\":\"OffRampMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyOffRamp\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"UnsupportedDestinationChain\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"offRamp\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"calldataHash\",\"type\":\"bytes32\"}],\"name\":\"MessageExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"offRamp\",\"type\":\"address\"}],\"name\":\"OffRampAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"offRamp\",\"type\":\"address\"}],\"name\":\"OffRampRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"onRamp\",\"type\":\"address\"}],\"name\":\"OnRampSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_RET_BYTES\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"onRamp\",\"type\":\"address\"}],\"internalType\":\"structRouter.OnRamp[]\",\"name\":\"onRampUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"offRamp\",\"type\":\"address\"}],\"internalType\":\"structRouter.OffRamp[]\",\"name\":\"offRampRemoves\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"offRamp\",\"type\":\"address\"}],\"internalType\":\"structRouter.OffRamp[]\",\"name\":\"offRampAdds\",\"type\":\"tuple[]\"}],\"name\":\"applyRampUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destinationChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"ccipSend\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getArmProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destinationChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"getFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOffRamps\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"offRamp\",\"type\":\"address\"}],\"internalType\":\"structRouter.OffRamp[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getOnRamp\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"getSupportedTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWrappedNative\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"isChainSupported\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"offRamp\",\"type\":\"address\"}],\"name\":\"isOffRamp\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"recoverTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"gasForCallExactCheck\",\"type\":\"uint16\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"routeMessage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"retData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wrappedNative\",\"type\":\"address\"}],\"name\":\"setWrappedNative\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60a06040523480156200001157600080fd5b5060405162002d2838038062002d288339810160408190526200003491620001af565b33806000816200008b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be81620000e7565b5050600280546001600160a01b0319166001600160a01b039485161790555016608052620001e7565b336001600160a01b03821603620001415760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000082565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0381168114620001aa57600080fd5b919050565b60008060408385031215620001c357600080fd5b620001ce8362000192565b9150620001de6020840162000192565b90509250929050565b608051612b1762000211600039600081816101f9015281816105e10152610af20152612b176000f3fe6080604052600436106101295760003560e01c80638da5cb5b116100a5578063a8d87a3b11610074578063e861e90711610059578063e861e90714610409578063f2fde38b14610434578063fbca3b741461045457600080fd5b8063a8d87a3b1461039c578063da5fcac8146103e957600080fd5b80638da5cb5b146102ed57806396f4e9f914610318578063a40e69c71461032b578063a48a90581461034d57600080fd5b806352cb60ca116100fc578063787350e3116100e1578063787350e31461028057806379ba5097146102a857806383826b2b146102bd57600080fd5b806352cb60ca1461023e5780635f3e849f1461026057600080fd5b8063181f5a771461012e57806320487ded1461018d5780633cf97983146101bb5780635246492f146101ea575b600080fd5b34801561013a57600080fd5b506101776040518060400160405280600c81526020017f526f7574657220312e322e30000000000000000000000000000000000000000081525081565b6040516101849190611f3c565b60405180910390f35b34801561019957600080fd5b506101ad6101a83660046121ad565b610481565b604051908152602001610184565b3480156101c757600080fd5b506101db6101d63660046122aa565b6105d9565b60405161018493929190612322565b3480156101f657600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610184565b34801561024a57600080fd5b5061025e61025936600461234d565b610836565b005b34801561026c57600080fd5b5061025e61027b36600461236a565b610885565b34801561028c57600080fd5b50610295608481565b60405161ffff9091168152602001610184565b3480156102b457600080fd5b5061025e6109d3565b3480156102c957600080fd5b506102dd6102d83660046123ab565b610ad0565b6040519015158152602001610184565b3480156102f957600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610219565b6101ad6103263660046121ad565b610aee565b34801561033757600080fd5b50610340611087565b60405161018491906123e2565b34801561035957600080fd5b506102dd610368366004612451565b67ffffffffffffffff1660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff16151590565b3480156103a857600080fd5b506102196103b7366004612451565b67ffffffffffffffff1660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b3480156103f557600080fd5b5061025e6104043660046124b8565b61118b565b34801561041557600080fd5b5060025473ffffffffffffffffffffffffffffffffffffffff16610219565b34801561044057600080fd5b5061025e61044f36600461234d565b611490565b34801561046057600080fd5b5061047461046f366004612451565b6114a4565b6040516101849190612552565b606081015160009073ffffffffffffffffffffffffffffffffffffffff166104c25760025473ffffffffffffffffffffffffffffffffffffffff1660608301525b67ffffffffffffffff831660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff168061053a576040517fae236d9c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff851660048201526024015b60405180910390fd5b6040517f20487ded00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216906320487ded9061058e9087908790600401612689565b602060405180830381865afa1580156105ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cf91906126ac565b9150505b92915050565b6000606060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663397796f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561064a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066e91906126c5565b156106a5576040517fc148371500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106be6106b86040890160208a01612451565b33610ad0565b6106f4576040517fd2316ede00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006385572ffb60e01b8860405160240161070f91906127f4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905061079c8186888a60846115c4565b919550935091507f9b877de93ea9895756e337442c657f95a34fc68e7eb988bdfa693d5be83016b688356107d660408b0160208c01612451565b83516020850120604051610823939291339193845267ffffffffffffffff92909216602084015273ffffffffffffffffffffffffffffffffffffffff166040830152606082015260800190565b60405180910390a1509450945094915050565b61083e6116ea565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61088d6116ea565b73ffffffffffffffffffffffffffffffffffffffff82166108f2576040517f26a78f8f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610531565b73ffffffffffffffffffffffffffffffffffffffff83166109ad5760008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114610967576040519150601f19603f3d011682016040523d82523d6000602084013e61096c565b606091505b50509050806109a7576040517fe417b80b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6109ce73ffffffffffffffffffffffffffffffffffffffff8416838361176d565b505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610a54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610531565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6000610ae7610adf8484611841565b600490611885565b9392505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663397796f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7f91906126c5565b15610bb6576040517fc148371500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff831660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1680610c29576040517fae236d9c00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff85166004820152602401610531565b606083015160009073ffffffffffffffffffffffffffffffffffffffff16610dbb5760025473ffffffffffffffffffffffffffffffffffffffff90811660608601526040517f20487ded000000000000000000000000000000000000000000000000000000008152908316906320487ded90610cab9088908890600401612689565b602060405180830381865afa158015610cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cec91906126ac565b905080341015610d28576040517f07da6ee600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b349050836060015173ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015610d7757600080fd5b505af1158015610d8b573d6000803e3d6000fd5b505050506060850151610db6915073ffffffffffffffffffffffffffffffffffffffff16838361176d565b610eb2565b3415610df3576040517f1841b4e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f20487ded00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906320487ded90610e479088908890600401612689565b602060405180830381865afa158015610e64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8891906126ac565b6060850151909150610eb29073ffffffffffffffffffffffffffffffffffffffff1633848461189d565b60005b846040015151811015610fe257600085604001518281518110610eda57610eda612900565b6020908102919091010151516040517f48a98aa400000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8916600482015273ffffffffffffffffffffffffffffffffffffffff8083166024830152919250610fd9913391908716906348a98aa490604401602060405180830381865afa158015610f6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f90919061292f565b88604001518581518110610fa657610fa6612900565b6020026020010151602001518473ffffffffffffffffffffffffffffffffffffffff1661189d909392919063ffffffff16565b50600101610eb5565b506040517fdf0aa9e900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83169063df0aa9e99061103b90889088908690339060040161294c565b6020604051808303816000875af115801561105a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107e91906126ac565b95945050505050565b6060600061109560046118fb565b90506000815167ffffffffffffffff8111156110b3576110b3611f6c565b6040519080825280602002602001820160405280156110f857816020015b60408051808201909152600080825260208201528152602001906001900390816110d15790505b50905060005b825181101561118457600083828151811061111b5761111b612900565b60200260200101519050604051806040016040528060a083901c67ffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681525083838151811061117057611170612900565b6020908102919091010152506001016110fe565b5092915050565b6111936116ea565b60005b8581101561126f5760008787838181106111b2576111b2612900565b9050604002018036038101906111c8919061299c565b60208181018051835167ffffffffffffffff90811660009081526003855260409081902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff948516179055855193519051921682529394509216917f1f7d0ec248b80e5c0dde0ee531c4fc8fdb6ce9a2b3d90f560c74acd6a7202f23910160405180910390a250600101611196565b5060005b838110156113a757600085858381811061128f5761128f612900565b6112a59260206040909202019081019150612451565b905060008686848181106112bb576112bb612900565b90506040020160200160208101906112d3919061234d565b90506112ea6112e28383611841565b600490611908565b611348576040517f4964779000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8316600482015273ffffffffffffffffffffffffffffffffffffffff82166024820152604401610531565b60405173ffffffffffffffffffffffffffffffffffffffff8216815267ffffffffffffffff8316907fa823809efda3ba66c873364eec120fa0923d9fabda73bc97dd5663341e2d9bcb9060200160405180910390a25050600101611273565b5060005b818110156114875760008383838181106113c7576113c7612900565b6113dd9260206040909202019081019150612451565b905060008484848181106113f3576113f3612900565b905060400201602001602081019061140b919061234d565b905061142261141a8383611841565b600490611914565b1561147d5760405173ffffffffffffffffffffffffffffffffffffffff8216815267ffffffffffffffff8316907fa4bdf64ebdf3316320601a081916a75aa144bcef6c4beeb0e9fb1982cacc6b949060200160405180910390a25b50506001016113ab565b50505050505050565b6114986116ea565b6114a181611920565b50565b60606114de8267ffffffffffffffff1660009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff16151590565b6114f8576040805160008082526020820190925290611184565b67ffffffffffffffff8216600081815260036020526040908190205490517ffbca3b74000000000000000000000000000000000000000000000000000000008152600481019290925273ffffffffffffffffffffffffffffffffffffffff169063fbca3b7490602401600060405180830381865afa15801561157e573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105d391908101906129db565b6000606060008361ffff1667ffffffffffffffff8111156115e7576115e7611f6c565b6040519080825280601f01601f191660200182016040528015611611576020820181803683370190505b509150863b611644577f0c3b563c0000000000000000000000000000000000000000000000000000000060005260046000fd5b5a85811015611677577fafa32a2c0000000000000000000000000000000000000000000000000000000060005260046000fd5b85900360408104810387106116b0577f37c3be290000000000000000000000000000000000000000000000000000000060005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156116d35750835b808352806000602085013e50955095509592505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461176b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610531565b565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109ce9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611a15565b6000610ae773ffffffffffffffffffffffffffffffffffffffff83167bffffffffffffffff000000000000000000000000000000000000000060a086901b16612a99565b60008181526001830160205260408120541515610ae7565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526109a79085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016117bf565b60606000610ae783611b21565b6000610ae78383611b7d565b6000610ae78383611c70565b3373ffffffffffffffffffffffffffffffffffffffff82160361199f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610531565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000611a77826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611cbf9092919063ffffffff16565b8051909150156109ce5780806020019051810190611a9591906126c5565b6109ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610531565b606081600001805480602002602001604051908101604052809291908181526020018280548015611b7157602002820191906000526020600020905b815481526020019060010190808311611b5d575b50505050509050919050565b60008181526001830160205260408120548015611c66576000611ba1600183612aac565b8554909150600090611bb590600190612aac565b9050808214611c1a576000866000018281548110611bd557611bd5612900565b9060005260206000200154905080876000018481548110611bf857611bf8612900565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611c2b57611c2b612abf565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506105d3565b60009150506105d3565b6000818152600183016020526040812054611cb7575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105d3565b5060006105d3565b6060611cce8484600085611cd6565b949350505050565b606082471015611d68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610531565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611d919190612aee565b60006040518083038185875af1925050503d8060008114611dce576040519150601f19603f3d011682016040523d82523d6000602084013e611dd3565b606091505b5091509150611de487838387611def565b979650505050505050565b60608315611e85578251600003611e7e5773ffffffffffffffffffffffffffffffffffffffff85163b611e7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610531565b5081611cce565b611cce8383815115611e9a5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105319190611f3c565b60005b83811015611ee9578181015183820152602001611ed1565b50506000910152565b60008151808452611f0a816020860160208601611ece565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610ae76020830184611ef2565b803567ffffffffffffffff81168114611f6757600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715611fbe57611fbe611f6c565b60405290565b60405160a0810167ffffffffffffffff81118282101715611fbe57611fbe611f6c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561202e5761202e611f6c565b604052919050565b600082601f83011261204757600080fd5b813567ffffffffffffffff81111561206157612061611f6c565b61209260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611fe7565b8181528460208386010111156120a757600080fd5b816020850160208301376000918101602001919091529392505050565b600067ffffffffffffffff8211156120de576120de611f6c565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff811681146114a157600080fd5b8035611f67816120e8565b600082601f83011261212657600080fd5b8135602061213b612136836120c4565b611fe7565b82815260069290921b8401810191818101908684111561215a57600080fd5b8286015b848110156121a257604081890312156121775760008081fd5b61217f611f9b565b813561218a816120e8565b8152818501358582015283529183019160400161215e565b509695505050505050565b600080604083850312156121c057600080fd5b6121c983611f4f565b9150602083013567ffffffffffffffff808211156121e657600080fd5b9084019060a082870312156121fa57600080fd5b612202611fc4565b82358281111561221157600080fd5b61221d88828601612036565b82525060208301358281111561223257600080fd5b61223e88828601612036565b60208301525060408301358281111561225657600080fd5b61226288828601612115565b6040830152506122746060840161210a565b606082015260808301358281111561228b57600080fd5b61229788828601612036565b6080830152508093505050509250929050565b600080600080608085870312156122c057600080fd5b843567ffffffffffffffff8111156122d757600080fd5b850160a081880312156122e957600080fd5b9350602085013561ffff8116811461230057600080fd5b9250604085013591506060850135612317816120e8565b939692955090935050565b831515815260606020820152600061233d6060830185611ef2565b9050826040830152949350505050565b60006020828403121561235f57600080fd5b8135610ae7816120e8565b60008060006060848603121561237f57600080fd5b833561238a816120e8565b9250602084013561239a816120e8565b929592945050506040919091013590565b600080604083850312156123be57600080fd5b6123c783611f4f565b915060208301356123d7816120e8565b809150509250929050565b602080825282518282018190526000919060409081850190868401855b82811015612444578151805167ffffffffffffffff16855286015173ffffffffffffffffffffffffffffffffffffffff168685015292840192908501906001016123ff565b5091979650505050505050565b60006020828403121561246357600080fd5b610ae782611f4f565b60008083601f84011261247e57600080fd5b50813567ffffffffffffffff81111561249657600080fd5b6020830191508360208260061b85010111156124b157600080fd5b9250929050565b600080600080600080606087890312156124d157600080fd5b863567ffffffffffffffff808211156124e957600080fd5b6124f58a838b0161246c565b9098509650602089013591508082111561250e57600080fd5b61251a8a838b0161246c565b9096509450604089013591508082111561253357600080fd5b5061254089828a0161246c565b979a9699509497509295939492505050565b6020808252825182820181905260009190848201906040850190845b818110156125a057835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161256e565b50909695505050505050565b6000815160a084526125c160a0850182611ef2565b9050602080840151858303828701526125da8382611ef2565b60408681015188830389830152805180845290850195509092506000918401905b8083101561263a578551805173ffffffffffffffffffffffffffffffffffffffff168352850151858301529484019460019290920191908301906125fb565b5060608701519450612664606089018673ffffffffffffffffffffffffffffffffffffffff169052565b60808701519450878103608089015261267d8186611ef2565b98975050505050505050565b67ffffffffffffffff83168152604060208201526000611cce60408301846125ac565b6000602082840312156126be57600080fd5b5051919050565b6000602082840312156126d757600080fd5b81518015158114610ae757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261271c57600080fd5b830160208101925035905067ffffffffffffffff81111561273c57600080fd5b8036038213156124b157600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b8183526000602080850194508260005b858110156127e95781356127b7816120e8565b73ffffffffffffffffffffffffffffffffffffffff1687528183013583880152604096870196909101906001016127a4565b509495945050505050565b6020815281356020820152600061280d60208401611f4f565b67ffffffffffffffff808216604085015261282b60408601866126e7565b925060a0606086015261284260c08601848361274b565b92505061285260608601866126e7565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08087860301608088015261288885838561274b565b9450608088013592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030183126128c157600080fd5b602092880192830192359150838211156128da57600080fd5b8160061b36038313156128ec57600080fd5b8685030160a0870152611de4848284612794565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561294157600080fd5b8151610ae7816120e8565b67ffffffffffffffff8516815260806020820152600061296f60808301866125ac565b905083604083015273ffffffffffffffffffffffffffffffffffffffff8316606083015295945050505050565b6000604082840312156129ae57600080fd5b6129b6611f9b565b6129bf83611f4f565b815260208301356129cf816120e8565b60208201529392505050565b600060208083850312156129ee57600080fd5b825167ffffffffffffffff811115612a0557600080fd5b8301601f81018513612a1657600080fd5b8051612a24612136826120c4565b81815260059190911b82018301908381019087831115612a4357600080fd5b928401925b82841015611de4578351612a5b816120e8565b82529284019290840190612a48565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156105d3576105d3612a6a565b818103818111156105d3576105d3612a6a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008251612b00818460208701611ece565b919091019291505056fea164736f6c6343000818000a", +} + +var RouterABI = RouterMetaData.ABI + +var RouterBin = RouterMetaData.Bin + +func DeployRouter(auth *bind.TransactOpts, backend bind.ContractBackend, wrappedNative common.Address, armProxy common.Address) (common.Address, *generated_zks.Transaction, *Router, error) { + parsed, err := RouterMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(RouterZKBin), backend, wrappedNative, armProxy) + contractReturn := &Router{address: address, abi: *parsed, RouterCaller: RouterCaller{contract: contractBind}, RouterTransactor: RouterTransactor{contract: contractBind}, RouterFilterer: RouterFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(RouterBin), backend, wrappedNative, armProxy) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &Router{address: address, abi: *parsed, RouterCaller: RouterCaller{contract: contract}, RouterTransactor: RouterTransactor{contract: contract}, RouterFilterer: RouterFilterer{contract: contract}}, nil +} + +type Router struct { + address common.Address + abi abi.ABI + RouterCaller + RouterTransactor + RouterFilterer +} + +type RouterCaller struct { + contract *bind.BoundContract +} + +type RouterTransactor struct { + contract *bind.BoundContract +} + +type RouterFilterer struct { + contract *bind.BoundContract +} + +type RouterSession struct { + Contract *Router + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type RouterCallerSession struct { + Contract *RouterCaller + CallOpts bind.CallOpts +} + +type RouterTransactorSession struct { + Contract *RouterTransactor + TransactOpts bind.TransactOpts +} + +type RouterRaw struct { + Contract *Router +} + +type RouterCallerRaw struct { + Contract *RouterCaller +} + +type RouterTransactorRaw struct { + Contract *RouterTransactor +} + +func NewRouter(address common.Address, backend bind.ContractBackend) (*Router, error) { + abi, err := abi.JSON(strings.NewReader(RouterABI)) + if err != nil { + return nil, err + } + contract, err := bindRouter(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &Router{address: address, abi: abi, RouterCaller: RouterCaller{contract: contract}, RouterTransactor: RouterTransactor{contract: contract}, RouterFilterer: RouterFilterer{contract: contract}}, nil +} + +func NewRouterCaller(address common.Address, caller bind.ContractCaller) (*RouterCaller, error) { + contract, err := bindRouter(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &RouterCaller{contract: contract}, nil +} + +func NewRouterTransactor(address common.Address, transactor bind.ContractTransactor) (*RouterTransactor, error) { + contract, err := bindRouter(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &RouterTransactor{contract: contract}, nil +} + +func NewRouterFilterer(address common.Address, filterer bind.ContractFilterer) (*RouterFilterer, error) { + contract, err := bindRouter(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &RouterFilterer{contract: contract}, nil +} + +func bindRouter(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := RouterMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_Router *RouterRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Router.Contract.RouterCaller.contract.Call(opts, result, method, params...) +} + +func (_Router *RouterRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Router.Contract.RouterTransactor.contract.Transfer(opts) +} + +func (_Router *RouterRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Router.Contract.RouterTransactor.contract.Transact(opts, method, params...) +} + +func (_Router *RouterCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _Router.Contract.contract.Call(opts, result, method, params...) +} + +func (_Router *RouterTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Router.Contract.contract.Transfer(opts) +} + +func (_Router *RouterTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _Router.Contract.contract.Transact(opts, method, params...) +} + +func (_Router *RouterCaller) MAXRETBYTES(opts *bind.CallOpts) (uint16, error) { + var out []interface{} + err := _Router.contract.Call(opts, &out, "MAX_RET_BYTES") + + if err != nil { + return *new(uint16), err + } + + out0 := *abi.ConvertType(out[0], new(uint16)).(*uint16) + + return out0, err + +} + +func (_Router *RouterSession) MAXRETBYTES() (uint16, error) { + return _Router.Contract.MAXRETBYTES(&_Router.CallOpts) +} + +func (_Router *RouterCallerSession) MAXRETBYTES() (uint16, error) { + return _Router.Contract.MAXRETBYTES(&_Router.CallOpts) +} + +func (_Router *RouterCaller) GetArmProxy(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _Router.contract.Call(opts, &out, "getArmProxy") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_Router *RouterSession) GetArmProxy() (common.Address, error) { + return _Router.Contract.GetArmProxy(&_Router.CallOpts) +} + +func (_Router *RouterCallerSession) GetArmProxy() (common.Address, error) { + return _Router.Contract.GetArmProxy(&_Router.CallOpts) +} + +func (_Router *RouterCaller) GetFee(opts *bind.CallOpts, destinationChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) { + var out []interface{} + err := _Router.contract.Call(opts, &out, "getFee", destinationChainSelector, message) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_Router *RouterSession) GetFee(destinationChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) { + return _Router.Contract.GetFee(&_Router.CallOpts, destinationChainSelector, message) +} + +func (_Router *RouterCallerSession) GetFee(destinationChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) { + return _Router.Contract.GetFee(&_Router.CallOpts, destinationChainSelector, message) +} + +func (_Router *RouterCaller) GetOffRamps(opts *bind.CallOpts) ([]RouterOffRamp, error) { + var out []interface{} + err := _Router.contract.Call(opts, &out, "getOffRamps") + + if err != nil { + return *new([]RouterOffRamp), err + } + + out0 := *abi.ConvertType(out[0], new([]RouterOffRamp)).(*[]RouterOffRamp) + + return out0, err + +} + +func (_Router *RouterSession) GetOffRamps() ([]RouterOffRamp, error) { + return _Router.Contract.GetOffRamps(&_Router.CallOpts) +} + +func (_Router *RouterCallerSession) GetOffRamps() ([]RouterOffRamp, error) { + return _Router.Contract.GetOffRamps(&_Router.CallOpts) +} + +func (_Router *RouterCaller) GetOnRamp(opts *bind.CallOpts, destChainSelector uint64) (common.Address, error) { + var out []interface{} + err := _Router.contract.Call(opts, &out, "getOnRamp", destChainSelector) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_Router *RouterSession) GetOnRamp(destChainSelector uint64) (common.Address, error) { + return _Router.Contract.GetOnRamp(&_Router.CallOpts, destChainSelector) +} + +func (_Router *RouterCallerSession) GetOnRamp(destChainSelector uint64) (common.Address, error) { + return _Router.Contract.GetOnRamp(&_Router.CallOpts, destChainSelector) +} + +func (_Router *RouterCaller) GetSupportedTokens(opts *bind.CallOpts, chainSelector uint64) ([]common.Address, error) { + var out []interface{} + err := _Router.contract.Call(opts, &out, "getSupportedTokens", chainSelector) + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +func (_Router *RouterSession) GetSupportedTokens(chainSelector uint64) ([]common.Address, error) { + return _Router.Contract.GetSupportedTokens(&_Router.CallOpts, chainSelector) +} + +func (_Router *RouterCallerSession) GetSupportedTokens(chainSelector uint64) ([]common.Address, error) { + return _Router.Contract.GetSupportedTokens(&_Router.CallOpts, chainSelector) +} + +func (_Router *RouterCaller) GetWrappedNative(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _Router.contract.Call(opts, &out, "getWrappedNative") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_Router *RouterSession) GetWrappedNative() (common.Address, error) { + return _Router.Contract.GetWrappedNative(&_Router.CallOpts) +} + +func (_Router *RouterCallerSession) GetWrappedNative() (common.Address, error) { + return _Router.Contract.GetWrappedNative(&_Router.CallOpts) +} + +func (_Router *RouterCaller) IsChainSupported(opts *bind.CallOpts, chainSelector uint64) (bool, error) { + var out []interface{} + err := _Router.contract.Call(opts, &out, "isChainSupported", chainSelector) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_Router *RouterSession) IsChainSupported(chainSelector uint64) (bool, error) { + return _Router.Contract.IsChainSupported(&_Router.CallOpts, chainSelector) +} + +func (_Router *RouterCallerSession) IsChainSupported(chainSelector uint64) (bool, error) { + return _Router.Contract.IsChainSupported(&_Router.CallOpts, chainSelector) +} + +func (_Router *RouterCaller) IsOffRamp(opts *bind.CallOpts, sourceChainSelector uint64, offRamp common.Address) (bool, error) { + var out []interface{} + err := _Router.contract.Call(opts, &out, "isOffRamp", sourceChainSelector, offRamp) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_Router *RouterSession) IsOffRamp(sourceChainSelector uint64, offRamp common.Address) (bool, error) { + return _Router.Contract.IsOffRamp(&_Router.CallOpts, sourceChainSelector, offRamp) +} + +func (_Router *RouterCallerSession) IsOffRamp(sourceChainSelector uint64, offRamp common.Address) (bool, error) { + return _Router.Contract.IsOffRamp(&_Router.CallOpts, sourceChainSelector, offRamp) +} + +func (_Router *RouterCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _Router.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 + +} + +func (_Router *RouterSession) Owner() (common.Address, error) { + return _Router.Contract.Owner(&_Router.CallOpts) +} + +func (_Router *RouterCallerSession) Owner() (common.Address, error) { + return _Router.Contract.Owner(&_Router.CallOpts) +} + +func (_Router *RouterCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _Router.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_Router *RouterSession) TypeAndVersion() (string, error) { + return _Router.Contract.TypeAndVersion(&_Router.CallOpts) +} + +func (_Router *RouterCallerSession) TypeAndVersion() (string, error) { + return _Router.Contract.TypeAndVersion(&_Router.CallOpts) +} + +func (_Router *RouterTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _Router.contract.Transact(opts, "acceptOwnership") +} + +func (_Router *RouterSession) AcceptOwnership() (*types.Transaction, error) { + return _Router.Contract.AcceptOwnership(&_Router.TransactOpts) +} + +func (_Router *RouterTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _Router.Contract.AcceptOwnership(&_Router.TransactOpts) +} + +func (_Router *RouterTransactor) ApplyRampUpdates(opts *bind.TransactOpts, onRampUpdates []RouterOnRamp, offRampRemoves []RouterOffRamp, offRampAdds []RouterOffRamp) (*types.Transaction, error) { + return _Router.contract.Transact(opts, "applyRampUpdates", onRampUpdates, offRampRemoves, offRampAdds) +} + +func (_Router *RouterSession) ApplyRampUpdates(onRampUpdates []RouterOnRamp, offRampRemoves []RouterOffRamp, offRampAdds []RouterOffRamp) (*types.Transaction, error) { + return _Router.Contract.ApplyRampUpdates(&_Router.TransactOpts, onRampUpdates, offRampRemoves, offRampAdds) +} + +func (_Router *RouterTransactorSession) ApplyRampUpdates(onRampUpdates []RouterOnRamp, offRampRemoves []RouterOffRamp, offRampAdds []RouterOffRamp) (*types.Transaction, error) { + return _Router.Contract.ApplyRampUpdates(&_Router.TransactOpts, onRampUpdates, offRampRemoves, offRampAdds) +} + +func (_Router *RouterTransactor) CcipSend(opts *bind.TransactOpts, destinationChainSelector uint64, message ClientEVM2AnyMessage) (*types.Transaction, error) { + return _Router.contract.Transact(opts, "ccipSend", destinationChainSelector, message) +} + +func (_Router *RouterSession) CcipSend(destinationChainSelector uint64, message ClientEVM2AnyMessage) (*types.Transaction, error) { + return _Router.Contract.CcipSend(&_Router.TransactOpts, destinationChainSelector, message) +} + +func (_Router *RouterTransactorSession) CcipSend(destinationChainSelector uint64, message ClientEVM2AnyMessage) (*types.Transaction, error) { + return _Router.Contract.CcipSend(&_Router.TransactOpts, destinationChainSelector, message) +} + +func (_Router *RouterTransactor) RecoverTokens(opts *bind.TransactOpts, tokenAddress common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _Router.contract.Transact(opts, "recoverTokens", tokenAddress, to, amount) +} + +func (_Router *RouterSession) RecoverTokens(tokenAddress common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _Router.Contract.RecoverTokens(&_Router.TransactOpts, tokenAddress, to, amount) +} + +func (_Router *RouterTransactorSession) RecoverTokens(tokenAddress common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) { + return _Router.Contract.RecoverTokens(&_Router.TransactOpts, tokenAddress, to, amount) +} + +func (_Router *RouterTransactor) RouteMessage(opts *bind.TransactOpts, message ClientAny2EVMMessage, gasForCallExactCheck uint16, gasLimit *big.Int, receiver common.Address) (*types.Transaction, error) { + return _Router.contract.Transact(opts, "routeMessage", message, gasForCallExactCheck, gasLimit, receiver) +} + +func (_Router *RouterSession) RouteMessage(message ClientAny2EVMMessage, gasForCallExactCheck uint16, gasLimit *big.Int, receiver common.Address) (*types.Transaction, error) { + return _Router.Contract.RouteMessage(&_Router.TransactOpts, message, gasForCallExactCheck, gasLimit, receiver) +} + +func (_Router *RouterTransactorSession) RouteMessage(message ClientAny2EVMMessage, gasForCallExactCheck uint16, gasLimit *big.Int, receiver common.Address) (*types.Transaction, error) { + return _Router.Contract.RouteMessage(&_Router.TransactOpts, message, gasForCallExactCheck, gasLimit, receiver) +} + +func (_Router *RouterTransactor) SetWrappedNative(opts *bind.TransactOpts, wrappedNative common.Address) (*types.Transaction, error) { + return _Router.contract.Transact(opts, "setWrappedNative", wrappedNative) +} + +func (_Router *RouterSession) SetWrappedNative(wrappedNative common.Address) (*types.Transaction, error) { + return _Router.Contract.SetWrappedNative(&_Router.TransactOpts, wrappedNative) +} + +func (_Router *RouterTransactorSession) SetWrappedNative(wrappedNative common.Address) (*types.Transaction, error) { + return _Router.Contract.SetWrappedNative(&_Router.TransactOpts, wrappedNative) +} + +func (_Router *RouterTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _Router.contract.Transact(opts, "transferOwnership", to) +} + +func (_Router *RouterSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _Router.Contract.TransferOwnership(&_Router.TransactOpts, to) +} + +func (_Router *RouterTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _Router.Contract.TransferOwnership(&_Router.TransactOpts, to) +} + +type RouterMessageExecutedIterator struct { + Event *RouterMessageExecuted + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RouterMessageExecutedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RouterMessageExecuted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RouterMessageExecuted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RouterMessageExecutedIterator) Error() error { + return it.fail +} + +func (it *RouterMessageExecutedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RouterMessageExecuted struct { + MessageId [32]byte + SourceChainSelector uint64 + OffRamp common.Address + CalldataHash [32]byte + Raw types.Log +} + +func (_Router *RouterFilterer) FilterMessageExecuted(opts *bind.FilterOpts) (*RouterMessageExecutedIterator, error) { + + logs, sub, err := _Router.contract.FilterLogs(opts, "MessageExecuted") + if err != nil { + return nil, err + } + return &RouterMessageExecutedIterator{contract: _Router.contract, event: "MessageExecuted", logs: logs, sub: sub}, nil +} + +func (_Router *RouterFilterer) WatchMessageExecuted(opts *bind.WatchOpts, sink chan<- *RouterMessageExecuted) (event.Subscription, error) { + + logs, sub, err := _Router.contract.WatchLogs(opts, "MessageExecuted") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RouterMessageExecuted) + if err := _Router.contract.UnpackLog(event, "MessageExecuted", 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 +} + +func (_Router *RouterFilterer) ParseMessageExecuted(log types.Log) (*RouterMessageExecuted, error) { + event := new(RouterMessageExecuted) + if err := _Router.contract.UnpackLog(event, "MessageExecuted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type RouterOffRampAddedIterator struct { + Event *RouterOffRampAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RouterOffRampAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RouterOffRampAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RouterOffRampAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RouterOffRampAddedIterator) Error() error { + return it.fail +} + +func (it *RouterOffRampAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RouterOffRampAdded struct { + SourceChainSelector uint64 + OffRamp common.Address + Raw types.Log +} + +func (_Router *RouterFilterer) FilterOffRampAdded(opts *bind.FilterOpts, sourceChainSelector []uint64) (*RouterOffRampAddedIterator, error) { + + var sourceChainSelectorRule []interface{} + for _, sourceChainSelectorItem := range sourceChainSelector { + sourceChainSelectorRule = append(sourceChainSelectorRule, sourceChainSelectorItem) + } + + logs, sub, err := _Router.contract.FilterLogs(opts, "OffRampAdded", sourceChainSelectorRule) + if err != nil { + return nil, err + } + return &RouterOffRampAddedIterator{contract: _Router.contract, event: "OffRampAdded", logs: logs, sub: sub}, nil +} + +func (_Router *RouterFilterer) WatchOffRampAdded(opts *bind.WatchOpts, sink chan<- *RouterOffRampAdded, sourceChainSelector []uint64) (event.Subscription, error) { + + var sourceChainSelectorRule []interface{} + for _, sourceChainSelectorItem := range sourceChainSelector { + sourceChainSelectorRule = append(sourceChainSelectorRule, sourceChainSelectorItem) + } + + logs, sub, err := _Router.contract.WatchLogs(opts, "OffRampAdded", sourceChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RouterOffRampAdded) + if err := _Router.contract.UnpackLog(event, "OffRampAdded", 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 +} + +func (_Router *RouterFilterer) ParseOffRampAdded(log types.Log) (*RouterOffRampAdded, error) { + event := new(RouterOffRampAdded) + if err := _Router.contract.UnpackLog(event, "OffRampAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type RouterOffRampRemovedIterator struct { + Event *RouterOffRampRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RouterOffRampRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RouterOffRampRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RouterOffRampRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RouterOffRampRemovedIterator) Error() error { + return it.fail +} + +func (it *RouterOffRampRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RouterOffRampRemoved struct { + SourceChainSelector uint64 + OffRamp common.Address + Raw types.Log +} + +func (_Router *RouterFilterer) FilterOffRampRemoved(opts *bind.FilterOpts, sourceChainSelector []uint64) (*RouterOffRampRemovedIterator, error) { + + var sourceChainSelectorRule []interface{} + for _, sourceChainSelectorItem := range sourceChainSelector { + sourceChainSelectorRule = append(sourceChainSelectorRule, sourceChainSelectorItem) + } + + logs, sub, err := _Router.contract.FilterLogs(opts, "OffRampRemoved", sourceChainSelectorRule) + if err != nil { + return nil, err + } + return &RouterOffRampRemovedIterator{contract: _Router.contract, event: "OffRampRemoved", logs: logs, sub: sub}, nil +} + +func (_Router *RouterFilterer) WatchOffRampRemoved(opts *bind.WatchOpts, sink chan<- *RouterOffRampRemoved, sourceChainSelector []uint64) (event.Subscription, error) { + + var sourceChainSelectorRule []interface{} + for _, sourceChainSelectorItem := range sourceChainSelector { + sourceChainSelectorRule = append(sourceChainSelectorRule, sourceChainSelectorItem) + } + + logs, sub, err := _Router.contract.WatchLogs(opts, "OffRampRemoved", sourceChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RouterOffRampRemoved) + if err := _Router.contract.UnpackLog(event, "OffRampRemoved", 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 +} + +func (_Router *RouterFilterer) ParseOffRampRemoved(log types.Log) (*RouterOffRampRemoved, error) { + event := new(RouterOffRampRemoved) + if err := _Router.contract.UnpackLog(event, "OffRampRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type RouterOnRampSetIterator struct { + Event *RouterOnRampSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RouterOnRampSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RouterOnRampSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RouterOnRampSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RouterOnRampSetIterator) Error() error { + return it.fail +} + +func (it *RouterOnRampSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RouterOnRampSet struct { + DestChainSelector uint64 + OnRamp common.Address + Raw types.Log +} + +func (_Router *RouterFilterer) FilterOnRampSet(opts *bind.FilterOpts, destChainSelector []uint64) (*RouterOnRampSetIterator, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + + logs, sub, err := _Router.contract.FilterLogs(opts, "OnRampSet", destChainSelectorRule) + if err != nil { + return nil, err + } + return &RouterOnRampSetIterator{contract: _Router.contract, event: "OnRampSet", logs: logs, sub: sub}, nil +} + +func (_Router *RouterFilterer) WatchOnRampSet(opts *bind.WatchOpts, sink chan<- *RouterOnRampSet, destChainSelector []uint64) (event.Subscription, error) { + + var destChainSelectorRule []interface{} + for _, destChainSelectorItem := range destChainSelector { + destChainSelectorRule = append(destChainSelectorRule, destChainSelectorItem) + } + + logs, sub, err := _Router.contract.WatchLogs(opts, "OnRampSet", destChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RouterOnRampSet) + if err := _Router.contract.UnpackLog(event, "OnRampSet", 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 +} + +func (_Router *RouterFilterer) ParseOnRampSet(log types.Log) (*RouterOnRampSet, error) { + event := new(RouterOnRampSet) + if err := _Router.contract.UnpackLog(event, "OnRampSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type RouterOwnershipTransferRequestedIterator struct { + Event *RouterOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RouterOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RouterOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RouterOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RouterOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *RouterOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RouterOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_Router *RouterFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RouterOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _Router.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &RouterOwnershipTransferRequestedIterator{contract: _Router.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_Router *RouterFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *RouterOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _Router.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RouterOwnershipTransferRequested) + if err := _Router.contract.UnpackLog(event, "OwnershipTransferRequested", 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 +} + +func (_Router *RouterFilterer) ParseOwnershipTransferRequested(log types.Log) (*RouterOwnershipTransferRequested, error) { + event := new(RouterOwnershipTransferRequested) + if err := _Router.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type RouterOwnershipTransferredIterator struct { + Event *RouterOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *RouterOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(RouterOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(RouterOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *RouterOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *RouterOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type RouterOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_Router *RouterFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RouterOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _Router.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &RouterOwnershipTransferredIterator{contract: _Router.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_Router *RouterFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *RouterOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _Router.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(RouterOwnershipTransferred) + if err := _Router.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 +} + +func (_Router *RouterFilterer) ParseOwnershipTransferred(log types.Log) (*RouterOwnershipTransferred, error) { + event := new(RouterOwnershipTransferred) + if err := _Router.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (_Router *Router) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _Router.abi.Events["MessageExecuted"].ID: + return _Router.ParseMessageExecuted(log) + case _Router.abi.Events["OffRampAdded"].ID: + return _Router.ParseOffRampAdded(log) + case _Router.abi.Events["OffRampRemoved"].ID: + return _Router.ParseOffRampRemoved(log) + case _Router.abi.Events["OnRampSet"].ID: + return _Router.ParseOnRampSet(log) + case _Router.abi.Events["OwnershipTransferRequested"].ID: + return _Router.ParseOwnershipTransferRequested(log) + case _Router.abi.Events["OwnershipTransferred"].ID: + return _Router.ParseOwnershipTransferred(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (RouterMessageExecuted) Topic() common.Hash { + return common.HexToHash("0x9b877de93ea9895756e337442c657f95a34fc68e7eb988bdfa693d5be83016b6") +} + +func (RouterOffRampAdded) Topic() common.Hash { + return common.HexToHash("0xa4bdf64ebdf3316320601a081916a75aa144bcef6c4beeb0e9fb1982cacc6b94") +} + +func (RouterOffRampRemoved) Topic() common.Hash { + return common.HexToHash("0xa823809efda3ba66c873364eec120fa0923d9fabda73bc97dd5663341e2d9bcb") +} + +func (RouterOnRampSet) Topic() common.Hash { + return common.HexToHash("0x1f7d0ec248b80e5c0dde0ee531c4fc8fdb6ce9a2b3d90f560c74acd6a7202f23") +} + +func (RouterOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (RouterOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (_Router *Router) Address() common.Address { + return _Router.address +} + +type RouterInterface interface { + MAXRETBYTES(opts *bind.CallOpts) (uint16, error) + + GetArmProxy(opts *bind.CallOpts) (common.Address, error) + + GetFee(opts *bind.CallOpts, destinationChainSelector uint64, message ClientEVM2AnyMessage) (*big.Int, error) + + GetOffRamps(opts *bind.CallOpts) ([]RouterOffRamp, error) + + GetOnRamp(opts *bind.CallOpts, destChainSelector uint64) (common.Address, error) + + GetSupportedTokens(opts *bind.CallOpts, chainSelector uint64) ([]common.Address, error) + + GetWrappedNative(opts *bind.CallOpts) (common.Address, error) + + IsChainSupported(opts *bind.CallOpts, chainSelector uint64) (bool, error) + + IsOffRamp(opts *bind.CallOpts, sourceChainSelector uint64, offRamp common.Address) (bool, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + ApplyRampUpdates(opts *bind.TransactOpts, onRampUpdates []RouterOnRamp, offRampRemoves []RouterOffRamp, offRampAdds []RouterOffRamp) (*types.Transaction, error) + + CcipSend(opts *bind.TransactOpts, destinationChainSelector uint64, message ClientEVM2AnyMessage) (*types.Transaction, error) + + RecoverTokens(opts *bind.TransactOpts, tokenAddress common.Address, to common.Address, amount *big.Int) (*types.Transaction, error) + + RouteMessage(opts *bind.TransactOpts, message ClientAny2EVMMessage, gasForCallExactCheck uint16, gasLimit *big.Int, receiver common.Address) (*types.Transaction, error) + + SetWrappedNative(opts *bind.TransactOpts, wrappedNative common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + FilterMessageExecuted(opts *bind.FilterOpts) (*RouterMessageExecutedIterator, error) + + WatchMessageExecuted(opts *bind.WatchOpts, sink chan<- *RouterMessageExecuted) (event.Subscription, error) + + ParseMessageExecuted(log types.Log) (*RouterMessageExecuted, error) + + FilterOffRampAdded(opts *bind.FilterOpts, sourceChainSelector []uint64) (*RouterOffRampAddedIterator, error) + + WatchOffRampAdded(opts *bind.WatchOpts, sink chan<- *RouterOffRampAdded, sourceChainSelector []uint64) (event.Subscription, error) + + ParseOffRampAdded(log types.Log) (*RouterOffRampAdded, error) + + FilterOffRampRemoved(opts *bind.FilterOpts, sourceChainSelector []uint64) (*RouterOffRampRemovedIterator, error) + + WatchOffRampRemoved(opts *bind.WatchOpts, sink chan<- *RouterOffRampRemoved, sourceChainSelector []uint64) (event.Subscription, error) + + ParseOffRampRemoved(log types.Log) (*RouterOffRampRemoved, error) + + FilterOnRampSet(opts *bind.FilterOpts, destChainSelector []uint64) (*RouterOnRampSetIterator, error) + + WatchOnRampSet(opts *bind.WatchOpts, sink chan<- *RouterOnRampSet, destChainSelector []uint64) (event.Subscription, error) + + ParseOnRampSet(log types.Log) (*RouterOnRampSet, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RouterOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *RouterOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*RouterOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*RouterOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *RouterOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*RouterOwnershipTransferred, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var RouterZKBin string = ("0x0004000000000002000d0000000000020000006003100270000003de0030019d000003de063001970003000000610355000200000001035500000001002001900000002d0000c13d0000008002000039000000400020043f000000040060008c000000530000413d000000000201043b000000e002200270000003e70020009c000000550000213d000003f40020009c000000920000a13d000003f50020009c0000030c0000a13d000003f60020009c000004b40000613d000003f70020009c0000047d0000613d000003f80020009c000000530000c13d000000440060008c000000530000413d0000000002000416000000000002004b000000530000c13d0000000402100370000000000202043b000004000020009c000000530000213d0000002401100370000000000101043b000003e10010009c000000530000213d000000a0022002100000041002200197000000000121019f0f720f250000040f000003020000013d0000000002000416000000000002004b000000530000c13d0000001f02600039000003df02200197000000a002200039000000400020043f0000001f0360018f000003e004600198000000a0024000390000003e0000613d000000a005000039000000000701034f000000007807043c0000000005850436000000000025004b0000003a0000c13d000000000003004b0000004b0000613d000000000141034f0000000303300210000000000402043300000000043401cf000000000434022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000141019f0000000000120435000000400060008c000000530000413d000000a00100043d000003e10010009c000000530000213d000000c00200043d000003e10020009c000002ce0000a13d000000000100001900000f7400010430000003e80020009c000001b60000a13d000003e90020009c0000032b0000a13d000003ea0020009c000004bb0000613d000003eb0020009c0000049a0000613d000003ec0020009c000000530000c13d000000240060008c000000530000413d0000000002000416000000000002004b000000530000c13d0000000401100370000000000101043b000b00000001001d000004000010009c000000530000213d0000000b01000029000000000010043f0000000301000039000000200010043f0000000001000414000003de0010009c000003de01008041000000c00110021000000401011001c700008010020000390f720f6d0000040f0000000100200190000000530000613d000000000101043b000000000101041a000003e100100198000005240000c13d000000400100043d000004070010009c000004f90000213d0000002002100039000000400020043f0000000000010435000000400200043d00000020030000390000000003320436000000000401043300000000004304350000004003200039000000000004004b000000900000613d000000000500001900000020011000390000000006010433000003e10660019700000000036304360000000105500039000000000045004b000000890000413d0000000001230049000004750000013d000003fb0020009c000002e20000213d000003fe0020009c000003e30000613d000003ff0020009c000000530000c13d000000440060008c000000530000413d0000000002000416000000000002004b000000530000c13d0000000402100370000000000202043b000004000020009c000000530000213d0000002403100370000000000303043b000004000030009c000000530000213d0000000004360049000004040040009c000000530000213d000000a40040008c000000530000413d0000012004000039000000400040043f0000000405300039000000000751034f000000000707043b000004000070009c000000530000213d00000000083700190000002307800039000000000067004b000000530000813d0000000409800039000000000791034f000000000707043b000004000070009c000004f90000213d0000001f0a700039000004400aa001970000003f0aa00039000004400aa001970000041c00a0009c000004f90000213d000001200aa000390000004000a0043f000001200070043f00000000087800190000002408800039000000000068004b000000530000213d0000002008900039000000000981034f000004400a7001980000001f0b70018f0000014008a00039000000d30000613d000001400c000039000000000d09034f00000000de0d043c000000000cec043600000000008c004b000000cf0000c13d00000000000b004b000000e00000613d0000000009a9034f000000030ab00210000000000b080433000000000bab01cf000000000bab022f000000000909043b000001000aa000890000000009a9022f0000000009a901cf0000000009b9019f000000000098043500000140077000390000000000070435000000800040043f0000002004500039000000000541034f000000000505043b000004000050009c000000530000213d00000000093500190000002305900039000000000065004b000000530000813d000000040a9000390000000005a1034f000000000505043b000004000050009c000004f90000213d0000001f0750003900000440077001970000003f077000390000044008700197000000400700043d0000000008870019000000000078004b000000000b000039000000010b004039000004000080009c000004f90000213d0000000100b00190000004f90000c13d000000400080043f000000000857043600000000095900190000002409900039000000000069004b000000530000213d0000002009a00039000000000a91034f000004400b5001980000001f0c50018f0000000009b80019000001100000613d000000000d0a034f000000000e08001900000000df0d043c000000000efe043600000000009e004b0000010c0000c13d00000000000c004b0000011d0000613d000000000aba034f000000030bc00210000000000c090433000000000cbc01cf000000000cbc022f000000000a0a043b000001000bb00089000000000aba022f000000000aba01cf000000000aca019f0000000000a9043500000000055800190000000000050435000000a00070043f0000002004400039000000000541034f000000000505043b000004000050009c000000530000213d00000000073500190000002305700039000000000065004b000000530000813d0000000405700039000000000551034f000000000905043b000004000090009c000004f90000213d00000005059002100000003f055000390000040608500197000000400500043d0000000008850019000000000058004b000000000a000039000000010a004039000004000080009c000004f90000213d0000000100a00190000004f90000c13d000000400080043f0000000000950435000000240770003900000006089002100000000008780019000000000068004b000000530000213d000000000009004b0000088f0000c13d000000c00050043f0000002004400039000000000541034f000000000505043b000003e10050009c000000530000213d000000e00050043f0000002004400039000000000441034f000000000404043b000004000040009c000000530000213d00000000073400190000002303700039000000000063004b000000000400001900000405040080410000040503300197000000000003004b00000000050000190000040505004041000004050030009c000000000504c019000000000005004b000000530000c13d0000000408700039000000000381034f000000000303043b000004000030009c000004f90000213d0000001f0430003900000440044001970000003f044000390000044005400197000000400400043d0000000005540019000000000045004b00000000090000390000000109004039000004000050009c000004f90000213d0000000100900190000004f90000c13d000000400050043f000000000534043600000000073700190000002407700039000000000067004b000000530000213d0000002006800039000000000661034f00000440073001980000001f0830018f0000000001750019000001800000613d000000000906034f000000000a050019000000009b09043c000000000aba043600000000001a004b0000017c0000c13d000000000008004b0000018d0000613d000000000676034f0000000307800210000000000801043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f000000000061043500000000013500190000000000010435000001000040043f000000e00100043d000003e100100198000001970000c13d0000000201000039000000000101041a000003e101100197000000e00010043f0000040001200197000a00000001001d000000000010043f0000000301000039000000200010043f0000000001000414000003de0010009c000003de01008041000000c00110021000000401011001c700008010020000390f720f6d0000040f0000000100200190000000530000613d000000400200043d000b00000002001d0000000403200039000000000101043b000000000101041a000003e102100198000008db0000c13d0000042e010000410000000b0200002900000000001204350000000a010000290000000000130435000003de0020009c000003de02008041000000400120021000000403011001c700000f7400010430000003ef0020009c000002f40000213d000003f20020009c000003f70000613d000003f30020009c000000530000c13d000000440060008c000000530000413d0000000402100370000000000202043b000b00000002001d000004000020009c000000530000213d0000002402100370000000000202043b000004000020009c000000530000213d0000000003260049000004040030009c000000530000213d000000a40030008c000000530000413d0000012003000039000000400030043f0000000404200039000000000541034f000000000505043b000004000050009c000000530000213d00000000072500190000002305700039000000000065004b000000530000813d0000000408700039000000000581034f000000000505043b000004000050009c000004f90000213d0000001f0950003900000440099001970000003f0990003900000440099001970000041c0090009c000004f90000213d0000012009900039000000400090043f000001200050043f00000000075700190000002407700039000000000067004b000000530000213d0000002007800039000000000871034f00000440095001980000001f0a50018f0000014007900039000001f50000613d000001400b000039000000000c08034f00000000cd0c043c000000000bdb043600000000007b004b000001f10000c13d00000000000a004b000002020000613d000000000898034f0000000309a00210000000000a070433000000000a9a01cf000000000a9a022f000000000808043b0000010009900089000000000898022f00000000089801cf0000000008a8019f000000000087043500000140055000390000000000050435000000800030043f0000002003400039000000000431034f000000000404043b000004000040009c000000530000213d00000000082400190000002304800039000000000064004b000000530000813d0000000409800039000000000491034f000000000404043b000004000040009c000004f90000213d0000001f0540003900000440055001970000003f055000390000044007500197000000400500043d0000000007750019000000000057004b000000000a000039000000010a004039000004000070009c000004f90000213d0000000100a00190000004f90000c13d000000400070043f000000000745043600000000084800190000002408800039000000000068004b000000530000213d0000002008900039000000000981034f000004400a4001980000001f0b40018f0000000008a70019000002320000613d000000000c09034f000000000d07001900000000ce0c043c000000000ded043600000000008d004b0000022e0000c13d00000000000b004b0000023f0000613d0000000009a9034f000000030ab00210000000000b080433000000000bab01cf000000000bab022f000000000909043b000001000aa000890000000009a9022f0000000009a901cf0000000009b9019f000000000098043500000000044700190000000000040435000000a00050043f0000002003300039000000000431034f000000000404043b000004000040009c000000530000213d00000000052400190000002304500039000000000064004b000000530000813d0000000404500039000000000441034f000000000804043b000004000080009c000004f90000213d00000005048002100000003f044000390000040607400197000000400400043d0000000007740019000000000047004b00000000090000390000000109004039000004000070009c000004f90000213d0000000100900190000004f90000c13d000000400070043f0000000000840435000000240550003900000006078002100000000007570019000000000067004b000000530000213d000000000008004b000008a90000c13d000000c00040043f0000002003300039000000000431034f000000000404043b000003e10040009c000000530000213d000000e00040043f0000002003300039000000000331034f000000000303043b000004000030009c000000530000213d00000000052300190000002302500039000000000062004b000000000300001900000405030080410000040502200197000000000002004b00000000040000190000040504004041000004050020009c000000000403c019000000000004004b000000530000c13d0000000407500039000000000271034f000000000202043b000004000020009c000004f90000213d0000001f0320003900000440033001970000003f033000390000044004300197000000400300043d0000000004430019000000000034004b00000000080000390000000108004039000004000040009c000004f90000213d0000000100800190000004f90000c13d000000400040043f000000000423043600000000052500190000002405500039000000000065004b000000530000213d0000002005700039000000000551034f00000440062001980000001f0720018f0000000001640019000002a20000613d000000000805034f0000000009040019000000008a08043c0000000009a90436000000000019004b0000029e0000c13d000000000007004b000002af0000613d000000000565034f0000000306700210000000000701043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f000000000051043500000000012400190000000000010435000001000030043f0000041d01000041000000400200043d000a00000002001d00000000001204350000041e0100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000003de0010009c000003de01008041000000c0011002100000041f011001c700008005020000390f720f6d0000040f000000010020019000000d0e0000613d000000000201043b0000000001000414000003e102200197000000040020008c000009440000c13d0000000103000031000000200030008c000000200400003900000000040340190000096e0000013d0000000003000411000000000003004b000003d10000c13d000000400100043d0000004402100039000003e4030000410000000000320435000000240210003900000018030000390000000000320435000003e5020000410000000000210435000000040210003900000020030000390000000000320435000003de0010009c000003de010080410000004001100210000003e6011001c700000f7400010430000003fc0020009c000003fc0000613d000003fd0020009c000000530000c13d0000000001000416000000000001004b000000530000c13d0000000001000412000d00000001001d000c00000000003d0000800501000039000000440300003900000000040004150000000d0440008a00000005044002100000041e020000410f720f4f0000040f000004e20000013d000003f00020009c000004320000613d000003f10020009c000000530000c13d000000240060008c000000530000413d0000000002000416000000000002004b000000530000c13d0000000401100370000000000101043b000004000010009c000000530000213d0f720ddb0000040f000000000001004b0000000001000039000000010100c039000000400200043d0000000000120435000003de0020009c000003de02008041000000400120021000000418011001c700000f730001042e000003f90020009c000004c00000613d000003fa0020009c000000530000c13d000000640060008c000000530000413d0000000002000416000000000002004b000000530000c13d0000000402100370000000000502043b000003e10050009c000000530000213d0000002402100370000000000402043b000003e10040009c000000530000213d000000000200041a000003e1022001970000000003000411000000000023004b000005090000c13d0000004402100370000000000302043b000000000004004b0000055c0000c13d0000043301000041000000800010043f000000840000043f000004340100004100000f7400010430000003ed0020009c000004d20000613d000003ee0020009c000000530000c13d000000640060008c000000530000413d0000000002000416000000000002004b000000530000c13d0000000402100370000000000202043b000004000020009c000000530000213d0000002303200039000000000063004b000000530000813d0000000403200039000000000331034f000000000303043b000700000003001d000004000030009c000000530000213d000600240020003d000000070200002900000006022002100000000602200029000000000062004b000000530000213d0000002402100370000000000202043b000004000020009c000000530000213d0000002303200039000000000063004b000000530000813d0000000403200039000000000331034f000000000303043b000300000003001d000004000030009c000000530000213d000200240020003d000000030200002900000006022002100000000202200029000000000062004b000000530000213d0000004402100370000000000202043b000004000020009c000000530000213d0000002303200039000000000063004b000000530000813d0000000403200039000000000131034f000000000101043b000500000001001d000004000010009c000000530000213d000400240020003d000000050100002900000006011002100000000401100029000000000061004b000000530000213d000000000100041a000003e1011001970000000002000411000000000012004b000005090000c13d000000070000006b000007b80000c13d000000030000006b000008030000c13d000000050000006b000004980000613d000b00000000001d0000037f0000013d0000000b020000290000000102200039000b00000002001d000000050020006c000004980000813d0000000b01000029000000060110021000000004011000290000000202000367000000000312034f000000000303043b000a00000003001d000004000030009c000000530000213d0000002001100039000000000112034f000000000101043b000900000001001d000003e10010009c000000530000213d0000000a01000029000000a001100210000004100110019700000009011001af000800000001001d000000000010043f0000000501000039000000200010043f0000000001000414000003de0010009c000003de01008041000000c00110021000000401011001c700008010020000390f720f6d0000040f0000000100200190000000530000613d000000000101043b000000000101041a000000000001004b0000037a0000c13d0000000403000039000000000103041a000004000010009c000004f90000213d0000000102100039000000000023041b000004160110009a0000000802000029000000000021041b000000000103041a000700000001001d000000000020043f0000000501000039000000200010043f0000000001000414000003de0010009c000003de01008041000000c00110021000000401011001c700008010020000390f720f6d0000040f0000000100200190000000530000613d000000000101043b0000000702000029000000000021041b000000400100043d00000009020000290000000000210435000003de0010009c000003de0100804100000040011002100000000002000414000003de0020009c000003de02008041000000c002200210000000000112019f0000040e011001c70000800d02000039000000020300003900000417040000410000000a050000290f720f680000040f00000001002001900000037a0000c13d000000530000013d000000000400041a000003e204400197000000000334019f000000000030041b0000000203000039000000000403041a000003e204400197000000000114019f000000000013041b000000800020043f000001400000044300000160002004430000002001000039000001000010044300000001010000390000012000100443000003e30100004100000f730001042e0000000001000416000000000001004b000000530000c13d000000c001000039000000400010043f0000000c01000039000000800010043f0000043e01000041000000a00010043f0000002001000039000000c00010043f0000008001000039000000e0020000390f720dc90000040f000000c00110008a000003de0010009c000003de0100804100000060011002100000043f011001c700000f730001042e0000000001000416000000000001004b000000530000c13d000000000100041a000004e20000013d000000840060008c000000530000413d0000000002000416000000000002004b000000530000c13d0000000402100370000000000202043b000b00000002001d000004000020009c000000530000213d0000000b0260006a000004040020009c000000530000213d000000a40020008c000000530000413d0000002402100370000000000202043b000a00000002001d0000ffff0020008c000000530000213d0000006402100370000000000202043b000900000002001d000003e10020009c000000530000213d0000004401100370000000000101043b000800000001001d0000041d01000041000000800010043f0000041e0100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000003de0010009c000003de01008041000000c0011002100000041f011001c700008005020000390f720f6d0000040f000000010020019000000d0e0000613d000000000201043b0000000001000414000003e102200197000000040020008c000005650000c13d0000000103000031000000200030008c000000200400003900000000040340190000058a0000013d0000000001000416000000000001004b000000530000c13d0000000402000039000000000102041a000000800010043f000000000020043f000000000001004b000004e60000c13d000000a001000039000000400010043f0000002002000039000000000400001900000005034002100000003f053000390000041b055001970000000005150019000004000050009c000004f90000213d000000400050043f0000000000410435000000000004004b000004580000613d000000a0042000390000000005000019000000400600043d0000040d0060009c000004f90000213d0000004007600039000000400070043f000000200760003900000000000704350000000000060435000000000754001900000000006704350000002005500039000000000035004b0000044b0000413d000000800300043d000000000003004b000005400000c13d000000400200043d00000020030000390000000004320436000000000301043300000000003404350000004004200039000000000003004b000004740000613d0000000005000019000000000602001900000000070400190000002001100039000000000401043300000000840404340000040004400197000000000047043500000060046000390000000006080433000003e106600197000000000064043500000040047000390000000105500039000000000035004b0000000006070019000004650000413d0000000001240049000003de0010009c000003de010080410000006001100210000003de0020009c000003de020080410000004002200210000000000121019f00000f730001042e0000000001000416000000000001004b000000530000c13d0000000101000039000000000201041a000003e1032001970000000006000411000000000036004b000004ff0000c13d000000000300041a000003e204300197000000000464019f000000000040041b000003e202200197000000000021041b0000000001000414000003e105300197000003de0010009c000003de01008041000000c00110021000000408011001c70000800d02000039000000030300003900000430040000410f720f680000040f0000000100200190000000530000613d000000000100001900000f730001042e000000240060008c000000530000413d0000000002000416000000000002004b000000530000c13d0000000401100370000000000601043b000003e10060009c000000530000213d000000000100041a000003e1011001970000000005000411000000000015004b000005090000c13d000000000056004b000005130000c13d000003e501000041000000800010043f0000002001000039000000840010043f0000001701000039000000a40010043f0000040a01000041000000c40010043f0000040b0100004100000f74000104300000000001000416000000000001004b000000530000c13d0000008401000039000000800010043f0000040c0100004100000f730001042e0000000001000416000000000001004b000000530000c13d0000000201000039000004e10000013d000000240060008c000000530000413d0000000002000416000000000002004b000000530000c13d0000000401100370000000000101043b000b00000001001d000003e10010009c000000530000213d0f720df00000040f0000000201000039000000000201041a000003e2022001970000000b022001af000000000021041b000000000100001900000f730001042e000000240060008c000000530000413d0000000002000416000000000002004b000000530000c13d0000000401100370000000000101043b000004000010009c000000530000213d000000000010043f0000000301000039000000200010043f000000400200003900000000010000190f720f3a0000040f000000000101041a000003e101100197000000800010043f0000040c0100004100000f730001042e000000a004000039000004190200004100000000030000190000000005040019000000000402041a000000000445043600000001022000390000000103300039000000000013004b000004e90000413d000000410150008a00000440021001970000041a0020009c000004f90000213d0000008001200039000000800400043d000000400010043f000004000040009c0000043f0000a13d0000041201000041000000000010043f0000004101000039000000040010043f000004030100004100000f7400010430000003e501000041000000800010043f0000002001000039000000840010043f0000001601000039000000a40010043f0000042f01000041000000c40010043f0000040b0100004100000f7400010430000003e501000041000000800010043f0000002001000039000000840010043f0000001601000039000000a40010043f0000043101000041000000c40010043f0000040b0100004100000f74000104300000000101000039000000000201041a000003e202200197000000000262019f000000000021041b0000000001000414000003de0010009c000003de01008041000000c00110021000000408011001c70000800d02000039000000030300003900000409040000410f720f680000040f0000000100200190000000530000613d000004980000013d0000000b01000029000000000010043f0000000301000039000000200010043f0000000001000414000003de0010009c000003de01008041000000c00110021000000401011001c700008010020000390f720f6d0000040f0000000100200190000000530000613d000000000101043b000000000201041a000000400a00043d000004020100004100000000001a04350000000401a000390000000b0300002900000000003104350000000001000414000003e102200197000000040020008c000005be0000c13d00000003010003670000000103000031000005d00000013d0000000003000019000000400400043d0000040d0040009c000004f90000213d0000000505300210000000a00550003900000000060504330000004007400039000000400070043f0000002007400039000003e1086001970000000000870435000000a006600270000004000660019700000000006404350000000006010433000000000036004b00000d890000a13d000000000525001900000000004504350000000004010433000000000034004b00000d890000a13d0000000103300039000000800400043d000000000043004b000005410000413d0000045b0000013d000000000005004b000006220000c13d0000000002000414000000040040008c000006590000c13d000000000161034f00000001020000390000000103000031000006680000013d000003de0010009c000003de01008041000000c00110021000000435011001c70f720f6d0000040f0000006003100270000003de03300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000000800a000039000005790000613d000000000801034f000000008908043c000000000a9a043600000000005a004b000005750000c13d000000000006004b000005860000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f000300000001035500000001002001900000062f0000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200030008c000000530000413d000000800200043d000000000002004b0000000003000039000000010300c039000000000032004b000000530000c13d000000000002004b0000069c0000c13d0000000b010000290000002401100039000700000001001d0000000201100367000000000101043b000004000010009c000000530000213d0000000002000411000503e10020019b000000a001100210000004100110019700000005011001af000000000010043f0000000501000039000000200010043f0000000001000414000003de0010009c000003de01008041000000c00110021000000401011001c700008010020000390f720f6d0000040f0000000100200190000000530000613d000000400200043d000600000002001d000000000101043b000000000101041a000000000001004b000006a10000c13d0000043d0100004100000006020000290000000000120435000003de0020009c000003de02008041000000400120021000000420011001c700000f7400010430000003de00a0009c000b0000000a001d000003de0300004100000000030a40190000004003300210000003de0010009c000003de01008041000000c001100210000000000131019f00000403011001c70f720f6d0000040f0000006003100270000103de0030019d000003de03300197000300000001035500000001002001900000063b0000613d0000000b0a00002900000440053001980000001f0630018f00000000045a0019000005da0000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000048004b000005d60000c13d000000000006004b000005e70000613d000000000151034f0000000305600210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000001f0130003900000440021001970000000001a20019000000000021004b00000000020000390000000102004039000004000010009c000004f90000213d0000000100200190000004f90000c13d000000400010043f000004040030009c000000530000213d000000200030008c000000530000413d00000000020a0433000004000020009c000000530000213d0000000003a300190000000002a200190000001f04200039000000000034004b0000000005000019000004050500804100000405044001970000040506300197000000000764013f000000000064004b00000000040000190000040504004041000004050070009c000000000405c019000000000004004b000000530000c13d0000000024020434000004000040009c000004f90000213d00000005054002100000003f0650003900000406066001970000000006160019000004000060009c000004f90000213d000000400060043f00000000004104350000000004250019000000000034004b000000530000213d000000000042004b000000800000813d00000000030100190000000025020434000003e10050009c000000530000213d00000020033000390000000000530435000000000042004b0000061a0000413d000000800000013d0000042a01000041000000a00010043f000000a40040043f000000c40030043f0000004401000039000000800010043f0000010001000039000000400010043f000000800200003900000000010500190f720e070000040f000000000100001900000f730001042e0000001f0530018f000003e006300198000000400200043d0000000004620019000006460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000006360000c13d000006460000013d0000001f0530018f000003e006300198000000400200043d0000000004620019000006460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000006420000c13d000000000005004b000006530000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000003de0020009c000003de020080410000004002200210000000000112019f00000f7400010430000003de0020009c000003de02008041000000c001200210000000000003004b000006600000c13d0000000002040019000006630000013d00000408011001c7000080090200003900000000050000190f720f680000040f00030000000103550000006003100270000103de0030019d000003de03300197000000000003004b000006740000c13d0000000100200190000004980000c13d000000400100043d00000432020000410000000000210435000003de0010009c000003de01008041000000400110021000000420011001c700000f7400010430000004000030009c000004f90000213d0000001f0530003900000440055001970000003f055000390000044006500197000000400500043d0000000006650019000000000056004b00000000070000390000000107004039000004000060009c000004f90000213d0000000100700190000004f90000c13d000000400060043f000000000635043600000440043001980000001f0530018f00000000034600190000068e0000613d000000000701034f000000007807043c0000000006860436000000000036004b0000068a0000c13d000000000005004b0000066a0000613d000000000141034f0000000304500210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000066a0000013d00000421020000410000000000210435000000400110021000000420011001c700000f7400010430000000060300002900000020023000390000043601000041000400000002001d00000000001204350000002401300039000000200200003900000000002104350000000704000029000300200040009200000002010003670000000302100360000000000202043b00000044033000390000000000230435000000000241034f000000000202043b000004000020009c000000530000213d0000000b030000290000000403300039000000060400002900000064044000390000000000240435000000000200003100000000043200490000001f0440008a00000007050000290000002006500039000000000561034f000000000705043b00000405087001970000040505400197000000000958013f000000000058004b00000000080000190000040508004041000000000047004b000000000a000019000004050a008041000004050090009c00000000080ac019000000000008004b000000530000c13d0000000008370019000000000781034f000000000707043b000004000070009c000000530000213d00000020088000390000000009720049000000000098004b000000000a000019000004050a0020410000040509900197000004050b800197000000000c9b013f00000000009b004b000000000900001900000405090040410000040500c0009c00000000090ac019000000000009004b000000530000c13d000000060d0000290000008409d00039000000a00a0000390000000000a90435000000e409d000390000000000790435000000000a81034f000004400b7001980000001f0c70018f0000010409d000390000000008b90019000006f30000613d000000000d0a034f000000000e09001900000000df0d043c000000000efe043600000000008e004b000006ef0000c13d00000000000c004b000007000000613d000000000aba034f000000030bc00210000000000c080433000000000cbc01cf000000000cbc022f000000000a0a043b000001000bb00089000000000aba022f000000000aba01cf000000000aca019f0000000000a80435000000000897001900000000000804350000002008600039000000000681034f000000000606043b000004050a600197000000000b5a013f00000000005a004b000000000a000019000004050a004041000000000046004b000000000c000019000004050c0080410000040500b0009c000000000a0cc01900000000000a004b000000530000c13d000000000a3600190000000006a1034f000000000606043b000004000060009c000000530000213d000000200aa00039000000000b6200490000000000ba004b000000000c000019000004050c002041000004050bb00197000004050da00197000000000ebd013f0000000000bd004b000000000b000019000004050b0040410000040500e0009c000000000b0cc01900000000000b004b000000530000c13d0000001f0770003900000440077001970000000009970019000000c007700039000000060b000029000000a40bb0003900000000007b0435000000000aa1034f0000000007690436000004400b6001980000001f0c60018f0000000009b70019000007380000613d000000000d0a034f000000000e07001900000000df0d043c000000000efe043600000000009e004b000007340000c13d00000000000c004b000007450000613d000000000aba034f000000030bc00210000000000c090433000000000cbc01cf000000000cbc022f000000000a0a043b000001000bb00089000000000aba022f000000000aba01cf000000000aca019f0000000000a90435000000000976001900000000000904350000002008800039000000000881034f000000000808043b0000040509800197000000000a59013f000000000059004b00000000050000190000040505004041000000000048004b000000000400001900000405040080410000040500a0009c000000000504c019000000000005004b000000530000c13d0000000004380019000000000341034f000000000303043b000004000030009c000000530000213d000000200440003900000006053002100000000005520049000000000054004b0000000008000019000004050800204100000405055001970000040509400197000000000a59013f000000000059004b000000000500001900000405050040410000040500a0009c000000000508c019000000000005004b000000530000c13d0000001f056000390000044005500197000000000575001900000006070000290000000006750049000000440660008a000000c40770003900000000006704350000000005350436000000000003004b000007850000613d0000000006000019000000000741034f000000000707043b000003e10070009c000000530000213d00000000077504360000002008400039000000000881034f000000000808043b0000000000870435000000400440003900000040055000390000000106600039000000000036004b000007770000413d00000006060000290000000003650049000000200430008a00000000004604350000001f0330003900000440033001970000000004630019000000000034004b00000000030000390000000103004039000200000004001d000004000040009c000004f90000213d0000000100300190000004f90000c13d0000000203000029000000400030043f000004370030009c000004f90000213d0000000205000029000000c003500039000000400030043f00000084040000390000000004450436000000000121034f000b00000004001d0000000002040019000000001401043c0000000002420436000000000032004b000007a00000c13d00000426010000410000000000100443000000090100002900000004001004430000000001000414000003de0010009c000003de01008041000000c00110021000000427011001c700008002020000390f720f6d0000040f000000010020019000000d0e0000613d000000000101043b000000000001004b000008c30000c13d0000043c01000041000000000010043f000004200100004100000f74000104300000000002000019000b00000002001d000000060120021000000006011000290000000002100079000004040020009c000000530000213d000000400020008c000000530000413d000000400400043d0000040d0040009c000004f90000213d0000004002400039000000400020043f0000000203000367000000000213034f000000000202043b000004000020009c000000530000213d00000000052404360000002001100039000000000113034f000000000301043b000003e10030009c000000530000213d0000000000350435000000000020043f0000000301000039000000200010043f0000000001000414000003de0010009c000003de01008041000000c00110021000000401011001c70000801002000039000a00000004001d000900000005001d000800000003001d0f720f6d0000040f000000080500002900000009040000290000000a030000290000000100200190000000530000613d000000000101043b000000000201041a000003e202200197000000000252019f000000000021041b00000000020304330000000001040433000003e101100197000000400300043d0000000000130435000003de0030009c000003de0300804100000040013002100000000003000414000003de0030009c000003de03008041000000c003300210000000000113019f0000040e011001c700000400052001970000800d0200003900000002030000390000040f040000410f720f680000040f0000000100200190000000530000613d0000000b020000290000000102200039000000070020006c000007b90000413d000003740000013d0000000002000019000900000002001d000000060120021000000002011000290000000202000367000000000312034f000000000303043b000b00000003001d000004000030009c000000530000213d0000002001100039000000000112034f000000000101043b000a00000001001d000003e10010009c000000530000213d0000000b01000029000000a00110021000000410011001970000000a011001af000800000001001d000000000010043f0000000501000039000000200010043f0000000001000414000003de0010009c000003de01008041000000c00110021000000401011001c700008010020000390f720f6d0000040f0000000100200190000000530000613d000000000101043b000000000301041a000000000003004b000008750000613d0000000401000039000000000201041a000000000002004b000008830000613d000000010130008a000000000023004b0000084a0000613d000000000012004b00000d890000a13d000004110130009a000004110220009a000000000202041a000000000021041b000000000020043f0000000501000039000000200010043f0000000001000414000003de0010009c000003de01008041000000c00110021000000401011001c70000801002000039000700000003001d0f720f6d0000040f0000000100200190000000530000613d000000000101043b0000000702000029000000000021041b0000000401000039000000000301041a000000000003004b000008890000613d000000010130008a000004110230009a000000000002041b0000000402000039000000000012041b0000000801000029000000000010043f0000000501000039000000200010043f0000000001000414000003de0010009c000003de01008041000000c00110021000000401011001c700008010020000390f720f6d0000040f0000000100200190000000530000613d000000000101043b000000000001041b000000400100043d0000000a020000290000000000210435000003de0010009c000003de0100804100000040011002100000000002000414000003de0020009c000003de02008041000000c002200210000000000112019f0000040e011001c70000800d02000039000000020300003900000413040000410000000b050000290f720f680000040f0000000100200190000000530000613d00000009020000290000000102200039000000030020006c000008040000413d000003760000013d000000400100043d00000024021000390000000a0300002900000000003204350000041402000041000000000021043500000004021000390000000b030000290000000000320435000003de0010009c000003de01008041000000400110021000000415011001c700000f74000104300000041201000041000000000010043f0000001101000039000000040010043f000004030100004100000f74000104300000041201000041000000000010043f0000003101000039000000040010043f000004030100004100000f74000104300000000009050019000000000a7600490000040400a0009c000000530000213d0000004000a0008c000000530000413d000000400a00043d0000040d00a0009c000004f90000213d000000400ba000390000004000b0043f000000000b71034f000000000b0b043b000003e100b0009c000000530000213d0000002009900039000000000bba0436000000200c700039000000000cc1034f000000000c0c043b0000000000cb04350000000000a904350000004007700039000000000087004b000008900000413d000001430000013d00000000080400190000000009560049000004040090009c000000530000213d000000400090008c000000530000413d000000400900043d0000040d0090009c000004f90000213d000000400a9000390000004000a0043f000000000a51034f000000000a0a043b000003e100a0009c000000530000213d0000002008800039000000000aa90436000000200b500039000000000bb1034f000000000b0b043b0000000000ba043500000000009804350000004005500039000000000075004b000008aa0000413d000002650000013d00000000010004140000000a0110006c000008ca0000813d0000043b01000041000000000010043f000004200100004100000f740001043000000006021002700000000001210049000000080010006c000008d70000a13d0000000001000414000100000001001d0000000901000029000000040010008c000009a40000c13d000800010000003d00000003010003670000000102000031000009ba0000013d0000043801000041000000000010043f000004200100004100000f740001043000000423010000410000000b0600002900000000001604350000000a0100002900000000001304350000002401600039000000400300003900000000003104350000004401600039000000800300043d000000a0040000390000000000410435000000e404600039000000005303043400000000003404350000010404600039000000000003004b000008f50000613d000000000600001900000000074600190000000008650019000000000808043300000000008704350000002006600039000000000036004b000008ee0000413d000000000534001900000000000504350000001f033000390000044003300197000000000334001900000000041300490000000b050000290000006405500039000000a00600043d000000000045043500000000540604340000000003430436000000000004004b0000090b0000613d000000000600001900000000073600190000000008650019000000000808043300000000008704350000002006600039000000000046004b000009040000413d000000000543001900000000000504350000001f044000390000044004400197000000000343001900000000051300490000000b040000290000008406400039000000c00400043d000000000056043500000000050404330000000003530436000000000005004b000009250000613d0000000006000019000000200440003900000000070404330000000087070434000003e10770019700000000077304360000000008080433000000000087043500000040033000390000000106600039000000000056004b0000091a0000413d000000e00400043d000003e1044001970000000b06000029000000a40560003900000000004504350000000001130049000000c404600039000001000500043d000000000014043500000000540504340000000001430436000000000004004b0000093a0000613d000000000300001900000000061300190000000007350019000000000707043300000000007604350000002003300039000000000043004b000009330000413d000000000341001900000000000304350000000003000414000000040020008c00000a350000c13d0000000103000031000000200030008c0000002004000039000000000403401900000a670000013d0000000a03000029000003de0030009c000003de030080410000004003300210000003de0010009c000003de01008041000000c001100210000000000131019f00000420011001c70f720f6d0000040f0000006003100270000003de03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000a057000290000095d0000613d000000000801034f0000000a09000029000000008a08043c0000000009a90436000000000059004b000009590000c13d000000000006004b0000096a0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000a7c0000613d0000001f01400039000000600210018f0000000a01200029000000000021004b00000000020000390000000102004039000004000010009c000004f90000213d0000000100200190000004f90000c13d000000400010043f000000200030008c000000530000413d0000000a020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b000000530000c13d000000000002004b00000a940000c13d0000000b010000290000040001100197000600000001001d000000000010043f0000000301000039000000200010043f0000000001000414000003de0010009c000003de01008041000000c00110021000000401011001c700008010020000390f720f6d0000040f0000000100200190000000530000613d000000400200043d000b00000002001d000000000101043b000000000101041a000703e10010019c00000a960000c13d0000042e010000410000000b030000290000000000130435000000040130003900000006020000290000000000210435000003de0030009c000003de03008041000000400130021000000403011001c700000f74000104300000000401000029000003de0010009c000003de01008041000000400110021000000006020000290000000002020433000003de0020009c000003de020080410000006002200210000000000112019f0000000802000029000003de0020009c000003de02008041000000c002200210000000000121019f00000009020000290f720f680000040f000800000002001d00030000000103550000006002100270000103de0020019d000003de02200197000000840020008c00000084020080390000000003000414000900000003001d000000020300002900000000002304350000001f0320018f000000e0042001900000000b02400029000009ca0000613d000000000501034f0000000b06000029000000005705043c0000000006760436000000000026004b000009c60000c13d000000000003004b000009d70000613d000000000141034f0000000303300210000000000402043300000000043401cf000000000434022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000141019f000000000012043500000007010000290000000201100367000000000101043b000a00000001001d000004000010009c000000530000213d0000000401000029000003de0010009c000003de01008041000000400110021000000006020000290000000002020433000003de0020009c000003de020080410000006002200210000000000112019f0000000002000414000003de0020009c000003de02008041000000c002200210000000000112019f00000408011001c700008010020000390f720f6d0000040f0000000100200190000000530000613d00000003020000290000000202200367000000000202043b000000000101043b000000400300043d0000006004300039000000000014043500000040013000390000000504000029000000000041043500000020013000390000000a0400002900000000004104350000000000230435000003de0030009c000003de0300804100000040013002100000000002000414000003de0020009c000003de02008041000000c002200210000000000112019f00000439011001c70000800d0200003900000001030000390000043a040000410f720f680000040f0000000100200190000000530000613d000000400100043d0000002002100039000000600300003900000000003204350000000802000029000000010220018f000000000021043500000002020000290000000002020433000000600310003900000000002304350000008003100039000000000002004b00000a240000613d000000000400001900000000053400190000000b06400029000000000606043300000000006504350000002004400039000000000024004b00000a1d0000413d0000000003320019000000000003043500000009040000290000000103400069000000400410003900000000003404350000001f0220003900000440022001970000008002200039000003de0020009c000003de020080410000006002200210000003de0010009c000003de010080410000004001100210000000000112019f00000f730001042e0000001f0440003900000440044001970000000b0500002900000000045400490000000001140019000003de0010009c000003de010080410000006001100210000003de0050009c000003de0400004100000000040540190000004004400210000000000141019f000003de0030009c000003de03008041000000c003300210000000000131019f0f720f6d0000040f0000006003100270000003de03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000b0570002900000a560000613d000000000801034f0000000b09000029000000008a08043c0000000009a90436000000000059004b00000a520000c13d000000000006004b00000a630000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000a880000613d0000001f01400039000000600210018f0000000b01200029000000000021004b00000000020000390000000102004039000004000010009c000004f90000213d0000000100200190000004f90000c13d000000400010043f000000200030008c000000530000413d0000000b0200002900000000020204330000000000210435000003de0010009c000003de01008041000000400110021000000418011001c700000f730001042e0000001f0530018f000003e006300198000000400200043d0000000004620019000006460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000a830000c13d000006460000013d0000001f0530018f000003e006300198000000400200043d0000000004620019000006460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000a8f0000c13d000006460000013d00000421020000410000066e0000013d000000e00100043d000003e10010019800000b080000c13d0000000201000039000000000101041a000003e101100197000000e00010043f0000000b05000029000000240150003900000040020000390000000000210435000004230100004100000000001504350000000401500039000000060200002900000000002104350000004401500039000000800200043d000000a0030000390000000000310435000000e403500039000000004202043400000000002304350000010403500039000000000002004b00000ab80000613d000000000500001900000000063500190000000007540019000000000707043300000000007604350000002005500039000000000025004b00000ab10000413d000000000423001900000000000404350000001f022000390000044002200197000000000223001900000000031200490000000b040000290000006404400039000000a00500043d000000000034043500000000430504340000000002320436000000000003004b00000ace0000613d000000000500001900000000062500190000000007540019000000000707043300000000007604350000002005500039000000000035004b00000ac70000413d000000000432001900000000000404350000001f033000390000044003300197000000000232001900000000041200490000000b030000290000008405300039000000c00300043d000000000045043500000000040304330000000002420436000000000004004b00000ae80000613d0000000005000019000000200330003900000000060304330000000076060434000003e10660019700000000066204360000000007070433000000000076043500000040022000390000000105500039000000000045004b00000add0000413d000000e00300043d000003e1033001970000000b05000029000000a40450003900000000003404350000000001120049000000c403500039000001000400043d000000000013043500000000430404340000000001320436000000000003004b00000afd0000613d000000000200001900000000051200190000000006240019000000000606043300000000006504350000002002200039000000000032004b00000af60000413d0000000002310019000000000002043500000000020004140000000704000029000000040040008c00000b760000c13d0000000103000031000000200030008c0000002004000039000000000403401900000ba90000013d0000000001000416000000000001004b00000bbe0000c13d0000000b05000029000000240150003900000040020000390000000000210435000004230100004100000000001504350000000401500039000000060200002900000000002104350000004401500039000000800200043d000000a0030000390000000000310435000000e403500039000000004202043400000000002304350000010403500039000000000002004b00000b260000613d000000000500001900000000063500190000000007540019000000000707043300000000007604350000002005500039000000000025004b00000b1f0000413d000000000423001900000000000404350000001f022000390000044002200197000000000223001900000000031200490000000b040000290000006404400039000000a00500043d000000000034043500000000430504340000000002320436000000000003004b00000b3c0000613d000000000500001900000000062500190000000007540019000000000707043300000000007604350000002005500039000000000035004b00000b350000413d000000000432001900000000000404350000001f033000390000044003300197000000000232001900000000041200490000000b030000290000008405300039000000c00300043d000000000045043500000000040304330000000002420436000000000004004b00000b560000613d0000000005000019000000200330003900000000060304330000000076060434000003e10660019700000000066204360000000007070433000000000076043500000040022000390000000105500039000000000045004b00000b4b0000413d000000e00300043d000003e1033001970000000b05000029000000a40450003900000000003404350000000001120049000000c403500039000001000400043d000000000013043500000000430404340000000001320436000000000003004b00000b6b0000613d000000000200001900000000051200190000000006240019000000000606043300000000006504350000002002200039000000000032004b00000b640000413d0000000002310019000000000002043500000000020004140000000704000029000000040040008c00000bc10000c13d0000000103000031000000200030008c0000002004000039000000000403401900000bf40000013d0000001f0330003900000440033001970000000b0400002900000000034300490000000001130019000003de0010009c000003de010080410000006001100210000003de0040009c000003de0300004100000000030440190000004003300210000000000131019f000003de0020009c000003de02008041000000c002200210000000000121019f00000007020000290f720f6d0000040f0000006003100270000003de03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000b0570002900000b980000613d000000000801034f0000000b09000029000000008a08043c0000000009a90436000000000059004b00000b940000c13d000000000006004b00000ba50000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000ccd0000613d0000001f01400039000000600210018f0000000b01200029000000000021004b00000000020000390000000102004039000004000010009c000004f90000213d0000000100200190000004f90000c13d000000400010043f000000200030008c000000530000413d0000000b0200002900000000020204330000000003000416000500000003001d000000000023004b00000ce50000813d0000042d020000410000066e0000013d00000422010000410000000b02000029000005b80000013d0000001f0330003900000440033001970000000b0400002900000000034300490000000001130019000003de0010009c000003de010080410000006001100210000003de0040009c000003de0300004100000000030440190000004003300210000000000131019f000003de0020009c000003de02008041000000c002200210000000000121019f00000007020000290f720f6d0000040f0000006003100270000003de03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000b0570002900000be30000613d000000000801034f0000000b09000029000000008a08043c0000000009a90436000000000059004b00000bdf0000c13d000000000006004b00000bf00000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000cd90000613d0000001f01400039000000600110018f0000000b02100029000000000012004b00000000010000390000000101004039000004000020009c000004f90000213d0000000100100190000004f90000c13d000000400020043f000000200030008c000000530000413d0000000b0100002900000000050104330000002003200039000000e00100043d000004240400004100000000004304350000004403200039000000070400002900000000004304350000000003000411000003e103300197000000240420003900000000003404350000006403200039000500000005001d000000000053043500000064030000390000000000320435000004250020009c000004f90000213d000000a003200039000000400030043f000003e1011001970f720e070000040f000000c00100043d0000000002010433000000000002004b00000d0f0000c13d0000000001000411000400000001001d000000400500043d0000002401500039000000800200003900000000002104350000042c0100004100000000001504350000000401500039000000060200002900000000002104350000008401500039000000800200043d000000a0030000390000000000310435000001240350003900000000420204340000000000230435000b00000005001d0000014403500039000000000002004b00000c3b0000613d000000000500001900000000063500190000000007540019000000000707043300000000007604350000002005500039000000000025004b00000c340000413d000000000423001900000000000404350000001f022000390000044002200197000000000223001900000000031200490000000b04000029000000a404400039000000a00500043d000000000034043500000000430504340000000002320436000000000003004b00000c510000613d000000000500001900000000062500190000000007540019000000000707043300000000007604350000002005500039000000000035004b00000c4a0000413d000000000432001900000000000404350000001f033000390000044003300197000000000232001900000000041200490000000b03000029000000c405300039000000c00300043d000000000045043500000000040304330000000002420436000000000004004b00000c6b0000613d0000000005000019000000200330003900000000060304330000000076060434000003e10660019700000000066204360000000007070433000000000076043500000040022000390000000105500039000000000045004b00000c600000413d000000e00300043d000003e1033001970000000b05000029000000e404500039000000000034043500000000011200490000010403500039000001000400043d000000000013043500000000430404340000000001320436000000000003004b00000c800000613d000000000200001900000000051200190000000006240019000000000606043300000000006504350000002002200039000000000032004b00000c790000413d000000000231001900000000000204350000000402000029000003e1022001970000000b050000290000006404500039000000000024043500000044025000390000000504000029000000000042043500000000020004140000000704000029000000040040008c0000093f0000613d0000001f0330003900000440033001970000000b0400002900000000034300490000000001130019000003de0010009c000003de010080410000006001100210000003de0040009c000003de0300004100000000030440190000004003300210000000000131019f000003de0020009c000003de02008041000000c002200210000000000112019f00000007020000290f720f680000040f0000006003100270000003de03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000b0570002900000cb00000613d000000000801034f0000000b09000029000000008a08043c0000000009a90436000000000059004b00000cac0000c13d000000000006004b00000cbd0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000a670000c13d0000001f0530018f000003e006300198000000400200043d0000000004620019000006460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000cc80000c13d000006460000013d0000001f0530018f000003e006300198000000400200043d0000000004620019000006460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000cd40000c13d000006460000013d0000001f0530018f000003e006300198000000400200043d0000000004620019000006460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000ce00000c13d000006460000013d000000e00100043d00000426020000410000000000200443000003e101100197000b00000001001d00000004001004430000000001000414000003de0010009c000003de01008041000000c00110021000000427011001c700008002020000390f720f6d0000040f000000010020019000000d0e0000613d000000000101043b000000000001004b000000530000613d000000400200043d0000042801000041000a00000002001d0000000001120436000900000001001d00000000010004140000000b02000029000000040020008c00000d9a0000613d0000000a02000029000003de0020009c000003de020080410000004002200210000003de0010009c000003de01008041000000c001100210000000000121019f0000000002000416000000000002004b00000d8f0000c13d00000420011001c70000000b0200002900000d940000013d000000000001042f0000000002000411000400000002001d000a00000000001d0000000a020000290000000502200210000900200020003d000000090110002900000000010104330000000001010433000000400400043d0000042b020000410000000000240435000000040240003900000006030000290000000000320435000003e102100197000b00000004001d0000002401400039000800000002001d000000000021043500000000010004140000000702000029000000040020008c00000d2c0000c13d0000000103000031000000200030008c0000002004000039000000000403401900000d560000013d0000000b02000029000003de0020009c000003de020080410000004002200210000003de0010009c000003de01008041000000c001100210000000000121019f00000415011001c700000007020000290f720f6d0000040f0000006003100270000003de03300197000000200030008c0000002004000039000000000403401900000020064001900000000b0560002900000d450000613d000000000701034f0000000b08000029000000007907043c0000000008980436000000000058004b00000d410000c13d0000001f0740019000000d520000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000db00000613d0000001f01400039000000600110018f0000000b02100029000000000012004b00000000010000390000000101004039000004000020009c000004f90000213d0000000100100190000004f90000c13d000000400020043f000000200030008c000000530000413d0000000b010000290000000001010433000003e10010009c000000530000213d000000c00300043d00000000040304330000000a0040006c00000d890000a13d000000090330002900000000030304330000002003300039000000000303043300000020042000390000042405000041000000000054043500000064042000390000000000340435000000440320003900000000001304350000000001000411000003e1011001970000002403200039000000000013043500000064010000390000000000120435000004250020009c000004f90000213d000000a001200039000000400010043f00000008010000290f720e070000040f0000000a03000029000a00010030003d000000c00100043d00000000020104330000000a0020006b00000d120000413d00000c1f0000013d0000041201000041000000000010043f0000003201000039000000040010043f000004030100004100000f740001043000000429011001c7000080090200003900000000030004160000000b0400002900000000050000190f720f680000040f00030000000103550000006003100270000103de0030019d000000010020019000000dbc0000613d0000000a01000029000004000010009c000004f90000213d0000000a04000029000000400040043f000000e00100043d0000042a0200004100000009030000290000000000230435000000440240003900000000030004160000000000320435000000240240003900000007030000290000000000320435000000440200003900000000002404350000041a0040009c000004f90000213d0000000a02000029000000800320003900000c160000013d0000001f0530018f000003e006300198000000400200043d0000000004620019000006460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000db70000c13d000006460000013d000003de033001970000001f0530018f000003e006300198000000400200043d0000000004620019000006460000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000dc40000c13d000006460000013d00000000430104340000000001320436000000000003004b00000dd50000613d000000000200001900000000052100190000000006240019000000000606043300000000006504350000002002200039000000000032004b00000dce0000413d000000000231001900000000000204350000001f0230003900000440022001970000000001210019000000000001042d0000040001100197000000000010043f0000000301000039000000200010043f0000000001000414000003de0010009c000003de01008041000000c00110021000000401011001c700008010020000390f720f6d0000040f000000010020019000000dee0000613d000000000101043b000000000101041a000003e1001001980000000001000039000000010100c039000000000001042d000000000100001900000f7400010430000000000100041a000003e1011001970000000002000411000000000012004b00000df60000c13d000000000001042d000000400100043d000000440210003900000431030000410000000000320435000000240210003900000016030000390000000000320435000003e5020000410000000000210435000000040210003900000020030000390000000000320435000003de0010009c000003de010080410000004001100210000003e6011001c700000f74000104300005000000000002000000400500043d000004410050009c00000eca0000813d000003e1061001970000004001500039000000400010043f000000200100003900000000041504360000044201000041000000000014043500000000230204340000000001000414000000040060008c00000e410000c13d000000010100003200000e7d0000613d000004000010009c00000eca0000213d0000001f0310003900000440033001970000003f033000390000044003300197000000400a00043d00000000033a00190000000000a3004b00000000040000390000000104004039000004000030009c00000eca0000213d000000010040019000000eca0000c13d000000400030043f00000000051a043600000440021001980000001f0310018f0000000001250019000000030400036700000e330000613d000000000604034f000000006706043c0000000005750436000000000015004b00000e2f0000c13d000000000003004b00000e7e0000613d000000000224034f0000000303300210000000000401043300000000043401cf000000000434022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000242019f000000000021043500000e7e0000013d000100000005001d000300000004001d000003de0030009c000003de030080410000006003300210000003de0020009c000003de020080410000004002200210000000000223019f000003de0010009c000003de01008041000000c001100210000000000112019f000200000006001d00000000020600190f720f680000040f00030000000103550000006003100270000103de0030019d000003de0430019800000e950000613d0000001f03400039000003df033001970000003f033000390000044303300197000000400a00043d00000000033a00190000000000a3004b00000000050000390000000105004039000004000030009c00000eca0000213d000000010050019000000eca0000c13d000000400030043f0000001f0540018f00000000034a0436000003e006400198000000000463001900000e6f0000613d000000000701034f0000000008030019000000007907043c0000000008980436000000000048004b00000e6b0000c13d000000000005004b00000e970000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f000000000014043500000e970000013d000000600a0000390000000002000415000000050220008a000000050220021000000000010a0433000000000001004b00000e9f0000c13d00030000000a001d00000426010000410000000000100443000000040100003900000004001004430000000001000414000003de0010009c000003de01008041000000c00110021000000427011001c700008002020000390f720f6d0000040f000000010020019000000f0b0000613d0000000002000415000000050220008a00000eb20000013d000000600a000039000000800300003900000000010a0433000000010020019000000ee60000613d0000000002000415000000040220008a0000000502200210000000000001004b00000ea20000613d000000050220027000000000020a001f00000ebc0000013d00030000000a001d00000426010000410000000000100443000000020100002900000004001004430000000001000414000003de0010009c000003de01008041000000c00110021000000427011001c700008002020000390f720f6d0000040f000000010020019000000f0b0000613d0000000002000415000000040220008a0000000502200210000000000101043b000000000001004b000000030a00002900000f0c0000613d00000000010a0433000000050220027000000000020a001f000000000001004b00000ec90000613d000004040010009c00000ed00000213d0000001f0010008c00000ed00000a13d0000002001a000390000000001010433000000000001004b0000000002000039000000010200c039000000000021004b00000ed00000c13d000000000001004b00000ed20000613d000000000001042d0000041201000041000000000010043f0000004101000039000000040010043f000004030100004100000f7400010430000000000100001900000f7400010430000000400100043d00000064021000390000044403000041000000000032043500000044021000390000044503000041000000000032043500000024021000390000002a030000390000000000320435000003e5020000410000000000210435000000040210003900000020030000390000000000320435000003de0010009c000003de01008041000000400110021000000446011001c700000f7400010430000000000001004b00000f1d0000c13d000000400100043d000003e502000041000000000021043500000004021000390000002003000039000000000032043500000001020000290000000002020433000000240310003900000000002304350000004403100039000000000002004b000000030700002900000efe0000613d000000000400001900000000053400190000000006740019000000000606043300000000006504350000002004400039000000000024004b00000ef70000413d0000001f042000390000044004400197000000000223001900000000000204350000004402400039000003de0020009c000003de020080410000006002200210000003de0010009c000003de010080410000004001100210000000000112019f00000f7400010430000000000001042f000000400100043d00000044021000390000044703000041000000000032043500000024021000390000001d030000390000000000320435000003e5020000410000000000210435000000040210003900000020030000390000000000320435000003de0010009c000003de010080410000004001100210000003e6011001c700000f7400010430000003de0030009c000003de030080410000004002300210000003de0010009c000003de010080410000006001100210000000000121019f00000f7400010430000000000010043f0000000501000039000000200010043f0000000001000414000003de0010009c000003de01008041000000c00110021000000401011001c700008010020000390f720f6d0000040f000000010020019000000f370000613d000000000101043b000000000101041a000000000001004b0000000001000039000000010100c039000000000001042d000000000100001900000f7400010430000000000001042f000003de0010009c000003de010080410000004001100210000003de0020009c000003de020080410000006002200210000000000112019f0000000002000414000003de0020009c000003de02008041000000c002200210000000000112019f00000408011001c700008010020000390f720f6d0000040f000000010020019000000f4d0000613d000000000101043b000000000001042d000000000100001900000f740001043000000000050100190000000000200443000000040100003900000005024002700000000002020031000000000121043a0000002004400039000000000031004b00000f520000413d000003de0030009c000003de0300804100000060013002100000000002000414000003de0020009c000003de02008041000000c002200210000000000112019f00000448011001c700000000020500190f720f6d0000040f000000010020019000000f670000613d000000000101043b000000000001042d000000000001042f00000f6b002104210000000102000039000000000001042d0000000002000019000000000001042d00000f70002104230000000102000039000000000001042d0000000002000019000000000001042d00000f720000043200000f730001042e00000f740001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000020000000000000000000000000000008000000100000000000000000043616e6e6f7420736574206f776e657220746f207a65726f000000000000000008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000000000008da5cb5a00000000000000000000000000000000000000000000000000000000a8d87a3a00000000000000000000000000000000000000000000000000000000e861e90600000000000000000000000000000000000000000000000000000000e861e90700000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000fbca3b7400000000000000000000000000000000000000000000000000000000a8d87a3b00000000000000000000000000000000000000000000000000000000da5fcac800000000000000000000000000000000000000000000000000000000a40e69c600000000000000000000000000000000000000000000000000000000a40e69c700000000000000000000000000000000000000000000000000000000a48a9058000000000000000000000000000000000000000000000000000000008da5cb5b0000000000000000000000000000000000000000000000000000000096f4e9f90000000000000000000000000000000000000000000000000000000052cb60c900000000000000000000000000000000000000000000000000000000787350e200000000000000000000000000000000000000000000000000000000787350e30000000000000000000000000000000000000000000000000000000079ba50970000000000000000000000000000000000000000000000000000000083826b2b0000000000000000000000000000000000000000000000000000000052cb60ca000000000000000000000000000000000000000000000000000000005f3e849f000000000000000000000000000000000000000000000000000000003cf97982000000000000000000000000000000000000000000000000000000003cf97983000000000000000000000000000000000000000000000000000000005246492f00000000000000000000000000000000000000000000000000000000181f5a770000000000000000000000000000000000000000000000000000000020487ded000000000000000000000000000000000000000000000000ffffffffffffffff0200000000000000000000000000000000000040000000000000000000000000fbca3b740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffffdf0200000000000000000000000000000000000000000000000000000000000000ed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae127843616e6e6f74207472616e7366657220746f2073656c6600000000000000000000000000000000000000000000000000000000640000008000000000000000000000000000000000000000000000000000000020000000800000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf02000000000000000000000000000000000000200000000000000000000000001f7d0ec248b80e5c0dde0ee531c4fc8fdb6ce9a2b3d90f560c74acd6a7202f2300000000ffffffffffffffff000000000000000000000000000000000000000075ca53043ea007e5c65182cbb028f60d7179ff4b55739a3949b401801c942e664e487b7100000000000000000000000000000000000000000000000000000000a823809efda3ba66c873364eec120fa0923d9fabda73bc97dd5663341e2d9bcb4964779000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004400000000000000000000000075ca53043ea007e5c65182cbb028f60d7179ff4b55739a3949b401801c942e65a4bdf64ebdf3316320601a081916a75aa144bcef6c4beeb0e9fb1982cacc6b9400000000000000000000000000000000000000200000000000000000000000008a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b000000000000000000000000000000000000000000000000ffffffffffffff7f00000000000000000000000000000000000000000000003fffffffffffffffe0000000000000000000000000000000000000000000000000fffffffffffffedf397796f700000000000000000000000000000000000000000000000000000000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e02000002000000000000000000000000000000440000000000000000000000000000000000000000000000000000000000000004000000000000000000000000c1483715000000000000000000000000000000000000000000000000000000001841b4e10000000000000000000000000000000000000000000000000000000020487ded0000000000000000000000000000000000000000000000000000000023b872dd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5f1806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000d0e30db0000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000004000000000000000000000000a9059cbb0000000000000000000000000000000000000000000000000000000048a98aa400000000000000000000000000000000000000000000000000000000df0aa9e90000000000000000000000000000000000000000000000000000000007da6ee600000000000000000000000000000000000000000000000000000000ae236d9c000000000000000000000000000000000000000000000000000000004d7573742062652070726f706f736564206f776e6572000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e04f6e6c792063616c6c61626c65206279206f776e657200000000000000000000e417b80b0000000000000000000000000000000000000000000000000000000026a78f8f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000800000000000000000000000000000000000000000000000000000000400000080000000000000000085572ffb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff3f37c3be290000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000800000000000000000000000009b877de93ea9895756e337442c657f95a34fc68e7eb988bdfa693d5be83016b6afa32a2c000000000000000000000000000000000000000000000000000000000c3b563c00000000000000000000000000000000000000000000000000000000d2316ede00000000000000000000000000000000000000000000000000000000526f7574657220312e322e3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffffc05361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656400000000000000000000000000000000000000000000000000000003ffffffe06f742073756363656564000000000000000000000000000000000000000000005361666545524332303a204552433230206f7065726174696f6e20646964206e0000000000000000000000000000000000000084000000000000000000000000416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000000200000200000000000000000000000000000000000000000000000000000000") diff --git a/core/gethwrappers/ccip/generated_zks/token_admin_registry/token_admin_registry.go b/core/gethwrappers/ccip/generated_zks/token_admin_registry/token_admin_registry.go new file mode 100644 index 00000000000..11ab9389ba3 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/token_admin_registry/token_admin_registry.go @@ -0,0 +1,1530 @@ +package token_admin_registry + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type TokenAdminRegistryTokenConfig struct { + Administrator common.Address + PendingAdministrator common.Address + TokenPool common.Address +} + +var TokenAdminRegistryMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"AlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotTransferToSelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"InvalidTokenPoolToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeProposedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"OnlyAdministrator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"OnlyPendingAdministrator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"OnlyRegistryModuleOrOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"currentAdmin\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdministratorTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdministratorTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousPool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newPool\",\"type\":\"address\"}],\"name\":\"PoolSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"RegistryModuleAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"RegistryModuleRemoved\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"name\":\"acceptAdminRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"addRegistryModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"startIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxCount\",\"type\":\"uint64\"}],\"name\":\"getAllConfiguredTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"getPools\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"administrator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pendingAdministrator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenPool\",\"type\":\"address\"}],\"internalType\":\"structTokenAdminRegistry.TokenConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"administrator\",\"type\":\"address\"}],\"name\":\"isAdministrator\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"isRegistryModule\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"administrator\",\"type\":\"address\"}],\"name\":\"proposeAdministrator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"removeRegistryModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"setPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"transferAdminRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b503360008161003257604051639b15e16f60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03848116919091179091558116156100625761006281610069565b50506100e2565b336001600160a01b0382160361009257604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6113b9806100f16000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80637d3f255211610097578063cb67e3b111610066578063cb67e3b1146102bc578063ddadfa8e14610374578063e677ae3714610387578063f2fde38b1461039a57600080fd5b80637d3f2552146101e05780638da5cb5b14610203578063bbe4f6db14610242578063c1af6e031461027f57600080fd5b80634e847fc7116100d35780634e847fc7146101925780635e63547a146101a557806372d64a81146101c557806379ba5097146101d857600080fd5b806310cbcf1814610105578063156194da1461011a578063181f5a771461012d5780633dc457721461017f575b600080fd5b6101186101133660046110dc565b6103ad565b005b6101186101283660046110dc565b61040a565b6101696040518060400160405280601881526020017f546f6b656e41646d696e526567697374727920312e352e30000000000000000081525081565b60405161017691906110f7565b60405180910390f35b61011861018d3660046110dc565b61050f565b6101186101a0366004611164565b610573565b6101b86101b3366004611197565b6107d3565b604051610176919061120c565b6101b86101d336600461127e565b6108cc565b6101186109e2565b6101f36101ee3660046110dc565b610ab0565b6040519015158152602001610176565b60015473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610176565b61021d6102503660046110dc565b73ffffffffffffffffffffffffffffffffffffffff908116600090815260026020819052604090912001541690565b6101f361028d366004611164565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260026020526040902054821691161490565b6103356102ca3660046110dc565b60408051606080820183526000808352602080840182905292840181905273ffffffffffffffffffffffffffffffffffffffff948516815260028084529084902084519283018552805486168352600181015486169383019390935291909101549092169082015290565b60408051825173ffffffffffffffffffffffffffffffffffffffff90811682526020808501518216908301529282015190921690820152606001610176565b610118610382366004611164565b610abd565b610118610395366004611164565b610bc7565b6101186103a83660046110dc565b610d8f565b6103b5610da0565b6103c0600582610df3565b156104075760405173ffffffffffffffffffffffffffffffffffffffff8216907f93eaa26dcb9275e56bacb1d33fdbf402262da6f0f4baf2a6e2cd154b73f387f890600090a25b50565b73ffffffffffffffffffffffffffffffffffffffff808216600090815260026020526040902060018101549091163314610493576040517f3edffe7500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201526044015b60405180910390fd5b8054337fffffffffffffffffffffffff00000000000000000000000000000000000000009182168117835560018301805490921690915560405173ffffffffffffffffffffffffffffffffffffffff8416907f399b55200f7f639a63d76efe3dcfa9156ce367058d6b673041b84a628885f5a790600090a35050565b610517610da0565b610522600582610e1c565b156104075760405173ffffffffffffffffffffffffffffffffffffffff821681527f3cabf004338366bfeaeb610ad827cb58d16b588017c509501f2c97c83caae7b29060200160405180910390a150565b73ffffffffffffffffffffffffffffffffffffffff80831660009081526002602052604090205483911633146105f3576040517fed5d85b500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8216602482015260440161048a565b73ffffffffffffffffffffffffffffffffffffffff8216158015906106a557506040517f240028e800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015283169063240028e890602401602060405180830381865afa15801561067f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a391906112a8565b155b156106f4576040517f962b60e600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260240161048a565b73ffffffffffffffffffffffffffffffffffffffff808416600090815260026020819052604090912090810180548584167fffffffffffffffffffffffff0000000000000000000000000000000000000000821681179092559192919091169081146107cc578373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f754449ec3aff3bd528bfce43ae9319c4a381b67fcd1d20097b3b24dacaecc35d60405160405180910390a45b5050505050565b606060008267ffffffffffffffff8111156107f0576107f06112ca565b604051908082528060200260200182016040528015610819578160200160208202803683370190505b50905060005b838110156108c2576002600086868481811061083d5761083d6112f9565b905060200201602081019061085291906110dc565b73ffffffffffffffffffffffffffffffffffffffff90811682526020820192909252604001600020600201548351911690839083908110610895576108956112f9565b73ffffffffffffffffffffffffffffffffffffffff9092166020928302919091019091015260010161081f565b5090505b92915050565b606060006108da6003610e3e565b9050808467ffffffffffffffff16106108f357506108c6565b67ffffffffffffffff80841690829061090e90871683611357565b111561092b5761092867ffffffffffffffff86168361136a565b90505b8067ffffffffffffffff811115610944576109446112ca565b60405190808252806020026020018201604052801561096d578160200160208202803683370190505b50925060005b818110156109d95761099a6109928267ffffffffffffffff8916611357565b600390610e48565b8482815181106109ac576109ac6112f9565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152600101610973565b50505092915050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a33576040517f02b543c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000008082163390811790935560008054909116815560405173ffffffffffffffffffffffffffffffffffffffff909216929183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b60006108c6600583610e54565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600260205260409020548391163314610b3d576040517fed5d85b500000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff8216602482015260440161048a565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152600260205260408082206001810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001695881695861790559051909392339290917fc54c3051ff16e63bb9203214432372aca006c589e3653619b577a3265675b7169190a450505050565b610bd033610ab0565b158015610bf5575060015473ffffffffffffffffffffffffffffffffffffffff163314155b15610c2e576040517f51ca1ec300000000000000000000000000000000000000000000000000000000815233600482015260240161048a565b73ffffffffffffffffffffffffffffffffffffffff8116610c7b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600260205260409020805490911615610cf5576040517f45ed80e900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260240161048a565b6001810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055610d42600384610e1c565b5060405173ffffffffffffffffffffffffffffffffffffffff808416916000918616907fc54c3051ff16e63bb9203214432372aca006c589e3653619b577a3265675b716908390a4505050565b610d97610da0565b61040781610e83565b60015473ffffffffffffffffffffffffffffffffffffffff163314610df1576040517f2b5c74de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610e158373ffffffffffffffffffffffffffffffffffffffff8416610f47565b9392505050565b6000610e158373ffffffffffffffffffffffffffffffffffffffff841661103a565b60006108c6825490565b6000610e158383611089565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610e15565b3373ffffffffffffffffffffffffffffffffffffffff821603610ed2576040517fdad89dca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008181526001830160205260408120548015611030576000610f6b60018361136a565b8554909150600090610f7f9060019061136a565b9050808214610fe4576000866000018281548110610f9f57610f9f6112f9565b9060005260206000200154905080876000018481548110610fc257610fc26112f9565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080610ff557610ff561137d565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506108c6565b60009150506108c6565b6000818152600183016020526040812054611081575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556108c6565b5060006108c6565b60008260000182815481106110a0576110a06112f9565b9060005260206000200154905092915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146110d757600080fd5b919050565b6000602082840312156110ee57600080fd5b610e15826110b3565b60006020808352835180602085015260005b8181101561112557858101830151858201604001528201611109565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b6000806040838503121561117757600080fd5b611180836110b3565b915061118e602084016110b3565b90509250929050565b600080602083850312156111aa57600080fd5b823567ffffffffffffffff808211156111c257600080fd5b818501915085601f8301126111d657600080fd5b8135818111156111e557600080fd5b8660208260051b85010111156111fa57600080fd5b60209290920196919550909350505050565b6020808252825182820181905260009190848201906040850190845b8181101561125a57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101611228565b50909695505050505050565b803567ffffffffffffffff811681146110d757600080fd5b6000806040838503121561129157600080fd5b61129a83611266565b915061118e60208401611266565b6000602082840312156112ba57600080fd5b81518015158114610e1557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156108c6576108c6611328565b818103818111156108c6576108c6611328565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", +} + +var TokenAdminRegistryABI = TokenAdminRegistryMetaData.ABI + +var TokenAdminRegistryBin = TokenAdminRegistryMetaData.Bin + +func DeployTokenAdminRegistry(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *generated_zks.Transaction, *TokenAdminRegistry, error) { + parsed, err := TokenAdminRegistryMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(TokenAdminRegistryZKBin), backend) + contractReturn := &TokenAdminRegistry{address: address, abi: *parsed, TokenAdminRegistryCaller: TokenAdminRegistryCaller{contract: contractBind}, TokenAdminRegistryTransactor: TokenAdminRegistryTransactor{contract: contractBind}, TokenAdminRegistryFilterer: TokenAdminRegistryFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(TokenAdminRegistryBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &TokenAdminRegistry{address: address, abi: *parsed, TokenAdminRegistryCaller: TokenAdminRegistryCaller{contract: contract}, TokenAdminRegistryTransactor: TokenAdminRegistryTransactor{contract: contract}, TokenAdminRegistryFilterer: TokenAdminRegistryFilterer{contract: contract}}, nil +} + +type TokenAdminRegistry struct { + address common.Address + abi abi.ABI + TokenAdminRegistryCaller + TokenAdminRegistryTransactor + TokenAdminRegistryFilterer +} + +type TokenAdminRegistryCaller struct { + contract *bind.BoundContract +} + +type TokenAdminRegistryTransactor struct { + contract *bind.BoundContract +} + +type TokenAdminRegistryFilterer struct { + contract *bind.BoundContract +} + +type TokenAdminRegistrySession struct { + Contract *TokenAdminRegistry + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type TokenAdminRegistryCallerSession struct { + Contract *TokenAdminRegistryCaller + CallOpts bind.CallOpts +} + +type TokenAdminRegistryTransactorSession struct { + Contract *TokenAdminRegistryTransactor + TransactOpts bind.TransactOpts +} + +type TokenAdminRegistryRaw struct { + Contract *TokenAdminRegistry +} + +type TokenAdminRegistryCallerRaw struct { + Contract *TokenAdminRegistryCaller +} + +type TokenAdminRegistryTransactorRaw struct { + Contract *TokenAdminRegistryTransactor +} + +func NewTokenAdminRegistry(address common.Address, backend bind.ContractBackend) (*TokenAdminRegistry, error) { + abi, err := abi.JSON(strings.NewReader(TokenAdminRegistryABI)) + if err != nil { + return nil, err + } + contract, err := bindTokenAdminRegistry(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &TokenAdminRegistry{address: address, abi: abi, TokenAdminRegistryCaller: TokenAdminRegistryCaller{contract: contract}, TokenAdminRegistryTransactor: TokenAdminRegistryTransactor{contract: contract}, TokenAdminRegistryFilterer: TokenAdminRegistryFilterer{contract: contract}}, nil +} + +func NewTokenAdminRegistryCaller(address common.Address, caller bind.ContractCaller) (*TokenAdminRegistryCaller, error) { + contract, err := bindTokenAdminRegistry(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &TokenAdminRegistryCaller{contract: contract}, nil +} + +func NewTokenAdminRegistryTransactor(address common.Address, transactor bind.ContractTransactor) (*TokenAdminRegistryTransactor, error) { + contract, err := bindTokenAdminRegistry(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &TokenAdminRegistryTransactor{contract: contract}, nil +} + +func NewTokenAdminRegistryFilterer(address common.Address, filterer bind.ContractFilterer) (*TokenAdminRegistryFilterer, error) { + contract, err := bindTokenAdminRegistry(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &TokenAdminRegistryFilterer{contract: contract}, nil +} + +func bindTokenAdminRegistry(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := TokenAdminRegistryMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_TokenAdminRegistry *TokenAdminRegistryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _TokenAdminRegistry.Contract.TokenAdminRegistryCaller.contract.Call(opts, result, method, params...) +} + +func (_TokenAdminRegistry *TokenAdminRegistryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TokenAdminRegistry.Contract.TokenAdminRegistryTransactor.contract.Transfer(opts) +} + +func (_TokenAdminRegistry *TokenAdminRegistryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _TokenAdminRegistry.Contract.TokenAdminRegistryTransactor.contract.Transact(opts, method, params...) +} + +func (_TokenAdminRegistry *TokenAdminRegistryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _TokenAdminRegistry.Contract.contract.Call(opts, result, method, params...) +} + +func (_TokenAdminRegistry *TokenAdminRegistryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TokenAdminRegistry.Contract.contract.Transfer(opts) +} + +func (_TokenAdminRegistry *TokenAdminRegistryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _TokenAdminRegistry.Contract.contract.Transact(opts, method, params...) +} + +func (_TokenAdminRegistry *TokenAdminRegistryCaller) GetAllConfiguredTokens(opts *bind.CallOpts, startIndex uint64, maxCount uint64) ([]common.Address, error) { + var out []interface{} + err := _TokenAdminRegistry.contract.Call(opts, &out, "getAllConfiguredTokens", startIndex, maxCount) + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +func (_TokenAdminRegistry *TokenAdminRegistrySession) GetAllConfiguredTokens(startIndex uint64, maxCount uint64) ([]common.Address, error) { + return _TokenAdminRegistry.Contract.GetAllConfiguredTokens(&_TokenAdminRegistry.CallOpts, startIndex, maxCount) +} + +func (_TokenAdminRegistry *TokenAdminRegistryCallerSession) GetAllConfiguredTokens(startIndex uint64, maxCount uint64) ([]common.Address, error) { + return _TokenAdminRegistry.Contract.GetAllConfiguredTokens(&_TokenAdminRegistry.CallOpts, startIndex, maxCount) +} + +func (_TokenAdminRegistry *TokenAdminRegistryCaller) GetPool(opts *bind.CallOpts, token common.Address) (common.Address, error) { + var out []interface{} + err := _TokenAdminRegistry.contract.Call(opts, &out, "getPool", token) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_TokenAdminRegistry *TokenAdminRegistrySession) GetPool(token common.Address) (common.Address, error) { + return _TokenAdminRegistry.Contract.GetPool(&_TokenAdminRegistry.CallOpts, token) +} + +func (_TokenAdminRegistry *TokenAdminRegistryCallerSession) GetPool(token common.Address) (common.Address, error) { + return _TokenAdminRegistry.Contract.GetPool(&_TokenAdminRegistry.CallOpts, token) +} + +func (_TokenAdminRegistry *TokenAdminRegistryCaller) GetPools(opts *bind.CallOpts, tokens []common.Address) ([]common.Address, error) { + var out []interface{} + err := _TokenAdminRegistry.contract.Call(opts, &out, "getPools", tokens) + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +func (_TokenAdminRegistry *TokenAdminRegistrySession) GetPools(tokens []common.Address) ([]common.Address, error) { + return _TokenAdminRegistry.Contract.GetPools(&_TokenAdminRegistry.CallOpts, tokens) +} + +func (_TokenAdminRegistry *TokenAdminRegistryCallerSession) GetPools(tokens []common.Address) ([]common.Address, error) { + return _TokenAdminRegistry.Contract.GetPools(&_TokenAdminRegistry.CallOpts, tokens) +} + +func (_TokenAdminRegistry *TokenAdminRegistryCaller) GetTokenConfig(opts *bind.CallOpts, token common.Address) (TokenAdminRegistryTokenConfig, error) { + var out []interface{} + err := _TokenAdminRegistry.contract.Call(opts, &out, "getTokenConfig", token) + + if err != nil { + return *new(TokenAdminRegistryTokenConfig), err + } + + out0 := *abi.ConvertType(out[0], new(TokenAdminRegistryTokenConfig)).(*TokenAdminRegistryTokenConfig) + + return out0, err + +} + +func (_TokenAdminRegistry *TokenAdminRegistrySession) GetTokenConfig(token common.Address) (TokenAdminRegistryTokenConfig, error) { + return _TokenAdminRegistry.Contract.GetTokenConfig(&_TokenAdminRegistry.CallOpts, token) +} + +func (_TokenAdminRegistry *TokenAdminRegistryCallerSession) GetTokenConfig(token common.Address) (TokenAdminRegistryTokenConfig, error) { + return _TokenAdminRegistry.Contract.GetTokenConfig(&_TokenAdminRegistry.CallOpts, token) +} + +func (_TokenAdminRegistry *TokenAdminRegistryCaller) IsAdministrator(opts *bind.CallOpts, localToken common.Address, administrator common.Address) (bool, error) { + var out []interface{} + err := _TokenAdminRegistry.contract.Call(opts, &out, "isAdministrator", localToken, administrator) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_TokenAdminRegistry *TokenAdminRegistrySession) IsAdministrator(localToken common.Address, administrator common.Address) (bool, error) { + return _TokenAdminRegistry.Contract.IsAdministrator(&_TokenAdminRegistry.CallOpts, localToken, administrator) +} + +func (_TokenAdminRegistry *TokenAdminRegistryCallerSession) IsAdministrator(localToken common.Address, administrator common.Address) (bool, error) { + return _TokenAdminRegistry.Contract.IsAdministrator(&_TokenAdminRegistry.CallOpts, localToken, administrator) +} + +func (_TokenAdminRegistry *TokenAdminRegistryCaller) IsRegistryModule(opts *bind.CallOpts, module common.Address) (bool, error) { + var out []interface{} + err := _TokenAdminRegistry.contract.Call(opts, &out, "isRegistryModule", module) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_TokenAdminRegistry *TokenAdminRegistrySession) IsRegistryModule(module common.Address) (bool, error) { + return _TokenAdminRegistry.Contract.IsRegistryModule(&_TokenAdminRegistry.CallOpts, module) +} + +func (_TokenAdminRegistry *TokenAdminRegistryCallerSession) IsRegistryModule(module common.Address) (bool, error) { + return _TokenAdminRegistry.Contract.IsRegistryModule(&_TokenAdminRegistry.CallOpts, module) +} + +func (_TokenAdminRegistry *TokenAdminRegistryCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _TokenAdminRegistry.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 + +} + +func (_TokenAdminRegistry *TokenAdminRegistrySession) Owner() (common.Address, error) { + return _TokenAdminRegistry.Contract.Owner(&_TokenAdminRegistry.CallOpts) +} + +func (_TokenAdminRegistry *TokenAdminRegistryCallerSession) Owner() (common.Address, error) { + return _TokenAdminRegistry.Contract.Owner(&_TokenAdminRegistry.CallOpts) +} + +func (_TokenAdminRegistry *TokenAdminRegistryCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _TokenAdminRegistry.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_TokenAdminRegistry *TokenAdminRegistrySession) TypeAndVersion() (string, error) { + return _TokenAdminRegistry.Contract.TypeAndVersion(&_TokenAdminRegistry.CallOpts) +} + +func (_TokenAdminRegistry *TokenAdminRegistryCallerSession) TypeAndVersion() (string, error) { + return _TokenAdminRegistry.Contract.TypeAndVersion(&_TokenAdminRegistry.CallOpts) +} + +func (_TokenAdminRegistry *TokenAdminRegistryTransactor) AcceptAdminRole(opts *bind.TransactOpts, localToken common.Address) (*types.Transaction, error) { + return _TokenAdminRegistry.contract.Transact(opts, "acceptAdminRole", localToken) +} + +func (_TokenAdminRegistry *TokenAdminRegistrySession) AcceptAdminRole(localToken common.Address) (*types.Transaction, error) { + return _TokenAdminRegistry.Contract.AcceptAdminRole(&_TokenAdminRegistry.TransactOpts, localToken) +} + +func (_TokenAdminRegistry *TokenAdminRegistryTransactorSession) AcceptAdminRole(localToken common.Address) (*types.Transaction, error) { + return _TokenAdminRegistry.Contract.AcceptAdminRole(&_TokenAdminRegistry.TransactOpts, localToken) +} + +func (_TokenAdminRegistry *TokenAdminRegistryTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TokenAdminRegistry.contract.Transact(opts, "acceptOwnership") +} + +func (_TokenAdminRegistry *TokenAdminRegistrySession) AcceptOwnership() (*types.Transaction, error) { + return _TokenAdminRegistry.Contract.AcceptOwnership(&_TokenAdminRegistry.TransactOpts) +} + +func (_TokenAdminRegistry *TokenAdminRegistryTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _TokenAdminRegistry.Contract.AcceptOwnership(&_TokenAdminRegistry.TransactOpts) +} + +func (_TokenAdminRegistry *TokenAdminRegistryTransactor) AddRegistryModule(opts *bind.TransactOpts, module common.Address) (*types.Transaction, error) { + return _TokenAdminRegistry.contract.Transact(opts, "addRegistryModule", module) +} + +func (_TokenAdminRegistry *TokenAdminRegistrySession) AddRegistryModule(module common.Address) (*types.Transaction, error) { + return _TokenAdminRegistry.Contract.AddRegistryModule(&_TokenAdminRegistry.TransactOpts, module) +} + +func (_TokenAdminRegistry *TokenAdminRegistryTransactorSession) AddRegistryModule(module common.Address) (*types.Transaction, error) { + return _TokenAdminRegistry.Contract.AddRegistryModule(&_TokenAdminRegistry.TransactOpts, module) +} + +func (_TokenAdminRegistry *TokenAdminRegistryTransactor) ProposeAdministrator(opts *bind.TransactOpts, localToken common.Address, administrator common.Address) (*types.Transaction, error) { + return _TokenAdminRegistry.contract.Transact(opts, "proposeAdministrator", localToken, administrator) +} + +func (_TokenAdminRegistry *TokenAdminRegistrySession) ProposeAdministrator(localToken common.Address, administrator common.Address) (*types.Transaction, error) { + return _TokenAdminRegistry.Contract.ProposeAdministrator(&_TokenAdminRegistry.TransactOpts, localToken, administrator) +} + +func (_TokenAdminRegistry *TokenAdminRegistryTransactorSession) ProposeAdministrator(localToken common.Address, administrator common.Address) (*types.Transaction, error) { + return _TokenAdminRegistry.Contract.ProposeAdministrator(&_TokenAdminRegistry.TransactOpts, localToken, administrator) +} + +func (_TokenAdminRegistry *TokenAdminRegistryTransactor) RemoveRegistryModule(opts *bind.TransactOpts, module common.Address) (*types.Transaction, error) { + return _TokenAdminRegistry.contract.Transact(opts, "removeRegistryModule", module) +} + +func (_TokenAdminRegistry *TokenAdminRegistrySession) RemoveRegistryModule(module common.Address) (*types.Transaction, error) { + return _TokenAdminRegistry.Contract.RemoveRegistryModule(&_TokenAdminRegistry.TransactOpts, module) +} + +func (_TokenAdminRegistry *TokenAdminRegistryTransactorSession) RemoveRegistryModule(module common.Address) (*types.Transaction, error) { + return _TokenAdminRegistry.Contract.RemoveRegistryModule(&_TokenAdminRegistry.TransactOpts, module) +} + +func (_TokenAdminRegistry *TokenAdminRegistryTransactor) SetPool(opts *bind.TransactOpts, localToken common.Address, pool common.Address) (*types.Transaction, error) { + return _TokenAdminRegistry.contract.Transact(opts, "setPool", localToken, pool) +} + +func (_TokenAdminRegistry *TokenAdminRegistrySession) SetPool(localToken common.Address, pool common.Address) (*types.Transaction, error) { + return _TokenAdminRegistry.Contract.SetPool(&_TokenAdminRegistry.TransactOpts, localToken, pool) +} + +func (_TokenAdminRegistry *TokenAdminRegistryTransactorSession) SetPool(localToken common.Address, pool common.Address) (*types.Transaction, error) { + return _TokenAdminRegistry.Contract.SetPool(&_TokenAdminRegistry.TransactOpts, localToken, pool) +} + +func (_TokenAdminRegistry *TokenAdminRegistryTransactor) TransferAdminRole(opts *bind.TransactOpts, localToken common.Address, newAdmin common.Address) (*types.Transaction, error) { + return _TokenAdminRegistry.contract.Transact(opts, "transferAdminRole", localToken, newAdmin) +} + +func (_TokenAdminRegistry *TokenAdminRegistrySession) TransferAdminRole(localToken common.Address, newAdmin common.Address) (*types.Transaction, error) { + return _TokenAdminRegistry.Contract.TransferAdminRole(&_TokenAdminRegistry.TransactOpts, localToken, newAdmin) +} + +func (_TokenAdminRegistry *TokenAdminRegistryTransactorSession) TransferAdminRole(localToken common.Address, newAdmin common.Address) (*types.Transaction, error) { + return _TokenAdminRegistry.Contract.TransferAdminRole(&_TokenAdminRegistry.TransactOpts, localToken, newAdmin) +} + +func (_TokenAdminRegistry *TokenAdminRegistryTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _TokenAdminRegistry.contract.Transact(opts, "transferOwnership", to) +} + +func (_TokenAdminRegistry *TokenAdminRegistrySession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _TokenAdminRegistry.Contract.TransferOwnership(&_TokenAdminRegistry.TransactOpts, to) +} + +func (_TokenAdminRegistry *TokenAdminRegistryTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _TokenAdminRegistry.Contract.TransferOwnership(&_TokenAdminRegistry.TransactOpts, to) +} + +type TokenAdminRegistryAdministratorTransferRequestedIterator struct { + Event *TokenAdminRegistryAdministratorTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *TokenAdminRegistryAdministratorTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(TokenAdminRegistryAdministratorTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(TokenAdminRegistryAdministratorTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *TokenAdminRegistryAdministratorTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *TokenAdminRegistryAdministratorTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type TokenAdminRegistryAdministratorTransferRequested struct { + Token common.Address + CurrentAdmin common.Address + NewAdmin common.Address + Raw types.Log +} + +func (_TokenAdminRegistry *TokenAdminRegistryFilterer) FilterAdministratorTransferRequested(opts *bind.FilterOpts, token []common.Address, currentAdmin []common.Address, newAdmin []common.Address) (*TokenAdminRegistryAdministratorTransferRequestedIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var currentAdminRule []interface{} + for _, currentAdminItem := range currentAdmin { + currentAdminRule = append(currentAdminRule, currentAdminItem) + } + var newAdminRule []interface{} + for _, newAdminItem := range newAdmin { + newAdminRule = append(newAdminRule, newAdminItem) + } + + logs, sub, err := _TokenAdminRegistry.contract.FilterLogs(opts, "AdministratorTransferRequested", tokenRule, currentAdminRule, newAdminRule) + if err != nil { + return nil, err + } + return &TokenAdminRegistryAdministratorTransferRequestedIterator{contract: _TokenAdminRegistry.contract, event: "AdministratorTransferRequested", logs: logs, sub: sub}, nil +} + +func (_TokenAdminRegistry *TokenAdminRegistryFilterer) WatchAdministratorTransferRequested(opts *bind.WatchOpts, sink chan<- *TokenAdminRegistryAdministratorTransferRequested, token []common.Address, currentAdmin []common.Address, newAdmin []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var currentAdminRule []interface{} + for _, currentAdminItem := range currentAdmin { + currentAdminRule = append(currentAdminRule, currentAdminItem) + } + var newAdminRule []interface{} + for _, newAdminItem := range newAdmin { + newAdminRule = append(newAdminRule, newAdminItem) + } + + logs, sub, err := _TokenAdminRegistry.contract.WatchLogs(opts, "AdministratorTransferRequested", tokenRule, currentAdminRule, newAdminRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(TokenAdminRegistryAdministratorTransferRequested) + if err := _TokenAdminRegistry.contract.UnpackLog(event, "AdministratorTransferRequested", 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 +} + +func (_TokenAdminRegistry *TokenAdminRegistryFilterer) ParseAdministratorTransferRequested(log types.Log) (*TokenAdminRegistryAdministratorTransferRequested, error) { + event := new(TokenAdminRegistryAdministratorTransferRequested) + if err := _TokenAdminRegistry.contract.UnpackLog(event, "AdministratorTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type TokenAdminRegistryAdministratorTransferredIterator struct { + Event *TokenAdminRegistryAdministratorTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *TokenAdminRegistryAdministratorTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(TokenAdminRegistryAdministratorTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(TokenAdminRegistryAdministratorTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *TokenAdminRegistryAdministratorTransferredIterator) Error() error { + return it.fail +} + +func (it *TokenAdminRegistryAdministratorTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type TokenAdminRegistryAdministratorTransferred struct { + Token common.Address + NewAdmin common.Address + Raw types.Log +} + +func (_TokenAdminRegistry *TokenAdminRegistryFilterer) FilterAdministratorTransferred(opts *bind.FilterOpts, token []common.Address, newAdmin []common.Address) (*TokenAdminRegistryAdministratorTransferredIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var newAdminRule []interface{} + for _, newAdminItem := range newAdmin { + newAdminRule = append(newAdminRule, newAdminItem) + } + + logs, sub, err := _TokenAdminRegistry.contract.FilterLogs(opts, "AdministratorTransferred", tokenRule, newAdminRule) + if err != nil { + return nil, err + } + return &TokenAdminRegistryAdministratorTransferredIterator{contract: _TokenAdminRegistry.contract, event: "AdministratorTransferred", logs: logs, sub: sub}, nil +} + +func (_TokenAdminRegistry *TokenAdminRegistryFilterer) WatchAdministratorTransferred(opts *bind.WatchOpts, sink chan<- *TokenAdminRegistryAdministratorTransferred, token []common.Address, newAdmin []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var newAdminRule []interface{} + for _, newAdminItem := range newAdmin { + newAdminRule = append(newAdminRule, newAdminItem) + } + + logs, sub, err := _TokenAdminRegistry.contract.WatchLogs(opts, "AdministratorTransferred", tokenRule, newAdminRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(TokenAdminRegistryAdministratorTransferred) + if err := _TokenAdminRegistry.contract.UnpackLog(event, "AdministratorTransferred", 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 +} + +func (_TokenAdminRegistry *TokenAdminRegistryFilterer) ParseAdministratorTransferred(log types.Log) (*TokenAdminRegistryAdministratorTransferred, error) { + event := new(TokenAdminRegistryAdministratorTransferred) + if err := _TokenAdminRegistry.contract.UnpackLog(event, "AdministratorTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type TokenAdminRegistryOwnershipTransferRequestedIterator struct { + Event *TokenAdminRegistryOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *TokenAdminRegistryOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(TokenAdminRegistryOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(TokenAdminRegistryOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *TokenAdminRegistryOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *TokenAdminRegistryOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type TokenAdminRegistryOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_TokenAdminRegistry *TokenAdminRegistryFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*TokenAdminRegistryOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _TokenAdminRegistry.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &TokenAdminRegistryOwnershipTransferRequestedIterator{contract: _TokenAdminRegistry.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_TokenAdminRegistry *TokenAdminRegistryFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *TokenAdminRegistryOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _TokenAdminRegistry.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(TokenAdminRegistryOwnershipTransferRequested) + if err := _TokenAdminRegistry.contract.UnpackLog(event, "OwnershipTransferRequested", 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 +} + +func (_TokenAdminRegistry *TokenAdminRegistryFilterer) ParseOwnershipTransferRequested(log types.Log) (*TokenAdminRegistryOwnershipTransferRequested, error) { + event := new(TokenAdminRegistryOwnershipTransferRequested) + if err := _TokenAdminRegistry.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type TokenAdminRegistryOwnershipTransferredIterator struct { + Event *TokenAdminRegistryOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *TokenAdminRegistryOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(TokenAdminRegistryOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(TokenAdminRegistryOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *TokenAdminRegistryOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *TokenAdminRegistryOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type TokenAdminRegistryOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_TokenAdminRegistry *TokenAdminRegistryFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*TokenAdminRegistryOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _TokenAdminRegistry.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &TokenAdminRegistryOwnershipTransferredIterator{contract: _TokenAdminRegistry.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_TokenAdminRegistry *TokenAdminRegistryFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *TokenAdminRegistryOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _TokenAdminRegistry.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(TokenAdminRegistryOwnershipTransferred) + if err := _TokenAdminRegistry.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 +} + +func (_TokenAdminRegistry *TokenAdminRegistryFilterer) ParseOwnershipTransferred(log types.Log) (*TokenAdminRegistryOwnershipTransferred, error) { + event := new(TokenAdminRegistryOwnershipTransferred) + if err := _TokenAdminRegistry.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type TokenAdminRegistryPoolSetIterator struct { + Event *TokenAdminRegistryPoolSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *TokenAdminRegistryPoolSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(TokenAdminRegistryPoolSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(TokenAdminRegistryPoolSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *TokenAdminRegistryPoolSetIterator) Error() error { + return it.fail +} + +func (it *TokenAdminRegistryPoolSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type TokenAdminRegistryPoolSet struct { + Token common.Address + PreviousPool common.Address + NewPool common.Address + Raw types.Log +} + +func (_TokenAdminRegistry *TokenAdminRegistryFilterer) FilterPoolSet(opts *bind.FilterOpts, token []common.Address, previousPool []common.Address, newPool []common.Address) (*TokenAdminRegistryPoolSetIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var previousPoolRule []interface{} + for _, previousPoolItem := range previousPool { + previousPoolRule = append(previousPoolRule, previousPoolItem) + } + var newPoolRule []interface{} + for _, newPoolItem := range newPool { + newPoolRule = append(newPoolRule, newPoolItem) + } + + logs, sub, err := _TokenAdminRegistry.contract.FilterLogs(opts, "PoolSet", tokenRule, previousPoolRule, newPoolRule) + if err != nil { + return nil, err + } + return &TokenAdminRegistryPoolSetIterator{contract: _TokenAdminRegistry.contract, event: "PoolSet", logs: logs, sub: sub}, nil +} + +func (_TokenAdminRegistry *TokenAdminRegistryFilterer) WatchPoolSet(opts *bind.WatchOpts, sink chan<- *TokenAdminRegistryPoolSet, token []common.Address, previousPool []common.Address, newPool []common.Address) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var previousPoolRule []interface{} + for _, previousPoolItem := range previousPool { + previousPoolRule = append(previousPoolRule, previousPoolItem) + } + var newPoolRule []interface{} + for _, newPoolItem := range newPool { + newPoolRule = append(newPoolRule, newPoolItem) + } + + logs, sub, err := _TokenAdminRegistry.contract.WatchLogs(opts, "PoolSet", tokenRule, previousPoolRule, newPoolRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(TokenAdminRegistryPoolSet) + if err := _TokenAdminRegistry.contract.UnpackLog(event, "PoolSet", 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 +} + +func (_TokenAdminRegistry *TokenAdminRegistryFilterer) ParsePoolSet(log types.Log) (*TokenAdminRegistryPoolSet, error) { + event := new(TokenAdminRegistryPoolSet) + if err := _TokenAdminRegistry.contract.UnpackLog(event, "PoolSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type TokenAdminRegistryRegistryModuleAddedIterator struct { + Event *TokenAdminRegistryRegistryModuleAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *TokenAdminRegistryRegistryModuleAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(TokenAdminRegistryRegistryModuleAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(TokenAdminRegistryRegistryModuleAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *TokenAdminRegistryRegistryModuleAddedIterator) Error() error { + return it.fail +} + +func (it *TokenAdminRegistryRegistryModuleAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type TokenAdminRegistryRegistryModuleAdded struct { + Module common.Address + Raw types.Log +} + +func (_TokenAdminRegistry *TokenAdminRegistryFilterer) FilterRegistryModuleAdded(opts *bind.FilterOpts) (*TokenAdminRegistryRegistryModuleAddedIterator, error) { + + logs, sub, err := _TokenAdminRegistry.contract.FilterLogs(opts, "RegistryModuleAdded") + if err != nil { + return nil, err + } + return &TokenAdminRegistryRegistryModuleAddedIterator{contract: _TokenAdminRegistry.contract, event: "RegistryModuleAdded", logs: logs, sub: sub}, nil +} + +func (_TokenAdminRegistry *TokenAdminRegistryFilterer) WatchRegistryModuleAdded(opts *bind.WatchOpts, sink chan<- *TokenAdminRegistryRegistryModuleAdded) (event.Subscription, error) { + + logs, sub, err := _TokenAdminRegistry.contract.WatchLogs(opts, "RegistryModuleAdded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(TokenAdminRegistryRegistryModuleAdded) + if err := _TokenAdminRegistry.contract.UnpackLog(event, "RegistryModuleAdded", 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 +} + +func (_TokenAdminRegistry *TokenAdminRegistryFilterer) ParseRegistryModuleAdded(log types.Log) (*TokenAdminRegistryRegistryModuleAdded, error) { + event := new(TokenAdminRegistryRegistryModuleAdded) + if err := _TokenAdminRegistry.contract.UnpackLog(event, "RegistryModuleAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type TokenAdminRegistryRegistryModuleRemovedIterator struct { + Event *TokenAdminRegistryRegistryModuleRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *TokenAdminRegistryRegistryModuleRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(TokenAdminRegistryRegistryModuleRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(TokenAdminRegistryRegistryModuleRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *TokenAdminRegistryRegistryModuleRemovedIterator) Error() error { + return it.fail +} + +func (it *TokenAdminRegistryRegistryModuleRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type TokenAdminRegistryRegistryModuleRemoved struct { + Module common.Address + Raw types.Log +} + +func (_TokenAdminRegistry *TokenAdminRegistryFilterer) FilterRegistryModuleRemoved(opts *bind.FilterOpts, module []common.Address) (*TokenAdminRegistryRegistryModuleRemovedIterator, error) { + + var moduleRule []interface{} + for _, moduleItem := range module { + moduleRule = append(moduleRule, moduleItem) + } + + logs, sub, err := _TokenAdminRegistry.contract.FilterLogs(opts, "RegistryModuleRemoved", moduleRule) + if err != nil { + return nil, err + } + return &TokenAdminRegistryRegistryModuleRemovedIterator{contract: _TokenAdminRegistry.contract, event: "RegistryModuleRemoved", logs: logs, sub: sub}, nil +} + +func (_TokenAdminRegistry *TokenAdminRegistryFilterer) WatchRegistryModuleRemoved(opts *bind.WatchOpts, sink chan<- *TokenAdminRegistryRegistryModuleRemoved, module []common.Address) (event.Subscription, error) { + + var moduleRule []interface{} + for _, moduleItem := range module { + moduleRule = append(moduleRule, moduleItem) + } + + logs, sub, err := _TokenAdminRegistry.contract.WatchLogs(opts, "RegistryModuleRemoved", moduleRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(TokenAdminRegistryRegistryModuleRemoved) + if err := _TokenAdminRegistry.contract.UnpackLog(event, "RegistryModuleRemoved", 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 +} + +func (_TokenAdminRegistry *TokenAdminRegistryFilterer) ParseRegistryModuleRemoved(log types.Log) (*TokenAdminRegistryRegistryModuleRemoved, error) { + event := new(TokenAdminRegistryRegistryModuleRemoved) + if err := _TokenAdminRegistry.contract.UnpackLog(event, "RegistryModuleRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (_TokenAdminRegistry *TokenAdminRegistry) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _TokenAdminRegistry.abi.Events["AdministratorTransferRequested"].ID: + return _TokenAdminRegistry.ParseAdministratorTransferRequested(log) + case _TokenAdminRegistry.abi.Events["AdministratorTransferred"].ID: + return _TokenAdminRegistry.ParseAdministratorTransferred(log) + case _TokenAdminRegistry.abi.Events["OwnershipTransferRequested"].ID: + return _TokenAdminRegistry.ParseOwnershipTransferRequested(log) + case _TokenAdminRegistry.abi.Events["OwnershipTransferred"].ID: + return _TokenAdminRegistry.ParseOwnershipTransferred(log) + case _TokenAdminRegistry.abi.Events["PoolSet"].ID: + return _TokenAdminRegistry.ParsePoolSet(log) + case _TokenAdminRegistry.abi.Events["RegistryModuleAdded"].ID: + return _TokenAdminRegistry.ParseRegistryModuleAdded(log) + case _TokenAdminRegistry.abi.Events["RegistryModuleRemoved"].ID: + return _TokenAdminRegistry.ParseRegistryModuleRemoved(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (TokenAdminRegistryAdministratorTransferRequested) Topic() common.Hash { + return common.HexToHash("0xc54c3051ff16e63bb9203214432372aca006c589e3653619b577a3265675b716") +} + +func (TokenAdminRegistryAdministratorTransferred) Topic() common.Hash { + return common.HexToHash("0x399b55200f7f639a63d76efe3dcfa9156ce367058d6b673041b84a628885f5a7") +} + +func (TokenAdminRegistryOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (TokenAdminRegistryOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (TokenAdminRegistryPoolSet) Topic() common.Hash { + return common.HexToHash("0x754449ec3aff3bd528bfce43ae9319c4a381b67fcd1d20097b3b24dacaecc35d") +} + +func (TokenAdminRegistryRegistryModuleAdded) Topic() common.Hash { + return common.HexToHash("0x3cabf004338366bfeaeb610ad827cb58d16b588017c509501f2c97c83caae7b2") +} + +func (TokenAdminRegistryRegistryModuleRemoved) Topic() common.Hash { + return common.HexToHash("0x93eaa26dcb9275e56bacb1d33fdbf402262da6f0f4baf2a6e2cd154b73f387f8") +} + +func (_TokenAdminRegistry *TokenAdminRegistry) Address() common.Address { + return _TokenAdminRegistry.address +} + +type TokenAdminRegistryInterface interface { + GetAllConfiguredTokens(opts *bind.CallOpts, startIndex uint64, maxCount uint64) ([]common.Address, error) + + GetPool(opts *bind.CallOpts, token common.Address) (common.Address, error) + + GetPools(opts *bind.CallOpts, tokens []common.Address) ([]common.Address, error) + + GetTokenConfig(opts *bind.CallOpts, token common.Address) (TokenAdminRegistryTokenConfig, error) + + IsAdministrator(opts *bind.CallOpts, localToken common.Address, administrator common.Address) (bool, error) + + IsRegistryModule(opts *bind.CallOpts, module common.Address) (bool, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptAdminRole(opts *bind.TransactOpts, localToken common.Address) (*types.Transaction, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + AddRegistryModule(opts *bind.TransactOpts, module common.Address) (*types.Transaction, error) + + ProposeAdministrator(opts *bind.TransactOpts, localToken common.Address, administrator common.Address) (*types.Transaction, error) + + RemoveRegistryModule(opts *bind.TransactOpts, module common.Address) (*types.Transaction, error) + + SetPool(opts *bind.TransactOpts, localToken common.Address, pool common.Address) (*types.Transaction, error) + + TransferAdminRole(opts *bind.TransactOpts, localToken common.Address, newAdmin common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + FilterAdministratorTransferRequested(opts *bind.FilterOpts, token []common.Address, currentAdmin []common.Address, newAdmin []common.Address) (*TokenAdminRegistryAdministratorTransferRequestedIterator, error) + + WatchAdministratorTransferRequested(opts *bind.WatchOpts, sink chan<- *TokenAdminRegistryAdministratorTransferRequested, token []common.Address, currentAdmin []common.Address, newAdmin []common.Address) (event.Subscription, error) + + ParseAdministratorTransferRequested(log types.Log) (*TokenAdminRegistryAdministratorTransferRequested, error) + + FilterAdministratorTransferred(opts *bind.FilterOpts, token []common.Address, newAdmin []common.Address) (*TokenAdminRegistryAdministratorTransferredIterator, error) + + WatchAdministratorTransferred(opts *bind.WatchOpts, sink chan<- *TokenAdminRegistryAdministratorTransferred, token []common.Address, newAdmin []common.Address) (event.Subscription, error) + + ParseAdministratorTransferred(log types.Log) (*TokenAdminRegistryAdministratorTransferred, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*TokenAdminRegistryOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *TokenAdminRegistryOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*TokenAdminRegistryOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*TokenAdminRegistryOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *TokenAdminRegistryOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*TokenAdminRegistryOwnershipTransferred, error) + + FilterPoolSet(opts *bind.FilterOpts, token []common.Address, previousPool []common.Address, newPool []common.Address) (*TokenAdminRegistryPoolSetIterator, error) + + WatchPoolSet(opts *bind.WatchOpts, sink chan<- *TokenAdminRegistryPoolSet, token []common.Address, previousPool []common.Address, newPool []common.Address) (event.Subscription, error) + + ParsePoolSet(log types.Log) (*TokenAdminRegistryPoolSet, error) + + FilterRegistryModuleAdded(opts *bind.FilterOpts) (*TokenAdminRegistryRegistryModuleAddedIterator, error) + + WatchRegistryModuleAdded(opts *bind.WatchOpts, sink chan<- *TokenAdminRegistryRegistryModuleAdded) (event.Subscription, error) + + ParseRegistryModuleAdded(log types.Log) (*TokenAdminRegistryRegistryModuleAdded, error) + + FilterRegistryModuleRemoved(opts *bind.FilterOpts, module []common.Address) (*TokenAdminRegistryRegistryModuleRemovedIterator, error) + + WatchRegistryModuleRemoved(opts *bind.WatchOpts, sink chan<- *TokenAdminRegistryRegistryModuleRemoved, module []common.Address) (event.Subscription, error) + + ParseRegistryModuleRemoved(log types.Log) (*TokenAdminRegistryRegistryModuleRemoved, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var TokenAdminRegistryZKBin string = ("0x0003000000000002000600000000000200020000000103550000006003100270000001300030019d0000008004000039000000400040043f0000000100200190000000460000c13d0000013002300197000000040020008c0000043c0000413d000000000301043b000000e003300270000001350030009c000000500000213d000001410030009c000000670000213d000001470030009c000000e50000213d0000014a0030009c0000018d0000613d0000014b0030009c0000043c0000c13d000000240020008c0000043c0000413d0000000002000416000000000002004b0000043c0000c13d0000000401100370000000000101043b000400000001001d0000014c0010009c0000043c0000213d0000000401000029000000000010043f0000000201000039000000200010043f0000000001000414000001300010009c0000013001008041000000c00110021000000150011001c7000080100200003904bb04b60000040f00000001002001900000043c0000613d000000000201043b0000000101200039000000000301041a0000014c043001970000000006000411000000000064004b000002ee0000c13d000000000402041a0000013104400197000000000464019f000000000042041b0000013102300197000000000021041b0000000001000414000001300010009c0000013001008041000000c0011002100000014d011001c70000800d0200003900000003030000390000016f0400004100000004050000290000016f0000013d0000000001000416000000000001004b0000043c0000c13d0000000001000411000000000001004b0000005d0000c13d0000013301000041000000800010043f0000013401000041000004bd00010430000001360030009c0000009e0000213d0000013c0030009c000001340000213d0000013f0030009c000001b90000613d000001400030009c0000043c0000c13d0000000001000416000000000001004b0000043c0000c13d0000000101000039000002620000013d0000000102000039000000000302041a0000013103300197000000000113019f000000000012041b0000002001000039000001000010044300000120000004430000013201000041000004bc0001042e000001420030009c000001530000213d000001450030009c000001cd0000613d000001460030009c0000043c0000c13d000000240020008c0000043c0000413d0000000003000416000000000003004b0000043c0000c13d0000000403100370000000000303043b000001540030009c0000043c0000213d0000002304300039000000000024004b0000043c0000813d0000000404300039000000000441034f000000000404043b000200000004001d000001540040009c0000043c0000213d000100240030003d000000020300002900000005033002100000000104300029000000000024004b0000043c0000213d0000003f043000390000016104400197000001620040009c0000043e0000213d0000008004400039000000400040043f0000000204000029000000800040043f0000001f0430018f000000000003004b000000970000613d000000000121034f000000a002300039000000a003000039000000001501043c0000000003530436000000000023004b000000930000c13d000000000004004b000000020000006b0000037d0000c13d000000400100043d000400000001001d0000008002000039000003090000013d000001370030009c000001740000213d0000013a0030009c000002130000613d0000013b0030009c0000043c0000c13d000000440020008c0000043c0000413d0000000002000416000000000002004b0000043c0000c13d0000000402100370000000000202043b000400000002001d0000014c0020009c0000043c0000213d0000002401100370000000000101043b000300000001001d0000014c0010009c0000043c0000213d0000000401000029000000000010043f0000000201000039000000200010043f0000000001000414000001300010009c0000013001008041000000c00110021000000150011001c7000080100200003904bb04b60000040f00000001002001900000043c0000613d000000000101043b000000000101041a0000014c011001970000000004000411000000000041004b000003140000c13d0000000401000029000000000010043f0000000201000039000000200010043f0000000001000414000001300010009c0000013001008041000000c00110021000000150011001c7000080100200003904bb04b60000040f00000001002001900000043c0000613d000000000101043b0000000101100039000000000201041a00000131022001970000000307000029000000000272019f000000000021041b0000000001000414000001300010009c0000013001008041000000c0011002100000014d011001c70000800d0200003900000004030000390000015604000041000000040500002900000000060004110000016f0000013d000001480030009c000002430000613d000001490030009c0000043c0000c13d000000240020008c0000043c0000413d0000000002000416000000000002004b0000043c0000c13d0000000401100370000000000101043b000400000001001d0000014c0010009c0000043c0000213d0000000101000039000000000101041a0000014c011001970000000002000411000000000012004b000002e60000c13d0000000401000029000000000010043f0000000601000039000000200010043f0000000001000414000001300010009c0000013001008041000000c00110021000000150011001c7000080100200003904bb04b60000040f00000001002001900000043c0000613d000000000101043b000000000101041a000000000001004b000001720000c13d0000000501000039000000000201041a000001670020009c0000043e0000813d0000000103200039000000000031041b000001680220009a0000000403000029000000000032041b000000000101041a000300000001001d000000000030043f0000000601000039000000200010043f0000000001000414000001300010009c0000013001008041000000c00110021000000150011001c7000080100200003904bb04b60000040f00000001002001900000043c0000613d000000000101043b0000000302000029000000000021041b000000400100043d00000004020000290000000000210435000001300010009c000001300100804100000040011002100000000002000414000001300020009c0000013002008041000000c002200210000000000112019f00000169011001c70000800d0200003900000001030000390000016a040000410000016f0000013d0000013d0030009c000002530000613d0000013e0030009c0000043c0000c13d000000440020008c0000043c0000413d0000000002000416000000000002004b0000043c0000c13d0000000402100370000000000202043b0000014c0020009c0000043c0000213d0000002401100370000000000101043b000400000001001d0000014c0010009c0000043c0000213d000000000020043f0000000201000039000000200010043f000000000100001904bb04a00000040f000000000101041a0000014c01100197000000040010006c00000000010000390000000101006039000000800010043f0000015c01000041000004bc0001042e000001430030009c000002670000613d000001440030009c0000043c0000c13d0000000001000416000000000001004b0000043c0000c13d000000000100041a0000014c021001970000000006000411000000000026004b000002ea0000c13d0000000102000039000000000302041a0000013104300197000000000464019f000000000042041b0000013101100197000000000010041b00000000010004140000014c05300197000001300010009c0000013001008041000000c0011002100000014d011001c70000800d0200003900000003030000390000015f0400004104bb04b10000040f00000001002001900000043c0000613d0000000001000019000004bc0001042e000001380030009c000002b60000613d000001390030009c0000043c0000c13d000000240020008c0000043c0000413d0000000002000416000000000002004b0000043c0000c13d0000000401100370000000000601043b0000014c0060009c0000043c0000213d0000000101000039000000000101041a0000014c011001970000000005000411000000000015004b000002e60000c13d000000000056004b000002f60000c13d0000014f01000041000000800010043f0000013401000041000004bd00010430000000240020008c0000043c0000413d0000000002000416000000000002004b0000043c0000c13d0000000401100370000000000101043b000400000001001d0000014c0010009c0000043c0000213d0000000101000039000000000101041a0000014c011001970000000002000411000000000012004b000002e60000c13d0000000401000029000000000010043f0000000601000039000000200010043f0000000001000414000001300010009c0000013001008041000000c00110021000000150011001c7000080100200003904bb04b60000040f00000001002001900000043c0000613d000000000101043b000000000101041a000300000001001d000000000001004b000001720000613d0000000504000039000000000204041a000000000002004b000003a10000c13d0000016b01000041000000000010043f0000001101000039000000040010043f0000015201000041000004bd00010430000000240020008c0000043c0000413d0000000002000416000000000002004b0000043c0000c13d0000000401100370000000000101043b0000014c0010009c0000043c0000213d04bb048c0000040f000000000001004b0000000001000039000000010100c039000000400200043d0000000000120435000001300020009c000001300200804100000040012002100000015d011001c7000004bc0001042e000000440020008c0000043c0000413d0000000002000416000000000002004b0000043c0000c13d0000000402100370000000000202043b000400000002001d0000014c0020009c0000043c0000213d0000002401100370000000000101043b000300000001001d0000014c0010009c0000043c0000213d0000000401000029000000000010043f0000000201000039000000200010043f0000000001000414000001300010009c0000013001008041000000c00110021000000150011001c7000080100200003904bb04b60000040f00000001002001900000043c0000613d000000000101043b000000000101041a0000014c021001970000000001000411000000000012004b000003220000c13d0000000303000029000000000003004b000003c00000c13d0000000401000029000000000010043f0000000201000039000000200010043f0000000001000414000001300010009c0000013001008041000000c00110021000000150011001c7000080100200003904bb04b60000040f00000001002001900000043c0000613d000000000101043b0000000201100039000000000201041a000001310320019700000003033001af000000000031041b0000014c06200197000000030060006c000001720000613d0000000001000414000001300010009c0000013001008041000000c0011002100000014d011001c70000800d0200003900000004030000390000016604000041000000040500002900000003070000290000016f0000013d000000240020008c0000043c0000413d0000000002000416000000000002004b0000043c0000c13d0000000401100370000000000101043b0000014c0010009c0000043c0000213d000000e002000039000000400020043f000000800000043f000000a00000043f000000c00000043f000000000010043f0000000201000039000000200010043f000000000100001904bb04a00000040f000400000001001d000000e00100003904bb04710000040f0000000403000029000000000103041a0000014c01100197000000e00010043f0000000102300039000000000202041a0000014c02200197000001000020043f0000000202300039000000000202041a0000014c02200197000001200020043f000000400200043d0000000001120436000001000300043d0000014c033001970000000000310435000001200100043d0000014c0110019700000040032000390000000000130435000001300020009c000001300200804100000040012002100000015b011001c7000004bc0001042e0000000001000416000000000001004b0000043c0000c13d000000c001000039000000400010043f0000001801000039000000800010043f0000016c02000041000000a00020043f0000002003000039000000c00030043f000000e00010043f000001000020043f000001180000043f0000016d01000041000004bc0001042e000000240020008c0000043c0000413d0000000002000416000000000002004b0000043c0000c13d0000000401100370000000000101043b0000014c0010009c0000043c0000213d000000000010043f0000000201000039000000200010043f000000000100001904bb04a00000040f0000000201100039000000000101041a0000014c01100197000000800010043f0000015c01000041000004bc0001042e000000440020008c0000043c0000413d0000000002000416000000000002004b0000043c0000c13d0000000402100370000000000302043b000001540030009c0000043c0000213d0000002401100370000000000601043b000001540060009c0000043c0000213d00000000010004150000000304000039000000000504041a000000000235004b000003030000a13d000001540660019700000000083600190000000007000415000000060770008a0000000507700210000000000058004b000002860000a13d0000000007000415000000050770008a0000000507700210000001540020009c00000000060200190000043e0000213d00000005096002100000003f02900039000001600a200197000000400200043d00000000082a00190000000000a8004b000000000a000039000000010a004039000001540080009c0000043e0000213d0000000100a001900000043e0000c13d000000400080043f00000000086204360000001f0a90018f000000000009004b0000029f0000613d0000000009980019000000000b000031000000020bb00367000000000c08001900000000bd0b043c000000000cdc043600000000009c004b0000029b0000c13d00000000000a004b0000000507700270000000000702001f000000000006004b000003040000613d00000000070000190000000009370019000000000059004b000003f30000813d000000000040043f000000000a02043300000000007a004b000003f30000a13d000000050a700210000000000a8a0019000001550990009a000000000909041a0000014c0990019700000000009a04350000000107700039000000000067004b000002a50000413d000003040000013d000000440020008c0000043c0000413d0000000002000416000000000002004b0000043c0000c13d0000000402100370000000000202043b000400000002001d0000014c0020009c0000043c0000213d0000002401100370000000000101043b000300000001001d0000014c0010009c0000043c0000213d0000000001000411000000000010043f0000000601000039000000200010043f0000000001000414000001300010009c0000013001008041000000c00110021000000150011001c7000080100200003904bb04b60000040f00000001002001900000043c0000613d000000000101043b000000000101041a000000000001004b000002dc0000c13d0000000101000039000000000101041a0000014c011001970000000002000411000000000012004b000003ce0000c13d000000030000006b000003300000c13d000000400100043d00000157020000410000000000210435000001300010009c0000013001008041000000400110021000000158011001c7000004bd000104300000017001000041000000800010043f0000013401000041000004bd000104300000015e01000041000000800010043f0000013401000041000004bd00010430000000400100043d0000002402100039000000040300002900000000003204350000016e0200004100000000002104350000014c026001970000031b0000013d000000000100041a0000013101100197000000000161019f000000000010041b0000000001000414000001300010009c0000013001008041000000c0011002100000014d011001c70000800d0200003900000003030000390000014e040000410000016f0000013d0000006002000039000000000300041500000000013100490000000001000002000000400100043d000400000001001d04bb047c0000040f00000004020000290000000001210049000001300010009c00000130010080410000006001100210000001300020009c00000130020080410000004002200210000000000121019f000004bc0001042e000000400100043d000000240210003900000004030000290000000000320435000001590200004100000000002104350000014c0240019700000004031000390000000000230435000001300010009c000001300100804100000040011002100000015a011001c7000004bd00010430000000400200043d000000240320003900000004040000290000000000430435000001590300004100000000003204350000014c0110019700000004032000390000000000130435000001300020009c000001300200804100000040012002100000015a011001c7000004bd000104300000000401000029000000000010043f0000000201000039000000200010043f0000000001000414000001300010009c0000013001008041000000c00110021000000150011001c7000080100200003904bb04b60000040f00000001002001900000043c0000613d000000000101043b000000000201041a0000014c00200198000004440000c13d0000000101100039000000000201041a000001310220019700000003022001af000000000021041b0000000401000029000000000010043f0000000401000039000000200010043f0000000001000414000001300010009c0000013001008041000000c00110021000000150011001c7000080100200003904bb04b60000040f00000001002001900000043c0000613d000000000101043b000000000101041a000000000001004b000003710000c13d0000000301000039000000000201041a000001540020009c0000043e0000213d0000000103200039000000000031041b000001550220009a0000000403000029000000000032041b000000000101041a000200000001001d000000000030043f0000000401000039000000200010043f0000000001000414000001300010009c0000013001008041000000c00110021000000150011001c7000080100200003904bb04b60000040f00000001002001900000043c0000613d000000000101043b0000000202000029000000000021041b0000000001000414000001300010009c0000013001008041000000c0011002100000014d011001c70000800d02000039000000040300003900000156040000410000000405000029000000000600001900000003070000290000016f0000013d0000000003000019000400000003001d0000000502300210000300000002001d00000001012000290000000201100367000000000101043b0000014c0010009c0000043c0000213d000000000010043f0000000201000039000000200010043f0000000001000414000001300010009c0000013001008041000000c00110021000000150011001c7000080100200003904bb04b60000040f00000001002001900000043c0000613d000000800200043d0000000403000029000000000032004b000003f30000a13d0000000302000029000000a002200039000000000101043b0000000201100039000000000101041a0000014c0110019700000000001204350000000103300039000000020030006c0000037e0000413d0000009a0000013d0000000303000029000000010130008a000000000023004b000003d40000c13d000001710230009a000000000002041b000000000014041b0000000401000029000000000010043f0000000601000039000000200010043f0000000001000414000001300010009c0000013001008041000000c00110021000000150011001c7000080100200003904bb04b60000040f00000001002001900000043c0000613d000000000101043b000000000001041b0000000001000414000001300010009c0000013001008041000000c0011002100000014d011001c70000800d0200003900000002030000390000017204000041000000440000013d000000400b00043d000001630100004100000000001b04350000000401b00039000000040200002900000000002104350000000001000414000000040030008c000003f90000c13d0000000103000031000000200030008c00000020040000390000000004034019000004250000013d000000400100043d0000015102000041000000000021043500000004021000390000000003000411000004490000013d000000000012004b000003f30000a13d000001710130009a000001710220009a000000000202041a000000000021041b000000000020043f0000000601000039000000200010043f0000000001000414000001300010009c0000013001008041000000c00110021000000150011001c7000080100200003904bb04b60000040f00000001002001900000043c0000613d000000000101043b0000000302000029000000000021041b0000000501000039000000000101041a000000000001004b0000046d0000c13d0000016b01000041000000000010043f0000003101000039000000040010043f0000015201000041000004bd000104300000016b01000041000000000010043f0000003201000039000000040010043f0000015201000041000004bd000104300000013000b0009c000001300200004100000000020b40190000004002200210000001300010009c0000013001008041000000c001100210000000000121019f00000152011001c7000000000203001900020000000b001d04bb04b60000040f00000060031002700000013003300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000020b0000290000000205700029000004150000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000004110000c13d000000000006004b000004220000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00000001002001900000044f0000613d0000001f01400039000000600210018f0000000001b20019000000000021004b00000000020000390000000102004039000001540010009c0000043e0000213d00000001002001900000043e0000c13d000000400010043f000000200030008c0000043c0000413d00000000020b0433000000000002004b0000000003000039000000010300c039000000000032004b0000043c0000c13d000000000002004b000001f20000c13d0000016502000041000004460000013d0000000001000019000004bd000104300000016b01000041000000000010043f0000004101000039000000040010043f0000015201000041000004bd00010430000000400100043d00000153020000410000000000210435000000040210003900000004030000290000000000320435000001300010009c0000013001008041000000400110021000000152011001c7000004bd000104300000001f0530018f0000016406300198000000400200043d00000000046200190000045a0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000004560000c13d000000000005004b000004670000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000001300020009c00000130020080410000004002200210000000000112019f000004bd000104300000000003010019000000010110008a0000000504000039000003a50000013d000001730010009c000004760000813d0000006001100039000000400010043f000000000001042d0000016b01000041000000000010043f0000004101000039000000040010043f0000015201000041000004bd0001043000000020030000390000000004310436000000000302043300000000003404350000004001100039000000000003004b0000048b0000613d0000000004000019000000200220003900000000050204330000014c0550019700000000015104360000000104400039000000000034004b000004840000413d000000000001042d000000000010043f0000000601000039000000200010043f0000000001000414000001300010009c0000013001008041000000c00110021000000150011001c7000080100200003904bb04b60000040f00000001002001900000049e0000613d000000000101043b000000000101041a000000000001004b0000000001000039000000010100c039000000000001042d0000000001000019000004bd000104300000000002000414000001300020009c0000013002008041000000c002200210000001300010009c00000130010080410000004001100210000000000121019f00000150011001c7000080100200003904bb04b60000040f0000000100200190000004af0000613d000000000101043b000000000001042d0000000001000019000004bd00010430000004b4002104210000000102000039000000000001042d0000000002000019000000000001042d000004b9002104230000000102000039000000000001042d0000000002000019000000000001042d000004bb00000432000004bc0001042e000004bd000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000002000000000000000000000000000000400000010000000000000000009b15e16f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000800000000000000000000000000000000000000000000000000000000000000000000000007d3f255100000000000000000000000000000000000000000000000000000000cb67e3b000000000000000000000000000000000000000000000000000000000e677ae3600000000000000000000000000000000000000000000000000000000e677ae3700000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000cb67e3b100000000000000000000000000000000000000000000000000000000ddadfa8e00000000000000000000000000000000000000000000000000000000bbe4f6da00000000000000000000000000000000000000000000000000000000bbe4f6db00000000000000000000000000000000000000000000000000000000c1af6e03000000000000000000000000000000000000000000000000000000007d3f2552000000000000000000000000000000000000000000000000000000008da5cb5b000000000000000000000000000000000000000000000000000000004e847fc60000000000000000000000000000000000000000000000000000000072d64a800000000000000000000000000000000000000000000000000000000072d64a810000000000000000000000000000000000000000000000000000000079ba5097000000000000000000000000000000000000000000000000000000004e847fc7000000000000000000000000000000000000000000000000000000005e63547a00000000000000000000000000000000000000000000000000000000181f5a7600000000000000000000000000000000000000000000000000000000181f5a77000000000000000000000000000000000000000000000000000000003dc457720000000000000000000000000000000000000000000000000000000010cbcf1800000000000000000000000000000000000000000000000000000000156194da000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0200000000000000000000000000000000000000000000000000000000000000ed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278dad89dca00000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000004000000000000000000000000051ca1ec300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000045ed80e900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff3da8a5f161a6c3ff06a60736d0ed24d7963cc6a5c4fafd2fa1dae9bb908e07a5c54c3051ff16e63bb9203214432372aca006c589e3653619b577a3265675b716d92e233d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000ed5d85b500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000020000000800000000000000000000000000000000000000000000000000000002000000000000000000000000002b543c6000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e000000000000000000000000000000000000000000000003fffffffffffffffe07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff7f240028e80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffe0962b60e600000000000000000000000000000000000000000000000000000000754449ec3aff3bd528bfce43ae9319c4a381b67fcd1d20097b3b24dacaecc35d0000000000000000000000000000000000000000000000010000000000000000fc949c7b4a13586e39d89eead2f38644f9fb3efb5a0490b14f8fc0ceab44c25002000000000000000000000000000000000000200000000000000000000000003cabf004338366bfeaeb610ad827cb58d16b588017c509501f2c97c83caae7b24e487b7100000000000000000000000000000000000000000000000000000000546f6b656e41646d696e526567697374727920312e352e3000000000000000000000000000000000000000000000000000000060000000c000000000000000003edffe7500000000000000000000000000000000000000000000000000000000399b55200f7f639a63d76efe3dcfa9156ce367058d6b673041b84a628885f5a72b5c74de00000000000000000000000000000000000000000000000000000000fc949c7b4a13586e39d89eead2f38644f9fb3efb5a0490b14f8fc0ceab44c25193eaa26dcb9275e56bacb1d33fdbf402262da6f0f4baf2a6e2cd154b73f387f8000000000000000000000000000000000000000000000000ffffffffffffffa00000000000000000000000000000000000000000000000000000000000000000") diff --git a/core/gethwrappers/ccip/generated_zks/token_pool/token_pool.go b/core/gethwrappers/ccip/generated_zks/token_pool/token_pool.go new file mode 100644 index 00000000000..e5df1f54ad4 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/token_pool/token_pool.go @@ -0,0 +1,2974 @@ +package token_pool + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type PoolLockOrBurnInV1 struct { + Receiver []byte + RemoteChainSelector uint64 + OriginalSender common.Address + Amount *big.Int + LocalToken common.Address +} + +type PoolLockOrBurnOutV1 struct { + DestTokenAddress []byte + DestPoolData []byte +} + +type PoolReleaseOrMintInV1 struct { + OriginalSender []byte + RemoteChainSelector uint64 + Receiver common.Address + Amount *big.Int + LocalToken common.Address + SourcePoolAddress []byte + SourcePoolData []byte + OffchainTokenData []byte +} + +type PoolReleaseOrMintOutV1 struct { + DestinationAmount *big.Int +} + +type RateLimiterConfig struct { + IsEnabled bool + Capacity *big.Int + Rate *big.Int +} + +type RateLimiterTokenBucket struct { + Tokens *big.Int + LastUpdated uint32 + IsEnabled bool + Capacity *big.Int + Rate *big.Int +} + +type TokenPoolChainUpdate struct { + RemoteChainSelector uint64 + RemotePoolAddresses [][]byte + RemoteTokenAddress []byte + OutboundRateLimiterConfig RateLimiterConfig + InboundRateLimiterConfig RateLimiterConfig +} + +var TokenPoolMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[],\"name\":\"AllowListNotEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"CallerIsNotARampOnRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotTransferToSelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"DisabledNonZeroRateLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"expected\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"actual\",\"type\":\"uint8\"}],\"name\":\"InvalidDecimalArgs\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"InvalidRateLimitRate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolData\",\"type\":\"bytes\"}],\"name\":\"InvalidRemoteChainDecimals\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidRemotePoolForChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidSourcePoolAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeProposedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"NonExistentChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"remoteDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"localDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"remoteAmount\",\"type\":\"uint256\"}],\"name\":\"OverflowDetected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerCannotBeZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"PoolAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimitMustBeDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListAdd\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListRemove\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remoteToken\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Locked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Minted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rateLimitAdmin\",\"type\":\"address\"}],\"name\":\"RateLimitAdminSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Released\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"RemotePoolAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"RemotePoolRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"RouterUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"addRemotePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"removes\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"adds\",\"type\":\"address[]\"}],\"name\":\"applyAllowListUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"remoteChainSelectorsToRemove\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes[]\",\"name\":\"remotePoolAddresses\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes\",\"name\":\"remoteTokenAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"internalType\":\"structTokenPool.ChainUpdate[]\",\"name\":\"chainsToAdd\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentInboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentOutboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateLimitAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemotePools\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemoteToken\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRmnProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupportedChains\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"isRemotePool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"isSupportedChain\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isSupportedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"internalType\":\"structPool.LockOrBurnInV1\",\"name\":\"lockOrBurnIn\",\"type\":\"tuple\"}],\"name\":\"lockOrBurn\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destPoolData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.LockOrBurnOutV1\",\"name\":\"lockOrBurnOut\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"originalSender\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainTokenData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.ReleaseOrMintInV1\",\"name\":\"releaseOrMintIn\",\"type\":\"tuple\"}],\"name\":\"releaseOrMint\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"destinationAmount\",\"type\":\"uint256\"}],\"internalType\":\"structPool.ReleaseOrMintOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"removeRemotePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundConfig\",\"type\":\"tuple\"}],\"name\":\"setChainRateLimiterConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rateLimitAdmin\",\"type\":\"address\"}],\"name\":\"setRateLimitAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"setRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", +} + +var TokenPoolABI = TokenPoolMetaData.ABI + +type TokenPool struct { + address common.Address + abi abi.ABI + TokenPoolCaller + TokenPoolTransactor + TokenPoolFilterer +} + +type TokenPoolCaller struct { + contract *bind.BoundContract +} + +type TokenPoolTransactor struct { + contract *bind.BoundContract +} + +type TokenPoolFilterer struct { + contract *bind.BoundContract +} + +type TokenPoolSession struct { + Contract *TokenPool + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type TokenPoolCallerSession struct { + Contract *TokenPoolCaller + CallOpts bind.CallOpts +} + +type TokenPoolTransactorSession struct { + Contract *TokenPoolTransactor + TransactOpts bind.TransactOpts +} + +type TokenPoolRaw struct { + Contract *TokenPool +} + +type TokenPoolCallerRaw struct { + Contract *TokenPoolCaller +} + +type TokenPoolTransactorRaw struct { + Contract *TokenPoolTransactor +} + +func NewTokenPool(address common.Address, backend bind.ContractBackend) (*TokenPool, error) { + abi, err := abi.JSON(strings.NewReader(TokenPoolABI)) + if err != nil { + return nil, err + } + contract, err := bindTokenPool(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &TokenPool{address: address, abi: abi, TokenPoolCaller: TokenPoolCaller{contract: contract}, TokenPoolTransactor: TokenPoolTransactor{contract: contract}, TokenPoolFilterer: TokenPoolFilterer{contract: contract}}, nil +} + +func NewTokenPoolCaller(address common.Address, caller bind.ContractCaller) (*TokenPoolCaller, error) { + contract, err := bindTokenPool(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &TokenPoolCaller{contract: contract}, nil +} + +func NewTokenPoolTransactor(address common.Address, transactor bind.ContractTransactor) (*TokenPoolTransactor, error) { + contract, err := bindTokenPool(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &TokenPoolTransactor{contract: contract}, nil +} + +func NewTokenPoolFilterer(address common.Address, filterer bind.ContractFilterer) (*TokenPoolFilterer, error) { + contract, err := bindTokenPool(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &TokenPoolFilterer{contract: contract}, nil +} + +func bindTokenPool(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := TokenPoolMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_TokenPool *TokenPoolRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _TokenPool.Contract.TokenPoolCaller.contract.Call(opts, result, method, params...) +} + +func (_TokenPool *TokenPoolRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TokenPool.Contract.TokenPoolTransactor.contract.Transfer(opts) +} + +func (_TokenPool *TokenPoolRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _TokenPool.Contract.TokenPoolTransactor.contract.Transact(opts, method, params...) +} + +func (_TokenPool *TokenPoolCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _TokenPool.Contract.contract.Call(opts, result, method, params...) +} + +func (_TokenPool *TokenPoolTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TokenPool.Contract.contract.Transfer(opts) +} + +func (_TokenPool *TokenPoolTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _TokenPool.Contract.contract.Transact(opts, method, params...) +} + +func (_TokenPool *TokenPoolCaller) GetAllowList(opts *bind.CallOpts) ([]common.Address, error) { + var out []interface{} + err := _TokenPool.contract.Call(opts, &out, "getAllowList") + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +func (_TokenPool *TokenPoolSession) GetAllowList() ([]common.Address, error) { + return _TokenPool.Contract.GetAllowList(&_TokenPool.CallOpts) +} + +func (_TokenPool *TokenPoolCallerSession) GetAllowList() ([]common.Address, error) { + return _TokenPool.Contract.GetAllowList(&_TokenPool.CallOpts) +} + +func (_TokenPool *TokenPoolCaller) GetAllowListEnabled(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _TokenPool.contract.Call(opts, &out, "getAllowListEnabled") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_TokenPool *TokenPoolSession) GetAllowListEnabled() (bool, error) { + return _TokenPool.Contract.GetAllowListEnabled(&_TokenPool.CallOpts) +} + +func (_TokenPool *TokenPoolCallerSession) GetAllowListEnabled() (bool, error) { + return _TokenPool.Contract.GetAllowListEnabled(&_TokenPool.CallOpts) +} + +func (_TokenPool *TokenPoolCaller) GetCurrentInboundRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + var out []interface{} + err := _TokenPool.contract.Call(opts, &out, "getCurrentInboundRateLimiterState", remoteChainSelector) + + if err != nil { + return *new(RateLimiterTokenBucket), err + } + + out0 := *abi.ConvertType(out[0], new(RateLimiterTokenBucket)).(*RateLimiterTokenBucket) + + return out0, err + +} + +func (_TokenPool *TokenPoolSession) GetCurrentInboundRateLimiterState(remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + return _TokenPool.Contract.GetCurrentInboundRateLimiterState(&_TokenPool.CallOpts, remoteChainSelector) +} + +func (_TokenPool *TokenPoolCallerSession) GetCurrentInboundRateLimiterState(remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + return _TokenPool.Contract.GetCurrentInboundRateLimiterState(&_TokenPool.CallOpts, remoteChainSelector) +} + +func (_TokenPool *TokenPoolCaller) GetCurrentOutboundRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + var out []interface{} + err := _TokenPool.contract.Call(opts, &out, "getCurrentOutboundRateLimiterState", remoteChainSelector) + + if err != nil { + return *new(RateLimiterTokenBucket), err + } + + out0 := *abi.ConvertType(out[0], new(RateLimiterTokenBucket)).(*RateLimiterTokenBucket) + + return out0, err + +} + +func (_TokenPool *TokenPoolSession) GetCurrentOutboundRateLimiterState(remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + return _TokenPool.Contract.GetCurrentOutboundRateLimiterState(&_TokenPool.CallOpts, remoteChainSelector) +} + +func (_TokenPool *TokenPoolCallerSession) GetCurrentOutboundRateLimiterState(remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + return _TokenPool.Contract.GetCurrentOutboundRateLimiterState(&_TokenPool.CallOpts, remoteChainSelector) +} + +func (_TokenPool *TokenPoolCaller) GetRateLimitAdmin(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _TokenPool.contract.Call(opts, &out, "getRateLimitAdmin") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_TokenPool *TokenPoolSession) GetRateLimitAdmin() (common.Address, error) { + return _TokenPool.Contract.GetRateLimitAdmin(&_TokenPool.CallOpts) +} + +func (_TokenPool *TokenPoolCallerSession) GetRateLimitAdmin() (common.Address, error) { + return _TokenPool.Contract.GetRateLimitAdmin(&_TokenPool.CallOpts) +} + +func (_TokenPool *TokenPoolCaller) GetRemotePools(opts *bind.CallOpts, remoteChainSelector uint64) ([][]byte, error) { + var out []interface{} + err := _TokenPool.contract.Call(opts, &out, "getRemotePools", remoteChainSelector) + + if err != nil { + return *new([][]byte), err + } + + out0 := *abi.ConvertType(out[0], new([][]byte)).(*[][]byte) + + return out0, err + +} + +func (_TokenPool *TokenPoolSession) GetRemotePools(remoteChainSelector uint64) ([][]byte, error) { + return _TokenPool.Contract.GetRemotePools(&_TokenPool.CallOpts, remoteChainSelector) +} + +func (_TokenPool *TokenPoolCallerSession) GetRemotePools(remoteChainSelector uint64) ([][]byte, error) { + return _TokenPool.Contract.GetRemotePools(&_TokenPool.CallOpts, remoteChainSelector) +} + +func (_TokenPool *TokenPoolCaller) GetRemoteToken(opts *bind.CallOpts, remoteChainSelector uint64) ([]byte, error) { + var out []interface{} + err := _TokenPool.contract.Call(opts, &out, "getRemoteToken", remoteChainSelector) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +func (_TokenPool *TokenPoolSession) GetRemoteToken(remoteChainSelector uint64) ([]byte, error) { + return _TokenPool.Contract.GetRemoteToken(&_TokenPool.CallOpts, remoteChainSelector) +} + +func (_TokenPool *TokenPoolCallerSession) GetRemoteToken(remoteChainSelector uint64) ([]byte, error) { + return _TokenPool.Contract.GetRemoteToken(&_TokenPool.CallOpts, remoteChainSelector) +} + +func (_TokenPool *TokenPoolCaller) GetRmnProxy(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _TokenPool.contract.Call(opts, &out, "getRmnProxy") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_TokenPool *TokenPoolSession) GetRmnProxy() (common.Address, error) { + return _TokenPool.Contract.GetRmnProxy(&_TokenPool.CallOpts) +} + +func (_TokenPool *TokenPoolCallerSession) GetRmnProxy() (common.Address, error) { + return _TokenPool.Contract.GetRmnProxy(&_TokenPool.CallOpts) +} + +func (_TokenPool *TokenPoolCaller) GetRouter(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _TokenPool.contract.Call(opts, &out, "getRouter") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_TokenPool *TokenPoolSession) GetRouter() (common.Address, error) { + return _TokenPool.Contract.GetRouter(&_TokenPool.CallOpts) +} + +func (_TokenPool *TokenPoolCallerSession) GetRouter() (common.Address, error) { + return _TokenPool.Contract.GetRouter(&_TokenPool.CallOpts) +} + +func (_TokenPool *TokenPoolCaller) GetSupportedChains(opts *bind.CallOpts) ([]uint64, error) { + var out []interface{} + err := _TokenPool.contract.Call(opts, &out, "getSupportedChains") + + if err != nil { + return *new([]uint64), err + } + + out0 := *abi.ConvertType(out[0], new([]uint64)).(*[]uint64) + + return out0, err + +} + +func (_TokenPool *TokenPoolSession) GetSupportedChains() ([]uint64, error) { + return _TokenPool.Contract.GetSupportedChains(&_TokenPool.CallOpts) +} + +func (_TokenPool *TokenPoolCallerSession) GetSupportedChains() ([]uint64, error) { + return _TokenPool.Contract.GetSupportedChains(&_TokenPool.CallOpts) +} + +func (_TokenPool *TokenPoolCaller) GetToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _TokenPool.contract.Call(opts, &out, "getToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_TokenPool *TokenPoolSession) GetToken() (common.Address, error) { + return _TokenPool.Contract.GetToken(&_TokenPool.CallOpts) +} + +func (_TokenPool *TokenPoolCallerSession) GetToken() (common.Address, error) { + return _TokenPool.Contract.GetToken(&_TokenPool.CallOpts) +} + +func (_TokenPool *TokenPoolCaller) GetTokenDecimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _TokenPool.contract.Call(opts, &out, "getTokenDecimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +func (_TokenPool *TokenPoolSession) GetTokenDecimals() (uint8, error) { + return _TokenPool.Contract.GetTokenDecimals(&_TokenPool.CallOpts) +} + +func (_TokenPool *TokenPoolCallerSession) GetTokenDecimals() (uint8, error) { + return _TokenPool.Contract.GetTokenDecimals(&_TokenPool.CallOpts) +} + +func (_TokenPool *TokenPoolCaller) IsRemotePool(opts *bind.CallOpts, remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) { + var out []interface{} + err := _TokenPool.contract.Call(opts, &out, "isRemotePool", remoteChainSelector, remotePoolAddress) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_TokenPool *TokenPoolSession) IsRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) { + return _TokenPool.Contract.IsRemotePool(&_TokenPool.CallOpts, remoteChainSelector, remotePoolAddress) +} + +func (_TokenPool *TokenPoolCallerSession) IsRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) { + return _TokenPool.Contract.IsRemotePool(&_TokenPool.CallOpts, remoteChainSelector, remotePoolAddress) +} + +func (_TokenPool *TokenPoolCaller) IsSupportedChain(opts *bind.CallOpts, remoteChainSelector uint64) (bool, error) { + var out []interface{} + err := _TokenPool.contract.Call(opts, &out, "isSupportedChain", remoteChainSelector) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_TokenPool *TokenPoolSession) IsSupportedChain(remoteChainSelector uint64) (bool, error) { + return _TokenPool.Contract.IsSupportedChain(&_TokenPool.CallOpts, remoteChainSelector) +} + +func (_TokenPool *TokenPoolCallerSession) IsSupportedChain(remoteChainSelector uint64) (bool, error) { + return _TokenPool.Contract.IsSupportedChain(&_TokenPool.CallOpts, remoteChainSelector) +} + +func (_TokenPool *TokenPoolCaller) IsSupportedToken(opts *bind.CallOpts, token common.Address) (bool, error) { + var out []interface{} + err := _TokenPool.contract.Call(opts, &out, "isSupportedToken", token) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_TokenPool *TokenPoolSession) IsSupportedToken(token common.Address) (bool, error) { + return _TokenPool.Contract.IsSupportedToken(&_TokenPool.CallOpts, token) +} + +func (_TokenPool *TokenPoolCallerSession) IsSupportedToken(token common.Address) (bool, error) { + return _TokenPool.Contract.IsSupportedToken(&_TokenPool.CallOpts, token) +} + +func (_TokenPool *TokenPoolCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _TokenPool.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 + +} + +func (_TokenPool *TokenPoolSession) Owner() (common.Address, error) { + return _TokenPool.Contract.Owner(&_TokenPool.CallOpts) +} + +func (_TokenPool *TokenPoolCallerSession) Owner() (common.Address, error) { + return _TokenPool.Contract.Owner(&_TokenPool.CallOpts) +} + +func (_TokenPool *TokenPoolCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _TokenPool.contract.Call(opts, &out, "supportsInterface", interfaceId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_TokenPool *TokenPoolSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _TokenPool.Contract.SupportsInterface(&_TokenPool.CallOpts, interfaceId) +} + +func (_TokenPool *TokenPoolCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _TokenPool.Contract.SupportsInterface(&_TokenPool.CallOpts, interfaceId) +} + +func (_TokenPool *TokenPoolTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _TokenPool.contract.Transact(opts, "acceptOwnership") +} + +func (_TokenPool *TokenPoolSession) AcceptOwnership() (*types.Transaction, error) { + return _TokenPool.Contract.AcceptOwnership(&_TokenPool.TransactOpts) +} + +func (_TokenPool *TokenPoolTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _TokenPool.Contract.AcceptOwnership(&_TokenPool.TransactOpts) +} + +func (_TokenPool *TokenPoolTransactor) AddRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _TokenPool.contract.Transact(opts, "addRemotePool", remoteChainSelector, remotePoolAddress) +} + +func (_TokenPool *TokenPoolSession) AddRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _TokenPool.Contract.AddRemotePool(&_TokenPool.TransactOpts, remoteChainSelector, remotePoolAddress) +} + +func (_TokenPool *TokenPoolTransactorSession) AddRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _TokenPool.Contract.AddRemotePool(&_TokenPool.TransactOpts, remoteChainSelector, remotePoolAddress) +} + +func (_TokenPool *TokenPoolTransactor) ApplyAllowListUpdates(opts *bind.TransactOpts, removes []common.Address, adds []common.Address) (*types.Transaction, error) { + return _TokenPool.contract.Transact(opts, "applyAllowListUpdates", removes, adds) +} + +func (_TokenPool *TokenPoolSession) ApplyAllowListUpdates(removes []common.Address, adds []common.Address) (*types.Transaction, error) { + return _TokenPool.Contract.ApplyAllowListUpdates(&_TokenPool.TransactOpts, removes, adds) +} + +func (_TokenPool *TokenPoolTransactorSession) ApplyAllowListUpdates(removes []common.Address, adds []common.Address) (*types.Transaction, error) { + return _TokenPool.Contract.ApplyAllowListUpdates(&_TokenPool.TransactOpts, removes, adds) +} + +func (_TokenPool *TokenPoolTransactor) ApplyChainUpdates(opts *bind.TransactOpts, remoteChainSelectorsToRemove []uint64, chainsToAdd []TokenPoolChainUpdate) (*types.Transaction, error) { + return _TokenPool.contract.Transact(opts, "applyChainUpdates", remoteChainSelectorsToRemove, chainsToAdd) +} + +func (_TokenPool *TokenPoolSession) ApplyChainUpdates(remoteChainSelectorsToRemove []uint64, chainsToAdd []TokenPoolChainUpdate) (*types.Transaction, error) { + return _TokenPool.Contract.ApplyChainUpdates(&_TokenPool.TransactOpts, remoteChainSelectorsToRemove, chainsToAdd) +} + +func (_TokenPool *TokenPoolTransactorSession) ApplyChainUpdates(remoteChainSelectorsToRemove []uint64, chainsToAdd []TokenPoolChainUpdate) (*types.Transaction, error) { + return _TokenPool.Contract.ApplyChainUpdates(&_TokenPool.TransactOpts, remoteChainSelectorsToRemove, chainsToAdd) +} + +func (_TokenPool *TokenPoolTransactor) LockOrBurn(opts *bind.TransactOpts, lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) { + return _TokenPool.contract.Transact(opts, "lockOrBurn", lockOrBurnIn) +} + +func (_TokenPool *TokenPoolSession) LockOrBurn(lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) { + return _TokenPool.Contract.LockOrBurn(&_TokenPool.TransactOpts, lockOrBurnIn) +} + +func (_TokenPool *TokenPoolTransactorSession) LockOrBurn(lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) { + return _TokenPool.Contract.LockOrBurn(&_TokenPool.TransactOpts, lockOrBurnIn) +} + +func (_TokenPool *TokenPoolTransactor) ReleaseOrMint(opts *bind.TransactOpts, releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) { + return _TokenPool.contract.Transact(opts, "releaseOrMint", releaseOrMintIn) +} + +func (_TokenPool *TokenPoolSession) ReleaseOrMint(releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) { + return _TokenPool.Contract.ReleaseOrMint(&_TokenPool.TransactOpts, releaseOrMintIn) +} + +func (_TokenPool *TokenPoolTransactorSession) ReleaseOrMint(releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) { + return _TokenPool.Contract.ReleaseOrMint(&_TokenPool.TransactOpts, releaseOrMintIn) +} + +func (_TokenPool *TokenPoolTransactor) RemoveRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _TokenPool.contract.Transact(opts, "removeRemotePool", remoteChainSelector, remotePoolAddress) +} + +func (_TokenPool *TokenPoolSession) RemoveRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _TokenPool.Contract.RemoveRemotePool(&_TokenPool.TransactOpts, remoteChainSelector, remotePoolAddress) +} + +func (_TokenPool *TokenPoolTransactorSession) RemoveRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _TokenPool.Contract.RemoveRemotePool(&_TokenPool.TransactOpts, remoteChainSelector, remotePoolAddress) +} + +func (_TokenPool *TokenPoolTransactor) SetChainRateLimiterConfig(opts *bind.TransactOpts, remoteChainSelector uint64, outboundConfig RateLimiterConfig, inboundConfig RateLimiterConfig) (*types.Transaction, error) { + return _TokenPool.contract.Transact(opts, "setChainRateLimiterConfig", remoteChainSelector, outboundConfig, inboundConfig) +} + +func (_TokenPool *TokenPoolSession) SetChainRateLimiterConfig(remoteChainSelector uint64, outboundConfig RateLimiterConfig, inboundConfig RateLimiterConfig) (*types.Transaction, error) { + return _TokenPool.Contract.SetChainRateLimiterConfig(&_TokenPool.TransactOpts, remoteChainSelector, outboundConfig, inboundConfig) +} + +func (_TokenPool *TokenPoolTransactorSession) SetChainRateLimiterConfig(remoteChainSelector uint64, outboundConfig RateLimiterConfig, inboundConfig RateLimiterConfig) (*types.Transaction, error) { + return _TokenPool.Contract.SetChainRateLimiterConfig(&_TokenPool.TransactOpts, remoteChainSelector, outboundConfig, inboundConfig) +} + +func (_TokenPool *TokenPoolTransactor) SetRateLimitAdmin(opts *bind.TransactOpts, rateLimitAdmin common.Address) (*types.Transaction, error) { + return _TokenPool.contract.Transact(opts, "setRateLimitAdmin", rateLimitAdmin) +} + +func (_TokenPool *TokenPoolSession) SetRateLimitAdmin(rateLimitAdmin common.Address) (*types.Transaction, error) { + return _TokenPool.Contract.SetRateLimitAdmin(&_TokenPool.TransactOpts, rateLimitAdmin) +} + +func (_TokenPool *TokenPoolTransactorSession) SetRateLimitAdmin(rateLimitAdmin common.Address) (*types.Transaction, error) { + return _TokenPool.Contract.SetRateLimitAdmin(&_TokenPool.TransactOpts, rateLimitAdmin) +} + +func (_TokenPool *TokenPoolTransactor) SetRouter(opts *bind.TransactOpts, newRouter common.Address) (*types.Transaction, error) { + return _TokenPool.contract.Transact(opts, "setRouter", newRouter) +} + +func (_TokenPool *TokenPoolSession) SetRouter(newRouter common.Address) (*types.Transaction, error) { + return _TokenPool.Contract.SetRouter(&_TokenPool.TransactOpts, newRouter) +} + +func (_TokenPool *TokenPoolTransactorSession) SetRouter(newRouter common.Address) (*types.Transaction, error) { + return _TokenPool.Contract.SetRouter(&_TokenPool.TransactOpts, newRouter) +} + +func (_TokenPool *TokenPoolTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _TokenPool.contract.Transact(opts, "transferOwnership", to) +} + +func (_TokenPool *TokenPoolSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _TokenPool.Contract.TransferOwnership(&_TokenPool.TransactOpts, to) +} + +func (_TokenPool *TokenPoolTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _TokenPool.Contract.TransferOwnership(&_TokenPool.TransactOpts, to) +} + +type TokenPoolAllowListAddIterator struct { + Event *TokenPoolAllowListAdd + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *TokenPoolAllowListAddIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(TokenPoolAllowListAdd) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(TokenPoolAllowListAdd) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *TokenPoolAllowListAddIterator) Error() error { + return it.fail +} + +func (it *TokenPoolAllowListAddIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type TokenPoolAllowListAdd struct { + Sender common.Address + Raw types.Log +} + +func (_TokenPool *TokenPoolFilterer) FilterAllowListAdd(opts *bind.FilterOpts) (*TokenPoolAllowListAddIterator, error) { + + logs, sub, err := _TokenPool.contract.FilterLogs(opts, "AllowListAdd") + if err != nil { + return nil, err + } + return &TokenPoolAllowListAddIterator{contract: _TokenPool.contract, event: "AllowListAdd", logs: logs, sub: sub}, nil +} + +func (_TokenPool *TokenPoolFilterer) WatchAllowListAdd(opts *bind.WatchOpts, sink chan<- *TokenPoolAllowListAdd) (event.Subscription, error) { + + logs, sub, err := _TokenPool.contract.WatchLogs(opts, "AllowListAdd") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(TokenPoolAllowListAdd) + if err := _TokenPool.contract.UnpackLog(event, "AllowListAdd", 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 +} + +func (_TokenPool *TokenPoolFilterer) ParseAllowListAdd(log types.Log) (*TokenPoolAllowListAdd, error) { + event := new(TokenPoolAllowListAdd) + if err := _TokenPool.contract.UnpackLog(event, "AllowListAdd", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type TokenPoolAllowListRemoveIterator struct { + Event *TokenPoolAllowListRemove + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *TokenPoolAllowListRemoveIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(TokenPoolAllowListRemove) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(TokenPoolAllowListRemove) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *TokenPoolAllowListRemoveIterator) Error() error { + return it.fail +} + +func (it *TokenPoolAllowListRemoveIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type TokenPoolAllowListRemove struct { + Sender common.Address + Raw types.Log +} + +func (_TokenPool *TokenPoolFilterer) FilterAllowListRemove(opts *bind.FilterOpts) (*TokenPoolAllowListRemoveIterator, error) { + + logs, sub, err := _TokenPool.contract.FilterLogs(opts, "AllowListRemove") + if err != nil { + return nil, err + } + return &TokenPoolAllowListRemoveIterator{contract: _TokenPool.contract, event: "AllowListRemove", logs: logs, sub: sub}, nil +} + +func (_TokenPool *TokenPoolFilterer) WatchAllowListRemove(opts *bind.WatchOpts, sink chan<- *TokenPoolAllowListRemove) (event.Subscription, error) { + + logs, sub, err := _TokenPool.contract.WatchLogs(opts, "AllowListRemove") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(TokenPoolAllowListRemove) + if err := _TokenPool.contract.UnpackLog(event, "AllowListRemove", 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 +} + +func (_TokenPool *TokenPoolFilterer) ParseAllowListRemove(log types.Log) (*TokenPoolAllowListRemove, error) { + event := new(TokenPoolAllowListRemove) + if err := _TokenPool.contract.UnpackLog(event, "AllowListRemove", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type TokenPoolBurnedIterator struct { + Event *TokenPoolBurned + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *TokenPoolBurnedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(TokenPoolBurned) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(TokenPoolBurned) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *TokenPoolBurnedIterator) Error() error { + return it.fail +} + +func (it *TokenPoolBurnedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type TokenPoolBurned struct { + Sender common.Address + Amount *big.Int + Raw types.Log +} + +func (_TokenPool *TokenPoolFilterer) FilterBurned(opts *bind.FilterOpts, sender []common.Address) (*TokenPoolBurnedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _TokenPool.contract.FilterLogs(opts, "Burned", senderRule) + if err != nil { + return nil, err + } + return &TokenPoolBurnedIterator{contract: _TokenPool.contract, event: "Burned", logs: logs, sub: sub}, nil +} + +func (_TokenPool *TokenPoolFilterer) WatchBurned(opts *bind.WatchOpts, sink chan<- *TokenPoolBurned, sender []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _TokenPool.contract.WatchLogs(opts, "Burned", senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(TokenPoolBurned) + if err := _TokenPool.contract.UnpackLog(event, "Burned", 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 +} + +func (_TokenPool *TokenPoolFilterer) ParseBurned(log types.Log) (*TokenPoolBurned, error) { + event := new(TokenPoolBurned) + if err := _TokenPool.contract.UnpackLog(event, "Burned", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type TokenPoolChainAddedIterator struct { + Event *TokenPoolChainAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *TokenPoolChainAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(TokenPoolChainAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(TokenPoolChainAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *TokenPoolChainAddedIterator) Error() error { + return it.fail +} + +func (it *TokenPoolChainAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type TokenPoolChainAdded struct { + RemoteChainSelector uint64 + RemoteToken []byte + OutboundRateLimiterConfig RateLimiterConfig + InboundRateLimiterConfig RateLimiterConfig + Raw types.Log +} + +func (_TokenPool *TokenPoolFilterer) FilterChainAdded(opts *bind.FilterOpts) (*TokenPoolChainAddedIterator, error) { + + logs, sub, err := _TokenPool.contract.FilterLogs(opts, "ChainAdded") + if err != nil { + return nil, err + } + return &TokenPoolChainAddedIterator{contract: _TokenPool.contract, event: "ChainAdded", logs: logs, sub: sub}, nil +} + +func (_TokenPool *TokenPoolFilterer) WatchChainAdded(opts *bind.WatchOpts, sink chan<- *TokenPoolChainAdded) (event.Subscription, error) { + + logs, sub, err := _TokenPool.contract.WatchLogs(opts, "ChainAdded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(TokenPoolChainAdded) + if err := _TokenPool.contract.UnpackLog(event, "ChainAdded", 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 +} + +func (_TokenPool *TokenPoolFilterer) ParseChainAdded(log types.Log) (*TokenPoolChainAdded, error) { + event := new(TokenPoolChainAdded) + if err := _TokenPool.contract.UnpackLog(event, "ChainAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type TokenPoolChainConfiguredIterator struct { + Event *TokenPoolChainConfigured + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *TokenPoolChainConfiguredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(TokenPoolChainConfigured) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(TokenPoolChainConfigured) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *TokenPoolChainConfiguredIterator) Error() error { + return it.fail +} + +func (it *TokenPoolChainConfiguredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type TokenPoolChainConfigured struct { + RemoteChainSelector uint64 + OutboundRateLimiterConfig RateLimiterConfig + InboundRateLimiterConfig RateLimiterConfig + Raw types.Log +} + +func (_TokenPool *TokenPoolFilterer) FilterChainConfigured(opts *bind.FilterOpts) (*TokenPoolChainConfiguredIterator, error) { + + logs, sub, err := _TokenPool.contract.FilterLogs(opts, "ChainConfigured") + if err != nil { + return nil, err + } + return &TokenPoolChainConfiguredIterator{contract: _TokenPool.contract, event: "ChainConfigured", logs: logs, sub: sub}, nil +} + +func (_TokenPool *TokenPoolFilterer) WatchChainConfigured(opts *bind.WatchOpts, sink chan<- *TokenPoolChainConfigured) (event.Subscription, error) { + + logs, sub, err := _TokenPool.contract.WatchLogs(opts, "ChainConfigured") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(TokenPoolChainConfigured) + if err := _TokenPool.contract.UnpackLog(event, "ChainConfigured", 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 +} + +func (_TokenPool *TokenPoolFilterer) ParseChainConfigured(log types.Log) (*TokenPoolChainConfigured, error) { + event := new(TokenPoolChainConfigured) + if err := _TokenPool.contract.UnpackLog(event, "ChainConfigured", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type TokenPoolChainRemovedIterator struct { + Event *TokenPoolChainRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *TokenPoolChainRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(TokenPoolChainRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(TokenPoolChainRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *TokenPoolChainRemovedIterator) Error() error { + return it.fail +} + +func (it *TokenPoolChainRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type TokenPoolChainRemoved struct { + RemoteChainSelector uint64 + Raw types.Log +} + +func (_TokenPool *TokenPoolFilterer) FilterChainRemoved(opts *bind.FilterOpts) (*TokenPoolChainRemovedIterator, error) { + + logs, sub, err := _TokenPool.contract.FilterLogs(opts, "ChainRemoved") + if err != nil { + return nil, err + } + return &TokenPoolChainRemovedIterator{contract: _TokenPool.contract, event: "ChainRemoved", logs: logs, sub: sub}, nil +} + +func (_TokenPool *TokenPoolFilterer) WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *TokenPoolChainRemoved) (event.Subscription, error) { + + logs, sub, err := _TokenPool.contract.WatchLogs(opts, "ChainRemoved") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(TokenPoolChainRemoved) + if err := _TokenPool.contract.UnpackLog(event, "ChainRemoved", 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 +} + +func (_TokenPool *TokenPoolFilterer) ParseChainRemoved(log types.Log) (*TokenPoolChainRemoved, error) { + event := new(TokenPoolChainRemoved) + if err := _TokenPool.contract.UnpackLog(event, "ChainRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type TokenPoolConfigChangedIterator struct { + Event *TokenPoolConfigChanged + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *TokenPoolConfigChangedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(TokenPoolConfigChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(TokenPoolConfigChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *TokenPoolConfigChangedIterator) Error() error { + return it.fail +} + +func (it *TokenPoolConfigChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type TokenPoolConfigChanged struct { + Config RateLimiterConfig + Raw types.Log +} + +func (_TokenPool *TokenPoolFilterer) FilterConfigChanged(opts *bind.FilterOpts) (*TokenPoolConfigChangedIterator, error) { + + logs, sub, err := _TokenPool.contract.FilterLogs(opts, "ConfigChanged") + if err != nil { + return nil, err + } + return &TokenPoolConfigChangedIterator{contract: _TokenPool.contract, event: "ConfigChanged", logs: logs, sub: sub}, nil +} + +func (_TokenPool *TokenPoolFilterer) WatchConfigChanged(opts *bind.WatchOpts, sink chan<- *TokenPoolConfigChanged) (event.Subscription, error) { + + logs, sub, err := _TokenPool.contract.WatchLogs(opts, "ConfigChanged") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(TokenPoolConfigChanged) + if err := _TokenPool.contract.UnpackLog(event, "ConfigChanged", 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 +} + +func (_TokenPool *TokenPoolFilterer) ParseConfigChanged(log types.Log) (*TokenPoolConfigChanged, error) { + event := new(TokenPoolConfigChanged) + if err := _TokenPool.contract.UnpackLog(event, "ConfigChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type TokenPoolLockedIterator struct { + Event *TokenPoolLocked + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *TokenPoolLockedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(TokenPoolLocked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(TokenPoolLocked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *TokenPoolLockedIterator) Error() error { + return it.fail +} + +func (it *TokenPoolLockedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type TokenPoolLocked struct { + Sender common.Address + Amount *big.Int + Raw types.Log +} + +func (_TokenPool *TokenPoolFilterer) FilterLocked(opts *bind.FilterOpts, sender []common.Address) (*TokenPoolLockedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _TokenPool.contract.FilterLogs(opts, "Locked", senderRule) + if err != nil { + return nil, err + } + return &TokenPoolLockedIterator{contract: _TokenPool.contract, event: "Locked", logs: logs, sub: sub}, nil +} + +func (_TokenPool *TokenPoolFilterer) WatchLocked(opts *bind.WatchOpts, sink chan<- *TokenPoolLocked, sender []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _TokenPool.contract.WatchLogs(opts, "Locked", senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(TokenPoolLocked) + if err := _TokenPool.contract.UnpackLog(event, "Locked", 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 +} + +func (_TokenPool *TokenPoolFilterer) ParseLocked(log types.Log) (*TokenPoolLocked, error) { + event := new(TokenPoolLocked) + if err := _TokenPool.contract.UnpackLog(event, "Locked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type TokenPoolMintedIterator struct { + Event *TokenPoolMinted + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *TokenPoolMintedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(TokenPoolMinted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(TokenPoolMinted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *TokenPoolMintedIterator) Error() error { + return it.fail +} + +func (it *TokenPoolMintedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type TokenPoolMinted struct { + Sender common.Address + Recipient common.Address + Amount *big.Int + Raw types.Log +} + +func (_TokenPool *TokenPoolFilterer) FilterMinted(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*TokenPoolMintedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _TokenPool.contract.FilterLogs(opts, "Minted", senderRule, recipientRule) + if err != nil { + return nil, err + } + return &TokenPoolMintedIterator{contract: _TokenPool.contract, event: "Minted", logs: logs, sub: sub}, nil +} + +func (_TokenPool *TokenPoolFilterer) WatchMinted(opts *bind.WatchOpts, sink chan<- *TokenPoolMinted, sender []common.Address, recipient []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _TokenPool.contract.WatchLogs(opts, "Minted", senderRule, recipientRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(TokenPoolMinted) + if err := _TokenPool.contract.UnpackLog(event, "Minted", 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 +} + +func (_TokenPool *TokenPoolFilterer) ParseMinted(log types.Log) (*TokenPoolMinted, error) { + event := new(TokenPoolMinted) + if err := _TokenPool.contract.UnpackLog(event, "Minted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type TokenPoolOwnershipTransferRequestedIterator struct { + Event *TokenPoolOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *TokenPoolOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(TokenPoolOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(TokenPoolOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *TokenPoolOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *TokenPoolOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type TokenPoolOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_TokenPool *TokenPoolFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*TokenPoolOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _TokenPool.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &TokenPoolOwnershipTransferRequestedIterator{contract: _TokenPool.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_TokenPool *TokenPoolFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *TokenPoolOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _TokenPool.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(TokenPoolOwnershipTransferRequested) + if err := _TokenPool.contract.UnpackLog(event, "OwnershipTransferRequested", 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 +} + +func (_TokenPool *TokenPoolFilterer) ParseOwnershipTransferRequested(log types.Log) (*TokenPoolOwnershipTransferRequested, error) { + event := new(TokenPoolOwnershipTransferRequested) + if err := _TokenPool.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type TokenPoolOwnershipTransferredIterator struct { + Event *TokenPoolOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *TokenPoolOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(TokenPoolOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(TokenPoolOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *TokenPoolOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *TokenPoolOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type TokenPoolOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_TokenPool *TokenPoolFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*TokenPoolOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _TokenPool.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &TokenPoolOwnershipTransferredIterator{contract: _TokenPool.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_TokenPool *TokenPoolFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *TokenPoolOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _TokenPool.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(TokenPoolOwnershipTransferred) + if err := _TokenPool.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 +} + +func (_TokenPool *TokenPoolFilterer) ParseOwnershipTransferred(log types.Log) (*TokenPoolOwnershipTransferred, error) { + event := new(TokenPoolOwnershipTransferred) + if err := _TokenPool.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type TokenPoolRateLimitAdminSetIterator struct { + Event *TokenPoolRateLimitAdminSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *TokenPoolRateLimitAdminSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(TokenPoolRateLimitAdminSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(TokenPoolRateLimitAdminSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *TokenPoolRateLimitAdminSetIterator) Error() error { + return it.fail +} + +func (it *TokenPoolRateLimitAdminSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type TokenPoolRateLimitAdminSet struct { + RateLimitAdmin common.Address + Raw types.Log +} + +func (_TokenPool *TokenPoolFilterer) FilterRateLimitAdminSet(opts *bind.FilterOpts) (*TokenPoolRateLimitAdminSetIterator, error) { + + logs, sub, err := _TokenPool.contract.FilterLogs(opts, "RateLimitAdminSet") + if err != nil { + return nil, err + } + return &TokenPoolRateLimitAdminSetIterator{contract: _TokenPool.contract, event: "RateLimitAdminSet", logs: logs, sub: sub}, nil +} + +func (_TokenPool *TokenPoolFilterer) WatchRateLimitAdminSet(opts *bind.WatchOpts, sink chan<- *TokenPoolRateLimitAdminSet) (event.Subscription, error) { + + logs, sub, err := _TokenPool.contract.WatchLogs(opts, "RateLimitAdminSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(TokenPoolRateLimitAdminSet) + if err := _TokenPool.contract.UnpackLog(event, "RateLimitAdminSet", 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 +} + +func (_TokenPool *TokenPoolFilterer) ParseRateLimitAdminSet(log types.Log) (*TokenPoolRateLimitAdminSet, error) { + event := new(TokenPoolRateLimitAdminSet) + if err := _TokenPool.contract.UnpackLog(event, "RateLimitAdminSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type TokenPoolReleasedIterator struct { + Event *TokenPoolReleased + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *TokenPoolReleasedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(TokenPoolReleased) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(TokenPoolReleased) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *TokenPoolReleasedIterator) Error() error { + return it.fail +} + +func (it *TokenPoolReleasedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type TokenPoolReleased struct { + Sender common.Address + Recipient common.Address + Amount *big.Int + Raw types.Log +} + +func (_TokenPool *TokenPoolFilterer) FilterReleased(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*TokenPoolReleasedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _TokenPool.contract.FilterLogs(opts, "Released", senderRule, recipientRule) + if err != nil { + return nil, err + } + return &TokenPoolReleasedIterator{contract: _TokenPool.contract, event: "Released", logs: logs, sub: sub}, nil +} + +func (_TokenPool *TokenPoolFilterer) WatchReleased(opts *bind.WatchOpts, sink chan<- *TokenPoolReleased, sender []common.Address, recipient []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _TokenPool.contract.WatchLogs(opts, "Released", senderRule, recipientRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(TokenPoolReleased) + if err := _TokenPool.contract.UnpackLog(event, "Released", 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 +} + +func (_TokenPool *TokenPoolFilterer) ParseReleased(log types.Log) (*TokenPoolReleased, error) { + event := new(TokenPoolReleased) + if err := _TokenPool.contract.UnpackLog(event, "Released", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type TokenPoolRemotePoolAddedIterator struct { + Event *TokenPoolRemotePoolAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *TokenPoolRemotePoolAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(TokenPoolRemotePoolAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(TokenPoolRemotePoolAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *TokenPoolRemotePoolAddedIterator) Error() error { + return it.fail +} + +func (it *TokenPoolRemotePoolAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type TokenPoolRemotePoolAdded struct { + RemoteChainSelector uint64 + RemotePoolAddress []byte + Raw types.Log +} + +func (_TokenPool *TokenPoolFilterer) FilterRemotePoolAdded(opts *bind.FilterOpts, remoteChainSelector []uint64) (*TokenPoolRemotePoolAddedIterator, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _TokenPool.contract.FilterLogs(opts, "RemotePoolAdded", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return &TokenPoolRemotePoolAddedIterator{contract: _TokenPool.contract, event: "RemotePoolAdded", logs: logs, sub: sub}, nil +} + +func (_TokenPool *TokenPoolFilterer) WatchRemotePoolAdded(opts *bind.WatchOpts, sink chan<- *TokenPoolRemotePoolAdded, remoteChainSelector []uint64) (event.Subscription, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _TokenPool.contract.WatchLogs(opts, "RemotePoolAdded", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(TokenPoolRemotePoolAdded) + if err := _TokenPool.contract.UnpackLog(event, "RemotePoolAdded", 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 +} + +func (_TokenPool *TokenPoolFilterer) ParseRemotePoolAdded(log types.Log) (*TokenPoolRemotePoolAdded, error) { + event := new(TokenPoolRemotePoolAdded) + if err := _TokenPool.contract.UnpackLog(event, "RemotePoolAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type TokenPoolRemotePoolRemovedIterator struct { + Event *TokenPoolRemotePoolRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *TokenPoolRemotePoolRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(TokenPoolRemotePoolRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(TokenPoolRemotePoolRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *TokenPoolRemotePoolRemovedIterator) Error() error { + return it.fail +} + +func (it *TokenPoolRemotePoolRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type TokenPoolRemotePoolRemoved struct { + RemoteChainSelector uint64 + RemotePoolAddress []byte + Raw types.Log +} + +func (_TokenPool *TokenPoolFilterer) FilterRemotePoolRemoved(opts *bind.FilterOpts, remoteChainSelector []uint64) (*TokenPoolRemotePoolRemovedIterator, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _TokenPool.contract.FilterLogs(opts, "RemotePoolRemoved", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return &TokenPoolRemotePoolRemovedIterator{contract: _TokenPool.contract, event: "RemotePoolRemoved", logs: logs, sub: sub}, nil +} + +func (_TokenPool *TokenPoolFilterer) WatchRemotePoolRemoved(opts *bind.WatchOpts, sink chan<- *TokenPoolRemotePoolRemoved, remoteChainSelector []uint64) (event.Subscription, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _TokenPool.contract.WatchLogs(opts, "RemotePoolRemoved", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(TokenPoolRemotePoolRemoved) + if err := _TokenPool.contract.UnpackLog(event, "RemotePoolRemoved", 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 +} + +func (_TokenPool *TokenPoolFilterer) ParseRemotePoolRemoved(log types.Log) (*TokenPoolRemotePoolRemoved, error) { + event := new(TokenPoolRemotePoolRemoved) + if err := _TokenPool.contract.UnpackLog(event, "RemotePoolRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type TokenPoolRouterUpdatedIterator struct { + Event *TokenPoolRouterUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *TokenPoolRouterUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(TokenPoolRouterUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(TokenPoolRouterUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *TokenPoolRouterUpdatedIterator) Error() error { + return it.fail +} + +func (it *TokenPoolRouterUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type TokenPoolRouterUpdated struct { + OldRouter common.Address + NewRouter common.Address + Raw types.Log +} + +func (_TokenPool *TokenPoolFilterer) FilterRouterUpdated(opts *bind.FilterOpts) (*TokenPoolRouterUpdatedIterator, error) { + + logs, sub, err := _TokenPool.contract.FilterLogs(opts, "RouterUpdated") + if err != nil { + return nil, err + } + return &TokenPoolRouterUpdatedIterator{contract: _TokenPool.contract, event: "RouterUpdated", logs: logs, sub: sub}, nil +} + +func (_TokenPool *TokenPoolFilterer) WatchRouterUpdated(opts *bind.WatchOpts, sink chan<- *TokenPoolRouterUpdated) (event.Subscription, error) { + + logs, sub, err := _TokenPool.contract.WatchLogs(opts, "RouterUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(TokenPoolRouterUpdated) + if err := _TokenPool.contract.UnpackLog(event, "RouterUpdated", 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 +} + +func (_TokenPool *TokenPoolFilterer) ParseRouterUpdated(log types.Log) (*TokenPoolRouterUpdated, error) { + event := new(TokenPoolRouterUpdated) + if err := _TokenPool.contract.UnpackLog(event, "RouterUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (_TokenPool *TokenPool) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _TokenPool.abi.Events["AllowListAdd"].ID: + return _TokenPool.ParseAllowListAdd(log) + case _TokenPool.abi.Events["AllowListRemove"].ID: + return _TokenPool.ParseAllowListRemove(log) + case _TokenPool.abi.Events["Burned"].ID: + return _TokenPool.ParseBurned(log) + case _TokenPool.abi.Events["ChainAdded"].ID: + return _TokenPool.ParseChainAdded(log) + case _TokenPool.abi.Events["ChainConfigured"].ID: + return _TokenPool.ParseChainConfigured(log) + case _TokenPool.abi.Events["ChainRemoved"].ID: + return _TokenPool.ParseChainRemoved(log) + case _TokenPool.abi.Events["ConfigChanged"].ID: + return _TokenPool.ParseConfigChanged(log) + case _TokenPool.abi.Events["Locked"].ID: + return _TokenPool.ParseLocked(log) + case _TokenPool.abi.Events["Minted"].ID: + return _TokenPool.ParseMinted(log) + case _TokenPool.abi.Events["OwnershipTransferRequested"].ID: + return _TokenPool.ParseOwnershipTransferRequested(log) + case _TokenPool.abi.Events["OwnershipTransferred"].ID: + return _TokenPool.ParseOwnershipTransferred(log) + case _TokenPool.abi.Events["RateLimitAdminSet"].ID: + return _TokenPool.ParseRateLimitAdminSet(log) + case _TokenPool.abi.Events["Released"].ID: + return _TokenPool.ParseReleased(log) + case _TokenPool.abi.Events["RemotePoolAdded"].ID: + return _TokenPool.ParseRemotePoolAdded(log) + case _TokenPool.abi.Events["RemotePoolRemoved"].ID: + return _TokenPool.ParseRemotePoolRemoved(log) + case _TokenPool.abi.Events["RouterUpdated"].ID: + return _TokenPool.ParseRouterUpdated(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (TokenPoolAllowListAdd) Topic() common.Hash { + return common.HexToHash("0x2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d8") +} + +func (TokenPoolAllowListRemove) Topic() common.Hash { + return common.HexToHash("0x800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf7566") +} + +func (TokenPoolBurned) Topic() common.Hash { + return common.HexToHash("0x696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df7") +} + +func (TokenPoolChainAdded) Topic() common.Hash { + return common.HexToHash("0x8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c2") +} + +func (TokenPoolChainConfigured) Topic() common.Hash { + return common.HexToHash("0x0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b") +} + +func (TokenPoolChainRemoved) Topic() common.Hash { + return common.HexToHash("0x5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d859916") +} + +func (TokenPoolConfigChanged) Topic() common.Hash { + return common.HexToHash("0x9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19") +} + +func (TokenPoolLocked) Topic() common.Hash { + return common.HexToHash("0x9f1ec8c880f76798e7b793325d625e9b60e4082a553c98f42b6cda368dd60008") +} + +func (TokenPoolMinted) Topic() common.Hash { + return common.HexToHash("0x9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0") +} + +func (TokenPoolOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (TokenPoolOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (TokenPoolRateLimitAdminSet) Topic() common.Hash { + return common.HexToHash("0x44676b5284b809a22248eba0da87391d79098be38bb03154be88a58bf4d09174") +} + +func (TokenPoolReleased) Topic() common.Hash { + return common.HexToHash("0x2d87480f50083e2b2759522a8fdda59802650a8055e609a7772cf70c07748f52") +} + +func (TokenPoolRemotePoolAdded) Topic() common.Hash { + return common.HexToHash("0x7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea") +} + +func (TokenPoolRemotePoolRemoved) Topic() common.Hash { + return common.HexToHash("0x52d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d76") +} + +func (TokenPoolRouterUpdated) Topic() common.Hash { + return common.HexToHash("0x02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f1684") +} + +func (_TokenPool *TokenPool) Address() common.Address { + return _TokenPool.address +} + +type TokenPoolInterface interface { + GetAllowList(opts *bind.CallOpts) ([]common.Address, error) + + GetAllowListEnabled(opts *bind.CallOpts) (bool, error) + + GetCurrentInboundRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64) (RateLimiterTokenBucket, error) + + GetCurrentOutboundRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64) (RateLimiterTokenBucket, error) + + GetRateLimitAdmin(opts *bind.CallOpts) (common.Address, error) + + GetRemotePools(opts *bind.CallOpts, remoteChainSelector uint64) ([][]byte, error) + + GetRemoteToken(opts *bind.CallOpts, remoteChainSelector uint64) ([]byte, error) + + GetRmnProxy(opts *bind.CallOpts) (common.Address, error) + + GetRouter(opts *bind.CallOpts) (common.Address, error) + + GetSupportedChains(opts *bind.CallOpts) ([]uint64, error) + + GetToken(opts *bind.CallOpts) (common.Address, error) + + GetTokenDecimals(opts *bind.CallOpts) (uint8, error) + + IsRemotePool(opts *bind.CallOpts, remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) + + IsSupportedChain(opts *bind.CallOpts, remoteChainSelector uint64) (bool, error) + + IsSupportedToken(opts *bind.CallOpts, token common.Address) (bool, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + AddRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) + + ApplyAllowListUpdates(opts *bind.TransactOpts, removes []common.Address, adds []common.Address) (*types.Transaction, error) + + ApplyChainUpdates(opts *bind.TransactOpts, remoteChainSelectorsToRemove []uint64, chainsToAdd []TokenPoolChainUpdate) (*types.Transaction, error) + + LockOrBurn(opts *bind.TransactOpts, lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) + + ReleaseOrMint(opts *bind.TransactOpts, releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) + + RemoveRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) + + SetChainRateLimiterConfig(opts *bind.TransactOpts, remoteChainSelector uint64, outboundConfig RateLimiterConfig, inboundConfig RateLimiterConfig) (*types.Transaction, error) + + SetRateLimitAdmin(opts *bind.TransactOpts, rateLimitAdmin common.Address) (*types.Transaction, error) + + SetRouter(opts *bind.TransactOpts, newRouter common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + FilterAllowListAdd(opts *bind.FilterOpts) (*TokenPoolAllowListAddIterator, error) + + WatchAllowListAdd(opts *bind.WatchOpts, sink chan<- *TokenPoolAllowListAdd) (event.Subscription, error) + + ParseAllowListAdd(log types.Log) (*TokenPoolAllowListAdd, error) + + FilterAllowListRemove(opts *bind.FilterOpts) (*TokenPoolAllowListRemoveIterator, error) + + WatchAllowListRemove(opts *bind.WatchOpts, sink chan<- *TokenPoolAllowListRemove) (event.Subscription, error) + + ParseAllowListRemove(log types.Log) (*TokenPoolAllowListRemove, error) + + FilterBurned(opts *bind.FilterOpts, sender []common.Address) (*TokenPoolBurnedIterator, error) + + WatchBurned(opts *bind.WatchOpts, sink chan<- *TokenPoolBurned, sender []common.Address) (event.Subscription, error) + + ParseBurned(log types.Log) (*TokenPoolBurned, error) + + FilterChainAdded(opts *bind.FilterOpts) (*TokenPoolChainAddedIterator, error) + + WatchChainAdded(opts *bind.WatchOpts, sink chan<- *TokenPoolChainAdded) (event.Subscription, error) + + ParseChainAdded(log types.Log) (*TokenPoolChainAdded, error) + + FilterChainConfigured(opts *bind.FilterOpts) (*TokenPoolChainConfiguredIterator, error) + + WatchChainConfigured(opts *bind.WatchOpts, sink chan<- *TokenPoolChainConfigured) (event.Subscription, error) + + ParseChainConfigured(log types.Log) (*TokenPoolChainConfigured, error) + + FilterChainRemoved(opts *bind.FilterOpts) (*TokenPoolChainRemovedIterator, error) + + WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *TokenPoolChainRemoved) (event.Subscription, error) + + ParseChainRemoved(log types.Log) (*TokenPoolChainRemoved, error) + + FilterConfigChanged(opts *bind.FilterOpts) (*TokenPoolConfigChangedIterator, error) + + WatchConfigChanged(opts *bind.WatchOpts, sink chan<- *TokenPoolConfigChanged) (event.Subscription, error) + + ParseConfigChanged(log types.Log) (*TokenPoolConfigChanged, error) + + FilterLocked(opts *bind.FilterOpts, sender []common.Address) (*TokenPoolLockedIterator, error) + + WatchLocked(opts *bind.WatchOpts, sink chan<- *TokenPoolLocked, sender []common.Address) (event.Subscription, error) + + ParseLocked(log types.Log) (*TokenPoolLocked, error) + + FilterMinted(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*TokenPoolMintedIterator, error) + + WatchMinted(opts *bind.WatchOpts, sink chan<- *TokenPoolMinted, sender []common.Address, recipient []common.Address) (event.Subscription, error) + + ParseMinted(log types.Log) (*TokenPoolMinted, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*TokenPoolOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *TokenPoolOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*TokenPoolOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*TokenPoolOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *TokenPoolOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*TokenPoolOwnershipTransferred, error) + + FilterRateLimitAdminSet(opts *bind.FilterOpts) (*TokenPoolRateLimitAdminSetIterator, error) + + WatchRateLimitAdminSet(opts *bind.WatchOpts, sink chan<- *TokenPoolRateLimitAdminSet) (event.Subscription, error) + + ParseRateLimitAdminSet(log types.Log) (*TokenPoolRateLimitAdminSet, error) + + FilterReleased(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*TokenPoolReleasedIterator, error) + + WatchReleased(opts *bind.WatchOpts, sink chan<- *TokenPoolReleased, sender []common.Address, recipient []common.Address) (event.Subscription, error) + + ParseReleased(log types.Log) (*TokenPoolReleased, error) + + FilterRemotePoolAdded(opts *bind.FilterOpts, remoteChainSelector []uint64) (*TokenPoolRemotePoolAddedIterator, error) + + WatchRemotePoolAdded(opts *bind.WatchOpts, sink chan<- *TokenPoolRemotePoolAdded, remoteChainSelector []uint64) (event.Subscription, error) + + ParseRemotePoolAdded(log types.Log) (*TokenPoolRemotePoolAdded, error) + + FilterRemotePoolRemoved(opts *bind.FilterOpts, remoteChainSelector []uint64) (*TokenPoolRemotePoolRemovedIterator, error) + + WatchRemotePoolRemoved(opts *bind.WatchOpts, sink chan<- *TokenPoolRemotePoolRemoved, remoteChainSelector []uint64) (event.Subscription, error) + + ParseRemotePoolRemoved(log types.Log) (*TokenPoolRemotePoolRemoved, error) + + FilterRouterUpdated(opts *bind.FilterOpts) (*TokenPoolRouterUpdatedIterator, error) + + WatchRouterUpdated(opts *bind.WatchOpts, sink chan<- *TokenPoolRouterUpdated) (event.Subscription, error) + + ParseRouterUpdated(log types.Log) (*TokenPoolRouterUpdated, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var TokenPoolZKBin string = ("0x0000008003000039000000400030043f0000000100200190000000120000c13d0000000a001001980000001a0000613d000000000101043b000000e0011002700000000b0010009c0000000e0000613d0000000c0010009c0000001c0000613d0000000d0010009c0000001a0000c13d0000002001000039000000800010043f0000000f01000041000000210001042e0000000001000416000000000001004b0000001a0000c13d0000002001000039000001000010044300000120000004430000000901000041000000210001042e000000000100001900000022000104300000000e01000041000000800010043f0000000f01000041000000210001042e0000002000000432000000210001042e00000022000104300000000000000000000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000fffffffc000000000000000000000000000000000000000000000000000000000000000000000000000000000ccb1dfe00000000000000000000000000000000000000000000000000000000cd30939a00000000000000000000000000000000000000000000000000000000b7f41920aff2afbf0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000008000000000000000000000000000000000000000000000000000000000000000000000000000000000") diff --git a/core/gethwrappers/ccip/generated_zks/usdc_reader_tester/usdc_reader_tester.go b/core/gethwrappers/ccip/generated_zks/usdc_reader_tester/usdc_reader_tester.go new file mode 100644 index 00000000000..ca61d391a58 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/usdc_reader_tester/usdc_reader_tester.go @@ -0,0 +1,337 @@ +package usdc_reader_tester + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var USDCReaderTesterMetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"sourceDomain\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destinationDomain\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"recipient\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"destinationCaller\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sender\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"messageBody\",\"type\":\"bytes\"}],\"name\":\"emitMessageSent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b5061032c806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c806362826f1814610030575b600080fd5b61004361003e366004610129565b610045565b005b600061008d8a8a8a87898c8c8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506100d292505050565b90507f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036816040516100be9190610228565b60405180910390a150505050505050505050565b606088888888888888886040516020016100f3989796959493929190610279565b604051602081830303815290604052905098975050505050505050565b803563ffffffff8116811461012457600080fd5b919050565b60008060008060008060008060006101008a8c03121561014857600080fd5b6101518a610110565b985061015f60208b01610110565b975061016d60408b01610110565b965060608a0135955060808a0135945060a08a0135935060c08a013567ffffffffffffffff80821682146101a057600080fd5b90935060e08b013590808211156101b657600080fd5b818c0191508c601f8301126101ca57600080fd5b8135818111156101d957600080fd5b8d60208285010111156101eb57600080fd5b6020830194508093505050509295985092959850929598565b60005b8381101561021f578181015183820152602001610207565b50506000910152565b6020815260008251806020840152610247816040850160208701610204565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60007fffffffff00000000000000000000000000000000000000000000000000000000808b60e01b168352808a60e01b166004840152808960e01b166008840152507fffffffffffffffff0000000000000000000000000000000000000000000000008760c01b16600c830152856014830152846034830152836054830152825161030b816074850160208701610204565b91909101607401999850505050505050505056fea164736f6c6343000818000a", +} + +var USDCReaderTesterABI = USDCReaderTesterMetaData.ABI + +var USDCReaderTesterBin = USDCReaderTesterMetaData.Bin + +func DeployUSDCReaderTester(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *generated_zks.Transaction, *USDCReaderTester, error) { + parsed, err := USDCReaderTesterMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(USDCReaderTesterZKBin), backend) + contractReturn := &USDCReaderTester{address: address, abi: *parsed, USDCReaderTesterCaller: USDCReaderTesterCaller{contract: contractBind}, USDCReaderTesterTransactor: USDCReaderTesterTransactor{contract: contractBind}, USDCReaderTesterFilterer: USDCReaderTesterFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(USDCReaderTesterBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &USDCReaderTester{address: address, abi: *parsed, USDCReaderTesterCaller: USDCReaderTesterCaller{contract: contract}, USDCReaderTesterTransactor: USDCReaderTesterTransactor{contract: contract}, USDCReaderTesterFilterer: USDCReaderTesterFilterer{contract: contract}}, nil +} + +type USDCReaderTester struct { + address common.Address + abi abi.ABI + USDCReaderTesterCaller + USDCReaderTesterTransactor + USDCReaderTesterFilterer +} + +type USDCReaderTesterCaller struct { + contract *bind.BoundContract +} + +type USDCReaderTesterTransactor struct { + contract *bind.BoundContract +} + +type USDCReaderTesterFilterer struct { + contract *bind.BoundContract +} + +type USDCReaderTesterSession struct { + Contract *USDCReaderTester + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type USDCReaderTesterCallerSession struct { + Contract *USDCReaderTesterCaller + CallOpts bind.CallOpts +} + +type USDCReaderTesterTransactorSession struct { + Contract *USDCReaderTesterTransactor + TransactOpts bind.TransactOpts +} + +type USDCReaderTesterRaw struct { + Contract *USDCReaderTester +} + +type USDCReaderTesterCallerRaw struct { + Contract *USDCReaderTesterCaller +} + +type USDCReaderTesterTransactorRaw struct { + Contract *USDCReaderTesterTransactor +} + +func NewUSDCReaderTester(address common.Address, backend bind.ContractBackend) (*USDCReaderTester, error) { + abi, err := abi.JSON(strings.NewReader(USDCReaderTesterABI)) + if err != nil { + return nil, err + } + contract, err := bindUSDCReaderTester(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &USDCReaderTester{address: address, abi: abi, USDCReaderTesterCaller: USDCReaderTesterCaller{contract: contract}, USDCReaderTesterTransactor: USDCReaderTesterTransactor{contract: contract}, USDCReaderTesterFilterer: USDCReaderTesterFilterer{contract: contract}}, nil +} + +func NewUSDCReaderTesterCaller(address common.Address, caller bind.ContractCaller) (*USDCReaderTesterCaller, error) { + contract, err := bindUSDCReaderTester(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &USDCReaderTesterCaller{contract: contract}, nil +} + +func NewUSDCReaderTesterTransactor(address common.Address, transactor bind.ContractTransactor) (*USDCReaderTesterTransactor, error) { + contract, err := bindUSDCReaderTester(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &USDCReaderTesterTransactor{contract: contract}, nil +} + +func NewUSDCReaderTesterFilterer(address common.Address, filterer bind.ContractFilterer) (*USDCReaderTesterFilterer, error) { + contract, err := bindUSDCReaderTester(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &USDCReaderTesterFilterer{contract: contract}, nil +} + +func bindUSDCReaderTester(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := USDCReaderTesterMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_USDCReaderTester *USDCReaderTesterRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _USDCReaderTester.Contract.USDCReaderTesterCaller.contract.Call(opts, result, method, params...) +} + +func (_USDCReaderTester *USDCReaderTesterRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _USDCReaderTester.Contract.USDCReaderTesterTransactor.contract.Transfer(opts) +} + +func (_USDCReaderTester *USDCReaderTesterRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _USDCReaderTester.Contract.USDCReaderTesterTransactor.contract.Transact(opts, method, params...) +} + +func (_USDCReaderTester *USDCReaderTesterCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _USDCReaderTester.Contract.contract.Call(opts, result, method, params...) +} + +func (_USDCReaderTester *USDCReaderTesterTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _USDCReaderTester.Contract.contract.Transfer(opts) +} + +func (_USDCReaderTester *USDCReaderTesterTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _USDCReaderTester.Contract.contract.Transact(opts, method, params...) +} + +func (_USDCReaderTester *USDCReaderTesterTransactor) EmitMessageSent(opts *bind.TransactOpts, version uint32, sourceDomain uint32, destinationDomain uint32, recipient [32]byte, destinationCaller [32]byte, sender [32]byte, nonce uint64, messageBody []byte) (*types.Transaction, error) { + return _USDCReaderTester.contract.Transact(opts, "emitMessageSent", version, sourceDomain, destinationDomain, recipient, destinationCaller, sender, nonce, messageBody) +} + +func (_USDCReaderTester *USDCReaderTesterSession) EmitMessageSent(version uint32, sourceDomain uint32, destinationDomain uint32, recipient [32]byte, destinationCaller [32]byte, sender [32]byte, nonce uint64, messageBody []byte) (*types.Transaction, error) { + return _USDCReaderTester.Contract.EmitMessageSent(&_USDCReaderTester.TransactOpts, version, sourceDomain, destinationDomain, recipient, destinationCaller, sender, nonce, messageBody) +} + +func (_USDCReaderTester *USDCReaderTesterTransactorSession) EmitMessageSent(version uint32, sourceDomain uint32, destinationDomain uint32, recipient [32]byte, destinationCaller [32]byte, sender [32]byte, nonce uint64, messageBody []byte) (*types.Transaction, error) { + return _USDCReaderTester.Contract.EmitMessageSent(&_USDCReaderTester.TransactOpts, version, sourceDomain, destinationDomain, recipient, destinationCaller, sender, nonce, messageBody) +} + +type USDCReaderTesterMessageSentIterator struct { + Event *USDCReaderTesterMessageSent + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *USDCReaderTesterMessageSentIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(USDCReaderTesterMessageSent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(USDCReaderTesterMessageSent) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *USDCReaderTesterMessageSentIterator) Error() error { + return it.fail +} + +func (it *USDCReaderTesterMessageSentIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type USDCReaderTesterMessageSent struct { + Arg0 []byte + Raw types.Log +} + +func (_USDCReaderTester *USDCReaderTesterFilterer) FilterMessageSent(opts *bind.FilterOpts) (*USDCReaderTesterMessageSentIterator, error) { + + logs, sub, err := _USDCReaderTester.contract.FilterLogs(opts, "MessageSent") + if err != nil { + return nil, err + } + return &USDCReaderTesterMessageSentIterator{contract: _USDCReaderTester.contract, event: "MessageSent", logs: logs, sub: sub}, nil +} + +func (_USDCReaderTester *USDCReaderTesterFilterer) WatchMessageSent(opts *bind.WatchOpts, sink chan<- *USDCReaderTesterMessageSent) (event.Subscription, error) { + + logs, sub, err := _USDCReaderTester.contract.WatchLogs(opts, "MessageSent") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(USDCReaderTesterMessageSent) + if err := _USDCReaderTester.contract.UnpackLog(event, "MessageSent", 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 +} + +func (_USDCReaderTester *USDCReaderTesterFilterer) ParseMessageSent(log types.Log) (*USDCReaderTesterMessageSent, error) { + event := new(USDCReaderTesterMessageSent) + if err := _USDCReaderTester.contract.UnpackLog(event, "MessageSent", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (_USDCReaderTester *USDCReaderTester) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _USDCReaderTester.abi.Events["MessageSent"].ID: + return _USDCReaderTester.ParseMessageSent(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (USDCReaderTesterMessageSent) Topic() common.Hash { + return common.HexToHash("0x8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036") +} + +func (_USDCReaderTester *USDCReaderTester) Address() common.Address { + return _USDCReaderTester.address +} + +type USDCReaderTesterInterface interface { + EmitMessageSent(opts *bind.TransactOpts, version uint32, sourceDomain uint32, destinationDomain uint32, recipient [32]byte, destinationCaller [32]byte, sender [32]byte, nonce uint64, messageBody []byte) (*types.Transaction, error) + + FilterMessageSent(opts *bind.FilterOpts) (*USDCReaderTesterMessageSentIterator, error) + + WatchMessageSent(opts *bind.WatchOpts, sink chan<- *USDCReaderTesterMessageSent) (event.Subscription, error) + + ParseMessageSent(log types.Log) (*USDCReaderTesterMessageSent, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var USDCReaderTesterZKBin string = ("0x0000008003000039000000400030043f0000000100200190000000b20000c13d00000060021002700000003302200197000000040020008c000000ba0000413d000000000301043b0000003503300197000000360030009c000000ba0000c13d000001040020008c000000ba0000413d0000000003000416000000000003004b000000ba0000c13d0000000403100370000000000303043b000000330030009c000000ba0000213d0000002404100370000000000404043b000000330040009c000000ba0000213d0000004405100370000000000505043b000000330050009c000000ba0000213d000000c406100370000000000606043b000000370060009c000000ba0000213d000000e407100370000000000907043b000000370090009c000000ba0000213d0000002307900039000000000027004b000000ba0000813d0000000408900039000000000781034f000000000707043b000000370070009c000000ba0000213d00000000097900190000002409900039000000000029004b000000ba0000213d0000001f097000390000003f099001970000003f099000390000003f09900197000000380090009c000000bc0000813d0000008009900039000000400090043f0000002008800039000000000981034f000000800070043f0000003f0a7001980000001f0b70018f000000a008a00039000000460000613d000000a00c000039000000000d09034f00000000de0d043c000000000cec043600000000008c004b000000420000c13d00000000000b004b000000530000613d0000000009a9034f000000030ab00210000000000b080433000000000bab01cf000000000bab022f000000000909043b000001000aa000890000000009a9022f0000000009a901cf0000000009b9019f0000000000980435000000a0077000390000000000070435000000e008300210000000400700043d00000020037000390000000000830435000000e00440021000000024087000390000000000480435000000e00450021000000028057000390000000000450435000000c0046002100000002c057000390000000000450435000000a404100370000000000404043b000000340570003900000000004504350000006404100370000000000404043b000000540570003900000000004504350000008401100370000000000101043b000000740470003900000000001404350000009404700039000000800100043d000000000001004b0000007a0000613d00000000050000190000000006450019000000a008500039000000000808043300000000008604350000002005500039000000000015004b000000730000413d0000000004410019000000000004043500000074041000390000000000470435000000b3011000390000003f041001970000000001740019000000000041004b00000000040000390000000104004039000000370010009c000000bc0000213d0000000100400190000000bc0000c13d000000400010043f00000020040000390000000005410436000000000407043300000000004504350000004005100039000000000004004b000000980000613d000000000600001900000000075600190000000008360019000000000808043300000000008704350000002006600039000000000046004b000000910000413d0000001f034000390000003f023001970000000003540019000000000003043500000040022000390000006003200210000000390020009c0000003a03008041000000330010009c00000033010080410000004001100210000000000113019f0000000002000414000000330020009c0000003302008041000000c00220021000000000012100190000003b0110009a0000800d0200003900000001030000390000003c0400004100c700c20000040f0000000100200190000000ba0000613d0000000001000019000000c80001042e0000000001000416000000000001004b000000ba0000c13d0000002001000039000001000010044300000120000004430000003401000041000000c80001042e0000000001000019000000c9000104300000003d01000041000000000010043f0000004101000039000000040010043f0000003e01000041000000c900010430000000c5002104210000000102000039000000000001042d0000000002000019000000000001042d000000c700000432000000c80001042e000000c9000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff0000000200000000000000000000000000000040000001000000000000000000ffffffff0000000000000000000000000000000000000000000000000000000062826f1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffff80000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000ffffffff000000000000000000000000fe000000000000000000000000000000000000000000000000000000000000008c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b0364e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000000000000000000000000000000000000000000000000000000000000") diff --git a/core/gethwrappers/ccip/generated_zks/usdc_token_pool/usdc_token_pool.go b/core/gethwrappers/ccip/generated_zks/usdc_token_pool/usdc_token_pool.go new file mode 100644 index 00000000000..f042720a1c6 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/usdc_token_pool/usdc_token_pool.go @@ -0,0 +1,3556 @@ +package usdc_token_pool + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/ccip/generated_zks" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type PoolLockOrBurnInV1 struct { + Receiver []byte + RemoteChainSelector uint64 + OriginalSender common.Address + Amount *big.Int + LocalToken common.Address +} + +type PoolLockOrBurnOutV1 struct { + DestTokenAddress []byte + DestPoolData []byte +} + +type PoolReleaseOrMintInV1 struct { + OriginalSender []byte + RemoteChainSelector uint64 + Receiver common.Address + Amount *big.Int + LocalToken common.Address + SourcePoolAddress []byte + SourcePoolData []byte + OffchainTokenData []byte +} + +type PoolReleaseOrMintOutV1 struct { + DestinationAmount *big.Int +} + +type RateLimiterConfig struct { + IsEnabled bool + Capacity *big.Int + Rate *big.Int +} + +type RateLimiterTokenBucket struct { + Tokens *big.Int + LastUpdated uint32 + IsEnabled bool + Capacity *big.Int + Rate *big.Int +} + +type TokenPoolChainUpdate struct { + RemoteChainSelector uint64 + RemotePoolAddresses [][]byte + RemoteTokenAddress []byte + OutboundRateLimiterConfig RateLimiterConfig + InboundRateLimiterConfig RateLimiterConfig +} + +type USDCTokenPoolDomain struct { + AllowedCaller [32]byte + DomainIdentifier uint32 + Enabled bool +} + +type USDCTokenPoolDomainUpdate struct { + AllowedCaller [32]byte + DomainIdentifier uint32 + DestChainSelector uint64 + Enabled bool +} + +var USDCTokenPoolMetaData = &bind.MetaData{ + ABI: "[{\"inputs\":[{\"internalType\":\"contractITokenMessenger\",\"name\":\"tokenMessenger\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"allowlist\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"AggregateValueMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"}],\"name\":\"AggregateValueRateLimitReached\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllowListNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BucketOverfilled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"CallerIsNotARampOnRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotTransferToSelf\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"DisabledNonZeroRateLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"expected\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"actual\",\"type\":\"uint8\"}],\"name\":\"InvalidDecimalArgs\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"got\",\"type\":\"uint32\"}],\"name\":\"InvalidDestinationDomain\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"allowedCaller\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"domainIdentifier\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"internalType\":\"structUSDCTokenPool.DomainUpdate\",\"name\":\"domain\",\"type\":\"tuple\"}],\"name\":\"InvalidDomain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"}],\"name\":\"InvalidMessageVersion\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"expected\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"got\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"rateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"InvalidRateLimitRate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"}],\"name\":\"InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolData\",\"type\":\"bytes\"}],\"name\":\"InvalidRemoteChainDecimals\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidRemotePoolForChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"expected\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"got\",\"type\":\"uint32\"}],\"name\":\"InvalidSourceDomain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidSourcePoolAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"}],\"name\":\"InvalidTokenMessengerVersion\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustBeProposedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"NonExistentChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"remoteDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"localDecimals\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"remoteAmount\",\"type\":\"uint256\"}],\"name\":\"OverflowDetected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OwnerCannotBeZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"PoolAlreadyAdded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RateLimitMustBeDisabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"capacity\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenMaxCapacityExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"minWaitInSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"TokenRateLimitReached\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"domain\",\"type\":\"uint64\"}],\"name\":\"UnknownDomain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnlockingUSDCFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListAdd\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AllowListRemove\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Burned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remoteToken\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"indexed\":false,\"internalType\":\"structRateLimiter.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"tokenMessenger\",\"type\":\"address\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"allowedCaller\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"domainIdentifier\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"structUSDCTokenPool.DomainUpdate[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"name\":\"DomainsSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Locked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Minted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rateLimitAdmin\",\"type\":\"address\"}],\"name\":\"RateLimitAdminSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Released\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"RemotePoolAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"RemotePoolRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldRouter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"RouterUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokens\",\"type\":\"uint256\"}],\"name\":\"TokensConsumed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"SUPPORTED_USDC_VERSION\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"addRemotePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"removes\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"adds\",\"type\":\"address[]\"}],\"name\":\"applyAllowListUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"remoteChainSelectorsToRemove\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes[]\",\"name\":\"remotePoolAddresses\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes\",\"name\":\"remoteTokenAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundRateLimiterConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundRateLimiterConfig\",\"type\":\"tuple\"}],\"internalType\":\"structTokenPool.ChainUpdate[]\",\"name\":\"chainsToAdd\",\"type\":\"tuple[]\"}],\"name\":\"applyChainUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowList\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowListEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentInboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getCurrentOutboundRateLimiterState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint128\",\"name\":\"tokens\",\"type\":\"uint128\"},{\"internalType\":\"uint32\",\"name\":\"lastUpdated\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.TokenBucket\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"getDomain\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"allowedCaller\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"domainIdentifier\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"internalType\":\"structUSDCTokenPool.Domain\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRateLimitAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemotePools\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"getRemoteToken\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRmnProxy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSupportedChains\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getToken\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenDecimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"decimals\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"i_localDomainIdentifier\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"i_messageTransmitter\",\"outputs\":[{\"internalType\":\"contractIMessageTransmitter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"i_tokenMessenger\",\"outputs\":[{\"internalType\":\"contractITokenMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"isRemotePool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"}],\"name\":\"isSupportedChain\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"isSupportedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"originalSender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"internalType\":\"structPool.LockOrBurnInV1\",\"name\":\"lockOrBurnIn\",\"type\":\"tuple\"}],\"name\":\"lockOrBurn\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"destPoolData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.LockOrBurnOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"originalSender\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sourcePoolData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainTokenData\",\"type\":\"bytes\"}],\"internalType\":\"structPool.ReleaseOrMintInV1\",\"name\":\"releaseOrMintIn\",\"type\":\"tuple\"}],\"name\":\"releaseOrMint\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"destinationAmount\",\"type\":\"uint256\"}],\"internalType\":\"structPool.ReleaseOrMintOutV1\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"remotePoolAddress\",\"type\":\"bytes\"}],\"name\":\"removeRemotePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"remoteChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"outboundConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint128\",\"name\":\"capacity\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"rate\",\"type\":\"uint128\"}],\"internalType\":\"structRateLimiter.Config\",\"name\":\"inboundConfig\",\"type\":\"tuple\"}],\"name\":\"setChainRateLimiterConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"allowedCaller\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"domainIdentifier\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"internalType\":\"structUSDCTokenPool.DomainUpdate[]\",\"name\":\"domains\",\"type\":\"tuple[]\"}],\"name\":\"setDomains\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rateLimitAdmin\",\"type\":\"address\"}],\"name\":\"setRateLimitAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newRouter\",\"type\":\"address\"}],\"name\":\"setRouter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x6101606040523480156200001257600080fd5b50604051620054b7380380620054b7833981016040819052620000359162000b93565b836006848484336000816200005d57604051639b15e16f60e01b815260040160405180910390fd5b600180546001600160a01b0319166001600160a01b03848116919091179091558116156200009057620000908162000493565b50506001600160a01b0385161580620000b057506001600160a01b038116155b80620000c357506001600160a01b038216155b15620000e2576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b03808616608081905290831660c0526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa92505050801562000152575060408051601f3d908101601f191682019092526200014f9181019062000cb9565b60015b1562000193578060ff168560ff161462000191576040516332ad3e0760e11b815260ff8087166004830152821660248201526044015b60405180910390fd5b505b60ff841660a052600480546001600160a01b0319166001600160a01b038316179055825115801560e052620001dd57604080516000815260208101909152620001dd90846200050d565b5050506001600160a01b03871691506200020c9050576040516306b7c75960e31b815260040160405180910390fd5b6000856001600160a01b0316632c1219216040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000273919062000ce5565b90506000816001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002dc919062000d05565b905063ffffffff8116156200030d576040516334697c6b60e11b815263ffffffff8216600482015260240162000188565b6000876001600160a01b0316639cdbb1816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200034e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000374919062000d05565b905063ffffffff811615620003a5576040516316ba39c560e31b815263ffffffff8216600482015260240162000188565b6001600160a01b038089166101005283166101208190526040805163234d8e3d60e21b81529051638d3638f4916004808201926020929091908290030181865afa158015620003f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041e919062000d05565b63ffffffff16610140526101005160805162000449916001600160a01b03909116906000196200066a565b6040516001600160a01b03891681527f2e902d38f15b233cbb63711add0fca4545334d3a169d60c0a616494d7eea95449060200160405180910390a1505050505050505062000e52565b336001600160a01b03821603620004bd57604051636d6c4ee560e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60e0516200052e576040516335f4a7b360e01b815260040160405180910390fd5b60005b8251811015620005b957600083828151811062000552576200055262000d2d565b602090810291909101015190506200056c60028262000750565b15620005af576040516001600160a01b03821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b5060010162000531565b5060005b815181101562000665576000828281518110620005de57620005de62000d2d565b6020026020010151905060006001600160a01b0316816001600160a01b0316036200060a57506200065c565b6200061760028262000770565b156200065a576040516001600160a01b03821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b600101620005bd565b505050565b604051636eb1769f60e11b81523060048201526001600160a01b038381166024830152600091839186169063dd62ed3e90604401602060405180830381865afa158015620006bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006e2919062000d43565b620006ee919062000d73565b604080516001600160a01b038616602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b179091529192506200074a918691906200078716565b50505050565b600062000767836001600160a01b03841662000858565b90505b92915050565b600062000767836001600160a01b0384166200095c565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490820152600090620007d6906001600160a01b038516908490620009ae565b805190915015620006655780806020019051810190620007f7919062000d89565b620006655760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000188565b60008181526001830160205260408120548015620009515760006200087f60018362000dad565b8554909150600090620008959060019062000dad565b905080821462000901576000866000018281548110620008b957620008b962000d2d565b9060005260206000200154905080876000018481548110620008df57620008df62000d2d565b6000918252602080832090910192909255918252600188019052604090208390555b855486908062000915576200091562000dc3565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506200076a565b60009150506200076a565b6000818152600183016020526040812054620009a5575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200076a565b5060006200076a565b6060620009bf8484600085620009c7565b949350505050565b60608247101562000a2a5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000188565b600080866001600160a01b0316858760405162000a48919062000dff565b60006040518083038185875af1925050503d806000811462000a87576040519150601f19603f3d011682016040523d82523d6000602084013e62000a8c565b606091505b50909250905062000aa08783838762000aab565b979650505050505050565b6060831562000b1f57825160000362000b17576001600160a01b0385163b62000b175760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000188565b5081620009bf565b620009bf838381511562000b365781518083602001fd5b8060405162461bcd60e51b815260040162000188919062000e1d565b6001600160a01b038116811462000b6857600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b805162000b8e8162000b52565b919050565b600080600080600060a0868803121562000bac57600080fd5b855162000bb98162000b52565b8095505060208087015162000bce8162000b52565b60408801519095506001600160401b038082111562000bec57600080fd5b818901915089601f83011262000c0157600080fd5b81518181111562000c165762000c1662000b6b565b8060051b604051601f19603f8301168101818110858211171562000c3e5762000c3e62000b6b565b60405291825284820192508381018501918c83111562000c5d57600080fd5b938501935b8285101562000c865762000c768562000b81565b8452938501939285019262000c62565b80985050505050505062000c9d6060870162000b81565b915062000cad6080870162000b81565b90509295509295909350565b60006020828403121562000ccc57600080fd5b815160ff8116811462000cde57600080fd5b9392505050565b60006020828403121562000cf857600080fd5b815162000cde8162000b52565b60006020828403121562000d1857600080fd5b815163ffffffff8116811462000cde57600080fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121562000d5657600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156200076a576200076a62000d5d565b60006020828403121562000d9c57600080fd5b8151801515811462000cde57600080fd5b818103818111156200076a576200076a62000d5d565b634e487b7160e01b600052603160045260246000fd5b60005b8381101562000df657818101518382015260200162000ddc565b50506000910152565b6000825162000e1381846020870162000dd9565b9190910192915050565b602081526000825180602084015262000e3e81604085016020870162000dd9565b601f01601f19169190910160400192915050565b60805160a05160c05160e0516101005161012051610140516145af62000f08600039600081816104170152818161113c01528181612107015261216501526000818161072b0152610a750152600081816103dd01526110520152600081816106dc0152818161221d0152612bcc01526000818161061801528181611eb40152612509015260006103660152600081816102cd015281816103220152818161101c01528181612b620152612db701526145af6000f3fe608060405234801561001057600080fd5b50600436106102405760003560e01c80639a4575b911610145578063c4bffe2b116100bd578063dfadfa351161008c578063e8a1da1711610071578063e8a1da1714610700578063f2fde38b14610713578063fbf84dd71461072657600080fd5b8063dfadfa351461063c578063e0351e13146106da57600080fd5b8063c4bffe2b146105db578063c75eea9c146105f0578063cf7401f314610603578063dc0bd9711461061657600080fd5b8063acfecf9111610114578063b0f479a1116100f9578063b0f479a114610597578063b7946580146105b5578063c0d78655146105c857600080fd5b8063acfecf9114610515578063af58d59f1461052857600080fd5b80639a4575b9146104b85780639fdf13ff146104d8578063a42a7b8b146104e0578063a7cd63b71461050057600080fd5b806354c8a4f3116101d85780636d3d1a58116101a75780637d54534e1161018c5780637d54534e146104745780638926f54f146104875780638da5cb5b1461049a57600080fd5b80636d3d1a581461044e57806379ba50971461046c57600080fd5b806354c8a4f3146103c55780636155cda0146103d857806362ddd3c4146103ff5780636b716b0d1461041257600080fd5b8063240028e811610214578063240028e81461031257806324f65ee71461035f57806339077537146103905780634c5ef0ed146103b257600080fd5b806241d3c11461024557806301ffc9a71461025a578063181f5a771461028257806321df0da7146102cb575b600080fd5b610258610253366004613577565b61074d565b005b61026d6102683660046135ec565b6108ea565b60405190151581526020015b60405180910390f35b6102be6040518060400160405280601381526020017f55534443546f6b656e506f6f6c20312e352e310000000000000000000000000081525081565b6040516102799190613692565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610279565b61026d6103203660046136c7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff90811691161490565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610279565b6103a361039e3660046136e4565b6109cf565b60405190518152602001610279565b61026d6103c0366004613736565b610bb4565b6102586103d3366004613807565b610bfe565b6102ed7f000000000000000000000000000000000000000000000000000000000000000081565b61025861040d366004613736565b610c79565b6104397f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610279565b60095473ffffffffffffffffffffffffffffffffffffffff166102ed565b610258610d11565b6102586104823660046136c7565b610ddf565b61026d610495366004613873565b610e60565b60015473ffffffffffffffffffffffffffffffffffffffff166102ed565b6104cb6104c6366004613890565b610e77565b60405161027991906138cb565b610439600081565b6104f36104ee366004613873565b6111b7565b6040516102799190613922565b610508611322565b60405161027991906139a4565b610258610523366004613736565b611333565b61053b610536366004613873565b61144b565b604051610279919081516fffffffffffffffffffffffffffffffff908116825260208084015163ffffffff1690830152604080840151151590830152606080840151821690830152608092830151169181019190915260a00190565b60045473ffffffffffffffffffffffffffffffffffffffff166102ed565b6102be6105c3366004613873565b611520565b6102586105d63660046136c7565b6115d0565b6105e36116a4565b60405161027991906139fe565b61053b6105fe366004613873565b61175c565b610258610611366004613b8b565b61182e565b7f00000000000000000000000000000000000000000000000000000000000000006102ed565b6106b061064a366004613873565b60408051606080820183526000808352602080840182905292840181905267ffffffffffffffff949094168452600a82529282902082519384018352805484526001015463ffffffff811691840191909152640100000000900460ff1615159082015290565b604080518251815260208084015163ffffffff169082015291810151151590820152606001610279565b7f000000000000000000000000000000000000000000000000000000000000000061026d565b61025861070e366004613807565b6118b2565b6102586107213660046136c7565b611dc4565b6102ed7f000000000000000000000000000000000000000000000000000000000000000081565b610755611dd8565b60005b818110156108ac57600083838381811061077457610774613bd2565b90506080020180360381019061078a9190613c15565b805190915015806107a75750604081015167ffffffffffffffff16155b1561081657604080517fa087bd2900000000000000000000000000000000000000000000000000000000815282516004820152602083015163ffffffff1660248201529082015167ffffffffffffffff1660448201526060820151151560648201526084015b60405180910390fd5b60408051606080820183528351825260208085015163ffffffff9081168285019081529286015115158486019081529585015167ffffffffffffffff166000908152600a90925293902091518255516001918201805494511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000909516919093161792909217905501610758565b507f1889010d2535a0ab1643678d1da87fbbe8b87b2f585b47ddb72ec622aef9ee5682826040516108de929190613c8f565b60405180910390a15050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faff2afbf00000000000000000000000000000000000000000000000000000000148061097d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e64dd2900000000000000000000000000000000000000000000000000000000145b806109c957507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6040805160208101909152600081526109e782611e2b565b60006109f660c0840184613d16565b810190610a039190613d7b565b90506000610a1460e0850185613d16565b810190610a219190613e48565b9050610a3181600001518361204f565b805160208201516040517f57ecfd2800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016926357ecfd2892610aa892600401613ed9565b6020604051808303816000875af1158015610ac7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aeb9190613efe565b610b21576040517fbf969f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b3160608501604086016136c7565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f08660600135604051610b9391815260200190565b60405180910390a35050604080516020810190915260609092013582525090565b6000610bf68383604051610bc9929190613f1b565b604080519182900390912067ffffffffffffffff8716600090815260076020529190912060050190612200565b949350505050565b610c06611dd8565b610c738484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152505060408051602080880282810182019093528782529093508792508691829185019084908082843760009201919091525061221b92505050565b50505050565b610c81611dd8565b610c8a83610e60565b610ccc576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8416600482015260240161080d565b610d0c8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123d192505050565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610d62576040517f02b543c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000008082163390811790935560008054909116815560405173ffffffffffffffffffffffffffffffffffffffff909216929183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610de7611dd8565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f44676b5284b809a22248eba0da87391d79098be38bb03154be88a58bf4d091749060200160405180910390a150565b60006109c9600567ffffffffffffffff8416612200565b6040805180820190915260608082526020820152610e94826124cb565b6000600a81610ea96040860160208701613873565b67ffffffffffffffff168152602080820192909252604090810160002081516060810183528154815260019091015463ffffffff81169382019390935264010000000090920460ff161515908201819052909150610f5057610f116040840160208501613873565b6040517fd201c48a00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161080d565b610f5a8380613d16565b9050602014610fa157610f6d8380613d16565b6040517fa3c8cf0900000000000000000000000000000000000000000000000000000000815260040161080d929190613f74565b6000610fad8480613d16565b810190610fba9190613f88565b602083015183516040517ff856ddb60000000000000000000000000000000000000000000000000000000081526060880135600482015263ffffffff90921660248301526044820183905273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116606484015260848301919091529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063f856ddb69060a4016020604051808303816000875af115801561109b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bf9190613fa1565b6040516060870135815290915033907f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df79060200160405180910390a2604051806040016040528061111c8760200160208101906105c39190613873565b815260408051808201825267ffffffffffffffff851680825263ffffffff7f00000000000000000000000000000000000000000000000000000000000000008116602093840190815284518085019390935251169281019290925290910190606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905295945050505050565b67ffffffffffffffff81166000908152600760205260408120606091906111e090600501612657565b90506000815167ffffffffffffffff8111156111fe576111fe613a40565b60405190808252806020026020018201604052801561123157816020015b606081526020019060019003908161121c5790505b50905060005b825181101561131a576008600084838151811061125657611256613bd2565b60200260200101518152602001908152602001600020805461127790613fbe565b80601f01602080910402602001604051908101604052809291908181526020018280546112a390613fbe565b80156112f05780601f106112c5576101008083540402835291602001916112f0565b820191906000526020600020905b8154815290600101906020018083116112d357829003601f168201915b505050505082828151811061130757611307613bd2565b6020908102919091010152600101611237565b509392505050565b606061132e6002612657565b905090565b61133b611dd8565b61134483610e60565b611386576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8416600482015260240161080d565b6113c68282604051611399929190613f1b565b604080519182900390912067ffffffffffffffff8616600090815260076020529190912060050190612664565b611402578282826040517f74f23c7c00000000000000000000000000000000000000000000000000000000815260040161080d93929190614011565b8267ffffffffffffffff167f52d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d76838360405161143e929190613f74565b60405180910390a2505050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845260028201546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff1615159482019490945260039091015480841660608301529190910490911660808201526109c990612670565b67ffffffffffffffff8116600090815260076020526040902060040180546060919061154b90613fbe565b80601f016020809104026020016040519081016040528092919081815260200182805461157790613fbe565b80156115c45780601f10611599576101008083540402835291602001916115c4565b820191906000526020600020905b8154815290600101906020018083116115a757829003601f168201915b50505050509050919050565b6115d8611dd8565b73ffffffffffffffffffffffffffffffffffffffff8116611625576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6004805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f168491016108de565b606060006116b26005612657565b90506000815167ffffffffffffffff8111156116d0576116d0613a40565b6040519080825280602002602001820160405280156116f9578160200160208202803683370190505b50905060005b82518110156117555782818151811061171a5761171a613bd2565b602002602001015182828151811061173457611734613bd2565b67ffffffffffffffff909216602092830291909101909101526001016116ff565b5092915050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915267ffffffffffffffff8216600090815260076020908152604091829020825160a08101845281546fffffffffffffffffffffffffffffffff808216835270010000000000000000000000000000000080830463ffffffff16958401959095527401000000000000000000000000000000000000000090910460ff1615159482019490945260019091015480841660608301529190910490911660808201526109c990612670565b60095473ffffffffffffffffffffffffffffffffffffffff16331480159061186e575060015473ffffffffffffffffffffffffffffffffffffffff163314155b156118a7576040517f8e4a23d600000000000000000000000000000000000000000000000000000000815233600482015260240161080d565b610d0c838383612722565b6118ba611dd8565b60005b83811015611aa75760008585838181106118d9576118d9613bd2565b90506020020160208101906118ee9190613873565b9050611905600567ffffffffffffffff8316612664565b611947576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8216600482015260240161080d565b67ffffffffffffffff8116600090815260076020526040812061196c90600501612657565b905060005b81518110156119d8576119cf82828151811061198f5761198f613bd2565b6020026020010151600760008667ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060050161266490919063ffffffff16565b50600101611971565b5067ffffffffffffffff8216600090815260076020526040812080547fffffffffffffffffffffff00000000000000000000000000000000000000000090811682556001820183905560028201805490911690556003810182905590611a41600483018261350a565b6005820160008181611a538282613544565b505060405167ffffffffffffffff871681527f5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d85991694506020019250611a95915050565b60405180910390a150506001016118bd565b5060005b81811015611dbd576000838383818110611ac757611ac7613bd2565b9050602002810190611ad99190614035565b611ae290614112565b9050611af38160600151600061280c565b611b028160800151600061280c565b806040015151600003611b41576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051611b599060059067ffffffffffffffff16612949565b611b9e5780516040517f1d5ad3c500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161080d565b805167ffffffffffffffff16600090815260076020908152604091829020825160a08082018552606080870180518601516fffffffffffffffffffffffffffffffff90811680865263ffffffff42168689018190528351511515878b0181905284518a0151841686890181905294518b0151841660809889018190528954740100000000000000000000000000000000000000009283027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff7001000000000000000000000000000000008087027fffffffffffffffffffffffff000000000000000000000000000000000000000094851690981788178216929092178d5592810290971760018c01558c519889018d52898e0180518d01518716808b528a8e019590955280515115158a8f018190528151909d01518716988a01899052518d0151909516979098018790526002890180549a909102999093161717909416959095179092559092029091176003820155908201516004820190611d21908261421a565b5060005b826020015151811015611d6557611d5d836000015184602001518381518110611d5057611d50613bd2565b60200260200101516123d1565b600101611d25565b507f8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c28260000151836040015184606001518560800151604051611dab9493929190614334565b60405180910390a15050600101611aab565b5050505050565b611dcc611dd8565b611dd581612955565b50565b60015473ffffffffffffffffffffffffffffffffffffffff163314611e29576040517f2b5c74de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611e3e61032060a08301608084016136c7565b611e9d57611e5260a08201608083016136c7565b6040517f961c9a4f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116600482015260240161080d565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016632cbc26bb611ee96040840160208501613873565b60405160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260809190911b77ffffffffffffffff00000000000000000000000000000000166004820152602401602060405180830381865afa158015611f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7e9190613efe565b15611fb5576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fcd611fc86040830160208401613873565b612a19565b611fed611fe06040830160208401613873565b6103c060a0840184613d16565b61203257611ffe60a0820182613d16565b6040517f24eb47e500000000000000000000000000000000000000000000000000000000815260040161080d929190613f74565b611dd56120456040830160208401613873565b8260600135612b3f565b600482015163ffffffff81161561209a576040517f68d2f8d600000000000000000000000000000000000000000000000000000000815263ffffffff8216600482015260240161080d565b6008830151600c8401516014850151602085015163ffffffff8085169116146121055760208501516040517fe366a11700000000000000000000000000000000000000000000000000000000815263ffffffff9182166004820152908416602482015260440161080d565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168263ffffffff161461219a576040517f77e4802600000000000000000000000000000000000000000000000000000000815263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301528316602482015260440161080d565b845167ffffffffffffffff8281169116146121f85784516040517ff917ffea00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9182166004820152908216602482015260440161080d565b505050505050565b600081815260018301602052604081205415155b9392505050565b7f0000000000000000000000000000000000000000000000000000000000000000612272576040517f35f4a7b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b825181101561230857600083828151811061229257612292613bd2565b602002602001015190506122b0816002612b8690919063ffffffff16565b156122ff5760405173ffffffffffffffffffffffffffffffffffffffff821681527f800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf75669060200160405180910390a15b50600101612275565b5060005b8151811015610d0c57600082828151811061232957612329613bd2565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361236d57506123c9565b612378600282612ba8565b156123c75760405173ffffffffffffffffffffffffffffffffffffffff821681527f2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d89060200160405180910390a15b505b60010161230c565b805160000361240c576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805160208083019190912067ffffffffffffffff841660009081526007909252604090912061243e9060050182612949565b6124785782826040517f393b8ad200000000000000000000000000000000000000000000000000000000815260040161080d9291906143cd565b6000818152600860205260409020612490838261421a565b508267ffffffffffffffff167f7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea8360405161143e9190613692565b6124de61032060a08301608084016136c7565b6124f257611e5260a08201608083016136c7565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016632cbc26bb61253e6040840160208501613873565b60405160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260809190911b77ffffffffffffffff00000000000000000000000000000000166004820152602401602060405180830381865afa1580156125af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d39190613efe565b1561260a576040517f53ad11d800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61262261261d60608301604084016136c7565b612bca565b61263a6126356040830160208401613873565b612c49565b611dd561264d6040830160208401613873565b8260600135612d97565b6060600061221483612ddb565b60006122148383612e36565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526126fe82606001516fffffffffffffffffffffffffffffffff1683600001516fffffffffffffffffffffffffffffffff16846020015163ffffffff16426126e2919061441f565b85608001516fffffffffffffffffffffffffffffffff16612f29565b6fffffffffffffffffffffffffffffffff1682525063ffffffff4216602082015290565b61272b83610e60565b61276d576040517f1e670e4b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8416600482015260240161080d565b61277882600061280c565b67ffffffffffffffff8316600090815260076020526040902061279b9083612f51565b6127a681600061280c565b67ffffffffffffffff831660009081526007602052604090206127cc9060020182612f51565b7f0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b8383836040516127ff93929190614432565b60405180910390a1505050565b8151156128d75781602001516fffffffffffffffffffffffffffffffff1682604001516fffffffffffffffffffffffffffffffff16101580612862575060408201516fffffffffffffffffffffffffffffffff16155b1561289b57816040517f8020d12400000000000000000000000000000000000000000000000000000000815260040161080d91906144b5565b80156128d3576040517f433fc33d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b60408201516fffffffffffffffffffffffffffffffff16151580612910575060208201516fffffffffffffffffffffffffffffffff1615155b156128d357816040517fd68af9cc00000000000000000000000000000000000000000000000000000000815260040161080d91906144b5565b600061221483836130f3565b3373ffffffffffffffffffffffffffffffffffffffff8216036129a4576040517fdad89dca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217835560015460405192939116917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b612a2281610e60565b612a64576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8216600482015260240161080d565b600480546040517f83826b2b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925233602483015273ffffffffffffffffffffffffffffffffffffffff16906383826b2b90604401602060405180830381865afa158015612ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b079190613efe565b611dd5576040517f728fe07b00000000000000000000000000000000000000000000000000000000815233600482015260240161080d565b67ffffffffffffffff821660009081526007602052604090206128d390600201827f0000000000000000000000000000000000000000000000000000000000000000613142565b60006122148373ffffffffffffffffffffffffffffffffffffffff8416612e36565b60006122148373ffffffffffffffffffffffffffffffffffffffff84166130f3565b7f000000000000000000000000000000000000000000000000000000000000000015611dd557612bfb6002826134c5565b611dd5576040517fd0d2597600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161080d565b612c5281610e60565b612c94576040517fa9902c7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8216600482015260240161080d565b600480546040517fa8d87a3b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84169281019290925273ffffffffffffffffffffffffffffffffffffffff169063a8d87a3b90602401602060405180830381865afa158015612d0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3191906144f1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611dd5576040517f728fe07b00000000000000000000000000000000000000000000000000000000815233600482015260240161080d565b67ffffffffffffffff821660009081526007602052604090206128d390827f0000000000000000000000000000000000000000000000000000000000000000613142565b6060816000018054806020026020016040519081016040528092919081815260200182805480156115c457602002820191906000526020600020905b815481526020019060010190808311612e175750505050509050919050565b60008181526001830160205260408120548015612f1f576000612e5a60018361441f565b8554909150600090612e6e9060019061441f565b9050808214612ed3576000866000018281548110612e8e57612e8e613bd2565b9060005260206000200154905080876000018481548110612eb157612eb1613bd2565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612ee457612ee461450e565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506109c9565b60009150506109c9565b6000612f4885612f39848661453d565b612f439087614554565b6134f4565b95945050505050565b8154600090612f7a90700100000000000000000000000000000000900463ffffffff164261441f565b9050801561301c5760018301548354612fc2916fffffffffffffffffffffffffffffffff80821692811691859170010000000000000000000000000000000090910416612f29565b83546fffffffffffffffffffffffffffffffff919091167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116177001000000000000000000000000000000004263ffffffff16021783555b60208201518354613042916fffffffffffffffffffffffffffffffff90811691166134f4565b83548351151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffff000000000000000000000000000000009091166fffffffffffffffffffffffffffffffff92831617178455602083015160408085015183167001000000000000000000000000000000000291909216176001850155517f9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19906127ff9084906144b5565b600081815260018301602052604081205461313a575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556109c9565b5060006109c9565b825474010000000000000000000000000000000000000000900460ff161580613169575081155b1561317357505050565b825460018401546fffffffffffffffffffffffffffffffff808316929116906000906131b990700100000000000000000000000000000000900463ffffffff164261441f565b9050801561327957818311156131fb576040517f9725942a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018601546132359083908590849070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16612f29565b86547fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff167001000000000000000000000000000000004263ffffffff160217875592505b848210156133305773ffffffffffffffffffffffffffffffffffffffff84166132d8576040517ff94ebcd1000000000000000000000000000000000000000000000000000000008152600481018390526024810186905260440161080d565b6040517f1a76572a000000000000000000000000000000000000000000000000000000008152600481018390526024810186905273ffffffffffffffffffffffffffffffffffffffff8516604482015260640161080d565b848310156134435760018681015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16906000908290613374908261441f565b61337e878a61441f565b6133889190614554565b6133929190614567565b905073ffffffffffffffffffffffffffffffffffffffff86166133eb576040517f15279c08000000000000000000000000000000000000000000000000000000008152600481018290526024810186905260440161080d565b6040517fd0c8d23a000000000000000000000000000000000000000000000000000000008152600481018290526024810186905273ffffffffffffffffffffffffffffffffffffffff8716604482015260640161080d565b61344d858461441f565b86547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff82161787556040518681529093507f1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a9060200160405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515612214565b60008183106135035781612214565b5090919050565b50805461351690613fbe565b6000825580601f10613526575050565b601f016020900490600052602060002090810190611dd5919061355e565b5080546000825590600052602060002090810190611dd591905b5b80821115613573576000815560010161355f565b5090565b6000806020838503121561358a57600080fd5b823567ffffffffffffffff808211156135a257600080fd5b818501915085601f8301126135b657600080fd5b8135818111156135c557600080fd5b8660208260071b85010111156135da57600080fd5b60209290920196919550909350505050565b6000602082840312156135fe57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461221457600080fd5b6000815180845260005b8181101561365457602081850181015186830182015201613638565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000612214602083018461362e565b73ffffffffffffffffffffffffffffffffffffffff81168114611dd557600080fd5b6000602082840312156136d957600080fd5b8135612214816136a5565b6000602082840312156136f657600080fd5b813567ffffffffffffffff81111561370d57600080fd5b8201610100818503121561221457600080fd5b67ffffffffffffffff81168114611dd557600080fd5b60008060006040848603121561374b57600080fd5b833561375681613720565b9250602084013567ffffffffffffffff8082111561377357600080fd5b818601915086601f83011261378757600080fd5b81358181111561379657600080fd5b8760208285010111156137a857600080fd5b6020830194508093505050509250925092565b60008083601f8401126137cd57600080fd5b50813567ffffffffffffffff8111156137e557600080fd5b6020830191508360208260051b850101111561380057600080fd5b9250929050565b6000806000806040858703121561381d57600080fd5b843567ffffffffffffffff8082111561383557600080fd5b613841888389016137bb565b9096509450602087013591508082111561385a57600080fd5b50613867878288016137bb565b95989497509550505050565b60006020828403121561388557600080fd5b813561221481613720565b6000602082840312156138a257600080fd5b813567ffffffffffffffff8111156138b957600080fd5b820160a0818503121561221457600080fd5b6020815260008251604060208401526138e7606084018261362e565b905060208401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848303016040850152612f48828261362e565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015613997577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261398585835161362e565b9450928501929085019060010161394b565b5092979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156139f257835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016139c0565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b818110156139f257835167ffffffffffffffff1683529284019291840191600101613a1a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715613a9257613a92613a40565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613adf57613adf613a40565b604052919050565b8015158114611dd557600080fd5b80356fffffffffffffffffffffffffffffffff81168114613b1557600080fd5b919050565b600060608284031215613b2c57600080fd5b6040516060810181811067ffffffffffffffff82111715613b4f57613b4f613a40565b6040529050808235613b6081613ae7565b8152613b6e60208401613af5565b6020820152613b7f60408401613af5565b60408201525092915050565b600080600060e08486031215613ba057600080fd5b8335613bab81613720565b9250613bba8560208601613b1a565b9150613bc98560808601613b1a565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b803563ffffffff81168114613b1557600080fd5b600060808284031215613c2757600080fd5b6040516080810181811067ffffffffffffffff82111715613c4a57613c4a613a40565b60405282358152613c5d60208401613c01565b60208201526040830135613c7081613720565b60408201526060830135613c8381613ae7565b60608201529392505050565b6020808252818101839052600090604080840186845b87811015613d09578135835263ffffffff613cc1868401613c01565b168584015283820135613cd381613720565b67ffffffffffffffff1683850152606082810135613cf081613ae7565b1515908401526080928301929190910190600101613ca5565b5090979650505050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613d4b57600080fd5b83018035915067ffffffffffffffff821115613d6657600080fd5b60200191503681900382131561380057600080fd5b600060408284031215613d8d57600080fd5b613d95613a6f565b8235613da081613720565b8152613dae60208401613c01565b60208201529392505050565b600082601f830112613dcb57600080fd5b813567ffffffffffffffff811115613de557613de5613a40565b613e1660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613a98565b818152846020838601011115613e2b57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613e5a57600080fd5b813567ffffffffffffffff80821115613e7257600080fd5b9083019060408286031215613e8657600080fd5b613e8e613a6f565b823582811115613e9d57600080fd5b613ea987828601613dba565b825250602083013582811115613ebe57600080fd5b613eca87828601613dba565b60208301525095945050505050565b604081526000613eec604083018561362e565b8281036020840152612f48818561362e565b600060208284031215613f1057600080fd5b815161221481613ae7565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000610bf6602083018486613f2b565b600060208284031215613f9a57600080fd5b5035919050565b600060208284031215613fb357600080fd5b815161221481613720565b600181811c90821680613fd257607f821691505b60208210810361400b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b67ffffffffffffffff84168152604060208201526000612f48604083018486613f2b565b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee183360301811261406957600080fd5b9190910192915050565b600082601f83011261408457600080fd5b8135602067ffffffffffffffff808311156140a1576140a1613a40565b8260051b6140b0838201613a98565b93845285810183019383810190888611156140ca57600080fd5b84880192505b85831015614106578235848111156140e85760008081fd5b6140f68a87838c0101613dba565b83525091840191908401906140d0565b98975050505050505050565b6000610120823603121561412557600080fd5b60405160a0810167ffffffffffffffff828210818311171561414957614149613a40565b816040528435915061415a82613720565b9082526020840135908082111561417057600080fd5b61417c36838701614073565b6020840152604085013591508082111561419557600080fd5b506141a236828601613dba565b6040830152506141b53660608501613b1a565b60608201526141c73660c08501613b1a565b608082015292915050565b601f821115610d0c576000816000526020600020601f850160051c810160208610156141fb5750805b601f850160051c820191505b818110156121f857828155600101614207565b815167ffffffffffffffff81111561423457614234613a40565b614248816142428454613fbe565b846141d2565b602080601f83116001811461429b57600084156142655750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556121f8565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156142e8578886015182559484019460019091019084016142c9565b508582101561432457878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600061010067ffffffffffffffff871683528060208401526143588184018761362e565b8551151560408581019190915260208701516fffffffffffffffffffffffffffffffff90811660608701529087015116608085015291506143969050565b8251151560a083015260208301516fffffffffffffffffffffffffffffffff90811660c084015260408401511660e0830152612f48565b67ffffffffffffffff83168152604060208201526000610bf6604083018461362e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156109c9576109c96143f0565b67ffffffffffffffff8416815260e0810161447e60208301858051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b82511515608083015260208301516fffffffffffffffffffffffffffffffff90811660a084015260408401511660c0830152610bf6565b606081016109c982848051151582526020808201516fffffffffffffffffffffffffffffffff9081169184019190915260409182015116910152565b60006020828403121561450357600080fd5b8151612214816136a5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b80820281158282048414176109c9576109c96143f0565b808201808211156109c9576109c96143f0565b60008261459d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea164736f6c6343000818000a", +} + +var USDCTokenPoolABI = USDCTokenPoolMetaData.ABI + +var USDCTokenPoolBin = USDCTokenPoolMetaData.Bin + +func DeployUSDCTokenPool(auth *bind.TransactOpts, backend bind.ContractBackend, tokenMessenger common.Address, token common.Address, allowlist []common.Address, rmnProxy common.Address, router common.Address) (common.Address, *generated_zks.Transaction, *USDCTokenPool, error) { + parsed, err := USDCTokenPoolMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + if generated_zks.IsZKSync(backend) { + address, ethTx, contractBind, _ := generated_zks.DeployContract(auth, parsed, common.FromHex(USDCTokenPoolZKBin), backend, tokenMessenger, token, allowlist, rmnProxy, router) + contractReturn := &USDCTokenPool{address: address, abi: *parsed, USDCTokenPoolCaller: USDCTokenPoolCaller{contract: contractBind}, USDCTokenPoolTransactor: USDCTokenPoolTransactor{contract: contractBind}, USDCTokenPoolFilterer: USDCTokenPoolFilterer{contract: contractBind}} + return address, ethTx, contractReturn, err + } + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(USDCTokenPoolBin), backend, tokenMessenger, token, allowlist, rmnProxy, router) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, &generated_zks.Transaction{Transaction: tx, Hash_zks: tx.Hash()}, &USDCTokenPool{address: address, abi: *parsed, USDCTokenPoolCaller: USDCTokenPoolCaller{contract: contract}, USDCTokenPoolTransactor: USDCTokenPoolTransactor{contract: contract}, USDCTokenPoolFilterer: USDCTokenPoolFilterer{contract: contract}}, nil +} + +type USDCTokenPool struct { + address common.Address + abi abi.ABI + USDCTokenPoolCaller + USDCTokenPoolTransactor + USDCTokenPoolFilterer +} + +type USDCTokenPoolCaller struct { + contract *bind.BoundContract +} + +type USDCTokenPoolTransactor struct { + contract *bind.BoundContract +} + +type USDCTokenPoolFilterer struct { + contract *bind.BoundContract +} + +type USDCTokenPoolSession struct { + Contract *USDCTokenPool + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type USDCTokenPoolCallerSession struct { + Contract *USDCTokenPoolCaller + CallOpts bind.CallOpts +} + +type USDCTokenPoolTransactorSession struct { + Contract *USDCTokenPoolTransactor + TransactOpts bind.TransactOpts +} + +type USDCTokenPoolRaw struct { + Contract *USDCTokenPool +} + +type USDCTokenPoolCallerRaw struct { + Contract *USDCTokenPoolCaller +} + +type USDCTokenPoolTransactorRaw struct { + Contract *USDCTokenPoolTransactor +} + +func NewUSDCTokenPool(address common.Address, backend bind.ContractBackend) (*USDCTokenPool, error) { + abi, err := abi.JSON(strings.NewReader(USDCTokenPoolABI)) + if err != nil { + return nil, err + } + contract, err := bindUSDCTokenPool(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &USDCTokenPool{address: address, abi: abi, USDCTokenPoolCaller: USDCTokenPoolCaller{contract: contract}, USDCTokenPoolTransactor: USDCTokenPoolTransactor{contract: contract}, USDCTokenPoolFilterer: USDCTokenPoolFilterer{contract: contract}}, nil +} + +func NewUSDCTokenPoolCaller(address common.Address, caller bind.ContractCaller) (*USDCTokenPoolCaller, error) { + contract, err := bindUSDCTokenPool(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &USDCTokenPoolCaller{contract: contract}, nil +} + +func NewUSDCTokenPoolTransactor(address common.Address, transactor bind.ContractTransactor) (*USDCTokenPoolTransactor, error) { + contract, err := bindUSDCTokenPool(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &USDCTokenPoolTransactor{contract: contract}, nil +} + +func NewUSDCTokenPoolFilterer(address common.Address, filterer bind.ContractFilterer) (*USDCTokenPoolFilterer, error) { + contract, err := bindUSDCTokenPool(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &USDCTokenPoolFilterer{contract: contract}, nil +} + +func bindUSDCTokenPool(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := USDCTokenPoolMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_USDCTokenPool *USDCTokenPoolRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _USDCTokenPool.Contract.USDCTokenPoolCaller.contract.Call(opts, result, method, params...) +} + +func (_USDCTokenPool *USDCTokenPoolRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _USDCTokenPool.Contract.USDCTokenPoolTransactor.contract.Transfer(opts) +} + +func (_USDCTokenPool *USDCTokenPoolRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _USDCTokenPool.Contract.USDCTokenPoolTransactor.contract.Transact(opts, method, params...) +} + +func (_USDCTokenPool *USDCTokenPoolCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _USDCTokenPool.Contract.contract.Call(opts, result, method, params...) +} + +func (_USDCTokenPool *USDCTokenPoolTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _USDCTokenPool.Contract.contract.Transfer(opts) +} + +func (_USDCTokenPool *USDCTokenPoolTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _USDCTokenPool.Contract.contract.Transact(opts, method, params...) +} + +func (_USDCTokenPool *USDCTokenPoolCaller) SUPPORTEDUSDCVERSION(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _USDCTokenPool.contract.Call(opts, &out, "SUPPORTED_USDC_VERSION") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +func (_USDCTokenPool *USDCTokenPoolSession) SUPPORTEDUSDCVERSION() (uint32, error) { + return _USDCTokenPool.Contract.SUPPORTEDUSDCVERSION(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCallerSession) SUPPORTEDUSDCVERSION() (uint32, error) { + return _USDCTokenPool.Contract.SUPPORTEDUSDCVERSION(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCaller) GetAllowList(opts *bind.CallOpts) ([]common.Address, error) { + var out []interface{} + err := _USDCTokenPool.contract.Call(opts, &out, "getAllowList") + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +func (_USDCTokenPool *USDCTokenPoolSession) GetAllowList() ([]common.Address, error) { + return _USDCTokenPool.Contract.GetAllowList(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCallerSession) GetAllowList() ([]common.Address, error) { + return _USDCTokenPool.Contract.GetAllowList(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCaller) GetAllowListEnabled(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _USDCTokenPool.contract.Call(opts, &out, "getAllowListEnabled") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_USDCTokenPool *USDCTokenPoolSession) GetAllowListEnabled() (bool, error) { + return _USDCTokenPool.Contract.GetAllowListEnabled(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCallerSession) GetAllowListEnabled() (bool, error) { + return _USDCTokenPool.Contract.GetAllowListEnabled(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCaller) GetCurrentInboundRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + var out []interface{} + err := _USDCTokenPool.contract.Call(opts, &out, "getCurrentInboundRateLimiterState", remoteChainSelector) + + if err != nil { + return *new(RateLimiterTokenBucket), err + } + + out0 := *abi.ConvertType(out[0], new(RateLimiterTokenBucket)).(*RateLimiterTokenBucket) + + return out0, err + +} + +func (_USDCTokenPool *USDCTokenPoolSession) GetCurrentInboundRateLimiterState(remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + return _USDCTokenPool.Contract.GetCurrentInboundRateLimiterState(&_USDCTokenPool.CallOpts, remoteChainSelector) +} + +func (_USDCTokenPool *USDCTokenPoolCallerSession) GetCurrentInboundRateLimiterState(remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + return _USDCTokenPool.Contract.GetCurrentInboundRateLimiterState(&_USDCTokenPool.CallOpts, remoteChainSelector) +} + +func (_USDCTokenPool *USDCTokenPoolCaller) GetCurrentOutboundRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + var out []interface{} + err := _USDCTokenPool.contract.Call(opts, &out, "getCurrentOutboundRateLimiterState", remoteChainSelector) + + if err != nil { + return *new(RateLimiterTokenBucket), err + } + + out0 := *abi.ConvertType(out[0], new(RateLimiterTokenBucket)).(*RateLimiterTokenBucket) + + return out0, err + +} + +func (_USDCTokenPool *USDCTokenPoolSession) GetCurrentOutboundRateLimiterState(remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + return _USDCTokenPool.Contract.GetCurrentOutboundRateLimiterState(&_USDCTokenPool.CallOpts, remoteChainSelector) +} + +func (_USDCTokenPool *USDCTokenPoolCallerSession) GetCurrentOutboundRateLimiterState(remoteChainSelector uint64) (RateLimiterTokenBucket, error) { + return _USDCTokenPool.Contract.GetCurrentOutboundRateLimiterState(&_USDCTokenPool.CallOpts, remoteChainSelector) +} + +func (_USDCTokenPool *USDCTokenPoolCaller) GetDomain(opts *bind.CallOpts, chainSelector uint64) (USDCTokenPoolDomain, error) { + var out []interface{} + err := _USDCTokenPool.contract.Call(opts, &out, "getDomain", chainSelector) + + if err != nil { + return *new(USDCTokenPoolDomain), err + } + + out0 := *abi.ConvertType(out[0], new(USDCTokenPoolDomain)).(*USDCTokenPoolDomain) + + return out0, err + +} + +func (_USDCTokenPool *USDCTokenPoolSession) GetDomain(chainSelector uint64) (USDCTokenPoolDomain, error) { + return _USDCTokenPool.Contract.GetDomain(&_USDCTokenPool.CallOpts, chainSelector) +} + +func (_USDCTokenPool *USDCTokenPoolCallerSession) GetDomain(chainSelector uint64) (USDCTokenPoolDomain, error) { + return _USDCTokenPool.Contract.GetDomain(&_USDCTokenPool.CallOpts, chainSelector) +} + +func (_USDCTokenPool *USDCTokenPoolCaller) GetRateLimitAdmin(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _USDCTokenPool.contract.Call(opts, &out, "getRateLimitAdmin") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_USDCTokenPool *USDCTokenPoolSession) GetRateLimitAdmin() (common.Address, error) { + return _USDCTokenPool.Contract.GetRateLimitAdmin(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCallerSession) GetRateLimitAdmin() (common.Address, error) { + return _USDCTokenPool.Contract.GetRateLimitAdmin(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCaller) GetRemotePools(opts *bind.CallOpts, remoteChainSelector uint64) ([][]byte, error) { + var out []interface{} + err := _USDCTokenPool.contract.Call(opts, &out, "getRemotePools", remoteChainSelector) + + if err != nil { + return *new([][]byte), err + } + + out0 := *abi.ConvertType(out[0], new([][]byte)).(*[][]byte) + + return out0, err + +} + +func (_USDCTokenPool *USDCTokenPoolSession) GetRemotePools(remoteChainSelector uint64) ([][]byte, error) { + return _USDCTokenPool.Contract.GetRemotePools(&_USDCTokenPool.CallOpts, remoteChainSelector) +} + +func (_USDCTokenPool *USDCTokenPoolCallerSession) GetRemotePools(remoteChainSelector uint64) ([][]byte, error) { + return _USDCTokenPool.Contract.GetRemotePools(&_USDCTokenPool.CallOpts, remoteChainSelector) +} + +func (_USDCTokenPool *USDCTokenPoolCaller) GetRemoteToken(opts *bind.CallOpts, remoteChainSelector uint64) ([]byte, error) { + var out []interface{} + err := _USDCTokenPool.contract.Call(opts, &out, "getRemoteToken", remoteChainSelector) + + if err != nil { + return *new([]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]byte)).(*[]byte) + + return out0, err + +} + +func (_USDCTokenPool *USDCTokenPoolSession) GetRemoteToken(remoteChainSelector uint64) ([]byte, error) { + return _USDCTokenPool.Contract.GetRemoteToken(&_USDCTokenPool.CallOpts, remoteChainSelector) +} + +func (_USDCTokenPool *USDCTokenPoolCallerSession) GetRemoteToken(remoteChainSelector uint64) ([]byte, error) { + return _USDCTokenPool.Contract.GetRemoteToken(&_USDCTokenPool.CallOpts, remoteChainSelector) +} + +func (_USDCTokenPool *USDCTokenPoolCaller) GetRmnProxy(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _USDCTokenPool.contract.Call(opts, &out, "getRmnProxy") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_USDCTokenPool *USDCTokenPoolSession) GetRmnProxy() (common.Address, error) { + return _USDCTokenPool.Contract.GetRmnProxy(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCallerSession) GetRmnProxy() (common.Address, error) { + return _USDCTokenPool.Contract.GetRmnProxy(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCaller) GetRouter(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _USDCTokenPool.contract.Call(opts, &out, "getRouter") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_USDCTokenPool *USDCTokenPoolSession) GetRouter() (common.Address, error) { + return _USDCTokenPool.Contract.GetRouter(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCallerSession) GetRouter() (common.Address, error) { + return _USDCTokenPool.Contract.GetRouter(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCaller) GetSupportedChains(opts *bind.CallOpts) ([]uint64, error) { + var out []interface{} + err := _USDCTokenPool.contract.Call(opts, &out, "getSupportedChains") + + if err != nil { + return *new([]uint64), err + } + + out0 := *abi.ConvertType(out[0], new([]uint64)).(*[]uint64) + + return out0, err + +} + +func (_USDCTokenPool *USDCTokenPoolSession) GetSupportedChains() ([]uint64, error) { + return _USDCTokenPool.Contract.GetSupportedChains(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCallerSession) GetSupportedChains() ([]uint64, error) { + return _USDCTokenPool.Contract.GetSupportedChains(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCaller) GetToken(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _USDCTokenPool.contract.Call(opts, &out, "getToken") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_USDCTokenPool *USDCTokenPoolSession) GetToken() (common.Address, error) { + return _USDCTokenPool.Contract.GetToken(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCallerSession) GetToken() (common.Address, error) { + return _USDCTokenPool.Contract.GetToken(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCaller) GetTokenDecimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _USDCTokenPool.contract.Call(opts, &out, "getTokenDecimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +func (_USDCTokenPool *USDCTokenPoolSession) GetTokenDecimals() (uint8, error) { + return _USDCTokenPool.Contract.GetTokenDecimals(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCallerSession) GetTokenDecimals() (uint8, error) { + return _USDCTokenPool.Contract.GetTokenDecimals(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCaller) ILocalDomainIdentifier(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _USDCTokenPool.contract.Call(opts, &out, "i_localDomainIdentifier") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +func (_USDCTokenPool *USDCTokenPoolSession) ILocalDomainIdentifier() (uint32, error) { + return _USDCTokenPool.Contract.ILocalDomainIdentifier(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCallerSession) ILocalDomainIdentifier() (uint32, error) { + return _USDCTokenPool.Contract.ILocalDomainIdentifier(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCaller) IMessageTransmitter(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _USDCTokenPool.contract.Call(opts, &out, "i_messageTransmitter") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_USDCTokenPool *USDCTokenPoolSession) IMessageTransmitter() (common.Address, error) { + return _USDCTokenPool.Contract.IMessageTransmitter(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCallerSession) IMessageTransmitter() (common.Address, error) { + return _USDCTokenPool.Contract.IMessageTransmitter(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCaller) ITokenMessenger(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _USDCTokenPool.contract.Call(opts, &out, "i_tokenMessenger") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_USDCTokenPool *USDCTokenPoolSession) ITokenMessenger() (common.Address, error) { + return _USDCTokenPool.Contract.ITokenMessenger(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCallerSession) ITokenMessenger() (common.Address, error) { + return _USDCTokenPool.Contract.ITokenMessenger(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCaller) IsRemotePool(opts *bind.CallOpts, remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) { + var out []interface{} + err := _USDCTokenPool.contract.Call(opts, &out, "isRemotePool", remoteChainSelector, remotePoolAddress) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_USDCTokenPool *USDCTokenPoolSession) IsRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) { + return _USDCTokenPool.Contract.IsRemotePool(&_USDCTokenPool.CallOpts, remoteChainSelector, remotePoolAddress) +} + +func (_USDCTokenPool *USDCTokenPoolCallerSession) IsRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) { + return _USDCTokenPool.Contract.IsRemotePool(&_USDCTokenPool.CallOpts, remoteChainSelector, remotePoolAddress) +} + +func (_USDCTokenPool *USDCTokenPoolCaller) IsSupportedChain(opts *bind.CallOpts, remoteChainSelector uint64) (bool, error) { + var out []interface{} + err := _USDCTokenPool.contract.Call(opts, &out, "isSupportedChain", remoteChainSelector) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_USDCTokenPool *USDCTokenPoolSession) IsSupportedChain(remoteChainSelector uint64) (bool, error) { + return _USDCTokenPool.Contract.IsSupportedChain(&_USDCTokenPool.CallOpts, remoteChainSelector) +} + +func (_USDCTokenPool *USDCTokenPoolCallerSession) IsSupportedChain(remoteChainSelector uint64) (bool, error) { + return _USDCTokenPool.Contract.IsSupportedChain(&_USDCTokenPool.CallOpts, remoteChainSelector) +} + +func (_USDCTokenPool *USDCTokenPoolCaller) IsSupportedToken(opts *bind.CallOpts, token common.Address) (bool, error) { + var out []interface{} + err := _USDCTokenPool.contract.Call(opts, &out, "isSupportedToken", token) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_USDCTokenPool *USDCTokenPoolSession) IsSupportedToken(token common.Address) (bool, error) { + return _USDCTokenPool.Contract.IsSupportedToken(&_USDCTokenPool.CallOpts, token) +} + +func (_USDCTokenPool *USDCTokenPoolCallerSession) IsSupportedToken(token common.Address) (bool, error) { + return _USDCTokenPool.Contract.IsSupportedToken(&_USDCTokenPool.CallOpts, token) +} + +func (_USDCTokenPool *USDCTokenPoolCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _USDCTokenPool.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 + +} + +func (_USDCTokenPool *USDCTokenPoolSession) Owner() (common.Address, error) { + return _USDCTokenPool.Contract.Owner(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCallerSession) Owner() (common.Address, error) { + return _USDCTokenPool.Contract.Owner(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _USDCTokenPool.contract.Call(opts, &out, "supportsInterface", interfaceId) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_USDCTokenPool *USDCTokenPoolSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _USDCTokenPool.Contract.SupportsInterface(&_USDCTokenPool.CallOpts, interfaceId) +} + +func (_USDCTokenPool *USDCTokenPoolCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _USDCTokenPool.Contract.SupportsInterface(&_USDCTokenPool.CallOpts, interfaceId) +} + +func (_USDCTokenPool *USDCTokenPoolCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _USDCTokenPool.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_USDCTokenPool *USDCTokenPoolSession) TypeAndVersion() (string, error) { + return _USDCTokenPool.Contract.TypeAndVersion(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolCallerSession) TypeAndVersion() (string, error) { + return _USDCTokenPool.Contract.TypeAndVersion(&_USDCTokenPool.CallOpts) +} + +func (_USDCTokenPool *USDCTokenPoolTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _USDCTokenPool.contract.Transact(opts, "acceptOwnership") +} + +func (_USDCTokenPool *USDCTokenPoolSession) AcceptOwnership() (*types.Transaction, error) { + return _USDCTokenPool.Contract.AcceptOwnership(&_USDCTokenPool.TransactOpts) +} + +func (_USDCTokenPool *USDCTokenPoolTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _USDCTokenPool.Contract.AcceptOwnership(&_USDCTokenPool.TransactOpts) +} + +func (_USDCTokenPool *USDCTokenPoolTransactor) AddRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _USDCTokenPool.contract.Transact(opts, "addRemotePool", remoteChainSelector, remotePoolAddress) +} + +func (_USDCTokenPool *USDCTokenPoolSession) AddRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _USDCTokenPool.Contract.AddRemotePool(&_USDCTokenPool.TransactOpts, remoteChainSelector, remotePoolAddress) +} + +func (_USDCTokenPool *USDCTokenPoolTransactorSession) AddRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _USDCTokenPool.Contract.AddRemotePool(&_USDCTokenPool.TransactOpts, remoteChainSelector, remotePoolAddress) +} + +func (_USDCTokenPool *USDCTokenPoolTransactor) ApplyAllowListUpdates(opts *bind.TransactOpts, removes []common.Address, adds []common.Address) (*types.Transaction, error) { + return _USDCTokenPool.contract.Transact(opts, "applyAllowListUpdates", removes, adds) +} + +func (_USDCTokenPool *USDCTokenPoolSession) ApplyAllowListUpdates(removes []common.Address, adds []common.Address) (*types.Transaction, error) { + return _USDCTokenPool.Contract.ApplyAllowListUpdates(&_USDCTokenPool.TransactOpts, removes, adds) +} + +func (_USDCTokenPool *USDCTokenPoolTransactorSession) ApplyAllowListUpdates(removes []common.Address, adds []common.Address) (*types.Transaction, error) { + return _USDCTokenPool.Contract.ApplyAllowListUpdates(&_USDCTokenPool.TransactOpts, removes, adds) +} + +func (_USDCTokenPool *USDCTokenPoolTransactor) ApplyChainUpdates(opts *bind.TransactOpts, remoteChainSelectorsToRemove []uint64, chainsToAdd []TokenPoolChainUpdate) (*types.Transaction, error) { + return _USDCTokenPool.contract.Transact(opts, "applyChainUpdates", remoteChainSelectorsToRemove, chainsToAdd) +} + +func (_USDCTokenPool *USDCTokenPoolSession) ApplyChainUpdates(remoteChainSelectorsToRemove []uint64, chainsToAdd []TokenPoolChainUpdate) (*types.Transaction, error) { + return _USDCTokenPool.Contract.ApplyChainUpdates(&_USDCTokenPool.TransactOpts, remoteChainSelectorsToRemove, chainsToAdd) +} + +func (_USDCTokenPool *USDCTokenPoolTransactorSession) ApplyChainUpdates(remoteChainSelectorsToRemove []uint64, chainsToAdd []TokenPoolChainUpdate) (*types.Transaction, error) { + return _USDCTokenPool.Contract.ApplyChainUpdates(&_USDCTokenPool.TransactOpts, remoteChainSelectorsToRemove, chainsToAdd) +} + +func (_USDCTokenPool *USDCTokenPoolTransactor) LockOrBurn(opts *bind.TransactOpts, lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) { + return _USDCTokenPool.contract.Transact(opts, "lockOrBurn", lockOrBurnIn) +} + +func (_USDCTokenPool *USDCTokenPoolSession) LockOrBurn(lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) { + return _USDCTokenPool.Contract.LockOrBurn(&_USDCTokenPool.TransactOpts, lockOrBurnIn) +} + +func (_USDCTokenPool *USDCTokenPoolTransactorSession) LockOrBurn(lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) { + return _USDCTokenPool.Contract.LockOrBurn(&_USDCTokenPool.TransactOpts, lockOrBurnIn) +} + +func (_USDCTokenPool *USDCTokenPoolTransactor) ReleaseOrMint(opts *bind.TransactOpts, releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) { + return _USDCTokenPool.contract.Transact(opts, "releaseOrMint", releaseOrMintIn) +} + +func (_USDCTokenPool *USDCTokenPoolSession) ReleaseOrMint(releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) { + return _USDCTokenPool.Contract.ReleaseOrMint(&_USDCTokenPool.TransactOpts, releaseOrMintIn) +} + +func (_USDCTokenPool *USDCTokenPoolTransactorSession) ReleaseOrMint(releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) { + return _USDCTokenPool.Contract.ReleaseOrMint(&_USDCTokenPool.TransactOpts, releaseOrMintIn) +} + +func (_USDCTokenPool *USDCTokenPoolTransactor) RemoveRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _USDCTokenPool.contract.Transact(opts, "removeRemotePool", remoteChainSelector, remotePoolAddress) +} + +func (_USDCTokenPool *USDCTokenPoolSession) RemoveRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _USDCTokenPool.Contract.RemoveRemotePool(&_USDCTokenPool.TransactOpts, remoteChainSelector, remotePoolAddress) +} + +func (_USDCTokenPool *USDCTokenPoolTransactorSession) RemoveRemotePool(remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) { + return _USDCTokenPool.Contract.RemoveRemotePool(&_USDCTokenPool.TransactOpts, remoteChainSelector, remotePoolAddress) +} + +func (_USDCTokenPool *USDCTokenPoolTransactor) SetChainRateLimiterConfig(opts *bind.TransactOpts, remoteChainSelector uint64, outboundConfig RateLimiterConfig, inboundConfig RateLimiterConfig) (*types.Transaction, error) { + return _USDCTokenPool.contract.Transact(opts, "setChainRateLimiterConfig", remoteChainSelector, outboundConfig, inboundConfig) +} + +func (_USDCTokenPool *USDCTokenPoolSession) SetChainRateLimiterConfig(remoteChainSelector uint64, outboundConfig RateLimiterConfig, inboundConfig RateLimiterConfig) (*types.Transaction, error) { + return _USDCTokenPool.Contract.SetChainRateLimiterConfig(&_USDCTokenPool.TransactOpts, remoteChainSelector, outboundConfig, inboundConfig) +} + +func (_USDCTokenPool *USDCTokenPoolTransactorSession) SetChainRateLimiterConfig(remoteChainSelector uint64, outboundConfig RateLimiterConfig, inboundConfig RateLimiterConfig) (*types.Transaction, error) { + return _USDCTokenPool.Contract.SetChainRateLimiterConfig(&_USDCTokenPool.TransactOpts, remoteChainSelector, outboundConfig, inboundConfig) +} + +func (_USDCTokenPool *USDCTokenPoolTransactor) SetDomains(opts *bind.TransactOpts, domains []USDCTokenPoolDomainUpdate) (*types.Transaction, error) { + return _USDCTokenPool.contract.Transact(opts, "setDomains", domains) +} + +func (_USDCTokenPool *USDCTokenPoolSession) SetDomains(domains []USDCTokenPoolDomainUpdate) (*types.Transaction, error) { + return _USDCTokenPool.Contract.SetDomains(&_USDCTokenPool.TransactOpts, domains) +} + +func (_USDCTokenPool *USDCTokenPoolTransactorSession) SetDomains(domains []USDCTokenPoolDomainUpdate) (*types.Transaction, error) { + return _USDCTokenPool.Contract.SetDomains(&_USDCTokenPool.TransactOpts, domains) +} + +func (_USDCTokenPool *USDCTokenPoolTransactor) SetRateLimitAdmin(opts *bind.TransactOpts, rateLimitAdmin common.Address) (*types.Transaction, error) { + return _USDCTokenPool.contract.Transact(opts, "setRateLimitAdmin", rateLimitAdmin) +} + +func (_USDCTokenPool *USDCTokenPoolSession) SetRateLimitAdmin(rateLimitAdmin common.Address) (*types.Transaction, error) { + return _USDCTokenPool.Contract.SetRateLimitAdmin(&_USDCTokenPool.TransactOpts, rateLimitAdmin) +} + +func (_USDCTokenPool *USDCTokenPoolTransactorSession) SetRateLimitAdmin(rateLimitAdmin common.Address) (*types.Transaction, error) { + return _USDCTokenPool.Contract.SetRateLimitAdmin(&_USDCTokenPool.TransactOpts, rateLimitAdmin) +} + +func (_USDCTokenPool *USDCTokenPoolTransactor) SetRouter(opts *bind.TransactOpts, newRouter common.Address) (*types.Transaction, error) { + return _USDCTokenPool.contract.Transact(opts, "setRouter", newRouter) +} + +func (_USDCTokenPool *USDCTokenPoolSession) SetRouter(newRouter common.Address) (*types.Transaction, error) { + return _USDCTokenPool.Contract.SetRouter(&_USDCTokenPool.TransactOpts, newRouter) +} + +func (_USDCTokenPool *USDCTokenPoolTransactorSession) SetRouter(newRouter common.Address) (*types.Transaction, error) { + return _USDCTokenPool.Contract.SetRouter(&_USDCTokenPool.TransactOpts, newRouter) +} + +func (_USDCTokenPool *USDCTokenPoolTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _USDCTokenPool.contract.Transact(opts, "transferOwnership", to) +} + +func (_USDCTokenPool *USDCTokenPoolSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _USDCTokenPool.Contract.TransferOwnership(&_USDCTokenPool.TransactOpts, to) +} + +func (_USDCTokenPool *USDCTokenPoolTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _USDCTokenPool.Contract.TransferOwnership(&_USDCTokenPool.TransactOpts, to) +} + +type USDCTokenPoolAllowListAddIterator struct { + Event *USDCTokenPoolAllowListAdd + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *USDCTokenPoolAllowListAddIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolAllowListAdd) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolAllowListAdd) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *USDCTokenPoolAllowListAddIterator) Error() error { + return it.fail +} + +func (it *USDCTokenPoolAllowListAddIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type USDCTokenPoolAllowListAdd struct { + Sender common.Address + Raw types.Log +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) FilterAllowListAdd(opts *bind.FilterOpts) (*USDCTokenPoolAllowListAddIterator, error) { + + logs, sub, err := _USDCTokenPool.contract.FilterLogs(opts, "AllowListAdd") + if err != nil { + return nil, err + } + return &USDCTokenPoolAllowListAddIterator{contract: _USDCTokenPool.contract, event: "AllowListAdd", logs: logs, sub: sub}, nil +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) WatchAllowListAdd(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolAllowListAdd) (event.Subscription, error) { + + logs, sub, err := _USDCTokenPool.contract.WatchLogs(opts, "AllowListAdd") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(USDCTokenPoolAllowListAdd) + if err := _USDCTokenPool.contract.UnpackLog(event, "AllowListAdd", 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 +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) ParseAllowListAdd(log types.Log) (*USDCTokenPoolAllowListAdd, error) { + event := new(USDCTokenPoolAllowListAdd) + if err := _USDCTokenPool.contract.UnpackLog(event, "AllowListAdd", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type USDCTokenPoolAllowListRemoveIterator struct { + Event *USDCTokenPoolAllowListRemove + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *USDCTokenPoolAllowListRemoveIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolAllowListRemove) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolAllowListRemove) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *USDCTokenPoolAllowListRemoveIterator) Error() error { + return it.fail +} + +func (it *USDCTokenPoolAllowListRemoveIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type USDCTokenPoolAllowListRemove struct { + Sender common.Address + Raw types.Log +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) FilterAllowListRemove(opts *bind.FilterOpts) (*USDCTokenPoolAllowListRemoveIterator, error) { + + logs, sub, err := _USDCTokenPool.contract.FilterLogs(opts, "AllowListRemove") + if err != nil { + return nil, err + } + return &USDCTokenPoolAllowListRemoveIterator{contract: _USDCTokenPool.contract, event: "AllowListRemove", logs: logs, sub: sub}, nil +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) WatchAllowListRemove(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolAllowListRemove) (event.Subscription, error) { + + logs, sub, err := _USDCTokenPool.contract.WatchLogs(opts, "AllowListRemove") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(USDCTokenPoolAllowListRemove) + if err := _USDCTokenPool.contract.UnpackLog(event, "AllowListRemove", 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 +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) ParseAllowListRemove(log types.Log) (*USDCTokenPoolAllowListRemove, error) { + event := new(USDCTokenPoolAllowListRemove) + if err := _USDCTokenPool.contract.UnpackLog(event, "AllowListRemove", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type USDCTokenPoolBurnedIterator struct { + Event *USDCTokenPoolBurned + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *USDCTokenPoolBurnedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolBurned) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolBurned) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *USDCTokenPoolBurnedIterator) Error() error { + return it.fail +} + +func (it *USDCTokenPoolBurnedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type USDCTokenPoolBurned struct { + Sender common.Address + Amount *big.Int + Raw types.Log +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) FilterBurned(opts *bind.FilterOpts, sender []common.Address) (*USDCTokenPoolBurnedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _USDCTokenPool.contract.FilterLogs(opts, "Burned", senderRule) + if err != nil { + return nil, err + } + return &USDCTokenPoolBurnedIterator{contract: _USDCTokenPool.contract, event: "Burned", logs: logs, sub: sub}, nil +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) WatchBurned(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolBurned, sender []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _USDCTokenPool.contract.WatchLogs(opts, "Burned", senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(USDCTokenPoolBurned) + if err := _USDCTokenPool.contract.UnpackLog(event, "Burned", 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 +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) ParseBurned(log types.Log) (*USDCTokenPoolBurned, error) { + event := new(USDCTokenPoolBurned) + if err := _USDCTokenPool.contract.UnpackLog(event, "Burned", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type USDCTokenPoolChainAddedIterator struct { + Event *USDCTokenPoolChainAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *USDCTokenPoolChainAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolChainAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolChainAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *USDCTokenPoolChainAddedIterator) Error() error { + return it.fail +} + +func (it *USDCTokenPoolChainAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type USDCTokenPoolChainAdded struct { + RemoteChainSelector uint64 + RemoteToken []byte + OutboundRateLimiterConfig RateLimiterConfig + InboundRateLimiterConfig RateLimiterConfig + Raw types.Log +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) FilterChainAdded(opts *bind.FilterOpts) (*USDCTokenPoolChainAddedIterator, error) { + + logs, sub, err := _USDCTokenPool.contract.FilterLogs(opts, "ChainAdded") + if err != nil { + return nil, err + } + return &USDCTokenPoolChainAddedIterator{contract: _USDCTokenPool.contract, event: "ChainAdded", logs: logs, sub: sub}, nil +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) WatchChainAdded(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolChainAdded) (event.Subscription, error) { + + logs, sub, err := _USDCTokenPool.contract.WatchLogs(opts, "ChainAdded") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(USDCTokenPoolChainAdded) + if err := _USDCTokenPool.contract.UnpackLog(event, "ChainAdded", 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 +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) ParseChainAdded(log types.Log) (*USDCTokenPoolChainAdded, error) { + event := new(USDCTokenPoolChainAdded) + if err := _USDCTokenPool.contract.UnpackLog(event, "ChainAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type USDCTokenPoolChainConfiguredIterator struct { + Event *USDCTokenPoolChainConfigured + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *USDCTokenPoolChainConfiguredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolChainConfigured) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolChainConfigured) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *USDCTokenPoolChainConfiguredIterator) Error() error { + return it.fail +} + +func (it *USDCTokenPoolChainConfiguredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type USDCTokenPoolChainConfigured struct { + RemoteChainSelector uint64 + OutboundRateLimiterConfig RateLimiterConfig + InboundRateLimiterConfig RateLimiterConfig + Raw types.Log +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) FilterChainConfigured(opts *bind.FilterOpts) (*USDCTokenPoolChainConfiguredIterator, error) { + + logs, sub, err := _USDCTokenPool.contract.FilterLogs(opts, "ChainConfigured") + if err != nil { + return nil, err + } + return &USDCTokenPoolChainConfiguredIterator{contract: _USDCTokenPool.contract, event: "ChainConfigured", logs: logs, sub: sub}, nil +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) WatchChainConfigured(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolChainConfigured) (event.Subscription, error) { + + logs, sub, err := _USDCTokenPool.contract.WatchLogs(opts, "ChainConfigured") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(USDCTokenPoolChainConfigured) + if err := _USDCTokenPool.contract.UnpackLog(event, "ChainConfigured", 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 +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) ParseChainConfigured(log types.Log) (*USDCTokenPoolChainConfigured, error) { + event := new(USDCTokenPoolChainConfigured) + if err := _USDCTokenPool.contract.UnpackLog(event, "ChainConfigured", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type USDCTokenPoolChainRemovedIterator struct { + Event *USDCTokenPoolChainRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *USDCTokenPoolChainRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolChainRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolChainRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *USDCTokenPoolChainRemovedIterator) Error() error { + return it.fail +} + +func (it *USDCTokenPoolChainRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type USDCTokenPoolChainRemoved struct { + RemoteChainSelector uint64 + Raw types.Log +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) FilterChainRemoved(opts *bind.FilterOpts) (*USDCTokenPoolChainRemovedIterator, error) { + + logs, sub, err := _USDCTokenPool.contract.FilterLogs(opts, "ChainRemoved") + if err != nil { + return nil, err + } + return &USDCTokenPoolChainRemovedIterator{contract: _USDCTokenPool.contract, event: "ChainRemoved", logs: logs, sub: sub}, nil +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolChainRemoved) (event.Subscription, error) { + + logs, sub, err := _USDCTokenPool.contract.WatchLogs(opts, "ChainRemoved") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(USDCTokenPoolChainRemoved) + if err := _USDCTokenPool.contract.UnpackLog(event, "ChainRemoved", 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 +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) ParseChainRemoved(log types.Log) (*USDCTokenPoolChainRemoved, error) { + event := new(USDCTokenPoolChainRemoved) + if err := _USDCTokenPool.contract.UnpackLog(event, "ChainRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type USDCTokenPoolConfigChangedIterator struct { + Event *USDCTokenPoolConfigChanged + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *USDCTokenPoolConfigChangedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolConfigChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolConfigChanged) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *USDCTokenPoolConfigChangedIterator) Error() error { + return it.fail +} + +func (it *USDCTokenPoolConfigChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type USDCTokenPoolConfigChanged struct { + Config RateLimiterConfig + Raw types.Log +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) FilterConfigChanged(opts *bind.FilterOpts) (*USDCTokenPoolConfigChangedIterator, error) { + + logs, sub, err := _USDCTokenPool.contract.FilterLogs(opts, "ConfigChanged") + if err != nil { + return nil, err + } + return &USDCTokenPoolConfigChangedIterator{contract: _USDCTokenPool.contract, event: "ConfigChanged", logs: logs, sub: sub}, nil +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) WatchConfigChanged(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolConfigChanged) (event.Subscription, error) { + + logs, sub, err := _USDCTokenPool.contract.WatchLogs(opts, "ConfigChanged") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(USDCTokenPoolConfigChanged) + if err := _USDCTokenPool.contract.UnpackLog(event, "ConfigChanged", 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 +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) ParseConfigChanged(log types.Log) (*USDCTokenPoolConfigChanged, error) { + event := new(USDCTokenPoolConfigChanged) + if err := _USDCTokenPool.contract.UnpackLog(event, "ConfigChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type USDCTokenPoolConfigSetIterator struct { + Event *USDCTokenPoolConfigSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *USDCTokenPoolConfigSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *USDCTokenPoolConfigSetIterator) Error() error { + return it.fail +} + +func (it *USDCTokenPoolConfigSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type USDCTokenPoolConfigSet struct { + TokenMessenger common.Address + Raw types.Log +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) FilterConfigSet(opts *bind.FilterOpts) (*USDCTokenPoolConfigSetIterator, error) { + + logs, sub, err := _USDCTokenPool.contract.FilterLogs(opts, "ConfigSet") + if err != nil { + return nil, err + } + return &USDCTokenPoolConfigSetIterator{contract: _USDCTokenPool.contract, event: "ConfigSet", logs: logs, sub: sub}, nil +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) WatchConfigSet(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolConfigSet) (event.Subscription, error) { + + logs, sub, err := _USDCTokenPool.contract.WatchLogs(opts, "ConfigSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(USDCTokenPoolConfigSet) + if err := _USDCTokenPool.contract.UnpackLog(event, "ConfigSet", 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 +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) ParseConfigSet(log types.Log) (*USDCTokenPoolConfigSet, error) { + event := new(USDCTokenPoolConfigSet) + if err := _USDCTokenPool.contract.UnpackLog(event, "ConfigSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type USDCTokenPoolDomainsSetIterator struct { + Event *USDCTokenPoolDomainsSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *USDCTokenPoolDomainsSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolDomainsSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolDomainsSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *USDCTokenPoolDomainsSetIterator) Error() error { + return it.fail +} + +func (it *USDCTokenPoolDomainsSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type USDCTokenPoolDomainsSet struct { + Arg0 []USDCTokenPoolDomainUpdate + Raw types.Log +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) FilterDomainsSet(opts *bind.FilterOpts) (*USDCTokenPoolDomainsSetIterator, error) { + + logs, sub, err := _USDCTokenPool.contract.FilterLogs(opts, "DomainsSet") + if err != nil { + return nil, err + } + return &USDCTokenPoolDomainsSetIterator{contract: _USDCTokenPool.contract, event: "DomainsSet", logs: logs, sub: sub}, nil +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) WatchDomainsSet(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolDomainsSet) (event.Subscription, error) { + + logs, sub, err := _USDCTokenPool.contract.WatchLogs(opts, "DomainsSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(USDCTokenPoolDomainsSet) + if err := _USDCTokenPool.contract.UnpackLog(event, "DomainsSet", 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 +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) ParseDomainsSet(log types.Log) (*USDCTokenPoolDomainsSet, error) { + event := new(USDCTokenPoolDomainsSet) + if err := _USDCTokenPool.contract.UnpackLog(event, "DomainsSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type USDCTokenPoolLockedIterator struct { + Event *USDCTokenPoolLocked + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *USDCTokenPoolLockedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolLocked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolLocked) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *USDCTokenPoolLockedIterator) Error() error { + return it.fail +} + +func (it *USDCTokenPoolLockedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type USDCTokenPoolLocked struct { + Sender common.Address + Amount *big.Int + Raw types.Log +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) FilterLocked(opts *bind.FilterOpts, sender []common.Address) (*USDCTokenPoolLockedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _USDCTokenPool.contract.FilterLogs(opts, "Locked", senderRule) + if err != nil { + return nil, err + } + return &USDCTokenPoolLockedIterator{contract: _USDCTokenPool.contract, event: "Locked", logs: logs, sub: sub}, nil +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) WatchLocked(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolLocked, sender []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + + logs, sub, err := _USDCTokenPool.contract.WatchLogs(opts, "Locked", senderRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(USDCTokenPoolLocked) + if err := _USDCTokenPool.contract.UnpackLog(event, "Locked", 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 +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) ParseLocked(log types.Log) (*USDCTokenPoolLocked, error) { + event := new(USDCTokenPoolLocked) + if err := _USDCTokenPool.contract.UnpackLog(event, "Locked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type USDCTokenPoolMintedIterator struct { + Event *USDCTokenPoolMinted + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *USDCTokenPoolMintedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolMinted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolMinted) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *USDCTokenPoolMintedIterator) Error() error { + return it.fail +} + +func (it *USDCTokenPoolMintedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type USDCTokenPoolMinted struct { + Sender common.Address + Recipient common.Address + Amount *big.Int + Raw types.Log +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) FilterMinted(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*USDCTokenPoolMintedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _USDCTokenPool.contract.FilterLogs(opts, "Minted", senderRule, recipientRule) + if err != nil { + return nil, err + } + return &USDCTokenPoolMintedIterator{contract: _USDCTokenPool.contract, event: "Minted", logs: logs, sub: sub}, nil +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) WatchMinted(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolMinted, sender []common.Address, recipient []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _USDCTokenPool.contract.WatchLogs(opts, "Minted", senderRule, recipientRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(USDCTokenPoolMinted) + if err := _USDCTokenPool.contract.UnpackLog(event, "Minted", 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 +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) ParseMinted(log types.Log) (*USDCTokenPoolMinted, error) { + event := new(USDCTokenPoolMinted) + if err := _USDCTokenPool.contract.UnpackLog(event, "Minted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type USDCTokenPoolOwnershipTransferRequestedIterator struct { + Event *USDCTokenPoolOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *USDCTokenPoolOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *USDCTokenPoolOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *USDCTokenPoolOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type USDCTokenPoolOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*USDCTokenPoolOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _USDCTokenPool.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &USDCTokenPoolOwnershipTransferRequestedIterator{contract: _USDCTokenPool.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _USDCTokenPool.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(USDCTokenPoolOwnershipTransferRequested) + if err := _USDCTokenPool.contract.UnpackLog(event, "OwnershipTransferRequested", 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 +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) ParseOwnershipTransferRequested(log types.Log) (*USDCTokenPoolOwnershipTransferRequested, error) { + event := new(USDCTokenPoolOwnershipTransferRequested) + if err := _USDCTokenPool.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type USDCTokenPoolOwnershipTransferredIterator struct { + Event *USDCTokenPoolOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *USDCTokenPoolOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *USDCTokenPoolOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *USDCTokenPoolOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type USDCTokenPoolOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*USDCTokenPoolOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _USDCTokenPool.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &USDCTokenPoolOwnershipTransferredIterator{contract: _USDCTokenPool.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _USDCTokenPool.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(USDCTokenPoolOwnershipTransferred) + if err := _USDCTokenPool.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 +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) ParseOwnershipTransferred(log types.Log) (*USDCTokenPoolOwnershipTransferred, error) { + event := new(USDCTokenPoolOwnershipTransferred) + if err := _USDCTokenPool.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type USDCTokenPoolRateLimitAdminSetIterator struct { + Event *USDCTokenPoolRateLimitAdminSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *USDCTokenPoolRateLimitAdminSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolRateLimitAdminSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolRateLimitAdminSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *USDCTokenPoolRateLimitAdminSetIterator) Error() error { + return it.fail +} + +func (it *USDCTokenPoolRateLimitAdminSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type USDCTokenPoolRateLimitAdminSet struct { + RateLimitAdmin common.Address + Raw types.Log +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) FilterRateLimitAdminSet(opts *bind.FilterOpts) (*USDCTokenPoolRateLimitAdminSetIterator, error) { + + logs, sub, err := _USDCTokenPool.contract.FilterLogs(opts, "RateLimitAdminSet") + if err != nil { + return nil, err + } + return &USDCTokenPoolRateLimitAdminSetIterator{contract: _USDCTokenPool.contract, event: "RateLimitAdminSet", logs: logs, sub: sub}, nil +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) WatchRateLimitAdminSet(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolRateLimitAdminSet) (event.Subscription, error) { + + logs, sub, err := _USDCTokenPool.contract.WatchLogs(opts, "RateLimitAdminSet") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(USDCTokenPoolRateLimitAdminSet) + if err := _USDCTokenPool.contract.UnpackLog(event, "RateLimitAdminSet", 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 +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) ParseRateLimitAdminSet(log types.Log) (*USDCTokenPoolRateLimitAdminSet, error) { + event := new(USDCTokenPoolRateLimitAdminSet) + if err := _USDCTokenPool.contract.UnpackLog(event, "RateLimitAdminSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type USDCTokenPoolReleasedIterator struct { + Event *USDCTokenPoolReleased + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *USDCTokenPoolReleasedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolReleased) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolReleased) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *USDCTokenPoolReleasedIterator) Error() error { + return it.fail +} + +func (it *USDCTokenPoolReleasedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type USDCTokenPoolReleased struct { + Sender common.Address + Recipient common.Address + Amount *big.Int + Raw types.Log +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) FilterReleased(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*USDCTokenPoolReleasedIterator, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _USDCTokenPool.contract.FilterLogs(opts, "Released", senderRule, recipientRule) + if err != nil { + return nil, err + } + return &USDCTokenPoolReleasedIterator{contract: _USDCTokenPool.contract, event: "Released", logs: logs, sub: sub}, nil +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) WatchReleased(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolReleased, sender []common.Address, recipient []common.Address) (event.Subscription, error) { + + var senderRule []interface{} + for _, senderItem := range sender { + senderRule = append(senderRule, senderItem) + } + var recipientRule []interface{} + for _, recipientItem := range recipient { + recipientRule = append(recipientRule, recipientItem) + } + + logs, sub, err := _USDCTokenPool.contract.WatchLogs(opts, "Released", senderRule, recipientRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(USDCTokenPoolReleased) + if err := _USDCTokenPool.contract.UnpackLog(event, "Released", 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 +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) ParseReleased(log types.Log) (*USDCTokenPoolReleased, error) { + event := new(USDCTokenPoolReleased) + if err := _USDCTokenPool.contract.UnpackLog(event, "Released", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type USDCTokenPoolRemotePoolAddedIterator struct { + Event *USDCTokenPoolRemotePoolAdded + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *USDCTokenPoolRemotePoolAddedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolRemotePoolAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolRemotePoolAdded) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *USDCTokenPoolRemotePoolAddedIterator) Error() error { + return it.fail +} + +func (it *USDCTokenPoolRemotePoolAddedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type USDCTokenPoolRemotePoolAdded struct { + RemoteChainSelector uint64 + RemotePoolAddress []byte + Raw types.Log +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) FilterRemotePoolAdded(opts *bind.FilterOpts, remoteChainSelector []uint64) (*USDCTokenPoolRemotePoolAddedIterator, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _USDCTokenPool.contract.FilterLogs(opts, "RemotePoolAdded", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return &USDCTokenPoolRemotePoolAddedIterator{contract: _USDCTokenPool.contract, event: "RemotePoolAdded", logs: logs, sub: sub}, nil +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) WatchRemotePoolAdded(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolRemotePoolAdded, remoteChainSelector []uint64) (event.Subscription, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _USDCTokenPool.contract.WatchLogs(opts, "RemotePoolAdded", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(USDCTokenPoolRemotePoolAdded) + if err := _USDCTokenPool.contract.UnpackLog(event, "RemotePoolAdded", 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 +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) ParseRemotePoolAdded(log types.Log) (*USDCTokenPoolRemotePoolAdded, error) { + event := new(USDCTokenPoolRemotePoolAdded) + if err := _USDCTokenPool.contract.UnpackLog(event, "RemotePoolAdded", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type USDCTokenPoolRemotePoolRemovedIterator struct { + Event *USDCTokenPoolRemotePoolRemoved + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *USDCTokenPoolRemotePoolRemovedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolRemotePoolRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolRemotePoolRemoved) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *USDCTokenPoolRemotePoolRemovedIterator) Error() error { + return it.fail +} + +func (it *USDCTokenPoolRemotePoolRemovedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type USDCTokenPoolRemotePoolRemoved struct { + RemoteChainSelector uint64 + RemotePoolAddress []byte + Raw types.Log +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) FilterRemotePoolRemoved(opts *bind.FilterOpts, remoteChainSelector []uint64) (*USDCTokenPoolRemotePoolRemovedIterator, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _USDCTokenPool.contract.FilterLogs(opts, "RemotePoolRemoved", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return &USDCTokenPoolRemotePoolRemovedIterator{contract: _USDCTokenPool.contract, event: "RemotePoolRemoved", logs: logs, sub: sub}, nil +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) WatchRemotePoolRemoved(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolRemotePoolRemoved, remoteChainSelector []uint64) (event.Subscription, error) { + + var remoteChainSelectorRule []interface{} + for _, remoteChainSelectorItem := range remoteChainSelector { + remoteChainSelectorRule = append(remoteChainSelectorRule, remoteChainSelectorItem) + } + + logs, sub, err := _USDCTokenPool.contract.WatchLogs(opts, "RemotePoolRemoved", remoteChainSelectorRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(USDCTokenPoolRemotePoolRemoved) + if err := _USDCTokenPool.contract.UnpackLog(event, "RemotePoolRemoved", 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 +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) ParseRemotePoolRemoved(log types.Log) (*USDCTokenPoolRemotePoolRemoved, error) { + event := new(USDCTokenPoolRemotePoolRemoved) + if err := _USDCTokenPool.contract.UnpackLog(event, "RemotePoolRemoved", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type USDCTokenPoolRouterUpdatedIterator struct { + Event *USDCTokenPoolRouterUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *USDCTokenPoolRouterUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolRouterUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolRouterUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *USDCTokenPoolRouterUpdatedIterator) Error() error { + return it.fail +} + +func (it *USDCTokenPoolRouterUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type USDCTokenPoolRouterUpdated struct { + OldRouter common.Address + NewRouter common.Address + Raw types.Log +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) FilterRouterUpdated(opts *bind.FilterOpts) (*USDCTokenPoolRouterUpdatedIterator, error) { + + logs, sub, err := _USDCTokenPool.contract.FilterLogs(opts, "RouterUpdated") + if err != nil { + return nil, err + } + return &USDCTokenPoolRouterUpdatedIterator{contract: _USDCTokenPool.contract, event: "RouterUpdated", logs: logs, sub: sub}, nil +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) WatchRouterUpdated(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolRouterUpdated) (event.Subscription, error) { + + logs, sub, err := _USDCTokenPool.contract.WatchLogs(opts, "RouterUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(USDCTokenPoolRouterUpdated) + if err := _USDCTokenPool.contract.UnpackLog(event, "RouterUpdated", 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 +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) ParseRouterUpdated(log types.Log) (*USDCTokenPoolRouterUpdated, error) { + event := new(USDCTokenPoolRouterUpdated) + if err := _USDCTokenPool.contract.UnpackLog(event, "RouterUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type USDCTokenPoolTokensConsumedIterator struct { + Event *USDCTokenPoolTokensConsumed + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *USDCTokenPoolTokensConsumedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolTokensConsumed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(USDCTokenPoolTokensConsumed) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *USDCTokenPoolTokensConsumedIterator) Error() error { + return it.fail +} + +func (it *USDCTokenPoolTokensConsumedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type USDCTokenPoolTokensConsumed struct { + Tokens *big.Int + Raw types.Log +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) FilterTokensConsumed(opts *bind.FilterOpts) (*USDCTokenPoolTokensConsumedIterator, error) { + + logs, sub, err := _USDCTokenPool.contract.FilterLogs(opts, "TokensConsumed") + if err != nil { + return nil, err + } + return &USDCTokenPoolTokensConsumedIterator{contract: _USDCTokenPool.contract, event: "TokensConsumed", logs: logs, sub: sub}, nil +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) WatchTokensConsumed(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolTokensConsumed) (event.Subscription, error) { + + logs, sub, err := _USDCTokenPool.contract.WatchLogs(opts, "TokensConsumed") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(USDCTokenPoolTokensConsumed) + if err := _USDCTokenPool.contract.UnpackLog(event, "TokensConsumed", 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 +} + +func (_USDCTokenPool *USDCTokenPoolFilterer) ParseTokensConsumed(log types.Log) (*USDCTokenPoolTokensConsumed, error) { + event := new(USDCTokenPoolTokensConsumed) + if err := _USDCTokenPool.contract.UnpackLog(event, "TokensConsumed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (_USDCTokenPool *USDCTokenPool) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _USDCTokenPool.abi.Events["AllowListAdd"].ID: + return _USDCTokenPool.ParseAllowListAdd(log) + case _USDCTokenPool.abi.Events["AllowListRemove"].ID: + return _USDCTokenPool.ParseAllowListRemove(log) + case _USDCTokenPool.abi.Events["Burned"].ID: + return _USDCTokenPool.ParseBurned(log) + case _USDCTokenPool.abi.Events["ChainAdded"].ID: + return _USDCTokenPool.ParseChainAdded(log) + case _USDCTokenPool.abi.Events["ChainConfigured"].ID: + return _USDCTokenPool.ParseChainConfigured(log) + case _USDCTokenPool.abi.Events["ChainRemoved"].ID: + return _USDCTokenPool.ParseChainRemoved(log) + case _USDCTokenPool.abi.Events["ConfigChanged"].ID: + return _USDCTokenPool.ParseConfigChanged(log) + case _USDCTokenPool.abi.Events["ConfigSet"].ID: + return _USDCTokenPool.ParseConfigSet(log) + case _USDCTokenPool.abi.Events["DomainsSet"].ID: + return _USDCTokenPool.ParseDomainsSet(log) + case _USDCTokenPool.abi.Events["Locked"].ID: + return _USDCTokenPool.ParseLocked(log) + case _USDCTokenPool.abi.Events["Minted"].ID: + return _USDCTokenPool.ParseMinted(log) + case _USDCTokenPool.abi.Events["OwnershipTransferRequested"].ID: + return _USDCTokenPool.ParseOwnershipTransferRequested(log) + case _USDCTokenPool.abi.Events["OwnershipTransferred"].ID: + return _USDCTokenPool.ParseOwnershipTransferred(log) + case _USDCTokenPool.abi.Events["RateLimitAdminSet"].ID: + return _USDCTokenPool.ParseRateLimitAdminSet(log) + case _USDCTokenPool.abi.Events["Released"].ID: + return _USDCTokenPool.ParseReleased(log) + case _USDCTokenPool.abi.Events["RemotePoolAdded"].ID: + return _USDCTokenPool.ParseRemotePoolAdded(log) + case _USDCTokenPool.abi.Events["RemotePoolRemoved"].ID: + return _USDCTokenPool.ParseRemotePoolRemoved(log) + case _USDCTokenPool.abi.Events["RouterUpdated"].ID: + return _USDCTokenPool.ParseRouterUpdated(log) + case _USDCTokenPool.abi.Events["TokensConsumed"].ID: + return _USDCTokenPool.ParseTokensConsumed(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (USDCTokenPoolAllowListAdd) Topic() common.Hash { + return common.HexToHash("0x2640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d8") +} + +func (USDCTokenPoolAllowListRemove) Topic() common.Hash { + return common.HexToHash("0x800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf7566") +} + +func (USDCTokenPoolBurned) Topic() common.Hash { + return common.HexToHash("0x696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df7") +} + +func (USDCTokenPoolChainAdded) Topic() common.Hash { + return common.HexToHash("0x8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c2") +} + +func (USDCTokenPoolChainConfigured) Topic() common.Hash { + return common.HexToHash("0x0350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b") +} + +func (USDCTokenPoolChainRemoved) Topic() common.Hash { + return common.HexToHash("0x5204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d859916") +} + +func (USDCTokenPoolConfigChanged) Topic() common.Hash { + return common.HexToHash("0x9ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c19") +} + +func (USDCTokenPoolConfigSet) Topic() common.Hash { + return common.HexToHash("0x2e902d38f15b233cbb63711add0fca4545334d3a169d60c0a616494d7eea9544") +} + +func (USDCTokenPoolDomainsSet) Topic() common.Hash { + return common.HexToHash("0x1889010d2535a0ab1643678d1da87fbbe8b87b2f585b47ddb72ec622aef9ee56") +} + +func (USDCTokenPoolLocked) Topic() common.Hash { + return common.HexToHash("0x9f1ec8c880f76798e7b793325d625e9b60e4082a553c98f42b6cda368dd60008") +} + +func (USDCTokenPoolMinted) Topic() common.Hash { + return common.HexToHash("0x9d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0") +} + +func (USDCTokenPoolOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (USDCTokenPoolOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (USDCTokenPoolRateLimitAdminSet) Topic() common.Hash { + return common.HexToHash("0x44676b5284b809a22248eba0da87391d79098be38bb03154be88a58bf4d09174") +} + +func (USDCTokenPoolReleased) Topic() common.Hash { + return common.HexToHash("0x2d87480f50083e2b2759522a8fdda59802650a8055e609a7772cf70c07748f52") +} + +func (USDCTokenPoolRemotePoolAdded) Topic() common.Hash { + return common.HexToHash("0x7d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea") +} + +func (USDCTokenPoolRemotePoolRemoved) Topic() common.Hash { + return common.HexToHash("0x52d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d76") +} + +func (USDCTokenPoolRouterUpdated) Topic() common.Hash { + return common.HexToHash("0x02dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f1684") +} + +func (USDCTokenPoolTokensConsumed) Topic() common.Hash { + return common.HexToHash("0x1871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690a") +} + +func (_USDCTokenPool *USDCTokenPool) Address() common.Address { + return _USDCTokenPool.address +} + +type USDCTokenPoolInterface interface { + SUPPORTEDUSDCVERSION(opts *bind.CallOpts) (uint32, error) + + GetAllowList(opts *bind.CallOpts) ([]common.Address, error) + + GetAllowListEnabled(opts *bind.CallOpts) (bool, error) + + GetCurrentInboundRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64) (RateLimiterTokenBucket, error) + + GetCurrentOutboundRateLimiterState(opts *bind.CallOpts, remoteChainSelector uint64) (RateLimiterTokenBucket, error) + + GetDomain(opts *bind.CallOpts, chainSelector uint64) (USDCTokenPoolDomain, error) + + GetRateLimitAdmin(opts *bind.CallOpts) (common.Address, error) + + GetRemotePools(opts *bind.CallOpts, remoteChainSelector uint64) ([][]byte, error) + + GetRemoteToken(opts *bind.CallOpts, remoteChainSelector uint64) ([]byte, error) + + GetRmnProxy(opts *bind.CallOpts) (common.Address, error) + + GetRouter(opts *bind.CallOpts) (common.Address, error) + + GetSupportedChains(opts *bind.CallOpts) ([]uint64, error) + + GetToken(opts *bind.CallOpts) (common.Address, error) + + GetTokenDecimals(opts *bind.CallOpts) (uint8, error) + + ILocalDomainIdentifier(opts *bind.CallOpts) (uint32, error) + + IMessageTransmitter(opts *bind.CallOpts) (common.Address, error) + + ITokenMessenger(opts *bind.CallOpts) (common.Address, error) + + IsRemotePool(opts *bind.CallOpts, remoteChainSelector uint64, remotePoolAddress []byte) (bool, error) + + IsSupportedChain(opts *bind.CallOpts, remoteChainSelector uint64) (bool, error) + + IsSupportedToken(opts *bind.CallOpts, token common.Address) (bool, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + AddRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) + + ApplyAllowListUpdates(opts *bind.TransactOpts, removes []common.Address, adds []common.Address) (*types.Transaction, error) + + ApplyChainUpdates(opts *bind.TransactOpts, remoteChainSelectorsToRemove []uint64, chainsToAdd []TokenPoolChainUpdate) (*types.Transaction, error) + + LockOrBurn(opts *bind.TransactOpts, lockOrBurnIn PoolLockOrBurnInV1) (*types.Transaction, error) + + ReleaseOrMint(opts *bind.TransactOpts, releaseOrMintIn PoolReleaseOrMintInV1) (*types.Transaction, error) + + RemoveRemotePool(opts *bind.TransactOpts, remoteChainSelector uint64, remotePoolAddress []byte) (*types.Transaction, error) + + SetChainRateLimiterConfig(opts *bind.TransactOpts, remoteChainSelector uint64, outboundConfig RateLimiterConfig, inboundConfig RateLimiterConfig) (*types.Transaction, error) + + SetDomains(opts *bind.TransactOpts, domains []USDCTokenPoolDomainUpdate) (*types.Transaction, error) + + SetRateLimitAdmin(opts *bind.TransactOpts, rateLimitAdmin common.Address) (*types.Transaction, error) + + SetRouter(opts *bind.TransactOpts, newRouter common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + FilterAllowListAdd(opts *bind.FilterOpts) (*USDCTokenPoolAllowListAddIterator, error) + + WatchAllowListAdd(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolAllowListAdd) (event.Subscription, error) + + ParseAllowListAdd(log types.Log) (*USDCTokenPoolAllowListAdd, error) + + FilterAllowListRemove(opts *bind.FilterOpts) (*USDCTokenPoolAllowListRemoveIterator, error) + + WatchAllowListRemove(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolAllowListRemove) (event.Subscription, error) + + ParseAllowListRemove(log types.Log) (*USDCTokenPoolAllowListRemove, error) + + FilterBurned(opts *bind.FilterOpts, sender []common.Address) (*USDCTokenPoolBurnedIterator, error) + + WatchBurned(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolBurned, sender []common.Address) (event.Subscription, error) + + ParseBurned(log types.Log) (*USDCTokenPoolBurned, error) + + FilterChainAdded(opts *bind.FilterOpts) (*USDCTokenPoolChainAddedIterator, error) + + WatchChainAdded(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolChainAdded) (event.Subscription, error) + + ParseChainAdded(log types.Log) (*USDCTokenPoolChainAdded, error) + + FilterChainConfigured(opts *bind.FilterOpts) (*USDCTokenPoolChainConfiguredIterator, error) + + WatchChainConfigured(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolChainConfigured) (event.Subscription, error) + + ParseChainConfigured(log types.Log) (*USDCTokenPoolChainConfigured, error) + + FilterChainRemoved(opts *bind.FilterOpts) (*USDCTokenPoolChainRemovedIterator, error) + + WatchChainRemoved(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolChainRemoved) (event.Subscription, error) + + ParseChainRemoved(log types.Log) (*USDCTokenPoolChainRemoved, error) + + FilterConfigChanged(opts *bind.FilterOpts) (*USDCTokenPoolConfigChangedIterator, error) + + WatchConfigChanged(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolConfigChanged) (event.Subscription, error) + + ParseConfigChanged(log types.Log) (*USDCTokenPoolConfigChanged, error) + + FilterConfigSet(opts *bind.FilterOpts) (*USDCTokenPoolConfigSetIterator, error) + + WatchConfigSet(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolConfigSet) (event.Subscription, error) + + ParseConfigSet(log types.Log) (*USDCTokenPoolConfigSet, error) + + FilterDomainsSet(opts *bind.FilterOpts) (*USDCTokenPoolDomainsSetIterator, error) + + WatchDomainsSet(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolDomainsSet) (event.Subscription, error) + + ParseDomainsSet(log types.Log) (*USDCTokenPoolDomainsSet, error) + + FilterLocked(opts *bind.FilterOpts, sender []common.Address) (*USDCTokenPoolLockedIterator, error) + + WatchLocked(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolLocked, sender []common.Address) (event.Subscription, error) + + ParseLocked(log types.Log) (*USDCTokenPoolLocked, error) + + FilterMinted(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*USDCTokenPoolMintedIterator, error) + + WatchMinted(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolMinted, sender []common.Address, recipient []common.Address) (event.Subscription, error) + + ParseMinted(log types.Log) (*USDCTokenPoolMinted, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*USDCTokenPoolOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*USDCTokenPoolOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*USDCTokenPoolOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*USDCTokenPoolOwnershipTransferred, error) + + FilterRateLimitAdminSet(opts *bind.FilterOpts) (*USDCTokenPoolRateLimitAdminSetIterator, error) + + WatchRateLimitAdminSet(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolRateLimitAdminSet) (event.Subscription, error) + + ParseRateLimitAdminSet(log types.Log) (*USDCTokenPoolRateLimitAdminSet, error) + + FilterReleased(opts *bind.FilterOpts, sender []common.Address, recipient []common.Address) (*USDCTokenPoolReleasedIterator, error) + + WatchReleased(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolReleased, sender []common.Address, recipient []common.Address) (event.Subscription, error) + + ParseReleased(log types.Log) (*USDCTokenPoolReleased, error) + + FilterRemotePoolAdded(opts *bind.FilterOpts, remoteChainSelector []uint64) (*USDCTokenPoolRemotePoolAddedIterator, error) + + WatchRemotePoolAdded(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolRemotePoolAdded, remoteChainSelector []uint64) (event.Subscription, error) + + ParseRemotePoolAdded(log types.Log) (*USDCTokenPoolRemotePoolAdded, error) + + FilterRemotePoolRemoved(opts *bind.FilterOpts, remoteChainSelector []uint64) (*USDCTokenPoolRemotePoolRemovedIterator, error) + + WatchRemotePoolRemoved(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolRemotePoolRemoved, remoteChainSelector []uint64) (event.Subscription, error) + + ParseRemotePoolRemoved(log types.Log) (*USDCTokenPoolRemotePoolRemoved, error) + + FilterRouterUpdated(opts *bind.FilterOpts) (*USDCTokenPoolRouterUpdatedIterator, error) + + WatchRouterUpdated(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolRouterUpdated) (event.Subscription, error) + + ParseRouterUpdated(log types.Log) (*USDCTokenPoolRouterUpdated, error) + + FilterTokensConsumed(opts *bind.FilterOpts) (*USDCTokenPoolTokensConsumedIterator, error) + + WatchTokensConsumed(opts *bind.WatchOpts, sink chan<- *USDCTokenPoolTokensConsumed) (event.Subscription, error) + + ParseTokensConsumed(log types.Log) (*USDCTokenPoolTokensConsumed, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} + +var USDCTokenPoolZKBin string = ("0x000400000000000200250000000000020000006003100270000007c10030019d000007c103300197000300000031035500020000000103550000000100200190000000320000c13d000000800b0000390000004000b0043f000000040030008c00000a830000413d000000000201043b000000e002200270000007ea0020009c000000730000a13d000007eb0020009c000000840000213d000007f80020009c000000b40000a13d000007f90020009c000001490000a13d000007fa0020009c000005cb0000613d000007fb0020009c000004cc0000613d000007fc0020009c00000a830000c13d000000240030008c00000a830000413d0000000002000416000000000002004b00000a830000c13d0000000401100370000000000101043b000007c40010009c00000a830000213d0000000102000039000000000202041a000007c4022001970000000003000411000000000023004b00000a190000c13d000000000001004b00000a6a0000c13d0000083301000041000000800010043f000008210100004100001f03000104300000016004000039000000400040043f0000000002000416000000000002004b00000a830000c13d0000001f02300039000007c2022001970000016002200039000000400020043f0000001f0530018f000007c3063001980000016002600039000000440000613d000000000701034f000000007807043c0000000004840436000000000024004b000000400000c13d000000000005004b000000510000613d000000000161034f0000000304500210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000a00030008c00000a830000413d000001600100043d000e00000001001d000007c40010009c00000a830000213d000001800100043d000007c40010009c00000a830000213d000001a00200043d000007c50020009c00000a830000213d0000001f04200039000000000034004b0000000005000019000007c605008041000007c604400197000000000004004b0000000006000019000007c606004041000007c60040009c000000000605c019000000000006004b00000a830000c13d00000160042000390000000004040433000007c50040009c000001d50000a13d0000085801000041000000000010043f0000004101000039000000040010043f000007d50100004100001f0300010430000008040020009c000000990000a13d000008050020009c000000ec0000a13d000008060020009c000001980000a13d000008070020009c000009fb0000613d000008080020009c000004ff0000613d000008090020009c00000a830000c13d0000000001000416000000000001004b00000a830000c13d0000000101000039000005cf0000013d000007ec0020009c000000c00000a13d000007ed0020009c000001810000a13d000007ee0020009c000005d40000613d000007ef0020009c000004e50000613d000007f00020009c00000a830000c13d0000000001000416000000000001004b00000a830000c13d0000000001000412001500000001001d001400a00000003d000080050100003900000044030000390000000004000415000000150440008a000001c30000013d000008110020009c000000fd0000213d000008170020009c000001b50000213d0000081a0020009c000005130000613d0000081b0020009c00000a830000c13d000000240030008c00000a830000413d0000000002000416000000000002004b00000a830000c13d0000000401100370000000000201043b000008710020019800000a830000c13d0000000101000039000008720020009c000005d10000613d000008730020009c000005d10000613d000008740020009c000000000100c019000000800010043f0000081d0100004100001f020001042e000007ff0020009c000001140000213d000008020020009c000002010000613d000008030020009c00000a830000c13d0000000001000416000000000001004b00000a830000c13d000000800000043f0000081d0100004100001f020001042e000007f30020009c000001250000213d000007f60020009c000002550000613d000007f70020009c00000a830000c13d000000240030008c00000a830000413d0000000002000416000000000002004b00000a830000c13d0000000401100370000000000101043b001300000001001d000007c50010009c00000a830000213d1f011c370000040f0000001301000029000000000010043f0000000701000039000000200010043f000000400200003900000000010000191f011ec40000040f001200000001001d000000400100043d001300000001001d1f011ae40000040f0000001205000029000000000405041a0000083a004001980000000002000039000000010200c0390000001301000029000000400310003900000000002304350000008002400270000007c10220019700000020031000390000000000230435000008290240019700000000002104350000000102500039000001730000013d0000080c0020009c000001340000213d0000080f0020009c0000035d0000613d000008100020009c00000a830000c13d0000000001000416000000000001004b00000a830000c13d0000000001000412001d00000001001d001c00800000003d0000800501000039000000440300003900000000040004150000001d0440008a000001c30000013d000008120020009c000001ca0000213d000008150020009c0000054a0000613d000008160020009c00000a830000c13d0000000001000416000000000001004b00000a830000c13d0000000001000412001f00000001001d001e00200000003d0000800501000039000000440300003900000000040004150000001f0440008a00000005044002100000081c020000411f011ed90000040f000000ff0110018f000000800010043f0000081d0100004100001f020001042e000008000020009c000002990000613d000008010020009c00000a830000c13d0000000001000416000000000001004b00000a830000c13d0000000202000039000000000102041a000000800010043f000000000020043f0000002002000039000000000001004b00000a310000c13d000000a001000039000000000402001900000a400000013d000007f40020009c000003010000613d000007f50020009c00000a830000c13d0000000001000416000000000001004b00000a830000c13d0000000001000412001900000001001d001800400000003d000080050100003900000044030000390000000004000415000000190440008a000001c30000013d0000080d0020009c000004210000613d0000080e0020009c00000a830000c13d0000000001000416000000000001004b00000a830000c13d0000000001000412001b00000001001d001a00c00000003d0000800501000039000000440300003900000000040004150000001b0440008a00000005044002100000081c020000411f011ed90000040f000007c101100197000000800010043f0000081d0100004100001f020001042e000007fd0020009c0000045d0000613d000007fe0020009c00000a830000c13d000000240030008c00000a830000413d0000000002000416000000000002004b00000a830000c13d0000000401100370000000000101043b001300000001001d000007c50010009c00000a830000213d1f011c370000040f0000001301000029000000000010043f0000000701000039000000200010043f000000400200003900000000010000191f011ec40000040f001200000001001d000000400100043d001300000001001d1f011ae40000040f00000012050000290000000201500039000000000401041a0000083a004001980000000002000039000000010200c0390000001301000029000000400310003900000000002304350000008002400270000007c10220019700000020031000390000000000230435000008290240019700000000002104350000000302500039000000000402041a0000008002100039000000800340027000000000003204350000082903400197000000600210003900000000003204351f011de50000040f000000400100043d001200000001001d00000013020000291f011b290000040f0000001202000029000004dc0000013d000007f10020009c0000049a0000613d000007f20020009c00000a830000c13d0000000001000416000000000001004b00000a830000c13d0000000001000412001700000001001d001600600000003d000080050100003900000044030000390000000004000415000000170440008a00000005044002100000081c020000411f011ed90000040f000000000001004b0000000001000039000000010100c039000000800010043f0000081d0100004100001f020001042e0000080a0020009c000004fa0000613d0000080b0020009c00000a830000c13d0000000001000416000000000001004b00000a830000c13d000000000100041a000007c4021001970000000006000411000000000026004b00000a590000c13d0000000102000039000000000302041a000007c804300197000000000464019f000000000042041b000007c801100197000000000010041b0000000001000414000007c405300197000007c10010009c000007c101008041000000c0011002100000081e011001c70000800d020000390000000303000039000008620400004100000a7a0000013d000008180020009c000005650000613d000008190020009c00000a830000c13d0000000001000416000000000001004b00000a830000c13d0000000001000412002300000001001d002200000000003d000080050100003900000044030000390000000004000415000000230440008a00000005044002100000081c020000411f011ed90000040f000007c401100197000000800010043f0000081d0100004100001f020001042e000008130020009c000005790000613d000008140020009c00000a830000c13d0000000001000416000000000001004b00000a830000c13d00000000010300191f011b0c0000040f1f011ba40000040f000005090000013d00000005054002100000003f06500039000007c706600197000000400700043d0000000006670019001100000007001d000000000076004b00000000070000390000000107004039000007c50060009c0000006d0000213d00000001007001900000006d0000c13d0000016007300039000000400060043f00000011030000290000000003430436001000000003001d00000180022000390000000003250019000000000073004b00000a830000213d000000000004004b000001f40000613d00000010040000290000000025020434000007c40050009c00000a830000213d0000000004540436000000000032004b000001ee0000413d000001c00300043d000007c40030009c00000a830000213d000001e00200043d001300000002001d000007c40020009c00000a830000213d0000000002000411000000000002004b00000a850000c13d000000400100043d000007e90200004100000b370000013d000000240030008c00000a830000413d0000000002000416000000000002004b00000a830000c13d0000000402100370000000000202043b001300000002001d000007c50020009c00000a830000213d000000130230006a000007df0020009c00000a830000213d000000a40020008c00000a830000413d000000c002000039000000400020043f0000006002000039000000800020043f000000a00020043f0000001302000029001200840020003d0000001201100360000000000101043b001100000001001d000007c40010009c00000a830000213d0000081c0100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000007c10010009c000007c101008041000000c00110021000000847011001c700008005020000391f011efc0000040f000000010020019000001ae30000613d000000000101043b000000110210014f0000000201000367000007c40020019800000a7f0000c13d000000120200002900110060002000920000001101100360000000000101043b000007c50010009c00000a830000213d000000400300043d000008490200004100000000002304350000008001100210001200000003001d000000040230003900000000001204350000081c01000041000000000010044300000000010004120000000400100443000000400100003900000024001004430000000001000414000007c10010009c000007c101008041000000c00110021000000847011001c700008005020000391f011efc0000040f000000010020019000001ae30000613d000000000201043b0000000001000414000007c402200197000000040020008c00000cb90000c13d0000000103000031000000200030008c0000002004000039000000000403401900000ce30000013d0000000002000416000000000002004b00000a830000c13d0000000504000039000000000204041a000000800020043f000000000040043f000000000002004b00000a1d0000c13d000000a002000039000000400020043f0000002004000039000000000500001900000005065002100000003f076000390000083d077001970000000007270019000007c50070009c0000006d0000213d000000400070043f00000000005204350000001f0560018f000000a004400039000000000006004b000002750000613d000000000131034f00000000036400190000000006040019000000001701043c0000000006760436000000000036004b000002710000c13d000000000005004b000000800100043d000000000001004b000002870000613d00000000010000190000000003020433000000000013004b0000127b0000a13d00000005031002100000000005430019000000a0033000390000000003030433000007c50330019700000000003504350000000101100039000000800300043d000000000031004b0000027a0000413d000000400100043d00000020030000390000000003310436000000000402043300000000004304350000004003100039000000000004004b000002970000613d000000000500001900000020022000390000000006020433000007c50660019700000000036304360000000105500039000000000045004b000002900000413d000000000213004900000a510000013d000000240030008c00000a830000413d0000000002000416000000000002004b00000a830000c13d0000000401100370000000000101043b000007c50010009c00000a830000213d000000000010043f0000000701000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b0000000501100039000000000301041a000000400200043d001100000002001d001300000003001d0000000002320436001000000002001d000000000010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007d0011001c700008010020000391f011efc0000040f000000010020019000000a830000613d0000001305000029000000000005004b0000001002000029000002cd0000613d000000000101043b00000010020000290000000003000019000000000401041a000000000242043600000001011000390000000103300039000000000053004b000002c70000413d000000110120006a0000001f011000390000087a011001970000001104100029000000000014004b00000000010000390000000101004039000007c50040009c0000006d0000213d00000001001001900000006d0000c13d000000400040043f00000011010000290000000002010433000007c50020009c0000006d0000213d00000005012002100000003f03100039000007c7033001970000000003430019000007c50030009c0000006d0000213d000000400030043f000f00000004001d0000000005240436000000000002004b000002ef0000613d00000060020000390000000003000019000000000435001900000000002404350000002003300039000000000013004b000002ea0000413d000e00000005001d00000011010000290000000001010433000000000001004b00000b9a0000c13d000000400100043d000000200200003900000000032104360000000f0200002900000000020204330000000000230435000000400310003900000005042002100000000005340019000000000002004b00000c9c0000c13d000000000215004900000a510000013d000000e40030008c00000a830000413d0000000002000416000000000002004b00000a830000c13d0000000402100370000000000202043b001300000002001d000007c50020009c00000a830000213d000000e002000039000000400020043f0000002402100370000000000202043b000000000002004b0000000003000039000000010300c039000000000032004b00000a830000c13d000000800020043f0000004402100370000000000202043b000008290020009c00000a830000213d000000a00020043f0000006402100370000000000202043b000008290020009c00000a830000213d000000c00020043f0000014002000039000000400020043f0000008402100370000000000202043b000000000002004b0000000003000039000000010300c039000000000032004b00000a830000c13d000000e00020043f000000a402100370000000000202043b000008290020009c00000a830000213d000001000020043f000000c401100370000000000101043b000008290010009c00000a830000213d000001200010043f0000000901000039000000000101041a000007c4021001970000000001000411000000000021004b0000033e0000613d0000000102000039000000000202041a000007c402200197000000000021004b00000f450000c13d0000001301000029000000000010043f0000000601000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b000000000101041a000000000001004b0000048f0000613d000000c00100043d0000082901100197000000800200043d000000000002004b000010010000c13d000000000001004b000003590000c13d000000a00100043d0000082900100198000010070000613d000000400200043d001300000002001d0000082b01000041000010940000013d000000440030008c00000a830000413d0000000002000416000000000002004b00000a830000c13d0000000402100370000000000202043b000007c50020009c00000a830000213d0000002304200039000000000034004b00000a830000813d0000000404200039000000000441034f000000000804043b000007c50080009c00000a830000213d0000002406200039000000050a80021000000000076a0019000000000037004b00000a830000213d0000002402100370000000000202043b000007c50020009c00000a830000213d0000002304200039000000000034004b00000a830000813d0000000404200039000000000441034f000000000504043b000007c50050009c00000a830000213d000000240220003900000005095002100000000004290019000000000034004b00000a830000213d000000000c0b00190000000103000039000000000303041a000007c403300197000000000b00041100000000003b004b00000a190000c13d0000003f03a00039000007c7033001970000083c0030009c0000006d0000213d0000008003300039001100000003001d000000400030043f000000800080043f000000000008004b000003a00000613d000000000361034f000000000303043b000007c40030009c00000a830000213d000000200cc0003900000000003c04350000002006600039000000000076004b000003950000413d000000400300043d001100000003001d0000003f03900039000007c7033001970000001103300029000000110030006c00000000060000390000000106004039000007c50030009c0000006d0000213d00000001006001900000006d0000c13d000000400030043f00000011030000290000000003530436001000000003001d000000000005004b000003ba0000613d0000001103000029000000000521034f000000000505043b000007c40050009c00000a830000213d000000200330003900000000005304350000002002200039000000000042004b000003b10000413d0000081c01000041000000000010044300000000010004120000000400100443000000600100003900000024001004430000000001000414000007c10010009c000007c101008041000000c00110021000000847011001c700008005020000391f011efc0000040f000000010020019000001ae30000613d000000000101043b000000000001004b00000b970000613d000000800100043d000000000001004b000010e40000c13d00000011010000290000000001010433000000000001004b00000a7d0000613d0000000003000019000003da0000013d000000010330003900000011010000290000000001010433000000000013004b00000a7d0000813d000000050130021000000010011000290000000001010433001307c40010019c000003d50000613d0000001301000029000000000010043f0000000301000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c70000801002000039001200000003001d1f011efc0000040f0000001203000029000000010020019000000a830000613d000000000101043b000000000101041a000000000001004b000003d50000c13d0000000201000039000000000101041a000007c50010009c0000006d0000213d00000001021000390000000203000039000000000023041b000007cf0110009a0000001302000029000000000021041b000000000103041a000f00000001001d000000000020043f0000000301000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b0000000f02000029000000000021041b000000400100043d00000013020000290000000000210435000007c10010009c000007c10100804100000040011002100000000002000414000007c10020009c000007c102008041000000c002200210000000000112019f000007d0011001c70000800d020000390000000103000039000007d1040000411f011ef70000040f00000012030000290000000100200190000003d50000c13d00000a830000013d000000440030008c00000a830000413d0000000002000416000000000002004b00000a830000c13d0000000402100370000000000202043b001300000002001d000007c50020009c00000a830000213d0000002402100370000000000202043b000007c50020009c00000a830000213d0000002304200039000000000034004b00000a830000813d0000000404200039000000000141034f000000000101043b001200000001001d000007c50010009c00000a830000213d0000002402200039001100000002001d0000001201200029000000000031004b00000a830000213d0000000101000039000000000101041a000007c4011001970000000002000411000000000012004b00000a190000c13d0000001301000029000000000010043f0000000601000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b000000000101041a000000000001004b0000048f0000613d0000000003000031000000110100002900000012020000291f011b6c0000040f000000000201001900000013010000291f011ca70000040f000000000100001900001f020001042e000000440030008c00000a830000413d0000000002000416000000000002004b00000a830000c13d0000000402100370000000000202043b001300000002001d000007c50020009c00000a830000213d0000002402100370000000000202043b000007c50020009c00000a830000213d0000002304200039000000000034004b00000a830000813d001100040020003d0000001101100360000000000101043b001200000001001d000007c50010009c00000a830000213d0000001201200029001000240010003d000000100030006b00000a830000213d0000000101000039000000000101041a000007c4011001970000000002000411000000000012004b00000a190000c13d0000001301000029000000000010043f0000000601000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b000000000101041a000000000001004b00000bff0000c13d000000400100043d00000824020000410000000000210435000000040210003900000013030000290000000000320435000007c10010009c000007c1010080410000004001100210000007d5011001c700001f0300010430000000240030008c00000a830000413d0000000002000416000000000002004b00000a830000c13d0000000401100370000000000101043b000007c50010009c00000a830000213d000000e002000039000000400020043f000000800000043f000000a00000043f000000c00000043f000000000010043f0000000a01000039000000200010043f000000400200003900000000010000191f011ec40000040f001300000001001d000000e0010000391f011aef0000040f0000001302000029000000000102041a000000e00010043f0000000102200039000000000202041a000007c103200197000001000030043f00000834002001980000000002000039000000010200c039000001200020043f000000400200043d0000000001120436000001000300043d000007c1033001970000000000310435000001200100043d000000000001004b0000000001000039000000010100c03900000040032000390000000000130435000007c10020009c000007c102008041000000400120021000000835011001c700001f020001042e000000240030008c00000a830000413d0000000002000416000000000002004b00000a830000c13d0000000401100370000000000101043b000007c50010009c00000a830000213d1f011c4c0000040f0000002002000039000000400300043d001300000003001d00000000022304361f011afa0000040f00000013020000290000000001210049000007c10010009c000007c1010080410000006001100210000007c10020009c000007c1020080410000004002200210000000000121019f00001f020001042e000000240030008c00000a830000413d0000000002000416000000000002004b00000a830000c13d0000000401100370000000000601043b000007c40060009c00000a830000213d0000000101000039000000000101041a000007c4011001970000000005000411000000000015004b00000a190000c13d000000000056004b00000a5d0000c13d0000082001000041000000800010043f000008210100004100001f03000104300000000001000416000000000001004b00000a830000c13d0000000901000039000005cf0000013d000000240030008c00000a830000413d0000000002000416000000000002004b00000a830000c13d0000000401100370000000000101043b000007c50010009c00000a830000213d1f011e410000040f000000000001004b0000000001000039000000010100c039000000400200043d0000000000120435000007c10020009c000007c10200804100000040012002100000085e011001c700001f020001042e000000240030008c00000a830000413d0000000002000416000000000002004b00000a830000c13d0000000402100370000000000202043b000007c50020009c00000a830000213d0000002304200039000000000034004b00000a830000813d0000000404200039000000000141034f000000000101043b000f00000001001d000007c50010009c00000a830000213d00000024092000390000000f0100002900000007011002100000000001910019000000000031004b00000a830000213d0000000101000039000000000101041a000007c4011001970000000002000411000000000012004b00000a190000c13d0000000f0000006b00000aad0000c13d0000002001000039000000800010043f000000c0020000390000008001000039000000a00000043f0000000002120049000007c10020009c000007c1020080410000006002200210000007c10010009c000007c1010080410000004001100210000000000112019f0000000002000414000007c10020009c000007c102008041000000c002200210000000000121019f0000081e011001c70000800d020000390000000103000039000008790400004100000a7a0000013d000000240030008c00000a830000413d0000000002000416000000000002004b00000a830000c13d0000000401100370000000000101043b001300000001001d000007c40010009c00000a830000213d0000000001000412002100000001001d002000000000003d000080050100003900000044030000390000000004000415000000210440008a00000005044002100000081c020000411f011ed90000040f000007c401100197000000130010006b00000000010000390000000101006039000000800010043f0000081d0100004100001f020001042e0000000001000416000000000001004b00000a830000c13d000000c001000039000000400010043f0000001301000039000000800010043f0000086f01000041000000a00010043f0000002001000039000000c00010043f0000008001000039000000e0020000391f011afa0000040f000000c00110008a000007c10010009c000007c101008041000000600110021000000870011001c700001f020001042e000000240030008c00000a830000413d0000000002000416000000000002004b00000a830000c13d0000000402100370000000000202043b001300000002001d000007c50020009c00000a830000213d000000130230006a000007df0020009c00000a830000213d000001040020008c00000a830000413d000000a002000039000000400020043f0000001302000029001200840020003d0000001201100360000000800000043f000000000101043b001100000001001d000007c40010009c00000a830000213d0000081c0100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000007c10010009c000007c101008041000000c00110021000000847011001c700008005020000391f011efc0000040f000000010020019000001ae30000613d000000000101043b000000110210014f0000000201000367000007c40020019800000a7f0000c13d000000120200002900110060002000920000001101100360000000000101043b000007c50010009c00000a830000213d000000400300043d000008490200004100000000002304350000008001100210001200000003001d000000040230003900000000001204350000081c01000041000000000010044300000000010004120000000400100443000000400100003900000024001004430000000001000414000007c10010009c000007c101008041000000c00110021000000847011001c700008005020000391f011efc0000040f000000010020019000001ae30000613d000000000201043b0000000001000414000007c402200197000000040020008c00000d3c0000c13d0000000103000031000000200030008c0000002004000039000000000403401900000d660000013d0000000001000416000000000001004b00000a830000c13d0000000401000039000000000101041a000007c401100197000000800010043f0000081d0100004100001f020001042e000000440030008c00000a830000413d0000000002000416000000000002004b00000a830000c13d0000000402100370000000000202043b000007c50020009c00000a830000213d0000002304200039000000000034004b00000a830000813d0000000404200039000000000441034f000000000404043b000800000004001d000007c50040009c00000a830000213d000700240020003d000000080200002900000005022002100000000702200029000000000032004b00000a830000213d0000002402100370000000000202043b000200000002001d000007c50020009c00000a830000213d00000002020000290000002302200039000000000032004b00000a830000813d00000002020000290000000402200039000000000121034f000000000101043b000100000001001d000007c50010009c00000a830000213d0000000201000029000500240010003d000000010100002900000005011002100000000501100029000000000031004b00000a830000213d0000000101000039000000000101041a000007c4011001970000000002000411000000000012004b00000a190000c13d000000080000006b00000d9c0000c13d000008250100004100000000001004430000000001000414000007c10010009c000007c101008041000000c00110021000000826011001c70000800b020000391f011efc0000040f000000010020019000001ae30000613d000000000101043b000000010000006b00000a7d0000613d000007c101100197000400000001001d0003008000100218000700000000001d0000000701000029000000050110021000000005021000290000000201000367000000000221034f000000000202043b0000000003000031000000020430006a000001430440008a000007c605400197000007c606200197000000000756013f000000000056004b0000000005000019000007c605004041000000000042004b0000000004000019000007c604008041000007c60070009c000000000504c019000000000005004b00000a830000c13d001200050020002d000000120230006a001100000002001d000007df0020009c00000a830000213d0000001102000029000001200020008c00000a830000413d000000400200043d000b00000002001d000008270020009c0000006d0000213d0000000b02000029000000a002200039000000400020043f0000001202100360000000000202043b000007c50020009c00000a830000213d0000000b040000290000000002240436000a00000002001d00000012020000290000002002200039000000000221034f000000000202043b000007c50020009c00000a830000213d0000001202200029001300000002001d0000001f02200039000000000032004b0000000004000019000007c604008041000007c602200197000007c605300197000000000752013f000000000052004b0000000002000019000007c602004041000007c60070009c000000000204c019000000000002004b00000a830000c13d0000001302100360000000000202043b000007c50020009c0000006d0000213d00000005092002100000003f04900039000007c704400197000000400600043d0000000004460019001000000006001d000000000064004b00000000070000390000000107004039000007c50040009c0000006d0000213d00000001007001900000006d0000c13d000000400040043f00000010040000290000000000240435000000130200002900000020082000390000000009890019000000000039004b00000a830000213d000000000098004b000006c60000813d000000100a000029000006830000013d000000200aa000390000000002b7001900000000000204350000000000ca04350000002008800039000000000098004b000006c60000813d000000000281034f000000000202043b000007c50020009c00000a830000213d000000130d2000290000003f02d00039000000000032004b0000000004000019000007c604008041000007c602200197000000000752013f000000000052004b0000000002000019000007c602004041000007c60070009c000000000204c019000000000002004b00000a830000c13d000000200ed000390000000002e1034f000000000b02043b000007c500b0009c0000006d0000213d0000001f02b000390000087a022001970000003f022000390000087a02200197000000400c00043d00000000022c00190000000000c2004b00000000040000390000000104004039000007c50020009c0000006d0000213d00000001004001900000006d0000c13d0000004004d00039000000400020043f0000000007bc043600000000024b0019000000000032004b00000a830000213d0000002002e00039000000000421034f0000087a02b00198000000000e270019000006b80000613d000000000f04034f000000000d07001900000000f60f043c000000000d6d04360000000000ed004b000006b40000c13d0000001f0db001900000067c0000613d000000000224034f0000000304d0021000000000060e043300000000064601cf000000000646022f000000000202043b0000010004400089000000000242022f00000000024201cf000000000262019f00000000002e04350000067c0000013d0000000a020000290000001004000029000000000042043500000012020000290000004006200039000000000261034f000000000202043b000007c50020009c00000a830000213d00000012072000290000001f02700039000000000032004b0000000004000019000007c604008041000007c602200197000000000852013f000000000052004b0000000002000019000007c602004041000007c60080009c000000000204c019000000000002004b00000a830000c13d000000000271034f000000000402043b000007c50040009c0000006d0000213d0000001f024000390000087a022001970000003f022000390000087a02200197000000400500043d0000000002250019000000000052004b00000000080000390000000108004039000007c50020009c0000006d0000213d00000001008001900000006d0000c13d0000002008700039000000400020043f00000000074504360000000002840019000000000032004b00000a830000213d000000000881034f0000087a024001980000000003270019000006fe0000613d000000000908034f000000000a070019000000009b09043c000000000aba043600000000003a004b000006fa0000c13d0000001f094001900000070b0000613d000000000228034f0000000308900210000000000903043300000000098901cf000000000989022f000000000202043b0000010008800089000000000282022f00000000028201cf000000000292019f0000000000230435000000000247001900000000000204350000000b020000290000004002200039000900000002001d00000000005204350000001102000029000000600220008a000007df0020009c00000a830000213d000000600020008c00000a830000413d000000400300043d000008280030009c0000006d0000213d0000006002300039000000400020043f0000002002600039000000000421034f000000000404043b000000000004004b0000000005000039000000010500c039000000000054004b00000a830000c13d00000000044304360000002002200039000000000521034f000000000505043b000008290050009c00000a830000213d00000000005404350000002004200039000000000241034f000000000202043b000008290020009c00000a830000213d000000400530003900000000002504350000000b020000290000006002200039000800000002001d00000000003204350000001102000029000000c00220008a000007df0020009c00000a830000213d000000600020008c00000a830000413d000000400200043d000008280020009c0000006d0000213d0000006003200039000000400030043f0000002003400039000000000431034f000000000404043b000000000004004b0000000005000039000000010500c039000000000054004b00000a830000c13d00000000044204360000002003300039000000000531034f000000000505043b000008290050009c00000a830000213d00000000005404350000002003300039000000000131034f000000000301043b000008290030009c00000a830000213d000000400120003900000000003104350000000b030000290000008003300039000600000003001d0000000000230435000000080300002900000000030304330000004005300039000000000505043300000829065001970000000057030434000000000007004b0000076a0000613d000000000006004b0000147b0000613d00000000050504330000082905500197000000000056004b0000076f0000413d0000147b0000013d000000000006004b000014670000c13d00000000050504330000082900500198000014670000c13d000000000101043300000829011001970000000003020433000000000003004b0000077b0000613d000000000001004b000014820000613d00000000030404330000082903300197000000000031004b000007800000413d000014820000013d000000000001004b0000146b0000c13d000000000104043300000829001001980000146b0000c13d000000090100002900000000010104330000000001010433000000000001004b00000b350000613d0000000b010000290000000001010433000007c501100197001300000001001d000000000010043f0000000601000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b000000000101041a000000000001004b000013be0000c13d0000000501000039000000000101041a000007c50010009c0000006d0000213d00000001021000390000000503000039000000000023041b0000082d0110009a0000001302000029000000000021041b000000000103041a001200000001001d000000000020043f0000000601000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b0000001202000029000000000021041b0000000b010000290000000001010433000007c501100197000000000010043f0000000701000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b000000400200043d000008270020009c0000006d0000213d0000000803000029000000000303043300000020043000390000000004040433000000000503043300000040033000390000000003030433000000a006200039000000400060043f0000008006200039000008290730019700000000007604350000004006200039000000000005004b0000000005000039000000010500c0390000000000560435000000200520003900000004060000290000000000650435000008290440019700000060052000390000000000450435000000000042043500000000020000190000082e0200c041000000000501041a0000082f05500197000000000252019f00000003022001af000000000242019f000000000021041b0000008002300210000000000242019f0000000103100039000000000023041b000000400200043d000008270020009c0000006d0000213d0000000603000029000000000303043300000020043000390000000004040433000000000503043300000040033000390000000003030433000000a006200039000000400060043f0000008006200039000008290730019700000000007604350000004006200039000000000005004b0000000005000039000000010500c0390000000000560435000000200520003900000004060000290000000000650435000008290440019700000060052000390000000000450435000000000042043500000000020000190000082e0200c0410000000205100039000000000605041a0000082f06600197000000000262019f00000003022001af000000000242019f000000000025041b0000008002300210000000000242019f0000000303100039000000000023041b00000009020000290000000002020433001100000002001d0000000032020434001000000003001d001300000002001d000007c50020009c0000006d0000213d0000000403100039000000000103041a000000010010019000000001051002700000007f0550618f0000001f0050008c00000000020000390000000102002039000000000121013f0000000100100190000019940000c13d000000200050008c0000001304000029001200000003001d000008470000413d000f00000005001d000000000030043f0000000001000414000007c10010009c000007c101008041000000c001100210000007d0011001c700008010020000391f011efc0000040f000000010020019000000a830000613d00000013040000290000001f024000390000000502200270000000200040008c0000000002004019000000000301043b0000000f010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b0000001203000029000008470000813d000000000002041b0000000102200039000000000012004b000008430000413d000000200040008c000008650000413d000000000030043f0000000001000414000007c10010009c000007c101008041000000c001100210000007d0011001c700008010020000391f011efc0000040f000000010020019000000a830000613d00000013060000290000087a02600198000000000101043b0000001107000029000008720000613d000000010320008a000000050330027000000000033100190000000104300039000000200300003900000000057300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b0000085d0000c13d000008730000013d000000000004004b000008700000613d00000003014002100000087b0110027f0000087b0110016700000010020000290000000002020433000000000112016f0000000102400210000000000121019f000008800000013d0000000001000019000008800000013d0000002003000039000000000062004b0000087d0000813d0000000302600210000000f80220018f0000087b0220027f0000087b0220016700000000037300190000000003030433000000000223016f000000000021041b000000010160021000000001011001bf0000001203000029000000000013041b0000000a0100002900000000010104330000000002010433000000000002004b000009a20000613d0000000003000019000f00000003001d0000000502300210000000000121001900000020011000390000000001010433001200000001001d0000000031010434000000000001004b00000b350000613d0000000b020000290000000002020433001300000002001d000007c10010009c000007c1010080410000006001100210000007c10030009c000c00000003001d000007c10200004100000000020340190000004002200210000000000121019f0000000002000414000007c10020009c000007c102008041000000c002200210000000000112019f0000081e011001c700008010020000391f011efc0000040f000000010020019000000a830000613d0000001302000029000007c502200197000000000101043b001300000001001d000e00000002001d000000000020043f0000000701000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000201043b0000001301000029000000000010043f001100000002001d0000000601200039001000000001001d000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b000000000101041a000000000001004b000011f80000c13d00000011010000290000000502100039000000000102041a000007c50010009c0000006d0000213d000d00000001001d0000000101100039000000000012041b001100000002001d000000000020043f0000000001000414000007c10010009c000007c101008041000000c001100210000007d0011001c700008010020000391f011efc0000040f0000000100200190000000130200002900000a830000613d000000000101043b0000000d01100029000000000021041b0000001101000029000000000101041a001100000001001d000000000020043f0000001001000029000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f0000000100200190000000130200002900000a830000613d000000000101043b0000001103000029000000000031041b000000000020043f0000000801000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000301043b00000012010000290000000004010433000007c50040009c0000006d0000213d000000000103041a000000010010019000000001051002700000007f0550618f0000001f0050008c00000000020000390000000102002039000000000121013f0000000100100190000019940000c13d000000200050008c001300000003001d001100000004001d000009310000413d001000000005001d000000000030043f0000000001000414000007c10010009c000007c101008041000000c001100210000007d0011001c700008010020000391f011efc0000040f000000010020019000000a830000613d00000011040000290000001f024000390000000502200270000000200040008c0000000002004019000000000301043b00000010010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b0000001303000029000009310000813d000000000002041b0000000102200039000000000012004b0000092d0000413d000000200040008c0000095d0000413d000000000030043f0000000001000414000007c10010009c000007c101008041000000c001100210000007d0011001c700008010020000391f011efc0000040f000000010020019000000a830000613d00000011080000290000087a02800198000000000101043b0000099c0000613d000000010320008a00000005033002700000000003310019000000010430003900000020030000390000000c07000029000000120600002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b000009480000c13d000000000082004b000009590000813d0000000302800210000000f80220018f0000087b0220027f0000087b0220016700000000036300190000000003030433000000000223016f000000000021041b000000010180021000000001011001bf00000013030000290000096a0000013d000000000004004b0000000c07000029000009680000613d00000003014002100000087b0110027f0000087b011001670000000002070433000000000112016f0000000102400210000000000121019f000009690000013d00000000010000190000001206000029000000000013041b000000400100043d00000020020000390000000003210436000000000206043300000000002304350000004003100039000000000002004b0000097b0000613d000000000400001900000000053400190000000006740019000000000606043300000000006504350000002004400039000000000024004b000009740000413d0000001f042000390000087a04400197000000000232001900000000000204350000004002400039000007c10020009c000007c1020080410000006002200210000007c10010009c000007c1010080410000004001100210000000000112019f0000000002000414000007c10020009c000007c102008041000000c002200210000000000112019f0000081e011001c70000800d02000039000000020300003900000831040000410000000e050000291f011ef70000040f000000010020019000000a830000613d0000000f0300002900000001033000390000000a0100002900000000010104330000000002010433000000000023004b000008870000413d000009a20000013d00000020030000390000000c070000290000001206000029000000000082004b000009510000413d000009590000013d0000000601000029000000000201043300000008010000290000000005010433000000090100002900000000030104330000000b010000290000000004010433000000400100043d000000200610003900000100070000390000000000760435000007c50440019700000000004104350000010007100039000000006403043400000000004704350000012003100039000000000004004b000009be0000613d000000000700001900000000083700190000000009760019000000000909043300000000009804350000002007700039000000000047004b000009b70000413d000000000643001900000000000604350000000076050434000000000006004b0000000006000039000000010600c039000000400810003900000000006804350000000006070433000008290660019700000060071000390000000000670435000000400550003900000000050504330000082905500197000000800610003900000000005604350000000065020434000000000005004b0000000005000039000000010500c039000000a007100039000000000057043500000000050604330000082905500197000000c0061000390000000000560435000000400220003900000000020204330000082902200197000000e00510003900000000002504350000001f024000390000087a0220019700000000021200490000000002320019000007c10020009c000007c1020080410000006002200210000007c10010009c000007c1010080410000004001100210000000000112019f0000000002000414000007c10020009c000007c102008041000000c002200210000000000112019f0000081e011001c70000800d02000039000000010300003900000832040000411f011ef70000040f000000010020019000000a830000613d00000007020000290000000102200039000700000002001d000000010020006c0000061d0000413d00000a7d0000013d000000240030008c00000a830000413d0000000002000416000000000002004b00000a830000c13d0000000401100370000000000101043b000007c40010009c00000a830000213d0000000102000039000000000202041a000007c4022001970000000003000411000000000023004b00000a190000c13d0000000902000039000000000302041a000007c803300197000000000313019f000000000032041b000000800010043f0000000001000414000007c10010009c000007c101008041000000c0011002100000085f011001c70000800d020000390000000103000039000008600400004100000a7a0000013d0000087501000041000000800010043f000008210100004100001f03000104300000083b04000041000000a00500003900000000060000190000000007050019000000000504041a000000000557043600000001044000390000000106600039000000000026004b00000a200000413d000000410270008a0000087a042001970000083c0040009c0000006d0000213d0000008002400039000000800500043d000000400020043f000007c50050009c0000006d0000213d000002620000013d000000a005000039000008460300004100000000040000190000000006050019000000000503041a000000000556043600000001033000390000000104400039000000000014004b00000a340000413d000000410160008a0000087a041001970000083c0040009c0000006d0000213d0000008001400039000000400010043f0000000000210435000000a002400039000000800300043d0000000000320435000000c002400039000000000003004b00000a500000613d000000a00400003900000000050000190000000046040434000007c40660019700000000026204360000000105500039000000000035004b00000a4a0000413d0000000002120049000007c10020009c000007c1020080410000006002200210000007c10010009c000007c1010080410000004001100210000000000112019f00001f020001042e0000086101000041000000800010043f000008210100004100001f0300010430000000000100041a000007c801100197000000000161019f000000000010041b0000000001000414000007c10010009c000007c101008041000000c0011002100000081e011001c70000800d0200003900000003030000390000081f0400004100000a7a0000013d0000000402000039000000000302041a000007c804300197000000000414019f000000000042041b000007c402300197000000800020043f000000a00010043f0000000001000414000007c10010009c000007c101008041000000c0011002100000083e011001c70000800d0200003900000001030000390000083f040000411f011ef70000040f000000010020019000000a830000613d000000000100001900001f020001042e0000001201100360000000000101043b000007c40010009c00000aa30000a13d000000000100001900001f03000104300000000105000039000000000405041a000007c804400197000000000224019f000000000025041b000000000003004b00000b350000613d000007c40210019800000b350000613d000000130000006b00000b350000613d000d00000005001d000000800010043f000000c00030043f000007c901000041000000400300043d001200000003001d00000000001304350000000001000414000000040020008c00000b3d0000c13d0000000001000415000000250110008a00000005011002100000000103000031000000200030008c00000020040000390000000004034019002500000000003d00000b6b0000013d000000400200043d0000084803000041000000000032043500000004032000390000000000130435000007c10020009c000007c1020080410000004001200210000007d5011001c700001f0300010430000000000a000019000e00000009001d0000000701a0021000000000039100190000000001300079000007df0010009c00000a830000213d000000800010008c00000a830000413d000000400100043d0000083c0010009c0000006d0000213d0000008002100039000000400020043f0000000206000367000000000236034f000000000202043b00000000042104360000002005300039000000000356034f000000000303043b000007c10030009c00000a830000213d00000000003404350000002007500039000000000576034f000000000805043b000007c50080009c00000a830000213d000000400510003900000000008504350000002007700039000000000676034f000000000606043b000000000006004b0000000007000039000000010700c039000000000076004b00000a830000c13d00000060071000390000000000670435000000400b00043d000000000002004b00000f2d0000613d000000000008004b00000f2d0000613d0000082800b0009c0000006d0000213d0000006001b00039000000400010043f0000004001b00039001200000001001d000000000061043500000000012b0436001100000001001d00000000003104350000000001050433000007c501100197000000000010043f0000000a01000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c7000080100200003900130000000a001d00100000000b001d1f011efc0000040f000000130a0000290000000e09000029000000010020019000000a830000613d00000010020000290000000002020433000000000101043b000000000021041b00000011020000290000000002020433000007c1022001970000000101100039000000000301041a0000087603300197000000000223019f00000012030000290000000003030433000000000003004b00000877030000410000000003006019000000000232019f000000000021041b000000010aa000390000000f00a0006c00000aaf0000413d000000400100043d00000020021000390000000f03000029000000000032043500000020020000390000000000210435000000400210003900000002030003670000000004000019000000000593034f000000000505043b00000000065204360000002005900039000000000753034f000000000707043b000007c10070009c00000a830000213d00000000007604350000002005500039000000000653034f000000000606043b000007c50060009c00000a830000213d000000400720003900000000006704350000002005500039000000000553034f000000000505043b000000000005004b0000000006000039000000010600c039000000000065004b00000a830000c13d000000600620003900000000005604350000008009900039000000800220003900000001044000390000000f0040006c00000b150000413d000005380000013d000000400100043d00000833020000410000000000210435000007c10010009c000007c1010080410000004001100210000007ca011001c700001f03000104300000001203000029000007c10030009c000007c1030080410000004003300210000007c10010009c000007c101008041000000c001100210000000000131019f000007ca011001c71f011efc0000040f0000006003100270000007c103300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000120570002900000b560000613d000000000801034f0000001209000029000000008a08043c0000000009a90436000000000059004b00000b520000c13d000000000006004b00000b630000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000001000415000000240110008a0000000501100210002400000000003d000000010020019000000b800000613d0000001f02400039000000600420018f0000001202400029000000000042004b00000000040000390000000104004039000007c50020009c0000006d0000213d00000001004001900000006d0000c13d000000400020043f000000200030008c00000a830000413d00000012030000290000000003030433000000ff0030008c00000a830000213d0000000501100270000000000103001f000000060030008c00000f620000c13d0000000601000039000000a00010043f0000000401000039000000000201041a000007c80220019700000013022001af000000000021041b00000011010000290000000001010433000000000001004b0000000001000039000000010100c039000000e00010043f00000f720000613d000000400100043d000007cd0010009c0000006d0000213d0000002002100039000000400020043f0000000000010435000000e00100043d000000000001004b00000f6e0000c13d000000400100043d000008650200004100000b370000013d0000000002000019001300000002001d0000000502200210001200000002001d00000010012000290000000001010433000000000010043f0000000801000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b000000000201041a000000010320019000000001052002700000007f0550618f0000001f0050008c00000000040000390000000104002039000000000442013f0000000100400190000019940000c13d000000400700043d0000000004570436000000000003004b00000bd90000613d000b00000004001d000c00000005001d000d00000007001d000000000010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007d0011001c700008010020000391f011efc0000040f000000010020019000000a830000613d0000000c08000029000000000008004b000000200500008a00000be10000613d000000000201043b00000000010000190000000f060000290000000d070000290000000b090000290000000003190019000000000402041a000000000043043500000001022000390000002001100039000000000081004b00000bd10000413d00000be40000013d0000087c012001970000000000140435000000000005004b00000020010000390000000001006039000000200500008a0000000f0600002900000be40000013d00000000010000190000000f060000290000000d070000290000003f01100039000000000251016f0000000001720019000000000021004b00000000020000390000000102004039000007c50010009c0000006d0000213d00000001002001900000006d0000c13d000000400010043f00000000010604330000001302000029000000000021004b0000127b0000a13d00000012030000290000000e0130002900000000007104350000000001060433000000000021004b0000127b0000a13d000000010220003900000011010000290000000001010433000000000012004b00000b9b0000413d000002f40000013d0000001301000029000000000010043f0000000701000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d00000012020000290000001f022000390000087a02200197000e00000002001d0000003f022000390000087a02200197000000000101043b000f00000001001d000000400100043d0000000002210019000000000012004b00000000040000390000000104004039000007c50020009c0000006d0000213d00000001004001900000006d0000c13d000000400020043f000000120200002900000000022104360000001005000029000000000050007c00000a830000213d00000012040000290000087a054001980010001f00400193000d00000005001d000000000352001900000011040000290000002004400039001100000004001d000000020440036700000c330000613d000000000504034f0000000006020019000000005705043c0000000006760436000000000036004b00000c2f0000c13d000000100000006b00000c410000613d0000000d0440036000000010050000290000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f000000000043043500000012032000290000000000030435000007c10020009c000007c10200804100000040022002100000000001010433000007c10010009c000007c1010080410000006001100210000000000121019f0000000002000414000007c10020009c000007c102008041000000c002200210000000000112019f0000081e011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b000b00000001001d000000000010043f0000000f010000290000000601100039000c00000001001d000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b000000000101041a000a00000001001d000000000001004b000011490000c13d000000400100043d0000004402100039000000120300002900000000003204350000002402100039000000400300003900000000003204350000084302000041000000000021043500000004021000390000001303000029000000000032043500000064021000390000000d03200029000000110400002900000002044003670000000d0000006b00000c820000613d000000000504034f0000000006020019000000005705043c0000000006760436000000000036004b00000c7e0000c13d000000100000006b00000c900000613d0000000d0440036000000010050000290000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f000000000043043500000012022000290000000000020435000007c10010009c000007c10100804100000040011002100000000e02000029000008440020009c00000844020080410000006002200210000000000112019f000008450110009a00001f030001043000000000040000190000000f0c00002900000ca70000013d0000001f076000390000087a077001970000000006650019000000000006043500000000057500190000000104400039000000000024004b000002ff0000813d0000000006150049000000400660008a0000000003630436000000200cc0003900000000060c043300000000760604340000000005650436000000000006004b00000c9f0000613d00000000080000190000000009580019000000000a870019000000000a0a04330000000000a904350000002008800039000000000068004b00000cb10000413d00000c9f0000013d0000001203000029000007c10030009c000007c1030080410000004003300210000007c10010009c000007c101008041000000c001100210000000000131019f000007d5011001c71f011efc0000040f0000006003100270000007c103300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000120570002900000cd20000613d000000000801034f0000001209000029000000008a08043c0000000009a90436000000000059004b00000cce0000c13d000000000006004b00000cdf0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000f4a0000613d0000001f01400039000000600210018f0000001201200029000000000021004b00000000020000390000000102004039000007c50010009c0000006d0000213d00000001002001900000006d0000c13d000000400010043f000000200030008c00000a830000413d00000012020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b00000a830000c13d000000000002004b000010250000c13d000000110100002900000020011000390000000201100367000000000101043b001200000001001d000007c40010009c00000a830000213d0000081c01000041000000000010044300000000010004120000000400100443000000600100003900000024001004430000000001000414000007c10010009c000007c101008041000000c00110021000000847011001c700008005020000391f011efc0000040f000000010020019000001ae30000613d000000000101043b000000000001004b0000120f0000c13d00000011010000290000000201100367000000000101043b001200000001001d000007c50010009c00000a830000213d0000001201000029000000000010043f0000000601000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000400200043d001000000002001d0000000402200039000000000101043b000000000101041a000000000001004b00000d960000613d0000000401000039000000000301041a0000084c0100004100000010040000290000000000140435000000120100002900000000001204350000000001000414000007c402300197000000040020008c000013220000c13d0000000103000031000000200030008c000000200400003900000000040340190000134c0000013d0000001203000029000007c10030009c000007c1030080410000004003300210000007c10010009c000007c101008041000000c001100210000000000131019f000007d5011001c71f011efc0000040f0000006003100270000007c103300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000120570002900000d550000613d000000000801034f0000001209000029000000008a08043c0000000009a90436000000000059004b00000d510000c13d000000000006004b00000d620000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000000f560000613d0000001f01400039000000600210018f0000001201200029000000000021004b00000000020000390000000102004039000007c50010009c0000006d0000213d00000001002001900000006d0000c13d000000400010043f000000200030008c00000a830000413d00000012020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b00000a830000c13d000000000002004b000010250000c13d00000011010000290000000201100367000000000101043b001200000001001d000007c50010009c00000a830000213d0000001201000029000000000010043f0000000601000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000400200043d001000000002001d0000000402200039000000000101043b000000000101041a000000000001004b000012260000c13d0000085d010000410000001003000029000000000013043500000012010000290000000000120435000012ce0000013d0000000002000019000900000002001d000000050120021000000007011000290000000201100367000000000101043b000d00000001001d000007c50010009c00000a830000213d0000000d01000029000000000010043f0000000601000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b000000000301041a000000000003004b000012810000613d0000000501000039000000000201041a000000000002004b000011500000613d000000010130008a000000000023004b00000dd80000613d000000000012004b0000127b0000a13d000008220130009a000008220220009a000000000202041a000000000021041b000000000020043f0000000601000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c70000801002000039001300000003001d1f011efc0000040f000000010020019000000a830000613d000000000101043b0000001302000029000000000021041b0000000501000039000000000301041a000000000003004b000012750000613d000000010130008a000008220230009a000000000002041b0000000502000039000000000012041b0000000d01000029000000000010043f0000000601000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b000000000001041b0000000d01000029000000000010043f0000000701000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b0000000501100039000000000301041a000000400200043d001100000002001d001300000003001d0000000002320436000c00000002001d000000000010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007d0011001c700008010020000391f011efc0000040f000000010020019000000a830000613d0000001305000029000000000005004b0000000c0200002900000e170000613d000000000101043b0000000c020000290000000003000019000000000401041a000000000242043600000001011000390000000103300039000000000053004b00000e110000413d000000110120006a0000001f011000390000087a021001970000001101200029000000000021004b00000000020000390000000102004039000007c50010009c0000006d0000213d00000001002001900000006d0000c13d000000400010043f00000011010000290000000001010433000000000001004b00000ebc0000613d000000000200001900000e2f0000013d0000001302000029000000010220003900000011010000290000000001010433000000000012004b00000ebc0000813d001300000002001d0000000d01000029000000000010043f0000000701000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000301043b000000110100002900000000010104330000001302000029000000000021004b0000127b0000a13d00000005012002100000000c011000290000000001010433000e00000001001d000000000010043f000f00000003001d0000000601300039001000000001001d000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b000000000101041a000000000001004b00000e290000613d0000000f020000290000000503200039000000000203041a000000000002004b000011500000613d000000000021004b001200000001001d000f00000003001d00000e9b0000613d000b00000002001d000000000030043f0000000001000414000007c10010009c000007c101008041000000c001100210000007d0011001c700008010020000391f011efc0000040f000000010020019000000a830000613d0000001202000029000a000100200092000000000101043b0000000f04000029000000000204041a0000000a0020006c0000127b0000a13d0000000b02000029000000010220008a0000000001120019000000000101041a000b00000001001d000000000040043f0000000001000414000007c10010009c000007c101008041000000c001100210000007d0011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b0000000a011000290000000b02000029000000000021041b000000000020043f0000001001000029000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b0000001202000029000000000021041b0000000f03000029000000000103041a001200000001001d000000000001004b000012750000613d000000000030043f0000000001000414000007c10010009c000007c101008041000000c001100210000007d0011001c700008010020000391f011efc0000040f000000010020019000000a830000613d0000001202000029000000010220008a000000000101043b0000000001210019000000000001041b0000000f01000029000000000021041b0000000e01000029000000000010043f0000001001000029000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b000000000001041b00000e290000013d0000000d01000029000000000010043f0000000701000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000301043b000000000003041b0000000101300039000000000001041b0000000201300039000000000001041b0000000301300039000000000001041b0000000404300039000000000104041a000000010010019000000001051002700000007f0550618f0000001f0050008c00000000020000390000000102002039000000000121013f0000000100100190000019940000c13d000000000005004b00000efe0000613d0000001f0050008c00000efd0000a13d001100000005001d001300000003001d001200000004001d000000000040043f0000000001000414000007c10010009c000007c101008041000000c001100210000007d0011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b00000011020000290000001f02200039000000050220027000000000022100190000000103100039000000000023004b00000ef90000813d000000000003041b0000000103300039000000000023004b00000ef50000413d0000001202000029000000000002041b00000000040100190000001303000029000000000004041b0000000501300039000000000201041a000000000001041b000000000002004b00000f160000613d001300000002001d000000000010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007d0011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b0000001302100029000000000021004b00000f160000813d000000000001041b0000000101100039000000000021004b00000f120000413d000000400100043d0000000d020000290000000000210435000007c10010009c000007c10100804100000040011002100000000002000414000007c10020009c000007c102008041000000c002200210000000000112019f000007d0011001c70000800d02000039000000010300003900000823040000411f011ef70000040f000000010020019000000a830000613d00000009020000290000000102200039000000080020006c00000d9d0000413d0000060b0000013d000008780200004100000000002b043500000000010104330000000402b0003900000000001204350000000001040433000007c1011001970000002402b0003900000000001204350000000001050433000007c5011001970000004402b0003900000000001204350000000001070433000000000001004b0000000001000039000000010100c0390000006402b000390000000000120435000007c100b0009c000007c10b0080410000004001b00210000007e3011001c700001f03000104300000083602000041000001400020043f000001440010043f000008370100004100001f03000104300000001f0530018f000007c306300198000000400200043d0000000004620019000010320000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000f510000c13d000010320000013d0000001f0530018f000007c306300198000000400200043d0000000004620019000010320000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000f5d0000c13d000010320000013d00000024012000390000000000310435000007cb010000410000000000120435000000040120003900000006030000390000000000310435000007c10020009c000007c1020080410000004001200210000007cc011001c700001f030001043000000011010000290000000001010433000000000001004b000010450000c13d0000000e01000029001207c40010019c000000400100043d001300000001001d00000f7f0000c13d000007e80100004100000013020000290000000000120435000007c10020009c000007c1020080410000004001200210000007ca011001c700001f0300010430000007d2010000410000001302000029000000000012043500000000010004140000001202000029000000040020008c00000f8b0000c13d0000000103000031000000200030008c0000002004000039000000000403401900000fb60000013d0000001302000029000007c10020009c000007c1020080410000004002200210000007c10010009c000007c101008041000000c001100210000000000121019f000007ca011001c700000012020000291f011efc0000040f0000006003100270000007c103300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000130570002900000fa50000613d000000000801034f0000001309000029000000008a08043c0000000009a90436000000000059004b00000fa10000c13d000000000006004b00000fb20000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000010270000613d0000001f01400039000000600110018f0000001305100029000000000015004b00000000020000390000000102004039001100000005001d000007c50050009c0000006d0000213d00000001002001900000006d0000c13d0000001102000029000000400020043f000000200040008c00000a830000413d00000013020000290000000002020433001300000002001d000007c40020009c00000a830000213d000007d3020000410000001104000029000000000024043500000000020004140000001304000029000000040040008c000011560000c13d0000001102100029001000000002001d000007c50020009c0000006d0000213d0000001002000029000000400020043f00000011020000290000000002020433000007c10020009c00000a830000213d000000000002004b000012c90000c13d000007d6020000410000001004000029000000000024043500000000020004140000001204000029000000040040008c000012df0000c13d0000001002100029001100000002001d000007c50020009c0000006d0000213d0000001102000029000000400020043f00000010020000290000000002020433000007c10020009c00000a830000213d000000000002004b000014880000c13d0000000e02000029000001000020043f0000001304000029000001200040043f000007d802000041000000110500002900000000002504350000000002000414000000040040008c0000148b0000c13d0000001102100029001300000002001d000007c50020009c0000006d0000213d0000001302000029000000400020043f000014c10000013d000000000001004b000010910000613d000000a00200043d0000082902200197000000000021004b000010910000813d0000001301000029000000000010043f0000000701000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b00000080020000391f011e550000040f000001200100043d0000082901100197000000e00200043d000000000002004b000010a20000c13d000000000001004b000010210000c13d000001000100043d0000082900100198000010a80000613d000000400200043d001300000002001d0000082b010000410000118f0000013d0000084a0200004100000b370000013d0000001f0530018f000007c306300198000000400200043d0000000004620019000010320000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000102e0000c13d000000000005004b0000103f0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000007c10020009c000007c1020080410000004002200210000000000112019f00001f030001043000000000020000190000104d0000013d0000001302000029000000010220003900000011010000290000000001010433000000000012004b00000f720000813d001300000002001d000000050120021000000010011000290000000001010433000007c403100198000010470000613d000000000030043f0000000301000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c70000801002000039001200000003001d1f011efc0000040f0000001204000029000000010020019000000a830000613d000000000101043b000000000101041a000000000001004b000010470000c13d0000000203000039000000000103041a000007c50010009c0000006d0000213d0000000102100039000000000023041b000007cf0110009a000000000041041b000000000103041a000f00000001001d000000000040043f0000000301000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f0000001203000029000000010020019000000a830000613d000000000101043b0000000f02000029000000000021041b000000400100043d0000000000310435000007c10010009c000007c10100804100000040011002100000000002000414000007c10020009c000007c102008041000000c002200210000000000112019f000007d0011001c70000800d020000390000000103000039000007d1040000411f011ef70000040f0000000100200190000010470000c13d00000a830000013d000000400200043d001300000002001d0000082a010000410000000000120435000000040120003900000080020000391f011e320000040f00000013020000290000000001210049000007c10010009c000007c1010080410000006001100210000007c10020009c000007c1020080410000004002200210000000000121019f00001f0300010430000000000001004b0000118c0000613d000001000200043d0000082902200197000000000021004b0000118c0000813d0000001301000029000000000010043f0000000701000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b0000000201100039000000e0020000391f011e550000040f000000400100043d00000013020000290000000002210436000000800300043d000000000003004b0000000003000039000000010300c0390000000000320435000000a00200043d000008290220019700000040031000390000000000230435000000c00200043d000008290220019700000060031000390000000000230435000000e00200043d000000000002004b0000000002000039000000010200c03900000080031000390000000000230435000001000200043d0000082902200197000000a0031000390000000000230435000001200200043d0000082902200197000000c0031000390000000000230435000007c10010009c000007c10100804100000040011002100000000002000414000007c10020009c000007c102008041000000c002200210000000000112019f00000838011001c70000800d020000390000000103000039000008390400004100000a7a0000013d0000000002000019000010eb0000013d00000012020000290000000102200039000000800100043d000000000012004b000003cf0000813d001200000002001d0000000501200210000000a0011000390000000001010433000007c401100197001300000001001d000000000010043f0000000301000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b000000000301041a000000000003004b000010e60000613d0000000201000039000000000201041a000000000002004b000011500000613d000000010130008a000000000023004b000011230000613d000000000012004b0000127b0000a13d000008630130009a000008630220009a000000000202041a000000000021041b000000000020043f0000000301000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c70000801002000039000f00000003001d1f011efc0000040f0000000f03000029000000010020019000000a830000613d000000000101043b000000000031041b0000000201000039000000000301041a000000000003004b000012750000613d000000010130008a000008630230009a000000000002041b0000000202000039000000000012041b0000001301000029000000000010043f0000000301000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b000000000001041b000000400100043d00000013020000290000000000210435000007c10010009c000007c10100804100000040011002100000000002000414000007c10020009c000007c102008041000000c002200210000000000112019f000007d0011001c70000800d02000039000000010300003900000864040000411f011ef70000040f0000000100200190000010e60000c13d00000a830000013d0000000f010000290000000501100039000f00000001001d000000000101041a000900000001001d000000000001004b000011930000c13d0000085801000041000000000010043f0000001101000039000000040010043f000007d50100004100001f03000104300000001101000029000007c10010009c000007c1010080410000004001100210000007c10020009c000007c102008041000000c002200210000000000112019f000007ca011001c700000013020000291f011efc0000040f0000006003100270000007c103300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000001105700029000011700000613d000000000801034f0000001109000029000000008a08043c0000000009a90436000000000059004b0000116c0000c13d000000000006004b0000117d0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000011ec0000613d0000001f01400039000000600110018f0000001102100029001000000002001d000007c50020009c0000006d0000213d0000001002000029000000400020043f000000200030008c00000fd70000813d00000a830000013d000000400200043d001300000002001d0000082a0100004100000000001204350000000401200039000000e002000039000010970000013d00000009020000290000000a0020006b0000123b0000c13d0000000f01000029000000000010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007d0011001c700008010020000391f011efc0000040f000000010020019000000a830000613d0000000a02000029000000010220008a000000000101043b0000000001210019000000000001041b0000000f01000029000000000021041b0000000b01000029000000000010043f0000000c01000029000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b000000000001041b000000400100043d0000002002100039000000120300002900000000003204350000002002000039000000000021043500000040021000390000000d03200029000000110400002900000002044003670000000d0000006b000011c90000613d000000000504034f0000000006020019000000005705043c0000000006760436000000000036004b000011c50000c13d000000100000006b000011d70000613d0000000d0440036000000010050000290000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f000000000043043500000012022000290000000000020435000007c10010009c000007c10100804100000040011002100000000e02000029000008400020009c00000840020080410000006002200210000000000112019f0000000002000414000007c10020009c000007c102008041000000c002200210000000000121019f000008410110009a0000800d0200003900000002030000390000084204000041000000130500002900000a7a0000013d0000001f0530018f000007c306300198000000400200043d0000000004620019000010320000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000011f30000c13d000010320000013d000000400300043d001300000003001d0000002401300039000000400200003900000000002104350000083001000041000000000013043500000004013000390000000e020000290000000000210435000000440230003900000012010000291f011afa0000040f00000013020000290000000001210049000007c10010009c000007c101008041000007c10020009c000007c10200804100000060011002100000004002200210000000000121019f00001f03000104300000001201000029000000000010043f0000000301000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b000000000101041a000000000001004b00000d120000c13d000000400100043d0000084b02000041000000000021043500000004021000390000001203000029000004940000013d0000000401000039000000000301041a0000086601000041000000100400002900000000001404350000001201000029000000000012043500000024014000390000000002000411000007c402200197001200000002001d00000000002104350000000001000414000007c402300197000000040020008c000012870000c13d0000000103000031000000200030008c00000020040000390000000004034019000012b10000013d0000000f01000029000000000010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007d0011001c700008010020000391f011efc0000040f000000010020019000000a830000613d0000000a020000290008000100200092000000000101043b0000000f02000029000000000202041a000000080020006c0000127b0000a13d0000000902000029000000010220008a0000000001120019000000000101041a000900000001001d0000000f01000029000000000010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007d0011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b00000008011000290000000902000029000000000021041b000000000020043f0000000c01000029000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b0000000a02000029000000000021041b0000000f01000029000000000101041a000a00000001001d000000000001004b000011960000c13d0000085801000041000000000010043f0000003101000039000000040010043f000007d50100004100001f03000104300000085801000041000000000010043f0000003201000039000000040010043f000007d50100004100001f0300010430000000400100043d0000082402000041000000000021043500000004021000390000000d03000029000004940000013d0000001003000029000007c10030009c000007c1030080410000004003300210000007c10010009c000007c101008041000000c001100210000000000131019f000007cc011001c71f011efc0000040f0000006003100270000007c103300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000001005700029000012a00000613d000000000801034f0000001009000029000000008a08043c0000000009a90436000000000059004b0000129c0000c13d000000000006004b000012ad0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000012d30000613d0000001f01400039000000600210018f0000001001200029000000000021004b00000000020000390000000102004039000007c50010009c0000006d0000213d00000001002001900000006d0000c13d000000400010043f000000200030008c00000a830000413d00000010020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b00000a830000c13d000000000002004b000013c50000c13d0000084d02000041000012220000013d000007d4010000410000001003000029000000000013043500000004013000390000000000210435000007c10030009c000007c1030080410000004001300210000007d5011001c700001f03000104300000001f0530018f000007c306300198000000400200043d0000000004620019000010320000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000012da0000c13d000010320000013d000007c10020009c000007c102008041000000c0012002100000001002000029001000000002001d000007c10020009c000007c1020080410000004002200210000000000112019f000007ca011001c700000012020000291f011efc0000040f0000006003100270000007c103300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000001005700029000012fa0000613d000000000801034f0000001009000029000000008a08043c0000000009a90436000000000059004b000012f60000c13d000000000006004b000013070000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000013160000613d0000001f01400039000000600110018f0000001002100029001100000002001d000007c50020009c0000006d0000213d0000001102000029000000400020043f000000200030008c00000fea0000813d00000a830000013d0000001f0530018f000007c306300198000000400200043d0000000004620019000010320000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000131d0000c13d000010320000013d0000001003000029000007c10030009c000007c1030080410000004003300210000007c10010009c000007c101008041000000c001100210000000000131019f000007d5011001c71f011efc0000040f0000006003100270000007c103300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000010057000290000133b0000613d000000000801034f0000001009000029000000008a08043c0000000009a90436000000000059004b000013370000c13d000000000006004b000013480000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f000300000001035500000001002001900000146f0000613d0000001f01400039000000600210018f0000001001200029000000000021004b00000000020000390000000102004039000007c50010009c0000006d0000213d00000001002001900000006d0000c13d000000400010043f000000200030008c00000a830000413d00000010020000290000000002020433000007c40020009c00000a830000213d0000000003000411000000000023004b000014dc0000c13d00000002010003670000001102100360000000000202043b000007c50020009c00000a830000213d0000001103000029001000400030003d0000001001100360000000000101043b001200000001001d000000000020043f0000000701000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b000f00000001001d0000081c0100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000007c10010009c000007c101008041000000c00110021000000847011001c700008005020000391f011efc0000040f000000010020019000001ae30000613d000000000101043b000d00000001001d0000000f01000029000000000101041a000e00000001001d0000083a00100198000018190000613d000000120000006b000018190000613d0000000f010000290000000101100039000b00000001001d000000000101041a000c00000001001d000008250100004100000000001004430000000001000414000007c10010009c000007c101008041000000c00110021000000826011001c70000800b020000391f011efc0000040f000000010020019000001ae30000613d0000000e020000290000008002200270000007c102200197000000000101043b000000000421004b000011500000413d0000000e0200002900000829032001970000000c020000290000082902200197000015dd0000c13d0000000d01000029000007c404100197000000120020006c000017cd0000813d000000400100043d00000000050100190000000401100039000000000004004b000017fb0000c13d0000085c0300004100000000003504350000000000210435000000240150003900000012020000290000000000210435000007c10050009c000007c1050080410000004001500210000007cc011001c700001f03000104300000000b010000290000000001010433000000400200043d0000082c030000410000000000320435000007c50110019700000aa60000013d00000002020003670000001101200360000000000101043b000007c50010009c00000a830000213d00000011030000290000008003300039000000000332034f000000000403043b0000000003000031000000130530006a000000230550008a000007c606500197000007c607400197000000000867013f000000000067004b0000000006000019000007c606004041000000000054004b0000000005000019000007c605008041000007c60080009c000000000605c019000000000006004b00000a830000c13d0000001305000029001000040050003d0000001004400029000000000242034f000000000202043b001200000002001d000007c50020009c00000a830000213d000000120230006a0000002006400039000007c603200197000007c604600197000000000534013f000000000034004b0000000003000019000007c603004041000f00000006001d000000000026004b0000000002000019000007c602002041000007c60050009c000000000302c019000000000003004b00000a830000c13d000000000010043f0000000701000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d00000012020000290000001f022000390000087a022001970000003f022000390000087a02200197000000000101043b000e00000001001d000000400100043d0000000002210019000000000012004b00000000030000390000000103004039000007c50020009c0000006d0000213d00000001003001900000006d0000c13d000000400020043f000000120400002900000000024104360000000f04400029000000000040007c00000a830000213d00000012050000290000087a045001980000001f0550018f0000000f0300002900000002063003670000000003420019000014250000613d000000000706034f0000000008020019000000007907043c0000000008980436000000000038004b000014210000c13d000000000005004b000014320000613d000000000446034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f000000000043043500000012032000290000000000030435000007c10020009c000007c10200804100000040022002100000000001010433000007c10010009c000007c1010080410000006001100210000000000121019f0000000002000414000007c10020009c000007c102008041000000c002200210000000000112019f0000081e011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b000000000010043f0000000e010000290000000601100039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b000000000101041a000000000001004b000015eb0000c13d0000001301000029000000a40210003900000010010000291f011b420000040f0000086e03000041000000400500043d001300000005001d0000000000350435000000000301001900000000040200190000000401500039000000000203001900000000030400191f011c150000040f000010980000013d000000400200043d001300000002001d0000082b010000410000147e0000013d000000400300043d001300000003001d0000082b01000041000014850000013d0000001f0530018f000007c306300198000000400200043d0000000004620019000010320000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000014760000c13d000010320000013d000000400200043d001300000002001d0000082a01000041000000000012043500000004012000390000000002030019000010970000013d000000400300043d001300000003001d0000082a0100004100000000001304350000000401300039000010970000013d000007d7010000410000001103000029000012cb0000013d000007c10020009c000007c102008041000000c0012002100000001102000029001100000002001d000007c10020009c000007c1020080410000004002200210000000000112019f000007ca011001c700000013020000291f011efc0000040f0000006003100270000007c103300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000001105700029000014a60000613d000000000801034f0000001109000029000000008a08043c0000000009a90436000000000059004b000014a20000c13d000000000006004b000014b30000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000014e30000613d0000001f01400039000000600110018f0000001102100029001300000002001d000007c50020009c0000006d0000213d0000001302000029000000400020043f000000200030008c00000a830000413d00000011020000290000000002020433000007c10020009c00000a830000213d000001400020043f000000800400043d000001000200043d000007d905000041000000130700002900000000005704350000000405700039000000000600041000000000006504350000002405700039000007c402200197001000000002001d00000000002504350000000002000414000007c404400197001100000004001d000000040040008c000014ef0000c13d0000001301100029000007c50010009c0000006d0000213d000000400010043f000015230000013d0000084d0200004100000000002104350000000002000411000007c40220019700000004031000390000000000230435000004950000013d0000001f0530018f000007c306300198000000400200043d0000000004620019000010320000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000014ea0000c13d000010320000013d0000001301000029001300000001001d000007c10010009c000007c1010080410000004001100210000007c10020009c000007c102008041000000c002200210000000000112019f000007cc011001c700000011020000291f011efc0000040f0000006003100270000007c103300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000013057000290000150a0000613d000000000801034f0000001309000029000000008a08043c0000000009a90436000000000059004b000015060000c13d000000000006004b000015170000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000015810000613d0000001f01400039000000600110018f0000001301100029000007c50010009c0000006d0000213d000000400010043f000000200030008c00000a830000413d00000013020000290000000002020433000000000002004b000011500000c13d0000004402100039000000010400008a00000000004204350000002002100039000007da04000041000000000042043500000024041000390000001005000029000000000054043500000044040000390000000000410435000007db0010009c0000006d0000213d000000c004100039000000400040043f000000a005100039000007dc04000041001300000005001d000000000045043500000080051000390000002004000039000f00000005001d0000000000450435000000000401043300000000010004140000001105000029000000040050008c000015550000613d000007c10020009c000007c1020080410000004002200210000007c10040009c000007c1040080410000006003400210000000000223019f000007c10010009c000007c101008041000000c001100210000000000112019f00000011020000291f011ef70000040f000d00010020019300030000000103550000006001100270000107c10010019d000007c103100197000000000003004b0000158d0000c13d001000600000003d000e00800000003d000000100100002900000000010104330000000d0000006b000015ba0000c13d000000000001004b000015e20000c13d000000400100043d000007e20200004100000000002104350000000402100039000000200300003900000000003204350000000f020000290000000002020433000000240310003900000000002304350000004403100039000000000002004b000015740000613d000000000400001900000000053400190000001306400029000000000606043300000000006504350000002004400039000000000024004b0000156d0000413d0000001f042000390000087a04400197000000000232001900000000000204350000004402400039000007c10020009c000007c1020080410000006002200210000007c10010009c000007c1010080410000004001100210000000000112019f00001f03000104300000001f0530018f000007c306300198000000400200043d0000000004620019000010320000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000015880000c13d000010320000013d000007c50030009c0000006d0000213d0000001f023000390000087a022001970000003f022000390000087a02200197000000400400043d0000000002240019001000000004001d000000000042004b00000000040000390000000104004039000007c50020009c0000006d0000213d00000001004001900000006d0000c13d000000400020043f000000100200002900000000043204360000087a023001980000001f0330018f000e00000004001d00000000012400190000000304000367000015ac0000613d000000000504034f0000000e06000029000000005705043c0000000006760436000000000016004b000015a80000c13d000000000003004b000015590000613d000000000224034f0000000303300210000000000401043300000000043401cf000000000434022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000242019f0000000000210435000015590000013d000000000001004b000018b90000c13d000007dd010000410000000000100443000000110100002900000004001004430000000001000414000007c10010009c000007c101008041000000c001100210000007de011001c700008002020000391f011efc0000040f000000010020019000001ae30000613d000000000101043b000000000001004b000018b50000c13d000000400100043d0000004402100039000007e603000041000000000032043500000024021000390000001d030000390000000000320435000007e2020000410000000000210435000000040210003900000020030000390000000000320435000007c10010009c000007c1010080410000004001100210000007e7011001c700001f0300010430000000000023004b000017e80000a13d000000400100043d000008670200004100000b370000013d0000000e02000029000007c10020009c000007c1020080410000004002200210000007c10010009c000007c1010080410000006001100210000000000121019f00001f030001043000000002010003670000001102100360000000000202043b000007c50020009c00000a830000213d0000001103000029001100400030003d0000001101100360000000000101043b001200000001001d000000000020043f0000000701000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b000f00000001001d0000081c0100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000007c10010009c000007c101008041000000c00110021000000847011001c700008005020000391f011efc0000040f000000010020019000001ae30000613d000000000101043b000d00000001001d0000000f010000290000000201100039000c00000001001d000000000101041a000e00000001001d0000083a00100198000016550000613d000000120000006b000016550000613d0000000f010000290000000301100039000b00000001001d000000000101041a000f00000001001d000008250100004100000000001004430000000001000414000007c10010009c000007c101008041000000c00110021000000826011001c70000800b020000391f011efc0000040f000000010020019000001ae30000613d0000000e020000290000008002200270000007c102200197000000000101043b000000000421004b000011500000413d0000000e0200002900000829032001970000000f020000290000082902200197000019140000c13d0000000d01000029000007c404100197000000120020006c000013ae0000413d000000120130006c000017cf0000413d00000829011001970000000c03000029000000000203041a0000085002200197000000000112019f000000000013041b000000400100043d00000012020000290000000000210435000007c10010009c000007c10100804100000040011002100000000002000414000007c10020009c000007c102008041000000c002200210000000000112019f000007d0011001c70000800d02000039000000010300003900000851040000411f011ef70000040f000000010020019000000a830000613d000000110100002900000060051000390000000201000367000000000251034f000000000202043b0000000003000031000000130430006a000000230440008a000007c606400197000007c607200197000000000867013f000000000067004b0000000007000019000007c607004041000000000042004b0000000009000019000007c609008041000007c60080009c000000000709c019000000000007004b00000a830000c13d0000001002200029000000000721034f000000000707043b000007c50070009c00000a830000213d000000400070008c00000a830000413d00000000087300490000002007200039000000000087004b0000000002000019000007c602002041000007c608800197000007c609700197000000000a89013f000000000089004b0000000008000019000007c608004041000007c600a0009c000000000802c019000000000008004b00000a830000c13d000000400200043d001200000002001d000008570020009c0000006d0000213d00000012020000290000004002200039000000400020043f000000000271034f000000000202043b000007c50020009c00000a830000213d000000120800002900000000022804360000002007700039000000000771034f000000000707043b000007c10070009c00000a830000213d00000000007204350000002005500039000000000551034f000000000505043b000007c607500197000000000867013f000000000067004b0000000006000019000007c606004041000000000045004b0000000004000019000007c604008041000007c60080009c000000000604c019000000000006004b00000a830000c13d0000001005500029000000000451034f000000000404043b000007c50040009c00000a830000213d00000000034300490000002005500039000007c606300197000007c607500197000000000867013f000000000067004b0000000006000019000007c606004041000000000035004b0000000003000019000007c603002041000007c60080009c000000000603c019000000000006004b00000a830000c13d000000200040008c00000a830000413d000000000351034f000000000603043b000007c50060009c00000a830000213d000000000354001900000000045600190000000005430049000007df0050009c00000a830000213d000000400050008c00000a830000413d000000400500043d001100000005001d000008570050009c0000006d0000213d000000000541034f00000011060000290000004006600039000000400060043f000000000505043b000007c50050009c00000a830000213d00000000084500190000001f05800039000000000035004b0000000007000019000007c607008041000007c609500197000007c605300197000000000a59013f000000000059004b0000000009000019000007c609004041000007c600a0009c000000000907c019000000000009004b00000a830000c13d000000000781034f000000000707043b000007c50070009c0000006d0000213d0000001f097000390000087a099001970000003f099000390000087a099001970000000009690019000007c50090009c0000006d0000213d0000002008800039000000400090043f00000000007604350000000009870019000000000039004b00000a830000213d000000000a81034f0000087a0b7001980000001f0c70018f000000110800002900000060088000390000000009b80019000016fb0000613d000000000d0a034f000000000e08001900000000df0d043c000000000efe043600000000009e004b000016f70000c13d00000000000c004b000017080000613d000000000aba034f000000030bc00210000000000c090433000000000cbc01cf000000000cbc022f000000000a0a043b000001000bb00089000000000aba022f000000000aba01cf000000000aca019f0000000000a904350000000007870019000000000007043500000011070000290000000006670436000f00000006001d0000002006400039000000000661034f000000000606043b000007c50060009c00000a830000213d00000000064600190000001f04600039000000000034004b0000000007000019000007c607008041000007c604400197000000000854013f000000000054004b0000000004000019000007c604004041000007c60080009c000000000407c019000000000004004b00000a830000c13d000000000461034f000000000404043b000007c50040009c0000006d0000213d0000001f054000390000087a055001970000003f055000390000087a07500197000000400500043d0000000007750019000000000057004b00000000080000390000000108004039000007c50070009c0000006d0000213d00000001008001900000006d0000c13d0000002008600039000000400070043f00000000064504360000000007840019000000000037004b00000a830000213d000000000381034f0000087a074001980000001f0840018f0000000001760019000017420000613d000000000903034f000000000a060019000000009b09043c000000000aba043600000000001a004b0000173e0000c13d000000000008004b0000174f0000613d000000000373034f0000000307800210000000000801043300000000087801cf000000000878022f000000000303043b0000010007700089000000000373022f00000000037301cf000000000383019f0000000000310435000000000146001900000000000104350000000f0100002900000000005104350000001101000029000000000101043300000004031000390000000003030433000007c103300198000019a60000c13d0000000002020433000007c10220019700000008031000390000000003030433000007c103300197000000000023004b000019ab0000c13d00000014021000390000000002020433000d00000002001d0000000c011000390000000001010433000e00000001001d0000081c01000041000000000010044300000000010004120000000400100443000000c00100003900000024001004430000000001000414000007c10010009c000007c101008041000000c00110021000000847011001c700008005020000391f011efc0000040f000000010020019000001ae30000613d000000400200043d001000000002001d0000000402200039000000000101043b0000000e0310014f000007c100300198000019b70000c13d0000000d01000029000007c50110019700000012030000290000000003030433000007c503300197000000000031004b000019c50000c13d0000000f010000290000000001010433000000110300002900000000030304330000086b0400004100000010060000290000000000460435000000400400003900000000004204350000004404600039000000005303043400000000003404350000006404600039000000000003004b0000179a0000613d000000000600001900000000074600190000000008650019000000000808043300000000008704350000002006600039000000000036004b000017930000413d000000000534001900000000000504350000001f033000390000087a033001970000000003340019000000000223004900000010040000290000002404400039000000000024043500000000140104340000000002430436001200000002001d001100000004001d000000000004004b000017b10000613d000000000200001900000012032000290000000004210019000000000404043300000000004304350000002002200039000000110020006c000017aa0000413d0000001102000029000000120120002900000000000104350000081c01000041000000000010044300000000010004120000000400100443000000a00100003900000024001004430000000001000414000007c10010009c000007c101008041000000c00110021000000847011001c700008005020000391f011efc0000040f000000010020019000001ae30000613d000000000201043b0000000001000414000007c402200197000000040020008c000019cc0000c13d0000000103000031000000200030008c00000020040000390000000004034019000019ff0000013d000000120130006c000018010000813d0000000b01000029000000000101041a0000008001100272000011500000613d00000012053000690000000002150019000000010220008a000000000052004b000011500000413d00000000021200d9000000400100043d00000000060100190000000401100039000000000004004b0000190c0000c13d0000085a040000410000000000460435000000000021043500000024016000390000000000310435000007c10060009c000007c1060080410000004001600210000007cc011001c700001f03000104300000000c05000029000000800650027000000000056400a900000000044500d9000000000064004b000011500000c13d000000000035001a000011500000413d000000000335001900000080011002100000084e011001970000000f05000029000000000405041a0000084f04400197000000000114019f000000000015041b000000000032004b0000000003024019000013aa0000013d0000085b03000041001300000005001d000000000035043500000012030000291f011ebb0000040f000010980000013d00000829011001970000000f03000029000000000203041a0000085002200197000000000112019f000000000013041b000000400100043d00000012020000290000000000210435000007c10010009c000007c10100804100000040011002100000000002000414000007c10020009c000007c102008041000000c002200210000000000112019f000007d0011001c70000800d02000039000000010300003900000851040000411f011ef70000040f000000010020019000000a830000613d00000011010000290000000201100367000000000101043b000007c50010009c00000a830000213d000000000010043f0000000a01000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000400200043d000008280020009c0000006d0000213d000000000101043b0000006003200039000000400030043f000000000301041a001200000003001d00000000033204360000000101100039000000000101041a000000400220003900000834001001980000000004000039000000010400c0390000000000420435000007c101100197000f00000001001d00000000001304350000000202000367000018ac0000613d0000001101000029000000200110008a000000000112034f000000000401043b0000000003000031000000130130006a000000230110008a000007c605100197000007c606400197000000000756013f000000000056004b0000000005000019000007c605004041000000000014004b0000000001000019000007c601008041000007c60070009c000000000501c019000000000005004b00000a830000c13d000000130100002900000004011000390000000005140019000000000452034f000000000404043b000007c50040009c00000a830000213d00000000064300490000002003500039000007c605600197000007c607300197000000000857013f000000000057004b0000000005000019000007c605004041000000000063004b0000000006000019000007c606002041000007c60080009c000000000506c019000000000005004b00000a830000c13d000000200040008c000019100000c13d000000000132034f0000001002200360000000000202043b001000000002001d000000000101043b000e00000001001d000000400200043d0000085401000041001300000002001d00000000001204350000081c0100004100000000001004430000000001000412000000040010044300000024000004430000000001000414000007c10010009c000007c101008041000000c00110021000000847011001c700008005020000391f011efc0000040f000000010020019000001ae30000613d000000000101043b000000130400002900000084024000390000001203000029000000000032043500000044024000390000000e03000029000000000032043500000024024000390000000f0300002900000000003204350000000402400039000000100300002900000000003204350000006402400039000007c40110019700000000001204350000081c01000041000000000010044300000000010004120000000400100443000000800100003900000024001004430000000001000414000007c10010009c000007c101008041000000c00110021000000847011001c700008005020000391f011efc0000040f000000010020019000001ae30000613d000000000201043b0000000001000414000007c402200197000000040020008c000019290000c13d0000000104000031000000200040008c0000002004008039000019530000013d00000013010000290000002401100039000000000112034f000000000101043b000007c50010009c00000a830000213d000000400200043d000008520300004100000aa50000013d00000010010000290000000001010433000000000001004b000018c60000613d000007df0010009c00000a830000213d000000200010008c00000a830000413d0000000e010000290000000001010433000000000001004b0000000002000039000000010200c039000000000021004b00000a830000c13d000000000001004b000018f80000613d000000400100043d00000012020000290000000000210435000007c10010009c000007c10100804100000040011002100000000002000414000007c10020009c000007c102008041000000c002200210000000000121019f000007d0011001c70000800d020000390000000103000039000007e4040000411f011ef70000040f000000010020019000000a830000613d000000800100043d00000140000004430000016000100443000000a00100043d00000020030000390000018000300443000001a000100443000000c00100043d0000004002000039000001c000200443000001e0001004430000006001000039000000e00200043d000002000010044300000220002004430000008001000039000001000200043d00000240001004430000026000200443000000a001000039000001200200043d0000028000100443000002a000200443000000c001000039000001400200043d000002c000100443000002e000200443000001000030044300000007010000390000012000100443000007e50100004100001f020001042e000000400100043d0000006402100039000007e00300004100000000003204350000004402100039000007e103000041000000000032043500000024021000390000002a030000390000000000320435000007e2020000410000000000210435000000040210003900000020030000390000000000320435000007c10010009c000007c1010080410000004001100210000007e3011001c700001f03000104300000085905000041001300000006001d0000000000560435000017ff0000013d00000000020100191f011b420000040f00000853030000410000145d0000013d000000000023004b000015df0000213d0000000f05000029000000800650027000000000056400a900000000044500d9000000000064004b000011500000c13d000000000035001a000011500000413d000000000335001900000080011002100000084e011001970000000c05000029000000000405041a0000084f04400197000000000114019f000000000015041b000000000032004b0000000003024019000016370000013d0000001303000029000007c10030009c000007c1030080410000004003300210000007c10010009c000007c101008041000000c001100210000000000131019f00000855011001c71f011ef70000040f0000006003100270000007c103300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000001305700029000019420000613d000000000801034f0000001309000029000000008a08043c0000000009a90436000000000059004b0000193e0000c13d000000000006004b0000194f0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f000300000001035500000001002001900000199a0000613d0000001f01400039000000600210018f0000001301200029000000000021004b00000000020000390000000102004039000007c50010009c0000006d0000213d00000001002001900000006d0000c13d000000400010043f000000200040008c00000a830000413d00000013020000290000000002020433000f00000002001d000007c50020009c00000a830000213d00000010020000290000000000210435000007c10010009c000007c10100804100000040011002100000000002000414000007c10020009c000007c102008041000000c002200210000000000112019f000007d0011001c70000800d020000390000000203000039000008560400004100000000050004111f011ef70000040f000000010020019000000a830000613d00000011010000290000000201100367000000000101043b000007c50010009c00000a830000213d000000000010043f0000000701000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000000101043b0000000401100039000000000201041a000000010320019000000001042002700000007f0440618f001300000004001d0000001f0040008c00000000040000390000000104002039000000000043004b00001a170000613d0000085801000041000000000010043f0000002201000039000000040010043f000007d50100004100001f03000104300000001f0530018f000007c306300198000000400200043d0000000004620019000010320000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000019a10000c13d000010320000013d000000400100043d000007d40200004100000000002104350000000402100039000004940000013d000000400100043d000000240410003900000000003404350000086803000041000000000031043500000004031000390000000000230435000007c10010009c000007c1010080410000004001100210000007cc011001c700001f0300010430000008690300004100000010040000290000000000340435000007c10110019700000000001204350000000e01000029000007c10110019700000024024000390000000000120435000007c10040009c000007c1040080410000004001400210000007cc011001c700001f03000104300000086a0400004100000010050000290000000000450435000000000032043500000024025000390000000000120435000013b90000013d00000011030000290000001f033000390000087a03300197000000100500002900000000035300490000001203300029000007c10030009c000007c1030080410000006003300210000007c10050009c000007c10400004100000000040540190000004004400210000000000343019f000007c10010009c000007c101008041000000c001100210000000000131019f1f011ef70000040f0000006003100270000007c103300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000001005700029000019ee0000613d000000000801034f0000001009000029000000008a08043c0000000009a90436000000000059004b000019ea0000c13d000000000006004b000019fb0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f0003000000010355000000010020019000001a350000613d0000001f01400039000000600210018f0000001001200029000000000021004b00000000020000390000000102004039000007c50010009c0000006d0000213d00000001002001900000006d0000c13d000000400010043f000000200030008c00000a830000413d00000010020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b00000a830000c13d000000000002004b00001a410000c13d0000086d0200004100000b370000013d000000400400043d001100000004001d00000013050000290000000004540436001200000004001d000000000003004b00001a6b0000613d000000000010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007d0011001c700008010020000391f011efc0000040f000000010020019000000a830000613d000000130000006b000000000200001900001a710000613d000000000101043b00000000020000190000001203200029000000000401041a000000000043043500000001011000390000002002200039000000130020006c00001a2d0000413d00001a710000013d0000001f0530018f000007c306300198000000400200043d0000000004620019000010320000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00001a3c0000c13d000010320000013d000000130200002900000044022000390000000203000367000000000423034f000000000604043b000007c40060009c00000a830000213d0000002002200039000000000223034f000000000202043b001300000002001d0000000000210435000007c10010009c000007c10100804100000040011002100000000002000414000007c10020009c000007c102008041000000c002200210000000000112019f000007d0011001c70000800d0200003900000003030000390000086c0400004100000000050004111f011ef70000040f000000010020019000000a830000613d000000400100043d000007cd0010009c0000006d0000213d0000002002100039000000400020043f00000013020000290000000000210435000000400100043d0000000000210435000007c10010009c000007c10100804100000040011002100000085e011001c700001f020001042e0000087c0120019700000012020000290000000000120435000000130000006b000000200200003900000000020060390000003f012000390000087a011001970000001102100029000000000012004b00000000010000390000000101004039001300000002001d000007c50020009c0000006d0000213d00000001001001900000006d0000c13d0000001301000029000000400010043f000008570010009c0000006d0000213d00000013020000290000004001200039000000400010043f0000000f01000029000007c5011001970000000001120436001200000001001d0000081c01000041000000000010044300000000010004120000000400100443000000c00100003900000024001004430000000001000414000007c10010009c000007c101008041000000c00110021000000847011001c700008005020000391f011efc0000040f000000010020019000001ae30000613d000000000101043b000007c1011001970000001204000029000000000014043500000013010000290000000001010433000007c502100197000000400100043d000000200310003900000000002304350000000002040433000007c1022001970000004003100039000000000023043500000040020000390000000000210435000008280010009c0000006d0000213d0000006003100039000000400030043f000008570030009c0000006d0000213d000000a002100039000000400020043f00000011020000290000000000230435000000800210003900000000001204350000002004000039000000400100043d00000000044104360000000003030433000000400500003900000000005404350000006004100039000000005303043400000000003404350000008004100039000000000003004b00001ac60000613d000000000600001900000000074600190000000008650019000000000808043300000000008704350000002006600039000000000036004b00001abf0000413d000000000534001900000000000504350000001f033000390000087a0330019700000000053400190000000003150049000000200330008a00000000020204330000004004100039000000000034043500000000430204340000000002350436000000000003004b00001adc0000613d000000000500001900000000062500190000000007540019000000000707043300000000007604350000002005500039000000000035004b00001ad50000413d0000001f043000390000087a04400197000000000332001900000000000304350000000003140049000000000223001900000a510000013d000000000001042f0000087d0010009c00001ae90000813d000000a001100039000000400010043f000000000001042d0000085801000041000000000010043f0000004101000039000000040010043f000007d50100004100001f03000104300000087e0010009c00001af40000813d0000006001100039000000400010043f000000000001042d0000085801000041000000000010043f0000004101000039000000040010043f000007d50100004100001f030001043000000000430104340000000001320436000000000003004b00001b060000613d000000000200001900000000052100190000000006240019000000000606043300000000006504350000002002200039000000000032004b00001aff0000413d000000000231001900000000000204350000001f023000390000087a022001970000000001210019000000000001042d000007df0010009c00001b270000213d000000430010008c00001b270000a13d00000002020003670000000403200370000000000403043b000007c50040009c00001b270000213d0000002403200370000000000503043b000007c50050009c00001b270000213d0000002303500039000000000013004b00001b270000813d0000000403500039000000000232034f000000000302043b000007c50030009c00001b270000213d00000024025000390000000005320019000000000015004b00001b270000213d0000000001040019000000000001042d000000000100001900001f03000104300000000043020434000008290330019700000000033104360000000004040433000007c104400197000000000043043500000040032000390000000003030433000000000003004b0000000003000039000000010300c039000000400410003900000000003404350000006003200039000000000303043300000829033001970000006004100039000000000034043500000080022000390000000002020433000008290220019700000080031000390000000000230435000000a001100039000000000001042d0000000204000367000000000224034f000000000202043b000000000300003100000000051300490000001f0550008a000007c606500197000007c607200197000000000867013f000000000067004b0000000006000019000007c606002041000000000052004b0000000005000019000007c605004041000007c60080009c000000000605c019000000000006004b00001b6a0000613d0000000001120019000000000214034f000000000202043b000007c50020009c00001b6a0000213d00000000032300490000002001100039000007c604300197000007c605100197000000000645013f000000000045004b0000000004000019000007c604004041000000000031004b0000000003000019000007c603002041000007c60060009c000000000403c019000000000004004b00001b6a0000c13d000000000001042d000000000100001900001f03000104300000087f0020009c00001b9c0000813d00000000040100190000001f012000390000087a011001970000003f011000390000087a05100197000000400100043d0000000005510019000000000015004b00000000070000390000000107004039000007c50050009c00001b9c0000213d000000010070019000001b9c0000c13d000000400050043f00000000052104360000000007420019000000000037004b00001ba20000213d0000087a062001980000001f0720018f0000000204400367000000000365001900001b8c0000613d000000000804034f0000000009050019000000008a08043c0000000009a90436000000000039004b00001b880000c13d000000000007004b00001b990000613d000000000464034f0000000306700210000000000703043300000000076701cf000000000767022f000000000404043b0000010006600089000000000464022f00000000046401cf000000000474019f000000000043043500000000022500190000000000020435000000000001042d0000085801000041000000000010043f0000004101000039000000040010043f000007d50100004100001f0300010430000000000100001900001f03000104300003000000000002000300000003001d000200000002001d000007c501100197000000000010043f0000000701000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f0000000207000029000000030a000029000000010020019000001c0d0000613d0000000003000031000000000601043b0000087f00a0009c00001c0f0000813d0000001f01a000390000087a011001970000003f011000390000087a02100197000000400100043d0000000002210019000000000012004b00000000050000390000000105004039000007c50020009c00001c0f0000213d000000010050019000001c0f0000c13d000100000006001d000000400020043f0000000002a1043600000000057a0019000000000035004b00001c0d0000213d0000087a04a001980000001f05a0018f0000000206700367000000000342001900001bd80000613d000000000706034f0000000008020019000000007907043c0000000008980436000000000038004b00001bd40000c13d000000000005004b00001be50000613d000000000446034f0000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004304350000000003a200190000000000030435000007c10020009c000007c10200804100000040022002100000000001010433000007c10010009c000007c1010080410000006001100210000000000121019f0000000002000414000007c10020009c000007c102008041000000c002200210000000000112019f0000081e011001c700008010020000391f011efc0000040f000000010020019000001c0d0000613d000000000101043b000000000010043f00000001010000290000000601100039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000001c0d0000613d000000000101043b000000000101041a000000000001004b0000000001000039000000010100c039000000000001042d000000000100001900001f03000104300000085801000041000000000010043f0000004101000039000000040010043f000007d50100004100001f03000104300000002004000039000000000441043600000000003404350000087a063001980000001f0730018f00000040011000390000000005610019000000020220036700001c240000613d000000000802034f0000000009010019000000008a08043c0000000009a90436000000000059004b00001c200000c13d000000000007004b00001c310000613d000000000262034f0000000306700210000000000705043300000000076701cf000000000767022f000000000202043b0000010006600089000000000262022f00000000026201cf000000000272019f0000000000250435000000000231001900000000000204350000001f023000390000087a022001970000000001120019000000000001042d000000400100043d0000087d0010009c00001c460000813d000000a002100039000000400020043f000000800210003900000000000204350000006002100039000000000002043500000040021000390000000000020435000000200210003900000000000204350000000000010435000000000001042d0000085801000041000000000010043f0000004101000039000000040010043f000007d50100004100001f03000104300003000000000002000007c501100197000000000010043f0000000701000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000001c990000613d000000000101043b0000000405100039000000000205041a000000010320019000000001062002700000007f0660618f0000001f0060008c00000000040000390000000104002039000000000043004b00001c9b0000c13d000000400100043d0000000004610436000000000003004b00001c850000613d000100000004001d000200000006001d000300000001001d000000000050043f0000000001000414000007c10010009c000007c101008041000000c001100210000007d0011001c700008010020000391f011efc0000040f000000010020019000001c990000613d0000000206000029000000000006004b00001c8b0000613d000000000201043b0000000005000019000000030100002900000001070000290000000003570019000000000402041a000000000043043500000001022000390000002005500039000000000065004b00001c7d0000413d00001c8d0000013d0000087c022001970000000000240435000000000006004b0000002005000039000000000500603900001c8d0000013d000000000500001900000003010000290000003f035000390000087a023001970000000003120019000000000023004b00000000020000390000000102004039000007c50030009c00001ca10000213d000000010020019000001ca10000c13d000000400030043f000000000001042d000000000100001900001f03000104300000085801000041000000000010043f0000002201000039000000040010043f000007d50100004100001f03000104300000085801000041000000000010043f0000004101000039000000040010043f000007d50100004100001f03000104300007000000000002000400000001001d000600000002001d0000000021020434000000000001004b00001dc00000613d000007c10010009c000007c1010080410000006001100210000007c10020009c000500000002001d000007c1020080410000004002200210000000000121019f0000000002000414000007c10020009c000007c102008041000000c002200210000000000112019f0000081e011001c700008010020000391f011efc0000040f000000010020019000001db80000613d000000000101043b000700000001001d0000000401000029000007c501100197000200000001001d000000000010043f0000000701000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000001db80000613d000000000201043b0000000701000029000000000010043f000400000002001d0000000601200039000300000001001d000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000001db80000613d000000000101043b000000000101041a000000000001004b00001dc80000c13d00000004010000290000000502100039000000000102041a0000087f0010009c00001dba0000813d000100000001001d0000000101100039000000000012041b000400000002001d000000000020043f0000000001000414000007c10010009c000007c101008041000000c001100210000007d0011001c700008010020000391f011efc0000040f0000000100200190000000070200002900001db80000613d000000000101043b0000000101100029000000000021041b0000000401000029000000000101041a000400000001001d000000000020043f0000000301000029000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f0000000100200190000000070200002900001db80000613d000000000101043b0000000403000029000000000031041b000000000020043f0000000801000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000001db80000613d000000000801043b00000006010000290000000004010433000007c50040009c00001dba0000213d000000000108041a000000010210019000000001031002700000007f0330618f0000001f0030008c00000000010000390000000101002039000000000012004b000000050700002900001ddf0000c13d000000200030008c000400000008001d000700000004001d00001d4b0000413d000300000003001d000000000080043f0000000001000414000007c10010009c000007c101008041000000c001100210000007d0011001c700008010020000391f011efc0000040f000000010020019000001db80000613d00000007040000290000001f024000390000000502200270000000200040008c0000000002004019000000000301043b00000003010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b0000000507000029000000040800002900001d4b0000813d000000000002041b0000000102200039000000000012004b00001d470000413d000000200040008c000000200a00008a000000200b00003900001d7b0000413d000000000080043f0000000001000414000007c10010009c000007c101008041000000c001100210000007d0011001c700008010020000391f011efc0000040f000000010020019000001db80000613d0000000709000029000000200a00008a0000000002a90170000000000101043b000000200b00003900001db10000613d000000010320008a000000050330027000000000043100190000002003000039000000010440003900000005070000290000000606000029000000040800002900000000056300190000000005050433000000000051041b00000020033000390000000101100039000000000041004b00001d670000c13d000000000092004b00001d780000813d0000000302900210000000f80220018f0000087b0220027f0000087b0220016700000000036300190000000003030433000000000223016f000000000021041b000000010190021000000001011001bf00001d870000013d000000000004004b00001d850000613d00000003014002100000087b0110027f0000087b011001670000000002070433000000000112016f0000000102400210000000000121019f00001d860000013d00000000010000190000000606000029000000000018041b000000400100043d0000000003b10436000000000206043300000000002304350000004003100039000000000002004b00001d970000613d000000000400001900000000053400190000000006740019000000000606043300000000006504350000002004400039000000000024004b00001d900000413d0000001f042000390000000004a4016f000000000223001900000000000204350000004002400039000007c10020009c000007c1020080410000006002200210000007c10010009c000007c1010080410000004001100210000000000112019f0000000002000414000007c10020009c000007c102008041000000c002200210000000000121019f0000081e011001c70000800d020000390000000203000039000008310400004100000002050000291f011ef70000040f000000010020019000001db80000613d000000000001042d00000000030b0019000000050700002900000006060000290000000408000029000000000092004b00001d700000413d00001d780000013d000000000100001900001f03000104300000085801000041000000000010043f0000004101000039000000040010043f000007d50100004100001f0300010430000000400100043d00000833020000410000000000210435000007c10010009c000007c1010080410000004001100210000007ca011001c700001f0300010430000000400300043d000700000003001d00000024013000390000004002000039000000000021043500000830010000410000000000130435000000040130003900000002020000290000000000210435000000440230003900000006010000291f011afa0000040f00000007020000290000000001210049000007c10010009c000007c101008041000007c10020009c000007c10200804100000060011002100000004002200210000000000121019f00001f03000104300000085801000041000000000010043f0000002201000039000000040010043f000007d50100004100001f03000104300005000000000002000000400300043d0000087d0030009c00001e2b0000813d000000a002300039000000400020043f00000080023000390000000000020435000000600230003900000000000204350000004002300039000000000002043500000020023000390000000000020435000000000003043500000060021000390000000002020433000100000002001d000500000001001d0000000012010434000300000002001d000200000001001d0000000001010433000400000001001d000008250100004100000000001004430000000001000414000007c10010009c000007c101008041000000c00110021000000826011001c70000800b020000391f011efc0000040f000000010020019000001e310000613d0000000402000029000007c104200197000000000601043b000000000346004b000000050100002900001e250000413d00000080021000390000000002020433000008290520019700000000023500a9000000000046004b00001e170000613d00000000033200d9000000000053004b00001e250000c13d00000003030000290000082903300197000000000032001a00001e250000413d000000000232001900000001030000290000082903300197000000000023004b00000000030280190000000000310435000007c10260019700000002030000290000000000230435000000000001042d0000085801000041000000000010043f0000001101000039000000040010043f000007d50100004100001f03000104300000085801000041000000000010043f0000004101000039000000040010043f000007d50100004100001f0300010430000000000001042f0000000043020434000000000003004b0000000003000039000000010300c0390000000003310436000000000404043300000829044001970000000000430435000000400220003900000000020204330000082902200197000000400310003900000000002304350000006001100039000000000001042d000000000010043f0000000601000039000000200010043f0000000001000414000007c10010009c000007c101008041000000c001100210000007ce011001c700008010020000391f011efc0000040f000000010020019000001e530000613d000000000101043b000000000101041a000000000001004b0000000001000039000000010100c039000000000001042d000000000100001900001f03000104300003000000000002000100000002001d000300000001001d000000000101041a000200000001001d000008250100004100000000001004430000000001000414000007c10010009c000007c101008041000000c00110021000000826011001c70000800b020000391f011efc0000040f000000010020019000001eb80000613d00000002080000290000008002800270000007c103200197000000000201043b000000000532004b000000030700002900001eb20000413d000000010170003900001e700000c13d000000000207041a00001e830000013d000000000301041a000000800630027000000000045600a900000000055400d9000000000065004b00001eb20000c13d0000082905800197000000000054001a00001eb20000413d00000000045400190000082903300197000000000043004b000000000304801900000080022002100000084e02200197000000000223019f000000000307041a000007c803300197000000000232019f00000001060000290000002003600039000000000403043300000829044001970000082905200197000000000054004b00000000050440190000088002200197000000000225019f0000000005060433000000000005004b00000000050000190000082e0500c041000000000252019f000000000027041b000000400260003900000000050204330000008005500210000000000445019f000000000041041b0000000001000039000000010100c039000000400400043d00000000011404360000000003030433000008290330019700000000003104350000000001020433000008290110019700000040024000390000000000120435000007c10040009c000007c10400804100000040014002100000000002000414000007c10020009c000007c102008041000000c002200210000000000112019f00000881011001c70000800d02000039000000010300003900000882040000411f011ef70000040f000000010020019000001eb90000613d000000000001042d0000085801000041000000000010043f0000001101000039000000040010043f000007d50100004100001f0300010430000000000001042f000000000100001900001f0300010430000007c404400197000000400510003900000000004504350000002004100039000000000034043500000000002104350000006001100039000000000001042d000000000001042f000007c10010009c000007c1010080410000004001100210000007c10020009c000007c1020080410000006002200210000000000112019f0000000002000414000007c10020009c000007c102008041000000c002200210000000000112019f0000081e011001c700008010020000391f011efc0000040f000000010020019000001ed70000613d000000000101043b000000000001042d000000000100001900001f030001043000000000050100190000000000200443000000050030008c00001ee70000413d000000040100003900000000020000190000000506200210000000000664001900000005066002700000000006060031000000000161043a0000000102200039000000000031004b00001edf0000413d000007c10030009c000007c10300804100000060013002100000000002000414000007c10020009c000007c102008041000000c002200210000000000112019f00000883011001c700000000020500191f011efc0000040f000000010020019000001ef60000613d000000000101043b000000000001042d000000000001042f00001efa002104210000000102000039000000000001042d0000000002000019000000000001042d00001eff002104230000000102000039000000000001042d0000000002000019000000000001042d00001f010000043200001f020001042e00001f030001043000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000ffffffffffffffff80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffff0000000000000000000000000000000000000000313ce567000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000655a7c0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffdf0200000000000000000000000000000000000040000000000000000000000000bfa87805ed57dc1f0d489ce33be4c4577d74ccde357eeeee058a32c55c44a53202000000000000000000000000000000000000200000000000000000000000002640d4d76caf8bf478aabfa982fa4e1c4eb71a37f93cd15e80dbc657911546d82c1219210000000000000000000000000000000000000000000000000000000054fd4d500000000000000000000000000000000000000000000000000000000068d2f8d60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000009cdbb18100000000000000000000000000000000000000000000000000000000b5d1ce28000000000000000000000000000000000000000000000000000000008d3638f400000000000000000000000000000000000000000000000000000000dd62ed3e00000000000000000000000000000000000000000000000000000000095ea7b300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff3f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65641806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b8302000002000000000000000000000000000000240000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f742073756363656564000000000000000000000000000000000000000000005361666545524332303a204552433230206f7065726174696f6e20646964206e08c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000000000000000000000002e902d38f15b233cbb63711add0fca4545334d3a169d60c0a616494d7eea95440000000200000000000000000000000000000200000001000000000000000000416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000000000000000000000000000000000000000006400000000000000000000000035be3ac8000000000000000000000000000000000000000000000000000000009b15e16f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009a4575b800000000000000000000000000000000000000000000000000000000c4bffe2a00000000000000000000000000000000000000000000000000000000dfadfa3400000000000000000000000000000000000000000000000000000000e8a1da1600000000000000000000000000000000000000000000000000000000e8a1da1700000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000fbf84dd700000000000000000000000000000000000000000000000000000000dfadfa3500000000000000000000000000000000000000000000000000000000e0351e1300000000000000000000000000000000000000000000000000000000cf7401f200000000000000000000000000000000000000000000000000000000cf7401f300000000000000000000000000000000000000000000000000000000dc0bd97100000000000000000000000000000000000000000000000000000000c4bffe2b00000000000000000000000000000000000000000000000000000000c75eea9c00000000000000000000000000000000000000000000000000000000acfecf9000000000000000000000000000000000000000000000000000000000b0f479a000000000000000000000000000000000000000000000000000000000b0f479a100000000000000000000000000000000000000000000000000000000b794658000000000000000000000000000000000000000000000000000000000c0d7865500000000000000000000000000000000000000000000000000000000acfecf9100000000000000000000000000000000000000000000000000000000af58d59f00000000000000000000000000000000000000000000000000000000a42a7b8a00000000000000000000000000000000000000000000000000000000a42a7b8b00000000000000000000000000000000000000000000000000000000a7cd63b7000000000000000000000000000000000000000000000000000000009a4575b9000000000000000000000000000000000000000000000000000000009fdf13ff0000000000000000000000000000000000000000000000000000000054c8a4f2000000000000000000000000000000000000000000000000000000006d3d1a57000000000000000000000000000000000000000000000000000000007d54534d000000000000000000000000000000000000000000000000000000007d54534e000000000000000000000000000000000000000000000000000000008926f54f000000000000000000000000000000000000000000000000000000008da5cb5b000000000000000000000000000000000000000000000000000000006d3d1a580000000000000000000000000000000000000000000000000000000079ba50970000000000000000000000000000000000000000000000000000000062ddd3c30000000000000000000000000000000000000000000000000000000062ddd3c4000000000000000000000000000000000000000000000000000000006b716b0d0000000000000000000000000000000000000000000000000000000054c8a4f3000000000000000000000000000000000000000000000000000000006155cda000000000000000000000000000000000000000000000000000000000240028e700000000000000000000000000000000000000000000000000000000390775360000000000000000000000000000000000000000000000000000000039077537000000000000000000000000000000000000000000000000000000004c5ef0ed00000000000000000000000000000000000000000000000000000000240028e80000000000000000000000000000000000000000000000000000000024f65ee700000000000000000000000000000000000000000000000000000000181f5a7600000000000000000000000000000000000000000000000000000000181f5a770000000000000000000000000000000000000000000000000000000021df0da7000000000000000000000000000000000000000000000000000000000041d3c10000000000000000000000000000000000000000000000000000000001ffc9a7310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e00000000000000000000000000000000000000200000008000000000000000000200000000000000000000000000000000000000000000000000000000000000ed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278dad89dca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000800000000000000000fc949c7b4a13586e39d89eead2f38644f9fb3efb5a0490b14f8fc0ceab44c2515204aec90a3c794d8e90fded8b46ae9c7c552803e7e832e0c1d358396d8599161e670e4b00000000000000000000000000000000000000000000000000000000796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d955391320200000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5f000000000000000000000000000000000000000000000000ffffffffffffff9f00000000000000000000000000000000ffffffffffffffffffffffffffffffff8020d12400000000000000000000000000000000000000000000000000000000d68af9cc000000000000000000000000000000000000000000000000000000001d5ad3c500000000000000000000000000000000000000000000000000000000fc949c7b4a13586e39d89eead2f38644f9fb3efb5a0490b14f8fc0ceab44c2500000000000000000000000010000000000000000000000000000000000000000ffffffffffffffffffffff000000000000000000000000000000000000000000393b8ad2000000000000000000000000000000000000000000000000000000007d628c9a1796743d365ab521a8b2a4686e419b3269919dc9145ea2ce853b54ea8d340f17e19058004c20453540862a9c62778504476f6756755cb33bcd6c38c28579befe00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ff0000000000000000000000000000000000000000000000600000000000000000000000008e4a23d600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000140000000000000000002000000000000000000000000000000000000e00000000000000000000000000350d63aa5f270e01729d00d627eeb8f3429772b1818c016c66a588a864f912b0000000000000000000000ff0000000000000000000000000000000000000000036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0000000000000000000000000000000000000000000000000ffffffffffffff7f00000000000000000000000000000000000000000000003fffffffffffffffe0020000000000000000000000000000000000004000000080000000000000000002dc5c233404867c793b749c6d644beb2277536d18a7e7974d3f238e4c6f168400000000000000000000000000000000000000000000000000000000ffffffbffdffffffffffffffffffffffffffffffffffffc000000000000000000000000052d00ee4d9bd51b40168f2afc5848837288ce258784ad914278791464b3f4d7674f23c7c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffff9bffffffffffffffffffffffffffffffffffffff9c000000000000000000000000405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0200000200000000000000000000000000000044000000000000000000000000961c9a4f000000000000000000000000000000000000000000000000000000002cbc26bb0000000000000000000000000000000000000000000000000000000053ad11d800000000000000000000000000000000000000000000000000000000d0d2597600000000000000000000000000000000000000000000000000000000a8d87a3b00000000000000000000000000000000000000000000000000000000728fe07b00000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000ffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000001871cdf8010e63f2eb8384381a68dfa7416dc571a5517e66e88b2d2d0c0a690ad201c48a00000000000000000000000000000000000000000000000000000000a3c8cf0900000000000000000000000000000000000000000000000000000000f856ddb60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4000000000000000000000000696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df7000000000000000000000000000000000000000000000000ffffffffffffffbf4e487b7100000000000000000000000000000000000000000000000000000000d0c8d23a0000000000000000000000000000000000000000000000000000000015279c08000000000000000000000000000000000000000000000000000000001a76572a00000000000000000000000000000000000000000000000000000000f94ebcd100000000000000000000000000000000000000000000000000000000a9902c7e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000020000000000000000000000000000000000002000000080000000000000000044676b5284b809a22248eba0da87391d79098be38bb03154be88a58bf4d0917402b543c6000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0bfa87805ed57dc1f0d489ce33be4c4577d74ccde357eeeee058a32c55c44a533800671136ab6cfee9fbe5ed1fb7ca417811aca3cf864800d127b927adedf756635f4a7b30000000000000000000000000000000000000000000000000000000083826b2b000000000000000000000000000000000000000000000000000000009725942a00000000000000000000000000000000000000000000000000000000e366a1170000000000000000000000000000000000000000000000000000000077e4802600000000000000000000000000000000000000000000000000000000f917ffea0000000000000000000000000000000000000000000000000000000057ecfd28000000000000000000000000000000000000000000000000000000009d228d69b5fdb8d273a2336f8fb8612d039631024ea9bf09c424a9503aa078f0bf969f220000000000000000000000000000000000000000000000000000000024eb47e50000000000000000000000000000000000000000000000000000000055534443546f6b656e506f6f6c20312e352e31000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffc9a7000000000000000000000000000000000000000000000000000000000e64dd2900000000000000000000000000000000000000000000000000000000aff2afbf000000000000000000000000000000000000000000000000000000002b5c74de00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000100000000a087bd29000000000000000000000000000000000000000000000000000000001889010d2535a0ab1643678d1da87fbbe8b87b2f585b47ddb72ec622aef9ee56ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000ffffffffffffff60000000000000000000000000000000000000000000000000ffffffffffffffa00000000000000000000000000000000000000000000000010000000000000000ffffffffffffffffffffff00ffffffff0000000000000000000000000000000002000000000000000000000000000000000000600000000000000000000000009ea3374b67bf275e6bb9c8ae68f9cae023e1c528b4b27e092f0bb209d3531c1902000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000") diff --git a/core/gethwrappers/ccip/generated_zks/weth9/weth9.go b/core/gethwrappers/ccip/generated_zks/weth9/weth9.go new file mode 100644 index 00000000000..50d0aa23f73 --- /dev/null +++ b/core/gethwrappers/ccip/generated_zks/weth9/weth9.go @@ -0,0 +1,996 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package weth9 + +import ( + "errors" + "fmt" + "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" + "github.com/smartcontractkit/chainlink/v2/core/gethwrappers/generated" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var WETH9MetaData = &bind.MetaData{ + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"guy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"src\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"dst\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"wad\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60c0604052600d60809081526c2bb930b83832b21022ba3432b960991b60a05260009061002c9082610116565b506040805180820190915260048152630ae8aa8960e31b60208201526001906100559082610116565b506002805460ff1916601217905534801561006f57600080fd5b506101d5565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061009f57607f821691505b6020821081036100bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610111576000816000526020600020601f850160051c810160208610156100ee5750805b601f850160051c820191505b8181101561010d578281556001016100fa565b5050505b505050565b81516001600160401b0381111561012f5761012f610075565b6101438161013d845461008b565b846100c5565b602080601f83116001811461017857600084156101605750858301515b600019600386901b1c1916600185901b17855561010d565b600085815260208120601f198616915b828110156101a757888601518255948401946001909101908401610188565b50858210156101c55787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6108ad806101e46000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101fa578063d0e30db01461021a578063dd62ed3e1461022257600080fd5b8063313ce5671461018c57806370a08231146101b857806395d89b41146101e557600080fd5b806318160ddd116100a557806318160ddd1461012f57806323b872dd1461014c5780632e1a7d4d1461016c57600080fd5b806306fdde03146100d4578063095ea7b3146100ff57600080fd5b366100cf576100cd61025a565b005b600080fd5b3480156100e057600080fd5b506100e96102b5565b6040516100f69190610695565b60405180910390f35b34801561010b57600080fd5b5061011f61011a36600461072b565b610343565b60405190151581526020016100f6565b34801561013b57600080fd5b50475b6040519081526020016100f6565b34801561015857600080fd5b5061011f610167366004610755565b6103bd565b34801561017857600080fd5b506100cd610187366004610791565b6105c4565b34801561019857600080fd5b506002546101a69060ff1681565b60405160ff90911681526020016100f6565b3480156101c457600080fd5b5061013e6101d33660046107aa565b60036020526000908152604090205481565b3480156101f157600080fd5b506100e961066a565b34801561020657600080fd5b5061011f61021536600461072b565b610677565b6100cd61068b565b34801561022e57600080fd5b5061013e61023d3660046107c5565b600460209081526000928352604080842090915290825290205481565b3360009081526003602052604081208054349290610279908490610827565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b600080546102c29061083a565b80601f01602080910402602001604051908101604052809291908181526020018280546102ee9061083a565b801561033b5780601f106103105761010080835404028352916020019161033b565b820191906000526020600020905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b33600081815260046020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103ab9086815260200190565b60405180910390a35060015b92915050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120548211156103ef57600080fd5b73ffffffffffffffffffffffffffffffffffffffff84163314801590610455575073ffffffffffffffffffffffffffffffffffffffff841660009081526004602090815260408083203384529091529020546fffffffffffffffffffffffffffffffff14155b156104dd5773ffffffffffffffffffffffffffffffffffffffff8416600090815260046020908152604080832033845290915290205482111561049757600080fd5b73ffffffffffffffffffffffffffffffffffffffff84166000908152600460209081526040808320338452909152812080548492906104d790849061088d565b90915550505b73ffffffffffffffffffffffffffffffffffffffff84166000908152600360205260408120805484929061051290849061088d565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805484929061054c908490610827565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105b291815260200190565b60405180910390a35060019392505050565b336000908152600360205260409020548111156105e057600080fd5b33600090815260036020526040812080548392906105ff90849061088d565b9091555050604051339082156108fc029083906000818181858888f19350505050158015610631573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b600180546102c29061083a565b60006106843384846103bd565b9392505050565b61069361025a565b565b60006020808352835180602085015260005b818110156106c3578581018301518582016040015282016106a7565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461072657600080fd5b919050565b6000806040838503121561073e57600080fd5b61074783610702565b946020939093013593505050565b60008060006060848603121561076a57600080fd5b61077384610702565b925061078160208501610702565b9150604084013590509250925092565b6000602082840312156107a357600080fd5b5035919050565b6000602082840312156107bc57600080fd5b61068482610702565b600080604083850312156107d857600080fd5b6107e183610702565b91506107ef60208401610702565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156103b7576103b76107f8565b600181811c9082168061084e57607f821691505b602082108103610887577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b818103818111156103b7576103b76107f856fea164736f6c6343000818000a", +} + +var WETH9ABI = WETH9MetaData.ABI + +var WETH9Bin = WETH9MetaData.Bin + +func DeployWETH9(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *WETH9, error) { + parsed, err := WETH9MetaData.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(WETH9Bin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &WETH9{address: address, abi: *parsed, WETH9Caller: WETH9Caller{contract: contract}, WETH9Transactor: WETH9Transactor{contract: contract}, WETH9Filterer: WETH9Filterer{contract: contract}}, nil +} + +type WETH9 struct { + address common.Address + abi abi.ABI + WETH9Caller + WETH9Transactor + WETH9Filterer +} + +type WETH9Caller struct { + contract *bind.BoundContract +} + +type WETH9Transactor struct { + contract *bind.BoundContract +} + +type WETH9Filterer struct { + contract *bind.BoundContract +} + +type WETH9Session struct { + Contract *WETH9 + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type WETH9CallerSession struct { + Contract *WETH9Caller + CallOpts bind.CallOpts +} + +type WETH9TransactorSession struct { + Contract *WETH9Transactor + TransactOpts bind.TransactOpts +} + +type WETH9Raw struct { + Contract *WETH9 +} + +type WETH9CallerRaw struct { + Contract *WETH9Caller +} + +type WETH9TransactorRaw struct { + Contract *WETH9Transactor +} + +func NewWETH9(address common.Address, backend bind.ContractBackend) (*WETH9, error) { + abi, err := abi.JSON(strings.NewReader(WETH9ABI)) + if err != nil { + return nil, err + } + contract, err := bindWETH9(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &WETH9{address: address, abi: abi, WETH9Caller: WETH9Caller{contract: contract}, WETH9Transactor: WETH9Transactor{contract: contract}, WETH9Filterer: WETH9Filterer{contract: contract}}, nil +} + +func NewWETH9Caller(address common.Address, caller bind.ContractCaller) (*WETH9Caller, error) { + contract, err := bindWETH9(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &WETH9Caller{contract: contract}, nil +} + +func NewWETH9Transactor(address common.Address, transactor bind.ContractTransactor) (*WETH9Transactor, error) { + contract, err := bindWETH9(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &WETH9Transactor{contract: contract}, nil +} + +func NewWETH9Filterer(address common.Address, filterer bind.ContractFilterer) (*WETH9Filterer, error) { + contract, err := bindWETH9(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &WETH9Filterer{contract: contract}, nil +} + +func bindWETH9(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := WETH9MetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_WETH9 *WETH9Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _WETH9.Contract.WETH9Caller.contract.Call(opts, result, method, params...) +} + +func (_WETH9 *WETH9Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WETH9.Contract.WETH9Transactor.contract.Transfer(opts) +} + +func (_WETH9 *WETH9Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _WETH9.Contract.WETH9Transactor.contract.Transact(opts, method, params...) +} + +func (_WETH9 *WETH9CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _WETH9.Contract.contract.Call(opts, result, method, params...) +} + +func (_WETH9 *WETH9TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WETH9.Contract.contract.Transfer(opts) +} + +func (_WETH9 *WETH9TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _WETH9.Contract.contract.Transact(opts, method, params...) +} + +func (_WETH9 *WETH9Caller) Allowance(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { + var out []interface{} + err := _WETH9.contract.Call(opts, &out, "allowance", arg0, arg1) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_WETH9 *WETH9Session) Allowance(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _WETH9.Contract.Allowance(&_WETH9.CallOpts, arg0, arg1) +} + +func (_WETH9 *WETH9CallerSession) Allowance(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _WETH9.Contract.Allowance(&_WETH9.CallOpts, arg0, arg1) +} + +func (_WETH9 *WETH9Caller) BalanceOf(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var out []interface{} + err := _WETH9.contract.Call(opts, &out, "balanceOf", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_WETH9 *WETH9Session) BalanceOf(arg0 common.Address) (*big.Int, error) { + return _WETH9.Contract.BalanceOf(&_WETH9.CallOpts, arg0) +} + +func (_WETH9 *WETH9CallerSession) BalanceOf(arg0 common.Address) (*big.Int, error) { + return _WETH9.Contract.BalanceOf(&_WETH9.CallOpts, arg0) +} + +func (_WETH9 *WETH9Caller) Decimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _WETH9.contract.Call(opts, &out, "decimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +func (_WETH9 *WETH9Session) Decimals() (uint8, error) { + return _WETH9.Contract.Decimals(&_WETH9.CallOpts) +} + +func (_WETH9 *WETH9CallerSession) Decimals() (uint8, error) { + return _WETH9.Contract.Decimals(&_WETH9.CallOpts) +} + +func (_WETH9 *WETH9Caller) Name(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _WETH9.contract.Call(opts, &out, "name") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_WETH9 *WETH9Session) Name() (string, error) { + return _WETH9.Contract.Name(&_WETH9.CallOpts) +} + +func (_WETH9 *WETH9CallerSession) Name() (string, error) { + return _WETH9.Contract.Name(&_WETH9.CallOpts) +} + +func (_WETH9 *WETH9Caller) Symbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _WETH9.contract.Call(opts, &out, "symbol") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_WETH9 *WETH9Session) Symbol() (string, error) { + return _WETH9.Contract.Symbol(&_WETH9.CallOpts) +} + +func (_WETH9 *WETH9CallerSession) Symbol() (string, error) { + return _WETH9.Contract.Symbol(&_WETH9.CallOpts) +} + +func (_WETH9 *WETH9Caller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _WETH9.contract.Call(opts, &out, "totalSupply") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_WETH9 *WETH9Session) TotalSupply() (*big.Int, error) { + return _WETH9.Contract.TotalSupply(&_WETH9.CallOpts) +} + +func (_WETH9 *WETH9CallerSession) TotalSupply() (*big.Int, error) { + return _WETH9.Contract.TotalSupply(&_WETH9.CallOpts) +} + +func (_WETH9 *WETH9Transactor) Approve(opts *bind.TransactOpts, guy common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH9.contract.Transact(opts, "approve", guy, wad) +} + +func (_WETH9 *WETH9Session) Approve(guy common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH9.Contract.Approve(&_WETH9.TransactOpts, guy, wad) +} + +func (_WETH9 *WETH9TransactorSession) Approve(guy common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH9.Contract.Approve(&_WETH9.TransactOpts, guy, wad) +} + +func (_WETH9 *WETH9Transactor) Deposit(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WETH9.contract.Transact(opts, "deposit") +} + +func (_WETH9 *WETH9Session) Deposit() (*types.Transaction, error) { + return _WETH9.Contract.Deposit(&_WETH9.TransactOpts) +} + +func (_WETH9 *WETH9TransactorSession) Deposit() (*types.Transaction, error) { + return _WETH9.Contract.Deposit(&_WETH9.TransactOpts) +} + +func (_WETH9 *WETH9Transactor) Transfer(opts *bind.TransactOpts, dst common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH9.contract.Transact(opts, "transfer", dst, wad) +} + +func (_WETH9 *WETH9Session) Transfer(dst common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH9.Contract.Transfer(&_WETH9.TransactOpts, dst, wad) +} + +func (_WETH9 *WETH9TransactorSession) Transfer(dst common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH9.Contract.Transfer(&_WETH9.TransactOpts, dst, wad) +} + +func (_WETH9 *WETH9Transactor) TransferFrom(opts *bind.TransactOpts, src common.Address, dst common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH9.contract.Transact(opts, "transferFrom", src, dst, wad) +} + +func (_WETH9 *WETH9Session) TransferFrom(src common.Address, dst common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH9.Contract.TransferFrom(&_WETH9.TransactOpts, src, dst, wad) +} + +func (_WETH9 *WETH9TransactorSession) TransferFrom(src common.Address, dst common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH9.Contract.TransferFrom(&_WETH9.TransactOpts, src, dst, wad) +} + +func (_WETH9 *WETH9Transactor) Withdraw(opts *bind.TransactOpts, wad *big.Int) (*types.Transaction, error) { + return _WETH9.contract.Transact(opts, "withdraw", wad) +} + +func (_WETH9 *WETH9Session) Withdraw(wad *big.Int) (*types.Transaction, error) { + return _WETH9.Contract.Withdraw(&_WETH9.TransactOpts, wad) +} + +func (_WETH9 *WETH9TransactorSession) Withdraw(wad *big.Int) (*types.Transaction, error) { + return _WETH9.Contract.Withdraw(&_WETH9.TransactOpts, wad) +} + +func (_WETH9 *WETH9Transactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WETH9.contract.RawTransact(opts, nil) +} + +func (_WETH9 *WETH9Session) Receive() (*types.Transaction, error) { + return _WETH9.Contract.Receive(&_WETH9.TransactOpts) +} + +func (_WETH9 *WETH9TransactorSession) Receive() (*types.Transaction, error) { + return _WETH9.Contract.Receive(&_WETH9.TransactOpts) +} + +type WETH9ApprovalIterator struct { + Event *WETH9Approval + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *WETH9ApprovalIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(WETH9Approval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(WETH9Approval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *WETH9ApprovalIterator) Error() error { + return it.fail +} + +func (it *WETH9ApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type WETH9Approval struct { + Src common.Address + Guy common.Address + Wad *big.Int + Raw types.Log +} + +func (_WETH9 *WETH9Filterer) FilterApproval(opts *bind.FilterOpts, src []common.Address, guy []common.Address) (*WETH9ApprovalIterator, error) { + + var srcRule []interface{} + for _, srcItem := range src { + srcRule = append(srcRule, srcItem) + } + var guyRule []interface{} + for _, guyItem := range guy { + guyRule = append(guyRule, guyItem) + } + + logs, sub, err := _WETH9.contract.FilterLogs(opts, "Approval", srcRule, guyRule) + if err != nil { + return nil, err + } + return &WETH9ApprovalIterator{contract: _WETH9.contract, event: "Approval", logs: logs, sub: sub}, nil +} + +func (_WETH9 *WETH9Filterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *WETH9Approval, src []common.Address, guy []common.Address) (event.Subscription, error) { + + var srcRule []interface{} + for _, srcItem := range src { + srcRule = append(srcRule, srcItem) + } + var guyRule []interface{} + for _, guyItem := range guy { + guyRule = append(guyRule, guyItem) + } + + logs, sub, err := _WETH9.contract.WatchLogs(opts, "Approval", srcRule, guyRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(WETH9Approval) + if err := _WETH9.contract.UnpackLog(event, "Approval", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_WETH9 *WETH9Filterer) ParseApproval(log types.Log) (*WETH9Approval, error) { + event := new(WETH9Approval) + if err := _WETH9.contract.UnpackLog(event, "Approval", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type WETH9DepositIterator struct { + Event *WETH9Deposit + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *WETH9DepositIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(WETH9Deposit) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(WETH9Deposit) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *WETH9DepositIterator) Error() error { + return it.fail +} + +func (it *WETH9DepositIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type WETH9Deposit struct { + Dst common.Address + Wad *big.Int + Raw types.Log +} + +func (_WETH9 *WETH9Filterer) FilterDeposit(opts *bind.FilterOpts, dst []common.Address) (*WETH9DepositIterator, error) { + + var dstRule []interface{} + for _, dstItem := range dst { + dstRule = append(dstRule, dstItem) + } + + logs, sub, err := _WETH9.contract.FilterLogs(opts, "Deposit", dstRule) + if err != nil { + return nil, err + } + return &WETH9DepositIterator{contract: _WETH9.contract, event: "Deposit", logs: logs, sub: sub}, nil +} + +func (_WETH9 *WETH9Filterer) WatchDeposit(opts *bind.WatchOpts, sink chan<- *WETH9Deposit, dst []common.Address) (event.Subscription, error) { + + var dstRule []interface{} + for _, dstItem := range dst { + dstRule = append(dstRule, dstItem) + } + + logs, sub, err := _WETH9.contract.WatchLogs(opts, "Deposit", dstRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(WETH9Deposit) + if err := _WETH9.contract.UnpackLog(event, "Deposit", 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 +} + +func (_WETH9 *WETH9Filterer) ParseDeposit(log types.Log) (*WETH9Deposit, error) { + event := new(WETH9Deposit) + if err := _WETH9.contract.UnpackLog(event, "Deposit", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type WETH9TransferIterator struct { + Event *WETH9Transfer + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *WETH9TransferIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(WETH9Transfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(WETH9Transfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *WETH9TransferIterator) Error() error { + return it.fail +} + +func (it *WETH9TransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type WETH9Transfer struct { + Src common.Address + Dst common.Address + Wad *big.Int + Raw types.Log +} + +func (_WETH9 *WETH9Filterer) FilterTransfer(opts *bind.FilterOpts, src []common.Address, dst []common.Address) (*WETH9TransferIterator, error) { + + var srcRule []interface{} + for _, srcItem := range src { + srcRule = append(srcRule, srcItem) + } + var dstRule []interface{} + for _, dstItem := range dst { + dstRule = append(dstRule, dstItem) + } + + logs, sub, err := _WETH9.contract.FilterLogs(opts, "Transfer", srcRule, dstRule) + if err != nil { + return nil, err + } + return &WETH9TransferIterator{contract: _WETH9.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +func (_WETH9 *WETH9Filterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *WETH9Transfer, src []common.Address, dst []common.Address) (event.Subscription, error) { + + var srcRule []interface{} + for _, srcItem := range src { + srcRule = append(srcRule, srcItem) + } + var dstRule []interface{} + for _, dstItem := range dst { + dstRule = append(dstRule, dstItem) + } + + logs, sub, err := _WETH9.contract.WatchLogs(opts, "Transfer", srcRule, dstRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(WETH9Transfer) + if err := _WETH9.contract.UnpackLog(event, "Transfer", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_WETH9 *WETH9Filterer) ParseTransfer(log types.Log) (*WETH9Transfer, error) { + event := new(WETH9Transfer) + if err := _WETH9.contract.UnpackLog(event, "Transfer", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type WETH9WithdrawalIterator struct { + Event *WETH9Withdrawal + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *WETH9WithdrawalIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(WETH9Withdrawal) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(WETH9Withdrawal) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *WETH9WithdrawalIterator) Error() error { + return it.fail +} + +func (it *WETH9WithdrawalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type WETH9Withdrawal struct { + Src common.Address + Wad *big.Int + Raw types.Log +} + +func (_WETH9 *WETH9Filterer) FilterWithdrawal(opts *bind.FilterOpts, src []common.Address) (*WETH9WithdrawalIterator, error) { + + var srcRule []interface{} + for _, srcItem := range src { + srcRule = append(srcRule, srcItem) + } + + logs, sub, err := _WETH9.contract.FilterLogs(opts, "Withdrawal", srcRule) + if err != nil { + return nil, err + } + return &WETH9WithdrawalIterator{contract: _WETH9.contract, event: "Withdrawal", logs: logs, sub: sub}, nil +} + +func (_WETH9 *WETH9Filterer) WatchWithdrawal(opts *bind.WatchOpts, sink chan<- *WETH9Withdrawal, src []common.Address) (event.Subscription, error) { + + var srcRule []interface{} + for _, srcItem := range src { + srcRule = append(srcRule, srcItem) + } + + logs, sub, err := _WETH9.contract.WatchLogs(opts, "Withdrawal", srcRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(WETH9Withdrawal) + if err := _WETH9.contract.UnpackLog(event, "Withdrawal", 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 +} + +func (_WETH9 *WETH9Filterer) ParseWithdrawal(log types.Log) (*WETH9Withdrawal, error) { + event := new(WETH9Withdrawal) + if err := _WETH9.contract.UnpackLog(event, "Withdrawal", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (_WETH9 *WETH9) ParseLog(log types.Log) (generated.AbigenLog, error) { + switch log.Topics[0] { + case _WETH9.abi.Events["Approval"].ID: + return _WETH9.ParseApproval(log) + case _WETH9.abi.Events["Deposit"].ID: + return _WETH9.ParseDeposit(log) + case _WETH9.abi.Events["Transfer"].ID: + return _WETH9.ParseTransfer(log) + case _WETH9.abi.Events["Withdrawal"].ID: + return _WETH9.ParseWithdrawal(log) + + default: + return nil, fmt.Errorf("abigen wrapper received unknown log topic: %v", log.Topics[0]) + } +} + +func (WETH9Approval) Topic() common.Hash { + return common.HexToHash("0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925") +} + +func (WETH9Deposit) Topic() common.Hash { + return common.HexToHash("0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c") +} + +func (WETH9Transfer) Topic() common.Hash { + return common.HexToHash("0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef") +} + +func (WETH9Withdrawal) Topic() common.Hash { + return common.HexToHash("0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65") +} + +func (_WETH9 *WETH9) Address() common.Address { + return _WETH9.address +} + +type WETH9Interface interface { + Allowance(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) + + BalanceOf(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) + + Decimals(opts *bind.CallOpts) (uint8, error) + + Name(opts *bind.CallOpts) (string, error) + + Symbol(opts *bind.CallOpts) (string, error) + + TotalSupply(opts *bind.CallOpts) (*big.Int, error) + + Approve(opts *bind.TransactOpts, guy common.Address, wad *big.Int) (*types.Transaction, error) + + Deposit(opts *bind.TransactOpts) (*types.Transaction, error) + + Transfer(opts *bind.TransactOpts, dst common.Address, wad *big.Int) (*types.Transaction, error) + + TransferFrom(opts *bind.TransactOpts, src common.Address, dst common.Address, wad *big.Int) (*types.Transaction, error) + + Withdraw(opts *bind.TransactOpts, wad *big.Int) (*types.Transaction, error) + + Receive(opts *bind.TransactOpts) (*types.Transaction, error) + + FilterApproval(opts *bind.FilterOpts, src []common.Address, guy []common.Address) (*WETH9ApprovalIterator, error) + + WatchApproval(opts *bind.WatchOpts, sink chan<- *WETH9Approval, src []common.Address, guy []common.Address) (event.Subscription, error) + + ParseApproval(log types.Log) (*WETH9Approval, error) + + FilterDeposit(opts *bind.FilterOpts, dst []common.Address) (*WETH9DepositIterator, error) + + WatchDeposit(opts *bind.WatchOpts, sink chan<- *WETH9Deposit, dst []common.Address) (event.Subscription, error) + + ParseDeposit(log types.Log) (*WETH9Deposit, error) + + FilterTransfer(opts *bind.FilterOpts, src []common.Address, dst []common.Address) (*WETH9TransferIterator, error) + + WatchTransfer(opts *bind.WatchOpts, sink chan<- *WETH9Transfer, src []common.Address, dst []common.Address) (event.Subscription, error) + + ParseTransfer(log types.Log) (*WETH9Transfer, error) + + FilterWithdrawal(opts *bind.FilterOpts, src []common.Address) (*WETH9WithdrawalIterator, error) + + WatchWithdrawal(opts *bind.WatchOpts, sink chan<- *WETH9Withdrawal, src []common.Address) (event.Subscription, error) + + ParseWithdrawal(log types.Log) (*WETH9Withdrawal, error) + + ParseLog(log types.Log) (generated.AbigenLog, error) + + Address() common.Address +} diff --git a/core/gethwrappers/ccip/generation/generate_zks/wrap.go b/core/gethwrappers/ccip/generation/generate_zks/wrap.go new file mode 100644 index 00000000000..55ba85a9bf7 --- /dev/null +++ b/core/gethwrappers/ccip/generation/generate_zks/wrap.go @@ -0,0 +1,49 @@ +package main + +import ( + "fmt" + "os" + "path/filepath" + + gethParams "github.com/ethereum/go-ethereum/params" + + gethwrappers2 "github.com/smartcontractkit/chainlink/v2/core/gethwrappers" +) + +func main() { + abiPath := os.Args[1] + binPath := os.Args[2] + className := os.Args[3] + pkgName := os.Args[4] + zkBinPath := os.Args[5] + fmt.Println("Generating", pkgName, "contract wrapper") + + cwd, err := os.Getwd() // gethwrappers directory + if err != nil { + gethwrappers2.Exit("could not get working directory", err) + } + outDir := filepath.Join(cwd, "generated_zks", pkgName) + if mkdErr := os.MkdirAll(outDir, 0700); err != nil { + gethwrappers2.Exit("failed to create wrapper dir", mkdErr) + } + outPath := filepath.Join(outDir, pkgName+".go") + + gethwrappers2.Abigen(gethwrappers2.AbigenArgs{ + Bin: binPath, ABI: abiPath, Out: outPath, Type: className, Pkg: pkgName, ZkBinPath: zkBinPath, + }) + + // Build succeeded, so update the versions db with the new contract data + versions, err := gethwrappers2.ReadVersionsDB() + if err != nil { + gethwrappers2.Exit("could not read current versions database", err) + } + versions.GethVersion = gethParams.Version + versions.ContractVersions[pkgName] = gethwrappers2.ContractVersion{ + Hash: gethwrappers2.VersionHash(abiPath, binPath), + AbiPath: abiPath, + BinaryPath: binPath, + } + if err := gethwrappers2.WriteVersionsDB(versions); err != nil { + gethwrappers2.Exit("could not save versions db", err) + } +} diff --git a/core/gethwrappers/ccip/go_generate_zks.go b/core/gethwrappers/ccip/go_generate_zks.go new file mode 100644 index 00000000000..877008958dc --- /dev/null +++ b/core/gethwrappers/ccip/go_generate_zks.go @@ -0,0 +1,76 @@ +// Package gethwrappers_ccip provides tools for wrapping solidity contracts with +// golang packages, using abigen. +package ccip + +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/ARMProxy/ARMProxy.abi ../../../contracts/solc/v0.8.24/ARMProxy/ARMProxy.bin RMNProxyContract rmn_proxy_contract ../../../contracts/zksolc/v1.5.6/ARMProxy/ARMProxy.sol/ARMProxy.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/TokenAdminRegistry/TokenAdminRegistry.abi ../../../contracts/solc/v0.8.24/TokenAdminRegistry/TokenAdminRegistry.bin TokenAdminRegistry token_admin_registry ../../../contracts/zksolc/v1.5.6/TokenAdminRegistry/TokenAdminRegistry.sol/TokenAdminRegistry.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.abi ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.bin RegistryModuleOwnerCustom registry_module_owner_custom ../../../contracts/zksolc/v1.5.6/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.sol/RegistryModuleOwnerCustom.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin OnRamp onramp ../../../contracts/zksolc/v1.5.6/OnRamp/OnRamp.sol/OnRamp.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin OffRamp offramp ../../../contracts/zksolc/v1.5.6/OffRamp/OffRamp.sol/OffRamp.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/RMNRemote/RMNRemote.abi ../../../contracts/solc/v0.8.24/RMNRemote/RMNRemote.bin RMNRemote rmn_remote ../../../contracts/zksolc/v1.5.6/RMNRemote/RMNRemote.sol/RMNRemote.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/RMNHome/RMNHome.abi ../../../contracts/solc/v0.8.24/RMNHome/RMNHome.bin RMNHome rmn_home ../../../contracts/zksolc/v1.5.6/RMNHome/RMNHome.sol/RMNHome.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.abi ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.bin MultiAggregateRateLimiter multi_aggregate_rate_limiter ../../../contracts/zksolc/v1.5.6/MultiAggregateRateLimiter/MultiAggregateRateLimiter.sol/MultiAggregateRateLimiter.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/Router/Router.abi ../../../contracts/solc/v0.8.24/Router/Router.bin Router router ../../../contracts/zksolc/v1.5.6/Router/Router.sol/Router.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/FeeQuoter/FeeQuoter.abi ../../../contracts/solc/v0.8.24/FeeQuoter/FeeQuoter.bin FeeQuoter fee_quoter ../../../contracts/zksolc/v1.5.6/FeeQuoter/FeeQuoter.sol/FeeQuoter.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/CCIPHome/CCIPHome.abi ../../../contracts/solc/v0.8.24/CCIPHome/CCIPHome.bin CCIPHome ccip_home ../../../contracts/zksolc/v1.5.6/CCIPHome/CCIPHome.sol/CCIPHome.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.abi ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.bin NonceManager nonce_manager ../../../contracts/zksolc/v1.5.6/NonceManager/NonceManager.sol/NonceManager.zbin + +// Pools +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/BurnMintTokenPool/BurnMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnMintTokenPool/BurnMintTokenPool.bin BurnMintTokenPool burn_mint_token_pool ../../../contracts/zksolc/v1.5.6/BurnMintTokenPool/BurnMintTokenPool.sol/BurnMintTokenPool.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/BurnFromMintTokenPool/BurnFromMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnFromMintTokenPool/BurnFromMintTokenPool.bin BurnFromMintTokenPool burn_from_mint_token_pool ../../../contracts/zksolc/v1.5.6/BurnFromMintTokenPool/BurnFromMintTokenPool.sol/BurnFromMintTokenPool.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.bin BurnWithFromMintTokenPool burn_with_from_mint_token_pool ../../../contracts/zksolc/v1.5.6/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.sol/BurnWithFromMintTokenPool.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/LockReleaseTokenPool/LockReleaseTokenPool.abi ../../../contracts/solc/v0.8.24/LockReleaseTokenPool/LockReleaseTokenPool.bin LockReleaseTokenPool lock_release_token_pool ../../../contracts/zksolc/v1.5.6/LockReleaseTokenPool/LockReleaseTokenPool.sol/LockReleaseTokenPool.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/TokenPool/TokenPool.abi ../../../contracts/solc/v0.8.24/TokenPool/TokenPool.bin TokenPool token_pool ../../../contracts/zksolc/v1.5.6/TokenPool/Pool.sol/Pool.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/USDCTokenPool/USDCTokenPool.abi ../../../contracts/solc/v0.8.24/USDCTokenPool/USDCTokenPool.bin USDCTokenPool usdc_token_pool ../../../contracts/zksolc/v1.5.6/USDCTokenPool/USDCTokenPool.sol/USDCTokenPool.zbin + +// Helpers +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/MockV3Aggregator/MockV3Aggregator.abi ../../../contracts/solc/v0.8.24/MockV3Aggregator/MockV3Aggregator.bin MockV3Aggregator mock_v3_aggregator_contract ../../../contracts/zksolc/v1.5.6/MockV3Aggregator/MockV3Aggregator.sol/MockV3Aggregator.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.abi ../../../contracts/solc/v0.8.24/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.bin MaybeRevertMessageReceiver maybe_revert_message_receiver ../../../contracts/zksolc/v1.5.6/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.sol/MaybeRevertMessageReceiver.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin PingPongDemo ping_pong_demo ../../../contracts/zksolc/v1.5.6/PingPongDemo/PingPongDemo.sol/PingPongDemo.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/MessageHasher/MessageHasher.abi ../../../contracts/solc/v0.8.24/MessageHasher/MessageHasher.bin MessageHasher message_hasher ../../../contracts/zksolc/v1.5.6/MessageHasher/MessageHasher.sol/MessageHasher.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.abi ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.bin MultiOCR3Helper multi_ocr3_helper ../../../contracts/zksolc/v1.5.6/MultiOCR3Helper/MultiOCR3Helper.sol/MultiOCR3Helper.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/USDCReaderTester/USDCReaderTester.abi ../../../contracts/solc/v0.8.24/USDCReaderTester/USDCReaderTester.bin USDCReaderTester usdc_reader_tester ../../../contracts/zksolc/v1.5.6/USDCReaderTester/USDCReaderTester.sol/USDCReaderTester.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.abi ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.bin ReportCodec report_codec ../../../contracts/zksolc/v1.5.6/ReportCodec/ReportCodec.sol/ReportCodec.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.abi ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.bin EtherSenderReceiver ether_sender_receiver ../../../contracts/zksolc/v1.5.6/EtherSenderReceiver/EtherSenderReceiver.sol/EtherSenderReceiver.zbin +// //go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/WETH9/WETH9.abi ../../../contracts/solc/v0.8.24/WETH9/WETH9.bin WETH9 weth9 ../../../contracts/zksolc/v1.5.6/WETH9/WETH9.sol/WETH9.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/MockE2EUSDCTokenMessenger/MockE2EUSDCTokenMessenger.abi ../../../contracts/solc/v0.8.24/MockE2EUSDCTokenMessenger/MockE2EUSDCTokenMessenger.bin MockE2EUSDCTokenMessenger mock_usdc_token_messenger ../../../contracts/zksolc/v1.5.6/MockE2EUSDCTokenMessenger/MockE2EUSDCTokenMessenger.sol/MockE2EUSDCTokenMessenger.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/MockE2EUSDCTransmitter/MockE2EUSDCTransmitter.abi ../../../contracts/solc/v0.8.24/MockE2EUSDCTransmitter/MockE2EUSDCTransmitter.bin MockE2EUSDCTransmitter mock_usdc_token_transmitter ../../../contracts/zksolc/v1.5.6/MockE2EUSDCTransmitter/MockE2EUSDCTransmitter.sol/MockE2EUSDCTransmitter.zbin +//go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.abi ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.bin CCIPReaderTester ccip_reader_tester ../../../contracts/zksolc/v1.5.6/CCIPReaderTester/CCIPReaderTester.sol/CCIPReaderTester.zbin + +// EncodingUtils +// //go:generate go run ./generation/generate_zks/wrap.go ../../../contracts/solc/v0.8.24/ICCIPEncodingUtils/ICCIPEncodingUtils.abi ../../../contracts/solc/v0.8.24/ICCIPEncodingUtils/ICCIPEncodingUtils.bin EncodingUtils ccip_encoding_utils ../../../contracts/zksolc/v1.5.6/ICCIPEncodingUtils/ICCIPEncodingUtils.sol/ICCIPEncodingUtils.zbin + +// To run these commands, you must either install docker, or the correct version +// of abigen. The latter can be installed with these commands, at least on linux: +// +// git clone https://github.com/ethereum/go-ethereum +// cd go-ethereum/cmd/abigen +// git checkout v +// go install +// +// Here, is the version of go-ethereum specified in chainlink's +// go.mod. This will install abigen in "$GOPATH/bin", which you should add to +// your $PATH. +// +// To reduce explicit dependencies, and in case the system does not have the +// correct version of abigen installed , the above commands spin up docker +// containers. In my hands, total running time including compilation is about +// 13s. If you're modifying solidity code and testing against go code a lot, it +// might be worthwhile to generate the the wrappers using a static container +// with abigen and solc, which will complete much faster. E.g. +// +// abigen -sol ../../contracts/src/v0.6/VRFAll.sol -pkg vrf -out solidity_interfaces.go +// +// where VRFAll.sol simply contains `import "contract_path";` instructions for +// all the contracts you wish to target. This runs in about 0.25 seconds in my +// hands. +// +// If you're on linux, you can copy the correct version of solc out of the +// appropriate docker container. At least, the following works on ubuntu: +// +// $ docker run --name solc ethereum/solc:0.6.2 +// $ sudo docker cp solc:/usr/bin/solc /usr/bin +// $ docker rm solc +// +// If you need to point abigen at your solc executable, you can specify the path +// with the abigen --solc option. diff --git a/go.mod b/go.mod index 63e11a3f3fe..bd8688dcd7d 100644 --- a/go.mod +++ b/go.mod @@ -101,6 +101,7 @@ require ( github.com/unrolled/secure v1.13.0 github.com/urfave/cli v1.22.14 github.com/wk8/go-ordered-map/v2 v2.1.8 + github.com/zksync-sdk/zksync2-go v1.0.0 go.dedis.ch/fixbuf v1.0.3 go.dedis.ch/kyber/v3 v3.1.0 go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin v0.49.0 @@ -156,6 +157,9 @@ require ( github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect github.com/bits-and-blooms/bitset v1.13.0 // indirect github.com/blendle/zapdriver v1.3.1 // indirect + github.com/btcsuite/btcd v0.24.0 // indirect + github.com/btcsuite/btcd/btcutil v1.1.5 // indirect + github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect github.com/buger/jsonparser v1.1.1 // indirect github.com/bytecodealliance/wasmtime-go/v23 v23.0.0 // indirect github.com/bytedance/sonic v1.10.1 // indirect @@ -323,6 +327,7 @@ require ( github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.19.0 // indirect github.com/status-im/keycard-go v0.2.0 // indirect + github.com/stephenlacy/go-ethereum-hdwallet v0.0.0-20230913225845-a4fa94429863 // indirect github.com/streamingfast/logging v0.0.0-20220405224725-2755dab2ce75 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/subosito/gotenv v1.6.0 // indirect diff --git a/go.sum b/go.sum index bb0201fd3c9..79bdb0361e8 100644 --- a/go.sum +++ b/go.sum @@ -133,6 +133,7 @@ github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrd github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/XSAM/otelsql v0.27.0 h1:i9xtxtdcqXV768a5C6SoT/RkG+ue3JTOgkYInzlTOqs= github.com/XSAM/otelsql v0.27.0/go.mod h1:0mFB3TvLa7NCuhm/2nU7/b2wEtsczkj8Rey8ygO7V+A= +github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -183,7 +184,11 @@ github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJm github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/blendle/zapdriver v1.3.1 h1:C3dydBOWYRiOk+B8X9IVZ5IOe+7cl+tGOexN4QqHfpE= github.com/blendle/zapdriver v1.3.1/go.mod h1:mdXfREi6u5MArG4j9fewC+FGnXaBR+T4Ox4J2u4eHCc= -github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c= +github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= +github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M= +github.com/btcsuite/btcd v0.23.5-0.20231215221805-96c9fd8078fd/go.mod h1:nm3Bko6zh6bWP60UxwoT5LzdGJsQJaPo6HjduXq9p6A= +github.com/btcsuite/btcd v0.24.0 h1:gL3uHE/IaFj6fcZSu03SvqPMSx7s/dPzfpG/atRwWdo= +github.com/btcsuite/btcd v0.24.0/go.mod h1:K4IDc1593s8jKXIF7yS7yCTSxrknB9z0STzc2j6XgE4= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.5 h1:+wER79R5670vs/ZusMTF1yTcRYE5GUsFbdjdisflzM8= @@ -319,16 +324,20 @@ github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnG github.com/danielkov/gin-helmet v0.0.0-20171108135313-1387e224435e h1:5jVSh2l/ho6ajWhSPNN84eHEdq3dp0T7+f6r3Tc6hsk= github.com/danielkov/gin-helmet v0.0.0-20171108135313-1387e224435e/go.mod h1:IJgIiGUARc4aOr4bOQ85klmjsShkEEfiRc6q/yBSfo8= github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/deckarep/golang-set/v2 v2.6.0 h1:XfcQbWM1LlMB8BsJ8N9vW5ehnnPVIw0je80NsVHagjM= github.com/deckarep/golang-set/v2 v2.6.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= +github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= github.com/dfuse-io/logging v0.0.0-20201110202154-26697de88c79/go.mod h1:V+ED4kT/t/lKtH99JQmKIb0v9WL3VaYkJ36CfHlVECI= @@ -620,6 +629,7 @@ github.com/gorilla/securecookie v1.1.2/go.mod h1:NfCASbcHqRSY+3a8tlWJwsQap2VX5pw github.com/gorilla/sessions v1.2.2 h1:lqzMYz6bOfvn2WriPUjNByzeXIlVzURcPmgMczkmTjY= github.com/gorilla/sessions v1.2.2/go.mod h1:ePLdVu+jbEgHH+KWw8I1z2wqd0BAdAQh/8LRvBeoNcQ= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= github.com/grafana/pyroscope-go v1.1.2 h1:7vCfdORYQMCxIzI3NlYAs3FcBP760+gWuYWOyiVyYx8= @@ -785,6 +795,7 @@ github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0f github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= @@ -803,6 +814,7 @@ github.com/jonboulle/clockwork v0.4.0/go.mod h1:xgRqUGwRcjKCO1vbZUEtSLrqKoPSsUpK github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -814,6 +826,7 @@ github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfV github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= @@ -963,7 +976,9 @@ github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= @@ -980,15 +995,8 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= -github.com/opencontainers/runc v1.1.10 h1:EaL5WeO9lv9wmS6SASjszOeQdSctvpbu0DdBQBizE40= -github.com/opencontainers/runc v1.1.10/go.mod h1:+/R6+KmDlh+hOO8NkjmgkG9Qzvypzk0yXxAPYYR65+M= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= -github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= @@ -1185,6 +1193,8 @@ github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg= +github.com/stephenlacy/go-ethereum-hdwallet v0.0.0-20230913225845-a4fa94429863 h1:ba4VRWSkRzgdP5hB5OxexIzBXZbSwgcw8bEu06ivGQI= +github.com/stephenlacy/go-ethereum-hdwallet v0.0.0-20230913225845-a4fa94429863/go.mod h1:oPTjPNrRucLv9mU27iNPj6n0CWWcNFhoXFOLVGJwHCA= github.com/streamingfast/logging v0.0.0-20220405224725-2755dab2ce75 h1:ZqpS7rAhhKD7S7DnrpEdrnW1/gZcv82ytpMviovkli4= github.com/streamingfast/logging v0.0.0-20220405224725-2755dab2ce75/go.mod h1:VlduQ80JcGJSargkRU4Sg9Xo63wZD/l8A5NC/Uo1/uU= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -1213,6 +1223,7 @@ github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8 github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/supranational/blst v0.3.13 h1:AYeSxdOMacwu7FBmpfloBz5pbFXDmJL33RuwnKtmTjk= github.com/supranational/blst v0.3.13/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= @@ -1290,6 +1301,8 @@ github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5t github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= +github.com/zksync-sdk/zksync2-go v1.0.0 h1:DTFnNCr8ZUfpMWQ0V8CAvn9kTSF0svNRfqSsDRzOMUg= +github.com/zksync-sdk/zksync2-go v1.0.0/go.mod h1:AwxRw2lrtrcoYbl0LytVASNE/Vwz1wZ3WZ3X8rjLn3o= github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw= @@ -1403,6 +1416,7 @@ go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.11.0 h1:KXV8WWKCXm6tRpLirl2szsO5j/oOODwZf4hATmGVNs4= golang.org/x/arch v0.11.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= +golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1469,6 +1483,7 @@ golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1503,6 +1518,7 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= @@ -1596,8 +1612,10 @@ golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=