From b28de3353229e3b9f6d3918539e50f9f53ee5e7a Mon Sep 17 00:00:00 2001
From: Adam Hamrick
Date: Thu, 8 Feb 2024 12:46:31 -0500
Subject: [PATCH 01/11] [TT-771] Re-Enable BSC (#11900)
* Enable scroll sepolia
* Also bsc
* Only BSC
---
.github/workflows/live-testnet-tests.yml | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/.github/workflows/live-testnet-tests.yml b/.github/workflows/live-testnet-tests.yml
index 8b0bde099a5..1cba67696c5 100644
--- a/.github/workflows/live-testnet-tests.yml
+++ b/.github/workflows/live-testnet-tests.yml
@@ -117,7 +117,7 @@ jobs:
id-token: write
contents: read
runs-on: ubuntu-latest
- needs: [sepolia-smoke-tests, optimism-sepolia-smoke-tests, arbitrum-sepolia-smoke-tests, base-sepolia-smoke-tests, polygon-mumbai-smoke-tests, avalanche-fuji-smoke-tests, fantom-testnet-smoke-tests, celo-alfajores-smoke-tests, linea-goerli-smoke-tests]
+ needs: [sepolia-smoke-tests, optimism-sepolia-smoke-tests, arbitrum-sepolia-smoke-tests, base-sepolia-smoke-tests, polygon-mumbai-smoke-tests, avalanche-fuji-smoke-tests, fantom-testnet-smoke-tests, celo-alfajores-smoke-tests, linea-goerli-smoke-tests, bsc-testnet-smoke-tests]
steps:
- name: Debug Result
run: echo ${{ join(needs.*.result, ',') }}
@@ -178,7 +178,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- network: [Sepolia, Optimism Sepolia, Arbitrum Sepolia, Base Sepolia, Polygon Mumbai, Avalanche Fuji, Fantom Testnet, Celo Alfajores, Linea Goerli]
+ network: [Sepolia, Optimism Sepolia, Arbitrum Sepolia, Base Sepolia, Polygon Mumbai, Avalanche Fuji, Fantom Testnet, Celo Alfajores, Linea Goerli, BSC Testnet]
steps:
- name: Checkout the repo
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
@@ -270,9 +270,7 @@ jobs:
with:
test_directory: "./"
- bsc-testnet-tests:
- # TODO: BSC RPCs are all in a bad state right now, so we're skipping these tests until they're fixed
- if: false
+ bsc-testnet-smoke-tests:
environment: integration
permissions:
checks: write
@@ -841,7 +839,6 @@ jobs:
test_directory: "./"
scroll-sepolia-smoke-tests:
- # TODO: Disabled until bug TT-767 is fixed
if: false
environment: integration
permissions:
From d928a059dc93fb6266814c444e0f985d48f8e987 Mon Sep 17 00:00:00 2001
From: Lei
Date: Thu, 8 Feb 2024 10:15:31 -0800
Subject: [PATCH 02/11] onchainconfiglegacy for <= 2.1 and onchainconfig for
2.2 (#11965)
---
.../v2_2/IAutomationRegistryMaster.sol | 25 ++++++++--
.../dev/v2_2/AutomationRegistry2_2.sol | 2 +-
.../dev/v2_2/AutomationRegistryBase2_2.sol | 46 +++++++++++++++++-
.../dev/v2_2/AutomationRegistryLogicB2_2.sol | 15 ++++--
.../i_keeper_registry_master_wrapper_2_2.go | 48 +++++++++++++++++--
.../keeper_registry_logic_b_wrapper_2_2.go | 35 +++++++++++---
...rapper-dependency-versions-do-not-edit.txt | 4 +-
7 files changed, 154 insertions(+), 21 deletions(-)
diff --git a/contracts/src/v0.8/automation/dev/interfaces/v2_2/IAutomationRegistryMaster.sol b/contracts/src/v0.8/automation/dev/interfaces/v2_2/IAutomationRegistryMaster.sol
index c50a0d30199..5798a4cd2ba 100644
--- a/contracts/src/v0.8/automation/dev/interfaces/v2_2/IAutomationRegistryMaster.sol
+++ b/contracts/src/v0.8/automation/dev/interfaces/v2_2/IAutomationRegistryMaster.sol
@@ -1,4 +1,4 @@
-// abi-checksum: 0x497cc32eb52fa7077bfcee4be7559fefd8c2c821b5b946322b98fba8cc09808a
+// abi-checksum: 0x8c20867ddb05274d8f63e6760a8ba7c988280a535e63497917958948611c0765
// SPDX-License-Identifier: MIT
// !! THIS FILE WAS AUTOGENERATED BY abi-to-sol v0.6.6. SEE SOURCE BELOW. !!
pragma solidity ^0.8.4;
@@ -225,13 +225,14 @@ interface IAutomationRegistryMaster {
function getPeerRegistryMigrationPermission(address peer) external view returns (uint8);
function getPerPerformByteGasOverhead() external pure returns (uint256);
function getPerSignerGasOverhead() external pure returns (uint256);
+ function getReorgProtectionEnabled() external view returns (bool reorgProtectionEnabled);
function getSignerInfo(address query) external view returns (bool active, uint8 index);
function getState()
external
view
returns (
AutomationRegistryBase2_2.State memory state,
- AutomationRegistryBase2_2.OnchainConfig memory config,
+ AutomationRegistryBase2_2.OnchainConfigLegacy memory config,
address[] memory signers,
address[] memory transmitters,
uint8 f
@@ -298,6 +299,24 @@ interface AutomationRegistryBase2_2 {
bool paused;
}
+ struct OnchainConfigLegacy {
+ uint32 paymentPremiumPPB;
+ uint32 flatFeeMicroLink;
+ uint32 checkGasLimit;
+ uint24 stalenessSeconds;
+ uint16 gasCeilingMultiplier;
+ uint96 minUpkeepSpend;
+ uint32 maxPerformGas;
+ uint32 maxCheckDataSize;
+ uint32 maxPerformDataSize;
+ uint32 maxRevertDataSize;
+ uint256 fallbackGasPrice;
+ uint256 fallbackLinkPrice;
+ address transcoder;
+ address[] registrars;
+ address upkeepPrivilegeManager;
+ }
+
struct UpkeepInfo {
address target;
uint32 performGas;
@@ -314,5 +333,5 @@ interface AutomationRegistryBase2_2 {
// THIS FILE WAS AUTOGENERATED FROM THE FOLLOWING ABI JSON:
/*
-[{"inputs":[{"internalType":"contract AutomationRegistryLogicB2_2","name":"logicA","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ArrayHasNoEntries","type":"error"},{"inputs":[],"name":"CannotCancel","type":"error"},{"inputs":[],"name":"CheckDataExceedsLimit","type":"error"},{"inputs":[],"name":"ConfigDigestMismatch","type":"error"},{"inputs":[],"name":"DuplicateEntry","type":"error"},{"inputs":[],"name":"DuplicateSigners","type":"error"},{"inputs":[],"name":"GasLimitCanOnlyIncrease","type":"error"},{"inputs":[],"name":"GasLimitOutsideRange","type":"error"},{"inputs":[],"name":"IncorrectNumberOfFaultyOracles","type":"error"},{"inputs":[],"name":"IncorrectNumberOfSignatures","type":"error"},{"inputs":[],"name":"IncorrectNumberOfSigners","type":"error"},{"inputs":[],"name":"IndexOutOfRange","type":"error"},{"inputs":[],"name":"InsufficientFunds","type":"error"},{"inputs":[],"name":"InvalidDataLength","type":"error"},{"inputs":[],"name":"InvalidPayee","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidReport","type":"error"},{"inputs":[],"name":"InvalidSigner","type":"error"},{"inputs":[],"name":"InvalidTransmitter","type":"error"},{"inputs":[],"name":"InvalidTrigger","type":"error"},{"inputs":[],"name":"InvalidTriggerType","type":"error"},{"inputs":[],"name":"MaxCheckDataSizeCanOnlyIncrease","type":"error"},{"inputs":[],"name":"MaxPerformDataSizeCanOnlyIncrease","type":"error"},{"inputs":[],"name":"MigrationNotPermitted","type":"error"},{"inputs":[],"name":"NotAContract","type":"error"},{"inputs":[],"name":"OnlyActiveSigners","type":"error"},{"inputs":[],"name":"OnlyActiveTransmitters","type":"error"},{"inputs":[],"name":"OnlyCallableByAdmin","type":"error"},{"inputs":[],"name":"OnlyCallableByLINKToken","type":"error"},{"inputs":[],"name":"OnlyCallableByOwnerOrAdmin","type":"error"},{"inputs":[],"name":"OnlyCallableByOwnerOrRegistrar","type":"error"},{"inputs":[],"name":"OnlyCallableByPayee","type":"error"},{"inputs":[],"name":"OnlyCallableByProposedAdmin","type":"error"},{"inputs":[],"name":"OnlyCallableByProposedPayee","type":"error"},{"inputs":[],"name":"OnlyCallableByUpkeepPrivilegeManager","type":"error"},{"inputs":[],"name":"OnlyPausedUpkeep","type":"error"},{"inputs":[],"name":"OnlySimulatedBackend","type":"error"},{"inputs":[],"name":"OnlyUnpausedUpkeep","type":"error"},{"inputs":[],"name":"ParameterLengthError","type":"error"},{"inputs":[],"name":"PaymentGreaterThanAllLINK","type":"error"},{"inputs":[],"name":"ReentrantCall","type":"error"},{"inputs":[],"name":"RegistryPaused","type":"error"},{"inputs":[],"name":"RepeatedSigner","type":"error"},{"inputs":[],"name":"RepeatedTransmitter","type":"error"},{"inputs":[{"internalType":"bytes","name":"reason","type":"bytes"}],"name":"TargetCheckReverted","type":"error"},{"inputs":[],"name":"TooManyOracles","type":"error"},{"inputs":[],"name":"TranscoderNotSet","type":"error"},{"inputs":[],"name":"UpkeepAlreadyExists","type":"error"},{"inputs":[],"name":"UpkeepCancelled","type":"error"},{"inputs":[],"name":"UpkeepNotCanceled","type":"error"},{"inputs":[],"name":"UpkeepNotNeeded","type":"error"},{"inputs":[],"name":"ValueNotChanged","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"admin","type":"address"},{"indexed":false,"internalType":"bytes","name":"privilegeConfig","type":"bytes"}],"name":"AdminPrivilegeConfigSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"trigger","type":"bytes"}],"name":"CancelledUpkeepReport","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"previousConfigBlockNumber","type":"uint32"},{"indexed":false,"internalType":"bytes32","name":"configDigest","type":"bytes32"},{"indexed":false,"internalType":"uint64","name":"configCount","type":"uint64"},{"indexed":false,"internalType":"address[]","name":"signers","type":"address[]"},{"indexed":false,"internalType":"address[]","name":"transmitters","type":"address[]"},{"indexed":false,"internalType":"uint8","name":"f","type":"uint8"},{"indexed":false,"internalType":"bytes","name":"onchainConfig","type":"bytes"},{"indexed":false,"internalType":"uint64","name":"offchainConfigVersion","type":"uint64"},{"indexed":false,"internalType":"bytes","name":"offchainConfig","type":"bytes"}],"name":"ConfigSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"dedupKey","type":"bytes32"}],"name":"DedupKeyAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint96","name":"amount","type":"uint96"}],"name":"FundsAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"FundsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"trigger","type":"bytes"}],"name":"InsufficientFundsUpkeepReport","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint96","name":"amount","type":"uint96"}],"name":"OwnerFundsWithdrawn","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":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"transmitters","type":"address[]"},{"indexed":false,"internalType":"address[]","name":"payees","type":"address[]"}],"name":"PayeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"transmitter","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"PayeeshipTransferRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"transmitter","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"PayeeshipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"transmitter","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"address","name":"payee","type":"address"}],"name":"PaymentWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"trigger","type":"bytes"}],"name":"ReorgedUpkeepReport","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"trigger","type":"bytes"}],"name":"StaleUpkeepReport","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"configDigest","type":"bytes32"},{"indexed":false,"internalType":"uint32","name":"epoch","type":"uint32"}],"name":"Transmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"UpkeepAdminTransferRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"UpkeepAdminTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"uint64","name":"atBlockHeight","type":"uint64"}],"name":"UpkeepCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"newCheckData","type":"bytes"}],"name":"UpkeepCheckDataSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint96","name":"gasLimit","type":"uint96"}],"name":"UpkeepGasLimitSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"remainingBalance","type":"uint256"},{"indexed":false,"internalType":"address","name":"destination","type":"address"}],"name":"UpkeepMigrated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"offchainConfig","type":"bytes"}],"name":"UpkeepOffchainConfigSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"UpkeepPaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"bool","name":"success","type":"bool"},{"indexed":false,"internalType":"uint96","name":"totalPayment","type":"uint96"},{"indexed":false,"internalType":"uint256","name":"gasUsed","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gasOverhead","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"trigger","type":"bytes"}],"name":"UpkeepPerformed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"privilegeConfig","type":"bytes"}],"name":"UpkeepPrivilegeConfigSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startingBalance","type":"uint256"},{"indexed":false,"internalType":"address","name":"importedFrom","type":"address"}],"name":"UpkeepReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"performGas","type":"uint32"},{"indexed":false,"internalType":"address","name":"admin","type":"address"}],"name":"UpkeepRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"triggerConfig","type":"bytes"}],"name":"UpkeepTriggerConfigSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"UpkeepUnpaused","type":"event"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fallbackTo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestConfigDetails","outputs":[{"internalType":"uint32","name":"configCount","type":"uint32"},{"internalType":"uint32","name":"blockNumber","type":"uint32"},{"internalType":"bytes32","name":"configDigest","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestConfigDigestAndEpoch","outputs":[{"internalType":"bool","name":"scanLogs","type":"bool"},{"internalType":"bytes32","name":"configDigest","type":"bytes32"},{"internalType":"uint32","name":"epoch","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onTokenTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"signers","type":"address[]"},{"internalType":"address[]","name":"transmitters","type":"address[]"},{"internalType":"uint8","name":"f","type":"uint8"},{"internalType":"bytes","name":"onchainConfigBytes","type":"bytes"},{"internalType":"uint64","name":"offchainConfigVersion","type":"uint64"},{"internalType":"bytes","name":"offchainConfig","type":"bytes"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"signers","type":"address[]"},{"internalType":"address[]","name":"transmitters","type":"address[]"},{"internalType":"uint8","name":"f","type":"uint8"},{"components":[{"internalType":"uint32","name":"paymentPremiumPPB","type":"uint32"},{"internalType":"uint32","name":"flatFeeMicroLink","type":"uint32"},{"internalType":"uint32","name":"checkGasLimit","type":"uint32"},{"internalType":"uint24","name":"stalenessSeconds","type":"uint24"},{"internalType":"uint16","name":"gasCeilingMultiplier","type":"uint16"},{"internalType":"uint96","name":"minUpkeepSpend","type":"uint96"},{"internalType":"uint32","name":"maxPerformGas","type":"uint32"},{"internalType":"uint32","name":"maxCheckDataSize","type":"uint32"},{"internalType":"uint32","name":"maxPerformDataSize","type":"uint32"},{"internalType":"uint32","name":"maxRevertDataSize","type":"uint32"},{"internalType":"uint256","name":"fallbackGasPrice","type":"uint256"},{"internalType":"uint256","name":"fallbackLinkPrice","type":"uint256"},{"internalType":"address","name":"transcoder","type":"address"},{"internalType":"address[]","name":"registrars","type":"address[]"},{"internalType":"address","name":"upkeepPrivilegeManager","type":"address"},{"internalType":"bool","name":"reorgProtectionEnabled","type":"bool"}],"internalType":"struct AutomationRegistryBase2_2.OnchainConfig","name":"onchainConfig","type":"tuple"},{"internalType":"uint64","name":"offchainConfigVersion","type":"uint64"},{"internalType":"bytes","name":"offchainConfig","type":"bytes"}],"name":"setConfigTypeSafe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"performData","type":"bytes"}],"name":"simulatePerformUpkeep","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"gasUsed","type":"uint256"}],"stateMutability":"view","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":"rawReport","type":"bytes"},{"internalType":"bytes32[]","name":"rs","type":"bytes32[]"},{"internalType":"bytes32[]","name":"ss","type":"bytes32[]"},{"internalType":"bytes32","name":"rawVs","type":"bytes32"}],"name":"transmit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"typeAndVersion","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract AutomationRegistryLogicB2_2","name":"logicB","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint96","name":"amount","type":"uint96"}],"name":"addFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"cancelUpkeep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes[]","name":"values","type":"bytes[]"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"name":"checkCallback","outputs":[{"internalType":"bool","name":"upkeepNeeded","type":"bool"},{"internalType":"bytes","name":"performData","type":"bytes"},{"internalType":"enum AutomationRegistryBase2_2.UpkeepFailureReason","name":"upkeepFailureReason","type":"uint8"},{"internalType":"uint256","name":"gasUsed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"triggerData","type":"bytes"}],"name":"checkUpkeep","outputs":[{"internalType":"bool","name":"upkeepNeeded","type":"bool"},{"internalType":"bytes","name":"performData","type":"bytes"},{"internalType":"enum AutomationRegistryBase2_2.UpkeepFailureReason","name":"upkeepFailureReason","type":"uint8"},{"internalType":"uint256","name":"gasUsed","type":"uint256"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"uint256","name":"fastGasWei","type":"uint256"},{"internalType":"uint256","name":"linkNative","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"checkUpkeep","outputs":[{"internalType":"bool","name":"upkeepNeeded","type":"bool"},{"internalType":"bytes","name":"performData","type":"bytes"},{"internalType":"enum AutomationRegistryBase2_2.UpkeepFailureReason","name":"upkeepFailureReason","type":"uint8"},{"internalType":"uint256","name":"gasUsed","type":"uint256"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"uint256","name":"fastGasWei","type":"uint256"},{"internalType":"uint256","name":"linkNative","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"payload","type":"bytes"}],"name":"executeCallback","outputs":[{"internalType":"bool","name":"upkeepNeeded","type":"bool"},{"internalType":"bytes","name":"performData","type":"bytes"},{"internalType":"enum AutomationRegistryBase2_2.UpkeepFailureReason","name":"upkeepFailureReason","type":"uint8"},{"internalType":"uint256","name":"gasUsed","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"address","name":"destination","type":"address"}],"name":"migrateUpkeeps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"encodedUpkeeps","type":"bytes"}],"name":"receiveUpkeeps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint32","name":"gasLimit","type":"uint32"},{"internalType":"address","name":"admin","type":"address"},{"internalType":"enum AutomationRegistryBase2_2.Trigger","name":"triggerType","type":"uint8"},{"internalType":"bytes","name":"checkData","type":"bytes"},{"internalType":"bytes","name":"triggerConfig","type":"bytes"},{"internalType":"bytes","name":"offchainConfig","type":"bytes"}],"name":"registerUpkeep","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint32","name":"gasLimit","type":"uint32"},{"internalType":"address","name":"admin","type":"address"},{"internalType":"bytes","name":"checkData","type":"bytes"},{"internalType":"bytes","name":"offchainConfig","type":"bytes"}],"name":"registerUpkeep","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"triggerConfig","type":"bytes"}],"name":"setUpkeepTriggerConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum AutomationRegistryBase2_2.Mode","name":"mode","type":"uint8"},{"internalType":"address","name":"link","type":"address"},{"internalType":"address","name":"linkNativeFeed","type":"address"},{"internalType":"address","name":"fastGasFeed","type":"address"},{"internalType":"address","name":"automationForwarderLogic","type":"address"},{"internalType":"address","name":"allowedReadOnlyAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"transmitter","type":"address"}],"name":"acceptPayeeship","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"acceptUpkeepAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"startIndex","type":"uint256"},{"internalType":"uint256","name":"maxCount","type":"uint256"}],"name":"getActiveUpkeepIDs","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"getAdminPrivilegeConfig","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllowedReadOnlyAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAutomationForwarderLogic","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getBalance","outputs":[{"internalType":"uint96","name":"balance","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCancellationDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getConditionalGasOverhead","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getFastGasFeedAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"upkeepID","type":"uint256"}],"name":"getForwarder","outputs":[{"internalType":"contract IAutomationForwarder","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLinkAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLinkNativeFeedAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLogGasOverhead","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"enum AutomationRegistryBase2_2.Trigger","name":"triggerType","type":"uint8"},{"internalType":"uint32","name":"gasLimit","type":"uint32"}],"name":"getMaxPaymentForGas","outputs":[{"internalType":"uint96","name":"maxPayment","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getMinBalance","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getMinBalanceForUpkeep","outputs":[{"internalType":"uint96","name":"minBalance","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMode","outputs":[{"internalType":"enum AutomationRegistryBase2_2.Mode","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"peer","type":"address"}],"name":"getPeerRegistryMigrationPermission","outputs":[{"internalType":"enum AutomationRegistryBase2_2.MigrationPermission","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPerPerformByteGasOverhead","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getPerSignerGasOverhead","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"query","type":"address"}],"name":"getSignerInfo","outputs":[{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint8","name":"index","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getState","outputs":[{"components":[{"internalType":"uint32","name":"nonce","type":"uint32"},{"internalType":"uint96","name":"ownerLinkBalance","type":"uint96"},{"internalType":"uint256","name":"expectedLinkBalance","type":"uint256"},{"internalType":"uint96","name":"totalPremium","type":"uint96"},{"internalType":"uint256","name":"numUpkeeps","type":"uint256"},{"internalType":"uint32","name":"configCount","type":"uint32"},{"internalType":"uint32","name":"latestConfigBlockNumber","type":"uint32"},{"internalType":"bytes32","name":"latestConfigDigest","type":"bytes32"},{"internalType":"uint32","name":"latestEpoch","type":"uint32"},{"internalType":"bool","name":"paused","type":"bool"}],"internalType":"struct AutomationRegistryBase2_2.State","name":"state","type":"tuple"},{"components":[{"internalType":"uint32","name":"paymentPremiumPPB","type":"uint32"},{"internalType":"uint32","name":"flatFeeMicroLink","type":"uint32"},{"internalType":"uint32","name":"checkGasLimit","type":"uint32"},{"internalType":"uint24","name":"stalenessSeconds","type":"uint24"},{"internalType":"uint16","name":"gasCeilingMultiplier","type":"uint16"},{"internalType":"uint96","name":"minUpkeepSpend","type":"uint96"},{"internalType":"uint32","name":"maxPerformGas","type":"uint32"},{"internalType":"uint32","name":"maxCheckDataSize","type":"uint32"},{"internalType":"uint32","name":"maxPerformDataSize","type":"uint32"},{"internalType":"uint32","name":"maxRevertDataSize","type":"uint32"},{"internalType":"uint256","name":"fallbackGasPrice","type":"uint256"},{"internalType":"uint256","name":"fallbackLinkPrice","type":"uint256"},{"internalType":"address","name":"transcoder","type":"address"},{"internalType":"address[]","name":"registrars","type":"address[]"},{"internalType":"address","name":"upkeepPrivilegeManager","type":"address"},{"internalType":"bool","name":"reorgProtectionEnabled","type":"bool"}],"internalType":"struct AutomationRegistryBase2_2.OnchainConfig","name":"config","type":"tuple"},{"internalType":"address[]","name":"signers","type":"address[]"},{"internalType":"address[]","name":"transmitters","type":"address[]"},{"internalType":"uint8","name":"f","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"query","type":"address"}],"name":"getTransmitterInfo","outputs":[{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint8","name":"index","type":"uint8"},{"internalType":"uint96","name":"balance","type":"uint96"},{"internalType":"uint96","name":"lastCollected","type":"uint96"},{"internalType":"address","name":"payee","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"upkeepId","type":"uint256"}],"name":"getTriggerType","outputs":[{"internalType":"enum AutomationRegistryBase2_2.Trigger","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getUpkeep","outputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint32","name":"performGas","type":"uint32"},{"internalType":"bytes","name":"checkData","type":"bytes"},{"internalType":"uint96","name":"balance","type":"uint96"},{"internalType":"address","name":"admin","type":"address"},{"internalType":"uint64","name":"maxValidBlocknumber","type":"uint64"},{"internalType":"uint32","name":"lastPerformedBlockNumber","type":"uint32"},{"internalType":"uint96","name":"amountSpent","type":"uint96"},{"internalType":"bool","name":"paused","type":"bool"},{"internalType":"bytes","name":"offchainConfig","type":"bytes"}],"internalType":"struct AutomationRegistryBase2_2.UpkeepInfo","name":"upkeepInfo","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"upkeepId","type":"uint256"}],"name":"getUpkeepPrivilegeConfig","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"upkeepId","type":"uint256"}],"name":"getUpkeepTriggerConfig","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"dedupKey","type":"bytes32"}],"name":"hasDedupKey","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"pauseUpkeep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"},{"internalType":"bytes","name":"newPrivilegeConfig","type":"bytes"}],"name":"setAdminPrivilegeConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"payees","type":"address[]"}],"name":"setPayees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"peer","type":"address"},{"internalType":"enum AutomationRegistryBase2_2.MigrationPermission","name":"permission","type":"uint8"}],"name":"setPeerRegistryMigrationPermission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"newCheckData","type":"bytes"}],"name":"setUpkeepCheckData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint32","name":"gasLimit","type":"uint32"}],"name":"setUpkeepGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"config","type":"bytes"}],"name":"setUpkeepOffchainConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"upkeepId","type":"uint256"},{"internalType":"bytes","name":"newPrivilegeConfig","type":"bytes"}],"name":"setUpkeepPrivilegeConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"transmitter","type":"address"},{"internalType":"address","name":"proposed","type":"address"}],"name":"transferPayeeship","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"proposed","type":"address"}],"name":"transferUpkeepAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"unpauseUpkeep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"upkeepTranscoderVersion","outputs":[{"internalType":"enum UpkeepFormat","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"upkeepVersion","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawOwnerFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawPayment","outputs":[],"stateMutability":"nonpayable","type":"function"}]
+[{"inputs":[{"internalType":"contract AutomationRegistryLogicB2_2","name":"logicA","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ArrayHasNoEntries","type":"error"},{"inputs":[],"name":"CannotCancel","type":"error"},{"inputs":[],"name":"CheckDataExceedsLimit","type":"error"},{"inputs":[],"name":"ConfigDigestMismatch","type":"error"},{"inputs":[],"name":"DuplicateEntry","type":"error"},{"inputs":[],"name":"DuplicateSigners","type":"error"},{"inputs":[],"name":"GasLimitCanOnlyIncrease","type":"error"},{"inputs":[],"name":"GasLimitOutsideRange","type":"error"},{"inputs":[],"name":"IncorrectNumberOfFaultyOracles","type":"error"},{"inputs":[],"name":"IncorrectNumberOfSignatures","type":"error"},{"inputs":[],"name":"IncorrectNumberOfSigners","type":"error"},{"inputs":[],"name":"IndexOutOfRange","type":"error"},{"inputs":[],"name":"InsufficientFunds","type":"error"},{"inputs":[],"name":"InvalidDataLength","type":"error"},{"inputs":[],"name":"InvalidPayee","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidReport","type":"error"},{"inputs":[],"name":"InvalidSigner","type":"error"},{"inputs":[],"name":"InvalidTransmitter","type":"error"},{"inputs":[],"name":"InvalidTrigger","type":"error"},{"inputs":[],"name":"InvalidTriggerType","type":"error"},{"inputs":[],"name":"MaxCheckDataSizeCanOnlyIncrease","type":"error"},{"inputs":[],"name":"MaxPerformDataSizeCanOnlyIncrease","type":"error"},{"inputs":[],"name":"MigrationNotPermitted","type":"error"},{"inputs":[],"name":"NotAContract","type":"error"},{"inputs":[],"name":"OnlyActiveSigners","type":"error"},{"inputs":[],"name":"OnlyActiveTransmitters","type":"error"},{"inputs":[],"name":"OnlyCallableByAdmin","type":"error"},{"inputs":[],"name":"OnlyCallableByLINKToken","type":"error"},{"inputs":[],"name":"OnlyCallableByOwnerOrAdmin","type":"error"},{"inputs":[],"name":"OnlyCallableByOwnerOrRegistrar","type":"error"},{"inputs":[],"name":"OnlyCallableByPayee","type":"error"},{"inputs":[],"name":"OnlyCallableByProposedAdmin","type":"error"},{"inputs":[],"name":"OnlyCallableByProposedPayee","type":"error"},{"inputs":[],"name":"OnlyCallableByUpkeepPrivilegeManager","type":"error"},{"inputs":[],"name":"OnlyPausedUpkeep","type":"error"},{"inputs":[],"name":"OnlySimulatedBackend","type":"error"},{"inputs":[],"name":"OnlyUnpausedUpkeep","type":"error"},{"inputs":[],"name":"ParameterLengthError","type":"error"},{"inputs":[],"name":"PaymentGreaterThanAllLINK","type":"error"},{"inputs":[],"name":"ReentrantCall","type":"error"},{"inputs":[],"name":"RegistryPaused","type":"error"},{"inputs":[],"name":"RepeatedSigner","type":"error"},{"inputs":[],"name":"RepeatedTransmitter","type":"error"},{"inputs":[{"internalType":"bytes","name":"reason","type":"bytes"}],"name":"TargetCheckReverted","type":"error"},{"inputs":[],"name":"TooManyOracles","type":"error"},{"inputs":[],"name":"TranscoderNotSet","type":"error"},{"inputs":[],"name":"UpkeepAlreadyExists","type":"error"},{"inputs":[],"name":"UpkeepCancelled","type":"error"},{"inputs":[],"name":"UpkeepNotCanceled","type":"error"},{"inputs":[],"name":"UpkeepNotNeeded","type":"error"},{"inputs":[],"name":"ValueNotChanged","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"admin","type":"address"},{"indexed":false,"internalType":"bytes","name":"privilegeConfig","type":"bytes"}],"name":"AdminPrivilegeConfigSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"trigger","type":"bytes"}],"name":"CancelledUpkeepReport","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"previousConfigBlockNumber","type":"uint32"},{"indexed":false,"internalType":"bytes32","name":"configDigest","type":"bytes32"},{"indexed":false,"internalType":"uint64","name":"configCount","type":"uint64"},{"indexed":false,"internalType":"address[]","name":"signers","type":"address[]"},{"indexed":false,"internalType":"address[]","name":"transmitters","type":"address[]"},{"indexed":false,"internalType":"uint8","name":"f","type":"uint8"},{"indexed":false,"internalType":"bytes","name":"onchainConfig","type":"bytes"},{"indexed":false,"internalType":"uint64","name":"offchainConfigVersion","type":"uint64"},{"indexed":false,"internalType":"bytes","name":"offchainConfig","type":"bytes"}],"name":"ConfigSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"dedupKey","type":"bytes32"}],"name":"DedupKeyAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint96","name":"amount","type":"uint96"}],"name":"FundsAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"FundsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"trigger","type":"bytes"}],"name":"InsufficientFundsUpkeepReport","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint96","name":"amount","type":"uint96"}],"name":"OwnerFundsWithdrawn","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":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"transmitters","type":"address[]"},{"indexed":false,"internalType":"address[]","name":"payees","type":"address[]"}],"name":"PayeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"transmitter","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"PayeeshipTransferRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"transmitter","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"PayeeshipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"transmitter","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"address","name":"payee","type":"address"}],"name":"PaymentWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"trigger","type":"bytes"}],"name":"ReorgedUpkeepReport","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"trigger","type":"bytes"}],"name":"StaleUpkeepReport","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"configDigest","type":"bytes32"},{"indexed":false,"internalType":"uint32","name":"epoch","type":"uint32"}],"name":"Transmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"UpkeepAdminTransferRequested","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"UpkeepAdminTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"uint64","name":"atBlockHeight","type":"uint64"}],"name":"UpkeepCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"newCheckData","type":"bytes"}],"name":"UpkeepCheckDataSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint96","name":"gasLimit","type":"uint96"}],"name":"UpkeepGasLimitSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"remainingBalance","type":"uint256"},{"indexed":false,"internalType":"address","name":"destination","type":"address"}],"name":"UpkeepMigrated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"offchainConfig","type":"bytes"}],"name":"UpkeepOffchainConfigSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"UpkeepPaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"bool","name":"success","type":"bool"},{"indexed":false,"internalType":"uint96","name":"totalPayment","type":"uint96"},{"indexed":false,"internalType":"uint256","name":"gasUsed","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gasOverhead","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"trigger","type":"bytes"}],"name":"UpkeepPerformed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"privilegeConfig","type":"bytes"}],"name":"UpkeepPrivilegeConfigSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startingBalance","type":"uint256"},{"indexed":false,"internalType":"address","name":"importedFrom","type":"address"}],"name":"UpkeepReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"performGas","type":"uint32"},{"indexed":false,"internalType":"address","name":"admin","type":"address"}],"name":"UpkeepRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"triggerConfig","type":"bytes"}],"name":"UpkeepTriggerConfigSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"UpkeepUnpaused","type":"event"},{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fallbackTo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestConfigDetails","outputs":[{"internalType":"uint32","name":"configCount","type":"uint32"},{"internalType":"uint32","name":"blockNumber","type":"uint32"},{"internalType":"bytes32","name":"configDigest","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestConfigDigestAndEpoch","outputs":[{"internalType":"bool","name":"scanLogs","type":"bool"},{"internalType":"bytes32","name":"configDigest","type":"bytes32"},{"internalType":"uint32","name":"epoch","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"onTokenTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"signers","type":"address[]"},{"internalType":"address[]","name":"transmitters","type":"address[]"},{"internalType":"uint8","name":"f","type":"uint8"},{"internalType":"bytes","name":"onchainConfigBytes","type":"bytes"},{"internalType":"uint64","name":"offchainConfigVersion","type":"uint64"},{"internalType":"bytes","name":"offchainConfig","type":"bytes"}],"name":"setConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"signers","type":"address[]"},{"internalType":"address[]","name":"transmitters","type":"address[]"},{"internalType":"uint8","name":"f","type":"uint8"},{"components":[{"internalType":"uint32","name":"paymentPremiumPPB","type":"uint32"},{"internalType":"uint32","name":"flatFeeMicroLink","type":"uint32"},{"internalType":"uint32","name":"checkGasLimit","type":"uint32"},{"internalType":"uint24","name":"stalenessSeconds","type":"uint24"},{"internalType":"uint16","name":"gasCeilingMultiplier","type":"uint16"},{"internalType":"uint96","name":"minUpkeepSpend","type":"uint96"},{"internalType":"uint32","name":"maxPerformGas","type":"uint32"},{"internalType":"uint32","name":"maxCheckDataSize","type":"uint32"},{"internalType":"uint32","name":"maxPerformDataSize","type":"uint32"},{"internalType":"uint32","name":"maxRevertDataSize","type":"uint32"},{"internalType":"uint256","name":"fallbackGasPrice","type":"uint256"},{"internalType":"uint256","name":"fallbackLinkPrice","type":"uint256"},{"internalType":"address","name":"transcoder","type":"address"},{"internalType":"address[]","name":"registrars","type":"address[]"},{"internalType":"address","name":"upkeepPrivilegeManager","type":"address"},{"internalType":"bool","name":"reorgProtectionEnabled","type":"bool"}],"internalType":"struct AutomationRegistryBase2_2.OnchainConfig","name":"onchainConfig","type":"tuple"},{"internalType":"uint64","name":"offchainConfigVersion","type":"uint64"},{"internalType":"bytes","name":"offchainConfig","type":"bytes"}],"name":"setConfigTypeSafe","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"performData","type":"bytes"}],"name":"simulatePerformUpkeep","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"gasUsed","type":"uint256"}],"stateMutability":"view","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":"rawReport","type":"bytes"},{"internalType":"bytes32[]","name":"rs","type":"bytes32[]"},{"internalType":"bytes32[]","name":"ss","type":"bytes32[]"},{"internalType":"bytes32","name":"rawVs","type":"bytes32"}],"name":"transmit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"typeAndVersion","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract AutomationRegistryLogicB2_2","name":"logicB","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint96","name":"amount","type":"uint96"}],"name":"addFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"cancelUpkeep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes[]","name":"values","type":"bytes[]"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"name":"checkCallback","outputs":[{"internalType":"bool","name":"upkeepNeeded","type":"bool"},{"internalType":"bytes","name":"performData","type":"bytes"},{"internalType":"enum AutomationRegistryBase2_2.UpkeepFailureReason","name":"upkeepFailureReason","type":"uint8"},{"internalType":"uint256","name":"gasUsed","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"triggerData","type":"bytes"}],"name":"checkUpkeep","outputs":[{"internalType":"bool","name":"upkeepNeeded","type":"bool"},{"internalType":"bytes","name":"performData","type":"bytes"},{"internalType":"enum AutomationRegistryBase2_2.UpkeepFailureReason","name":"upkeepFailureReason","type":"uint8"},{"internalType":"uint256","name":"gasUsed","type":"uint256"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"uint256","name":"fastGasWei","type":"uint256"},{"internalType":"uint256","name":"linkNative","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"checkUpkeep","outputs":[{"internalType":"bool","name":"upkeepNeeded","type":"bool"},{"internalType":"bytes","name":"performData","type":"bytes"},{"internalType":"enum AutomationRegistryBase2_2.UpkeepFailureReason","name":"upkeepFailureReason","type":"uint8"},{"internalType":"uint256","name":"gasUsed","type":"uint256"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"uint256","name":"fastGasWei","type":"uint256"},{"internalType":"uint256","name":"linkNative","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"payload","type":"bytes"}],"name":"executeCallback","outputs":[{"internalType":"bool","name":"upkeepNeeded","type":"bool"},{"internalType":"bytes","name":"performData","type":"bytes"},{"internalType":"enum AutomationRegistryBase2_2.UpkeepFailureReason","name":"upkeepFailureReason","type":"uint8"},{"internalType":"uint256","name":"gasUsed","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"address","name":"destination","type":"address"}],"name":"migrateUpkeeps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"encodedUpkeeps","type":"bytes"}],"name":"receiveUpkeeps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint32","name":"gasLimit","type":"uint32"},{"internalType":"address","name":"admin","type":"address"},{"internalType":"enum AutomationRegistryBase2_2.Trigger","name":"triggerType","type":"uint8"},{"internalType":"bytes","name":"checkData","type":"bytes"},{"internalType":"bytes","name":"triggerConfig","type":"bytes"},{"internalType":"bytes","name":"offchainConfig","type":"bytes"}],"name":"registerUpkeep","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint32","name":"gasLimit","type":"uint32"},{"internalType":"address","name":"admin","type":"address"},{"internalType":"bytes","name":"checkData","type":"bytes"},{"internalType":"bytes","name":"offchainConfig","type":"bytes"}],"name":"registerUpkeep","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"triggerConfig","type":"bytes"}],"name":"setUpkeepTriggerConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum AutomationRegistryBase2_2.Mode","name":"mode","type":"uint8"},{"internalType":"address","name":"link","type":"address"},{"internalType":"address","name":"linkNativeFeed","type":"address"},{"internalType":"address","name":"fastGasFeed","type":"address"},{"internalType":"address","name":"automationForwarderLogic","type":"address"},{"internalType":"address","name":"allowedReadOnlyAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"transmitter","type":"address"}],"name":"acceptPayeeship","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"acceptUpkeepAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"startIndex","type":"uint256"},{"internalType":"uint256","name":"maxCount","type":"uint256"}],"name":"getActiveUpkeepIDs","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"getAdminPrivilegeConfig","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllowedReadOnlyAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAutomationForwarderLogic","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getBalance","outputs":[{"internalType":"uint96","name":"balance","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCancellationDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getConditionalGasOverhead","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getFastGasFeedAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"upkeepID","type":"uint256"}],"name":"getForwarder","outputs":[{"internalType":"contract IAutomationForwarder","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLinkAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLinkNativeFeedAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLogGasOverhead","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"enum AutomationRegistryBase2_2.Trigger","name":"triggerType","type":"uint8"},{"internalType":"uint32","name":"gasLimit","type":"uint32"}],"name":"getMaxPaymentForGas","outputs":[{"internalType":"uint96","name":"maxPayment","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getMinBalance","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getMinBalanceForUpkeep","outputs":[{"internalType":"uint96","name":"minBalance","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMode","outputs":[{"internalType":"enum AutomationRegistryBase2_2.Mode","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"peer","type":"address"}],"name":"getPeerRegistryMigrationPermission","outputs":[{"internalType":"enum AutomationRegistryBase2_2.MigrationPermission","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPerPerformByteGasOverhead","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getPerSignerGasOverhead","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getReorgProtectionEnabled","outputs":[{"internalType":"bool","name":"reorgProtectionEnabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"query","type":"address"}],"name":"getSignerInfo","outputs":[{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint8","name":"index","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getState","outputs":[{"components":[{"internalType":"uint32","name":"nonce","type":"uint32"},{"internalType":"uint96","name":"ownerLinkBalance","type":"uint96"},{"internalType":"uint256","name":"expectedLinkBalance","type":"uint256"},{"internalType":"uint96","name":"totalPremium","type":"uint96"},{"internalType":"uint256","name":"numUpkeeps","type":"uint256"},{"internalType":"uint32","name":"configCount","type":"uint32"},{"internalType":"uint32","name":"latestConfigBlockNumber","type":"uint32"},{"internalType":"bytes32","name":"latestConfigDigest","type":"bytes32"},{"internalType":"uint32","name":"latestEpoch","type":"uint32"},{"internalType":"bool","name":"paused","type":"bool"}],"internalType":"struct AutomationRegistryBase2_2.State","name":"state","type":"tuple"},{"components":[{"internalType":"uint32","name":"paymentPremiumPPB","type":"uint32"},{"internalType":"uint32","name":"flatFeeMicroLink","type":"uint32"},{"internalType":"uint32","name":"checkGasLimit","type":"uint32"},{"internalType":"uint24","name":"stalenessSeconds","type":"uint24"},{"internalType":"uint16","name":"gasCeilingMultiplier","type":"uint16"},{"internalType":"uint96","name":"minUpkeepSpend","type":"uint96"},{"internalType":"uint32","name":"maxPerformGas","type":"uint32"},{"internalType":"uint32","name":"maxCheckDataSize","type":"uint32"},{"internalType":"uint32","name":"maxPerformDataSize","type":"uint32"},{"internalType":"uint32","name":"maxRevertDataSize","type":"uint32"},{"internalType":"uint256","name":"fallbackGasPrice","type":"uint256"},{"internalType":"uint256","name":"fallbackLinkPrice","type":"uint256"},{"internalType":"address","name":"transcoder","type":"address"},{"internalType":"address[]","name":"registrars","type":"address[]"},{"internalType":"address","name":"upkeepPrivilegeManager","type":"address"}],"internalType":"struct AutomationRegistryBase2_2.OnchainConfigLegacy","name":"config","type":"tuple"},{"internalType":"address[]","name":"signers","type":"address[]"},{"internalType":"address[]","name":"transmitters","type":"address[]"},{"internalType":"uint8","name":"f","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"query","type":"address"}],"name":"getTransmitterInfo","outputs":[{"internalType":"bool","name":"active","type":"bool"},{"internalType":"uint8","name":"index","type":"uint8"},{"internalType":"uint96","name":"balance","type":"uint96"},{"internalType":"uint96","name":"lastCollected","type":"uint96"},{"internalType":"address","name":"payee","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"upkeepId","type":"uint256"}],"name":"getTriggerType","outputs":[{"internalType":"enum AutomationRegistryBase2_2.Trigger","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getUpkeep","outputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint32","name":"performGas","type":"uint32"},{"internalType":"bytes","name":"checkData","type":"bytes"},{"internalType":"uint96","name":"balance","type":"uint96"},{"internalType":"address","name":"admin","type":"address"},{"internalType":"uint64","name":"maxValidBlocknumber","type":"uint64"},{"internalType":"uint32","name":"lastPerformedBlockNumber","type":"uint32"},{"internalType":"uint96","name":"amountSpent","type":"uint96"},{"internalType":"bool","name":"paused","type":"bool"},{"internalType":"bytes","name":"offchainConfig","type":"bytes"}],"internalType":"struct AutomationRegistryBase2_2.UpkeepInfo","name":"upkeepInfo","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"upkeepId","type":"uint256"}],"name":"getUpkeepPrivilegeConfig","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"upkeepId","type":"uint256"}],"name":"getUpkeepTriggerConfig","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"dedupKey","type":"bytes32"}],"name":"hasDedupKey","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"pauseUpkeep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recoverFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"},{"internalType":"bytes","name":"newPrivilegeConfig","type":"bytes"}],"name":"setAdminPrivilegeConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"payees","type":"address[]"}],"name":"setPayees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"peer","type":"address"},{"internalType":"enum AutomationRegistryBase2_2.MigrationPermission","name":"permission","type":"uint8"}],"name":"setPeerRegistryMigrationPermission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"newCheckData","type":"bytes"}],"name":"setUpkeepCheckData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint32","name":"gasLimit","type":"uint32"}],"name":"setUpkeepGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"config","type":"bytes"}],"name":"setUpkeepOffchainConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"upkeepId","type":"uint256"},{"internalType":"bytes","name":"newPrivilegeConfig","type":"bytes"}],"name":"setUpkeepPrivilegeConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"transmitter","type":"address"},{"internalType":"address","name":"proposed","type":"address"}],"name":"transferPayeeship","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"proposed","type":"address"}],"name":"transferUpkeepAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"unpauseUpkeep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"upkeepTranscoderVersion","outputs":[{"internalType":"enum UpkeepFormat","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"upkeepVersion","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawOwnerFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawPayment","outputs":[],"stateMutability":"nonpayable","type":"function"}]
*/
diff --git a/contracts/src/v0.8/automation/dev/v2_2/AutomationRegistry2_2.sol b/contracts/src/v0.8/automation/dev/v2_2/AutomationRegistry2_2.sol
index d16ff615b15..99f71f21164 100644
--- a/contracts/src/v0.8/automation/dev/v2_2/AutomationRegistry2_2.sol
+++ b/contracts/src/v0.8/automation/dev/v2_2/AutomationRegistry2_2.sol
@@ -227,7 +227,7 @@ contract AutomationRegistry2_2 is AutomationRegistryBase2_2, OCR2Abstract, Chain
/**
* @inheritdoc OCR2Abstract
- * @dev prefer the type-safe version of setConfig (below) whenever possible
+ * @dev prefer the type-safe version of setConfig (below) whenever possible. The OnchainConfig could differ between registry versions
*/
function setConfig(
address[] memory signers,
diff --git a/contracts/src/v0.8/automation/dev/v2_2/AutomationRegistryBase2_2.sol b/contracts/src/v0.8/automation/dev/v2_2/AutomationRegistryBase2_2.sol
index f892667ab67..a419867c0d7 100644
--- a/contracts/src/v0.8/automation/dev/v2_2/AutomationRegistryBase2_2.sol
+++ b/contracts/src/v0.8/automation/dev/v2_2/AutomationRegistryBase2_2.sol
@@ -187,7 +187,7 @@ abstract contract AutomationRegistryBase2_2 is ConfirmedOwner {
}
/**
- * @notice OnchainConfig of the registry
+ * @notice OnchainConfigLegacy of the registry
* @dev only used in params and return values
* @member paymentPremiumPPB payment premium rate oracles receive on top of
* being reimbursed for gas, measured in parts per billion
@@ -209,7 +209,49 @@ abstract contract AutomationRegistryBase2_2 is ConfirmedOwner {
* @member transcoder address of the transcoder contract
* @member registrars addresses of the registrar contracts
* @member upkeepPrivilegeManager address which can set privilege for upkeeps
- * @member reorgProtectionEnabled if this registry will enable re-org protection checks
+ */
+ struct OnchainConfigLegacy {
+ uint32 paymentPremiumPPB;
+ uint32 flatFeeMicroLink; // min 0.000001 LINK, max 4294 LINK
+ uint32 checkGasLimit;
+ uint24 stalenessSeconds;
+ uint16 gasCeilingMultiplier;
+ uint96 minUpkeepSpend;
+ uint32 maxPerformGas;
+ uint32 maxCheckDataSize;
+ uint32 maxPerformDataSize;
+ uint32 maxRevertDataSize;
+ uint256 fallbackGasPrice;
+ uint256 fallbackLinkPrice;
+ address transcoder;
+ address[] registrars;
+ address upkeepPrivilegeManager;
+ }
+
+ /**
+ * @notice OnchainConfig of the registry
+ * @dev used only in setConfig()
+ * @member paymentPremiumPPB payment premium rate oracles receive on top of
+ * being reimbursed for gas, measured in parts per billion
+ * @member flatFeeMicroLink flat fee paid to oracles for performing upkeeps,
+ * priced in MicroLink; can be used in conjunction with or independently of
+ * paymentPremiumPPB
+ * @member checkGasLimit gas limit when checking for upkeep
+ * @member stalenessSeconds number of seconds that is allowed for feed data to
+ * be stale before switching to the fallback pricing
+ * @member gasCeilingMultiplier multiplier to apply to the fast gas feed price
+ * when calculating the payment ceiling for keepers
+ * @member minUpkeepSpend minimum LINK that an upkeep must spend before cancelling
+ * @member maxPerformGas max performGas allowed for an upkeep on this registry
+ * @member maxCheckDataSize max length of checkData bytes
+ * @member maxPerformDataSize max length of performData bytes
+ * @member maxRevertDataSize max length of revertData bytes
+ * @member fallbackGasPrice gas price used if the gas price feed is stale
+ * @member fallbackLinkPrice LINK price used if the LINK price feed is stale
+ * @member transcoder address of the transcoder contract
+ * @member registrars addresses of the registrar contracts
+ * @member upkeepPrivilegeManager address which can set privilege for upkeeps
+ * @member reorgProtectionEnabled if this registry enables re-org protection checks
*/
struct OnchainConfig {
uint32 paymentPremiumPPB;
diff --git a/contracts/src/v0.8/automation/dev/v2_2/AutomationRegistryLogicB2_2.sol b/contracts/src/v0.8/automation/dev/v2_2/AutomationRegistryLogicB2_2.sol
index ddd0d083d2e..cf5293ec064 100644
--- a/contracts/src/v0.8/automation/dev/v2_2/AutomationRegistryLogicB2_2.sol
+++ b/contracts/src/v0.8/automation/dev/v2_2/AutomationRegistryLogicB2_2.sol
@@ -404,13 +404,14 @@ contract AutomationRegistryLogicB2_2 is AutomationRegistryBase2_2 {
/**
* @notice read the current state of the registry
+ * @dev this function is deprecated
*/
function getState()
external
view
returns (
State memory state,
- OnchainConfig memory config,
+ OnchainConfigLegacy memory config,
address[] memory signers,
address[] memory transmitters,
uint8 f
@@ -429,7 +430,7 @@ contract AutomationRegistryLogicB2_2 is AutomationRegistryBase2_2 {
paused: s_hotVars.paused
});
- config = OnchainConfig({
+ config = OnchainConfigLegacy({
paymentPremiumPPB: s_hotVars.paymentPremiumPPB,
flatFeeMicroLink: s_hotVars.flatFeeMicroLink,
checkGasLimit: s_storage.checkGasLimit,
@@ -444,13 +445,19 @@ contract AutomationRegistryLogicB2_2 is AutomationRegistryBase2_2 {
fallbackLinkPrice: s_fallbackLinkPrice,
transcoder: s_storage.transcoder,
registrars: s_registrars.values(),
- upkeepPrivilegeManager: s_storage.upkeepPrivilegeManager,
- reorgProtectionEnabled: s_hotVars.reorgProtectionEnabled
+ upkeepPrivilegeManager: s_storage.upkeepPrivilegeManager
});
return (state, config, s_signersList, s_transmittersList, s_hotVars.f);
}
+ /**
+ * @notice if this registry has reorg protection enabled
+ */
+ function getReorgProtectionEnabled() external view returns (bool reorgProtectionEnabled) {
+ return s_hotVars.reorgProtectionEnabled;
+ }
+
/**
* @notice calculates the minimum balance required for an upkeep to remain eligible
* @param id the upkeep id to calculate minimum balance for
diff --git a/core/gethwrappers/generated/i_keeper_registry_master_wrapper_2_2/i_keeper_registry_master_wrapper_2_2.go b/core/gethwrappers/generated/i_keeper_registry_master_wrapper_2_2/i_keeper_registry_master_wrapper_2_2.go
index 3c81eedcddd..a00ae9595cf 100644
--- a/core/gethwrappers/generated/i_keeper_registry_master_wrapper_2_2/i_keeper_registry_master_wrapper_2_2.go
+++ b/core/gethwrappers/generated/i_keeper_registry_master_wrapper_2_2/i_keeper_registry_master_wrapper_2_2.go
@@ -49,6 +49,24 @@ type AutomationRegistryBase22OnchainConfig struct {
ReorgProtectionEnabled bool
}
+type AutomationRegistryBase22OnchainConfigLegacy struct {
+ PaymentPremiumPPB uint32
+ FlatFeeMicroLink uint32
+ CheckGasLimit uint32
+ StalenessSeconds *big.Int
+ GasCeilingMultiplier uint16
+ MinUpkeepSpend *big.Int
+ MaxPerformGas uint32
+ MaxCheckDataSize uint32
+ MaxPerformDataSize uint32
+ MaxRevertDataSize uint32
+ FallbackGasPrice *big.Int
+ FallbackLinkPrice *big.Int
+ Transcoder common.Address
+ Registrars []common.Address
+ UpkeepPrivilegeManager common.Address
+}
+
type AutomationRegistryBase22State struct {
Nonce uint32
OwnerLinkBalance *big.Int
@@ -76,7 +94,7 @@ type AutomationRegistryBase22UpkeepInfo struct {
}
var IAutomationRegistryMasterMetaData = &bind.MetaData{
- ABI: "[{\"inputs\":[],\"name\":\"ArrayHasNoEntries\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotCancel\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CheckDataExceedsLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateEntry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasLimitCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasLimitOutsideRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfFaultyOracles\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidReport\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTrigger\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTriggerType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxCheckDataSizeCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxPerformDataSizeCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MigrationNotPermitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyActiveSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyActiveTransmitters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByLINKToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrRegistrar\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByProposedAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByProposedPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByUpkeepPrivilegeManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPausedUpkeep\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySimulatedBackend\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyUnpausedUpkeep\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ParameterLengthError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PaymentGreaterThanAllLINK\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RegistryPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RepeatedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RepeatedTransmitter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"TargetCheckReverted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyOracles\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TranscoderNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepCancelled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepNotCanceled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepNotNeeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValueNotChanged\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"privilegeConfig\",\"type\":\"bytes\"}],\"name\":\"AdminPrivilegeConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"CancelledUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"previousConfigBlockNumber\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"configCount\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"onchainConfig\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"dedupKey\",\"type\":\"bytes32\"}],\"name\":\"DedupKeyAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"}],\"name\":\"FundsAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"FundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"InsufficientFundsUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"}],\"name\":\"OwnerFundsWithdrawn\",\"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\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"payees\",\"type\":\"address[]\"}],\"name\":\"PayeesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"PayeeshipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"PayeeshipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"}],\"name\":\"PaymentWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"ReorgedUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"StaleUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"name\":\"Transmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"UpkeepAdminTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"UpkeepAdminTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"atBlockHeight\",\"type\":\"uint64\"}],\"name\":\"UpkeepCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"newCheckData\",\"type\":\"bytes\"}],\"name\":\"UpkeepCheckDataSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"gasLimit\",\"type\":\"uint96\"}],\"name\":\"UpkeepGasLimitSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"UpkeepMigrated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepOffchainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"UpkeepPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"totalPayment\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasOverhead\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"UpkeepPerformed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"privilegeConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepPrivilegeConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startingBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"importedFrom\",\"type\":\"address\"}],\"name\":\"UpkeepReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"performGas\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"UpkeepRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"triggerConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepTriggerConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"UpkeepUnpaused\",\"type\":\"event\"},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"}],\"name\":\"acceptPayeeship\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"acceptUpkeepAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"}],\"name\":\"addFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"cancelUpkeep\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes[]\",\"name\":\"values\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"checkCallback\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"upkeepNeeded\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"performData\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"upkeepFailureReason\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"triggerData\",\"type\":\"bytes\"}],\"name\":\"checkUpkeep\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"upkeepNeeded\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"performData\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"upkeepFailureReason\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fastGasWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"linkNative\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"checkUpkeep\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"upkeepNeeded\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"performData\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"upkeepFailureReason\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fastGasWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"linkNative\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"executeCallback\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"upkeepNeeded\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"performData\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"upkeepFailureReason\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fallbackTo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxCount\",\"type\":\"uint256\"}],\"name\":\"getActiveUpkeepIDs\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"getAdminPrivilegeConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowedReadOnlyAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAutomationForwarderLogic\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getBalance\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"balance\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCancellationDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConditionalGasOverhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFastGasFeedAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepID\",\"type\":\"uint256\"}],\"name\":\"getForwarder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLinkAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLinkNativeFeedAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLogGasOverhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"triggerType\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"}],\"name\":\"getMaxPaymentForGas\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"maxPayment\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getMinBalance\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getMinBalanceForUpkeep\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"minBalance\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMode\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"peer\",\"type\":\"address\"}],\"name\":\"getPeerRegistryMigrationPermission\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPerPerformByteGasOverhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPerSignerGasOverhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"query\",\"type\":\"address\"}],\"name\":\"getSignerInfo\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"ownerLinkBalance\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"expectedLinkBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint96\",\"name\":\"totalPremium\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"numUpkeeps\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"latestConfigBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"latestConfigDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"latestEpoch\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"internalType\":\"structAutomationRegistryBase2_2.State\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"paymentPremiumPPB\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"flatFeeMicroLink\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"checkGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"stalenessSeconds\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"gasCeilingMultiplier\",\"type\":\"uint16\"},{\"internalType\":\"uint96\",\"name\":\"minUpkeepSpend\",\"type\":\"uint96\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxCheckDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxRevertDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"fallbackGasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fallbackLinkPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"transcoder\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"registrars\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"upkeepPrivilegeManager\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reorgProtectionEnabled\",\"type\":\"bool\"}],\"internalType\":\"structAutomationRegistryBase2_2.OnchainConfig\",\"name\":\"config\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"query\",\"type\":\"address\"}],\"name\":\"getTransmitterInfo\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"},{\"internalType\":\"uint96\",\"name\":\"balance\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"lastCollected\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepId\",\"type\":\"uint256\"}],\"name\":\"getTriggerType\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getUpkeep\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"performGas\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"checkData\",\"type\":\"bytes\"},{\"internalType\":\"uint96\",\"name\":\"balance\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"maxValidBlocknumber\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"lastPerformedBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"amountSpent\",\"type\":\"uint96\"},{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structAutomationRegistryBase2_2.UpkeepInfo\",\"name\":\"upkeepInfo\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepId\",\"type\":\"uint256\"}],\"name\":\"getUpkeepPrivilegeConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepId\",\"type\":\"uint256\"}],\"name\":\"getUpkeepTriggerConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dedupKey\",\"type\":\"bytes32\"}],\"name\":\"hasDedupKey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfigDetails\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfigDigestAndEpoch\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"scanLogs\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"migrateUpkeeps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onTokenTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"pauseUpkeep\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedUpkeeps\",\"type\":\"bytes\"}],\"name\":\"receiveUpkeeps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"recoverFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"triggerType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"checkData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"triggerConfig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"registerUpkeep\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"checkData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"registerUpkeep\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"newPrivilegeConfig\",\"type\":\"bytes\"}],\"name\":\"setAdminPrivilegeConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"onchainConfigBytes\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"paymentPremiumPPB\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"flatFeeMicroLink\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"checkGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"stalenessSeconds\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"gasCeilingMultiplier\",\"type\":\"uint16\"},{\"internalType\":\"uint96\",\"name\":\"minUpkeepSpend\",\"type\":\"uint96\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxCheckDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxRevertDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"fallbackGasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fallbackLinkPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"transcoder\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"registrars\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"upkeepPrivilegeManager\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reorgProtectionEnabled\",\"type\":\"bool\"}],\"internalType\":\"structAutomationRegistryBase2_2.OnchainConfig\",\"name\":\"onchainConfig\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"setConfigTypeSafe\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"payees\",\"type\":\"address[]\"}],\"name\":\"setPayees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"peer\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"permission\",\"type\":\"uint8\"}],\"name\":\"setPeerRegistryMigrationPermission\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"newCheckData\",\"type\":\"bytes\"}],\"name\":\"setUpkeepCheckData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"}],\"name\":\"setUpkeepGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"name\":\"setUpkeepOffchainConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"newPrivilegeConfig\",\"type\":\"bytes\"}],\"name\":\"setUpkeepPrivilegeConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"triggerConfig\",\"type\":\"bytes\"}],\"name\":\"setUpkeepTriggerConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"performData\",\"type\":\"bytes\"}],\"name\":\"simulatePerformUpkeep\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"proposed\",\"type\":\"address\"}],\"name\":\"transferPayeeship\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"proposed\",\"type\":\"address\"}],\"name\":\"transferUpkeepAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"rawReport\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"rawVs\",\"type\":\"bytes32\"}],\"name\":\"transmit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"unpauseUpkeep\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"upkeepTranscoderVersion\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"upkeepVersion\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdrawFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawOwnerFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdrawPayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
+ ABI: "[{\"inputs\":[],\"name\":\"ArrayHasNoEntries\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotCancel\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CheckDataExceedsLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateEntry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasLimitCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasLimitOutsideRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfFaultyOracles\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidReport\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTrigger\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTriggerType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxCheckDataSizeCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxPerformDataSizeCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MigrationNotPermitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyActiveSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyActiveTransmitters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByLINKToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrRegistrar\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByProposedAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByProposedPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByUpkeepPrivilegeManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPausedUpkeep\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySimulatedBackend\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyUnpausedUpkeep\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ParameterLengthError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PaymentGreaterThanAllLINK\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RegistryPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RepeatedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RepeatedTransmitter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"TargetCheckReverted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyOracles\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TranscoderNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepCancelled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepNotCanceled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepNotNeeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValueNotChanged\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"privilegeConfig\",\"type\":\"bytes\"}],\"name\":\"AdminPrivilegeConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"CancelledUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"previousConfigBlockNumber\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"configCount\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"onchainConfig\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"dedupKey\",\"type\":\"bytes32\"}],\"name\":\"DedupKeyAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"}],\"name\":\"FundsAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"FundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"InsufficientFundsUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"}],\"name\":\"OwnerFundsWithdrawn\",\"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\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"payees\",\"type\":\"address[]\"}],\"name\":\"PayeesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"PayeeshipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"PayeeshipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"}],\"name\":\"PaymentWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"ReorgedUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"StaleUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"name\":\"Transmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"UpkeepAdminTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"UpkeepAdminTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"atBlockHeight\",\"type\":\"uint64\"}],\"name\":\"UpkeepCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"newCheckData\",\"type\":\"bytes\"}],\"name\":\"UpkeepCheckDataSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"gasLimit\",\"type\":\"uint96\"}],\"name\":\"UpkeepGasLimitSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"UpkeepMigrated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepOffchainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"UpkeepPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"totalPayment\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasOverhead\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"UpkeepPerformed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"privilegeConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepPrivilegeConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startingBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"importedFrom\",\"type\":\"address\"}],\"name\":\"UpkeepReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"performGas\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"UpkeepRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"triggerConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepTriggerConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"UpkeepUnpaused\",\"type\":\"event\"},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"}],\"name\":\"acceptPayeeship\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"acceptUpkeepAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"}],\"name\":\"addFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"cancelUpkeep\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes[]\",\"name\":\"values\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"}],\"name\":\"checkCallback\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"upkeepNeeded\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"performData\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"upkeepFailureReason\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"triggerData\",\"type\":\"bytes\"}],\"name\":\"checkUpkeep\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"upkeepNeeded\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"performData\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"upkeepFailureReason\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fastGasWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"linkNative\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"checkUpkeep\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"upkeepNeeded\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"performData\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"upkeepFailureReason\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fastGasWei\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"linkNative\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"executeCallback\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"upkeepNeeded\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"performData\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"upkeepFailureReason\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fallbackTo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxCount\",\"type\":\"uint256\"}],\"name\":\"getActiveUpkeepIDs\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"getAdminPrivilegeConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowedReadOnlyAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAutomationForwarderLogic\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getBalance\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"balance\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCancellationDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConditionalGasOverhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFastGasFeedAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepID\",\"type\":\"uint256\"}],\"name\":\"getForwarder\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLinkAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLinkNativeFeedAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLogGasOverhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"triggerType\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"}],\"name\":\"getMaxPaymentForGas\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"maxPayment\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getMinBalance\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getMinBalanceForUpkeep\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"minBalance\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMode\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"peer\",\"type\":\"address\"}],\"name\":\"getPeerRegistryMigrationPermission\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPerPerformByteGasOverhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPerSignerGasOverhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReorgProtectionEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"reorgProtectionEnabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"query\",\"type\":\"address\"}],\"name\":\"getSignerInfo\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"ownerLinkBalance\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"expectedLinkBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint96\",\"name\":\"totalPremium\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"numUpkeeps\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"latestConfigBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"latestConfigDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"latestEpoch\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"internalType\":\"structAutomationRegistryBase2_2.State\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"paymentPremiumPPB\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"flatFeeMicroLink\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"checkGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"stalenessSeconds\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"gasCeilingMultiplier\",\"type\":\"uint16\"},{\"internalType\":\"uint96\",\"name\":\"minUpkeepSpend\",\"type\":\"uint96\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxCheckDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxRevertDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"fallbackGasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fallbackLinkPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"transcoder\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"registrars\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"upkeepPrivilegeManager\",\"type\":\"address\"}],\"internalType\":\"structAutomationRegistryBase2_2.OnchainConfigLegacy\",\"name\":\"config\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"query\",\"type\":\"address\"}],\"name\":\"getTransmitterInfo\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"},{\"internalType\":\"uint96\",\"name\":\"balance\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"lastCollected\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepId\",\"type\":\"uint256\"}],\"name\":\"getTriggerType\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getUpkeep\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"performGas\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"checkData\",\"type\":\"bytes\"},{\"internalType\":\"uint96\",\"name\":\"balance\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"maxValidBlocknumber\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"lastPerformedBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"amountSpent\",\"type\":\"uint96\"},{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structAutomationRegistryBase2_2.UpkeepInfo\",\"name\":\"upkeepInfo\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepId\",\"type\":\"uint256\"}],\"name\":\"getUpkeepPrivilegeConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepId\",\"type\":\"uint256\"}],\"name\":\"getUpkeepTriggerConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dedupKey\",\"type\":\"bytes32\"}],\"name\":\"hasDedupKey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfigDetails\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfigDigestAndEpoch\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"scanLogs\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"migrateUpkeeps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onTokenTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"pauseUpkeep\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedUpkeeps\",\"type\":\"bytes\"}],\"name\":\"receiveUpkeeps\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"recoverFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"triggerType\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"checkData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"triggerConfig\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"registerUpkeep\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"checkData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"registerUpkeep\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"newPrivilegeConfig\",\"type\":\"bytes\"}],\"name\":\"setAdminPrivilegeConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"onchainConfigBytes\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"paymentPremiumPPB\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"flatFeeMicroLink\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"checkGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"stalenessSeconds\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"gasCeilingMultiplier\",\"type\":\"uint16\"},{\"internalType\":\"uint96\",\"name\":\"minUpkeepSpend\",\"type\":\"uint96\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxCheckDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxRevertDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"fallbackGasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fallbackLinkPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"transcoder\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"registrars\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"upkeepPrivilegeManager\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reorgProtectionEnabled\",\"type\":\"bool\"}],\"internalType\":\"structAutomationRegistryBase2_2.OnchainConfig\",\"name\":\"onchainConfig\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"setConfigTypeSafe\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"payees\",\"type\":\"address[]\"}],\"name\":\"setPayees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"peer\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"permission\",\"type\":\"uint8\"}],\"name\":\"setPeerRegistryMigrationPermission\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"newCheckData\",\"type\":\"bytes\"}],\"name\":\"setUpkeepCheckData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"}],\"name\":\"setUpkeepGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"name\":\"setUpkeepOffchainConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"newPrivilegeConfig\",\"type\":\"bytes\"}],\"name\":\"setUpkeepPrivilegeConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"triggerConfig\",\"type\":\"bytes\"}],\"name\":\"setUpkeepTriggerConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"performData\",\"type\":\"bytes\"}],\"name\":\"simulatePerformUpkeep\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"proposed\",\"type\":\"address\"}],\"name\":\"transferPayeeship\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"proposed\",\"type\":\"address\"}],\"name\":\"transferUpkeepAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"rawReport\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"rawVs\",\"type\":\"bytes32\"}],\"name\":\"transmit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"unpauseUpkeep\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"upkeepTranscoderVersion\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"upkeepVersion\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdrawFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawOwnerFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdrawPayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
}
var IAutomationRegistryMasterABI = IAutomationRegistryMasterMetaData.ABI
@@ -739,6 +757,28 @@ func (_IAutomationRegistryMaster *IAutomationRegistryMasterCallerSession) GetPer
return _IAutomationRegistryMaster.Contract.GetPerSignerGasOverhead(&_IAutomationRegistryMaster.CallOpts)
}
+func (_IAutomationRegistryMaster *IAutomationRegistryMasterCaller) GetReorgProtectionEnabled(opts *bind.CallOpts) (bool, error) {
+ var out []interface{}
+ err := _IAutomationRegistryMaster.contract.Call(opts, &out, "getReorgProtectionEnabled")
+
+ if err != nil {
+ return *new(bool), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
+
+ return out0, err
+
+}
+
+func (_IAutomationRegistryMaster *IAutomationRegistryMasterSession) GetReorgProtectionEnabled() (bool, error) {
+ return _IAutomationRegistryMaster.Contract.GetReorgProtectionEnabled(&_IAutomationRegistryMaster.CallOpts)
+}
+
+func (_IAutomationRegistryMaster *IAutomationRegistryMasterCallerSession) GetReorgProtectionEnabled() (bool, error) {
+ return _IAutomationRegistryMaster.Contract.GetReorgProtectionEnabled(&_IAutomationRegistryMaster.CallOpts)
+}
+
func (_IAutomationRegistryMaster *IAutomationRegistryMasterCaller) GetSignerInfo(opts *bind.CallOpts, query common.Address) (GetSignerInfo,
error) {
@@ -781,7 +821,7 @@ func (_IAutomationRegistryMaster *IAutomationRegistryMasterCaller) GetState(opts
}
outstruct.State = *abi.ConvertType(out[0], new(AutomationRegistryBase22State)).(*AutomationRegistryBase22State)
- outstruct.Config = *abi.ConvertType(out[1], new(AutomationRegistryBase22OnchainConfig)).(*AutomationRegistryBase22OnchainConfig)
+ outstruct.Config = *abi.ConvertType(out[1], new(AutomationRegistryBase22OnchainConfigLegacy)).(*AutomationRegistryBase22OnchainConfigLegacy)
outstruct.Signers = *abi.ConvertType(out[2], new([]common.Address)).(*[]common.Address)
outstruct.Transmitters = *abi.ConvertType(out[3], new([]common.Address)).(*[]common.Address)
outstruct.F = *abi.ConvertType(out[4], new(uint8)).(*uint8)
@@ -5863,7 +5903,7 @@ type GetSignerInfo struct {
}
type GetState struct {
State AutomationRegistryBase22State
- Config AutomationRegistryBase22OnchainConfig
+ Config AutomationRegistryBase22OnchainConfigLegacy
Signers []common.Address
Transmitters []common.Address
F uint8
@@ -6153,6 +6193,8 @@ type IAutomationRegistryMasterInterface interface {
GetPerSignerGasOverhead(opts *bind.CallOpts) (*big.Int, error)
+ GetReorgProtectionEnabled(opts *bind.CallOpts) (bool, error)
+
GetSignerInfo(opts *bind.CallOpts, query common.Address) (GetSignerInfo,
error)
diff --git a/core/gethwrappers/generated/keeper_registry_logic_b_wrapper_2_2/keeper_registry_logic_b_wrapper_2_2.go b/core/gethwrappers/generated/keeper_registry_logic_b_wrapper_2_2/keeper_registry_logic_b_wrapper_2_2.go
index 9a95bc619b0..d9b0742aa76 100644
--- a/core/gethwrappers/generated/keeper_registry_logic_b_wrapper_2_2/keeper_registry_logic_b_wrapper_2_2.go
+++ b/core/gethwrappers/generated/keeper_registry_logic_b_wrapper_2_2/keeper_registry_logic_b_wrapper_2_2.go
@@ -30,7 +30,7 @@ var (
_ = abi.ConvertType
)
-type AutomationRegistryBase22OnchainConfig struct {
+type AutomationRegistryBase22OnchainConfigLegacy struct {
PaymentPremiumPPB uint32
FlatFeeMicroLink uint32
CheckGasLimit uint32
@@ -46,7 +46,6 @@ type AutomationRegistryBase22OnchainConfig struct {
Transcoder common.Address
Registrars []common.Address
UpkeepPrivilegeManager common.Address
- ReorgProtectionEnabled bool
}
type AutomationRegistryBase22State struct {
@@ -76,8 +75,8 @@ type AutomationRegistryBase22UpkeepInfo struct {
}
var AutomationRegistryLogicBMetaData = &bind.MetaData{
- ABI: "[{\"inputs\":[{\"internalType\":\"enumAutomationRegistryBase2_2.Mode\",\"name\":\"mode\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"link\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"linkNativeFeed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"fastGasFeed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"automationForwarderLogic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowedReadOnlyAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ArrayHasNoEntries\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotCancel\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CheckDataExceedsLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateEntry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasLimitCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasLimitOutsideRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfFaultyOracles\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidReport\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTrigger\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTriggerType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxCheckDataSizeCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxPerformDataSizeCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MigrationNotPermitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyActiveSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyActiveTransmitters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByLINKToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrRegistrar\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByProposedAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByProposedPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByUpkeepPrivilegeManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPausedUpkeep\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySimulatedBackend\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyUnpausedUpkeep\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ParameterLengthError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PaymentGreaterThanAllLINK\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RegistryPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RepeatedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RepeatedTransmitter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"TargetCheckReverted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyOracles\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TranscoderNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepCancelled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepNotCanceled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepNotNeeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValueNotChanged\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"privilegeConfig\",\"type\":\"bytes\"}],\"name\":\"AdminPrivilegeConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"CancelledUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"dedupKey\",\"type\":\"bytes32\"}],\"name\":\"DedupKeyAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"}],\"name\":\"FundsAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"FundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"InsufficientFundsUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"}],\"name\":\"OwnerFundsWithdrawn\",\"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\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"payees\",\"type\":\"address[]\"}],\"name\":\"PayeesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"PayeeshipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"PayeeshipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"}],\"name\":\"PaymentWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"ReorgedUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"StaleUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"UpkeepAdminTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"UpkeepAdminTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"atBlockHeight\",\"type\":\"uint64\"}],\"name\":\"UpkeepCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"newCheckData\",\"type\":\"bytes\"}],\"name\":\"UpkeepCheckDataSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"gasLimit\",\"type\":\"uint96\"}],\"name\":\"UpkeepGasLimitSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"UpkeepMigrated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepOffchainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"UpkeepPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"totalPayment\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasOverhead\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"UpkeepPerformed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"privilegeConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepPrivilegeConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startingBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"importedFrom\",\"type\":\"address\"}],\"name\":\"UpkeepReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"performGas\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"UpkeepRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"triggerConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepTriggerConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"UpkeepUnpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"}],\"name\":\"acceptPayeeship\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"acceptUpkeepAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxCount\",\"type\":\"uint256\"}],\"name\":\"getActiveUpkeepIDs\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"getAdminPrivilegeConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowedReadOnlyAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAutomationForwarderLogic\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getBalance\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"balance\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCancellationDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConditionalGasOverhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFastGasFeedAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepID\",\"type\":\"uint256\"}],\"name\":\"getForwarder\",\"outputs\":[{\"internalType\":\"contractIAutomationForwarder\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLinkAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLinkNativeFeedAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLogGasOverhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enumAutomationRegistryBase2_2.Trigger\",\"name\":\"triggerType\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"}],\"name\":\"getMaxPaymentForGas\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"maxPayment\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getMinBalance\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getMinBalanceForUpkeep\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"minBalance\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMode\",\"outputs\":[{\"internalType\":\"enumAutomationRegistryBase2_2.Mode\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"peer\",\"type\":\"address\"}],\"name\":\"getPeerRegistryMigrationPermission\",\"outputs\":[{\"internalType\":\"enumAutomationRegistryBase2_2.MigrationPermission\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPerPerformByteGasOverhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPerSignerGasOverhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"query\",\"type\":\"address\"}],\"name\":\"getSignerInfo\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"ownerLinkBalance\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"expectedLinkBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint96\",\"name\":\"totalPremium\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"numUpkeeps\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"latestConfigBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"latestConfigDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"latestEpoch\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"internalType\":\"structAutomationRegistryBase2_2.State\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"paymentPremiumPPB\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"flatFeeMicroLink\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"checkGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"stalenessSeconds\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"gasCeilingMultiplier\",\"type\":\"uint16\"},{\"internalType\":\"uint96\",\"name\":\"minUpkeepSpend\",\"type\":\"uint96\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxCheckDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxRevertDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"fallbackGasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fallbackLinkPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"transcoder\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"registrars\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"upkeepPrivilegeManager\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reorgProtectionEnabled\",\"type\":\"bool\"}],\"internalType\":\"structAutomationRegistryBase2_2.OnchainConfig\",\"name\":\"config\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"query\",\"type\":\"address\"}],\"name\":\"getTransmitterInfo\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"},{\"internalType\":\"uint96\",\"name\":\"balance\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"lastCollected\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepId\",\"type\":\"uint256\"}],\"name\":\"getTriggerType\",\"outputs\":[{\"internalType\":\"enumAutomationRegistryBase2_2.Trigger\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getUpkeep\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"performGas\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"checkData\",\"type\":\"bytes\"},{\"internalType\":\"uint96\",\"name\":\"balance\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"maxValidBlocknumber\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"lastPerformedBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"amountSpent\",\"type\":\"uint96\"},{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structAutomationRegistryBase2_2.UpkeepInfo\",\"name\":\"upkeepInfo\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepId\",\"type\":\"uint256\"}],\"name\":\"getUpkeepPrivilegeConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepId\",\"type\":\"uint256\"}],\"name\":\"getUpkeepTriggerConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dedupKey\",\"type\":\"bytes32\"}],\"name\":\"hasDedupKey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"pauseUpkeep\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"recoverFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"newPrivilegeConfig\",\"type\":\"bytes\"}],\"name\":\"setAdminPrivilegeConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"payees\",\"type\":\"address[]\"}],\"name\":\"setPayees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"peer\",\"type\":\"address\"},{\"internalType\":\"enumAutomationRegistryBase2_2.MigrationPermission\",\"name\":\"permission\",\"type\":\"uint8\"}],\"name\":\"setPeerRegistryMigrationPermission\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"newCheckData\",\"type\":\"bytes\"}],\"name\":\"setUpkeepCheckData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"}],\"name\":\"setUpkeepGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"name\":\"setUpkeepOffchainConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"newPrivilegeConfig\",\"type\":\"bytes\"}],\"name\":\"setUpkeepPrivilegeConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"proposed\",\"type\":\"address\"}],\"name\":\"transferPayeeship\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"proposed\",\"type\":\"address\"}],\"name\":\"transferUpkeepAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"unpauseUpkeep\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"upkeepTranscoderVersion\",\"outputs\":[{\"internalType\":\"enumUpkeepFormat\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"upkeepVersion\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdrawFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawOwnerFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdrawPayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
- Bin: "0x6101406040523480156200001257600080fd5b50604051620050aa380380620050aa8339810160408190526200003591620001f2565b8585858585853380600081620000925760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c557620000c5816200012a565b505050856002811115620000dd57620000dd62000278565b60e0816002811115620000f457620000f462000278565b9052506001600160a01b0394851660805292841660a05290831660c0528216610100521661012052506200028e95505050505050565b336001600160a01b03821603620001845760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000089565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0381168114620001ed57600080fd5b919050565b60008060008060008060c087890312156200020c57600080fd5b8651600381106200021c57600080fd5b95506200022c60208801620001d5565b94506200023c60408801620001d5565b93506200024c60608801620001d5565b92506200025c60808801620001d5565b91506200026c60a08801620001d5565b90509295509295509295565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05160e0516101005161012051614d866200032460003960006106ea015260006105920152600081816105300152818161343a015281816139bd0152613b500152600081816105ff015261322e01526000818161074d01526133080152600081816107db01528181611c9801528181611f6d015281816123d6015281816128e9015261296d0152614d866000f3fe608060405234801561001057600080fd5b50600436106103415760003560e01c806379ba5097116101bd578063b121e147116100f9578063ca30e603116100a2578063eb5dcd6c1161007c578063eb5dcd6c14610825578063ed56b3e114610838578063f2fde38b146108ab578063faa3e996146108be57600080fd5b8063ca30e603146107d9578063cd7f71b5146107ff578063d76326481461081257600080fd5b8063b657bc9c116100d3578063b657bc9c1461079e578063b79550be146107b1578063c7c3a19a146107b957600080fd5b8063b121e14714610771578063b148ab6b14610784578063b6511a2a1461079757600080fd5b80638dcf0fe711610166578063a72aa27e11610140578063a72aa27e14610721578063aab9edd614610734578063abc76ae014610743578063b10b673c1461074b57600080fd5b80638dcf0fe7146106d5578063a08714c0146106e8578063a710b2211461070e57600080fd5b80638456cb59116101975780638456cb591461069c5780638765ecbe146106a45780638da5cb5b146106b757600080fd5b806379ba50971461064957806379ea9943146106515780637d9b97e01461069457600080fd5b8063421d183b1161028c5780635165f2f5116102355780636209e1e91161020f5780636209e1e9146105ea5780636709d0e5146105fd578063671d36ed14610623578063744bfe611461063657600080fd5b80635165f2f51461057d5780635425d8ac146105905780635b6aa71c146105d757600080fd5b80634b4fd03b116102665780634b4fd03b1461052e5780634ca16c52146105545780635147cd591461055d57600080fd5b8063421d183b1461048557806344cb70b8146104eb57806348013d7b1461051e57600080fd5b80631a2af011116102ee578063232c1cc5116102c8578063232c1cc5146104635780633b9cce591461046a5780633f4ba83a1461047d57600080fd5b80631a2af011146103df5780631e010439146103f2578063207b65161461045057600080fd5b80631865c57d1161031f5780631865c57d14610393578063187256e8146103ac57806319d97a94146103bf57600080fd5b8063050ee65d1461034657806306e3b6321461035e5780630b7d33e61461037e575b600080fd5b6201adb05b6040519081526020015b60405180910390f35b61037161036c366004613edb565b610904565b6040516103559190613efd565b61039161038c366004613f8a565b610a21565b005b61039b610adb565b60405161035595949392919061419b565b6103916103ba3660046142d2565b610f3f565b6103d26103cd36600461430f565b610fb0565b6040516103559190614396565b6103916103ed3660046143a9565b611052565b61043361040036600461430f565b6000908152600460205260409020600101546c0100000000000000000000000090046bffffffffffffffffffffffff1690565b6040516bffffffffffffffffffffffff9091168152602001610355565b6103d261045e36600461430f565b611158565b601461034b565b6103916104783660046143ce565b611175565b6103916113cb565b610498610493366004614443565b611431565b60408051951515865260ff90941660208601526bffffffffffffffffffffffff9283169385019390935216606083015273ffffffffffffffffffffffffffffffffffffffff16608082015260a001610355565b61050e6104f936600461430f565b60009081526008602052604090205460ff1690565b6040519015158152602001610355565b60005b604051610355919061449f565b7f0000000000000000000000000000000000000000000000000000000000000000610521565b62015f9061034b565b61057061056b36600461430f565b611550565b60405161035591906144b2565b61039161058b36600461430f565b61155b565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610355565b6104336105e53660046144df565b6116d2565b6103d26105f8366004614443565b61186a565b7f00000000000000000000000000000000000000000000000000000000000000006105b2565b610391610631366004614518565b61189e565b6103916106443660046143a9565b611978565b610391611d93565b6105b261065f36600461430f565b6000908152600460205260409020546901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1690565b610391611e95565b610391611ff0565b6103916106b236600461430f565b612071565b60005473ffffffffffffffffffffffffffffffffffffffff166105b2565b6103916106e3366004613f8a565b6121eb565b7f00000000000000000000000000000000000000000000000000000000000000006105b2565b61039161071c366004614554565b612240565b61039161072f366004614582565b6124a8565b60405160038152602001610355565b611d4c61034b565b7f00000000000000000000000000000000000000000000000000000000000000006105b2565b61039161077f366004614443565b61259d565b61039161079236600461430f565b612695565b603261034b565b6104336107ac36600461430f565b612883565b6103916128b0565b6107cc6107c736600461430f565b612a0c565b60405161035591906145a5565b7f00000000000000000000000000000000000000000000000000000000000000006105b2565b61039161080d366004613f8a565b612ddf565b61043361082036600461430f565b612e76565b610391610833366004614554565b612e81565b610892610846366004614443565b73ffffffffffffffffffffffffffffffffffffffff166000908152600c602090815260409182902082518084019093525460ff8082161515808552610100909204169290910182905291565b60408051921515835260ff909116602083015201610355565b6103916108b9366004614443565b612fdf565b6108f76108cc366004614443565b73ffffffffffffffffffffffffffffffffffffffff166000908152601a602052604090205460ff1690565b60405161035591906146dc565b606060006109126002612ff3565b905080841061094d576040517f1390f2a100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610959848661471f565b905081811180610967575083155b6109715780610973565b815b905060006109818683614732565b67ffffffffffffffff81111561099957610999614745565b6040519080825280602002602001820160405280156109c2578160200160208202803683370190505b50905060005b8151811015610a15576109e66109de888361471f565b600290612ffd565b8282815181106109f8576109f8614774565b602090810291909101015280610a0d816147a3565b9150506109c8565b50925050505b92915050565b6016546c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a82576040517f77c3599200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152601d60205260409020610a9b82848361487d565b50827f2fd8d70753a007014349d4591843cc031c2dd7a260d7dd82eca8253686ae77698383604051610ace929190614998565b60405180910390a2505050565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810191909152604080516102008101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082018390526101408201839052610160820183905261018082018390526101a08201526101c081018290526101e0810191909152604080516101408101825260155463ffffffff7401000000000000000000000000000000000000000082041682526bffffffffffffffffffffffff90811660208301526019549282019290925260125490911660608281019190915290819060009060808101610c1c6002612ff3565b8152601554780100000000000000000000000000000000000000000000000080820463ffffffff9081166020808601919091527c01000000000000000000000000000000000000000000000000000000008404821660408087019190915260115460608088019190915260125474010000000000000000000000000000000000000000810485166080808a01919091527e01000000000000000000000000000000000000000000000000000000000000820460ff16151560a0998a01528351610200810185526c0100000000000000000000000080840488168252700100000000000000000000000000000000808504891697830197909752808a0488169582019590955296820462ffffff16928701929092527b01000000000000000000000000000000000000000000000000000000900461ffff16908501526014546bffffffffffffffffffffffff8116968501969096529304811660c083015260165480821660e08401526401000000008104821661010084015268010000000000000000900416610120820152601754610140820152601854610160820152910473ffffffffffffffffffffffffffffffffffffffff166101808201529095506101a08101610de96009613010565b81526016546c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1660208083019190915260135460ff9081161515604093840152601254600d80548551818602810186019096528086529599508a958a959194600e947d01000000000000000000000000000000000000000000000000000000000090940490931692859190830182828015610ebe57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610e93575b5050505050925081805480602002602001604051908101604052809291908181526020018280548015610f2757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610efc575b50505050509150945094509450945094509091929394565b610f4761301d565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601a6020526040902080548291907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001836003811115610fa757610fa7614460565b02179055505050565b6000818152601d60205260409020805460609190610fcd906147db565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff9906147db565b80156110465780601f1061101b57610100808354040283529160200191611046565b820191906000526020600020905b81548152906001019060200180831161102957829003601f168201915b50505050509050919050565b61105b826130a0565b3373ffffffffffffffffffffffffffffffffffffffff8216036110aa576040517f8c8728c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604090205473ffffffffffffffffffffffffffffffffffffffff8281169116146111545760008281526006602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff851690811790915590519091339185917fb1cbb2c4b8480034c27e06da5f096b8233a8fd4497028593a41ff6df79726b3591a45b5050565b6000818152601b60205260409020805460609190610fcd906147db565b61117d61301d565b600e5481146111b8576040517fcf54c06a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b600e5481101561138a576000600e82815481106111da576111da614774565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff908116808452600f9092526040832054919350169085858581811061122457611224614774565b90506020020160208101906112399190614443565b905073ffffffffffffffffffffffffffffffffffffffff811615806112cc575073ffffffffffffffffffffffffffffffffffffffff8216158015906112aa57508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156112cc575073ffffffffffffffffffffffffffffffffffffffff81811614155b15611303576040517fb387a23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff818116146113745773ffffffffffffffffffffffffffffffffffffffff8381166000908152600f6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b5050508080611382906147a3565b9150506111bb565b507fa46de38886467c59be07a0675f14781206a5477d871628af46c2443822fcb725600e83836040516113bf939291906149e5565b60405180910390a15050565b6113d361301d565b601280547fff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600b602090815260408083208151608081018352905460ff80821615801584526101008304909116948301949094526bffffffffffffffffffffffff6201000082048116938301939093526e0100000000000000000000000000009004909116606082015282918291829182919082906114f75760608201516012546000916114e3916bffffffffffffffffffffffff16614a97565b600e549091506114f39082614aeb565b9150505b81516020830151604084015161150e908490614b16565b6060949094015173ffffffffffffffffffffffffffffffffffffffff9a8b166000908152600f6020526040902054929b919a9499509750921694509092505050565b6000610a1b82613154565b611564816130a0565b600081815260046020908152604091829020825160e081018452815460ff8116151580835263ffffffff610100830481169584019590955265010000000000820485169583019590955273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009091041660608201526001909101546bffffffffffffffffffffffff80821660808401526c0100000000000000000000000082041660a08301527801000000000000000000000000000000000000000000000000900490911660c082015290611663576040517f1b88a78400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556116a26002836131ff565b5060405182907f7bada562044eb163f6b4003c4553e4e62825344c0418eea087bed5ee05a4745690600090a25050565b60408051610140810182526012546bffffffffffffffffffffffff8116825263ffffffff6c010000000000000000000000008204811660208401527001000000000000000000000000000000008204811693830193909352740100000000000000000000000000000000000000008104909216606082015262ffffff7801000000000000000000000000000000000000000000000000830416608082015261ffff7b0100000000000000000000000000000000000000000000000000000083041660a082015260ff7d0100000000000000000000000000000000000000000000000000000000008304811660c08301527e0100000000000000000000000000000000000000000000000000000000000083048116151560e08301527f010000000000000000000000000000000000000000000000000000000000000090920482161515610100820152601354909116151561012082015260009081806118378361320b565b91509150611860838787601460020160049054906101000a900463ffffffff16868660006133e9565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601e60205260409020805460609190610fcd906147db565b6016546c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146118ff576040517f77c3599200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152601e6020526040902061192f82848361487d565b508273ffffffffffffffffffffffffffffffffffffffff167f7c44b4eb59ee7873514e7e43e7718c269d872965938b288aa143befca62f99d28383604051610ace929190614998565b6012547f0100000000000000000000000000000000000000000000000000000000000000900460ff16156119d8576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601280547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017905573ffffffffffffffffffffffffffffffffffffffff8116611a6e576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600460209081526040808320815160e081018352815460ff81161515825263ffffffff610100820481168387015265010000000000820481168386015273ffffffffffffffffffffffffffffffffffffffff6901000000000000000000909204821660608401526001909301546bffffffffffffffffffffffff80821660808501526c0100000000000000000000000082041660a08401527801000000000000000000000000000000000000000000000000900490921660c082015286855260059093529220549091163314611b75576040517fa47c170600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7d613434565b816040015163ffffffff161115611bc0576040517fff84e5dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152600460205260409020600101546019546c010000000000000000000000009091046bffffffffffffffffffffffff1690611c00908290614732565b60195560008481526004602081905260409182902060010180547fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff16905590517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116928201929092526bffffffffffffffffffffffff831660248201527f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303816000875af1158015611ce3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d079190614b3b565b50604080516bffffffffffffffffffffffff8316815273ffffffffffffffffffffffffffffffffffffffff8516602082015285917ff3b5906e5672f3e524854103bcafbbdba80dbdfeca2c35e116127b1060a68318910160405180910390a25050601280547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690555050565b60015473ffffffffffffffffffffffffffffffffffffffff163314611e19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b611e9d61301d565b6015546019546bffffffffffffffffffffffff90911690611ebf908290614732565b601955601580547fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001690556040516bffffffffffffffffffffffff821681527f1d07d0b0be43d3e5fee41a80b579af370affee03fa595bf56d5d4c19328162f19060200160405180910390a16040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526bffffffffffffffffffffffff821660248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044015b6020604051808303816000875af1158015611fcc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111549190614b3b565b611ff861301d565b601280547fff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611427565b61207a816130a0565b600081815260046020908152604091829020825160e081018452815460ff8116158015835263ffffffff610100830481169584019590955265010000000000820485169583019590955273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009091041660608201526001909101546bffffffffffffffffffffffff80821660808401526c0100000000000000000000000082041660a08301527801000000000000000000000000000000000000000000000000900490911660c082015290612179576040517f514b6c2400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556121bb6002836134e9565b5060405182907f8ab10247ce168c27748e656ecf852b951fcaac790c18106b19aa0ae57a8b741f90600090a25050565b6121f4836130a0565b6000838152601c6020526040902061220d82848361487d565b50827f3e8740446213c8a77d40e08f79136ce3f347d13ed270a6ebdf57159e0faf48508383604051610ace929190614998565b73ffffffffffffffffffffffffffffffffffffffff811661228d576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600f60205260409020541633146122ed576040517fcebf515b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601254600e546000916123109185916bffffffffffffffffffffffff16906134f5565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600b6020526040902080547fffffffffffffffffffffffffffffffffffff000000000000000000000000ffff16905560195490915061237a906bffffffffffffffffffffffff831690614732565b6019556040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526bffffffffffffffffffffffff831660248301527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af115801561241f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124439190614b3b565b5060405133815273ffffffffffffffffffffffffffffffffffffffff808416916bffffffffffffffffffffffff8416918616907f9819093176a1851202c7bcfa46845809b4e47c261866550e94ed3775d2f406989060200160405180910390a4505050565b6108fc8163ffffffff1610806124dd575060155463ffffffff7001000000000000000000000000000000009091048116908216115b15612514576040517f14c237fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61251d826130a0565b60008281526004602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff1661010063ffffffff861690810291909117909155915191825283917fc24c07e655ce79fba8a589778987d3c015bc6af1632bb20cf9182e02a65d972c910160405180910390a25050565b73ffffffffffffffffffffffffffffffffffffffff8181166000908152601060205260409020541633146125fd576040517f6752e7aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8181166000818152600f602090815260408083208054337fffffffffffffffffffffffff000000000000000000000000000000000000000080831682179093556010909452828520805490921690915590519416939092849290917f78af32efdcad432315431e9b03d27e6cd98fb79c405fdc5af7c1714d9c0f75b39190a45050565b600081815260046020908152604091829020825160e081018452815460ff81161515825263ffffffff6101008204811694830194909452650100000000008104841694820185905273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009091041660608201526001909101546bffffffffffffffffffffffff80821660808401526c0100000000000000000000000082041660a083015278010000000000000000000000000000000000000000000000009004821660c08201529114612792576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604090205473ffffffffffffffffffffffffffffffffffffffff1633146127ef576040517f6352a85300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602090815260408083208054337fffffffffffffffffffffffff0000000000000000000000000000000000000000808316821790935560069094528285208054909216909155905173ffffffffffffffffffffffffffffffffffffffff90911692839186917f5cff4db96bef051785e999f44bfcd21c18823e034fb92dd376e3db4ce0feeb2c91a4505050565b6000610a1b61289183613154565b600084815260046020526040902054610100900463ffffffff166116d2565b6128b861301d565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015612945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129699190614b5d565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33601954846129b69190614732565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401611fad565b604080516101408101825260008082526020820181905260609282018390528282018190526080820181905260a0820181905260c0820181905260e082018190526101008201526101208101919091526000828152600460209081526040808320815160e081018352815460ff811615158252610100810463ffffffff90811695830195909552650100000000008104851693820193909352690100000000000000000090920473ffffffffffffffffffffffffffffffffffffffff16606083018190526001909101546bffffffffffffffffffffffff80821660808501526c0100000000000000000000000082041660a08401527801000000000000000000000000000000000000000000000000900490921660c0820152919015612ba457816060015173ffffffffffffffffffffffffffffffffffffffff1663f00e6a2a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9f9190614b76565b612ba7565b60005b90506040518061014001604052808273ffffffffffffffffffffffffffffffffffffffff168152602001836020015163ffffffff168152602001600760008781526020019081526020016000208054612bff906147db565b80601f0160208091040260200160405190810160405280929190818152602001828054612c2b906147db565b8015612c785780601f10612c4d57610100808354040283529160200191612c78565b820191906000526020600020905b815481529060010190602001808311612c5b57829003601f168201915b505050505081526020018360a001516bffffffffffffffffffffffff1681526020016005600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001836040015163ffffffff1667ffffffffffffffff1681526020018360c0015163ffffffff16815260200183608001516bffffffffffffffffffffffff168152602001836000015115158152602001601c60008781526020019081526020016000208054612d55906147db565b80601f0160208091040260200160405190810160405280929190818152602001828054612d81906147db565b8015612dce5780601f10612da357610100808354040283529160200191612dce565b820191906000526020600020905b815481529060010190602001808311612db157829003601f168201915b505050505081525092505050919050565b612de8836130a0565b60165463ffffffff16811115612e2a576040517fae7235df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152600760205260409020612e4382848361487d565b50827fcba2d5723b2ee59e53a8e8a82a4a7caf4fdfe70e9f7c582950bf7e7a5c24e83d8383604051610ace929190614998565b6000610a1b82612883565b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600f6020526040902054163314612ee1576040517fcebf515b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff821603612f30576040517f8c8728c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8281166000908152601060205260409020548116908216146111545773ffffffffffffffffffffffffffffffffffffffff82811660008181526010602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169486169485179055513392917f84f7c7c80bb8ed2279b4aab5f61cd05e6374073d38f46d7f32de8c30e9e3836791a45050565b612fe761301d565b612ff0816136fd565b50565b6000610a1b825490565b600061300983836137f2565b9392505050565b606060006130098361381c565b60005473ffffffffffffffffffffffffffffffffffffffff16331461309e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401611e10565b565b60008181526005602052604090205473ffffffffffffffffffffffffffffffffffffffff1633146130fd576040517fa47c170600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008181526004602052604090205465010000000000900463ffffffff90811614612ff0576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818160045b600f8110156131e1577fff00000000000000000000000000000000000000000000000000000000000000821683826020811061319957613199614774565b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146131cf57506000949350505050565b806131d9816147a3565b91505061315b565b5081600f1a60018111156131f7576131f7614460565b949350505050565b60006130098383613877565b6000806000836080015162ffffff1690506000808263ffffffff161190506000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015613297573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132bb9190614bad565b50945090925050506000811315806132d257508142105b806132f357508280156132f357506132ea8242614732565b8463ffffffff16105b15613302576017549550613306565b8095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015613371573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133959190614bad565b50945090925050506000811315806133ac57508142105b806133cd57508280156133cd57506133c48242614732565b8463ffffffff16105b156133dc5760185494506133e0565b8094505b50505050915091565b6000806133fb88878b60c001516138c6565b90506000806134168b8a63ffffffff16858a8a60018b613988565b90925090506134258183614b16565b9b9a5050505050505050505050565b600060017f0000000000000000000000000000000000000000000000000000000000000000600281111561346a5761346a614460565b036134e457606473ffffffffffffffffffffffffffffffffffffffff1663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134df9190614b5d565b905090565b504390565b60006130098383613de1565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600b602090815260408083208151608081018352905460ff80821615801584526101008304909116948301949094526bffffffffffffffffffffffff6201000082048116938301939093526e01000000000000000000000000000090049091166060820152906136f157600081606001518561358d9190614a97565b9050600061359b8583614aeb565b905080836040018181516135af9190614b16565b6bffffffffffffffffffffffff169052506135ca8582614bfd565b836060018181516135db9190614b16565b6bffffffffffffffffffffffff90811690915273ffffffffffffffffffffffffffffffffffffffff89166000908152600b602090815260409182902087518154928901519389015160608a015186166e010000000000000000000000000000027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff919096166201000002167fffffffffffff000000000000000000000000000000000000000000000000ffff60ff95909516610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909416939093171792909216179190911790555050505b60400151949350505050565b3373ffffffffffffffffffffffffffffffffffffffff82160361377c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401611e10565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600082600001828154811061380957613809614774565b9060005260206000200154905092915050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561104657602002820191906000526020600020905b8154815260200190600101908083116138585750505050509050919050565b60008181526001830160205260408120546138be57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610a1b565b506000610a1b565b600080808560018111156138dc576138dc614460565b036138eb575062015f90613940565b60018560018111156138ff576138ff614460565b0361390e57506201adb0613940565b6040517ff2b2d41200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61395163ffffffff85166014614c2d565b61395c846001614c44565b61396b9060ff16611d4c614c2d565b613975908361471f565b61397f919061471f565b95945050505050565b60008060008960a0015161ffff16876139a19190614c2d565b90508380156139af5750803a105b156139b757503a5b600060027f000000000000000000000000000000000000000000000000000000000000000060028111156139ed576139ed614460565b03613b4c576040805160008152602081019091528515613a4b57600036604051806080016040528060488152602001614d3260489139604051602001613a3593929190614c5d565b6040516020818303038152906040529050613ab3565b601654613a6790640100000000900463ffffffff166004614c84565b63ffffffff1667ffffffffffffffff811115613a8557613a85614745565b6040519080825280601f01601f191660200182016040528015613aaf576020820181803683370190505b5090505b6040517f49948e0e00000000000000000000000000000000000000000000000000000000815273420000000000000000000000000000000000000f906349948e0e90613b03908490600401614396565b602060405180830381865afa158015613b20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b449190614b5d565b915050613ca6565b60017f00000000000000000000000000000000000000000000000000000000000000006002811115613b8057613b80614460565b03613ca6578415613c0257606c73ffffffffffffffffffffffffffffffffffffffff1663c6f7de0e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bfb9190614b5d565b9050613ca6565b6000606c73ffffffffffffffffffffffffffffffffffffffff166341b247a86040518163ffffffff1660e01b815260040160c060405180830381865afa158015613c50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c749190614ca4565b5050601654929450613c9793505050640100000000900463ffffffff1682614c2d565b613ca2906010614c2d565b9150505b84613cc257808b60a0015161ffff16613cbf9190614c2d565b90505b613cd061ffff871682614cee565b905060008782613ce08c8e61471f565b613cea9086614c2d565b613cf4919061471f565b613d0690670de0b6b3a7640000614c2d565b613d109190614cee565b905060008c6040015163ffffffff1664e8d4a51000613d2f9190614c2d565b898e6020015163ffffffff16858f88613d489190614c2d565b613d52919061471f565b613d6090633b9aca00614c2d565b613d6a9190614c2d565b613d749190614cee565b613d7e919061471f565b90506b033b2e3c9fd0803ce8000000613d97828461471f565b1115613dcf576040517f2ad7547a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b909c909b509950505050505050505050565b60008181526001830160205260408120548015613eca576000613e05600183614732565b8554909150600090613e1990600190614732565b9050818114613e7e576000866000018281548110613e3957613e39614774565b9060005260206000200154905080876000018481548110613e5c57613e5c614774565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613e8f57613e8f614d02565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610a1b565b6000915050610a1b565b5092915050565b60008060408385031215613eee57600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b81811015613f3557835183529284019291840191600101613f19565b50909695505050505050565b60008083601f840112613f5357600080fd5b50813567ffffffffffffffff811115613f6b57600080fd5b602083019150836020828501011115613f8357600080fd5b9250929050565b600080600060408486031215613f9f57600080fd5b83359250602084013567ffffffffffffffff811115613fbd57600080fd5b613fc986828701613f41565b9497909650939450505050565b600081518084526020808501945080840160005b8381101561401c57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101613fea565b509495945050505050565b805163ffffffff1682526000610200602083015161404d602086018263ffffffff169052565b506040830151614065604086018263ffffffff169052565b50606083015161407c606086018262ffffff169052565b506080830151614092608086018261ffff169052565b5060a08301516140b260a08601826bffffffffffffffffffffffff169052565b5060c08301516140ca60c086018263ffffffff169052565b5060e08301516140e260e086018263ffffffff169052565b506101008381015163ffffffff908116918601919091526101208085015190911690850152610140808401519085015261016080840151908501526101808084015173ffffffffffffffffffffffffffffffffffffffff16908501526101a08084015181860183905261415783870182613fd6565b925050506101c0808401516141838287018273ffffffffffffffffffffffffffffffffffffffff169052565b50506101e09283015115159390920192909252919050565b855163ffffffff16815260006101c060208801516141c960208501826bffffffffffffffffffffffff169052565b506040880151604084015260608801516141f360608501826bffffffffffffffffffffffff169052565b506080880151608084015260a088015161421560a085018263ffffffff169052565b5060c088015161422d60c085018263ffffffff169052565b5060e088015160e0840152610100808901516142508286018263ffffffff169052565b505061012088810151151590840152610140830181905261427381840188614027565b90508281036101608401526142888187613fd6565b905082810361018084015261429d8186613fd6565b9150506118606101a083018460ff169052565b73ffffffffffffffffffffffffffffffffffffffff81168114612ff057600080fd5b600080604083850312156142e557600080fd5b82356142f0816142b0565b915060208301356004811061430457600080fd5b809150509250929050565b60006020828403121561432157600080fd5b5035919050565b60005b8381101561434357818101518382015260200161432b565b50506000910152565b60008151808452614364816020860160208601614328565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000613009602083018461434c565b600080604083850312156143bc57600080fd5b823591506020830135614304816142b0565b600080602083850312156143e157600080fd5b823567ffffffffffffffff808211156143f957600080fd5b818501915085601f83011261440d57600080fd5b81358181111561441c57600080fd5b8660208260051b850101111561443157600080fd5b60209290920196919550909350505050565b60006020828403121561445557600080fd5b8135613009816142b0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110612ff057612ff0614460565b602081016144ac8361448f565b91905290565b60208101600283106144ac576144ac614460565b803563ffffffff811681146144da57600080fd5b919050565b600080604083850312156144f257600080fd5b82356002811061450157600080fd5b915061450f602084016144c6565b90509250929050565b60008060006040848603121561452d57600080fd5b8335614538816142b0565b9250602084013567ffffffffffffffff811115613fbd57600080fd5b6000806040838503121561456757600080fd5b8235614572816142b0565b91506020830135614304816142b0565b6000806040838503121561459557600080fd5b8235915061450f602084016144c6565b602081526145cc60208201835173ffffffffffffffffffffffffffffffffffffffff169052565b600060208301516145e5604084018263ffffffff169052565b50604083015161014080606085015261460261016085018361434c565b9150606085015161462360808601826bffffffffffffffffffffffff169052565b50608085015173ffffffffffffffffffffffffffffffffffffffff811660a08601525060a085015167ffffffffffffffff811660c08601525060c085015163ffffffff811660e08601525060e085015161010061468f818701836bffffffffffffffffffffffff169052565b86015190506101206146a48682018315159052565b8601518584037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001838701529050611860838261434c565b60208101600483106144ac576144ac614460565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610a1b57610a1b6146f0565b81810381811115610a1b57610a1b6146f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036147d4576147d46146f0565b5060010190565b600181811c908216806147ef57607f821691505b602082108103614828577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561487857600081815260208120601f850160051c810160208610156148555750805b601f850160051c820191505b8181101561487457828155600101614861565b5050505b505050565b67ffffffffffffffff83111561489557614895614745565b6148a9836148a383546147db565b8361482e565b6000601f8411600181146148fb57600085156148c55750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355614991565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b8281101561494a578685013582556020948501946001909201910161492a565b5086821015614985577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b6000604082016040835280865480835260608501915087600052602092508260002060005b82811015614a3c57815473ffffffffffffffffffffffffffffffffffffffff1684529284019260019182019101614a0a565b505050838103828501528481528590820160005b86811015614a8b578235614a63816142b0565b73ffffffffffffffffffffffffffffffffffffffff1682529183019190830190600101614a50565b50979650505050505050565b6bffffffffffffffffffffffff828116828216039080821115613ed457613ed46146f0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006bffffffffffffffffffffffff80841680614b0a57614b0a614abc565b92169190910492915050565b6bffffffffffffffffffffffff818116838216019080821115613ed457613ed46146f0565b600060208284031215614b4d57600080fd5b8151801515811461300957600080fd5b600060208284031215614b6f57600080fd5b5051919050565b600060208284031215614b8857600080fd5b8151613009816142b0565b805169ffffffffffffffffffff811681146144da57600080fd5b600080600080600060a08688031215614bc557600080fd5b614bce86614b93565b9450602086015193506040860151925060608601519150614bf160808701614b93565b90509295509295909350565b6bffffffffffffffffffffffff818116838216028082169190828114614c2557614c256146f0565b505092915050565b8082028115828204841417610a1b57610a1b6146f0565b60ff8181168382160190811115610a1b57610a1b6146f0565b828482376000838201600081528351614c7a818360208801614328565b0195945050505050565b63ffffffff818116838216028082169190828114614c2557614c256146f0565b60008060008060008060c08789031215614cbd57600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b600082614cfd57614cfd614abc565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe307866666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666a164736f6c6343000813000a",
+ ABI: "[{\"inputs\":[{\"internalType\":\"enumAutomationRegistryBase2_2.Mode\",\"name\":\"mode\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"link\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"linkNativeFeed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"fastGasFeed\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"automationForwarderLogic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"allowedReadOnlyAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ArrayHasNoEntries\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotCancel\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CheckDataExceedsLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateEntry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasLimitCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasLimitOutsideRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfFaultyOracles\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidReport\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTrigger\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTriggerType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxCheckDataSizeCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxPerformDataSizeCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MigrationNotPermitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyActiveSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyActiveTransmitters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByLINKToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrRegistrar\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByProposedAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByProposedPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByUpkeepPrivilegeManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPausedUpkeep\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySimulatedBackend\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyUnpausedUpkeep\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ParameterLengthError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PaymentGreaterThanAllLINK\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RegistryPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RepeatedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RepeatedTransmitter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"TargetCheckReverted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyOracles\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TranscoderNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepCancelled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepNotCanceled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepNotNeeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValueNotChanged\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"privilegeConfig\",\"type\":\"bytes\"}],\"name\":\"AdminPrivilegeConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"CancelledUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"dedupKey\",\"type\":\"bytes32\"}],\"name\":\"DedupKeyAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"}],\"name\":\"FundsAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"FundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"InsufficientFundsUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"}],\"name\":\"OwnerFundsWithdrawn\",\"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\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"payees\",\"type\":\"address[]\"}],\"name\":\"PayeesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"PayeeshipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"PayeeshipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"}],\"name\":\"PaymentWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"ReorgedUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"StaleUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"UpkeepAdminTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"UpkeepAdminTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"atBlockHeight\",\"type\":\"uint64\"}],\"name\":\"UpkeepCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"newCheckData\",\"type\":\"bytes\"}],\"name\":\"UpkeepCheckDataSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"gasLimit\",\"type\":\"uint96\"}],\"name\":\"UpkeepGasLimitSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"UpkeepMigrated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepOffchainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"UpkeepPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"totalPayment\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasOverhead\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"UpkeepPerformed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"privilegeConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepPrivilegeConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startingBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"importedFrom\",\"type\":\"address\"}],\"name\":\"UpkeepReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"performGas\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"UpkeepRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"triggerConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepTriggerConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"UpkeepUnpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"}],\"name\":\"acceptPayeeship\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"acceptUpkeepAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxCount\",\"type\":\"uint256\"}],\"name\":\"getActiveUpkeepIDs\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"getAdminPrivilegeConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllowedReadOnlyAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAutomationForwarderLogic\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getBalance\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"balance\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCancellationDelay\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConditionalGasOverhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFastGasFeedAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepID\",\"type\":\"uint256\"}],\"name\":\"getForwarder\",\"outputs\":[{\"internalType\":\"contractIAutomationForwarder\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLinkAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLinkNativeFeedAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLogGasOverhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enumAutomationRegistryBase2_2.Trigger\",\"name\":\"triggerType\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"}],\"name\":\"getMaxPaymentForGas\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"maxPayment\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getMinBalance\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getMinBalanceForUpkeep\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"minBalance\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMode\",\"outputs\":[{\"internalType\":\"enumAutomationRegistryBase2_2.Mode\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"peer\",\"type\":\"address\"}],\"name\":\"getPeerRegistryMigrationPermission\",\"outputs\":[{\"internalType\":\"enumAutomationRegistryBase2_2.MigrationPermission\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPerPerformByteGasOverhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPerSignerGasOverhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReorgProtectionEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"reorgProtectionEnabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"query\",\"type\":\"address\"}],\"name\":\"getSignerInfo\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nonce\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"ownerLinkBalance\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"expectedLinkBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint96\",\"name\":\"totalPremium\",\"type\":\"uint96\"},{\"internalType\":\"uint256\",\"name\":\"numUpkeeps\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"latestConfigBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"latestConfigDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"latestEpoch\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"internalType\":\"structAutomationRegistryBase2_2.State\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"paymentPremiumPPB\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"flatFeeMicroLink\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"checkGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"stalenessSeconds\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"gasCeilingMultiplier\",\"type\":\"uint16\"},{\"internalType\":\"uint96\",\"name\":\"minUpkeepSpend\",\"type\":\"uint96\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxCheckDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxRevertDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"fallbackGasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fallbackLinkPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"transcoder\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"registrars\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"upkeepPrivilegeManager\",\"type\":\"address\"}],\"internalType\":\"structAutomationRegistryBase2_2.OnchainConfigLegacy\",\"name\":\"config\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"query\",\"type\":\"address\"}],\"name\":\"getTransmitterInfo\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"},{\"internalType\":\"uint96\",\"name\":\"balance\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"lastCollected\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepId\",\"type\":\"uint256\"}],\"name\":\"getTriggerType\",\"outputs\":[{\"internalType\":\"enumAutomationRegistryBase2_2.Trigger\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getUpkeep\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"performGas\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"checkData\",\"type\":\"bytes\"},{\"internalType\":\"uint96\",\"name\":\"balance\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"maxValidBlocknumber\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"lastPerformedBlockNumber\",\"type\":\"uint32\"},{\"internalType\":\"uint96\",\"name\":\"amountSpent\",\"type\":\"uint96\"},{\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structAutomationRegistryBase2_2.UpkeepInfo\",\"name\":\"upkeepInfo\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepId\",\"type\":\"uint256\"}],\"name\":\"getUpkeepPrivilegeConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepId\",\"type\":\"uint256\"}],\"name\":\"getUpkeepTriggerConfig\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"dedupKey\",\"type\":\"bytes32\"}],\"name\":\"hasDedupKey\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"pauseUpkeep\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"recoverFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"newPrivilegeConfig\",\"type\":\"bytes\"}],\"name\":\"setAdminPrivilegeConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"payees\",\"type\":\"address[]\"}],\"name\":\"setPayees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"peer\",\"type\":\"address\"},{\"internalType\":\"enumAutomationRegistryBase2_2.MigrationPermission\",\"name\":\"permission\",\"type\":\"uint8\"}],\"name\":\"setPeerRegistryMigrationPermission\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"newCheckData\",\"type\":\"bytes\"}],\"name\":\"setUpkeepCheckData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"gasLimit\",\"type\":\"uint32\"}],\"name\":\"setUpkeepGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"name\":\"setUpkeepOffchainConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"upkeepId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"newPrivilegeConfig\",\"type\":\"bytes\"}],\"name\":\"setUpkeepPrivilegeConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"proposed\",\"type\":\"address\"}],\"name\":\"transferPayeeship\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"proposed\",\"type\":\"address\"}],\"name\":\"transferUpkeepAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"unpauseUpkeep\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"upkeepTranscoderVersion\",\"outputs\":[{\"internalType\":\"enumUpkeepFormat\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"upkeepVersion\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdrawFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawOwnerFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"withdrawPayment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
+ Bin: "0x6101406040523480156200001257600080fd5b5060405162005094380380620050948339810160408190526200003591620001f2565b8585858585853380600081620000925760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c557620000c5816200012a565b505050856002811115620000dd57620000dd62000278565b60e0816002811115620000f457620000f462000278565b9052506001600160a01b0394851660805292841660a05290831660c0528216610100521661012052506200028e95505050505050565b336001600160a01b03821603620001845760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000089565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0381168114620001ed57600080fd5b919050565b60008060008060008060c087890312156200020c57600080fd5b8651600381106200021c57600080fd5b95506200022c60208801620001d5565b94506200023c60408801620001d5565b93506200024c60608801620001d5565b92506200025c60808801620001d5565b91506200026c60a08801620001d5565b90509295509295509295565b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05160e0516101005161012051614d706200032460003960006106fc015260006105a401526000818161054201528181613432015281816139b50152613b48015260008181610611015261322601526000818161075f01526133000152600081816107ed01528181611c9001528181611f65015281816123ce015281816128e101526129650152614d706000f3fe608060405234801561001057600080fd5b506004361061034c5760003560e01c806379ba5097116101bd578063b121e147116100f9578063ca30e603116100a2578063eb5dcd6c1161007c578063eb5dcd6c14610837578063ed56b3e11461084a578063f2fde38b146108bd578063faa3e996146108d057600080fd5b8063ca30e603146107eb578063cd7f71b514610811578063d76326481461082457600080fd5b8063b657bc9c116100d3578063b657bc9c146107b0578063b79550be146107c3578063c7c3a19a146107cb57600080fd5b8063b121e14714610783578063b148ab6b14610796578063b6511a2a146107a957600080fd5b80638dcf0fe711610166578063a72aa27e11610140578063a72aa27e14610733578063aab9edd614610746578063abc76ae014610755578063b10b673c1461075d57600080fd5b80638dcf0fe7146106e7578063a08714c0146106fa578063a710b2211461072057600080fd5b80638456cb59116101975780638456cb59146106ae5780638765ecbe146106b65780638da5cb5b146106c957600080fd5b806379ba50971461065b57806379ea9943146106635780637d9b97e0146106a657600080fd5b806343cc055c1161028c5780635165f2f5116102355780636209e1e91161020f5780636209e1e9146105fc5780636709d0e51461060f578063671d36ed14610635578063744bfe611461064857600080fd5b80635165f2f51461058f5780635425d8ac146105a25780635b6aa71c146105e957600080fd5b80634b4fd03b116102665780634b4fd03b146105405780634ca16c52146105665780635147cd591461056f57600080fd5b806343cc055c146104f657806344cb70b81461050d57806348013d7b1461053057600080fd5b80631a2af011116102f9578063232c1cc5116102d3578063232c1cc51461046e5780633b9cce59146104755780633f4ba83a14610488578063421d183b1461049057600080fd5b80631a2af011146103ea5780631e010439146103fd578063207b65161461045b57600080fd5b80631865c57d1161032a5780631865c57d1461039e578063187256e8146103b757806319d97a94146103ca57600080fd5b8063050ee65d1461035157806306e3b632146103695780630b7d33e614610389575b600080fd5b6201adb05b6040519081526020015b60405180910390f35b61037c610377366004613ed3565b610916565b6040516103609190613ef5565b61039c610397366004613f82565b610a33565b005b6103a6610aed565b604051610360959493929190614185565b61039c6103c53660046142bc565b610f37565b6103dd6103d83660046142f9565b610fa8565b6040516103609190614380565b61039c6103f8366004614393565b61104a565b61043e61040b3660046142f9565b6000908152600460205260409020600101546c0100000000000000000000000090046bffffffffffffffffffffffff1690565b6040516bffffffffffffffffffffffff9091168152602001610360565b6103dd6104693660046142f9565b611150565b6014610356565b61039c6104833660046143b8565b61116d565b61039c6113c3565b6104a361049e36600461442d565b611429565b60408051951515865260ff90941660208601526bffffffffffffffffffffffff9283169385019390935216606083015273ffffffffffffffffffffffffffffffffffffffff16608082015260a001610360565b60135460ff165b6040519015158152602001610360565b6104fd61051b3660046142f9565b60009081526008602052604090205460ff1690565b60005b6040516103609190614489565b7f0000000000000000000000000000000000000000000000000000000000000000610533565b62015f90610356565b61058261057d3660046142f9565b611548565b604051610360919061449c565b61039c61059d3660046142f9565b611553565b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610360565b61043e6105f73660046144c9565b6116ca565b6103dd61060a36600461442d565b611862565b7f00000000000000000000000000000000000000000000000000000000000000006105c4565b61039c610643366004614502565b611896565b61039c610656366004614393565b611970565b61039c611d8b565b6105c46106713660046142f9565b6000908152600460205260409020546901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1690565b61039c611e8d565b61039c611fe8565b61039c6106c43660046142f9565b612069565b60005473ffffffffffffffffffffffffffffffffffffffff166105c4565b61039c6106f5366004613f82565b6121e3565b7f00000000000000000000000000000000000000000000000000000000000000006105c4565b61039c61072e36600461453e565b612238565b61039c61074136600461456c565b6124a0565b60405160038152602001610360565b611d4c610356565b7f00000000000000000000000000000000000000000000000000000000000000006105c4565b61039c61079136600461442d565b612595565b61039c6107a43660046142f9565b61268d565b6032610356565b61043e6107be3660046142f9565b61287b565b61039c6128a8565b6107de6107d93660046142f9565b612a04565b604051610360919061458f565b7f00000000000000000000000000000000000000000000000000000000000000006105c4565b61039c61081f366004613f82565b612dd7565b61043e6108323660046142f9565b612e6e565b61039c61084536600461453e565b612e79565b6108a461085836600461442d565b73ffffffffffffffffffffffffffffffffffffffff166000908152600c602090815260409182902082518084019093525460ff8082161515808552610100909204169290910182905291565b60408051921515835260ff909116602083015201610360565b61039c6108cb36600461442d565b612fd7565b6109096108de36600461442d565b73ffffffffffffffffffffffffffffffffffffffff166000908152601a602052604090205460ff1690565b60405161036091906146c6565b606060006109246002612feb565b905080841061095f576040517f1390f2a100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061096b8486614709565b905081811180610979575083155b6109835780610985565b815b90506000610993868361471c565b67ffffffffffffffff8111156109ab576109ab61472f565b6040519080825280602002602001820160405280156109d4578160200160208202803683370190505b50905060005b8151811015610a27576109f86109f08883614709565b600290612ff5565b828281518110610a0a57610a0a61475e565b602090810291909101015280610a1f8161478d565b9150506109da565b50925050505b92915050565b6016546c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610a94576040517f77c3599200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152601d60205260409020610aad828483614867565b50827f2fd8d70753a007014349d4591843cc031c2dd7a260d7dd82eca8253686ae77698383604051610ae0929190614982565b60405180910390a2505050565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810191909152604080516101e08101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082018390526101408201839052610160820183905261018082018390526101a08201526101c0810191909152604080516101408101825260155463ffffffff7401000000000000000000000000000000000000000082041682526bffffffffffffffffffffffff90811660208301526019549282019290925260125490911660608281019190915290819060009060808101610c266002612feb565b8152601554780100000000000000000000000000000000000000000000000080820463ffffffff9081166020808601919091527c01000000000000000000000000000000000000000000000000000000008404821660408087019190915260115460608088019190915260125474010000000000000000000000000000000000000000810485166080808a01919091527e01000000000000000000000000000000000000000000000000000000000000820460ff16151560a0998a015283516101e0810185526c0100000000000000000000000080840488168252700100000000000000000000000000000000808504891697830197909752808a0488169582019590955296820462ffffff16928701929092527b01000000000000000000000000000000000000000000000000000000900461ffff16908501526014546bffffffffffffffffffffffff8116968501969096529304811660c083015260165480821660e08401526401000000008104821661010084015268010000000000000000900416610120820152601754610140820152601854610160820152910473ffffffffffffffffffffffffffffffffffffffff166101808201529095506101a08101610df36009613008565b81526016546c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff16602091820152601254600d80546040805182860281018601909152818152949850899489949293600e937d01000000000000000000000000000000000000000000000000000000000090910460ff16928591830182828015610eb657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610e8b575b5050505050925081805480602002602001604051908101604052809291908181526020018280548015610f1f57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610ef4575b50505050509150945094509450945094509091929394565b610f3f613015565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601a6020526040902080548291907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001836003811115610f9f57610f9f61444a565b02179055505050565b6000818152601d60205260409020805460609190610fc5906147c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff1906147c5565b801561103e5780601f106110135761010080835404028352916020019161103e565b820191906000526020600020905b81548152906001019060200180831161102157829003601f168201915b50505050509050919050565b61105382613098565b3373ffffffffffffffffffffffffffffffffffffffff8216036110a2576040517f8c8728c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604090205473ffffffffffffffffffffffffffffffffffffffff82811691161461114c5760008281526006602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff851690811790915590519091339185917fb1cbb2c4b8480034c27e06da5f096b8233a8fd4497028593a41ff6df79726b3591a45b5050565b6000818152601b60205260409020805460609190610fc5906147c5565b611175613015565b600e5481146111b0576040517fcf54c06a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b600e54811015611382576000600e82815481106111d2576111d261475e565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff908116808452600f9092526040832054919350169085858581811061121c5761121c61475e565b9050602002016020810190611231919061442d565b905073ffffffffffffffffffffffffffffffffffffffff811615806112c4575073ffffffffffffffffffffffffffffffffffffffff8216158015906112a257508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156112c4575073ffffffffffffffffffffffffffffffffffffffff81811614155b156112fb576040517fb387a23800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8181161461136c5773ffffffffffffffffffffffffffffffffffffffff8381166000908152600f6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169183169190911790555b505050808061137a9061478d565b9150506111b3565b507fa46de38886467c59be07a0675f14781206a5477d871628af46c2443822fcb725600e83836040516113b7939291906149cf565b60405180910390a15050565b6113cb613015565b601280547fff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600b602090815260408083208151608081018352905460ff80821615801584526101008304909116948301949094526bffffffffffffffffffffffff6201000082048116938301939093526e0100000000000000000000000000009004909116606082015282918291829182919082906114ef5760608201516012546000916114db916bffffffffffffffffffffffff16614a81565b600e549091506114eb9082614ad5565b9150505b815160208301516040840151611506908490614b00565b6060949094015173ffffffffffffffffffffffffffffffffffffffff9a8b166000908152600f6020526040902054929b919a9499509750921694509092505050565b6000610a2d8261314c565b61155c81613098565b600081815260046020908152604091829020825160e081018452815460ff8116151580835263ffffffff610100830481169584019590955265010000000000820485169583019590955273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009091041660608201526001909101546bffffffffffffffffffffffff80821660808401526c0100000000000000000000000082041660a08301527801000000000000000000000000000000000000000000000000900490911660c08201529061165b576040517f1b88a78400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905561169a6002836131f7565b5060405182907f7bada562044eb163f6b4003c4553e4e62825344c0418eea087bed5ee05a4745690600090a25050565b60408051610140810182526012546bffffffffffffffffffffffff8116825263ffffffff6c010000000000000000000000008204811660208401527001000000000000000000000000000000008204811693830193909352740100000000000000000000000000000000000000008104909216606082015262ffffff7801000000000000000000000000000000000000000000000000830416608082015261ffff7b0100000000000000000000000000000000000000000000000000000083041660a082015260ff7d0100000000000000000000000000000000000000000000000000000000008304811660c08301527e0100000000000000000000000000000000000000000000000000000000000083048116151560e08301527f0100000000000000000000000000000000000000000000000000000000000000909204821615156101008201526013549091161515610120820152600090818061182f83613203565b91509150611858838787601460020160049054906101000a900463ffffffff16868660006133e1565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601e60205260409020805460609190610fc5906147c5565b6016546c01000000000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1633146118f7576040517f77c3599200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152601e60205260409020611927828483614867565b508273ffffffffffffffffffffffffffffffffffffffff167f7c44b4eb59ee7873514e7e43e7718c269d872965938b288aa143befca62f99d28383604051610ae0929190614982565b6012547f0100000000000000000000000000000000000000000000000000000000000000900460ff16156119d0576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601280547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017905573ffffffffffffffffffffffffffffffffffffffff8116611a66576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600460209081526040808320815160e081018352815460ff81161515825263ffffffff610100820481168387015265010000000000820481168386015273ffffffffffffffffffffffffffffffffffffffff6901000000000000000000909204821660608401526001909301546bffffffffffffffffffffffff80821660808501526c0100000000000000000000000082041660a08401527801000000000000000000000000000000000000000000000000900490921660c082015286855260059093529220549091163314611b6d576040517fa47c170600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7561342c565b816040015163ffffffff161115611bb8576040517fff84e5dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152600460205260409020600101546019546c010000000000000000000000009091046bffffffffffffffffffffffff1690611bf890829061471c565b60195560008481526004602081905260409182902060010180547fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff16905590517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116928201929092526bffffffffffffffffffffffff831660248201527f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303816000875af1158015611cdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cff9190614b25565b50604080516bffffffffffffffffffffffff8316815273ffffffffffffffffffffffffffffffffffffffff8516602082015285917ff3b5906e5672f3e524854103bcafbbdba80dbdfeca2c35e116127b1060a68318910160405180910390a25050601280547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1690555050565b60015473ffffffffffffffffffffffffffffffffffffffff163314611e11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b611e95613015565b6015546019546bffffffffffffffffffffffff90911690611eb790829061471c565b601955601580547fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001690556040516bffffffffffffffffffffffff821681527f1d07d0b0be43d3e5fee41a80b579af370affee03fa595bf56d5d4c19328162f19060200160405180910390a16040517fa9059cbb0000000000000000000000000000000000000000000000000000000081523360048201526bffffffffffffffffffffffff821660248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044015b6020604051808303816000875af1158015611fc4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114c9190614b25565b611ff0613015565b601280547fff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589060200161141f565b61207281613098565b600081815260046020908152604091829020825160e081018452815460ff8116158015835263ffffffff610100830481169584019590955265010000000000820485169583019590955273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009091041660608201526001909101546bffffffffffffffffffffffff80821660808401526c0100000000000000000000000082041660a08301527801000000000000000000000000000000000000000000000000900490911660c082015290612171576040517f514b6c2400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556121b36002836134e1565b5060405182907f8ab10247ce168c27748e656ecf852b951fcaac790c18106b19aa0ae57a8b741f90600090a25050565b6121ec83613098565b6000838152601c60205260409020612205828483614867565b50827f3e8740446213c8a77d40e08f79136ce3f347d13ed270a6ebdf57159e0faf48508383604051610ae0929190614982565b73ffffffffffffffffffffffffffffffffffffffff8116612285576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600f60205260409020541633146122e5576040517fcebf515b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601254600e546000916123089185916bffffffffffffffffffffffff16906134ed565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600b6020526040902080547fffffffffffffffffffffffffffffffffffff000000000000000000000000ffff169055601954909150612372906bffffffffffffffffffffffff83169061471c565b6019556040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301526bffffffffffffffffffffffff831660248301527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243b9190614b25565b5060405133815273ffffffffffffffffffffffffffffffffffffffff808416916bffffffffffffffffffffffff8416918616907f9819093176a1851202c7bcfa46845809b4e47c261866550e94ed3775d2f406989060200160405180910390a4505050565b6108fc8163ffffffff1610806124d5575060155463ffffffff7001000000000000000000000000000000009091048116908216115b1561250c576040517f14c237fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61251582613098565b60008281526004602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ff1661010063ffffffff861690810291909117909155915191825283917fc24c07e655ce79fba8a589778987d3c015bc6af1632bb20cf9182e02a65d972c910160405180910390a25050565b73ffffffffffffffffffffffffffffffffffffffff8181166000908152601060205260409020541633146125f5576040517f6752e7aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8181166000818152600f602090815260408083208054337fffffffffffffffffffffffff000000000000000000000000000000000000000080831682179093556010909452828520805490921690915590519416939092849290917f78af32efdcad432315431e9b03d27e6cd98fb79c405fdc5af7c1714d9c0f75b39190a45050565b600081815260046020908152604091829020825160e081018452815460ff81161515825263ffffffff6101008204811694830194909452650100000000008104841694820185905273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009091041660608201526001909101546bffffffffffffffffffffffff80821660808401526c0100000000000000000000000082041660a083015278010000000000000000000000000000000000000000000000009004821660c0820152911461278a576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604090205473ffffffffffffffffffffffffffffffffffffffff1633146127e7576040517f6352a85300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526005602090815260408083208054337fffffffffffffffffffffffff0000000000000000000000000000000000000000808316821790935560069094528285208054909216909155905173ffffffffffffffffffffffffffffffffffffffff90911692839186917f5cff4db96bef051785e999f44bfcd21c18823e034fb92dd376e3db4ce0feeb2c91a4505050565b6000610a2d6128898361314c565b600084815260046020526040902054610100900463ffffffff166116ca565b6128b0613015565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561293d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129619190614b47565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33601954846129ae919061471c565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401611fa5565b604080516101408101825260008082526020820181905260609282018390528282018190526080820181905260a0820181905260c0820181905260e082018190526101008201526101208101919091526000828152600460209081526040808320815160e081018352815460ff811615158252610100810463ffffffff90811695830195909552650100000000008104851693820193909352690100000000000000000090920473ffffffffffffffffffffffffffffffffffffffff16606083018190526001909101546bffffffffffffffffffffffff80821660808501526c0100000000000000000000000082041660a08401527801000000000000000000000000000000000000000000000000900490921660c0820152919015612b9c57816060015173ffffffffffffffffffffffffffffffffffffffff1663f00e6a2a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b979190614b60565b612b9f565b60005b90506040518061014001604052808273ffffffffffffffffffffffffffffffffffffffff168152602001836020015163ffffffff168152602001600760008781526020019081526020016000208054612bf7906147c5565b80601f0160208091040260200160405190810160405280929190818152602001828054612c23906147c5565b8015612c705780601f10612c4557610100808354040283529160200191612c70565b820191906000526020600020905b815481529060010190602001808311612c5357829003601f168201915b505050505081526020018360a001516bffffffffffffffffffffffff1681526020016005600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001836040015163ffffffff1667ffffffffffffffff1681526020018360c0015163ffffffff16815260200183608001516bffffffffffffffffffffffff168152602001836000015115158152602001601c60008781526020019081526020016000208054612d4d906147c5565b80601f0160208091040260200160405190810160405280929190818152602001828054612d79906147c5565b8015612dc65780601f10612d9b57610100808354040283529160200191612dc6565b820191906000526020600020905b815481529060010190602001808311612da957829003601f168201915b505050505081525092505050919050565b612de083613098565b60165463ffffffff16811115612e22576040517fae7235df00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152600760205260409020612e3b828483614867565b50827fcba2d5723b2ee59e53a8e8a82a4a7caf4fdfe70e9f7c582950bf7e7a5c24e83d8383604051610ae0929190614982565b6000610a2d8261287b565b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600f6020526040902054163314612ed9576040517fcebf515b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff821603612f28576040517f8c8728c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82811660009081526010602052604090205481169082161461114c5773ffffffffffffffffffffffffffffffffffffffff82811660008181526010602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169486169485179055513392917f84f7c7c80bb8ed2279b4aab5f61cd05e6374073d38f46d7f32de8c30e9e3836791a45050565b612fdf613015565b612fe8816136f5565b50565b6000610a2d825490565b600061300183836137ea565b9392505050565b6060600061300183613814565b60005473ffffffffffffffffffffffffffffffffffffffff163314613096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401611e08565b565b60008181526005602052604090205473ffffffffffffffffffffffffffffffffffffffff1633146130f5576040517fa47c170600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008181526004602052604090205465010000000000900463ffffffff90811614612fe8576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818160045b600f8110156131d9577fff0000000000000000000000000000000000000000000000000000000000000082168382602081106131915761319161475e565b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146131c757506000949350505050565b806131d18161478d565b915050613153565b5081600f1a60018111156131ef576131ef61444a565b949350505050565b6000613001838361386f565b6000806000836080015162ffffff1690506000808263ffffffff161190506000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561328f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b39190614b97565b50945090925050506000811315806132ca57508142105b806132eb57508280156132eb57506132e2824261471c565b8463ffffffff16105b156132fa5760175495506132fe565b8095505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015613369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338d9190614b97565b50945090925050506000811315806133a457508142105b806133c557508280156133c557506133bc824261471c565b8463ffffffff16105b156133d45760185494506133d8565b8094505b50505050915091565b6000806133f388878b60c001516138be565b905060008061340e8b8a63ffffffff16858a8a60018b613980565b909250905061341d8183614b00565b9b9a5050505050505050505050565b600060017f000000000000000000000000000000000000000000000000000000000000000060028111156134625761346261444a565b036134dc57606473ffffffffffffffffffffffffffffffffffffffff1663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d79190614b47565b905090565b504390565b60006130018383613dd9565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600b602090815260408083208151608081018352905460ff80821615801584526101008304909116948301949094526bffffffffffffffffffffffff6201000082048116938301939093526e01000000000000000000000000000090049091166060820152906136e95760008160600151856135859190614a81565b905060006135938583614ad5565b905080836040018181516135a79190614b00565b6bffffffffffffffffffffffff169052506135c28582614be7565b836060018181516135d39190614b00565b6bffffffffffffffffffffffff90811690915273ffffffffffffffffffffffffffffffffffffffff89166000908152600b602090815260409182902087518154928901519389015160608a015186166e010000000000000000000000000000027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff919096166201000002167fffffffffffff000000000000000000000000000000000000000000000000ffff60ff95909516610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909416939093171792909216179190911790555050505b60400151949350505050565b3373ffffffffffffffffffffffffffffffffffffffff821603613774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401611e08565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008260000182815481106138015761380161475e565b9060005260206000200154905092915050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561103e57602002820191906000526020600020905b8154815260200190600101908083116138505750505050509050919050565b60008181526001830160205260408120546138b657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610a2d565b506000610a2d565b600080808560018111156138d4576138d461444a565b036138e3575062015f90613938565b60018560018111156138f7576138f761444a565b0361390657506201adb0613938565b6040517ff2b2d41200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61394963ffffffff85166014614c17565b613954846001614c2e565b6139639060ff16611d4c614c17565b61396d9083614709565b6139779190614709565b95945050505050565b60008060008960a0015161ffff16876139999190614c17565b90508380156139a75750803a105b156139af57503a5b600060027f000000000000000000000000000000000000000000000000000000000000000060028111156139e5576139e561444a565b03613b44576040805160008152602081019091528515613a4357600036604051806080016040528060488152602001614d1c60489139604051602001613a2d93929190614c47565b6040516020818303038152906040529050613aab565b601654613a5f90640100000000900463ffffffff166004614c6e565b63ffffffff1667ffffffffffffffff811115613a7d57613a7d61472f565b6040519080825280601f01601f191660200182016040528015613aa7576020820181803683370190505b5090505b6040517f49948e0e00000000000000000000000000000000000000000000000000000000815273420000000000000000000000000000000000000f906349948e0e90613afb908490600401614380565b602060405180830381865afa158015613b18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b3c9190614b47565b915050613c9e565b60017f00000000000000000000000000000000000000000000000000000000000000006002811115613b7857613b7861444a565b03613c9e578415613bfa57606c73ffffffffffffffffffffffffffffffffffffffff1663c6f7de0e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bf39190614b47565b9050613c9e565b6000606c73ffffffffffffffffffffffffffffffffffffffff166341b247a86040518163ffffffff1660e01b815260040160c060405180830381865afa158015613c48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6c9190614c8e565b5050601654929450613c8f93505050640100000000900463ffffffff1682614c17565b613c9a906010614c17565b9150505b84613cba57808b60a0015161ffff16613cb79190614c17565b90505b613cc861ffff871682614cd8565b905060008782613cd88c8e614709565b613ce29086614c17565b613cec9190614709565b613cfe90670de0b6b3a7640000614c17565b613d089190614cd8565b905060008c6040015163ffffffff1664e8d4a51000613d279190614c17565b898e6020015163ffffffff16858f88613d409190614c17565b613d4a9190614709565b613d5890633b9aca00614c17565b613d629190614c17565b613d6c9190614cd8565b613d769190614709565b90506b033b2e3c9fd0803ce8000000613d8f8284614709565b1115613dc7576040517f2ad7547a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b909c909b509950505050505050505050565b60008181526001830160205260408120548015613ec2576000613dfd60018361471c565b8554909150600090613e119060019061471c565b9050818114613e76576000866000018281548110613e3157613e3161475e565b9060005260206000200154905080876000018481548110613e5457613e5461475e565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613e8757613e87614cec565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610a2d565b6000915050610a2d565b5092915050565b60008060408385031215613ee657600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b81811015613f2d57835183529284019291840191600101613f11565b50909695505050505050565b60008083601f840112613f4b57600080fd5b50813567ffffffffffffffff811115613f6357600080fd5b602083019150836020828501011115613f7b57600080fd5b9250929050565b600080600060408486031215613f9757600080fd5b83359250602084013567ffffffffffffffff811115613fb557600080fd5b613fc186828701613f39565b9497909650939450505050565b600081518084526020808501945080840160005b8381101561401457815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101613fe2565b509495945050505050565b805163ffffffff16825260006101e06020830151614045602086018263ffffffff169052565b50604083015161405d604086018263ffffffff169052565b506060830151614074606086018262ffffff169052565b50608083015161408a608086018261ffff169052565b5060a08301516140aa60a08601826bffffffffffffffffffffffff169052565b5060c08301516140c260c086018263ffffffff169052565b5060e08301516140da60e086018263ffffffff169052565b506101008381015163ffffffff908116918601919091526101208085015190911690850152610140808401519085015261016080840151908501526101808084015173ffffffffffffffffffffffffffffffffffffffff16908501526101a08084015181860183905261414f83870182613fce565b925050506101c08084015161417b8287018273ffffffffffffffffffffffffffffffffffffffff169052565b5090949350505050565b855163ffffffff16815260006101c060208801516141b360208501826bffffffffffffffffffffffff169052565b506040880151604084015260608801516141dd60608501826bffffffffffffffffffffffff169052565b506080880151608084015260a08801516141ff60a085018263ffffffff169052565b5060c088015161421760c085018263ffffffff169052565b5060e088015160e08401526101008089015161423a8286018263ffffffff169052565b505061012088810151151590840152610140830181905261425d8184018861401f565b90508281036101608401526142728187613fce565b90508281036101808401526142878186613fce565b9150506118586101a083018460ff169052565b73ffffffffffffffffffffffffffffffffffffffff81168114612fe857600080fd5b600080604083850312156142cf57600080fd5b82356142da8161429a565b91506020830135600481106142ee57600080fd5b809150509250929050565b60006020828403121561430b57600080fd5b5035919050565b60005b8381101561432d578181015183820152602001614315565b50506000910152565b6000815180845261434e816020860160208601614312565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006130016020830184614336565b600080604083850312156143a657600080fd5b8235915060208301356142ee8161429a565b600080602083850312156143cb57600080fd5b823567ffffffffffffffff808211156143e357600080fd5b818501915085601f8301126143f757600080fd5b81358181111561440657600080fd5b8660208260051b850101111561441b57600080fd5b60209290920196919550909350505050565b60006020828403121561443f57600080fd5b81356130018161429a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110612fe857612fe861444a565b6020810161449683614479565b91905290565b60208101600283106144965761449661444a565b803563ffffffff811681146144c457600080fd5b919050565b600080604083850312156144dc57600080fd5b8235600281106144eb57600080fd5b91506144f9602084016144b0565b90509250929050565b60008060006040848603121561451757600080fd5b83356145228161429a565b9250602084013567ffffffffffffffff811115613fb557600080fd5b6000806040838503121561455157600080fd5b823561455c8161429a565b915060208301356142ee8161429a565b6000806040838503121561457f57600080fd5b823591506144f9602084016144b0565b602081526145b660208201835173ffffffffffffffffffffffffffffffffffffffff169052565b600060208301516145cf604084018263ffffffff169052565b5060408301516101408060608501526145ec610160850183614336565b9150606085015161460d60808601826bffffffffffffffffffffffff169052565b50608085015173ffffffffffffffffffffffffffffffffffffffff811660a08601525060a085015167ffffffffffffffff811660c08601525060c085015163ffffffff811660e08601525060e0850151610100614679818701836bffffffffffffffffffffffff169052565b860151905061012061468e8682018315159052565b8601518584037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018387015290506118588382614336565b60208101600483106144965761449661444a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610a2d57610a2d6146da565b81810381811115610a2d57610a2d6146da565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036147be576147be6146da565b5060010190565b600181811c908216806147d957607f821691505b602082108103614812577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f82111561486257600081815260208120601f850160051c8101602086101561483f5750805b601f850160051c820191505b8181101561485e5782815560010161484b565b5050505b505050565b67ffffffffffffffff83111561487f5761487f61472f565b6148938361488d83546147c5565b83614818565b6000601f8411600181146148e557600085156148af5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b17835561497b565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156149345786850135825560209485019460019092019101614914565b508682101561496f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0160101919050565b6000604082016040835280865480835260608501915087600052602092508260002060005b82811015614a2657815473ffffffffffffffffffffffffffffffffffffffff16845292840192600191820191016149f4565b505050838103828501528481528590820160005b86811015614a75578235614a4d8161429a565b73ffffffffffffffffffffffffffffffffffffffff1682529183019190830190600101614a3a565b50979650505050505050565b6bffffffffffffffffffffffff828116828216039080821115613ecc57613ecc6146da565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006bffffffffffffffffffffffff80841680614af457614af4614aa6565b92169190910492915050565b6bffffffffffffffffffffffff818116838216019080821115613ecc57613ecc6146da565b600060208284031215614b3757600080fd5b8151801515811461300157600080fd5b600060208284031215614b5957600080fd5b5051919050565b600060208284031215614b7257600080fd5b81516130018161429a565b805169ffffffffffffffffffff811681146144c457600080fd5b600080600080600060a08688031215614baf57600080fd5b614bb886614b7d565b9450602086015193506040860151925060608601519150614bdb60808701614b7d565b90509295509295909350565b6bffffffffffffffffffffffff818116838216028082169190828114614c0f57614c0f6146da565b505092915050565b8082028115828204841417610a2d57610a2d6146da565b60ff8181168382160190811115610a2d57610a2d6146da565b828482376000838201600081528351614c64818360208801614312565b0195945050505050565b63ffffffff818116838216028082169190828114614c0f57614c0f6146da565b60008060008060008060c08789031215614ca757600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b600082614ce757614ce7614aa6565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe307866666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666a164736f6c6343000813000a",
}
var AutomationRegistryLogicBABI = AutomationRegistryLogicBMetaData.ABI
@@ -634,6 +633,28 @@ func (_AutomationRegistryLogicB *AutomationRegistryLogicBCallerSession) GetPerSi
return _AutomationRegistryLogicB.Contract.GetPerSignerGasOverhead(&_AutomationRegistryLogicB.CallOpts)
}
+func (_AutomationRegistryLogicB *AutomationRegistryLogicBCaller) GetReorgProtectionEnabled(opts *bind.CallOpts) (bool, error) {
+ var out []interface{}
+ err := _AutomationRegistryLogicB.contract.Call(opts, &out, "getReorgProtectionEnabled")
+
+ if err != nil {
+ return *new(bool), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
+
+ return out0, err
+
+}
+
+func (_AutomationRegistryLogicB *AutomationRegistryLogicBSession) GetReorgProtectionEnabled() (bool, error) {
+ return _AutomationRegistryLogicB.Contract.GetReorgProtectionEnabled(&_AutomationRegistryLogicB.CallOpts)
+}
+
+func (_AutomationRegistryLogicB *AutomationRegistryLogicBCallerSession) GetReorgProtectionEnabled() (bool, error) {
+ return _AutomationRegistryLogicB.Contract.GetReorgProtectionEnabled(&_AutomationRegistryLogicB.CallOpts)
+}
+
func (_AutomationRegistryLogicB *AutomationRegistryLogicBCaller) GetSignerInfo(opts *bind.CallOpts, query common.Address) (GetSignerInfo,
error) {
@@ -676,7 +697,7 @@ func (_AutomationRegistryLogicB *AutomationRegistryLogicBCaller) GetState(opts *
}
outstruct.State = *abi.ConvertType(out[0], new(AutomationRegistryBase22State)).(*AutomationRegistryBase22State)
- outstruct.Config = *abi.ConvertType(out[1], new(AutomationRegistryBase22OnchainConfig)).(*AutomationRegistryBase22OnchainConfig)
+ outstruct.Config = *abi.ConvertType(out[1], new(AutomationRegistryBase22OnchainConfigLegacy)).(*AutomationRegistryBase22OnchainConfigLegacy)
outstruct.Signers = *abi.ConvertType(out[2], new([]common.Address)).(*[]common.Address)
outstruct.Transmitters = *abi.ConvertType(out[3], new([]common.Address)).(*[]common.Address)
outstruct.F = *abi.ConvertType(out[4], new(uint8)).(*uint8)
@@ -5221,7 +5242,7 @@ type GetSignerInfo struct {
}
type GetState struct {
State AutomationRegistryBase22State
- Config AutomationRegistryBase22OnchainConfig
+ Config AutomationRegistryBase22OnchainConfigLegacy
Signers []common.Address
Transmitters []common.Address
F uint8
@@ -5471,6 +5492,8 @@ type AutomationRegistryLogicBInterface interface {
GetPerSignerGasOverhead(opts *bind.CallOpts) (*big.Int, error)
+ GetReorgProtectionEnabled(opts *bind.CallOpts) (bool, error)
+
GetSignerInfo(opts *bind.CallOpts, query common.Address) (GetSignerInfo,
error)
diff --git a/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt
index 6e5681bb0fc..7bf4188a3c3 100644
--- a/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt
+++ b/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt
@@ -24,7 +24,7 @@ flux_aggregator_wrapper: ../../contracts/solc/v0.6/FluxAggregator/FluxAggregator
gas_wrapper: ../../contracts/solc/v0.8.6/KeeperRegistryCheckUpkeepGasUsageWrapper1_2/KeeperRegistryCheckUpkeepGasUsageWrapper1_2.abi ../../contracts/solc/v0.8.6/KeeperRegistryCheckUpkeepGasUsageWrapper1_2/KeeperRegistryCheckUpkeepGasUsageWrapper1_2.bin 4a5dcdac486d18fcd58e3488c15c1710ae76b977556a3f3191bd269a4bc75723
gas_wrapper_mock: ../../contracts/solc/v0.8.6/KeeperRegistryCheckUpkeepGasUsageWrapper1_2Mock/KeeperRegistryCheckUpkeepGasUsageWrapper1_2Mock.abi ../../contracts/solc/v0.8.6/KeeperRegistryCheckUpkeepGasUsageWrapper1_2Mock/KeeperRegistryCheckUpkeepGasUsageWrapper1_2Mock.bin a9b08f18da59125c6fc305855710241f3d35161b8b9f3e3f635a7b1d5c6da9c8
i_keeper_registry_master_wrapper_2_1: ../../contracts/solc/v0.8.16/IKeeperRegistryMaster/IKeeperRegistryMaster.abi ../../contracts/solc/v0.8.16/IKeeperRegistryMaster/IKeeperRegistryMaster.bin 6501bb9bcf5048bab2737b00685c6984a24867e234ddf5b60a65904eee9a4ebc
-i_keeper_registry_master_wrapper_2_2: ../../contracts/solc/v0.8.19/IAutomationRegistryMaster/IAutomationRegistryMaster.abi ../../contracts/solc/v0.8.19/IAutomationRegistryMaster/IAutomationRegistryMaster.bin 297e3b22f8087dc79bb76e06b8e605ee855c1ba60466bdc4b3a879dc633d4fd3
+i_keeper_registry_master_wrapper_2_2: ../../contracts/solc/v0.8.19/IAutomationRegistryMaster/IAutomationRegistryMaster.abi ../../contracts/solc/v0.8.19/IAutomationRegistryMaster/IAutomationRegistryMaster.bin 999cc12517ddaa09daacbfc00ed01c5b69904943c87e076d8344e810cdc873d8
i_log_automation: ../../contracts/solc/v0.8.16/ILogAutomation/ILogAutomation.abi ../../contracts/solc/v0.8.16/ILogAutomation/ILogAutomation.bin 296beccb6af655d6fc3a6e676b244831cce2da6688d3afc4f21f8738ae59e03e
keeper_consumer_performance_wrapper: ../../contracts/solc/v0.8.16/KeeperConsumerPerformance/KeeperConsumerPerformance.abi ../../contracts/solc/v0.8.16/KeeperConsumerPerformance/KeeperConsumerPerformance.bin eeda39f5d3e1c8ffa0fb6cd1803731b98a4bc262d41833458e3fe8b40933ae90
keeper_consumer_wrapper: ../../contracts/solc/v0.8.16/KeeperConsumer/KeeperConsumer.abi ../../contracts/solc/v0.8.16/KeeperConsumer/KeeperConsumer.bin 2c6163b145082fbab74b7343577a9cec8fda8b0da9daccf2a82581b1f5a84b83
@@ -36,7 +36,7 @@ keeper_registry_logic2_0: ../../contracts/solc/v0.8.6/KeeperRegistryLogic2_0/Kee
keeper_registry_logic_a_wrapper_2_1: ../../contracts/solc/v0.8.16/KeeperRegistryLogicA2_1/KeeperRegistryLogicA2_1.abi ../../contracts/solc/v0.8.16/KeeperRegistryLogicA2_1/KeeperRegistryLogicA2_1.bin 77481ab75c9aa86a62a7b2a708599b5ea1a6346ed1c0def6d4826e7ae523f1ee
keeper_registry_logic_a_wrapper_2_2: ../../contracts/solc/v0.8.19/AutomationRegistryLogicA2_2/AutomationRegistryLogicA2_2.abi ../../contracts/solc/v0.8.19/AutomationRegistryLogicA2_2/AutomationRegistryLogicA2_2.bin 89a18aa7b49178520a7195cef1c2f1069a600c17a62c0efc92a4ee365b39eca1
keeper_registry_logic_b_wrapper_2_1: ../../contracts/solc/v0.8.16/KeeperRegistryLogicB2_1/KeeperRegistryLogicB2_1.abi ../../contracts/solc/v0.8.16/KeeperRegistryLogicB2_1/KeeperRegistryLogicB2_1.bin 467d10741a04601b136553a2b1c6ab37f2a65d809366faf03180a22ff26be215
-keeper_registry_logic_b_wrapper_2_2: ../../contracts/solc/v0.8.19/AutomationRegistryLogicB2_2/AutomationRegistryLogicB2_2.abi ../../contracts/solc/v0.8.19/AutomationRegistryLogicB2_2/AutomationRegistryLogicB2_2.bin c775e0bb87a7e6d04ac36312d7dea65162a71777556edb41b0d1060c67f61d20
+keeper_registry_logic_b_wrapper_2_2: ../../contracts/solc/v0.8.19/AutomationRegistryLogicB2_2/AutomationRegistryLogicB2_2.abi ../../contracts/solc/v0.8.19/AutomationRegistryLogicB2_2/AutomationRegistryLogicB2_2.bin d91a47becd506a548341a423f9c77ae151b922db7dfb733c6056e7b991989517
keeper_registry_wrapper1_1: ../../contracts/solc/v0.7/KeeperRegistry1_1/KeeperRegistry1_1.abi ../../contracts/solc/v0.7/KeeperRegistry1_1/KeeperRegistry1_1.bin 6ce079f2738f015f7374673a2816e8e9787143d00b780ea7652c8aa9ad9e1e20
keeper_registry_wrapper1_1_mock: ../../contracts/solc/v0.7/KeeperRegistry1_1Mock/KeeperRegistry1_1Mock.abi ../../contracts/solc/v0.7/KeeperRegistry1_1Mock/KeeperRegistry1_1Mock.bin 98ddb3680e86359de3b5d17e648253ba29a84703f087a1b52237824003a8c6df
keeper_registry_wrapper1_2: ../../contracts/solc/v0.8.6/KeeperRegistry1_2/KeeperRegistry1_2.abi ../../contracts/solc/v0.8.6/KeeperRegistry1_2/KeeperRegistry1_2.bin a40ff877dd7c280f984cbbb2b428e160662b0c295e881d5f778f941c0088ca22
From 350a6f1f484eaca0aee0e9adbdac13814f79dda3 Mon Sep 17 00:00:00 2001
From: Ryan Hall
Date: Thu, 8 Feb 2024 18:11:04 -0300
Subject: [PATCH 03/11] split transmit into two functions to address stack too
deep errrors (#11977)
---
.../dev/v2_2/AutomationRegistry2_2.sol | 13 +-
.../automation/AutomationRegistry2_2.test.ts | 1314 ++++++++---------
.../keeper_registry_wrapper_2_2.go | 2 +-
...rapper-dependency-versions-do-not-edit.txt | 2 +-
4 files changed, 660 insertions(+), 671 deletions(-)
diff --git a/contracts/src/v0.8/automation/dev/v2_2/AutomationRegistry2_2.sol b/contracts/src/v0.8/automation/dev/v2_2/AutomationRegistry2_2.sol
index 99f71f21164..dc501d82334 100644
--- a/contracts/src/v0.8/automation/dev/v2_2/AutomationRegistry2_2.sol
+++ b/contracts/src/v0.8/automation/dev/v2_2/AutomationRegistry2_2.sol
@@ -84,6 +84,14 @@ contract AutomationRegistry2_2 is AutomationRegistryBase2_2, OCR2Abstract, Chain
_verifyReportSignature(reportContext, rawReport, rs, ss, rawVs);
Report memory report = _decodeReport(rawReport);
+
+ uint40 epochAndRound = uint40(uint256(reportContext[1]));
+ uint32 epoch = uint32(epochAndRound >> 8);
+
+ _handleReport(hotVars, report, gasOverhead, epoch);
+ }
+
+ function _handleReport(HotVars memory hotVars, Report memory report, uint256 gasOverhead, uint32 epoch) private {
UpkeepTransmitInfo[] memory upkeepTransmitInfo = new UpkeepTransmitInfo[](report.upkeepIds.length);
uint16 numUpkeepsPassedChecks;
@@ -133,8 +141,9 @@ contract AutomationRegistry2_2 is AutomationRegistryBase2_2, OCR2Abstract, Chain
// This is the overall gas overhead that will be split across performed upkeeps
// Take upper bound of 16 gas per callData bytes, which is approximated to be reportLength
// Rest of msg.data is accounted for in accounting overheads
+ // NOTE in process of changing acounting, so pre-emptively changed reportLength to msg.data.length
gasOverhead =
- (gasOverhead - gasleft() + 16 * rawReport.length) +
+ (gasOverhead - gasleft() + 16 * msg.data.length) +
ACCOUNTING_FIXED_GAS_OVERHEAD +
(ACCOUNTING_PER_SIGNER_GAS_OVERHEAD * (hotVars.f + 1));
gasOverhead = gasOverhead / numUpkeepsPassedChecks + ACCOUNTING_PER_UPKEEP_GAS_OVERHEAD;
@@ -179,8 +188,6 @@ contract AutomationRegistry2_2 is AutomationRegistryBase2_2, OCR2Abstract, Chain
s_transmitters[msg.sender].balance += totalReimbursement;
s_hotVars.totalPremium += totalPremium;
- uint40 epochAndRound = uint40(uint256(reportContext[1]));
- uint32 epoch = uint32(epochAndRound >> 8);
if (epoch > hotVars.latestEpoch) {
s_hotVars.latestEpoch = epoch;
}
diff --git a/contracts/test/v0.8/automation/AutomationRegistry2_2.test.ts b/contracts/test/v0.8/automation/AutomationRegistry2_2.test.ts
index bcdbe331462..b750a0619bf 100644
--- a/contracts/test/v0.8/automation/AutomationRegistry2_2.test.ts
+++ b/contracts/test/v0.8/automation/AutomationRegistry2_2.test.ts
@@ -1847,739 +1847,721 @@ describe('AutomationRegistry2_2', () => {
},
)
- describeMaybe(
- 'Gas benchmarking conditional upkeeps [ @skip-coverage ]',
- function () {
- const fs = [1, 10]
- fs.forEach(function (newF) {
- it(
- 'When f=' +
- newF +
- ' calculates gas overhead appropriately within a margin for different scenarios',
- async () => {
- // Perform the upkeep once to remove non-zero storage slots and have predictable gas measurement
- let tx = await getTransmitTx(registry, keeper1, [upkeepId])
- await tx.wait()
-
- // Different test scenarios
- let longBytes = '0x'
- for (let i = 0; i < maxPerformDataSize.toNumber(); i++) {
- longBytes += '11'
- }
- const upkeepSuccessArray = [true, false]
- const performGasArray = [5000, performGas]
- const performDataArray = ['0x', longBytes]
-
- for (const i in upkeepSuccessArray) {
- for (const j in performGasArray) {
- for (const k in performDataArray) {
- const upkeepSuccess = upkeepSuccessArray[i]
- const performGas = performGasArray[j]
- const performData = performDataArray[k]
-
- await mock.setCanPerform(upkeepSuccess)
- await mock.setPerformGasToBurn(performGas)
- await registry
- .connect(owner)
- .setConfigTypeSafe(
- signerAddresses,
- keeperAddresses,
- newF,
- config,
- offchainVersion,
- offchainBytes,
- )
- tx = await getTransmitTx(registry, keeper1, [upkeepId], {
- numSigners: newF + 1,
- performData,
- })
- const receipt = await tx.wait()
- const upkeepPerformedLogs =
- parseUpkeepPerformedLogs(receipt)
- // exactly 1 Upkeep Performed should be emitted
- assert.equal(upkeepPerformedLogs.length, 1)
- const upkeepPerformedLog = upkeepPerformedLogs[0]
-
- const upkeepGasUsed = upkeepPerformedLog.args.gasUsed
- const chargedGasOverhead =
- upkeepPerformedLog.args.gasOverhead
- const actualGasOverhead =
- receipt.gasUsed.sub(upkeepGasUsed)
-
- assert.isTrue(upkeepGasUsed.gt(BigNumber.from('0')))
- assert.isTrue(chargedGasOverhead.gt(BigNumber.from('0')))
-
- console.log(
- 'Gas Benchmarking conditional upkeeps:',
- 'upkeepSuccess=',
- upkeepSuccess,
- 'performGas=',
- performGas.toString(),
- 'performData length=',
- performData.length / 2 - 1,
- 'sig verification ( f =',
+ describe.skip('Gas benchmarking conditional upkeeps [ @skip-coverage ]', function () {
+ const fs = [1, 10]
+ fs.forEach(function (newF) {
+ it(
+ 'When f=' +
+ newF +
+ ' calculates gas overhead appropriately within a margin for different scenarios',
+ async () => {
+ // Perform the upkeep once to remove non-zero storage slots and have predictable gas measurement
+ let tx = await getTransmitTx(registry, keeper1, [upkeepId])
+ await tx.wait()
+
+ // Different test scenarios
+ let longBytes = '0x'
+ for (let i = 0; i < maxPerformDataSize.toNumber(); i++) {
+ longBytes += '11'
+ }
+ const upkeepSuccessArray = [true, false]
+ const performGasArray = [5000, performGas]
+ const performDataArray = ['0x', longBytes]
+
+ for (const i in upkeepSuccessArray) {
+ for (const j in performGasArray) {
+ for (const k in performDataArray) {
+ const upkeepSuccess = upkeepSuccessArray[i]
+ const performGas = performGasArray[j]
+ const performData = performDataArray[k]
+
+ await mock.setCanPerform(upkeepSuccess)
+ await mock.setPerformGasToBurn(performGas)
+ await registry
+ .connect(owner)
+ .setConfigTypeSafe(
+ signerAddresses,
+ keeperAddresses,
newF,
- '): calculated overhead: ',
- chargedGasOverhead.toString(),
- ' actual overhead: ',
- actualGasOverhead.toString(),
- ' margin over gasUsed: ',
- chargedGasOverhead.sub(actualGasOverhead).toString(),
+ config,
+ offchainVersion,
+ offchainBytes,
)
-
- // Overhead should not get capped
- const gasOverheadCap = registryConditionalOverhead
- .add(
- registryPerSignerGasOverhead.mul(
- BigNumber.from(newF + 1),
- ),
- )
- .add(
- BigNumber.from(
- registryPerPerformByteGasOverhead.toNumber() *
- performData.length,
- ),
- )
- const gasCapMinusOverhead =
- gasOverheadCap.sub(chargedGasOverhead)
- assert.isTrue(
- gasCapMinusOverhead.gt(BigNumber.from(0)),
- 'Gas overhead got capped. Verify gas overhead variables in test match those in the registry. To not have the overheads capped increase REGISTRY_GAS_OVERHEAD by atleast ' +
- gasCapMinusOverhead.toString(),
+ tx = await getTransmitTx(registry, keeper1, [upkeepId], {
+ numSigners: newF + 1,
+ performData,
+ })
+ const receipt = await tx.wait()
+ const upkeepPerformedLogs =
+ parseUpkeepPerformedLogs(receipt)
+ // exactly 1 Upkeep Performed should be emitted
+ assert.equal(upkeepPerformedLogs.length, 1)
+ const upkeepPerformedLog = upkeepPerformedLogs[0]
+
+ const upkeepGasUsed = upkeepPerformedLog.args.gasUsed
+ const chargedGasOverhead =
+ upkeepPerformedLog.args.gasOverhead
+ const actualGasOverhead = receipt.gasUsed.sub(upkeepGasUsed)
+
+ assert.isTrue(upkeepGasUsed.gt(BigNumber.from('0')))
+ assert.isTrue(chargedGasOverhead.gt(BigNumber.from('0')))
+
+ console.log(
+ 'Gas Benchmarking conditional upkeeps:',
+ 'upkeepSuccess=',
+ upkeepSuccess,
+ 'performGas=',
+ performGas.toString(),
+ 'performData length=',
+ performData.length / 2 - 1,
+ 'sig verification ( f =',
+ newF,
+ '): calculated overhead: ',
+ chargedGasOverhead.toString(),
+ ' actual overhead: ',
+ actualGasOverhead.toString(),
+ ' margin over gasUsed: ',
+ chargedGasOverhead.sub(actualGasOverhead).toString(),
+ )
+
+ // Overhead should not get capped
+ const gasOverheadCap = registryConditionalOverhead
+ .add(
+ registryPerSignerGasOverhead.mul(
+ BigNumber.from(newF + 1),
+ ),
)
- // total gas charged should be greater than tx gas but within gasCalculationMargin
- assert.isTrue(
- chargedGasOverhead.gt(actualGasOverhead),
- 'Gas overhead calculated is too low, increase account gas variables (ACCOUNTING_FIXED_GAS_OVERHEAD/ACCOUNTING_PER_SIGNER_GAS_OVERHEAD) by atleast ' +
- actualGasOverhead.sub(chargedGasOverhead).toString(),
+ .add(
+ BigNumber.from(
+ registryPerPerformByteGasOverhead.toNumber() *
+ performData.length,
+ ),
)
-
- assert.isTrue(
+ const gasCapMinusOverhead =
+ gasOverheadCap.sub(chargedGasOverhead)
+ assert.isTrue(
+ gasCapMinusOverhead.gt(BigNumber.from(0)),
+ 'Gas overhead got capped. Verify gas overhead variables in test match those in the registry. To not have the overheads capped increase REGISTRY_GAS_OVERHEAD by atleast ' +
+ gasCapMinusOverhead.toString(),
+ )
+ // total gas charged should be greater than tx gas but within gasCalculationMargin
+ assert.isTrue(
+ chargedGasOverhead.gt(actualGasOverhead),
+ 'Gas overhead calculated is too low, increase account gas variables (ACCOUNTING_FIXED_GAS_OVERHEAD/ACCOUNTING_PER_SIGNER_GAS_OVERHEAD) by atleast ' +
+ actualGasOverhead.sub(chargedGasOverhead).toString(),
+ )
+
+ assert.isTrue(
+ chargedGasOverhead
+ .sub(actualGasOverhead)
+ .lt(gasCalculationMargin),
+ ),
+ 'Gas overhead calculated is too high, decrease account gas variables (ACCOUNTING_FIXED_GAS_OVERHEAD/ACCOUNTING_PER_SIGNER_GAS_OVERHEAD) by atleast ' +
chargedGasOverhead
- .sub(actualGasOverhead)
- .lt(gasCalculationMargin),
- ),
- 'Gas overhead calculated is too high, decrease account gas variables (ACCOUNTING_FIXED_GAS_OVERHEAD/ACCOUNTING_PER_SIGNER_GAS_OVERHEAD) by atleast ' +
- chargedGasOverhead
- .sub(chargedGasOverhead)
- .sub(gasCalculationMargin)
- .toString()
- }
+ .sub(chargedGasOverhead)
+ .sub(gasCalculationMargin)
+ .toString()
}
}
- },
- )
- })
- },
- )
+ }
+ },
+ )
+ })
+ })
- describeMaybe(
- 'Gas benchmarking log upkeeps [ @skip-coverage ]',
- function () {
- const fs = [1, 10]
- fs.forEach(function (newF) {
- it(
- 'When f=' +
- newF +
- ' calculates gas overhead appropriately within a margin',
- async () => {
- // Perform the upkeep once to remove non-zero storage slots and have predictable gas measurement
- let tx = await getTransmitTx(registry, keeper1, [logUpkeepId])
- await tx.wait()
- const performData = '0x'
- await mock.setCanPerform(true)
- await mock.setPerformGasToBurn(performGas)
- await registry.setConfigTypeSafe(
- signerAddresses,
- keeperAddresses,
- newF,
- config,
- offchainVersion,
- offchainBytes,
- )
- tx = await getTransmitTx(registry, keeper1, [logUpkeepId], {
- numSigners: newF + 1,
- performData,
- })
- const receipt = await tx.wait()
- const upkeepPerformedLogs = parseUpkeepPerformedLogs(receipt)
- // exactly 1 Upkeep Performed should be emitted
- assert.equal(upkeepPerformedLogs.length, 1)
- const upkeepPerformedLog = upkeepPerformedLogs[0]
-
- const upkeepGasUsed = upkeepPerformedLog.args.gasUsed
- const chargedGasOverhead = upkeepPerformedLog.args.gasOverhead
- const actualGasOverhead = receipt.gasUsed.sub(upkeepGasUsed)
-
- assert.isTrue(upkeepGasUsed.gt(BigNumber.from('0')))
- assert.isTrue(chargedGasOverhead.gt(BigNumber.from('0')))
-
- console.log(
- 'Gas Benchmarking log upkeeps:',
- 'upkeepSuccess=',
- true,
- 'performGas=',
- performGas.toString(),
- 'performData length=',
- performData.length / 2 - 1,
- 'sig verification ( f =',
- newF,
- '): calculated overhead: ',
- chargedGasOverhead.toString(),
- ' actual overhead: ',
- actualGasOverhead.toString(),
- ' margin over gasUsed: ',
- chargedGasOverhead.sub(actualGasOverhead).toString(),
- )
+ describe.skip('Gas benchmarking log upkeeps [ @skip-coverage ]', function () {
+ const fs = [1, 10]
+ fs.forEach(function (newF) {
+ it(
+ 'When f=' +
+ newF +
+ ' calculates gas overhead appropriately within a margin',
+ async () => {
+ // Perform the upkeep once to remove non-zero storage slots and have predictable gas measurement
+ let tx = await getTransmitTx(registry, keeper1, [logUpkeepId])
+ await tx.wait()
+ const performData = '0x'
+ await mock.setCanPerform(true)
+ await mock.setPerformGasToBurn(performGas)
+ await registry.setConfigTypeSafe(
+ signerAddresses,
+ keeperAddresses,
+ newF,
+ config,
+ offchainVersion,
+ offchainBytes,
+ )
+ tx = await getTransmitTx(registry, keeper1, [logUpkeepId], {
+ numSigners: newF + 1,
+ performData,
+ })
+ const receipt = await tx.wait()
+ const upkeepPerformedLogs = parseUpkeepPerformedLogs(receipt)
+ // exactly 1 Upkeep Performed should be emitted
+ assert.equal(upkeepPerformedLogs.length, 1)
+ const upkeepPerformedLog = upkeepPerformedLogs[0]
+
+ const upkeepGasUsed = upkeepPerformedLog.args.gasUsed
+ const chargedGasOverhead = upkeepPerformedLog.args.gasOverhead
+ const actualGasOverhead = receipt.gasUsed.sub(upkeepGasUsed)
+
+ assert.isTrue(upkeepGasUsed.gt(BigNumber.from('0')))
+ assert.isTrue(chargedGasOverhead.gt(BigNumber.from('0')))
+
+ console.log(
+ 'Gas Benchmarking log upkeeps:',
+ 'upkeepSuccess=',
+ true,
+ 'performGas=',
+ performGas.toString(),
+ 'performData length=',
+ performData.length / 2 - 1,
+ 'sig verification ( f =',
+ newF,
+ '): calculated overhead: ',
+ chargedGasOverhead.toString(),
+ ' actual overhead: ',
+ actualGasOverhead.toString(),
+ ' margin over gasUsed: ',
+ chargedGasOverhead.sub(actualGasOverhead).toString(),
+ )
- // Overhead should not get capped
- const gasOverheadCap = registryLogOverhead
- .add(
- registryPerSignerGasOverhead.mul(BigNumber.from(newF + 1)),
- )
- .add(
- BigNumber.from(
- registryPerPerformByteGasOverhead.toNumber() *
- performData.length,
- ),
- )
- const gasCapMinusOverhead =
- gasOverheadCap.sub(chargedGasOverhead)
- assert.isTrue(
- gasCapMinusOverhead.gt(BigNumber.from(0)),
- 'Gas overhead got capped. Verify gas overhead variables in test match those in the registry. To not have the overheads capped increase REGISTRY_GAS_OVERHEAD by atleast ' +
- gasCapMinusOverhead.toString(),
- )
- // total gas charged should be greater than tx gas but within gasCalculationMargin
- assert.isTrue(
- chargedGasOverhead.gt(actualGasOverhead),
- 'Gas overhead calculated is too low, increase account gas variables (ACCOUNTING_FIXED_GAS_OVERHEAD/ACCOUNTING_PER_SIGNER_GAS_OVERHEAD) by atleast ' +
- actualGasOverhead.sub(chargedGasOverhead).toString(),
+ // Overhead should not get capped
+ const gasOverheadCap = registryLogOverhead
+ .add(registryPerSignerGasOverhead.mul(BigNumber.from(newF + 1)))
+ .add(
+ BigNumber.from(
+ registryPerPerformByteGasOverhead.toNumber() *
+ performData.length,
+ ),
)
+ const gasCapMinusOverhead = gasOverheadCap.sub(chargedGasOverhead)
+ assert.isTrue(
+ gasCapMinusOverhead.gt(BigNumber.from(0)),
+ 'Gas overhead got capped. Verify gas overhead variables in test match those in the registry. To not have the overheads capped increase REGISTRY_GAS_OVERHEAD by atleast ' +
+ gasCapMinusOverhead.toString(),
+ )
+ // total gas charged should be greater than tx gas but within gasCalculationMargin
+ assert.isTrue(
+ chargedGasOverhead.gt(actualGasOverhead),
+ 'Gas overhead calculated is too low, increase account gas variables (ACCOUNTING_FIXED_GAS_OVERHEAD/ACCOUNTING_PER_SIGNER_GAS_OVERHEAD) by atleast ' +
+ actualGasOverhead.sub(chargedGasOverhead).toString(),
+ )
- assert.isTrue(
+ assert.isTrue(
+ chargedGasOverhead
+ .sub(actualGasOverhead)
+ .lt(gasCalculationMargin),
+ ),
+ 'Gas overhead calculated is too high, decrease account gas variables (ACCOUNTING_FIXED_GAS_OVERHEAD/ACCOUNTING_PER_SIGNER_GAS_OVERHEAD) by atleast ' +
chargedGasOverhead
- .sub(actualGasOverhead)
- .lt(gasCalculationMargin),
- ),
- 'Gas overhead calculated is too high, decrease account gas variables (ACCOUNTING_FIXED_GAS_OVERHEAD/ACCOUNTING_PER_SIGNER_GAS_OVERHEAD) by atleast ' +
- chargedGasOverhead
- .sub(chargedGasOverhead)
- .sub(gasCalculationMargin)
- .toString()
- },
- )
- })
- },
- )
+ .sub(chargedGasOverhead)
+ .sub(gasCalculationMargin)
+ .toString()
+ },
+ )
+ })
+ })
})
})
- describeMaybe(
- '#transmit with upkeep batches [ @skip-coverage ]',
- function () {
- const numPassingConditionalUpkeepsArray = [0, 1, 5]
- const numPassingLogUpkeepsArray = [0, 1, 5]
- const numFailingUpkeepsArray = [0, 3]
-
- for (let idx = 0; idx < numPassingConditionalUpkeepsArray.length; idx++) {
- for (let jdx = 0; jdx < numPassingLogUpkeepsArray.length; jdx++) {
- for (let kdx = 0; kdx < numFailingUpkeepsArray.length; kdx++) {
- const numPassingConditionalUpkeeps =
- numPassingConditionalUpkeepsArray[idx]
- const numPassingLogUpkeeps = numPassingLogUpkeepsArray[jdx]
- const numFailingUpkeeps = numFailingUpkeepsArray[kdx]
- if (
- numPassingConditionalUpkeeps == 0 &&
- numPassingLogUpkeeps == 0
- ) {
- continue
- }
- it(
- '[Conditional:' +
- numPassingConditionalUpkeeps +
- ',Log:' +
- numPassingLogUpkeeps +
- ',Failures:' +
- numFailingUpkeeps +
- '] performs successful upkeeps and does not charge failing upkeeps',
- async () => {
- const allUpkeeps = await getMultipleUpkeepsDeployedAndFunded(
- numPassingConditionalUpkeeps,
- numPassingLogUpkeeps,
- numFailingUpkeeps,
- )
- const passingConditionalUpkeepIds =
- allUpkeeps.passingConditionalUpkeepIds
- const passingLogUpkeepIds = allUpkeeps.passingLogUpkeepIds
- const failingUpkeepIds = allUpkeeps.failingUpkeepIds
+ describe.skip('#transmit with upkeep batches [ @skip-coverage ]', function () {
+ const numPassingConditionalUpkeepsArray = [0, 1, 5]
+ const numPassingLogUpkeepsArray = [0, 1, 5]
+ const numFailingUpkeepsArray = [0, 3]
+
+ for (let idx = 0; idx < numPassingConditionalUpkeepsArray.length; idx++) {
+ for (let jdx = 0; jdx < numPassingLogUpkeepsArray.length; jdx++) {
+ for (let kdx = 0; kdx < numFailingUpkeepsArray.length; kdx++) {
+ const numPassingConditionalUpkeeps =
+ numPassingConditionalUpkeepsArray[idx]
+ const numPassingLogUpkeeps = numPassingLogUpkeepsArray[jdx]
+ const numFailingUpkeeps = numFailingUpkeepsArray[kdx]
+ if (numPassingConditionalUpkeeps == 0 && numPassingLogUpkeeps == 0) {
+ continue
+ }
+ it(
+ '[Conditional:' +
+ numPassingConditionalUpkeeps +
+ ',Log:' +
+ numPassingLogUpkeeps +
+ ',Failures:' +
+ numFailingUpkeeps +
+ '] performs successful upkeeps and does not charge failing upkeeps',
+ async () => {
+ const allUpkeeps = await getMultipleUpkeepsDeployedAndFunded(
+ numPassingConditionalUpkeeps,
+ numPassingLogUpkeeps,
+ numFailingUpkeeps,
+ )
+ const passingConditionalUpkeepIds =
+ allUpkeeps.passingConditionalUpkeepIds
+ const passingLogUpkeepIds = allUpkeeps.passingLogUpkeepIds
+ const failingUpkeepIds = allUpkeeps.failingUpkeepIds
- const keeperBefore = await registry.getTransmitterInfo(
- await keeper1.getAddress(),
- )
- const keeperLinkBefore = await linkToken.balanceOf(
- await keeper1.getAddress(),
- )
- const registryLinkBefore = await linkToken.balanceOf(
- registry.address,
- )
- const registryPremiumBefore = (await registry.getState()).state
- .totalPremium
- const registrationConditionalPassingBefore = await Promise.all(
- passingConditionalUpkeepIds.map(async (id) => {
- const reg = await registry.getUpkeep(BigNumber.from(id))
- assert.equal(reg.lastPerformedBlockNumber.toString(), '0')
- return reg
- }),
- )
- const registrationLogPassingBefore = await Promise.all(
- passingLogUpkeepIds.map(async (id) => {
- const reg = await registry.getUpkeep(BigNumber.from(id))
- assert.equal(reg.lastPerformedBlockNumber.toString(), '0')
- return reg
- }),
- )
- const registrationFailingBefore = await Promise.all(
- failingUpkeepIds.map(async (id) => {
- const reg = await registry.getUpkeep(BigNumber.from(id))
- assert.equal(reg.lastPerformedBlockNumber.toString(), '0')
- return reg
- }),
- )
+ const keeperBefore = await registry.getTransmitterInfo(
+ await keeper1.getAddress(),
+ )
+ const keeperLinkBefore = await linkToken.balanceOf(
+ await keeper1.getAddress(),
+ )
+ const registryLinkBefore = await linkToken.balanceOf(
+ registry.address,
+ )
+ const registryPremiumBefore = (await registry.getState()).state
+ .totalPremium
+ const registrationConditionalPassingBefore = await Promise.all(
+ passingConditionalUpkeepIds.map(async (id) => {
+ const reg = await registry.getUpkeep(BigNumber.from(id))
+ assert.equal(reg.lastPerformedBlockNumber.toString(), '0')
+ return reg
+ }),
+ )
+ const registrationLogPassingBefore = await Promise.all(
+ passingLogUpkeepIds.map(async (id) => {
+ const reg = await registry.getUpkeep(BigNumber.from(id))
+ assert.equal(reg.lastPerformedBlockNumber.toString(), '0')
+ return reg
+ }),
+ )
+ const registrationFailingBefore = await Promise.all(
+ failingUpkeepIds.map(async (id) => {
+ const reg = await registry.getUpkeep(BigNumber.from(id))
+ assert.equal(reg.lastPerformedBlockNumber.toString(), '0')
+ return reg
+ }),
+ )
- const tx = await getTransmitTx(
- registry,
- keeper1,
- passingConditionalUpkeepIds.concat(
- passingLogUpkeepIds.concat(failingUpkeepIds),
- ),
- )
+ const tx = await getTransmitTx(
+ registry,
+ keeper1,
+ passingConditionalUpkeepIds.concat(
+ passingLogUpkeepIds.concat(failingUpkeepIds),
+ ),
+ )
- const receipt = await tx.wait()
- const upkeepPerformedLogs = parseUpkeepPerformedLogs(receipt)
- // exactly numPassingUpkeeps Upkeep Performed should be emitted
+ const receipt = await tx.wait()
+ const upkeepPerformedLogs = parseUpkeepPerformedLogs(receipt)
+ // exactly numPassingUpkeeps Upkeep Performed should be emitted
+ assert.equal(
+ upkeepPerformedLogs.length,
+ numPassingConditionalUpkeeps + numPassingLogUpkeeps,
+ )
+ const insufficientFundsLogs =
+ parseInsufficientFundsUpkeepReportLogs(receipt)
+ // exactly numFailingUpkeeps Upkeep Performed should be emitted
+ assert.equal(insufficientFundsLogs.length, numFailingUpkeeps)
+
+ const keeperAfter = await registry.getTransmitterInfo(
+ await keeper1.getAddress(),
+ )
+ const keeperLinkAfter = await linkToken.balanceOf(
+ await keeper1.getAddress(),
+ )
+ const registryLinkAfter = await linkToken.balanceOf(
+ registry.address,
+ )
+ const registrationConditionalPassingAfter = await Promise.all(
+ passingConditionalUpkeepIds.map(async (id) => {
+ return await registry.getUpkeep(BigNumber.from(id))
+ }),
+ )
+ const registrationLogPassingAfter = await Promise.all(
+ passingLogUpkeepIds.map(async (id) => {
+ return await registry.getUpkeep(BigNumber.from(id))
+ }),
+ )
+ const registrationFailingAfter = await Promise.all(
+ failingUpkeepIds.map(async (id) => {
+ return await registry.getUpkeep(BigNumber.from(id))
+ }),
+ )
+ const registryPremiumAfter = (await registry.getState()).state
+ .totalPremium
+ const premium = registryPremiumAfter.sub(registryPremiumBefore)
+
+ let netPayment = BigNumber.from('0')
+ for (let i = 0; i < numPassingConditionalUpkeeps; i++) {
+ const id = upkeepPerformedLogs[i].args.id
+ const gasUsed = upkeepPerformedLogs[i].args.gasUsed
+ const gasOverhead = upkeepPerformedLogs[i].args.gasOverhead
+ const totalPayment = upkeepPerformedLogs[i].args.totalPayment
+
+ expect(id).to.equal(passingConditionalUpkeepIds[i])
+ assert.isTrue(gasUsed.gt(BigNumber.from('0')))
+ assert.isTrue(gasOverhead.gt(BigNumber.from('0')))
+ assert.isTrue(totalPayment.gt(BigNumber.from('0')))
+
+ // Balance should be deducted
assert.equal(
- upkeepPerformedLogs.length,
- numPassingConditionalUpkeeps + numPassingLogUpkeeps,
+ registrationConditionalPassingBefore[i].balance
+ .sub(totalPayment)
+ .toString(),
+ registrationConditionalPassingAfter[i].balance.toString(),
)
- const insufficientFundsLogs =
- parseInsufficientFundsUpkeepReportLogs(receipt)
- // exactly numFailingUpkeeps Upkeep Performed should be emitted
- assert.equal(insufficientFundsLogs.length, numFailingUpkeeps)
- const keeperAfter = await registry.getTransmitterInfo(
- await keeper1.getAddress(),
- )
- const keeperLinkAfter = await linkToken.balanceOf(
- await keeper1.getAddress(),
+ // Amount spent should be updated correctly
+ assert.equal(
+ registrationConditionalPassingAfter[i].amountSpent
+ .sub(totalPayment)
+ .toString(),
+ registrationConditionalPassingBefore[
+ i
+ ].amountSpent.toString(),
)
- const registryLinkAfter = await linkToken.balanceOf(
- registry.address,
+
+ // Last perform block number should be updated
+ assert.equal(
+ registrationConditionalPassingAfter[
+ i
+ ].lastPerformedBlockNumber.toString(),
+ tx.blockNumber?.toString(),
)
- const registrationConditionalPassingAfter = await Promise.all(
- passingConditionalUpkeepIds.map(async (id) => {
- return await registry.getUpkeep(BigNumber.from(id))
- }),
+
+ netPayment = netPayment.add(totalPayment)
+ }
+
+ for (let i = 0; i < numPassingLogUpkeeps; i++) {
+ const id =
+ upkeepPerformedLogs[numPassingConditionalUpkeeps + i].args.id
+ const gasUsed =
+ upkeepPerformedLogs[numPassingConditionalUpkeeps + i].args
+ .gasUsed
+ const gasOverhead =
+ upkeepPerformedLogs[numPassingConditionalUpkeeps + i].args
+ .gasOverhead
+ const totalPayment =
+ upkeepPerformedLogs[numPassingConditionalUpkeeps + i].args
+ .totalPayment
+
+ expect(id).to.equal(passingLogUpkeepIds[i])
+ assert.isTrue(gasUsed.gt(BigNumber.from('0')))
+ assert.isTrue(gasOverhead.gt(BigNumber.from('0')))
+ assert.isTrue(totalPayment.gt(BigNumber.from('0')))
+
+ // Balance should be deducted
+ assert.equal(
+ registrationLogPassingBefore[i].balance
+ .sub(totalPayment)
+ .toString(),
+ registrationLogPassingAfter[i].balance.toString(),
)
- const registrationLogPassingAfter = await Promise.all(
- passingLogUpkeepIds.map(async (id) => {
- return await registry.getUpkeep(BigNumber.from(id))
- }),
+
+ // Amount spent should be updated correctly
+ assert.equal(
+ registrationLogPassingAfter[i].amountSpent
+ .sub(totalPayment)
+ .toString(),
+ registrationLogPassingBefore[i].amountSpent.toString(),
)
- const registrationFailingAfter = await Promise.all(
- failingUpkeepIds.map(async (id) => {
- return await registry.getUpkeep(BigNumber.from(id))
- }),
+
+ // Last perform block number should not be updated for log triggers
+ assert.equal(
+ registrationLogPassingAfter[
+ i
+ ].lastPerformedBlockNumber.toString(),
+ '0',
)
- const registryPremiumAfter = (await registry.getState()).state
- .totalPremium
- const premium = registryPremiumAfter.sub(registryPremiumBefore)
-
- let netPayment = BigNumber.from('0')
- for (let i = 0; i < numPassingConditionalUpkeeps; i++) {
- const id = upkeepPerformedLogs[i].args.id
- const gasUsed = upkeepPerformedLogs[i].args.gasUsed
- const gasOverhead = upkeepPerformedLogs[i].args.gasOverhead
- const totalPayment = upkeepPerformedLogs[i].args.totalPayment
-
- expect(id).to.equal(passingConditionalUpkeepIds[i])
- assert.isTrue(gasUsed.gt(BigNumber.from('0')))
- assert.isTrue(gasOverhead.gt(BigNumber.from('0')))
- assert.isTrue(totalPayment.gt(BigNumber.from('0')))
-
- // Balance should be deducted
- assert.equal(
- registrationConditionalPassingBefore[i].balance
- .sub(totalPayment)
- .toString(),
- registrationConditionalPassingAfter[i].balance.toString(),
- )
-
- // Amount spent should be updated correctly
- assert.equal(
- registrationConditionalPassingAfter[i].amountSpent
- .sub(totalPayment)
- .toString(),
- registrationConditionalPassingBefore[
- i
- ].amountSpent.toString(),
- )
-
- // Last perform block number should be updated
- assert.equal(
- registrationConditionalPassingAfter[
- i
- ].lastPerformedBlockNumber.toString(),
- tx.blockNumber?.toString(),
- )
-
- netPayment = netPayment.add(totalPayment)
- }
- for (let i = 0; i < numPassingLogUpkeeps; i++) {
- const id =
- upkeepPerformedLogs[numPassingConditionalUpkeeps + i].args
- .id
- const gasUsed =
- upkeepPerformedLogs[numPassingConditionalUpkeeps + i].args
- .gasUsed
- const gasOverhead =
- upkeepPerformedLogs[numPassingConditionalUpkeeps + i].args
- .gasOverhead
- const totalPayment =
- upkeepPerformedLogs[numPassingConditionalUpkeeps + i].args
- .totalPayment
-
- expect(id).to.equal(passingLogUpkeepIds[i])
- assert.isTrue(gasUsed.gt(BigNumber.from('0')))
- assert.isTrue(gasOverhead.gt(BigNumber.from('0')))
- assert.isTrue(totalPayment.gt(BigNumber.from('0')))
-
- // Balance should be deducted
- assert.equal(
- registrationLogPassingBefore[i].balance
- .sub(totalPayment)
- .toString(),
- registrationLogPassingAfter[i].balance.toString(),
- )
-
- // Amount spent should be updated correctly
- assert.equal(
- registrationLogPassingAfter[i].amountSpent
- .sub(totalPayment)
- .toString(),
- registrationLogPassingBefore[i].amountSpent.toString(),
- )
-
- // Last perform block number should not be updated for log triggers
- assert.equal(
- registrationLogPassingAfter[
- i
- ].lastPerformedBlockNumber.toString(),
- '0',
- )
-
- netPayment = netPayment.add(totalPayment)
- }
+ netPayment = netPayment.add(totalPayment)
+ }
- for (let i = 0; i < numFailingUpkeeps; i++) {
- // InsufficientFunds log should be emitted
- const id = insufficientFundsLogs[i].args.id
- expect(id).to.equal(failingUpkeepIds[i])
-
- // Balance and amount spent should be same
- assert.equal(
- registrationFailingBefore[i].balance.toString(),
- registrationFailingAfter[i].balance.toString(),
- )
- assert.equal(
- registrationFailingBefore[i].amountSpent.toString(),
- registrationFailingAfter[i].amountSpent.toString(),
- )
-
- // Last perform block number should not be updated
- assert.equal(
- registrationFailingAfter[
- i
- ].lastPerformedBlockNumber.toString(),
- '0',
- )
- }
+ for (let i = 0; i < numFailingUpkeeps; i++) {
+ // InsufficientFunds log should be emitted
+ const id = insufficientFundsLogs[i].args.id
+ expect(id).to.equal(failingUpkeepIds[i])
- // Keeper payment is gasPayment + premium / num keepers
- const keeperPayment = netPayment
- .sub(premium)
- .add(premium.div(BigNumber.from(keeperAddresses.length)))
+ // Balance and amount spent should be same
+ assert.equal(
+ registrationFailingBefore[i].balance.toString(),
+ registrationFailingAfter[i].balance.toString(),
+ )
+ assert.equal(
+ registrationFailingBefore[i].amountSpent.toString(),
+ registrationFailingAfter[i].amountSpent.toString(),
+ )
- // Keeper should be paid net payment for all passed upkeeps
+ // Last perform block number should not be updated
assert.equal(
- keeperAfter.balance.sub(keeperPayment).toString(),
- keeperBefore.balance.toString(),
+ registrationFailingAfter[
+ i
+ ].lastPerformedBlockNumber.toString(),
+ '0',
)
+ }
- assert.isTrue(keeperLinkAfter.eq(keeperLinkBefore))
- assert.isTrue(registryLinkBefore.eq(registryLinkAfter))
- },
- )
+ // Keeper payment is gasPayment + premium / num keepers
+ const keeperPayment = netPayment
+ .sub(premium)
+ .add(premium.div(BigNumber.from(keeperAddresses.length)))
- it(
- '[Conditional:' +
- numPassingConditionalUpkeeps +
- ',Log' +
- numPassingLogUpkeeps +
- ',Failures:' +
- numFailingUpkeeps +
- '] splits gas overhead appropriately among performed upkeeps [ @skip-coverage ]',
- async () => {
- const allUpkeeps = await getMultipleUpkeepsDeployedAndFunded(
- numPassingConditionalUpkeeps,
- numPassingLogUpkeeps,
- numFailingUpkeeps,
- )
- const passingConditionalUpkeepIds =
- allUpkeeps.passingConditionalUpkeepIds
- const passingLogUpkeepIds = allUpkeeps.passingLogUpkeepIds
- const failingUpkeepIds = allUpkeeps.failingUpkeepIds
-
- // Perform the upkeeps once to remove non-zero storage slots and have predictable gas measurement
- let tx = await getTransmitTx(
- registry,
- keeper1,
- passingConditionalUpkeepIds.concat(
- passingLogUpkeepIds.concat(failingUpkeepIds),
- ),
- )
+ // Keeper should be paid net payment for all passed upkeeps
+ assert.equal(
+ keeperAfter.balance.sub(keeperPayment).toString(),
+ keeperBefore.balance.toString(),
+ )
- await tx.wait()
+ assert.isTrue(keeperLinkAfter.eq(keeperLinkBefore))
+ assert.isTrue(registryLinkBefore.eq(registryLinkAfter))
+ },
+ )
- // Do the actual thing
+ it(
+ '[Conditional:' +
+ numPassingConditionalUpkeeps +
+ ',Log' +
+ numPassingLogUpkeeps +
+ ',Failures:' +
+ numFailingUpkeeps +
+ '] splits gas overhead appropriately among performed upkeeps [ @skip-coverage ]',
+ async () => {
+ const allUpkeeps = await getMultipleUpkeepsDeployedAndFunded(
+ numPassingConditionalUpkeeps,
+ numPassingLogUpkeeps,
+ numFailingUpkeeps,
+ )
+ const passingConditionalUpkeepIds =
+ allUpkeeps.passingConditionalUpkeepIds
+ const passingLogUpkeepIds = allUpkeeps.passingLogUpkeepIds
+ const failingUpkeepIds = allUpkeeps.failingUpkeepIds
+
+ // Perform the upkeeps once to remove non-zero storage slots and have predictable gas measurement
+ let tx = await getTransmitTx(
+ registry,
+ keeper1,
+ passingConditionalUpkeepIds.concat(
+ passingLogUpkeepIds.concat(failingUpkeepIds),
+ ),
+ )
- tx = await getTransmitTx(
- registry,
- keeper1,
- passingConditionalUpkeepIds.concat(
- passingLogUpkeepIds.concat(failingUpkeepIds),
- ),
- )
+ await tx.wait()
- const receipt = await tx.wait()
- const upkeepPerformedLogs = parseUpkeepPerformedLogs(receipt)
- // exactly numPassingUpkeeps Upkeep Performed should be emitted
- assert.equal(
- upkeepPerformedLogs.length,
- numPassingConditionalUpkeeps + numPassingLogUpkeeps,
- )
+ // Do the actual thing
- const gasConditionalOverheadCap =
- registryConditionalOverhead.add(
- registryPerSignerGasOverhead.mul(BigNumber.from(f + 1)),
- )
- const gasLogOverheadCap = registryLogOverhead.add(
- registryPerSignerGasOverhead.mul(BigNumber.from(f + 1)),
- )
+ tx = await getTransmitTx(
+ registry,
+ keeper1,
+ passingConditionalUpkeepIds.concat(
+ passingLogUpkeepIds.concat(failingUpkeepIds),
+ ),
+ )
- const overheadCanGetCapped =
- numFailingUpkeeps > 0 &&
- numPassingConditionalUpkeeps <= 1 &&
- numPassingLogUpkeeps <= 1
- // Can happen if there are failing upkeeps and only 1 successful upkeep of each type
- let netGasUsedPlusOverhead = BigNumber.from('0')
+ const receipt = await tx.wait()
+ const upkeepPerformedLogs = parseUpkeepPerformedLogs(receipt)
+ // exactly numPassingUpkeeps Upkeep Performed should be emitted
+ assert.equal(
+ upkeepPerformedLogs.length,
+ numPassingConditionalUpkeeps + numPassingLogUpkeeps,
+ )
- for (let i = 0; i < numPassingConditionalUpkeeps; i++) {
- const gasUsed = upkeepPerformedLogs[i].args.gasUsed
- const gasOverhead = upkeepPerformedLogs[i].args.gasOverhead
+ const gasConditionalOverheadCap = registryConditionalOverhead.add(
+ registryPerSignerGasOverhead.mul(BigNumber.from(f + 1)),
+ )
+ const gasLogOverheadCap = registryLogOverhead.add(
+ registryPerSignerGasOverhead.mul(BigNumber.from(f + 1)),
+ )
- assert.isTrue(gasUsed.gt(BigNumber.from('0')))
- assert.isTrue(gasOverhead.gt(BigNumber.from('0')))
+ const overheadCanGetCapped =
+ numFailingUpkeeps > 0 &&
+ numPassingConditionalUpkeeps <= 1 &&
+ numPassingLogUpkeeps <= 1
+ // Can happen if there are failing upkeeps and only 1 successful upkeep of each type
+ let netGasUsedPlusOverhead = BigNumber.from('0')
- // Overhead should not exceed capped
- assert.isTrue(gasOverhead.lte(gasConditionalOverheadCap))
+ for (let i = 0; i < numPassingConditionalUpkeeps; i++) {
+ const gasUsed = upkeepPerformedLogs[i].args.gasUsed
+ const gasOverhead = upkeepPerformedLogs[i].args.gasOverhead
- // Overhead should be same for every upkeep since they have equal performData, hence same caps
- assert.isTrue(
- gasOverhead.eq(upkeepPerformedLogs[0].args.gasOverhead),
- )
+ assert.isTrue(gasUsed.gt(BigNumber.from('0')))
+ assert.isTrue(gasOverhead.gt(BigNumber.from('0')))
- netGasUsedPlusOverhead = netGasUsedPlusOverhead
- .add(gasUsed)
- .add(gasOverhead)
- }
- for (let i = 0; i < numPassingLogUpkeeps; i++) {
- const gasUsed =
- upkeepPerformedLogs[numPassingConditionalUpkeeps + i].args
- .gasUsed
- const gasOverhead =
- upkeepPerformedLogs[numPassingConditionalUpkeeps + i].args
- .gasOverhead
-
- assert.isTrue(gasUsed.gt(BigNumber.from('0')))
- assert.isTrue(gasOverhead.gt(BigNumber.from('0')))
-
- // Overhead should not exceed capped
- assert.isTrue(gasOverhead.lte(gasLogOverheadCap))
-
- // Overhead should be same for every upkeep since they have equal performData, hence same caps
- assert.isTrue(
- gasOverhead.eq(
- upkeepPerformedLogs[numPassingConditionalUpkeeps].args
- .gasOverhead,
- ),
- )
+ // Overhead should not exceed capped
+ assert.isTrue(gasOverhead.lte(gasConditionalOverheadCap))
- netGasUsedPlusOverhead = netGasUsedPlusOverhead
- .add(gasUsed)
- .add(gasOverhead)
- }
+ // Overhead should be same for every upkeep since they have equal performData, hence same caps
+ assert.isTrue(
+ gasOverhead.eq(upkeepPerformedLogs[0].args.gasOverhead),
+ )
- const overheadsGotCapped =
- (numPassingConditionalUpkeeps > 0 &&
- upkeepPerformedLogs[0].args.gasOverhead.eq(
- gasConditionalOverheadCap,
- )) ||
- (numPassingLogUpkeeps > 0 &&
- upkeepPerformedLogs[
- numPassingConditionalUpkeeps
- ].args.gasOverhead.eq(gasLogOverheadCap))
- // Should only get capped in certain scenarios
- if (overheadsGotCapped) {
- assert.isTrue(
- overheadCanGetCapped,
- 'Gas overhead got capped. Verify gas overhead variables in test match those in the registry. To not have the overheads capped increase REGISTRY_GAS_OVERHEAD',
- )
- }
+ netGasUsedPlusOverhead = netGasUsedPlusOverhead
+ .add(gasUsed)
+ .add(gasOverhead)
+ }
+ for (let i = 0; i < numPassingLogUpkeeps; i++) {
+ const gasUsed =
+ upkeepPerformedLogs[numPassingConditionalUpkeeps + i].args
+ .gasUsed
+ const gasOverhead =
+ upkeepPerformedLogs[numPassingConditionalUpkeeps + i].args
+ .gasOverhead
+
+ assert.isTrue(gasUsed.gt(BigNumber.from('0')))
+ assert.isTrue(gasOverhead.gt(BigNumber.from('0')))
+
+ // Overhead should not exceed capped
+ assert.isTrue(gasOverhead.lte(gasLogOverheadCap))
+
+ // Overhead should be same for every upkeep since they have equal performData, hence same caps
+ assert.isTrue(
+ gasOverhead.eq(
+ upkeepPerformedLogs[numPassingConditionalUpkeeps].args
+ .gasOverhead,
+ ),
+ )
- console.log(
- 'Gas Benchmarking - batching (passedConditionalUpkeeps: ',
- numPassingConditionalUpkeeps,
- 'passedLogUpkeeps:',
- numPassingLogUpkeeps,
- 'failedUpkeeps:',
- numFailingUpkeeps,
- '): ',
- 'overheadsGotCapped',
- overheadsGotCapped,
- numPassingConditionalUpkeeps > 0
- ? 'calculated conditional overhead'
- : '',
- numPassingConditionalUpkeeps > 0
- ? upkeepPerformedLogs[0].args.gasOverhead.toString()
- : '',
- numPassingLogUpkeeps > 0 ? 'calculated log overhead' : '',
- numPassingLogUpkeeps > 0
- ? upkeepPerformedLogs[
- numPassingConditionalUpkeeps
- ].args.gasOverhead.toString()
- : '',
- ' margin over gasUsed',
- netGasUsedPlusOverhead.sub(receipt.gasUsed).toString(),
+ netGasUsedPlusOverhead = netGasUsedPlusOverhead
+ .add(gasUsed)
+ .add(gasOverhead)
+ }
+
+ const overheadsGotCapped =
+ (numPassingConditionalUpkeeps > 0 &&
+ upkeepPerformedLogs[0].args.gasOverhead.eq(
+ gasConditionalOverheadCap,
+ )) ||
+ (numPassingLogUpkeeps > 0 &&
+ upkeepPerformedLogs[
+ numPassingConditionalUpkeeps
+ ].args.gasOverhead.eq(gasLogOverheadCap))
+ // Should only get capped in certain scenarios
+ if (overheadsGotCapped) {
+ assert.isTrue(
+ overheadCanGetCapped,
+ 'Gas overhead got capped. Verify gas overhead variables in test match those in the registry. To not have the overheads capped increase REGISTRY_GAS_OVERHEAD',
)
+ }
+
+ console.log(
+ 'Gas Benchmarking - batching (passedConditionalUpkeeps: ',
+ numPassingConditionalUpkeeps,
+ 'passedLogUpkeeps:',
+ numPassingLogUpkeeps,
+ 'failedUpkeeps:',
+ numFailingUpkeeps,
+ '): ',
+ 'overheadsGotCapped',
+ overheadsGotCapped,
+ numPassingConditionalUpkeeps > 0
+ ? 'calculated conditional overhead'
+ : '',
+ numPassingConditionalUpkeeps > 0
+ ? upkeepPerformedLogs[0].args.gasOverhead.toString()
+ : '',
+ numPassingLogUpkeeps > 0 ? 'calculated log overhead' : '',
+ numPassingLogUpkeeps > 0
+ ? upkeepPerformedLogs[
+ numPassingConditionalUpkeeps
+ ].args.gasOverhead.toString()
+ : '',
+ ' margin over gasUsed',
+ netGasUsedPlusOverhead.sub(receipt.gasUsed).toString(),
+ )
- // If overheads dont get capped then total gas charged should be greater than tx gas
- // We don't check whether the net is within gasMargin as the margin changes with numFailedUpkeeps
- // Which is ok, as long as individual gas overhead is capped
- if (!overheadsGotCapped) {
- assert.isTrue(
- netGasUsedPlusOverhead.gt(receipt.gasUsed),
- 'Gas overhead is too low, increase ACCOUNTING_PER_UPKEEP_GAS_OVERHEAD',
- )
- }
- },
- )
- }
+ // If overheads dont get capped then total gas charged should be greater than tx gas
+ // We don't check whether the net is within gasMargin as the margin changes with numFailedUpkeeps
+ // Which is ok, as long as individual gas overhead is capped
+ if (!overheadsGotCapped) {
+ assert.isTrue(
+ netGasUsedPlusOverhead.gt(receipt.gasUsed),
+ 'Gas overhead is too low, increase ACCOUNTING_PER_UPKEEP_GAS_OVERHEAD',
+ )
+ }
+ },
+ )
}
}
+ }
- it('has enough perform gas overhead for large batches [ @skip-coverage ]', async () => {
- const numUpkeeps = 20
- const upkeepIds: BigNumber[] = []
- let totalPerformGas = BigNumber.from('0')
- for (let i = 0; i < numUpkeeps; i++) {
- const mock = await upkeepMockFactory.deploy()
- const tx = await registry
- .connect(owner)
- [
- 'registerUpkeep(address,uint32,address,bytes,bytes)'
- ](mock.address, performGas, await admin.getAddress(), randomBytes, '0x')
- const testUpkeepId = await getUpkeepID(tx)
- upkeepIds.push(testUpkeepId)
+ it('has enough perform gas overhead for large batches [ @skip-coverage ]', async () => {
+ const numUpkeeps = 20
+ const upkeepIds: BigNumber[] = []
+ let totalPerformGas = BigNumber.from('0')
+ for (let i = 0; i < numUpkeeps; i++) {
+ const mock = await upkeepMockFactory.deploy()
+ const tx = await registry
+ .connect(owner)
+ [
+ 'registerUpkeep(address,uint32,address,bytes,bytes)'
+ ](mock.address, performGas, await admin.getAddress(), randomBytes, '0x')
+ const testUpkeepId = await getUpkeepID(tx)
+ upkeepIds.push(testUpkeepId)
- // Add funds to passing upkeeps
- await registry.connect(owner).addFunds(testUpkeepId, toWei('10'))
+ // Add funds to passing upkeeps
+ await registry.connect(owner).addFunds(testUpkeepId, toWei('10'))
- await mock.setCanPerform(true)
- await mock.setPerformGasToBurn(performGas)
+ await mock.setCanPerform(true)
+ await mock.setPerformGasToBurn(performGas)
- totalPerformGas = totalPerformGas.add(performGas)
- }
+ totalPerformGas = totalPerformGas.add(performGas)
+ }
- // Should revert with no overhead added
- await evmRevert(
- getTransmitTx(registry, keeper1, upkeepIds, {
- gasLimit: totalPerformGas,
- }),
- )
- // Should not revert with overhead added
- await getTransmitTx(registry, keeper1, upkeepIds, {
- gasLimit: totalPerformGas.add(transmitGasOverhead),
- })
+ // Should revert with no overhead added
+ await evmRevert(
+ getTransmitTx(registry, keeper1, upkeepIds, {
+ gasLimit: totalPerformGas,
+ }),
+ )
+ // Should not revert with overhead added
+ await getTransmitTx(registry, keeper1, upkeepIds, {
+ gasLimit: totalPerformGas.add(transmitGasOverhead),
})
+ })
- it('splits l2 payment among performed upkeeps', async () => {
- const numUpkeeps = 7
- const upkeepIds: BigNumber[] = []
- // Same as MockArbGasInfo.sol
- const l1CostWeiArb = BigNumber.from(1000000)
+ it('splits l2 payment among performed upkeeps', async () => {
+ const numUpkeeps = 7
+ const upkeepIds: BigNumber[] = []
+ // Same as MockArbGasInfo.sol
+ const l1CostWeiArb = BigNumber.from(1000000)
- for (let i = 0; i < numUpkeeps; i++) {
- const mock = await upkeepMockFactory.deploy()
- const tx = await arbRegistry
- .connect(owner)
- [
- 'registerUpkeep(address,uint32,address,bytes,bytes)'
- ](mock.address, performGas, await admin.getAddress(), randomBytes, '0x')
- const testUpkeepId = await getUpkeepID(tx)
- upkeepIds.push(testUpkeepId)
+ for (let i = 0; i < numUpkeeps; i++) {
+ const mock = await upkeepMockFactory.deploy()
+ const tx = await arbRegistry
+ .connect(owner)
+ [
+ 'registerUpkeep(address,uint32,address,bytes,bytes)'
+ ](mock.address, performGas, await admin.getAddress(), randomBytes, '0x')
+ const testUpkeepId = await getUpkeepID(tx)
+ upkeepIds.push(testUpkeepId)
- // Add funds to passing upkeeps
- await arbRegistry.connect(owner).addFunds(testUpkeepId, toWei('100'))
- }
+ // Add funds to passing upkeeps
+ await arbRegistry.connect(owner).addFunds(testUpkeepId, toWei('100'))
+ }
- // Do the thing
- const tx = await getTransmitTx(
- arbRegistry,
- keeper1,
- upkeepIds,
+ // Do the thing
+ const tx = await getTransmitTx(
+ arbRegistry,
+ keeper1,
+ upkeepIds,
- { gasPrice: gasWei.mul('5') }, // High gas price so that it gets capped
- )
+ { gasPrice: gasWei.mul('5') }, // High gas price so that it gets capped
+ )
- const receipt = await tx.wait()
- const upkeepPerformedLogs = parseUpkeepPerformedLogs(receipt)
- // exactly numPassingUpkeeps Upkeep Performed should be emitted
- assert.equal(upkeepPerformedLogs.length, numUpkeeps)
+ const receipt = await tx.wait()
+ const upkeepPerformedLogs = parseUpkeepPerformedLogs(receipt)
+ // exactly numPassingUpkeeps Upkeep Performed should be emitted
+ assert.equal(upkeepPerformedLogs.length, numUpkeeps)
- // Verify the payment calculation in upkeepPerformed[0]
- const upkeepPerformedLog = upkeepPerformedLogs[0]
+ // Verify the payment calculation in upkeepPerformed[0]
+ const upkeepPerformedLog = upkeepPerformedLogs[0]
- const gasUsed = upkeepPerformedLog.args.gasUsed
- const gasOverhead = upkeepPerformedLog.args.gasOverhead
- const totalPayment = upkeepPerformedLog.args.totalPayment
+ const gasUsed = upkeepPerformedLog.args.gasUsed
+ const gasOverhead = upkeepPerformedLog.args.gasOverhead
+ const totalPayment = upkeepPerformedLog.args.totalPayment
- assert.equal(
- linkForGas(
- gasUsed,
- gasOverhead,
- gasCeilingMultiplier,
- paymentPremiumPPB,
- flatFeeMicroLink,
- l1CostWeiArb.div(gasCeilingMultiplier), // Dividing by gasCeilingMultiplier as it gets multiplied later
- BigNumber.from(numUpkeeps),
- ).total.toString(),
- totalPayment.toString(),
- )
- })
- },
- )
+ assert.equal(
+ linkForGas(
+ gasUsed,
+ gasOverhead,
+ gasCeilingMultiplier,
+ paymentPremiumPPB,
+ flatFeeMicroLink,
+ l1CostWeiArb.div(gasCeilingMultiplier), // Dividing by gasCeilingMultiplier as it gets multiplied later
+ BigNumber.from(numUpkeeps),
+ ).total.toString(),
+ totalPayment.toString(),
+ )
+ })
+ })
describe('#recoverFunds', () => {
const sent = toWei('7')
diff --git a/core/gethwrappers/generated/keeper_registry_wrapper_2_2/keeper_registry_wrapper_2_2.go b/core/gethwrappers/generated/keeper_registry_wrapper_2_2/keeper_registry_wrapper_2_2.go
index 3b5880fef9a..46da37b6886 100644
--- a/core/gethwrappers/generated/keeper_registry_wrapper_2_2/keeper_registry_wrapper_2_2.go
+++ b/core/gethwrappers/generated/keeper_registry_wrapper_2_2/keeper_registry_wrapper_2_2.go
@@ -51,7 +51,7 @@ type AutomationRegistryBase22OnchainConfig struct {
var AutomationRegistryMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"contractAutomationRegistryLogicB2_2\",\"name\":\"logicA\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ArrayHasNoEntries\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotCancel\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CheckDataExceedsLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateEntry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasLimitCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasLimitOutsideRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfFaultyOracles\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientFunds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidReport\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTrigger\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTriggerType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxCheckDataSizeCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxPerformDataSizeCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MigrationNotPermitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyActiveSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyActiveTransmitters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByLINKToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrRegistrar\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByProposedAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByProposedPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByUpkeepPrivilegeManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPausedUpkeep\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySimulatedBackend\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyUnpausedUpkeep\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ParameterLengthError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PaymentGreaterThanAllLINK\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RegistryPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RepeatedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RepeatedTransmitter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"TargetCheckReverted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyOracles\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TranscoderNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepCancelled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepNotCanceled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepNotNeeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValueNotChanged\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"privilegeConfig\",\"type\":\"bytes\"}],\"name\":\"AdminPrivilegeConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"CancelledUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"previousConfigBlockNumber\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"configCount\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"onchainConfig\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"dedupKey\",\"type\":\"bytes32\"}],\"name\":\"DedupKeyAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"}],\"name\":\"FundsAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"FundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"InsufficientFundsUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"}],\"name\":\"OwnerFundsWithdrawn\",\"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\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"payees\",\"type\":\"address[]\"}],\"name\":\"PayeesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"PayeeshipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"PayeeshipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"}],\"name\":\"PaymentWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"ReorgedUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"StaleUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"name\":\"Transmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"UpkeepAdminTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"UpkeepAdminTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"atBlockHeight\",\"type\":\"uint64\"}],\"name\":\"UpkeepCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"newCheckData\",\"type\":\"bytes\"}],\"name\":\"UpkeepCheckDataSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"gasLimit\",\"type\":\"uint96\"}],\"name\":\"UpkeepGasLimitSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"UpkeepMigrated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepOffchainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"UpkeepPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"totalPayment\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasOverhead\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"UpkeepPerformed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"privilegeConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepPrivilegeConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startingBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"importedFrom\",\"type\":\"address\"}],\"name\":\"UpkeepReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"performGas\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"UpkeepRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"triggerConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepTriggerConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"UpkeepUnpaused\",\"type\":\"event\"},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fallbackTo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfigDetails\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfigDigestAndEpoch\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"scanLogs\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onTokenTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"onchainConfigBytes\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"paymentPremiumPPB\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"flatFeeMicroLink\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"checkGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"stalenessSeconds\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"gasCeilingMultiplier\",\"type\":\"uint16\"},{\"internalType\":\"uint96\",\"name\":\"minUpkeepSpend\",\"type\":\"uint96\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxCheckDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxRevertDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"fallbackGasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fallbackLinkPrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"transcoder\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"registrars\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"upkeepPrivilegeManager\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reorgProtectionEnabled\",\"type\":\"bool\"}],\"internalType\":\"structAutomationRegistryBase2_2.OnchainConfig\",\"name\":\"onchainConfig\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"setConfigTypeSafe\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"performData\",\"type\":\"bytes\"}],\"name\":\"simulatePerformUpkeep\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"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\":\"rawReport\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"rawVs\",\"type\":\"bytes32\"}],\"name\":\"transmit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
- Bin: "0x6101606040523480156200001257600080fd5b506040516200564e3803806200564e83398101604081905262000035916200044b565b80816001600160a01b0316634b4fd03b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009b919062000472565b826001600160a01b031663ca30e6036040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010091906200044b565b836001600160a01b031663b10b673c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016591906200044b565b846001600160a01b0316636709d0e56040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ca91906200044b565b856001600160a01b0316635425d8ac6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000209573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022f91906200044b565b866001600160a01b031663a08714c06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029491906200044b565b3380600081620002eb5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b03848116919091179091558116156200031e576200031e8162000387565b50505085600281111562000336576200033662000495565b60e08160028111156200034d576200034d62000495565b9052506001600160a01b0394851660805292841660a05290831660c052821661010052811661012052919091166101405250620004ab9050565b336001600160a01b03821603620003e15760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401620002e2565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6001600160a01b03811681146200044857600080fd5b50565b6000602082840312156200045e57600080fd5b81516200046b8162000432565b9392505050565b6000602082840312156200048557600080fd5b8151600381106200046b57600080fd5b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05160e051610100516101205161014051615136620005186000396000818160d6015261016f015260006127150152600050506000818161253d0152818161347e015281816136110152613b2e01526000505060005050600061134a01526151366000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c8063a4c0ed3611610081578063b1dc65a41161005b578063b1dc65a4146102e0578063e3d0e712146102f3578063f2fde38b14610306576100d4565b8063a4c0ed3614610262578063aed2e92914610275578063afcb95d71461029f576100d4565b806379ba5097116100b257806379ba5097146101c757806381ff7048146101cf5780638da5cb5b14610244576100d4565b8063181f5a771461011b578063349e8cca1461016d5780636cad5469146101b4575b7f00000000000000000000000000000000000000000000000000000000000000003660008037600080366000845af43d6000803e808015610114573d6000f35b3d6000fd5b005b6101576040518060400160405280601881526020017f4175746f6d6174696f6e526567697374727920322e322e30000000000000000081525081565b6040516101649190613dad565b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610164565b6101196101c23660046141dc565b610319565b610119611230565b61022160155460115463ffffffff780100000000000000000000000000000000000000000000000083048116937c01000000000000000000000000000000000000000000000000000000009093041691565b6040805163ffffffff948516815293909216602084015290820152606001610164565b60005473ffffffffffffffffffffffffffffffffffffffff1661018f565b6101196102703660046142f2565b611332565b61028861028336600461434e565b61154e565b604080519215158352602083019190915201610164565b601154601254604080516000815260208101939093527401000000000000000000000000000000000000000090910463ffffffff1690820152606001610164565b6101196102ee3660046143df565b6116c6565b610119610301366004614496565b61226f565b610119610314366004614525565b612298565b6103216122ac565b601f8651111561035d576040517f25d0209c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360ff1660000361039a576040517fe77dba5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845186511415806103b957506103b1846003614571565b60ff16865111155b156103f0576040517f1d2d1c5800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601254600e546bffffffffffffffffffffffff9091169060005b816bffffffffffffffffffffffff168110156104725761045f600e82815481106104365761043661458d565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16848461232f565b508061046a816145bc565b91505061040a565b5060008060005b836bffffffffffffffffffffffff1681101561057b57600d81815481106104a2576104a261458d565b600091825260209091200154600e805473ffffffffffffffffffffffffffffffffffffffff909216945090829081106104dd576104dd61458d565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff8681168452600c8352604080852080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690559116808452600b90925290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055915080610573816145bc565b915050610479565b50610588600d6000613c82565b610594600e6000613c82565b604080516080810182526000808252602082018190529181018290526060810182905290805b8c518110156109fd57600c60008e83815181106105d9576105d961458d565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040016000205460ff1615610644576040517f77cea0fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168d828151811061066e5761066e61458d565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036106c3576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052806001151581526020018260ff16815250600c60008f84815181106106f4576106f461458d565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528181019290925260400160002082518154939092015160ff16610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092171790558b518c908290811061079c5761079c61458d565b60200260200101519150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361080c576040517f58a70a0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600b60209081526040918290208251608081018452905460ff80821615801584526101008304909116938301939093526bffffffffffffffffffffffff6201000082048116948301949094526e010000000000000000000000000000900490921660608301529093506108c7576040517f6a7281ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001835260ff80821660208086019182526bffffffffffffffffffffffff808b166060880190815273ffffffffffffffffffffffffffffffffffffffff87166000908152600b909352604092839020885181549551948a0151925184166e010000000000000000000000000000027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff939094166201000002929092167fffffffffffff000000000000000000000000000000000000000000000000ffff94909616610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000090951694909417179190911692909217919091179055806109f5816145bc565b9150506105ba565b50508a51610a139150600d9060208d0190613ca0565b508851610a2790600e9060208c0190613ca0565b50604051806101400160405280856bffffffffffffffffffffffff168152602001886000015163ffffffff168152602001886020015163ffffffff168152602001600063ffffffff168152602001886060015162ffffff168152602001886080015161ffff1681526020018960ff1681526020016012600001601e9054906101000a900460ff16151581526020016012600001601f9054906101000a900460ff1615158152602001886101e001511515815250601260008201518160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550602082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060808201518160000160186101000a81548162ffffff021916908362ffffff16021790555060a082015181600001601b6101000a81548161ffff021916908361ffff16021790555060c082015181600001601d6101000a81548160ff021916908360ff16021790555060e082015181600001601e6101000a81548160ff02191690831515021790555061010082015181600001601f6101000a81548160ff0219169083151502179055506101208201518160010160006101000a81548160ff0219169083151502179055509050506040518061018001604052808860a001516bffffffffffffffffffffffff16815260200188610180015173ffffffffffffffffffffffffffffffffffffffff168152602001601460010160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff168152602001886040015163ffffffff1681526020018860c0015163ffffffff168152602001601460010160149054906101000a900463ffffffff1663ffffffff168152602001601460010160189054906101000a900463ffffffff1663ffffffff1681526020016014600101601c9054906101000a900463ffffffff1663ffffffff1681526020018860e0015163ffffffff16815260200188610100015163ffffffff16815260200188610120015163ffffffff168152602001886101c0015173ffffffffffffffffffffffffffffffffffffffff16815250601460008201518160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550602082015181600001600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550606082015181600101600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160010160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600101601c6101000a81548163ffffffff021916908363ffffffff1602179055506101008201518160020160006101000a81548163ffffffff021916908363ffffffff1602179055506101208201518160020160046101000a81548163ffffffff021916908363ffffffff1602179055506101408201518160020160086101000a81548163ffffffff021916908363ffffffff16021790555061016082015181600201600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505086610140015160178190555086610160015160188190555060006014600101601c9054906101000a900463ffffffff169050611017612537565b601580547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff938416021780825560019260189161109291859178010000000000000000000000000000000000000000000000009004166145f4565b92506101000a81548163ffffffff021916908363ffffffff1602179055506000886040516020016110c39190614662565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905260155490915061112c90469030907801000000000000000000000000000000000000000000000000900463ffffffff168f8f8f878f8f6125ec565b60115560005b61113c6009612696565b81101561116c576111596111516009836126a6565b6009906126b9565b5080611164816145bc565b915050611132565b5060005b896101a00151518110156111c3576111b08a6101a0015182815181106111985761119861458d565b602002602001015160096126db90919063ffffffff16565b50806111bb816145bc565b915050611170565b507f1591690b8638f5fb2dbec82ac741805ac5da8b45dc5263f4875b0496fdce4e0582601154601460010160189054906101000a900463ffffffff168f8f8f878f8f60405161121a999897969594939291906147dd565b60405180910390a1505050505050505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146112b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146113a1576040517fc8bad78d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081146113db576040517fdfe9309000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006113e982840184614873565b60008181526004602052604090205490915065010000000000900463ffffffff90811614611443576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008181526004602052604090206001015461147e9085906c0100000000000000000000000090046bffffffffffffffffffffffff1661488c565b600082815260046020526040902060010180546bffffffffffffffffffffffff929092166c01000000000000000000000000027fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff9092169190911790556019546114e99085906148b1565b6019556040516bffffffffffffffffffffffff8516815273ffffffffffffffffffffffffffffffffffffffff86169082907fafd24114486da8ebfc32f3626dada8863652e187461aa74d4bfa7348915062039060200160405180910390a35050505050565b6000806115596126fd565b6012547e01000000000000000000000000000000000000000000000000000000000000900460ff16156115b8576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600085815260046020908152604091829020825160e081018452815460ff811615158252610100810463ffffffff908116838601819052650100000000008304821684880152690100000000000000000090920473ffffffffffffffffffffffffffffffffffffffff16606084018190526001909401546bffffffffffffffffffffffff80821660808601526c0100000000000000000000000082041660a0850152780100000000000000000000000000000000000000000000000090041660c08301528451601f890185900485028101850190955287855290936116b793899089908190840183828082843760009201919091525061276c92505050565b9093509150505b935093915050565b60005a60408051610140810182526012546bffffffffffffffffffffffff8116825263ffffffff6c010000000000000000000000008204811660208401527001000000000000000000000000000000008204811693830193909352740100000000000000000000000000000000000000008104909216606082015262ffffff7801000000000000000000000000000000000000000000000000830416608082015261ffff7b0100000000000000000000000000000000000000000000000000000083041660a082015260ff7d0100000000000000000000000000000000000000000000000000000000008304811660c08301527e010000000000000000000000000000000000000000000000000000000000008304811615801560e08401527f010000000000000000000000000000000000000000000000000000000000000090930481161515610100830152601354161515610120820152919250611858576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600b602052604090205460ff166118a1576040517f1099ed7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6011548a35146118dd576040517fdfdcf8e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60c08101516118ed9060016148c4565b60ff16861415806118fe5750858414155b15611935576040517f0244f71a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119458a8a8a8a8a8a8a8a612995565b60006119518a8a612bfe565b9050600081604001515167ffffffffffffffff81111561197357611973613dc0565b604051908082528060200260200182016040528015611a3757816020015b604080516101e0810182526000610100820181815261012083018290526101408301829052610160830182905261018083018290526101a083018290526101c0830182905282526020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816119915790505b5090506000805b836040015151811015611e81576004600085604001518381518110611a6557611a6561458d565b6020908102919091018101518252818101929092526040908101600020815160e081018352815460ff811615158252610100810463ffffffff90811695830195909552650100000000008104851693820193909352690100000000000000000090920473ffffffffffffffffffffffffffffffffffffffff166060830152600101546bffffffffffffffffffffffff80821660808401526c0100000000000000000000000082041660a08301527801000000000000000000000000000000000000000000000000900490911660c08201528351849083908110611b4a57611b4a61458d565b602002602001015160000181905250611b7f84604001518281518110611b7257611b7261458d565b6020026020010151612cb7565b838281518110611b9157611b9161458d565b6020026020010151608001906001811115611bae57611bae6148dd565b90816001811115611bc157611bc16148dd565b81525050611c3585848381518110611bdb57611bdb61458d565b60200260200101516080015186606001518481518110611bfd57611bfd61458d565b60200260200101518760a001518581518110611c1b57611c1b61458d565b602002602001015151886000015189602001516001612d62565b838281518110611c4757611c4761458d565b6020026020010151604001906bffffffffffffffffffffffff1690816bffffffffffffffffffffffff1681525050611cd484604001518281518110611c8e57611c8e61458d565b602002602001015185608001518381518110611cac57611cac61458d565b6020026020010151858481518110611cc657611cc661458d565b602002602001015188612dad565b848381518110611ce657611ce661458d565b6020026020010151602001858481518110611d0357611d0361458d565b602002602001015160e0018281525082151515158152505050828181518110611d2e57611d2e61458d565b60200260200101516020015115611d5157611d4a60018361490c565b9150611d56565b611e6f565b611dbc838281518110611d6b57611d6b61458d565b6020026020010151600001516060015185606001518381518110611d9157611d9161458d565b60200260200101518660a001518481518110611daf57611daf61458d565b602002602001015161276c565b848381518110611dce57611dce61458d565b6020026020010151606001858481518110611deb57611deb61458d565b602002602001015160a0018281525082151515158152505050828181518110611e1657611e1661458d565b602002602001015160a0015186611e2d9190614927565b9550611e6f84604001518281518110611e4857611e4861458d565b6020026020010151848381518110611e6257611e6261458d565b6020026020010151612f30565b80611e79816145bc565b915050611a3e565b508061ffff16600003611e98575050505050612265565b60c0840151611ea89060016148c4565b611eb79060ff1661044c61493a565b616b6c611ec58d601061493a565b5a611ed09089614927565b611eda91906148b1565b611ee491906148b1565b611eee91906148b1565b9450611b58611f0161ffff831687614980565b611f0b91906148b1565b945060008060008060005b87604001515181101561210c57868181518110611f3557611f3561458d565b602002602001015160200151156120fa57611f918a888381518110611f5c57611f5c61458d565b6020026020010151608001518a60a001518481518110611f7e57611f7e61458d565b6020026020010151518c60c00151613042565b878281518110611fa357611fa361458d565b602002602001015160c0018181525050611fff8989604001518381518110611fcd57611fcd61458d565b6020026020010151898481518110611fe757611fe761458d565b60200260200101518b600001518c602001518b613062565b909350915061200e828561488c565b935061201a838661488c565b945086818151811061202e5761202e61458d565b6020026020010151606001511515886040015182815181106120525761205261458d565b60200260200101517fad8cc9579b21dfe2c2f6ea35ba15b656e46b4f5b0cb424f52739b8ce5cac9c5b8486612087919061488c565b8a85815181106120995761209961458d565b602002602001015160a001518b86815181106120b7576120b761458d565b602002602001015160c001518d6080015187815181106120d9576120d961458d565b60200260200101516040516120f19493929190614994565b60405180910390a35b80612104816145bc565b915050611f16565b5050336000908152600b6020526040902080548492506002906121449084906201000090046bffffffffffffffffffffffff1661488c565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555080601260000160008282829054906101000a90046bffffffffffffffffffffffff1661219e919061488c565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555060008f6001600381106121e1576121e161458d565b602002013560001c9050600060088264ffffffffff16901c9050876060015163ffffffff168163ffffffff16111561225b57601280547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8416021790555b5050505050505050505b5050505050505050565b612290868686868060200190518101906122899190614a77565b8686610319565b505050505050565b6122a06122ac565b6122a981613155565b50565b60005473ffffffffffffffffffffffffffffffffffffffff16331461232d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016112ad565b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600b602090815260408083208151608081018352905460ff80821615801584526101008304909116948301949094526bffffffffffffffffffffffff6201000082048116938301939093526e010000000000000000000000000000900490911660608201529061252b5760008160600151856123c79190614be5565b905060006123d58583614c0a565b905080836040018181516123e9919061488c565b6bffffffffffffffffffffffff169052506124048582614c35565b83606001818151612415919061488c565b6bffffffffffffffffffffffff90811690915273ffffffffffffffffffffffffffffffffffffffff89166000908152600b602090815260409182902087518154928901519389015160608a015186166e010000000000000000000000000000027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff919096166201000002167fffffffffffff000000000000000000000000000000000000000000000000ffff60ff95909516610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909416939093171792909216179190911790555050505b60400151949350505050565b600060017f0000000000000000000000000000000000000000000000000000000000000000600281111561256d5761256d6148dd565b036125e757606473ffffffffffffffffffffffffffffffffffffffff1663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e29190614c65565b905090565b504390565b6000808a8a8a8a8a8a8a8a8a60405160200161261099989796959493929190614c7e565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101207dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e01000000000000000000000000000000000000000000000000000000000000179b9a5050505050505050505050565b60006126a0825490565b92915050565b60006126b2838361324a565b9392505050565b60006126b28373ffffffffffffffffffffffffffffffffffffffff8416613274565b60006126b28373ffffffffffffffffffffffffffffffffffffffff841661336e565b3273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461232d576040517fb60ac5db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60125460009081907f0100000000000000000000000000000000000000000000000000000000000000900460ff16156127d1576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601280547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790556040517f4585e33b000000000000000000000000000000000000000000000000000000009061284d908590602401613dad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517f79188d1600000000000000000000000000000000000000000000000000000000815290935073ffffffffffffffffffffffffffffffffffffffff8616906379188d16906129209087908790600401614d13565b60408051808303816000875af115801561293e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129629190614d2c565b601280547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16905590969095509350505050565b600087876040516129a7929190614d5a565b6040519081900381206129be918b90602001614d6a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201208383019092526000808452908301819052909250906000805b88811015612b9557600185878360208110612a2a57612a2a61458d565b612a3791901a601b6148c4565b8c8c85818110612a4957612a4961458d565b905060200201358b8b86818110612a6257612a6261458d565b9050602002013560405160008152602001604052604051612a9f949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015612ac1573d6000803e3d6000fd5b5050604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081015173ffffffffffffffffffffffffffffffffffffffff81166000908152600c602090815290849020838501909452925460ff8082161515808552610100909204169383019390935290955093509050612b6f576040517f0f4c073700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826020015160080260ff166001901b840193508080612b8d906145bc565b915050612a0d565b50827e01010101010101010101010101010101010101010101010101010101010101841614612bf0576040517fc103be2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050505050565b612c376040518060c001604052806000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6000612c4583850185614e5b565b6040810151516060820151519192509081141580612c6857508082608001515114155b80612c785750808260a001515114155b15612caf576040517fb55ac75400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b509392505050565b6000818160045b600f811015612d44577fff000000000000000000000000000000000000000000000000000000000000008216838260208110612cfc57612cfc61458d565b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612d3257506000949350505050565b80612d3c816145bc565b915050612cbe565b5081600f1a6001811115612d5a57612d5a6148dd565b949350505050565b600080612d7488878b60c001516133bd565b9050600080612d8f8b8a63ffffffff16858a8a60018b613449565b9092509050612d9e818361488c565b9b9a5050505050505050505050565b600080808085608001516001811115612dc857612dc86148dd565b03612ded57612dd9878787876138a2565b612de857600092509050612f27565b612e64565b600185608001516001811115612e0557612e056148dd565b03612e32576000612e178888876139a4565b9250905080612e2c5750600092509050612f27565b50612e64565b6040517ff2b2d41200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e6c612537565b85516040015163ffffffff1611612ec057867fc3237c8807c467c1b39b8d0395eff077313e691bf0a7388106792564ebfd563687604051612ead9190613dad565b60405180910390a2600092509050612f27565b84604001516bffffffffffffffffffffffff16856000015160a001516bffffffffffffffffffffffff161015612f2057867f377c8b0c126ae5248d27aca1c76fac4608aff85673ee3caf09747e1044549e0287604051612ead9190613dad565b6001925090505b94509492505050565b600081608001516001811115612f4857612f486148dd565b03612fba57612f55612537565b6000838152600460205260409020600101805463ffffffff929092167801000000000000000000000000000000000000000000000000027fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff9092169190911790555050565b600181608001516001811115612fd257612fd26148dd565b0361303e5760e08101805160009081526008602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055915191517fa4a4e334c0e330143f9437484fe516c13bc560b86b5b0daf58e7084aaac228f29190a25b5050565b600061304f8484846133bd565b905080851015612d5a5750929392505050565b60008061307d888760a001518860c001518888886001613449565b9092509050600061308e828461488c565b600089815260046020526040902060010180549192508291600c906130d29084906c0100000000000000000000000090046bffffffffffffffffffffffff16614be5565b82546101009290920a6bffffffffffffffffffffffff81810219909316918316021790915560008a81526004602052604081206001018054859450909261311b9185911661488c565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555050965096945050505050565b3373ffffffffffffffffffffffffffffffffffffffff8216036131d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016112ad565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008260000182815481106132615761326161458d565b9060005260206000200154905092915050565b6000818152600183016020526040812054801561335d576000613298600183614927565b85549091506000906132ac90600190614927565b90508181146133115760008660000182815481106132cc576132cc61458d565b90600052602060002001549050808760000184815481106132ef576132ef61458d565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061332257613322614f48565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506126a0565b60009150506126a0565b5092915050565b60008181526001830160205260408120546133b5575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556126a0565b5060006126a0565b600080808560018111156133d3576133d36148dd565b036133e2575062015f90613401565b60018560018111156133f6576133f66148dd565b03612e3257506201adb05b61341263ffffffff8516601461493a565b61341d8460016148c4565b61342c9060ff16611d4c61493a565b61343690836148b1565b61344091906148b1565b95945050505050565b60008060008960a0015161ffff1687613462919061493a565b90508380156134705750803a105b1561347857503a5b600060027f000000000000000000000000000000000000000000000000000000000000000060028111156134ae576134ae6148dd565b0361360d57604080516000815260208101909152851561350c576000366040518060800160405280604881526020016150e2604891396040516020016134f693929190614f77565b6040516020818303038152906040529050613574565b60165461352890640100000000900463ffffffff166004614f9e565b63ffffffff1667ffffffffffffffff81111561354657613546613dc0565b6040519080825280601f01601f191660200182016040528015613570576020820181803683370190505b5090505b6040517f49948e0e00000000000000000000000000000000000000000000000000000000815273420000000000000000000000000000000000000f906349948e0e906135c4908490600401613dad565b602060405180830381865afa1580156135e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136059190614c65565b915050613767565b60017f00000000000000000000000000000000000000000000000000000000000000006002811115613641576136416148dd565b036137675784156136c357606c73ffffffffffffffffffffffffffffffffffffffff1663c6f7de0e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136bc9190614c65565b9050613767565b6000606c73ffffffffffffffffffffffffffffffffffffffff166341b247a86040518163ffffffff1660e01b815260040160c060405180830381865afa158015613711573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137359190614fbe565b505060165492945061375893505050640100000000900463ffffffff168261493a565b61376390601061493a565b9150505b8461378357808b60a0015161ffff16613780919061493a565b90505b61379161ffff871682614980565b9050600087826137a18c8e6148b1565b6137ab908661493a565b6137b591906148b1565b6137c790670de0b6b3a764000061493a565b6137d19190614980565b905060008c6040015163ffffffff1664e8d4a510006137f0919061493a565b898e6020015163ffffffff16858f88613809919061493a565b61381391906148b1565b61382190633b9aca0061493a565b61382b919061493a565b6138359190614980565b61383f91906148b1565b90506b033b2e3c9fd0803ce800000061385882846148b1565b1115613890576040517f2ad7547a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b909c909b509950505050505050505050565b600080848060200190518101906138b99190615008565b845160c00151815191925063ffffffff9081169116101561391657857f405288ea7be309e16cfdf481367f90a413e1d4634fcdaf8966546db9b93012e8866040516139049190613dad565b60405180910390a26000915050612d5a565b826101200151801561394a575060208101511580159061394a5750602081015181516139479063ffffffff16613b28565b14155b806139635750613958612537565b815163ffffffff1610155b1561399857857f6aa7f60c176da7af894b384daea2249497448137f5943c1237ada8bc92bdc301866040516139049190613dad565b50600195945050505050565b6000806000848060200190518101906139bd9190615060565b9050600086826000015183602001518460400151604051602001613a1f94939291909384526020840192909252604083015260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016606082015260640190565b6040516020818303038152906040528051906020012090508461012001518015613a6d5750608082015115801590613a6d57508160800151613a6a836060015163ffffffff16613b28565b14155b80613a895750613a7b612537565b826060015163ffffffff1610155b15613ad357867f6aa7f60c176da7af894b384daea2249497448137f5943c1237ada8bc92bdc30187604051613abe9190613dad565b60405180910390a26000935091506116be9050565b60008181526008602052604090205460ff1615613b1a57867f405288ea7be309e16cfdf481367f90a413e1d4634fcdaf8966546db9b93012e887604051613abe9190613dad565b600197909650945050505050565b600060017f00000000000000000000000000000000000000000000000000000000000000006002811115613b5e57613b5e6148dd565b03613c78576000606473ffffffffffffffffffffffffffffffffffffffff1663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd59190614c65565b90508083101580613bf05750610100613bee8483614927565b115b15613bfe5750600092915050565b6040517f2b407a8200000000000000000000000000000000000000000000000000000000815260048101849052606490632b407a8290602401602060405180830381865afa158015613c54573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b29190614c65565b504090565b919050565b50805460008255906000526020600020908101906122a99190613d2a565b828054828255906000526020600020908101928215613d1a579160200282015b82811115613d1a57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190613cc0565b50613d26929150613d2a565b5090565b5b80821115613d265760008155600101613d2b565b60005b83811015613d5a578181015183820152602001613d42565b50506000910152565b60008151808452613d7b816020860160208601613d3f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006126b26020830184613d63565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610200810167ffffffffffffffff81118282101715613e1357613e13613dc0565b60405290565b60405160c0810167ffffffffffffffff81118282101715613e1357613e13613dc0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613e8357613e83613dc0565b604052919050565b600067ffffffffffffffff821115613ea557613ea5613dc0565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff811681146122a957600080fd5b8035613c7d81613eaf565b600082601f830112613eed57600080fd5b81356020613f02613efd83613e8b565b613e3c565b82815260059290921b84018101918181019086841115613f2157600080fd5b8286015b84811015613f45578035613f3881613eaf565b8352918301918301613f25565b509695505050505050565b803560ff81168114613c7d57600080fd5b63ffffffff811681146122a957600080fd5b8035613c7d81613f61565b62ffffff811681146122a957600080fd5b8035613c7d81613f7e565b61ffff811681146122a957600080fd5b8035613c7d81613f9a565b6bffffffffffffffffffffffff811681146122a957600080fd5b8035613c7d81613fb5565b80151581146122a957600080fd5b8035613c7d81613fda565b6000610200828403121561400657600080fd5b61400e613def565b905061401982613f73565b815261402760208301613f73565b602082015261403860408301613f73565b604082015261404960608301613f8f565b606082015261405a60808301613faa565b608082015261406b60a08301613fcf565b60a082015261407c60c08301613f73565b60c082015261408d60e08301613f73565b60e08201526101006140a0818401613f73565b908201526101206140b2838201613f73565b90820152610140828101359082015261016080830135908201526101806140da818401613ed1565b908201526101a08281013567ffffffffffffffff8111156140fa57600080fd5b61410685828601613edc565b8284015250506101c061411a818401613ed1565b908201526101e061412c838201613fe8565b9082015292915050565b803567ffffffffffffffff81168114613c7d57600080fd5b600082601f83011261415f57600080fd5b813567ffffffffffffffff81111561417957614179613dc0565b6141aa60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613e3c565b8181528460208386010111156141bf57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156141f557600080fd5b863567ffffffffffffffff8082111561420d57600080fd5b6142198a838b01613edc565b9750602089013591508082111561422f57600080fd5b61423b8a838b01613edc565b965061424960408a01613f50565b9550606089013591508082111561425f57600080fd5b61426b8a838b01613ff3565b945061427960808a01614136565b935060a089013591508082111561428f57600080fd5b5061429c89828a0161414e565b9150509295509295509295565b60008083601f8401126142bb57600080fd5b50813567ffffffffffffffff8111156142d357600080fd5b6020830191508360208285010111156142eb57600080fd5b9250929050565b6000806000806060858703121561430857600080fd5b843561431381613eaf565b935060208501359250604085013567ffffffffffffffff81111561433657600080fd5b614342878288016142a9565b95989497509550505050565b60008060006040848603121561436357600080fd5b83359250602084013567ffffffffffffffff81111561438157600080fd5b61438d868287016142a9565b9497909650939450505050565b60008083601f8401126143ac57600080fd5b50813567ffffffffffffffff8111156143c457600080fd5b6020830191508360208260051b85010111156142eb57600080fd5b60008060008060008060008060e0898b0312156143fb57600080fd5b606089018a81111561440c57600080fd5b8998503567ffffffffffffffff8082111561442657600080fd5b6144328c838d016142a9565b909950975060808b013591508082111561444b57600080fd5b6144578c838d0161439a565b909750955060a08b013591508082111561447057600080fd5b5061447d8b828c0161439a565b999c989b50969995989497949560c00135949350505050565b60008060008060008060c087890312156144af57600080fd5b863567ffffffffffffffff808211156144c757600080fd5b6144d38a838b01613edc565b975060208901359150808211156144e957600080fd5b6144f58a838b01613edc565b965061450360408a01613f50565b9550606089013591508082111561451957600080fd5b61426b8a838b0161414e565b60006020828403121561453757600080fd5b81356126b281613eaf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff818116838216029081169081811461336757613367614542565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145ed576145ed614542565b5060010190565b63ffffffff81811683821601908082111561336757613367614542565b600081518084526020808501945080840160005b8381101561465757815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614625565b509495945050505050565b6020815261467960208201835163ffffffff169052565b60006020830151614692604084018263ffffffff169052565b50604083015163ffffffff8116606084015250606083015162ffffff8116608084015250608083015161ffff811660a08401525060a08301516bffffffffffffffffffffffff811660c08401525060c083015163ffffffff811660e08401525060e083015161010061470b8185018363ffffffff169052565b84015190506101206147248482018363ffffffff169052565b840151905061014061473d8482018363ffffffff169052565b840151610160848101919091528401516101808085019190915284015190506101a06147808185018373ffffffffffffffffffffffffffffffffffffffff169052565b808501519150506102006101c081818601526147a0610220860184614611565b908601519092506101e06147cb8682018373ffffffffffffffffffffffffffffffffffffffff169052565b90950151151593019290925250919050565b600061012063ffffffff808d1684528b6020850152808b1660408501525080606084015261480d8184018a614611565b905082810360808401526148218189614611565b905060ff871660a084015282810360c084015261483e8187613d63565b905067ffffffffffffffff851660e08401528281036101008401526148638185613d63565b9c9b505050505050505050505050565b60006020828403121561488557600080fd5b5035919050565b6bffffffffffffffffffffffff81811683821601908082111561336757613367614542565b808201808211156126a0576126a0614542565b60ff81811683821601908111156126a0576126a0614542565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b61ffff81811683821601908082111561336757613367614542565b818103818111156126a0576126a0614542565b80820281158282048414176126a0576126a0614542565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261498f5761498f614951565b500490565b6bffffffffffffffffffffffff851681528360208201528260408201526080606082015260006149c76080830184613d63565b9695505050505050565b8051613c7d81613f61565b8051613c7d81613f7e565b8051613c7d81613f9a565b8051613c7d81613fb5565b8051613c7d81613eaf565b600082601f830112614a1957600080fd5b81516020614a29613efd83613e8b565b82815260059290921b84018101918181019086841115614a4857600080fd5b8286015b84811015613f45578051614a5f81613eaf565b8352918301918301614a4c565b8051613c7d81613fda565b600060208284031215614a8957600080fd5b815167ffffffffffffffff80821115614aa157600080fd5b908301906102008286031215614ab657600080fd5b614abe613def565b614ac7836149d1565b8152614ad5602084016149d1565b6020820152614ae6604084016149d1565b6040820152614af7606084016149dc565b6060820152614b08608084016149e7565b6080820152614b1960a084016149f2565b60a0820152614b2a60c084016149d1565b60c0820152614b3b60e084016149d1565b60e0820152610100614b4e8185016149d1565b90820152610120614b608482016149d1565b9082015261014083810151908201526101608084015190820152610180614b888185016149fd565b908201526101a08381015183811115614ba057600080fd5b614bac88828701614a08565b8284015250506101c09150614bc28284016149fd565b828201526101e09150614bd6828401614a6c565b91810191909152949350505050565b6bffffffffffffffffffffffff82811682821603908082111561336757613367614542565b60006bffffffffffffffffffffffff80841680614c2957614c29614951565b92169190910492915050565b6bffffffffffffffffffffffff818116838216028082169190828114614c5d57614c5d614542565b505092915050565b600060208284031215614c7757600080fd5b5051919050565b60006101208b835273ffffffffffffffffffffffffffffffffffffffff8b16602084015267ffffffffffffffff808b166040850152816060850152614cc58285018b614611565b91508382036080850152614cd9828a614611565b915060ff881660a085015283820360c0850152614cf68288613d63565b90861660e085015283810361010085015290506148638185613d63565b828152604060208201526000612d5a6040830184613d63565b60008060408385031215614d3f57600080fd5b8251614d4a81613fda565b6020939093015192949293505050565b8183823760009101908152919050565b8281526080810160608360208401379392505050565b600082601f830112614d9157600080fd5b81356020614da1613efd83613e8b565b82815260059290921b84018101918181019086841115614dc057600080fd5b8286015b84811015613f455780358352918301918301614dc4565b600082601f830112614dec57600080fd5b81356020614dfc613efd83613e8b565b82815260059290921b84018101918181019086841115614e1b57600080fd5b8286015b84811015613f4557803567ffffffffffffffff811115614e3f5760008081fd5b614e4d8986838b010161414e565b845250918301918301614e1f565b600060208284031215614e6d57600080fd5b813567ffffffffffffffff80821115614e8557600080fd5b9083019060c08286031215614e9957600080fd5b614ea1613e19565b8235815260208301356020820152604083013582811115614ec157600080fd5b614ecd87828601614d80565b604083015250606083013582811115614ee557600080fd5b614ef187828601614d80565b606083015250608083013582811115614f0957600080fd5b614f1587828601614ddb565b60808301525060a083013582811115614f2d57600080fd5b614f3987828601614ddb565b60a08301525095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b828482376000838201600081528351614f94818360208801613d3f565b0195945050505050565b63ffffffff818116838216028082169190828114614c5d57614c5d614542565b60008060008060008060c08789031215614fd757600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b60006040828403121561501a57600080fd5b6040516040810181811067ffffffffffffffff8211171561503d5761503d613dc0565b604052825161504b81613f61565b81526020928301519281019290925250919050565b600060a0828403121561507257600080fd5b60405160a0810181811067ffffffffffffffff8211171561509557615095613dc0565b8060405250825181526020830151602082015260408301516150b681613f61565b604082015260608301516150c981613f61565b6060820152608092830151928101929092525091905056fe307866666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666a164736f6c6343000813000a",
+ Bin: "0x6101606040523480156200001257600080fd5b506040516200563e3803806200563e83398101604081905262000035916200044b565b80816001600160a01b0316634b4fd03b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009b919062000472565b826001600160a01b031663ca30e6036040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010091906200044b565b836001600160a01b031663b10b673c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016591906200044b565b846001600160a01b0316636709d0e56040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ca91906200044b565b856001600160a01b0316635425d8ac6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000209573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022f91906200044b565b866001600160a01b031663a08714c06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029491906200044b565b3380600081620002eb5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b03848116919091179091558116156200031e576200031e8162000387565b50505085600281111562000336576200033662000495565b60e08160028111156200034d576200034d62000495565b9052506001600160a01b0394851660805292841660a05290831660c052821661010052811661012052919091166101405250620004ab9050565b336001600160a01b03821603620003e15760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401620002e2565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6001600160a01b03811681146200044857600080fd5b50565b6000602082840312156200045e57600080fd5b81516200046b8162000432565b9392505050565b6000602082840312156200048557600080fd5b8151600381106200046b57600080fd5b634e487b7160e01b600052602160045260246000fd5b60805160a05160c05160e051610100516101205161014051615126620005186000396000818160d6015261016f01526000611e2401526000505060008181611c4c0152818161346e015281816136010152613b1e01526000505060005050600061134a01526151266000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c8063a4c0ed3611610081578063b1dc65a41161005b578063b1dc65a4146102e0578063e3d0e712146102f3578063f2fde38b14610306576100d4565b8063a4c0ed3614610262578063aed2e92914610275578063afcb95d71461029f576100d4565b806379ba5097116100b257806379ba5097146101c757806381ff7048146101cf5780638da5cb5b14610244576100d4565b8063181f5a771461011b578063349e8cca1461016d5780636cad5469146101b4575b7f00000000000000000000000000000000000000000000000000000000000000003660008037600080366000845af43d6000803e808015610114573d6000f35b3d6000fd5b005b6101576040518060400160405280601881526020017f4175746f6d6174696f6e526567697374727920322e322e30000000000000000081525081565b6040516101649190613d9d565b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610164565b6101196101c23660046141cc565b610319565b610119611230565b61022160155460115463ffffffff780100000000000000000000000000000000000000000000000083048116937c01000000000000000000000000000000000000000000000000000000009093041691565b6040805163ffffffff948516815293909216602084015290820152606001610164565b60005473ffffffffffffffffffffffffffffffffffffffff1661018f565b6101196102703660046142e2565b611332565b61028861028336600461433e565b61154e565b604080519215158352602083019190915201610164565b601154601254604080516000815260208101939093527401000000000000000000000000000000000000000090910463ffffffff1690820152606001610164565b6101196102ee3660046143cf565b6116c6565b610119610301366004614486565b61197e565b610119610314366004614515565b6119a7565b6103216119bb565b601f8651111561035d576040517f25d0209c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8360ff1660000361039a576040517fe77dba5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845186511415806103b957506103b1846003614561565b60ff16865111155b156103f0576040517f1d2d1c5800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601254600e546bffffffffffffffffffffffff9091169060005b816bffffffffffffffffffffffff168110156104725761045f600e82815481106104365761043661457d565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff168484611a3e565b508061046a816145ac565b91505061040a565b5060008060005b836bffffffffffffffffffffffff1681101561057b57600d81815481106104a2576104a261457d565b600091825260209091200154600e805473ffffffffffffffffffffffffffffffffffffffff909216945090829081106104dd576104dd61457d565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff8681168452600c8352604080852080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690559116808452600b90925290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055915080610573816145ac565b915050610479565b50610588600d6000613c72565b610594600e6000613c72565b604080516080810182526000808252602082018190529181018290526060810182905290805b8c518110156109fd57600c60008e83815181106105d9576105d961457d565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040016000205460ff1615610644576040517f77cea0fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168d828151811061066e5761066e61457d565b602002602001015173ffffffffffffffffffffffffffffffffffffffff16036106c3576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052806001151581526020018260ff16815250600c60008f84815181106106f4576106f461457d565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528181019290925260400160002082518154939092015160ff16610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092171790558b518c908290811061079c5761079c61457d565b60200260200101519150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361080c576040517f58a70a0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600b60209081526040918290208251608081018452905460ff80821615801584526101008304909116938301939093526bffffffffffffffffffffffff6201000082048116948301949094526e010000000000000000000000000000900490921660608301529093506108c7576040517f6a7281ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001835260ff80821660208086019182526bffffffffffffffffffffffff808b166060880190815273ffffffffffffffffffffffffffffffffffffffff87166000908152600b909352604092839020885181549551948a0151925184166e010000000000000000000000000000027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff939094166201000002929092167fffffffffffff000000000000000000000000000000000000000000000000ffff94909616610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000090951694909417179190911692909217919091179055806109f5816145ac565b9150506105ba565b50508a51610a139150600d9060208d0190613c90565b508851610a2790600e9060208c0190613c90565b50604051806101400160405280856bffffffffffffffffffffffff168152602001886000015163ffffffff168152602001886020015163ffffffff168152602001600063ffffffff168152602001886060015162ffffff168152602001886080015161ffff1681526020018960ff1681526020016012600001601e9054906101000a900460ff16151581526020016012600001601f9054906101000a900460ff1615158152602001886101e001511515815250601260008201518160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550602082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160106101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060808201518160000160186101000a81548162ffffff021916908362ffffff16021790555060a082015181600001601b6101000a81548161ffff021916908361ffff16021790555060c082015181600001601d6101000a81548160ff021916908360ff16021790555060e082015181600001601e6101000a81548160ff02191690831515021790555061010082015181600001601f6101000a81548160ff0219169083151502179055506101208201518160010160006101000a81548160ff0219169083151502179055509050506040518061018001604052808860a001516bffffffffffffffffffffffff16815260200188610180015173ffffffffffffffffffffffffffffffffffffffff168152602001601460010160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff168152602001886040015163ffffffff1681526020018860c0015163ffffffff168152602001601460010160149054906101000a900463ffffffff1663ffffffff168152602001601460010160189054906101000a900463ffffffff1663ffffffff1681526020016014600101601c9054906101000a900463ffffffff1663ffffffff1681526020018860e0015163ffffffff16815260200188610100015163ffffffff16815260200188610120015163ffffffff168152602001886101c0015173ffffffffffffffffffffffffffffffffffffffff16815250601460008201518160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550602082015181600001600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550606082015181600101600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160106101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160010160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600101601c6101000a81548163ffffffff021916908363ffffffff1602179055506101008201518160020160006101000a81548163ffffffff021916908363ffffffff1602179055506101208201518160020160046101000a81548163ffffffff021916908363ffffffff1602179055506101408201518160020160086101000a81548163ffffffff021916908363ffffffff16021790555061016082015181600201600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505086610140015160178190555086610160015160188190555060006014600101601c9054906101000a900463ffffffff169050611017611c46565b601580547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff938416021780825560019260189161109291859178010000000000000000000000000000000000000000000000009004166145e4565b92506101000a81548163ffffffff021916908363ffffffff1602179055506000886040516020016110c39190614652565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905260155490915061112c90469030907801000000000000000000000000000000000000000000000000900463ffffffff168f8f8f878f8f611cfb565b60115560005b61113c6009611da5565b81101561116c57611159611151600983611db5565b600990611dc8565b5080611164816145ac565b915050611132565b5060005b896101a00151518110156111c3576111b08a6101a0015182815181106111985761119861457d565b60200260200101516009611dea90919063ffffffff16565b50806111bb816145ac565b915050611170565b507f1591690b8638f5fb2dbec82ac741805ac5da8b45dc5263f4875b0496fdce4e0582601154601460010160189054906101000a900463ffffffff168f8f8f878f8f60405161121a999897969594939291906147cd565b60405180910390a1505050505050505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146112b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146113a1576040517fc8bad78d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081146113db576040517fdfe9309000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006113e982840184614863565b60008181526004602052604090205490915065010000000000900463ffffffff90811614611443576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008181526004602052604090206001015461147e9085906c0100000000000000000000000090046bffffffffffffffffffffffff1661487c565b600082815260046020526040902060010180546bffffffffffffffffffffffff929092166c01000000000000000000000000027fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff9092169190911790556019546114e99085906148a1565b6019556040516bffffffffffffffffffffffff8516815273ffffffffffffffffffffffffffffffffffffffff86169082907fafd24114486da8ebfc32f3626dada8863652e187461aa74d4bfa7348915062039060200160405180910390a35050505050565b600080611559611e0c565b6012547e01000000000000000000000000000000000000000000000000000000000000900460ff16156115b8576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600085815260046020908152604091829020825160e081018452815460ff811615158252610100810463ffffffff908116838601819052650100000000008304821684880152690100000000000000000090920473ffffffffffffffffffffffffffffffffffffffff16606084018190526001909401546bffffffffffffffffffffffff80821660808601526c0100000000000000000000000082041660a0850152780100000000000000000000000000000000000000000000000090041660c08301528451601f890185900485028101850190955287855290936116b7938990899081908401838280828437600092019190915250611e7b92505050565b9093509150505b935093915050565b60005a60408051610140810182526012546bffffffffffffffffffffffff8116825263ffffffff6c010000000000000000000000008204811660208401527001000000000000000000000000000000008204811693830193909352740100000000000000000000000000000000000000008104909216606082015262ffffff7801000000000000000000000000000000000000000000000000830416608082015261ffff7b0100000000000000000000000000000000000000000000000000000083041660a082015260ff7d0100000000000000000000000000000000000000000000000000000000008304811660c08301527e010000000000000000000000000000000000000000000000000000000000008304811615801560e08401527f010000000000000000000000000000000000000000000000000000000000000090930481161515610100830152601354161515610120820152919250611858576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600b602052604090205460ff166118a1576040517f1099ed7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6011548a35146118dd576040517fdfdcf8e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60c08101516118ed9060016148b4565b60ff16861415806118fe5750858414155b15611935576040517f0244f71a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119458a8a8a8a8a8a8a8a6120a4565b60006119518a8a61230d565b905060208b0135600881901c63ffffffff1661196f848487846123c6565b50505050505050505050505050565b61199f868686868060200190518101906119989190614973565b8686610319565b505050505050565b6119af6119bb565b6119b881612ca7565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314611a3c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016112ad565b565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600b602090815260408083208151608081018352905460ff80821615801584526101008304909116948301949094526bffffffffffffffffffffffff6201000082048116938301939093526e0100000000000000000000000000009004909116606082015290611c3a576000816060015185611ad69190614ae1565b90506000611ae48583614b35565b90508083604001818151611af8919061487c565b6bffffffffffffffffffffffff16905250611b138582614b60565b83606001818151611b24919061487c565b6bffffffffffffffffffffffff90811690915273ffffffffffffffffffffffffffffffffffffffff89166000908152600b602090815260409182902087518154928901519389015160608a015186166e010000000000000000000000000000027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff919096166201000002167fffffffffffff000000000000000000000000000000000000000000000000ffff60ff95909516610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909416939093171792909216179190911790555050505b60400151949350505050565b600060017f00000000000000000000000000000000000000000000000000000000000000006002811115611c7c57611c7c614b90565b03611cf657606473ffffffffffffffffffffffffffffffffffffffff1663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ccd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf19190614bbf565b905090565b504390565b6000808a8a8a8a8a8a8a8a8a604051602001611d1f99989796959493929190614bd8565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101207dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e01000000000000000000000000000000000000000000000000000000000000179b9a5050505050505050505050565b6000611daf825490565b92915050565b6000611dc18383612d9c565b9392505050565b6000611dc18373ffffffffffffffffffffffffffffffffffffffff8416612dc6565b6000611dc18373ffffffffffffffffffffffffffffffffffffffff8416612ec0565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611a3c576040517fb60ac5db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60125460009081907f0100000000000000000000000000000000000000000000000000000000000000900460ff1615611ee0576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601280547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790556040517f4585e33b0000000000000000000000000000000000000000000000000000000090611f5c908590602401613d9d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517f79188d1600000000000000000000000000000000000000000000000000000000815290935073ffffffffffffffffffffffffffffffffffffffff8616906379188d169061202f9087908790600401614c6d565b60408051808303816000875af115801561204d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120719190614c86565b601280547effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16905590969095509350505050565b600087876040516120b6929190614cb4565b6040519081900381206120cd918b90602001614cc4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201208383019092526000808452908301819052909250906000805b888110156122a4576001858783602081106121395761213961457d565b61214691901a601b6148b4565b8c8c858181106121585761215861457d565b905060200201358b8b868181106121715761217161457d565b90506020020135604051600081526020016040526040516121ae949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa1580156121d0573d6000803e3d6000fd5b5050604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081015173ffffffffffffffffffffffffffffffffffffffff81166000908152600c602090815290849020838501909452925460ff808216151580855261010090920416938301939093529095509350905061227e576040517f0f4c073700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826020015160080260ff166001901b84019350808061229c906145ac565b91505061211c565b50827e010101010101010101010101010101010101010101010101010101010101018416146122ff576040517fc103be2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050505050565b6123466040518060c001604052806000815260200160008152602001606081526020016060815260200160608152602001606081525090565b600061235483850185614db5565b604081015151606082015151919250908114158061237757508082608001515114155b806123875750808260a001515114155b156123be576040517fb55ac75400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b509392505050565b600083604001515167ffffffffffffffff8111156123e6576123e6613db0565b6040519080825280602002602001820160405280156124aa57816020015b604080516101e0810182526000610100820181815261012083018290526101408301829052610160830182905261018083018290526101a083018290526101c0830182905282526020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816124045790505b5090506000805b8560400151518110156128f45760046000876040015183815181106124d8576124d861457d565b6020908102919091018101518252818101929092526040908101600020815160e081018352815460ff811615158252610100810463ffffffff90811695830195909552650100000000008104851693820193909352690100000000000000000090920473ffffffffffffffffffffffffffffffffffffffff166060830152600101546bffffffffffffffffffffffff80821660808401526c0100000000000000000000000082041660a08301527801000000000000000000000000000000000000000000000000900490911660c082015283518490839081106125bd576125bd61457d565b6020026020010151600001819052506125f2866040015182815181106125e5576125e561457d565b6020026020010151612f0f565b8382815181106126045761260461457d565b602002602001015160800190600181111561262157612621614b90565b9081600181111561263457612634614b90565b815250506126a88784838151811061264e5761264e61457d565b602002602001015160800151886060015184815181106126705761267061457d565b60200260200101518960a00151858151811061268e5761268e61457d565b6020026020010151518a600001518b602001516001612fba565b8382815181106126ba576126ba61457d565b6020026020010151604001906bffffffffffffffffffffffff1690816bffffffffffffffffffffffff1681525050612747866040015182815181106127015761270161457d565b60200260200101518760800151838151811061271f5761271f61457d565b60200260200101518584815181106127395761273961457d565b60200260200101518a613005565b8483815181106127595761275961457d565b60200260200101516020018584815181106127765761277661457d565b602002602001015160e00182815250821515151581525050508281815181106127a1576127a161457d565b602002602001015160200151156127c4576127bd600183614ea2565b91506127c9565b6128e2565b61282f8382815181106127de576127de61457d565b60200260200101516000015160600151876060015183815181106128045761280461457d565b60200260200101518860a0015184815181106128225761282261457d565b6020026020010151611e7b565b8483815181106128415761284161457d565b602002602001015160600185848151811061285e5761285e61457d565b602002602001015160a00182815250821515151581525050508281815181106128895761288961457d565b602002602001015160a00151856128a09190614ebd565b94506128e2866040015182815181106128bb576128bb61457d565b60200260200101518483815181106128d5576128d561457d565b6020026020010151613188565b806128ec816145ac565b9150506124b1565b508061ffff16600003612908575050612ca1565b60c08601516129189060016148b4565b6129279060ff1661044c614ed0565b616b6c612935366010614ed0565b5a6129409088614ebd565b61294a91906148a1565b61295491906148a1565b61295e91906148a1565b9350611b5861297161ffff831686614ee7565b61297b91906148a1565b935060008060008060005b896040015151811015612b7c578681815181106129a5576129a561457d565b60200260200101516020015115612b6a57612a01898883815181106129cc576129cc61457d565b6020026020010151608001518c60a0015184815181106129ee576129ee61457d565b6020026020010151518e60c0015161329a565b878281518110612a1357612a1361457d565b602002602001015160c0018181525050612a6f8b8b604001518381518110612a3d57612a3d61457d565b6020026020010151898481518110612a5757612a5761457d565b60200260200101518d600001518e602001518b6132ba565b9093509150612a7e828561487c565b9350612a8a838661487c565b9450868181518110612a9e57612a9e61457d565b60200260200101516060015115158a604001518281518110612ac257612ac261457d565b60200260200101517fad8cc9579b21dfe2c2f6ea35ba15b656e46b4f5b0cb424f52739b8ce5cac9c5b8486612af7919061487c565b8a8581518110612b0957612b0961457d565b602002602001015160a001518b8681518110612b2757612b2761457d565b602002602001015160c001518f608001518781518110612b4957612b4961457d565b6020026020010151604051612b619493929190614efb565b60405180910390a35b80612b74816145ac565b915050612986565b5050336000908152600b602052604090208054849250600290612bb49084906201000090046bffffffffffffffffffffffff1661487c565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555080601260000160008282829054906101000a90046bffffffffffffffffffffffff16612c0e919061487c565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550876060015163ffffffff168563ffffffff161115612c9c57601280547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8816021790555b505050505b50505050565b3373ffffffffffffffffffffffffffffffffffffffff821603612d26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016112ad565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000826000018281548110612db357612db361457d565b9060005260206000200154905092915050565b60008181526001830160205260408120548015612eaf576000612dea600183614ebd565b8554909150600090612dfe90600190614ebd565b9050818114612e63576000866000018281548110612e1e57612e1e61457d565b9060005260206000200154905080876000018481548110612e4157612e4161457d565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612e7457612e74614f38565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611daf565b6000915050611daf565b5092915050565b6000818152600183016020526040812054612f0757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611daf565b506000611daf565b6000818160045b600f811015612f9c577fff000000000000000000000000000000000000000000000000000000000000008216838260208110612f5457612f5461457d565b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612f8a57506000949350505050565b80612f94816145ac565b915050612f16565b5081600f1a6001811115612fb257612fb2614b90565b949350505050565b600080612fcc88878b60c001516133ad565b9050600080612fe78b8a63ffffffff16858a8a60018b613439565b9092509050612ff6818361487c565b9b9a5050505050505050505050565b60008080808560800151600181111561302057613020614b90565b036130455761303187878787613892565b6130405760009250905061317f565b6130bc565b60018560800151600181111561305d5761305d614b90565b0361308a57600061306f888887613994565b9250905080613084575060009250905061317f565b506130bc565b6040517ff2b2d41200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6130c4611c46565b85516040015163ffffffff161161311857867fc3237c8807c467c1b39b8d0395eff077313e691bf0a7388106792564ebfd5636876040516131059190613d9d565b60405180910390a260009250905061317f565b84604001516bffffffffffffffffffffffff16856000015160a001516bffffffffffffffffffffffff16101561317857867f377c8b0c126ae5248d27aca1c76fac4608aff85673ee3caf09747e1044549e02876040516131059190613d9d565b6001925090505b94509492505050565b6000816080015160018111156131a0576131a0614b90565b03613212576131ad611c46565b6000838152600460205260409020600101805463ffffffff929092167801000000000000000000000000000000000000000000000000027fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff9092169190911790555050565b60018160800151600181111561322a5761322a614b90565b036132965760e08101805160009081526008602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055915191517fa4a4e334c0e330143f9437484fe516c13bc560b86b5b0daf58e7084aaac228f29190a25b5050565b60006132a78484846133ad565b905080851015612fb25750929392505050565b6000806132d5888760a001518860c001518888886001613439565b909250905060006132e6828461487c565b600089815260046020526040902060010180549192508291600c9061332a9084906c0100000000000000000000000090046bffffffffffffffffffffffff16614ae1565b82546101009290920a6bffffffffffffffffffffffff81810219909316918316021790915560008a8152600460205260408120600101805485945090926133739185911661487c565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555050965096945050505050565b600080808560018111156133c3576133c3614b90565b036133d2575062015f906133f1565b60018560018111156133e6576133e6614b90565b0361308a57506201adb05b61340263ffffffff85166014614ed0565b61340d8460016148b4565b61341c9060ff16611d4c614ed0565b61342690836148a1565b61343091906148a1565b95945050505050565b60008060008960a0015161ffff16876134529190614ed0565b90508380156134605750803a105b1561346857503a5b600060027f0000000000000000000000000000000000000000000000000000000000000000600281111561349e5761349e614b90565b036135fd5760408051600081526020810190915285156134fc576000366040518060800160405280604881526020016150d2604891396040516020016134e693929190614f67565b6040516020818303038152906040529050613564565b60165461351890640100000000900463ffffffff166004614f8e565b63ffffffff1667ffffffffffffffff81111561353657613536613db0565b6040519080825280601f01601f191660200182016040528015613560576020820181803683370190505b5090505b6040517f49948e0e00000000000000000000000000000000000000000000000000000000815273420000000000000000000000000000000000000f906349948e0e906135b4908490600401613d9d565b602060405180830381865afa1580156135d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f59190614bbf565b915050613757565b60017f0000000000000000000000000000000000000000000000000000000000000000600281111561363157613631614b90565b036137575784156136b357606c73ffffffffffffffffffffffffffffffffffffffff1663c6f7de0e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136ac9190614bbf565b9050613757565b6000606c73ffffffffffffffffffffffffffffffffffffffff166341b247a86040518163ffffffff1660e01b815260040160c060405180830381865afa158015613701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137259190614fae565b505060165492945061374893505050640100000000900463ffffffff1682614ed0565b613753906010614ed0565b9150505b8461377357808b60a0015161ffff166137709190614ed0565b90505b61378161ffff871682614ee7565b9050600087826137918c8e6148a1565b61379b9086614ed0565b6137a591906148a1565b6137b790670de0b6b3a7640000614ed0565b6137c19190614ee7565b905060008c6040015163ffffffff1664e8d4a510006137e09190614ed0565b898e6020015163ffffffff16858f886137f99190614ed0565b61380391906148a1565b61381190633b9aca00614ed0565b61381b9190614ed0565b6138259190614ee7565b61382f91906148a1565b90506b033b2e3c9fd0803ce800000061384882846148a1565b1115613880576040517f2ad7547a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b909c909b509950505050505050505050565b600080848060200190518101906138a99190614ff8565b845160c00151815191925063ffffffff9081169116101561390657857f405288ea7be309e16cfdf481367f90a413e1d4634fcdaf8966546db9b93012e8866040516138f49190613d9d565b60405180910390a26000915050612fb2565b826101200151801561393a575060208101511580159061393a5750602081015181516139379063ffffffff16613b18565b14155b806139535750613948611c46565b815163ffffffff1610155b1561398857857f6aa7f60c176da7af894b384daea2249497448137f5943c1237ada8bc92bdc301866040516138f49190613d9d565b50600195945050505050565b6000806000848060200190518101906139ad9190615050565b9050600086826000015183602001518460400151604051602001613a0f94939291909384526020840192909252604083015260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016606082015260640190565b6040516020818303038152906040528051906020012090508461012001518015613a5d5750608082015115801590613a5d57508160800151613a5a836060015163ffffffff16613b18565b14155b80613a795750613a6b611c46565b826060015163ffffffff1610155b15613ac357867f6aa7f60c176da7af894b384daea2249497448137f5943c1237ada8bc92bdc30187604051613aae9190613d9d565b60405180910390a26000935091506116be9050565b60008181526008602052604090205460ff1615613b0a57867f405288ea7be309e16cfdf481367f90a413e1d4634fcdaf8966546db9b93012e887604051613aae9190613d9d565b600197909650945050505050565b600060017f00000000000000000000000000000000000000000000000000000000000000006002811115613b4e57613b4e614b90565b03613c68576000606473ffffffffffffffffffffffffffffffffffffffff1663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bc59190614bbf565b90508083101580613be05750610100613bde8483614ebd565b115b15613bee5750600092915050565b6040517f2b407a8200000000000000000000000000000000000000000000000000000000815260048101849052606490632b407a8290602401602060405180830381865afa158015613c44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc19190614bbf565b504090565b919050565b50805460008255906000526020600020908101906119b89190613d1a565b828054828255906000526020600020908101928215613d0a579160200282015b82811115613d0a57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190613cb0565b50613d16929150613d1a565b5090565b5b80821115613d165760008155600101613d1b565b60005b83811015613d4a578181015183820152602001613d32565b50506000910152565b60008151808452613d6b816020860160208601613d2f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611dc16020830184613d53565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610200810167ffffffffffffffff81118282101715613e0357613e03613db0565b60405290565b60405160c0810167ffffffffffffffff81118282101715613e0357613e03613db0565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613e7357613e73613db0565b604052919050565b600067ffffffffffffffff821115613e9557613e95613db0565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff811681146119b857600080fd5b8035613c6d81613e9f565b600082601f830112613edd57600080fd5b81356020613ef2613eed83613e7b565b613e2c565b82815260059290921b84018101918181019086841115613f1157600080fd5b8286015b84811015613f35578035613f2881613e9f565b8352918301918301613f15565b509695505050505050565b803560ff81168114613c6d57600080fd5b63ffffffff811681146119b857600080fd5b8035613c6d81613f51565b62ffffff811681146119b857600080fd5b8035613c6d81613f6e565b61ffff811681146119b857600080fd5b8035613c6d81613f8a565b6bffffffffffffffffffffffff811681146119b857600080fd5b8035613c6d81613fa5565b80151581146119b857600080fd5b8035613c6d81613fca565b60006102008284031215613ff657600080fd5b613ffe613ddf565b905061400982613f63565b815261401760208301613f63565b602082015261402860408301613f63565b604082015261403960608301613f7f565b606082015261404a60808301613f9a565b608082015261405b60a08301613fbf565b60a082015261406c60c08301613f63565b60c082015261407d60e08301613f63565b60e0820152610100614090818401613f63565b908201526101206140a2838201613f63565b90820152610140828101359082015261016080830135908201526101806140ca818401613ec1565b908201526101a08281013567ffffffffffffffff8111156140ea57600080fd5b6140f685828601613ecc565b8284015250506101c061410a818401613ec1565b908201526101e061411c838201613fd8565b9082015292915050565b803567ffffffffffffffff81168114613c6d57600080fd5b600082601f83011261414f57600080fd5b813567ffffffffffffffff81111561416957614169613db0565b61419a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613e2c565b8181528460208386010111156141af57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156141e557600080fd5b863567ffffffffffffffff808211156141fd57600080fd5b6142098a838b01613ecc565b9750602089013591508082111561421f57600080fd5b61422b8a838b01613ecc565b965061423960408a01613f40565b9550606089013591508082111561424f57600080fd5b61425b8a838b01613fe3565b945061426960808a01614126565b935060a089013591508082111561427f57600080fd5b5061428c89828a0161413e565b9150509295509295509295565b60008083601f8401126142ab57600080fd5b50813567ffffffffffffffff8111156142c357600080fd5b6020830191508360208285010111156142db57600080fd5b9250929050565b600080600080606085870312156142f857600080fd5b843561430381613e9f565b935060208501359250604085013567ffffffffffffffff81111561432657600080fd5b61433287828801614299565b95989497509550505050565b60008060006040848603121561435357600080fd5b83359250602084013567ffffffffffffffff81111561437157600080fd5b61437d86828701614299565b9497909650939450505050565b60008083601f84011261439c57600080fd5b50813567ffffffffffffffff8111156143b457600080fd5b6020830191508360208260051b85010111156142db57600080fd5b60008060008060008060008060e0898b0312156143eb57600080fd5b606089018a8111156143fc57600080fd5b8998503567ffffffffffffffff8082111561441657600080fd5b6144228c838d01614299565b909950975060808b013591508082111561443b57600080fd5b6144478c838d0161438a565b909750955060a08b013591508082111561446057600080fd5b5061446d8b828c0161438a565b999c989b50969995989497949560c00135949350505050565b60008060008060008060c0878903121561449f57600080fd5b863567ffffffffffffffff808211156144b757600080fd5b6144c38a838b01613ecc565b975060208901359150808211156144d957600080fd5b6144e58a838b01613ecc565b96506144f360408a01613f40565b9550606089013591508082111561450957600080fd5b61425b8a838b0161413e565b60006020828403121561452757600080fd5b8135611dc181613e9f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff8181168382160290811690818114612eb957612eb9614532565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145dd576145dd614532565b5060010190565b63ffffffff818116838216019080821115612eb957612eb9614532565b600081518084526020808501945080840160005b8381101561464757815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614615565b509495945050505050565b6020815261466960208201835163ffffffff169052565b60006020830151614682604084018263ffffffff169052565b50604083015163ffffffff8116606084015250606083015162ffffff8116608084015250608083015161ffff811660a08401525060a08301516bffffffffffffffffffffffff811660c08401525060c083015163ffffffff811660e08401525060e08301516101006146fb8185018363ffffffff169052565b84015190506101206147148482018363ffffffff169052565b840151905061014061472d8482018363ffffffff169052565b840151610160848101919091528401516101808085019190915284015190506101a06147708185018373ffffffffffffffffffffffffffffffffffffffff169052565b808501519150506102006101c08181860152614790610220860184614601565b908601519092506101e06147bb8682018373ffffffffffffffffffffffffffffffffffffffff169052565b90950151151593019290925250919050565b600061012063ffffffff808d1684528b6020850152808b166040850152508060608401526147fd8184018a614601565b905082810360808401526148118189614601565b905060ff871660a084015282810360c084015261482e8187613d53565b905067ffffffffffffffff851660e08401528281036101008401526148538185613d53565b9c9b505050505050505050505050565b60006020828403121561487557600080fd5b5035919050565b6bffffffffffffffffffffffff818116838216019080821115612eb957612eb9614532565b80820180821115611daf57611daf614532565b60ff8181168382160190811115611daf57611daf614532565b8051613c6d81613f51565b8051613c6d81613f6e565b8051613c6d81613f8a565b8051613c6d81613fa5565b8051613c6d81613e9f565b600082601f83011261491557600080fd5b81516020614925613eed83613e7b565b82815260059290921b8401810191818101908684111561494457600080fd5b8286015b84811015613f3557805161495b81613e9f565b8352918301918301614948565b8051613c6d81613fca565b60006020828403121561498557600080fd5b815167ffffffffffffffff8082111561499d57600080fd5b9083019061020082860312156149b257600080fd5b6149ba613ddf565b6149c3836148cd565b81526149d1602084016148cd565b60208201526149e2604084016148cd565b60408201526149f3606084016148d8565b6060820152614a04608084016148e3565b6080820152614a1560a084016148ee565b60a0820152614a2660c084016148cd565b60c0820152614a3760e084016148cd565b60e0820152610100614a4a8185016148cd565b90820152610120614a5c8482016148cd565b9082015261014083810151908201526101608084015190820152610180614a848185016148f9565b908201526101a08381015183811115614a9c57600080fd5b614aa888828701614904565b8284015250506101c09150614abe8284016148f9565b828201526101e09150614ad2828401614968565b91810191909152949350505050565b6bffffffffffffffffffffffff828116828216039080821115612eb957612eb9614532565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006bffffffffffffffffffffffff80841680614b5457614b54614b06565b92169190910492915050565b6bffffffffffffffffffffffff818116838216028082169190828114614b8857614b88614532565b505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215614bd157600080fd5b5051919050565b60006101208b835273ffffffffffffffffffffffffffffffffffffffff8b16602084015267ffffffffffffffff808b166040850152816060850152614c1f8285018b614601565b91508382036080850152614c33828a614601565b915060ff881660a085015283820360c0850152614c508288613d53565b90861660e085015283810361010085015290506148538185613d53565b828152604060208201526000612fb26040830184613d53565b60008060408385031215614c9957600080fd5b8251614ca481613fca565b6020939093015192949293505050565b8183823760009101908152919050565b8281526080810160608360208401379392505050565b600082601f830112614ceb57600080fd5b81356020614cfb613eed83613e7b565b82815260059290921b84018101918181019086841115614d1a57600080fd5b8286015b84811015613f355780358352918301918301614d1e565b600082601f830112614d4657600080fd5b81356020614d56613eed83613e7b565b82815260059290921b84018101918181019086841115614d7557600080fd5b8286015b84811015613f3557803567ffffffffffffffff811115614d995760008081fd5b614da78986838b010161413e565b845250918301918301614d79565b600060208284031215614dc757600080fd5b813567ffffffffffffffff80821115614ddf57600080fd5b9083019060c08286031215614df357600080fd5b614dfb613e09565b8235815260208301356020820152604083013582811115614e1b57600080fd5b614e2787828601614cda565b604083015250606083013582811115614e3f57600080fd5b614e4b87828601614cda565b606083015250608083013582811115614e6357600080fd5b614e6f87828601614d35565b60808301525060a083013582811115614e8757600080fd5b614e9387828601614d35565b60a08301525095945050505050565b61ffff818116838216019080821115612eb957612eb9614532565b81810381811115611daf57611daf614532565b8082028115828204841417611daf57611daf614532565b600082614ef657614ef6614b06565b500490565b6bffffffffffffffffffffffff85168152836020820152826040820152608060608201526000614f2e6080830184613d53565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b828482376000838201600081528351614f84818360208801613d2f565b0195945050505050565b63ffffffff818116838216028082169190828114614b8857614b88614532565b60008060008060008060c08789031215614fc757600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b60006040828403121561500a57600080fd5b6040516040810181811067ffffffffffffffff8211171561502d5761502d613db0565b604052825161503b81613f51565b81526020928301519281019290925250919050565b600060a0828403121561506257600080fd5b60405160a0810181811067ffffffffffffffff8211171561508557615085613db0565b8060405250825181526020830151602082015260408301516150a681613f51565b604082015260608301516150b981613f51565b6060820152608092830151928101929092525091905056fe307866666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666a164736f6c6343000813000a",
}
var AutomationRegistryABI = AutomationRegistryMetaData.ABI
diff --git a/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt
index 7bf4188a3c3..b3f54b812d5 100644
--- a/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt
+++ b/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt
@@ -43,7 +43,7 @@ keeper_registry_wrapper1_2: ../../contracts/solc/v0.8.6/KeeperRegistry1_2/Keeper
keeper_registry_wrapper1_3: ../../contracts/solc/v0.8.6/KeeperRegistry1_3/KeeperRegistry1_3.abi ../../contracts/solc/v0.8.6/KeeperRegistry1_3/KeeperRegistry1_3.bin d4dc760b767ae274ee25c4a604ea371e1fa603a7b6421b69efb2088ad9e8abb3
keeper_registry_wrapper2_0: ../../contracts/solc/v0.8.6/KeeperRegistry2_0/KeeperRegistry2_0.abi ../../contracts/solc/v0.8.6/KeeperRegistry2_0/KeeperRegistry2_0.bin c32dea7d5ef66b7c58ddc84ddf69aa44df1b3ae8601fbc271c95be4ff5853056
keeper_registry_wrapper_2_1: ../../contracts/solc/v0.8.16/KeeperRegistry2_1/KeeperRegistry2_1.abi ../../contracts/solc/v0.8.16/KeeperRegistry2_1/KeeperRegistry2_1.bin 604e4a0cd980c713929b523b999462a3aa0ed06f96ff563a4c8566cf59c8445b
-keeper_registry_wrapper_2_2: ../../contracts/solc/v0.8.19/AutomationRegistry2_2/AutomationRegistry2_2.abi ../../contracts/solc/v0.8.19/AutomationRegistry2_2/AutomationRegistry2_2.bin 55c423335ec7fe67ae99be7a9f617740946abeccf86b2eed03b77d447f0ca8b4
+keeper_registry_wrapper_2_2: ../../contracts/solc/v0.8.19/AutomationRegistry2_2/AutomationRegistry2_2.abi ../../contracts/solc/v0.8.19/AutomationRegistry2_2/AutomationRegistry2_2.bin 80bfb32b386fe45730ffe122266f0c80c8a963f0fd2d6d9afd37077b524c0bfa
keepers_vrf_consumer: ../../contracts/solc/v0.8.6/KeepersVRFConsumer/KeepersVRFConsumer.abi ../../contracts/solc/v0.8.6/KeepersVRFConsumer/KeepersVRFConsumer.bin fa75572e689c9e84705c63e8dbe1b7b8aa1a8fe82d66356c4873d024bb9166e8
log_emitter: ../../contracts/solc/v0.8.19/LogEmitter/LogEmitter.abi ../../contracts/solc/v0.8.19/LogEmitter/LogEmitter.bin 4b129ab93432c95ff9143f0631323e189887668889e0b36ccccf18a571e41ccf
log_triggered_streams_lookup_wrapper: ../../contracts/solc/v0.8.16/LogTriggeredStreamsLookup/LogTriggeredStreamsLookup.abi ../../contracts/solc/v0.8.16/LogTriggeredStreamsLookup/LogTriggeredStreamsLookup.bin f8da43a927c1a66238a9f4fd5d5dd7e280e361daa0444da1f7f79498ace901e1
From 600e95c09f659dc2ef5eaa3ed803ab0db865dd15 Mon Sep 17 00:00:00 2001
From: Erik Burton
Date: Thu, 8 Feb 2024 13:46:34 -0800
Subject: [PATCH 04/11] chore: bump chainlink-github-actions to v2.3.5 (#11975)
* chore: bump chainlink-github-actions from v2.2.15 to v2.3.5
* chore: bump chainlink-github-actions from v2.2.16 to v2.3.5
* chore: bump chainlink-github-actions from v2.3.0 to v2.3.5
* chore: bump chainlink-github-actions from v2.3.1 to v2.3.5
* chore: bump chainlink-github-actions from v2.3.3 to v2.3.5
* chore: bump chainlink-github-actions from v2.3.4 to v2.3.5
---------
Co-authored-by: frank zhu
---
.../actions/build-chainlink-image/action.yml | 4 +-
.github/actions/build-test-image/action.yml | 10 ++--
.github/actions/version-file-bump/action.yml | 2 +-
.../workflows/automation-benchmark-tests.yml | 2 +-
.github/workflows/automation-load-tests.yml | 2 +-
.../workflows/automation-nightly-tests.yml | 2 +-
.../workflows/automation-ondemand-tests.yml | 6 +--
.github/workflows/build-publish-pr.yml | 2 +-
.github/workflows/ci-core.yml | 2 +-
.../workflows/client-compatibility-tests.yml | 4 +-
.github/workflows/integration-chaos-tests.yml | 6 +--
.github/workflows/integration-tests.yml | 26 +++++------
.github/workflows/live-testnet-tests.yml | 46 +++++++++----------
.github/workflows/on-demand-ocr-soak-test.yml | 2 +-
.../on-demand-vrfv2-eth2-clients-test.yml | 2 +-
.../on-demand-vrfv2-performance-test.yml | 2 +-
.../on-demand-vrfv2plus-eth2-clients-test.yml | 2 +-
.../on-demand-vrfv2plus-performance-test.yml | 2 +-
18 files changed, 62 insertions(+), 62 deletions(-)
diff --git a/.github/actions/build-chainlink-image/action.yml b/.github/actions/build-chainlink-image/action.yml
index d5839cc79bf..644c109ab24 100644
--- a/.github/actions/build-chainlink-image/action.yml
+++ b/.github/actions/build-chainlink-image/action.yml
@@ -25,7 +25,7 @@ runs:
steps:
- name: Check if image exists
id: check-image
- uses: smartcontractkit/chainlink-github-actions/docker/image-exists@e865e376b8c2d594028c8d645dd6c47169b72974 # v2.2.16
+ uses: smartcontractkit/chainlink-github-actions/docker/image-exists@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
repository: chainlink
tag: ${{ inputs.git_commit_sha }}${{ inputs.tag_suffix }}
@@ -33,7 +33,7 @@ runs:
AWS_ROLE_TO_ASSUME: ${{ inputs.AWS_ROLE_TO_ASSUME }}
- name: Build Image
if: steps.check-image.outputs.exists == 'false'
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/build-image@e865e376b8c2d594028c8d645dd6c47169b72974 # v2.2.16
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/build-image@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
cl_repo: smartcontractkit/chainlink
cl_ref: ${{ inputs.git_commit_sha }}
diff --git a/.github/actions/build-test-image/action.yml b/.github/actions/build-test-image/action.yml
index 1cd1dd8b939..0c48c43b772 100644
--- a/.github/actions/build-test-image/action.yml
+++ b/.github/actions/build-test-image/action.yml
@@ -34,7 +34,7 @@ runs:
# Base Test Image Logic
- name: Get CTF Version
id: version
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/mod-version@e865e376b8c2d594028c8d645dd6c47169b72974 # v2.2.16
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/mod-version@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
go-project-path: ./integration-tests
module-name: github.com/smartcontractkit/chainlink-testing-framework
@@ -71,7 +71,7 @@ runs:
- name: Check if test base image exists
if: steps.version.outputs.is_semantic == 'false'
id: check-base-image
- uses: smartcontractkit/chainlink-github-actions/docker/image-exists@e865e376b8c2d594028c8d645dd6c47169b72974 # v2.2.16
+ uses: smartcontractkit/chainlink-github-actions/docker/image-exists@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
repository: ${{ inputs.QA_AWS_ACCOUNT_NUMBER }}.dkr.ecr.${{ inputs.QA_AWS_REGION }}.amazonaws.com/test-base-image
tag: ${{ steps.long_sha.outputs.long_sha }}
@@ -79,7 +79,7 @@ runs:
AWS_ROLE_TO_ASSUME: ${{ inputs.QA_AWS_ROLE_TO_ASSUME }}
- name: Build Base Image
if: steps.version.outputs.is_semantic == 'false' && steps.check-base-image.outputs.exists == 'false'
- uses: smartcontractkit/chainlink-github-actions/docker/build-push@e865e376b8c2d594028c8d645dd6c47169b72974 # v2.2.16
+ uses: smartcontractkit/chainlink-github-actions/docker/build-push@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
env:
BASE_IMAGE_NAME: ${{ inputs.QA_AWS_ACCOUNT_NUMBER }}.dkr.ecr.${{ inputs.QA_AWS_REGION }}.amazonaws.com/test-base-image:${{ steps.long_sha.outputs.long_sha }}
with:
@@ -92,7 +92,7 @@ runs:
# Test Runner Logic
- name: Check if image exists
id: check-image
- uses: smartcontractkit/chainlink-github-actions/docker/image-exists@e865e376b8c2d594028c8d645dd6c47169b72974 # v2.2.16
+ uses: smartcontractkit/chainlink-github-actions/docker/image-exists@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
repository: ${{ inputs.repository }}
tag: ${{ inputs.tag }}
@@ -100,7 +100,7 @@ runs:
AWS_ROLE_TO_ASSUME: ${{ inputs.QA_AWS_ROLE_TO_ASSUME }}
- name: Build and Publish Test Runner
if: steps.check-image.outputs.exists == 'false'
- uses: smartcontractkit/chainlink-github-actions/docker/build-push@e865e376b8c2d594028c8d645dd6c47169b72974 # v2.2.16
+ uses: smartcontractkit/chainlink-github-actions/docker/build-push@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
tags: |
${{ inputs.QA_AWS_ACCOUNT_NUMBER }}.dkr.ecr.${{ inputs.QA_AWS_REGION }}.amazonaws.com/${{ inputs.repository }}:${{ inputs.tag }}
diff --git a/.github/actions/version-file-bump/action.yml b/.github/actions/version-file-bump/action.yml
index 20832174003..241b0f5a78c 100644
--- a/.github/actions/version-file-bump/action.yml
+++ b/.github/actions/version-file-bump/action.yml
@@ -31,7 +31,7 @@ runs:
current_version=$(head -n1 ./VERSION)
echo "current_version=${current_version}" | tee -a "$GITHUB_OUTPUT"
- name: Compare semantic versions
- uses: smartcontractkit/chainlink-github-actions/semver-compare@e865e376b8c2d594028c8d645dd6c47169b72974 # v2.2.16
+ uses: smartcontractkit/chainlink-github-actions/semver-compare@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
id: compare
with:
version1: ${{ steps.get-current-version.outputs.current_version }}
diff --git a/.github/workflows/automation-benchmark-tests.yml b/.github/workflows/automation-benchmark-tests.yml
index 92dd0185ff0..70725511883 100644
--- a/.github/workflows/automation-benchmark-tests.yml
+++ b/.github/workflows/automation-benchmark-tests.yml
@@ -66,7 +66,7 @@ jobs:
QA_AWS_ACCOUNT_NUMBER: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }}
suites: benchmark load/automationv2_1 chaos reorg
- name: Run Tests
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@e865e376b8c2d594028c8d645dd6c47169b72974 # v2.2.16
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
env:
DETACH_RUNNER: true
TEST_SUITE: benchmark
diff --git a/.github/workflows/automation-load-tests.yml b/.github/workflows/automation-load-tests.yml
index 40eed4abece..ad68e470a4d 100644
--- a/.github/workflows/automation-load-tests.yml
+++ b/.github/workflows/automation-load-tests.yml
@@ -82,7 +82,7 @@ jobs:
QA_AWS_ACCOUNT_NUMBER: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }}
suites: benchmark load/automationv2_1 chaos reorg
- name: Run Tests
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@e865e376b8c2d594028c8d645dd6c47169b72974 # v2.2.16
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
env:
RR_CPU: 4000m
RR_MEM: 4Gi
diff --git a/.github/workflows/automation-nightly-tests.yml b/.github/workflows/automation-nightly-tests.yml
index e55aabb2f30..5fb8a8f87d1 100644
--- a/.github/workflows/automation-nightly-tests.yml
+++ b/.github/workflows/automation-nightly-tests.yml
@@ -82,7 +82,7 @@ jobs:
upgradeImage: ${{ env.CHAINLINK_IMAGE }}
upgradeVersion: ${{ github.sha }}
- name: Run Tests
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@e865e376b8c2d594028c8d645dd6c47169b72974 # v2.2.16
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
env:
TEST_SUITE: ${{ matrix.tests.suite }}
with:
diff --git a/.github/workflows/automation-ondemand-tests.yml b/.github/workflows/automation-ondemand-tests.yml
index 6524e069dbf..a996399b93d 100644
--- a/.github/workflows/automation-ondemand-tests.yml
+++ b/.github/workflows/automation-ondemand-tests.yml
@@ -60,7 +60,7 @@ jobs:
- name: Check if image exists
if: inputs.chainlinkImage == ''
id: check-image
- uses: smartcontractkit/chainlink-github-actions/docker/image-exists@e865e376b8c2d594028c8d645dd6c47169b72974 # v2.2.16
+ uses: smartcontractkit/chainlink-github-actions/docker/image-exists@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
repository: chainlink
tag: ${{ github.sha }}${{ matrix.image.tag-suffix }}
@@ -68,7 +68,7 @@ jobs:
AWS_ROLE_TO_ASSUME: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }}
- name: Build Image
if: steps.check-image.outputs.exists == 'false' && inputs.chainlinkImage == ''
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/build-image@e865e376b8c2d594028c8d645dd6c47169b72974 # v2.2.16
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/build-image@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
cl_repo: smartcontractkit/chainlink
cl_ref: ${{ github.sha }}
@@ -225,7 +225,7 @@ jobs:
echo ::add-mask::$BASE64_CONFIG_OVERRIDE
echo "BASE64_CONFIG_OVERRIDE=$BASE64_CONFIG_OVERRIDE" >> $GITHUB_ENV
- name: Run Tests
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@e865e376b8c2d594028c8d645dd6c47169b72974 # v2.2.16
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
env:
TEST_SUITE: ${{ matrix.tests.suite }}
with:
diff --git a/.github/workflows/build-publish-pr.yml b/.github/workflows/build-publish-pr.yml
index 6816dd53fbc..a093f86d3de 100644
--- a/.github/workflows/build-publish-pr.yml
+++ b/.github/workflows/build-publish-pr.yml
@@ -32,7 +32,7 @@ jobs:
- name: Check if image exists
id: check-image
- uses: smartcontractkit/chainlink-github-actions/docker/image-exists@912bed7e07a1df4d06ea53a031e9773bb65dc7bd # v2.3.0
+ uses: smartcontractkit/chainlink-github-actions/docker/image-exists@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
repository: ${{ env.ECR_IMAGE_NAME}}
tag: sha-${{ env.GIT_SHORT_SHA }}
diff --git a/.github/workflows/ci-core.yml b/.github/workflows/ci-core.yml
index 3710955e22e..5ffa971ed9e 100644
--- a/.github/workflows/ci-core.yml
+++ b/.github/workflows/ci-core.yml
@@ -95,7 +95,7 @@ jobs:
run: ./tools/bin/${{ matrix.cmd }} ./...
- name: Print Filtered Test Results
if: ${{ failure() && matrix.cmd == 'go_core_tests' }}
- uses: smartcontractkit/chainlink-github-actions/go/go-test-results-parsing@a052942591aaa12716eb9835b490d812a77d0831 # v2.3.1
+ uses: smartcontractkit/chainlink-github-actions/go/go-test-results-parsing@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
results-file: ./output.txt
output-file: ./output-short.txt
diff --git a/.github/workflows/client-compatibility-tests.yml b/.github/workflows/client-compatibility-tests.yml
index 6feb61d78f1..4d895cbfc5b 100644
--- a/.github/workflows/client-compatibility-tests.yml
+++ b/.github/workflows/client-compatibility-tests.yml
@@ -69,7 +69,7 @@ jobs:
with:
ref: ${{ github.event.pull_request.head.sha || github.event.merge_group.head_sha }}
- name: Build Tests
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/build-tests@bce4caa154b1e0e652d042788e14c8870832acd2 # v2.3.0
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/build-tests@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_download_vendor_packages_command: cd ./integration-tests && go mod download
token: ${{ secrets.GITHUB_TOKEN }}
@@ -224,7 +224,7 @@ jobs:
echo "BASE64_CONFIG_OVERRIDE=$BASE64_CONFIG_OVERRIDE" >> $GITHUB_ENV
touch .root_dir
- name: Run Tests
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests-binary@912bed7e07a1df4d06ea53a031e9773bb65dc7bd # v2.3.0
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests-binary@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_command_to_run: ./tests -test.timeout ${{ matrix.timeout }} -test.run ${{ matrix.test }}
binary_name: tests
diff --git a/.github/workflows/integration-chaos-tests.yml b/.github/workflows/integration-chaos-tests.yml
index a6e036b5e09..8f9e9b030ec 100644
--- a/.github/workflows/integration-chaos-tests.yml
+++ b/.github/workflows/integration-chaos-tests.yml
@@ -29,7 +29,7 @@ jobs:
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Check if image exists
id: check-image
- uses: smartcontractkit/chainlink-github-actions/docker/image-exists@e865e376b8c2d594028c8d645dd6c47169b72974 # v2.2.16
+ uses: smartcontractkit/chainlink-github-actions/docker/image-exists@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
repository: chainlink
tag: ${{ github.sha }}
@@ -37,7 +37,7 @@ jobs:
AWS_ROLE_TO_ASSUME: ${{ secrets.QA_AWS_ROLE_TO_ASSUME }}
- name: Build Image
if: steps.check-image.outputs.exists == 'false'
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/build-image@e865e376b8c2d594028c8d645dd6c47169b72974 # v2.2.16
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/build-image@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
cl_repo: smartcontractkit/chainlink
cl_ref: ${{ github.sha }}
@@ -129,7 +129,7 @@ jobs:
echo ::add-mask::$BASE64_CONFIG_OVERRIDE
echo "BASE64_CONFIG_OVERRIDE=$BASE64_CONFIG_OVERRIDE" >> $GITHUB_ENV
- name: Run Tests
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@e865e376b8c2d594028c8d645dd6c47169b72974 # v2.2.16
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_command_to_run: cd integration-tests && go test -timeout 1h -count=1 -json -test.parallel 11 ./chaos 2>&1 | tee /tmp/gotest.log | gotestfmt
test_download_vendor_packages_command: cd ./integration-tests && go mod download
diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml
index 0ca66905f68..6bec0a0422b 100644
--- a/.github/workflows/integration-tests.yml
+++ b/.github/workflows/integration-tests.yml
@@ -45,7 +45,7 @@ jobs:
echo "should-enforce=$SHOULD_ENFORCE" >> $GITHUB_OUTPUT
- name: Enforce CTF Version
if: steps.condition-check.outputs.should-enforce == 'true'
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/mod-version@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/mod-version@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
go-project-path: ./integration-tests
module-name: github.com/smartcontractkit/chainlink-testing-framework
@@ -88,7 +88,7 @@ jobs:
- name: Checkout the repo
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Setup Go
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/setup-go@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/setup-go@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_download_vendor_packages_command: cd ./integration-tests && go mod download
go_mod_path: ./integration-tests/go.mod
@@ -301,7 +301,7 @@ jobs:
## Run this step when changes that require tests to be run are made
- name: Run Tests
if: needs.changes.outputs.src == 'true' || github.event_name == 'workflow_dispatch'
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_command_to_run: cd ./integration-tests && go test -timeout 30m -count=1 -json -test.parallel=${{ matrix.product.nodes }} ${{ steps.build-go-test-command.outputs.run_command }} 2>&1 | tee /tmp/gotest.log | gotestfmt
test_download_vendor_packages_command: cd ./integration-tests && go mod download
@@ -319,7 +319,7 @@ jobs:
QA_KUBECONFIG: ""
- name: Print failed test summary
if: always()
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
eth-smoke-tests-matrix-log-poller:
if: ${{ !(contains(join(github.event.pull_request.labels.*.name, ' '), 'skip-smoke-tests') || github.event_name == 'workflow_dispatch') }}
@@ -387,7 +387,7 @@ jobs:
## Run this step when changes that require tests to be run are made
- name: Run Tests
if: needs.changes.outputs.src == 'true'
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@e865e376b8c2d594028c8d645dd6c47169b72974 # v2.2.16
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_command_to_run: cd ./integration-tests && go test -timeout 30m -count=1 -json -test.parallel=${{ matrix.product.nodes }} ${{ steps.build-go-test-command.outputs.run_command }} 2>&1 | tee /tmp/gotest.log | gotestfmt
test_download_vendor_packages_command: cd ./integration-tests && go mod download
@@ -568,7 +568,7 @@ jobs:
## Run this step when changes that require tests to be run are made
- name: Run Tests
if: needs.changes.outputs.src == 'true' || github.event_name == 'workflow_dispatch'
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@e865e376b8c2d594028c8d645dd6c47169b72974 # v2.2.16
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_command_to_run: cd ./integration-tests && go test -timeout 30m -count=1 -json -test.parallel=${{ matrix.product.nodes }} ${{ steps.build-go-test-command.outputs.run_command }} 2>&1 | tee /tmp/gotest.log | gotestfmt
test_download_vendor_packages_command: cd ./integration-tests && go mod download
@@ -588,7 +588,7 @@ jobs:
# Run this step when changes that do not need the test to run are made
- name: Run Setup
if: needs.changes.outputs.src == 'false'
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/setup-run-tests-environment@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/setup-run-tests-environment@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_download_vendor_packages_command: cd ./integration-tests && go mod download
go_mod_path: ./integration-tests/go.mod
@@ -613,7 +613,7 @@ jobs:
path: ./integration-tests/smoke/traces/trace-data.json
- name: Print failed test summary
if: always()
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_directory: ./integration-tests/smoke/
@@ -684,7 +684,7 @@ jobs:
with:
ref: ${{ github.event.pull_request.head.sha || github.event.merge_group.head_sha }}
- name: Run Setup
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/setup-go@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/setup-go@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_download_vendor_packages_command: |
cd ./integration-tests
@@ -740,7 +740,7 @@ jobs:
upgradeImage: ${{ env.UPGRADE_IMAGE }}
upgradeVersion: ${{ env.UPGRADE_VERSION }}
- name: Run Migration Tests
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_command_to_run: cd ./integration-tests && go test -timeout 30m -count=1 -json ./migration 2>&1 | tee /tmp/gotest.log | gotestfmt
test_download_vendor_packages_command: cd ./integration-tests && go mod download
@@ -853,7 +853,7 @@ jobs:
steps:
- name: Check if image exists
id: check-image
- uses: smartcontractkit/chainlink-github-actions/docker/image-exists@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/docker/image-exists@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
repository: chainlink-solana-tests
tag: ${{ needs.get_solana_sha.outputs.sha }}
@@ -994,7 +994,7 @@ jobs:
ref: ${{ needs.get_solana_sha.outputs.sha }}
- name: Run Setup
if: needs.changes.outputs.src == 'true' || github.event_name == 'workflow_dispatch'
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/setup-run-tests-environment@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/setup-run-tests-environment@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
go_mod_path: ./integration-tests/go.mod
cache_restore_only: true
@@ -1036,7 +1036,7 @@ jobs:
echo "BASE64_CONFIG_OVERRIDE=$BASE64_CONFIG_OVERRIDE" >> $GITHUB_ENV
- name: Run Tests
if: needs.changes.outputs.src == 'true' || github.event_name == 'workflow_dispatch'
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_command_to_run: export ENV_JOB_IMAGE=${{ secrets.QA_AWS_ACCOUNT_NUMBER }}.dkr.ecr.${{ secrets.QA_AWS_REGION }}.amazonaws.com/chainlink-solana-tests:${{ needs.get_solana_sha.outputs.sha }} && make test_smoke
cl_repo: ${{ env.CHAINLINK_IMAGE }}
diff --git a/.github/workflows/live-testnet-tests.yml b/.github/workflows/live-testnet-tests.yml
index 1cba67696c5..1d273788eee 100644
--- a/.github/workflows/live-testnet-tests.yml
+++ b/.github/workflows/live-testnet-tests.yml
@@ -91,7 +91,7 @@ jobs:
with:
ref: ${{ github.event.pull_request.head.sha || github.event.merge_group.head_sha }}
- name: Build Tests
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/build-tests@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/build-tests@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_download_vendor_packages_command: cd ./integration-tests && go mod download
token: ${{ secrets.GITHUB_TOKEN }}
@@ -248,7 +248,7 @@ jobs:
with:
name: tests
- name: Run Tests
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests-binary@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests-binary@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_command_to_run: ./tests -test.timeout 30m -test.count=1 -test.parallel=1 -test.run ${{ matrix.test }}
binary_name: tests
@@ -266,7 +266,7 @@ jobs:
QA_KUBECONFIG: ${{ secrets.QA_KUBECONFIG }}
- name: Print failed test summary
if: always()
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_directory: "./"
@@ -320,7 +320,7 @@ jobs:
with:
name: tests
- name: Run Tests
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests-binary@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests-binary@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_command_to_run: ./tests -test.timeout 30m -test.count=1 -test.parallel=1 -test.run ${{ matrix.test }}
binary_name: tests
@@ -338,7 +338,7 @@ jobs:
QA_KUBECONFIG: ${{ secrets.QA_KUBECONFIG }}
- name: Print failed test summary
if: always()
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_directory: "./"
@@ -392,7 +392,7 @@ jobs:
with:
name: tests
- name: Run Tests
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests-binary@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests-binary@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_command_to_run: ./tests -test.timeout 30m -test.count=1 -test.parallel=1 -test.run ${{ matrix.test }}
binary_name: tests
@@ -410,7 +410,7 @@ jobs:
QA_KUBECONFIG: ${{ secrets.QA_KUBECONFIG }}
- name: Print failed test summary
if: always()
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_directory: "./"
@@ -464,7 +464,7 @@ jobs:
with:
name: tests
- name: Run Tests
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests-binary@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests-binary@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_command_to_run: ./tests -test.timeout 30m -test.count=1 -test.parallel=1 -test.run ${{ matrix.test }}
binary_name: tests
@@ -482,7 +482,7 @@ jobs:
QA_KUBECONFIG: ${{ secrets.QA_KUBECONFIG }}
- name: Print failed test summary
if: always()
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_directory: "./"
@@ -532,7 +532,7 @@ jobs:
with:
name: tests
- name: Run Tests
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests-binary@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests-binary@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_command_to_run: ./tests -test.timeout 30m -test.count=1 -test.parallel=1 -test.run ${{ matrix.test }}
binary_name: tests
@@ -550,7 +550,7 @@ jobs:
QA_KUBECONFIG: ${{ secrets.QA_KUBECONFIG }}
- name: Print failed test summary
if: always()
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_directory: "./"
@@ -604,7 +604,7 @@ jobs:
with:
name: tests
- name: Run Tests
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests-binary@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests-binary@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_command_to_run: ./tests -test.timeout 30m -test.count=1 -test.parallel=1 -test.run ${{ matrix.test }}
binary_name: tests
@@ -622,7 +622,7 @@ jobs:
QA_KUBECONFIG: ${{ secrets.QA_KUBECONFIG }}
- name: Print failed test summary
if: always()
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_directory: "./"
@@ -676,7 +676,7 @@ jobs:
with:
name: tests
- name: Run Tests
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests-binary@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests-binary@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_command_to_run: ./tests -test.timeout 30m -test.count=1 -test.parallel=1 -test.run ${{ matrix.test }}
binary_name: tests
@@ -694,7 +694,7 @@ jobs:
QA_KUBECONFIG: ${{ secrets.QA_KUBECONFIG }}
- name: Print failed test summary
if: always()
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_directory: "./"
@@ -748,7 +748,7 @@ jobs:
with:
name: tests
- name: Run Tests
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests-binary@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests-binary@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_command_to_run: ./tests -test.timeout 30m -test.count=1 -test.parallel=1 -test.run ${{ matrix.test }}
binary_name: tests
@@ -766,7 +766,7 @@ jobs:
QA_KUBECONFIG: ${{ secrets.QA_KUBECONFIG }}
- name: Print failed test summary
if: always()
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_directory: "./"
@@ -816,7 +816,7 @@ jobs:
with:
name: tests
- name: Run Tests
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests-binary@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests-binary@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_command_to_run: ./tests -test.timeout 30m -test.count=1 -test.parallel=1 -test.run ${{ matrix.test }}
binary_name: tests
@@ -834,7 +834,7 @@ jobs:
QA_KUBECONFIG: ${{ secrets.QA_KUBECONFIG }}
- name: Print failed test summary
if: always()
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_directory: "./"
@@ -885,7 +885,7 @@ jobs:
with:
name: tests
- name: Run Tests
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests-binary@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests-binary@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_command_to_run: ./tests -test.timeout 30m -test.count=1 -test.parallel=1 -test.run ${{ matrix.test }}
binary_name: tests
@@ -903,7 +903,7 @@ jobs:
QA_KUBECONFIG: ${{ secrets.QA_KUBECONFIG }}
- name: Print failed test summary
if: always()
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_directory: "./"
@@ -953,7 +953,7 @@ jobs:
with:
name: tests
- name: Run Tests
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests-binary@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests-binary@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_command_to_run: ./tests -test.timeout 30m -test.count=1 -test.parallel=1 -test.run ${{ matrix.test }}
binary_name: tests
@@ -971,6 +971,6 @@ jobs:
QA_KUBECONFIG: ${{ secrets.QA_KUBECONFIG }}
- name: Print failed test summary
if: always()
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@ea889b3133bd7f16ab19ba4ba130de5d9162c669 # v2.3.4
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/show-test-summary@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_directory: "./"
diff --git a/.github/workflows/on-demand-ocr-soak-test.yml b/.github/workflows/on-demand-ocr-soak-test.yml
index 952c51f9fc1..81f38ba0293 100644
--- a/.github/workflows/on-demand-ocr-soak-test.yml
+++ b/.github/workflows/on-demand-ocr-soak-test.yml
@@ -72,7 +72,7 @@ jobs:
QA_AWS_REGION: ${{ secrets.QA_AWS_REGION }}
QA_AWS_ACCOUNT_NUMBER: ${{ secrets.QA_AWS_ACCOUNT_NUMBER }}
- name: Run Tests
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@e865e376b8c2d594028c8d645dd6c47169b72974 # v2.2.16
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
env:
DETACH_RUNNER: true
TEST_SUITE: soak
diff --git a/.github/workflows/on-demand-vrfv2-eth2-clients-test.yml b/.github/workflows/on-demand-vrfv2-eth2-clients-test.yml
index de53b493a5f..865f59b5179 100644
--- a/.github/workflows/on-demand-vrfv2-eth2-clients-test.yml
+++ b/.github/workflows/on-demand-vrfv2-eth2-clients-test.yml
@@ -46,7 +46,7 @@ jobs:
echo "### Execution client used" >>$GITHUB_STEP_SUMMARY
echo "\`${{ env.ETH2_EL_CLIENT }}\`" >>$GITHUB_STEP_SUMMARY
- name: Run Tests
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@7d541cbbca52d45b8a718257af86d9cf49774d1f # v2.2.15
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_command_to_run: cd ./integration-tests && go test -timeout 30m -count=1 -json -run TestVRFv2Basic ./smoke/vrfv2_test.go 2>&1 | tee /tmp/gotest.log | gotestfmt
test_download_vendor_packages_command: cd ./integration-tests && go mod download
diff --git a/.github/workflows/on-demand-vrfv2-performance-test.yml b/.github/workflows/on-demand-vrfv2-performance-test.yml
index 097f1b56f4d..5887d8ec9a2 100644
--- a/.github/workflows/on-demand-vrfv2-performance-test.yml
+++ b/.github/workflows/on-demand-vrfv2-performance-test.yml
@@ -67,7 +67,7 @@ jobs:
echo "### Networks on which test was run" >>$GITHUB_STEP_SUMMARY
echo "\`${{ env.NETWORKS }}\`" >>$GITHUB_STEP_SUMMARY
- name: Run Tests
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@7d541cbbca52d45b8a718257af86d9cf49774d1f # v2.2.15
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_command_to_run: cd ./integration-tests && go test -v -count=1 -timeout 24h -run TestVRFV2Performance/vrfv2_performance_test ./load/vrfv2
test_download_vendor_packages_command: cd ./integration-tests && go mod download
diff --git a/.github/workflows/on-demand-vrfv2plus-eth2-clients-test.yml b/.github/workflows/on-demand-vrfv2plus-eth2-clients-test.yml
index 1772730075e..228f0cdc5ff 100644
--- a/.github/workflows/on-demand-vrfv2plus-eth2-clients-test.yml
+++ b/.github/workflows/on-demand-vrfv2plus-eth2-clients-test.yml
@@ -46,7 +46,7 @@ jobs:
echo "### Execution client used" >>$GITHUB_STEP_SUMMARY
echo "\`${{ env.ETH2_EL_CLIENT }}\`" >>$GITHUB_STEP_SUMMARY
- name: Run Tests
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@7d541cbbca52d45b8a718257af86d9cf49774d1f # v2.2.15
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_command_to_run: cd ./integration-tests && go test -timeout 30m -count=1 -json -run ^TestVRFv2Plus$/^Link_Billing$ ./smoke/vrfv2plus_test.go 2>&1 | tee /tmp/gotest.log | gotestfmt
test_download_vendor_packages_command: cd ./integration-tests && go mod download
diff --git a/.github/workflows/on-demand-vrfv2plus-performance-test.yml b/.github/workflows/on-demand-vrfv2plus-performance-test.yml
index b1f9ee5b5f6..36a75704895 100644
--- a/.github/workflows/on-demand-vrfv2plus-performance-test.yml
+++ b/.github/workflows/on-demand-vrfv2plus-performance-test.yml
@@ -68,7 +68,7 @@ jobs:
echo "### Networks on which test was run" >>$GITHUB_STEP_SUMMARY
echo "\`${{ env.NETWORKS }}\`" >>$GITHUB_STEP_SUMMARY
- name: Run Tests
- uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@e865e376b8c2d594028c8d645dd6c47169b72974 # v2.2.16
+ uses: smartcontractkit/chainlink-github-actions/chainlink-testing-framework/run-tests@92e0f299a87522c2a37bfc4686c4d8a96dc9d28b # v2.3.5
with:
test_command_to_run: cd ./integration-tests && go test -v -count=1 -timeout 24h -run TestVRFV2PlusPerformance/vrfv2plus_performance_test ./load/vrfv2plus
test_download_vendor_packages_command: cd ./integration-tests && go mod download
From d5b62075d28c9acd056908b6725d02d2b85abae3 Mon Sep 17 00:00:00 2001
From: amit-momin <108959691+amit-momin@users.noreply.github.com>
Date: Thu, 8 Feb 2024 16:01:46 -0600
Subject: [PATCH 05/11] Update CHANGELOG to reflect release cutoff (#11970)
* Updated CHANGELOG to reflect release cutoff
* Added more details
---
docs/CHANGELOG.md | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md
index cb4a24e0b69..e7a303d7ab1 100644
--- a/docs/CHANGELOG.md
+++ b/docs/CHANGELOG.md
@@ -9,7 +9,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [dev]
-...
+### Added
+
+- Gas bumping logic to the `SuggestedPriceEstimator`. The bumping mechanism for this estimator refetches the price from the RPC and adds a buffer on top using the greater of `BumpPercent` and `BumpMin`.
## 2.9.0 - UNRELEASED
@@ -23,7 +25,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
echo "Baz=Val" >> median.env
CL_MEDIAN_ENV="median.env"
```
-- Gas bumping logic to the `SuggestedPriceEstimator`
### Fixed
From 01c6244e0439c9b9411b4469d26095092e6f356e Mon Sep 17 00:00:00 2001
From: David Cauchi <13139524+davidcauchi@users.noreply.github.com>
Date: Fri, 9 Feb 2024 00:52:17 +0100
Subject: [PATCH 06/11] Add base sepolia config (#11892)
* Add base sepolia config
* Update config docs
---------
Co-authored-by: Finley Decker
---
.../config/toml/defaults/Base_Sepolia.toml | 29 +++++++
docs/CONFIG.md | 81 +++++++++++++++++++
2 files changed, 110 insertions(+)
create mode 100644 core/chains/evm/config/toml/defaults/Base_Sepolia.toml
diff --git a/core/chains/evm/config/toml/defaults/Base_Sepolia.toml b/core/chains/evm/config/toml/defaults/Base_Sepolia.toml
new file mode 100644
index 00000000000..6458dda87f7
--- /dev/null
+++ b/core/chains/evm/config/toml/defaults/Base_Sepolia.toml
@@ -0,0 +1,29 @@
+ChainID = '84532'
+ChainType = 'optimismBedrock'
+FinalityDepth = 200
+LogPollInterval = '2s'
+NoNewHeadsThreshold = '40s'
+MinIncomingConfirmations = 1
+
+[GasEstimator]
+EIP1559DynamicFees = true
+PriceMin = '1 wei'
+BumpMin = '100 wei'
+
+[GasEstimator.BlockHistory]
+BlockHistorySize = 60
+
+[Transactions]
+ResendAfterThreshold = '30s'
+
+[HeadTracker]
+HistoryDepth = 300
+
+[NodePool]
+SyncThreshold = 10
+
+[OCR]
+ContractConfirmations = 1
+
+[OCR2.Automation]
+GasLimit = 6500000
diff --git a/docs/CONFIG.md b/docs/CONFIG.md
index af25ea18e50..3bf68bbe6d0 100644
--- a/docs/CONFIG.md
+++ b/docs/CONFIG.md
@@ -4909,6 +4909,87 @@ GasLimit = 6500000
+Base Sepolia (84532)
+
+```toml
+AutoCreateKey = true
+BlockBackfillDepth = 10
+BlockBackfillSkip = false
+ChainType = 'optimismBedrock'
+FinalityDepth = 200
+FinalityTagEnabled = false
+LogBackfillBatchSize = 1000
+LogPollInterval = '2s'
+LogKeepBlocksDepth = 100000
+MinIncomingConfirmations = 1
+MinContractPayment = '0.00001 link'
+NonceAutoSync = true
+NoNewHeadsThreshold = '40s'
+RPCDefaultBatchSize = 250
+RPCBlockQueryDelay = 1
+
+[Transactions]
+ForwardersEnabled = false
+MaxInFlight = 16
+MaxQueued = 250
+ReaperInterval = '1h0m0s'
+ReaperThreshold = '168h0m0s'
+ResendAfterThreshold = '30s'
+
+[BalanceMonitor]
+Enabled = true
+
+[GasEstimator]
+Mode = 'BlockHistory'
+PriceDefault = '20 gwei'
+PriceMax = '115792089237316195423570985008687907853269984665.640564039457584007913129639935 tether'
+PriceMin = '1 wei'
+LimitDefault = 500000
+LimitMax = 500000
+LimitMultiplier = '1'
+LimitTransfer = 21000
+BumpMin = '100 wei'
+BumpPercent = 20
+BumpThreshold = 3
+EIP1559DynamicFees = true
+FeeCapDefault = '100 gwei'
+TipCapDefault = '1 wei'
+TipCapMin = '1 wei'
+
+[GasEstimator.BlockHistory]
+BatchSize = 25
+BlockHistorySize = 60
+CheckInclusionBlocks = 12
+CheckInclusionPercentile = 90
+TransactionPercentile = 60
+
+[HeadTracker]
+HistoryDepth = 300
+MaxBufferSize = 3
+SamplingInterval = '1s'
+
+[NodePool]
+PollFailureThreshold = 5
+PollInterval = '10s'
+SelectionMode = 'HighestHead'
+SyncThreshold = 10
+LeaseDuration = '0s'
+
+[OCR]
+ContractConfirmations = 1
+ContractTransmitterTransmitTimeout = '10s'
+DatabaseTimeout = '10s'
+DeltaCOverride = '168h0m0s'
+DeltaCJitterOverride = '1h0m0s'
+ObservationGracePeriod = '1s'
+
+[OCR2]
+[OCR2.Automation]
+GasLimit = 6500000
+```
+
+
+
Arbitrum Rinkeby (421611)
```toml
From a7675166ef0e2a5fb90fa6aba46a382e8fc5801e Mon Sep 17 00:00:00 2001
From: Cedric
Date: Fri, 9 Feb 2024 01:27:48 +0000
Subject: [PATCH 07/11] Move capabilities to common; point registry to
capabilities in common (#11969)
---
core/capabilities/capability.go | 259 ------------------
core/capabilities/capability_test.go | 184 -------------
core/capabilities/registry.go | 57 ++--
core/capabilities/registry_test.go | 39 +--
.../triggers/on_demand_trigger.go | 75 -----
.../triggers/on_demand_trigger_test.go | 81 ------
core/scripts/go.mod | 2 +-
core/scripts/go.sum | 4 +-
go.mod | 4 +-
go.sum | 4 +-
integration-tests/go.mod | 2 +-
integration-tests/go.sum | 4 +-
12 files changed, 62 insertions(+), 653 deletions(-)
delete mode 100644 core/capabilities/capability.go
delete mode 100644 core/capabilities/capability_test.go
delete mode 100644 core/capabilities/triggers/on_demand_trigger.go
delete mode 100644 core/capabilities/triggers/on_demand_trigger_test.go
diff --git a/core/capabilities/capability.go b/core/capabilities/capability.go
deleted file mode 100644
index 84ef243c271..00000000000
--- a/core/capabilities/capability.go
+++ /dev/null
@@ -1,259 +0,0 @@
-package capabilities
-
-import (
- "context"
- "errors"
- "fmt"
- "regexp"
- "time"
-
- "golang.org/x/mod/semver"
-
- "github.com/smartcontractkit/chainlink-common/pkg/values"
-)
-
-// CapabilityType is an enum for the type of capability.
-type CapabilityType int
-
-// CapabilityType enum values.
-const (
- CapabilityTypeTrigger CapabilityType = iota
- CapabilityTypeAction
- CapabilityTypeConsensus
- CapabilityTypeTarget
-)
-
-// String returns a string representation of CapabilityType
-func (c CapabilityType) String() string {
- switch c {
- case CapabilityTypeTrigger:
- return "trigger"
- case CapabilityTypeAction:
- return "action"
- case CapabilityTypeConsensus:
- return "report"
- case CapabilityTypeTarget:
- return "target"
- }
-
- // Panic as this should be unreachable.
- panic("unknown capability type")
-}
-
-// IsValid checks if the capability type is valid.
-func (c CapabilityType) IsValid() error {
- switch c {
- case CapabilityTypeTrigger,
- CapabilityTypeAction,
- CapabilityTypeConsensus,
- CapabilityTypeTarget:
- return nil
- }
-
- return fmt.Errorf("invalid capability type: %s", c)
-}
-
-// CapabilityResponse is a struct for the Execute response of a capability.
-type CapabilityResponse struct {
- Value values.Value
- Err error
-}
-
-type RequestMetadata struct {
- WorkflowID string
- WorkflowExecutionID string
-}
-
-type RegistrationMetadata struct {
- WorkflowID string
-}
-
-// CapabilityRequest is a struct for the Execute request of a capability.
-type CapabilityRequest struct {
- Metadata RequestMetadata
- Config *values.Map
- Inputs *values.Map
-}
-
-type RegisterToWorkflowRequest struct {
- Metadata RegistrationMetadata
- Config *values.Map
-}
-
-type UnregisterFromWorkflowRequest struct {
- Metadata RegistrationMetadata
- Config *values.Map
-}
-
-// CallbackExecutable is an interface for executing a capability.
-type CallbackExecutable interface {
- RegisterToWorkflow(ctx context.Context, request RegisterToWorkflowRequest) error
- UnregisterFromWorkflow(ctx context.Context, request UnregisterFromWorkflowRequest) error
- // Capability must respect context.Done and cleanup any request specific resources
- // when the context is cancelled. When a request has been completed the capability
- // is also expected to close the callback channel.
- // Request specific configuration is passed in via the request parameter.
- // A successful response must always return a value. An error is assumed otherwise.
- // The intent is to make the API explicit.
- Execute(ctx context.Context, callback chan CapabilityResponse, request CapabilityRequest) error
-}
-
-// BaseCapability interface needs to be implemented by all capability types.
-// Capability interfaces are intentionally duplicated to allow for an easy change
-// or extension in the future.
-type BaseCapability interface {
- Info() CapabilityInfo
-}
-
-// TriggerCapability interface needs to be implemented by all trigger capabilities.
-type TriggerCapability interface {
- BaseCapability
- RegisterTrigger(ctx context.Context, callback chan CapabilityResponse, request CapabilityRequest) error
- UnregisterTrigger(ctx context.Context, request CapabilityRequest) error
-}
-
-// ActionCapability interface needs to be implemented by all action capabilities.
-type ActionCapability interface {
- BaseCapability
- CallbackExecutable
-}
-
-// ConsensusCapability interface needs to be implemented by all consensus capabilities.
-type ConsensusCapability interface {
- BaseCapability
- CallbackExecutable
-}
-
-// TargetsCapability interface needs to be implemented by all target capabilities.
-type TargetCapability interface {
- BaseCapability
- CallbackExecutable
-}
-
-// CapabilityInfo is a struct for the info of a capability.
-type CapabilityInfo struct {
- ID string
- CapabilityType CapabilityType
- Description string
- Version string
-}
-
-// Info returns the info of the capability.
-func (c CapabilityInfo) Info() CapabilityInfo {
- return c
-}
-
-var idRegex = regexp.MustCompile(`[a-z0-9_\-:]`)
-
-const (
- // TODO: this length was largely picked arbitrarily.
- // Consider what a realistic/desirable value should be.
- // See: https://smartcontract-it.atlassian.net/jira/software/c/projects/KS/boards/182
- idMaxLength = 128
-)
-
-// NewCapabilityInfo returns a new CapabilityInfo.
-func NewCapabilityInfo(
- id string,
- capabilityType CapabilityType,
- description string,
- version string,
-) (CapabilityInfo, error) {
- if len(id) > idMaxLength {
- return CapabilityInfo{}, fmt.Errorf("invalid id: %s exceeds max length %d", id, idMaxLength)
- }
- if !idRegex.MatchString(id) {
- return CapabilityInfo{}, fmt.Errorf("invalid id: %s. Allowed: %s", id, idRegex)
- }
-
- if ok := semver.IsValid(version); !ok {
- return CapabilityInfo{}, fmt.Errorf("invalid version: %+v", version)
- }
-
- if err := capabilityType.IsValid(); err != nil {
- return CapabilityInfo{}, err
- }
-
- return CapabilityInfo{
- ID: id,
- CapabilityType: capabilityType,
- Description: description,
- Version: version,
- }, nil
-}
-
-// MustNewCapabilityInfo returns a new CapabilityInfo,
-// panicking if we could not instantiate a CapabilityInfo.
-func MustNewCapabilityInfo(
- id string,
- capabilityType CapabilityType,
- description string,
- version string,
-) CapabilityInfo {
- c, err := NewCapabilityInfo(id, capabilityType, description, version)
- if err != nil {
- panic(err)
- }
-
- return c
-}
-
-// TODO: this timeout was largely picked arbitrarily.
-// Consider what a realistic/desirable value should be.
-// See: https://smartcontract-it.atlassian.net/jira/software/c/projects/KS/boards/182
-var defaultExecuteTimeout = 10 * time.Second
-
-// ExecuteSync executes a capability synchronously.
-// We are not handling a case where a capability panics and crashes.
-// There is default timeout of 10 seconds. If a capability takes longer than
-// that then it should be executed asynchronously.
-func ExecuteSync(ctx context.Context, c CallbackExecutable, request CapabilityRequest) (*values.List, error) {
- ctxWithT, cancel := context.WithTimeout(ctx, defaultExecuteTimeout)
- defer cancel()
-
- responseCh := make(chan CapabilityResponse)
- setupCh := make(chan error)
-
- go func(innerCtx context.Context, innerC CallbackExecutable, innerReq CapabilityRequest, innerCallback chan CapabilityResponse, errCh chan error) {
- setupErr := innerC.Execute(innerCtx, innerCallback, innerReq)
- setupCh <- setupErr
- }(ctxWithT, c, request, responseCh, setupCh)
-
- vs := make([]values.Value, 0)
-outerLoop:
- for {
- select {
- case response, isOpen := <-responseCh:
- if !isOpen {
- break outerLoop
- }
- // An error means execution has been interrupted.
- // We'll return the value discarding values received
- // until now.
- if response.Err != nil {
- return nil, response.Err
- }
-
- vs = append(vs, response.Value)
-
- // Timeout when a capability panics, crashes, and does not close the channel.
- case <-ctxWithT.Done():
- return nil, fmt.Errorf("context timed out. If you did not set a timeout, be aware that the default ExecuteSync timeout is %f seconds", defaultExecuteTimeout.Seconds())
- }
- }
-
- setupErr := <-setupCh
-
- // Something went wrong when setting up a capability.
- if setupErr != nil {
- return nil, setupErr
- }
-
- // If the capability did not return any values, we deem it as an error.
- // The intent is for the API to be explicit.
- if len(vs) == 0 {
- return nil, errors.New("capability did not return any values")
- }
-
- return &values.List{Underlying: vs}, nil
-}
diff --git a/core/capabilities/capability_test.go b/core/capabilities/capability_test.go
deleted file mode 100644
index 2414e87bba9..00000000000
--- a/core/capabilities/capability_test.go
+++ /dev/null
@@ -1,184 +0,0 @@
-package capabilities
-
-import (
- "context"
- "errors"
- "strings"
- "testing"
-
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
-
- "github.com/smartcontractkit/chainlink-common/pkg/values"
- "github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
-)
-
-func Test_CapabilityInfo(t *testing.T) {
- ci, err := NewCapabilityInfo(
- "capability-id",
- CapabilityTypeAction,
- "This is a mock capability that doesn't do anything.",
- "v1.0.0",
- )
- require.NoError(t, err)
-
- assert.Equal(t, ci, ci.Info())
-}
-
-func Test_CapabilityInfo_Invalid(t *testing.T) {
- _, err := NewCapabilityInfo(
- "capability-id",
- CapabilityType(5),
- "This is a mock capability that doesn't do anything.",
- "v1.0.0",
- )
- assert.ErrorContains(t, err, "invalid capability type")
-
- _, err = NewCapabilityInfo(
- "&!!!",
- CapabilityTypeAction,
- "This is a mock capability that doesn't do anything.",
- "v1.0.0",
- )
- assert.ErrorContains(t, err, "invalid id")
-
- _, err = NewCapabilityInfo(
- "mock-capability",
- CapabilityTypeAction,
- "This is a mock capability that doesn't do anything.",
- "hello",
- )
- assert.ErrorContains(t, err, "invalid version")
-
- _, err = NewCapabilityInfo(
- strings.Repeat("n", 256),
- CapabilityTypeAction,
- "This is a mock capability that doesn't do anything.",
- "hello",
- )
- assert.ErrorContains(t, err, "exceeds max length 128")
-}
-
-type mockCapabilityWithExecute struct {
- CallbackExecutable
- CapabilityInfo
- ExecuteFn func(ctx context.Context, callback chan CapabilityResponse, req CapabilityRequest) error
-}
-
-func (m *mockCapabilityWithExecute) Execute(ctx context.Context, callback chan CapabilityResponse, req CapabilityRequest) error {
- return m.ExecuteFn(ctx, callback, req)
-}
-
-func Test_ExecuteSyncReturnSingleValue(t *testing.T) {
- mcwe := &mockCapabilityWithExecute{
- ExecuteFn: func(ctx context.Context, callback chan CapabilityResponse, req CapabilityRequest) error {
- val, _ := values.NewString("hello")
- callback <- CapabilityResponse{val, nil}
-
- close(callback)
-
- return nil
- },
- }
- req := CapabilityRequest{}
- val, err := ExecuteSync(testutils.Context(t), mcwe, req)
-
- assert.NoError(t, err, val)
- assert.Equal(t, "hello", val.Underlying[0].(*values.String).Underlying)
-}
-
-func Test_ExecuteSyncReturnMultipleValues(t *testing.T) {
- es, _ := values.NewString("hello")
- expectedList := []values.Value{es, es, es}
- mcwe := &mockCapabilityWithExecute{
- ExecuteFn: func(ctx context.Context, callback chan CapabilityResponse, req CapabilityRequest) error {
- callback <- CapabilityResponse{es, nil}
- callback <- CapabilityResponse{es, nil}
- callback <- CapabilityResponse{es, nil}
-
- close(callback)
-
- return nil
- },
- }
- req := CapabilityRequest{}
- val, err := ExecuteSync(testutils.Context(t), mcwe, req)
-
- assert.NoError(t, err, val)
- assert.ElementsMatch(t, expectedList, val.Underlying)
-}
-
-func Test_ExecuteSyncCapabilitySetupErrors(t *testing.T) {
- expectedErr := errors.New("something went wrong during setup")
- mcwe := &mockCapabilityWithExecute{
- ExecuteFn: func(ctx context.Context, callback chan CapabilityResponse, req CapabilityRequest) error {
- close(callback)
- return expectedErr
- },
- }
- req := CapabilityRequest{}
- val, err := ExecuteSync(testutils.Context(t), mcwe, req)
-
- assert.ErrorContains(t, err, expectedErr.Error())
- assert.Nil(t, val)
-}
-
-func Test_ExecuteSyncTimeout(t *testing.T) {
- ctxWithTimeout := testutils.Context(t)
- ctxWithTimeout, cancel := context.WithCancel(ctxWithTimeout)
- cancel()
-
- mcwe := &mockCapabilityWithExecute{
- ExecuteFn: func(ctx context.Context, callback chan CapabilityResponse, req CapabilityRequest) error {
- return nil
- },
- }
- req := CapabilityRequest{}
- val, err := ExecuteSync(ctxWithTimeout, mcwe, req)
-
- assert.ErrorContains(t, err, "context timed out. If you did not set a timeout, be aware that the default ExecuteSync timeout is")
- assert.Nil(t, val)
-}
-
-func Test_ExecuteSyncCapabilityErrors(t *testing.T) {
- expectedErr := errors.New("something went wrong during execution")
- mcwe := &mockCapabilityWithExecute{
- ExecuteFn: func(ctx context.Context, callback chan CapabilityResponse, req CapabilityRequest) error {
- callback <- CapabilityResponse{nil, expectedErr}
-
- close(callback)
-
- return nil
- },
- }
- req := CapabilityRequest{}
- val, err := ExecuteSync(testutils.Context(t), mcwe, req)
-
- assert.ErrorContains(t, err, expectedErr.Error())
- assert.Nil(t, val)
-}
-
-func Test_ExecuteSyncDoesNotReturnValues(t *testing.T) {
- mcwe := &mockCapabilityWithExecute{
- ExecuteFn: func(ctx context.Context, callback chan CapabilityResponse, req CapabilityRequest) error {
- close(callback)
- return nil
- },
- }
- req := CapabilityRequest{}
- val, err := ExecuteSync(testutils.Context(t), mcwe, req)
-
- assert.ErrorContains(t, err, "capability did not return any values")
- assert.Nil(t, val)
-}
-
-func Test_MustNewCapabilityInfo(t *testing.T) {
- assert.Panics(t, func() {
- MustNewCapabilityInfo(
- "capability-id",
- CapabilityTypeAction,
- "This is a mock capability that doesn't do anything.",
- "should-panic",
- )
- })
-}
diff --git a/core/capabilities/registry.go b/core/capabilities/registry.go
index 1632b17c4b9..02c08ae8dc3 100644
--- a/core/capabilities/registry.go
+++ b/core/capabilities/registry.go
@@ -4,17 +4,19 @@ import (
"context"
"fmt"
"sync"
+
+ "github.com/smartcontractkit/chainlink-common/pkg/capabilities"
)
// Registry is a struct for the registry of capabilities.
// Registry is safe for concurrent use.
type Registry struct {
- m map[string]BaseCapability
+ m map[string]capabilities.BaseCapability
mu sync.RWMutex
}
// Get gets a capability from the registry.
-func (r *Registry) Get(_ context.Context, id string) (BaseCapability, error) {
+func (r *Registry) Get(_ context.Context, id string) (capabilities.BaseCapability, error) {
r.mu.RLock()
defer r.mu.RUnlock()
@@ -27,13 +29,13 @@ func (r *Registry) Get(_ context.Context, id string) (BaseCapability, error) {
}
// GetTrigger gets a capability from the registry and tries to coerce it to the TriggerCapability interface.
-func (r *Registry) GetTrigger(ctx context.Context, id string) (TriggerCapability, error) {
+func (r *Registry) GetTrigger(ctx context.Context, id string) (capabilities.TriggerCapability, error) {
c, err := r.Get(ctx, id)
if err != nil {
return nil, err
}
- tc, ok := c.(TriggerCapability)
+ tc, ok := c.(capabilities.TriggerCapability)
if !ok {
return nil, fmt.Errorf("capability with id: %s does not satisfy the capability interface", id)
}
@@ -42,13 +44,13 @@ func (r *Registry) GetTrigger(ctx context.Context, id string) (TriggerCapability
}
// GetAction gets a capability from the registry and tries to coerce it to the ActionCapability interface.
-func (r *Registry) GetAction(ctx context.Context, id string) (ActionCapability, error) {
+func (r *Registry) GetAction(ctx context.Context, id string) (capabilities.ActionCapability, error) {
c, err := r.Get(ctx, id)
if err != nil {
return nil, err
}
- ac, ok := c.(ActionCapability)
+ ac, ok := c.(capabilities.ActionCapability)
if !ok {
return nil, fmt.Errorf("capability with id: %s does not satisfy the capability interface", id)
}
@@ -56,14 +58,14 @@ func (r *Registry) GetAction(ctx context.Context, id string) (ActionCapability,
return ac, nil
}
-// GetConsensus gets a capability from the registry and tries to coerce it to the ActionCapability interface.
-func (r *Registry) GetConsensus(ctx context.Context, id string) (ConsensusCapability, error) {
+// GetConsensus gets a capability from the registry and tries to coerce it to the ConsensusCapability interface.
+func (r *Registry) GetConsensus(ctx context.Context, id string) (capabilities.ConsensusCapability, error) {
c, err := r.Get(ctx, id)
if err != nil {
return nil, err
}
- cc, ok := c.(ConsensusCapability)
+ cc, ok := c.(capabilities.ConsensusCapability)
if !ok {
return nil, fmt.Errorf("capability with id: %s does not satisfy the capability interface", id)
}
@@ -71,14 +73,14 @@ func (r *Registry) GetConsensus(ctx context.Context, id string) (ConsensusCapabi
return cc, nil
}
-// GetTarget gets a capability from the registry and tries to coerce it to the ActionCapability interface.
-func (r *Registry) GetTarget(ctx context.Context, id string) (TargetCapability, error) {
+// GetTarget gets a capability from the registry and tries to coerce it to the TargetCapability interface.
+func (r *Registry) GetTarget(ctx context.Context, id string) (capabilities.TargetCapability, error) {
c, err := r.Get(ctx, id)
if err != nil {
return nil, err
}
- tc, ok := c.(TargetCapability)
+ tc, ok := c.(capabilities.TargetCapability)
if !ok {
return nil, fmt.Errorf("capability with id: %s does not satisfy the capability interface", id)
}
@@ -87,42 +89,45 @@ func (r *Registry) GetTarget(ctx context.Context, id string) (TargetCapability,
}
// List lists all the capabilities in the registry.
-func (r *Registry) List(_ context.Context) []BaseCapability {
+func (r *Registry) List(_ context.Context) ([]capabilities.BaseCapability, error) {
r.mu.RLock()
defer r.mu.RUnlock()
- cl := []BaseCapability{}
+ cl := []capabilities.BaseCapability{}
for _, v := range r.m {
cl = append(cl, v)
}
- return cl
+ return cl, nil
}
// Add adds a capability to the registry.
-func (r *Registry) Add(_ context.Context, c BaseCapability) error {
+func (r *Registry) Add(ctx context.Context, c capabilities.BaseCapability) error {
r.mu.Lock()
defer r.mu.Unlock()
- info := c.Info()
+ info, err := c.Info(ctx)
+ if err != nil {
+ return err
+ }
switch info.CapabilityType {
- case CapabilityTypeTrigger:
- _, ok := c.(TriggerCapability)
+ case capabilities.CapabilityTypeTrigger:
+ _, ok := c.(capabilities.TriggerCapability)
if !ok {
return fmt.Errorf("trigger capability does not satisfy TriggerCapability interface")
}
- case CapabilityTypeAction:
- _, ok := c.(ActionCapability)
+ case capabilities.CapabilityTypeAction:
+ _, ok := c.(capabilities.ActionCapability)
if !ok {
return fmt.Errorf("action does not satisfy ActionCapability interface")
}
- case CapabilityTypeConsensus:
- _, ok := c.(ConsensusCapability)
+ case capabilities.CapabilityTypeConsensus:
+ _, ok := c.(capabilities.ConsensusCapability)
if !ok {
return fmt.Errorf("consensus capability does not satisfy ConsensusCapability interface")
}
- case CapabilityTypeTarget:
- _, ok := c.(TargetCapability)
+ case capabilities.CapabilityTypeTarget:
+ _, ok := c.(capabilities.TargetCapability)
if !ok {
return fmt.Errorf("target capability does not satisfy TargetCapability interface")
}
@@ -144,6 +149,6 @@ func (r *Registry) Add(_ context.Context, c BaseCapability) error {
// NewRegistry returns a new Registry.
func NewRegistry() *Registry {
return &Registry{
- m: map[string]BaseCapability{},
+ m: map[string]capabilities.BaseCapability{},
}
}
diff --git a/core/capabilities/registry_test.go b/core/capabilities/registry_test.go
index a8c51827b32..8af91d133a2 100644
--- a/core/capabilities/registry_test.go
+++ b/core/capabilities/registry_test.go
@@ -8,8 +8,9 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
- "github.com/smartcontractkit/chainlink/v2/core/capabilities"
- "github.com/smartcontractkit/chainlink/v2/core/capabilities/triggers"
+ "github.com/smartcontractkit/chainlink-common/pkg/capabilities"
+ "github.com/smartcontractkit/chainlink-common/pkg/capabilities/triggers"
+ coreCapabilities "github.com/smartcontractkit/chainlink/v2/core/capabilities"
"github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
)
@@ -17,7 +18,7 @@ type mockCapability struct {
capabilities.CapabilityInfo
}
-func (m *mockCapability) Execute(ctx context.Context, callback chan capabilities.CapabilityResponse, req capabilities.CapabilityRequest) error {
+func (m *mockCapability) Execute(ctx context.Context, callback chan<- capabilities.CapabilityResponse, req capabilities.CapabilityRequest) error {
return nil
}
@@ -32,7 +33,7 @@ func (m *mockCapability) UnregisterFromWorkflow(ctx context.Context, request cap
func TestRegistry(t *testing.T) {
ctx := testutils.Context(t)
- r := capabilities.NewRegistry()
+ r := coreCapabilities.NewRegistry()
id := "capability-1"
ci, err := capabilities.NewCapabilityInfo(
@@ -52,14 +53,15 @@ func TestRegistry(t *testing.T) {
assert.Equal(t, c, gc)
- cs := r.List(ctx)
+ cs, err := r.List(ctx)
+ require.NoError(t, err)
assert.Len(t, cs, 1)
assert.Equal(t, c, cs[0])
}
func TestRegistry_NoDuplicateIDs(t *testing.T) {
ctx := testutils.Context(t)
- r := capabilities.NewRegistry()
+ r := coreCapabilities.NewRegistry()
id := "capability-1"
ci, err := capabilities.NewCapabilityInfo(
@@ -90,13 +92,13 @@ func TestRegistry_NoDuplicateIDs(t *testing.T) {
func TestRegistry_ChecksExecutionAPIByType(t *testing.T) {
tcs := []struct {
name string
- newCapability func(ctx context.Context, reg *capabilities.Registry) (string, error)
- getCapability func(ctx context.Context, reg *capabilities.Registry, id string) error
+ newCapability func(ctx context.Context, reg *coreCapabilities.Registry) (string, error)
+ getCapability func(ctx context.Context, reg *coreCapabilities.Registry, id string) error
errContains string
}{
{
name: "action",
- newCapability: func(ctx context.Context, reg *capabilities.Registry) (string, error) {
+ newCapability: func(ctx context.Context, reg *coreCapabilities.Registry) (string, error) {
id := uuid.New().String()
ci, err := capabilities.NewCapabilityInfo(
id,
@@ -109,14 +111,14 @@ func TestRegistry_ChecksExecutionAPIByType(t *testing.T) {
c := &mockCapability{CapabilityInfo: ci}
return id, reg.Add(ctx, c)
},
- getCapability: func(ctx context.Context, reg *capabilities.Registry, id string) error {
+ getCapability: func(ctx context.Context, reg *coreCapabilities.Registry, id string) error {
_, err := reg.GetAction(ctx, id)
return err
},
},
{
name: "target",
- newCapability: func(ctx context.Context, reg *capabilities.Registry) (string, error) {
+ newCapability: func(ctx context.Context, reg *coreCapabilities.Registry) (string, error) {
id := uuid.New().String()
ci, err := capabilities.NewCapabilityInfo(
id,
@@ -129,26 +131,27 @@ func TestRegistry_ChecksExecutionAPIByType(t *testing.T) {
c := &mockCapability{CapabilityInfo: ci}
return id, reg.Add(ctx, c)
},
- getCapability: func(ctx context.Context, reg *capabilities.Registry, id string) error {
+ getCapability: func(ctx context.Context, reg *coreCapabilities.Registry, id string) error {
_, err := reg.GetTarget(ctx, id)
return err
},
},
{
name: "trigger",
- newCapability: func(ctx context.Context, reg *capabilities.Registry) (string, error) {
+ newCapability: func(ctx context.Context, reg *coreCapabilities.Registry) (string, error) {
odt := triggers.NewOnDemand()
- info := odt.Info()
+ info, err := odt.Info(ctx)
+ require.NoError(t, err)
return info.ID, reg.Add(ctx, odt)
},
- getCapability: func(ctx context.Context, reg *capabilities.Registry, id string) error {
+ getCapability: func(ctx context.Context, reg *coreCapabilities.Registry, id string) error {
_, err := reg.GetTrigger(ctx, id)
return err
},
},
{
name: "consensus",
- newCapability: func(ctx context.Context, reg *capabilities.Registry) (string, error) {
+ newCapability: func(ctx context.Context, reg *coreCapabilities.Registry) (string, error) {
id := uuid.New().String()
ci, err := capabilities.NewCapabilityInfo(
id,
@@ -161,7 +164,7 @@ func TestRegistry_ChecksExecutionAPIByType(t *testing.T) {
c := &mockCapability{CapabilityInfo: ci}
return id, reg.Add(ctx, c)
},
- getCapability: func(ctx context.Context, reg *capabilities.Registry, id string) error {
+ getCapability: func(ctx context.Context, reg *coreCapabilities.Registry, id string) error {
_, err := reg.GetConsensus(ctx, id)
return err
},
@@ -169,7 +172,7 @@ func TestRegistry_ChecksExecutionAPIByType(t *testing.T) {
}
ctx := testutils.Context(t)
- reg := capabilities.NewRegistry()
+ reg := coreCapabilities.NewRegistry()
for _, tc := range tcs {
t.Run(tc.name, func(t *testing.T) {
id, err := tc.newCapability(ctx, reg)
diff --git a/core/capabilities/triggers/on_demand_trigger.go b/core/capabilities/triggers/on_demand_trigger.go
deleted file mode 100644
index 1260a14568f..00000000000
--- a/core/capabilities/triggers/on_demand_trigger.go
+++ /dev/null
@@ -1,75 +0,0 @@
-package triggers
-
-import (
- "context"
- "fmt"
- "sync"
-
- "github.com/smartcontractkit/chainlink/v2/core/capabilities"
-)
-
-var info = capabilities.MustNewCapabilityInfo(
- "on-demand-trigger",
- capabilities.CapabilityTypeTrigger,
- "An example on-demand trigger.",
- "v1.0.0",
-)
-
-type OnDemand struct {
- capabilities.CapabilityInfo
- chans map[string]chan capabilities.CapabilityResponse
- mu sync.Mutex
-}
-
-func NewOnDemand() *OnDemand {
- return &OnDemand{
- CapabilityInfo: info,
- chans: map[string]chan capabilities.CapabilityResponse{},
- }
-}
-
-func (o *OnDemand) FanOutEvent(ctx context.Context, event capabilities.CapabilityResponse) error {
- o.mu.Lock()
- defer o.mu.Unlock()
- for _, ch := range o.chans {
- ch <- event
- }
- return nil
-}
-
-// Execute executes the on-demand trigger.
-func (o *OnDemand) SendEvent(ctx context.Context, wid string, event capabilities.CapabilityResponse) error {
- o.mu.Lock()
- defer o.mu.Unlock()
- ch, ok := o.chans[wid]
- if !ok {
- return fmt.Errorf("no registration for %s", wid)
- }
-
- ch <- event
- return nil
-}
-
-func (o *OnDemand) RegisterTrigger(ctx context.Context, callback chan capabilities.CapabilityResponse, req capabilities.CapabilityRequest) error {
- weid := req.Metadata.WorkflowID
-
- o.mu.Lock()
- defer o.mu.Unlock()
-
- o.chans[weid] = callback
- return nil
-}
-
-func (o *OnDemand) UnregisterTrigger(ctx context.Context, req capabilities.CapabilityRequest) error {
- weid := req.Metadata.WorkflowID
-
- o.mu.Lock()
- defer o.mu.Unlock()
-
- ch, ok := o.chans[weid]
- if ok {
- close(ch)
- }
- delete(o.chans, weid)
- return nil
-}
diff --git a/core/capabilities/triggers/on_demand_trigger_test.go b/core/capabilities/triggers/on_demand_trigger_test.go
deleted file mode 100644
index ee7337a1824..00000000000
--- a/core/capabilities/triggers/on_demand_trigger_test.go
+++ /dev/null
@@ -1,81 +0,0 @@
-package triggers
-
-import (
- "testing"
-
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
-
- "github.com/smartcontractkit/chainlink-common/pkg/values"
- "github.com/smartcontractkit/chainlink/v2/core/capabilities"
- "github.com/smartcontractkit/chainlink/v2/core/internal/testutils"
-)
-
-const testID = "test-id-1"
-
-func TestOnDemand(t *testing.T) {
- r := capabilities.NewRegistry()
- tr := NewOnDemand()
- ctx := testutils.Context(t)
-
- err := r.Add(ctx, tr)
- require.NoError(t, err)
-
- trigger, err := r.GetTrigger(ctx, tr.Info().ID)
- require.NoError(t, err)
-
- callback := make(chan capabilities.CapabilityResponse, 10)
-
- req := capabilities.CapabilityRequest{
- Metadata: capabilities.RequestMetadata{
- WorkflowExecutionID: testID,
- },
- }
- err = trigger.RegisterTrigger(ctx, callback, req)
- require.NoError(t, err)
-
- er := capabilities.CapabilityResponse{
- Value: &values.String{Underlying: testID},
- }
-
- err = tr.FanOutEvent(ctx, er)
- require.NoError(t, err)
-
- assert.Len(t, callback, 1)
- assert.Equal(t, er, <-callback)
-}
-
-func TestOnDemand_ChannelDoesntExist(t *testing.T) {
- tr := NewOnDemand()
- ctx := testutils.Context(t)
-
- er := capabilities.CapabilityResponse{
- Value: &values.String{Underlying: testID},
- }
- err := tr.SendEvent(ctx, testID, er)
- assert.ErrorContains(t, err, "no registration")
-}
-
-func TestOnDemand_(t *testing.T) {
- tr := NewOnDemand()
- ctx := testutils.Context(t)
-
- req := capabilities.CapabilityRequest{
- Metadata: capabilities.RequestMetadata{
- WorkflowID: "hello",
- },
- }
- callback := make(chan capabilities.CapabilityResponse, 10)
-
- err := tr.RegisterTrigger(ctx, callback, req)
- require.NoError(t, err)
-
- er := capabilities.CapabilityResponse{
- Value: &values.String{Underlying: testID},
- }
- err = tr.SendEvent(ctx, "hello", er)
- require.NoError(t, err)
-
- assert.Len(t, callback, 1)
- assert.Equal(t, er, <-callback)
-}
diff --git a/core/scripts/go.mod b/core/scripts/go.mod
index 73307549f53..2c75a60da69 100644
--- a/core/scripts/go.mod
+++ b/core/scripts/go.mod
@@ -19,7 +19,7 @@ require (
github.com/pelletier/go-toml/v2 v2.1.1
github.com/shopspring/decimal v1.3.1
github.com/smartcontractkit/chainlink-automation v1.0.2-0.20240118014648-1ab6a88c9429
- github.com/smartcontractkit/chainlink-common v0.1.7-0.20240205180946-df826cb540ce
+ github.com/smartcontractkit/chainlink-common v0.1.7-0.20240208162729-5f42bd4a2f8b
github.com/smartcontractkit/chainlink-vrf v0.0.0-20231120191722-fef03814f868
github.com/smartcontractkit/chainlink/v2 v2.0.0-00010101000000-000000000000
github.com/smartcontractkit/libocr v0.0.0-20240112202000-6359502d2ff1
diff --git a/core/scripts/go.sum b/core/scripts/go.sum
index 5c4ccc848d3..5fff426cc04 100644
--- a/core/scripts/go.sum
+++ b/core/scripts/go.sum
@@ -1169,8 +1169,8 @@ github.com/smartcontractkit/caigo v0.0.0-20230621050857-b29a4ca8c704 h1:T3lFWumv
github.com/smartcontractkit/caigo v0.0.0-20230621050857-b29a4ca8c704/go.mod h1:2QuJdEouTWjh5BDy5o/vgGXQtR4Gz8yH1IYB5eT7u4M=
github.com/smartcontractkit/chainlink-automation v1.0.2-0.20240118014648-1ab6a88c9429 h1:xkejUBZhcBpBrTSfxc91Iwzadrb6SXw8ks69bHIQ9Ww=
github.com/smartcontractkit/chainlink-automation v1.0.2-0.20240118014648-1ab6a88c9429/go.mod h1:wJmVvDf4XSjsahWtfUq3wvIAYEAuhr7oxmxYnEL/LGQ=
-github.com/smartcontractkit/chainlink-common v0.1.7-0.20240205180946-df826cb540ce h1:+6MzHiHMPBddiR9tnkXA7pjgd2mNaboPck8cNsSfYrs=
-github.com/smartcontractkit/chainlink-common v0.1.7-0.20240205180946-df826cb540ce/go.mod h1:05rRF84QKlIOF5LfTBPkHdw4UpBI2G3zxRcuZ65bPjk=
+github.com/smartcontractkit/chainlink-common v0.1.7-0.20240208162729-5f42bd4a2f8b h1:HQOWQqbmtanx+nqL4fUYxpvZZWyfCkE1gPqmDgF63HY=
+github.com/smartcontractkit/chainlink-common v0.1.7-0.20240208162729-5f42bd4a2f8b/go.mod h1:Mw/HFKy1ljahnnDgVaeP6s6ZCGEV7XmB5gD3jrSjnjE=
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240206150430-fbccaa95af62 h1:DuSQLuq+Ilm3Q+2zn5agLrAi9UvFQmOUdKwZQKX0AFA=
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240206150430-fbccaa95af62/go.mod h1:Ny6kBD8Houh5yZRmGiB0ovsLHdb4qOHHwBno9JZUT+Y=
github.com/smartcontractkit/chainlink-data-streams v0.0.0-20231204152908-a6e3fe8ff2a1 h1:xYqRgZO0nMSO8CBCMR0r3WA+LZ4kNL8a6bnbyk/oBtQ=
diff --git a/go.mod b/go.mod
index c3c6aeb505b..fb4d26f9c4e 100644
--- a/go.mod
+++ b/go.mod
@@ -66,7 +66,7 @@ require (
github.com/shopspring/decimal v1.3.1
github.com/smartcontractkit/caigo v0.0.0-20230621050857-b29a4ca8c704
github.com/smartcontractkit/chainlink-automation v1.0.2-0.20240118014648-1ab6a88c9429
- github.com/smartcontractkit/chainlink-common v0.1.7-0.20240205180946-df826cb540ce
+ github.com/smartcontractkit/chainlink-common v0.1.7-0.20240208162729-5f42bd4a2f8b
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240206150430-fbccaa95af62
github.com/smartcontractkit/chainlink-data-streams v0.0.0-20231204152908-a6e3fe8ff2a1
github.com/smartcontractkit/chainlink-feeds v0.0.0-20240119021347-3c541a78cdb8
@@ -93,7 +93,6 @@ require (
go.uber.org/zap v1.26.0
golang.org/x/crypto v0.17.0
golang.org/x/exp v0.0.0-20231127185646-65229373498e
- golang.org/x/mod v0.14.0
golang.org/x/sync v0.5.0
golang.org/x/term v0.15.0
golang.org/x/text v0.14.0
@@ -313,6 +312,7 @@ require (
go.opentelemetry.io/proto/otlp v1.0.0 // indirect
go.uber.org/ratelimit v0.2.0 // indirect
golang.org/x/arch v0.6.0 // indirect
+ golang.org/x/mod v0.14.0 // indirect
golang.org/x/net v0.19.0 // indirect
golang.org/x/sys v0.15.0 // indirect
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
diff --git a/go.sum b/go.sum
index 35e1703f7ef..2ad268246f1 100644
--- a/go.sum
+++ b/go.sum
@@ -1164,8 +1164,8 @@ github.com/smartcontractkit/caigo v0.0.0-20230621050857-b29a4ca8c704 h1:T3lFWumv
github.com/smartcontractkit/caigo v0.0.0-20230621050857-b29a4ca8c704/go.mod h1:2QuJdEouTWjh5BDy5o/vgGXQtR4Gz8yH1IYB5eT7u4M=
github.com/smartcontractkit/chainlink-automation v1.0.2-0.20240118014648-1ab6a88c9429 h1:xkejUBZhcBpBrTSfxc91Iwzadrb6SXw8ks69bHIQ9Ww=
github.com/smartcontractkit/chainlink-automation v1.0.2-0.20240118014648-1ab6a88c9429/go.mod h1:wJmVvDf4XSjsahWtfUq3wvIAYEAuhr7oxmxYnEL/LGQ=
-github.com/smartcontractkit/chainlink-common v0.1.7-0.20240205180946-df826cb540ce h1:+6MzHiHMPBddiR9tnkXA7pjgd2mNaboPck8cNsSfYrs=
-github.com/smartcontractkit/chainlink-common v0.1.7-0.20240205180946-df826cb540ce/go.mod h1:05rRF84QKlIOF5LfTBPkHdw4UpBI2G3zxRcuZ65bPjk=
+github.com/smartcontractkit/chainlink-common v0.1.7-0.20240208162729-5f42bd4a2f8b h1:HQOWQqbmtanx+nqL4fUYxpvZZWyfCkE1gPqmDgF63HY=
+github.com/smartcontractkit/chainlink-common v0.1.7-0.20240208162729-5f42bd4a2f8b/go.mod h1:Mw/HFKy1ljahnnDgVaeP6s6ZCGEV7XmB5gD3jrSjnjE=
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240206150430-fbccaa95af62 h1:DuSQLuq+Ilm3Q+2zn5agLrAi9UvFQmOUdKwZQKX0AFA=
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240206150430-fbccaa95af62/go.mod h1:Ny6kBD8Houh5yZRmGiB0ovsLHdb4qOHHwBno9JZUT+Y=
github.com/smartcontractkit/chainlink-data-streams v0.0.0-20231204152908-a6e3fe8ff2a1 h1:xYqRgZO0nMSO8CBCMR0r3WA+LZ4kNL8a6bnbyk/oBtQ=
diff --git a/integration-tests/go.mod b/integration-tests/go.mod
index 70b9e772e3b..879aaa47497 100644
--- a/integration-tests/go.mod
+++ b/integration-tests/go.mod
@@ -24,7 +24,7 @@ require (
github.com/segmentio/ksuid v1.0.4
github.com/slack-go/slack v0.12.2
github.com/smartcontractkit/chainlink-automation v1.0.2-0.20240118014648-1ab6a88c9429
- github.com/smartcontractkit/chainlink-common v0.1.7-0.20240205180946-df826cb540ce
+ github.com/smartcontractkit/chainlink-common v0.1.7-0.20240208162729-5f42bd4a2f8b
github.com/smartcontractkit/chainlink-testing-framework v1.23.2
github.com/smartcontractkit/chainlink-vrf v0.0.0-20231120191722-fef03814f868
github.com/smartcontractkit/chainlink/v2 v2.0.0-00010101000000-000000000000
diff --git a/integration-tests/go.sum b/integration-tests/go.sum
index 82897ad46df..9c87e2245a1 100644
--- a/integration-tests/go.sum
+++ b/integration-tests/go.sum
@@ -1502,8 +1502,8 @@ github.com/smartcontractkit/caigo v0.0.0-20230621050857-b29a4ca8c704 h1:T3lFWumv
github.com/smartcontractkit/caigo v0.0.0-20230621050857-b29a4ca8c704/go.mod h1:2QuJdEouTWjh5BDy5o/vgGXQtR4Gz8yH1IYB5eT7u4M=
github.com/smartcontractkit/chainlink-automation v1.0.2-0.20240118014648-1ab6a88c9429 h1:xkejUBZhcBpBrTSfxc91Iwzadrb6SXw8ks69bHIQ9Ww=
github.com/smartcontractkit/chainlink-automation v1.0.2-0.20240118014648-1ab6a88c9429/go.mod h1:wJmVvDf4XSjsahWtfUq3wvIAYEAuhr7oxmxYnEL/LGQ=
-github.com/smartcontractkit/chainlink-common v0.1.7-0.20240205180946-df826cb540ce h1:+6MzHiHMPBddiR9tnkXA7pjgd2mNaboPck8cNsSfYrs=
-github.com/smartcontractkit/chainlink-common v0.1.7-0.20240205180946-df826cb540ce/go.mod h1:05rRF84QKlIOF5LfTBPkHdw4UpBI2G3zxRcuZ65bPjk=
+github.com/smartcontractkit/chainlink-common v0.1.7-0.20240208162729-5f42bd4a2f8b h1:HQOWQqbmtanx+nqL4fUYxpvZZWyfCkE1gPqmDgF63HY=
+github.com/smartcontractkit/chainlink-common v0.1.7-0.20240208162729-5f42bd4a2f8b/go.mod h1:Mw/HFKy1ljahnnDgVaeP6s6ZCGEV7XmB5gD3jrSjnjE=
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240206150430-fbccaa95af62 h1:DuSQLuq+Ilm3Q+2zn5agLrAi9UvFQmOUdKwZQKX0AFA=
github.com/smartcontractkit/chainlink-cosmos v0.4.1-0.20240206150430-fbccaa95af62/go.mod h1:Ny6kBD8Houh5yZRmGiB0ovsLHdb4qOHHwBno9JZUT+Y=
github.com/smartcontractkit/chainlink-data-streams v0.0.0-20231204152908-a6e3fe8ff2a1 h1:xYqRgZO0nMSO8CBCMR0r3WA+LZ4kNL8a6bnbyk/oBtQ=
From 1a7556ed84fab0735649db8fa08531b2449d4b07 Mon Sep 17 00:00:00 2001
From: Sri Kidambi <1702865+kidambisrinivas@users.noreply.github.com>
Date: Fri, 9 Feb 2024 12:12:32 +0530
Subject: [PATCH 08/11] VRF V2.5 gas optimisations (#11932)
* VRF V2.5 gas optimisations
* Minor changes
* Removed changes in SubscriptionAPI.sol due to no actual gain in hot paths
* Minor changes
---
.../scripts/native_solc_compile_all_vrfv2plus | 67 +++++++++++++++++++
.../src/v0.8/vrf/dev/VRFCoordinatorV2_5.sol | 10 +--
.../vrf_coordinator_v2_5.go | 2 +-
...rapper-dependency-versions-do-not-edit.txt | 2 +-
core/gethwrappers/go_generate_vrfv2plus.go | 21 ++++++
5 files changed, 96 insertions(+), 6 deletions(-)
create mode 100755 contracts/scripts/native_solc_compile_all_vrfv2plus
create mode 100644 core/gethwrappers/go_generate_vrfv2plus.go
diff --git a/contracts/scripts/native_solc_compile_all_vrfv2plus b/contracts/scripts/native_solc_compile_all_vrfv2plus
new file mode 100755
index 00000000000..f25d851b5cd
--- /dev/null
+++ b/contracts/scripts/native_solc_compile_all_vrfv2plus
@@ -0,0 +1,67 @@
+#!/usr/bin/env bash
+
+set -e
+
+echo " ┌──────────────────────────────────────────────┐"
+echo " │ Compiling VRF contracts... │"
+echo " └──────────────────────────────────────────────┘"
+
+SOLC_VERSION="0.8.6"
+OPTIMIZE_RUNS=1000000
+
+SCRIPTPATH="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
+ROOT="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; cd ../../ && 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
+
+compileContract () {
+ local contract
+ contract=$(basename "$1" ".sol")
+
+ solc @openzeppelin/="$ROOT"/contracts/node_modules/@openzeppelin/ --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,"$ROOT"/contracts/node_modules\
+ "$ROOT"/contracts/src/v0.8/"$1"
+}
+
+compileContractAltOpts () {
+ local contract
+ contract=$(basename "$1" ".sol")
+
+ solc @openzeppelin/="$ROOT"/contracts/node_modules/@openzeppelin/ --overwrite --optimize --optimize-runs "$2" --metadata-hash none \
+ -o "$ROOT"/contracts/solc/v$SOLC_VERSION/"$contract" \
+ --abi --bin --allow-paths "$ROOT"/contracts/src/v0.8,"$ROOT"/contracts/node_modules\
+ "$ROOT"/contracts/src/v0.8/"$1"
+}
+
+# VRF
+compileContract vrf/VRFRequestIDBase.sol
+compileContract vrf/VRFConsumerBase.sol
+compileContract vrf/testhelpers/VRFConsumer.sol
+compileContract vrf/testhelpers/VRFRequestIDBaseTestHelper.sol
+compileContract vrf/mocks/VRFCoordinatorMock.sol
+
+# VRF V2Plus
+compileContract vrf/dev/interfaces/IVRFCoordinatorV2PlusInternal.sol
+compileContract vrf/dev/testhelpers/VRFV2PlusConsumerExample.sol
+compileContractAltOpts vrf/dev/VRFCoordinatorV2_5.sol 50
+compileContract vrf/dev/BatchVRFCoordinatorV2Plus.sol
+compileContract vrf/dev/VRFV2PlusWrapper.sol
+compileContract vrf/dev/testhelpers/VRFConsumerV2PlusUpgradeableExample.sol
+compileContract vrf/dev/testhelpers/VRFMaliciousConsumerV2Plus.sol
+compileContract vrf/dev/testhelpers/VRFV2PlusExternalSubOwnerExample.sol
+compileContract vrf/dev/testhelpers/VRFV2PlusSingleConsumerExample.sol
+compileContract vrf/dev/testhelpers/VRFV2PlusWrapperConsumerExample.sol
+compileContract vrf/dev/testhelpers/VRFV2PlusRevertingExample.sol
+compileContract vrf/dev/testhelpers/VRFConsumerV2PlusUpgradeableExample.sol
+compileContract vrf/dev/testhelpers/VRFV2PlusMaliciousMigrator.sol
+compileContract vrf/dev/libraries/VRFV2PlusClient.sol
+compileContract vrf/dev/testhelpers/VRFCoordinatorV2Plus_V2Example.sol
+compileContract vrf/dev/BlockhashStore.sol
+compileContract vrf/dev/TrustedBlockhashStore.sol
+compileContract vrf/dev/testhelpers/VRFV2PlusLoadTestWithMetrics.sol
+compileContractAltOpts vrf/dev/testhelpers/VRFCoordinatorV2PlusUpgradedVersion.sol 5
+compileContract vrf/dev/testhelpers/VRFV2PlusWrapperLoadTestConsumer.sol
diff --git a/contracts/src/v0.8/vrf/dev/VRFCoordinatorV2_5.sol b/contracts/src/v0.8/vrf/dev/VRFCoordinatorV2_5.sol
index 125a028e542..c21634bc61d 100644
--- a/contracts/src/v0.8/vrf/dev/VRFCoordinatorV2_5.sol
+++ b/contracts/src/v0.8/vrf/dev/VRFCoordinatorV2_5.sol
@@ -473,16 +473,18 @@ contract VRFCoordinatorV2_5 is VRF, SubscriptionAPI, IVRFCoordinatorV2Plus {
function _chargePayment(uint96 payment, bool nativePayment, uint256 subId) internal {
if (nativePayment) {
- if (s_subscriptions[subId].nativeBalance < payment) {
+ uint96 prevBal = s_subscriptions[subId].nativeBalance;
+ if (prevBal < payment) {
revert InsufficientBalance();
}
- s_subscriptions[subId].nativeBalance -= payment;
+ s_subscriptions[subId].nativeBalance = prevBal - payment;
s_withdrawableNative += payment;
} else {
- if (s_subscriptions[subId].balance < payment) {
+ uint96 prevBal = s_subscriptions[subId].balance;
+ if (prevBal < payment) {
revert InsufficientBalance();
}
- s_subscriptions[subId].balance -= payment;
+ s_subscriptions[subId].balance = prevBal - payment;
s_withdrawableTokens += payment;
}
}
diff --git a/core/gethwrappers/generated/vrf_coordinator_v2_5/vrf_coordinator_v2_5.go b/core/gethwrappers/generated/vrf_coordinator_v2_5/vrf_coordinator_v2_5.go
index d81e170c028..275233808d4 100644
--- a/core/gethwrappers/generated/vrf_coordinator_v2_5/vrf_coordinator_v2_5.go
+++ b/core/gethwrappers/generated/vrf_coordinator_v2_5/vrf_coordinator_v2_5.go
@@ -62,7 +62,7 @@ type VRFV2PlusClientRandomWordsRequest struct {
var VRFCoordinatorV25MetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"blockhashStore\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"internalBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"externalBalance\",\"type\":\"uint256\"}],\"name\":\"BalanceInvariantViolated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNum\",\"type\":\"uint256\"}],\"name\":\"BlockhashNotInStore\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"coordinatorAddress\",\"type\":\"address\"}],\"name\":\"CoordinatorAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"coordinatorAddress\",\"type\":\"address\"}],\"name\":\"CoordinatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedToSendNative\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedToTransferLink\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"have\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"want\",\"type\":\"uint32\"}],\"name\":\"GasLimitTooBig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxGas\",\"type\":\"uint256\"}],\"name\":\"GasPriceExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectCommitment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"have\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"want\",\"type\":\"uint256\"}],\"name\":\"InsufficientGasForConsumer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidCalldata\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"consumer\",\"type\":\"address\"}],\"name\":\"InvalidConsumer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExtraArgsTag\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"linkWei\",\"type\":\"int256\"}],\"name\":\"InvalidLinkWeiPrice\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"have\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"min\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"max\",\"type\":\"uint16\"}],\"name\":\"InvalidRequestConfirmations\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSubscription\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkAlreadySet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"flatFeeLinkDiscountPPM\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"flatFeeNativePPM\",\"type\":\"uint32\"}],\"name\":\"LinkDiscountTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkNotSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"MustBeRequestedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"MustBeSubOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoCorrespondingRequest\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"keyHash\",\"type\":\"bytes32\"}],\"name\":\"NoSuchProvingKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"have\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"want\",\"type\":\"uint32\"}],\"name\":\"NumWordsTooBig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableFromLink\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PaymentTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PendingRequestExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"keyHash\",\"type\":\"bytes32\"}],\"name\":\"ProvingKeyAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Reentrant\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyConsumers\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"minimumRequestConfirmations\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"maxGasLimit\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"stalenessSeconds\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"gasAfterPaymentCalculation\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"fallbackWeiPerUnitLink\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"fulfillmentFlatFeeNativePPM\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"fulfillmentFlatFeeLinkDiscountPPM\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"nativePremiumPercentage\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"linkPremiumPercentage\",\"type\":\"uint8\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"coordinatorAddress\",\"type\":\"address\"}],\"name\":\"CoordinatorDeregistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"coordinatorAddress\",\"type\":\"address\"}],\"name\":\"CoordinatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FundsRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newCoordinator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"}],\"name\":\"MigrationCompleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"NativeFundsRecovered\",\"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\":\"keyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"maxGas\",\"type\":\"uint64\"}],\"name\":\"ProvingKeyDeregistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"keyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"maxGas\",\"type\":\"uint64\"}],\"name\":\"ProvingKeyRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"outputSeed\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"payment\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"onlyPremium\",\"type\":\"bool\"}],\"name\":\"RandomWordsFulfilled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"keyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"preSeed\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"minimumRequestConfirmations\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"callbackGasLimit\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"numWords\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RandomWordsRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountLink\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountNative\",\"type\":\"uint256\"}],\"name\":\"SubscriptionCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"consumer\",\"type\":\"address\"}],\"name\":\"SubscriptionConsumerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"consumer\",\"type\":\"address\"}],\"name\":\"SubscriptionConsumerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"SubscriptionCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"name\":\"SubscriptionFunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldNativeBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newNativeBalance\",\"type\":\"uint256\"}],\"name\":\"SubscriptionFundedWithNative\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"SubscriptionOwnerTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"SubscriptionOwnerTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BLOCKHASH_STORE\",\"outputs\":[{\"internalType\":\"contractBlockhashStoreInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LINK\",\"outputs\":[{\"internalType\":\"contractLinkTokenInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LINK_NATIVE_FEED\",\"outputs\":[{\"internalType\":\"contractAggregatorV3Interface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_CONSUMERS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_NUM_WORDS\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_REQUEST_CONFIRMATIONS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"}],\"name\":\"acceptSubscriptionOwnerTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"consumer\",\"type\":\"address\"}],\"name\":\"addConsumer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"cancelSubscription\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"createSubscription\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"deregisterMigratableCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[2]\",\"name\":\"publicProvingKey\",\"type\":\"uint256[2]\"}],\"name\":\"deregisterProvingKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"pk\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"gamma\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256\",\"name\":\"c\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"s\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"seed\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"uWitness\",\"type\":\"address\"},{\"internalType\":\"uint256[2]\",\"name\":\"cGammaWitness\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"sHashWitness\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256\",\"name\":\"zInv\",\"type\":\"uint256\"}],\"internalType\":\"structVRF.Proof\",\"name\":\"proof\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"blockNum\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"callbackGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"numWords\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structVRFCoordinatorV2_5.RequestCommitment\",\"name\":\"rc\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"onlyPremium\",\"type\":\"bool\"}],\"name\":\"fulfillRandomWords\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"}],\"name\":\"fundSubscriptionWithNative\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxCount\",\"type\":\"uint256\"}],\"name\":\"getActiveSubscriptionIds\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"}],\"name\":\"getSubscription\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"balance\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"nativeBalance\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"reqCount\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"consumers\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[2]\",\"name\":\"publicKey\",\"type\":\"uint256[2]\"}],\"name\":\"hashOfKey\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"newCoordinator\",\"type\":\"address\"}],\"name\":\"migrate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onTokenTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"}],\"name\":\"ownerCancelSubscription\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"}],\"name\":\"pendingRequestExists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"recoverFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"recoverNativeFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"registerMigratableCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[2]\",\"name\":\"publicProvingKey\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint64\",\"name\":\"maxGas\",\"type\":\"uint64\"}],\"name\":\"registerProvingKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"consumer\",\"type\":\"address\"}],\"name\":\"removeConsumer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"keyHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"requestConfirmations\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"callbackGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"numWords\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structVRFV2PlusClient.RandomWordsRequest\",\"name\":\"req\",\"type\":\"tuple\"}],\"name\":\"requestRandomWords\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"requestSubscriptionOwnerTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_config\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"minimumRequestConfirmations\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"reentrancyLock\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"stalenessSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasAfterPaymentCalculation\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"fulfillmentFlatFeeNativePPM\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"fulfillmentFlatFeeLinkDiscountPPM\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"nativePremiumPercentage\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"linkPremiumPercentage\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_currentSubNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_fallbackWeiPerUnitLink\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"s_provingKeyHashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"s_provingKeys\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exists\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"maxGas\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"s_requestCommitments\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_totalBalance\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_totalNativeBalance\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"minimumRequestConfirmations\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"stalenessSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasAfterPaymentCalculation\",\"type\":\"uint32\"},{\"internalType\":\"int256\",\"name\":\"fallbackWeiPerUnitLink\",\"type\":\"int256\"},{\"internalType\":\"uint32\",\"name\":\"fulfillmentFlatFeeNativePPM\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"fulfillmentFlatFeeLinkDiscountPPM\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"nativePremiumPercentage\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"linkPremiumPercentage\",\"type\":\"uint8\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"link\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"linkNativeFeed\",\"type\":\"address\"}],\"name\":\"setLINKAndLINKNativeFeed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawNative\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
- Bin: "0x60a06040523480156200001157600080fd5b506040516200606438038062006064833981016040819052620000349162000183565b33806000816200008b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be81620000d7565b50505060601b6001600160601b031916608052620001b5565b6001600160a01b038116331415620001325760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000082565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000602082840312156200019657600080fd5b81516001600160a01b0381168114620001ae57600080fd5b9392505050565b60805160601c615e89620001db6000396000818161055001526133cc0152615e896000f3fe60806040526004361061021c5760003560e01c80638402595e11610124578063b2a7cac5116100a6578063b2a7cac514610732578063bec4c08c14610752578063caf70c4a14610772578063cb63179714610792578063d98e620e146107b2578063da2f2610146107d2578063dac83d2914610831578063dc311dd314610851578063e72f6e3014610882578063ee9d2d38146108a2578063f2fde38b146108cf57600080fd5b80638402595e146105c757806386fe91c7146105e75780638da5cb5b1461060757806395b55cfc146106255780639b1c385e146106385780639d40a6fd14610658578063a21a23e414610690578063a4c0ed36146106a5578063a63e0bfb146106c5578063aa433aff146106e5578063aefb212f1461070557600080fd5b8063405b84fa116101ad578063405b84fa1461044e57806340d6bb821461046e57806341af6c871461049957806351cff8d9146104c95780635d06b4ab146104e957806364d51a2a14610509578063659827441461051e578063689c45171461053e57806372e9d5651461057257806379ba5097146105925780637a5a2aef146105a757600080fd5b806304104edb14610221578063043bd6ae14610243578063088070f51461026c57806308821d581461033a5780630ae095401461035a57806315c48b841461037a57806318e3dd27146103a25780631b6b6d23146103e15780632f622e6b1461040e578063301f42e91461042e575b600080fd5b34801561022d57600080fd5b5061024161023c36600461524f565b6108ef565b005b34801561024f57600080fd5b5061025960105481565b6040519081526020015b60405180910390f35b34801561027857600080fd5b50600c546102dd9061ffff81169063ffffffff62010000820481169160ff600160301b8204811692600160381b8304811692600160581b8104821692600160781b8204831692600160981b83041691600160b81b8104821691600160c01b9091041689565b6040805161ffff909a168a5263ffffffff98891660208b01529615159689019690965293861660608801529185166080870152841660a08601529290921660c084015260ff91821660e08401521661010082015261012001610263565b34801561034657600080fd5b5061024161035536600461532d565b610aa5565b34801561036657600080fd5b50610241610375366004615617565b610c48565b34801561038657600080fd5b5061038f60c881565b60405161ffff9091168152602001610263565b3480156103ae57600080fd5b50600a546103c990600160601b90046001600160601b031681565b6040516001600160601b039091168152602001610263565b3480156103ed57600080fd5b50600254610401906001600160a01b031681565b604051610263919061584e565b34801561041a57600080fd5b5061024161042936600461524f565b610c90565b34801561043a57600080fd5b506103c9610449366004615433565b610ddc565b34801561045a57600080fd5b50610241610469366004615617565b611032565b34801561047a57600080fd5b506104846101f481565b60405163ffffffff9091168152602001610263565b3480156104a557600080fd5b506104b96104b43660046153b6565b6113e6565b6040519015158152602001610263565b3480156104d557600080fd5b506102416104e436600461524f565b611587565b3480156104f557600080fd5b5061024161050436600461524f565b611715565b34801561051557600080fd5b5061038f606481565b34801561052a57600080fd5b5061024161053936600461526c565b6117cc565b34801561054a57600080fd5b506104017f000000000000000000000000000000000000000000000000000000000000000081565b34801561057e57600080fd5b50600354610401906001600160a01b031681565b34801561059e57600080fd5b5061024161182c565b3480156105b357600080fd5b506102416105c2366004615349565b6118d6565b3480156105d357600080fd5b506102416105e236600461524f565b611a06565b3480156105f357600080fd5b50600a546103c9906001600160601b031681565b34801561061357600080fd5b506000546001600160a01b0316610401565b6102416106333660046153b6565b611b18565b34801561064457600080fd5b50610259610653366004615521565b611c3c565b34801561066457600080fd5b50600754610678906001600160401b031681565b6040516001600160401b039091168152602001610263565b34801561069c57600080fd5b50610259611faa565b3480156106b157600080fd5b506102416106c03660046152a5565b6121d4565b3480156106d157600080fd5b506102416106e0366004615576565b612350565b3480156106f157600080fd5b506102416107003660046153b6565b6125cd565b34801561071157600080fd5b5061072561072036600461563c565b61262d565b60405161026391906158c5565b34801561073e57600080fd5b5061024161074d3660046153b6565b612730565b34801561075e57600080fd5b5061024161076d366004615617565b612831565b34801561077e57600080fd5b5061025961078d36600461537d565b61294b565b34801561079e57600080fd5b506102416107ad366004615617565b61297b565b3480156107be57600080fd5b506102596107cd3660046153b6565b612bfb565b3480156107de57600080fd5b506108126107ed3660046153b6565b600d6020526000908152604090205460ff81169061010090046001600160401b031682565b6040805192151583526001600160401b03909116602083015201610263565b34801561083d57600080fd5b5061024161084c366004615617565b612c1c565b34801561085d57600080fd5b5061087161086c3660046153b6565b612cb0565b604051610263959493929190615a9a565b34801561088e57600080fd5b5061024161089d36600461524f565b612dab565b3480156108ae57600080fd5b506102596108bd3660046153b6565b600f6020526000908152604090205481565b3480156108db57600080fd5b506102416108ea36600461524f565b612f8c565b6108f7612f9d565b60115460005b81811015610a7d57826001600160a01b03166011828154811061092257610922615de5565b6000918252602090912001546001600160a01b03161415610a6b57601161094a600184615c95565b8154811061095a5761095a615de5565b600091825260209091200154601180546001600160a01b03909216918390811061098657610986615de5565b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790558260116109bd600185615c95565b815481106109cd576109cd615de5565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506011805480610a0c57610a0c615dcf565b600082815260209020810160001990810180546001600160a01b03191690550190556040517ff80a1a97fd42251f3c33cda98635e7399253033a6774fe37cd3f650b5282af3790610a5e90859061584e565b60405180910390a1505050565b80610a7581615d4d565b9150506108fd565b5081604051635428d44960e01b8152600401610a99919061584e565b60405180910390fd5b50565b610aad612f9d565b604080518082018252600091610adc91908490600290839083908082843760009201919091525061294b915050565b6000818152600d602090815260409182902082518084019093525460ff811615158084526101009091046001600160401b03169183019190915291925090610b3a57604051631dfd6e1360e21b815260048101839052602401610a99565b6000828152600d6020526040812080546001600160481b03191690555b600e54811015610c125782600e8281548110610b7557610b75615de5565b90600052602060002001541415610c0057600e805460009190610b9a90600190615c95565b81548110610baa57610baa615de5565b9060005260206000200154905080600e8381548110610bcb57610bcb615de5565b600091825260209091200155600e805480610be857610be8615dcf565b60019003818190600052602060002001600090559055505b80610c0a81615d4d565b915050610b57565b507f9b6868e0eb737bcd72205360baa6bfd0ba4e4819a33ade2db384e8a8025639a5828260200151604051610a5e9291906158d8565b81610c5281612ff2565b610c5a613053565b610c63836113e6565b15610c8157604051631685ecdd60e31b815260040160405180910390fd5b610c8b838361307e565b505050565b610c98613053565b610ca0612f9d565b600b54600160601b90046001600160601b0316610cd057604051631e9acf1760e31b815260040160405180910390fd5b600b8054600160601b90046001600160601b0316908190600c610cf38380615cd1565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555080600a600c8282829054906101000a90046001600160601b0316610d3b9190615cd1565b92506101000a8154816001600160601b0302191690836001600160601b031602179055506000826001600160a01b0316826001600160601b031660405160006040518083038185875af1925050503d8060008114610db5576040519150601f19603f3d011682016040523d82523d6000602084013e610dba565b606091505b5050905080610c8b5760405163950b247960e01b815260040160405180910390fd5b6000610de6613053565b60005a90506000610df78686613232565b90506000610e0d858360000151602001516134ee565b90506000866060015163ffffffff166001600160401b03811115610e3357610e33615dfb565b604051908082528060200260200182016040528015610e5c578160200160208202803683370190505b50905060005b876060015163ffffffff16811015610edc57836040015181604051602001610e94929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c828281518110610ebf57610ebf615de5565b602090810291909101015280610ed481615d4d565b915050610e62565b50602080840180516000908152600f9092526040822082905551610f0190898461353c565b602089810151600090815260069091526040902054909150610f3490600160c01b90046001600160401b03166001615bf9565b6020808a0151600090815260069091526040812080546001600160401b0393909316600160c01b026001600160c01b039093169290921790915560a08901518051610f8190600190615c95565b81518110610f9157610f91615de5565b60209101015160f81c60011490506000610fad8786848c6135d7565b9050610fbe81838c60200151613607565b6020808b0151878201516040808a015181519081526001600160601b03861694810194909452861515908401528b1515606084015290917f6c6b5394380e16e41988d8383648010de6f5c2e4814803be5de1c6b1c852db559060800160405180910390a396505050505050505b9392505050565b61103a613053565b6110438161379b565b6110625780604051635428d44960e01b8152600401610a99919061584e565b60008060008061107186612cb0565b945094505093509350336001600160a01b0316826001600160a01b0316146110d45760405162461bcd60e51b81526020600482015260166024820152752737ba1039bab139b1b934b83a34b7b71037bbb732b960511b6044820152606401610a99565b6110dd866113e6565b156111235760405162461bcd60e51b815260206004820152601660248201527550656e64696e6720726571756573742065786973747360501b6044820152606401610a99565b6040805160c0810182526001815260208082018990526001600160a01b03851682840152606082018490526001600160601b038088166080840152861660a08301529151909160009161117891849101615902565b604051602081830303815290604052905061119288613805565b505060405163ce3f471960e01b81526001600160a01b0388169063ce3f4719906001600160601b038816906111cb9085906004016158ef565b6000604051808303818588803b1580156111e457600080fd5b505af11580156111f8573d6000803e3d6000fd5b50506002546001600160a01b031615801593509150611221905057506001600160601b03861615155b156112eb5760025460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611258908a908a90600401615895565b602060405180830381600087803b15801561127257600080fd5b505af1158015611286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112aa9190615399565b6112eb5760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610a99565b600c805460ff60301b1916600160301b17905560005b83518110156113945783818151811061131c5761131c615de5565b60200260200101516001600160a01b0316638ea98117896040518263ffffffff1660e01b815260040161134f919061584e565b600060405180830381600087803b15801561136957600080fd5b505af115801561137d573d6000803e3d6000fd5b50505050808061138c90615d4d565b915050611301565b50600c805460ff60301b191690556040517fd63ca8cb945956747ee69bfdc3ea754c24a4caf7418db70e46052f7850be4187906113d49089908b90615862565b60405180910390a15050505050505050565b6000818152600560209081526040808320815160608101835281546001600160a01b039081168252600183015416818501526002820180548451818702810187018652818152879693958601939092919083018282801561147057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611452575b505050505081525050905060005b81604001515181101561157d5760005b600e5481101561156a576000611533600e83815481106114b0576114b0615de5565b9060005260206000200154856040015185815181106114d1576114d1615de5565b60200260200101518860046000896040015189815181106114f4576114f4615de5565b6020908102919091018101516001600160a01b0316825281810192909252604090810160009081208d82529092529020546001600160401b0316613a53565b506000818152600f6020526040902054909150156115575750600195945050505050565b508061156281615d4d565b91505061148e565b508061157581615d4d565b91505061147e565b5060009392505050565b61158f613053565b611597612f9d565b6002546001600160a01b03166115c05760405163c1f0c0a160e01b815260040160405180910390fd5b600b546001600160601b03166115e957604051631e9acf1760e31b815260040160405180910390fd5b600b80546001600160601b031690819060006116058380615cd1565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555080600a60008282829054906101000a90046001600160601b031661164d9190615cd1565b82546001600160601b039182166101009390930a92830291909202199091161790555060025460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906116a29085908590600401615895565b602060405180830381600087803b1580156116bc57600080fd5b505af11580156116d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f49190615399565b61171157604051631e9acf1760e31b815260040160405180910390fd5b5050565b61171d612f9d565b6117268161379b565b15611746578060405163ac8a27ef60e01b8152600401610a99919061584e565b601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b0383161790556040517fb7cabbfc11e66731fc77de0444614282023bcbd41d16781c753a431d0af01625906117c190839061584e565b60405180910390a150565b6117d4612f9d565b6002546001600160a01b0316156117fe57604051631688c53760e11b815260040160405180910390fd5b600280546001600160a01b039384166001600160a01b03199182161790915560038054929093169116179055565b6001546001600160a01b0316331461187f5760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b6044820152606401610a99565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6118de612f9d565b60408051808201825260009161190d91908590600290839083908082843760009201919091525061294b915050565b6000818152600d602052604090205490915060ff161561194357604051634a0b8fa760e01b815260048101829052602401610a99565b60408051808201825260018082526001600160401b0385811660208085019182526000878152600d9091528581209451855492516001600160481b031990931690151568ffffffffffffffff00191617610100929093169190910291909117909255600e805491820181559091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd01829055517f9b911b2c240bfbef3b6a8f7ed6ee321d1258bb2a3fe6becab52ac1cd3210afd390610a5e90839085906158d8565b611a0e612f9d565b600a544790600160601b90046001600160601b031681811115611a4e576040516354ced18160e11b81526004810182905260248101839052604401610a99565b81811015610c8b576000611a628284615c95565b90506000846001600160a01b03168260405160006040518083038185875af1925050503d8060008114611ab1576040519150601f19603f3d011682016040523d82523d6000602084013e611ab6565b606091505b5050905080611ad85760405163950b247960e01b815260040160405180910390fd5b7f4aed7c8eed0496c8c19ea2681fcca25741c1602342e38b045d9f1e8e905d2e9c8583604051611b09929190615862565b60405180910390a15050505050565b611b20613053565b6000818152600560205260409020546001600160a01b0316611b5557604051630fb532db60e11b815260040160405180910390fd5b60008181526006602052604090208054600160601b90046001600160601b0316903490600c611b848385615c40565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555034600a600c8282829054906101000a90046001600160601b0316611bcc9190615c40565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550817f7603b205d03651ee812f803fccde89f1012e545a9c99f0abfea9cedd0fd8e902823484611c1f9190615be1565b604080519283526020830191909152015b60405180910390a25050565b6000611c46613053565b6020808301356000908152600590915260409020546001600160a01b0316611c8157604051630fb532db60e11b815260040160405180910390fd5b3360009081526004602090815260408083208583013584529091529020546001600160401b031680611cce578260200135336040516379bfd40160e01b8152600401610a99929190615977565b600c5461ffff16611ce5606085016040860161555b565b61ffff161080611d08575060c8611d02606085016040860161555b565b61ffff16115b15611d4e57611d1d606084016040850161555b565b600c5460405163539c34bb60e11b815261ffff92831660048201529116602482015260c86044820152606401610a99565b600c5462010000900463ffffffff16611d6d608085016060860161565e565b63ffffffff161115611dbd57611d89608084016060850161565e565b600c54604051637aebf00f60e11b815263ffffffff9283166004820152620100009091049091166024820152604401610a99565b6101f4611dd060a085016080860161565e565b63ffffffff161115611e1657611dec60a084016080850161565e565b6040516311ce1afb60e21b815263ffffffff90911660048201526101f46024820152604401610a99565b6000611e23826001615bf9565b9050600080611e39863533602089013586613a53565b90925090506000611e55611e5060a0890189615aef565b613acc565b90506000611e6282613b49565b905083611e6d613bba565b60208a0135611e8260808c0160608d0161565e565b611e9260a08d0160808e0161565e565b3386604051602001611eaa97969594939291906159fa565b60405160208183030381529060405280519060200120600f600086815260200190815260200160002081905550336001600160a01b0316886020013589600001357feb0e3652e0f44f417695e6e90f2f42c99b65cd7169074c5a654b16b9748c3a4e87878d6040016020810190611f21919061555b565b8e6060016020810190611f34919061565e565b8f6080016020810190611f47919061565e565b89604051611f5a969594939291906159bb565b60405180910390a45050336000908152600460209081526040808320898301358452909152902080546001600160401b0319166001600160401b039490941693909317909255925050505b919050565b6000611fb4613053565b600033611fc2600143615c95565b600754604051606093841b6001600160601b03199081166020830152924060348201523090931b909116605483015260c01b6001600160c01b031916606882015260700160408051601f198184030181529190528051602090910120600780549192506001600160401b0390911690600061203c83615d68565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550506000806001600160401b0381111561207b5761207b615dfb565b6040519080825280602002602001820160405280156120a4578160200160208202803683370190505b506040805160608082018352600080835260208084018281528486018381528984526006835286842095518654925191516001600160601b039182166001600160c01b031990941693909317600160601b9190921602176001600160c01b0316600160c01b6001600160401b039092169190910217909355835191820184523382528183018181528285018681528883526005855294909120825181546001600160a01b03199081166001600160a01b0392831617835592516001830180549094169116179091559251805194955090936121859260028501920190614f69565b5061219591506008905083613c4a565b50817f1d3015d7ba850fa198dc7b1a3f5d42779313a681035f77c8c03764c61005518d336040516121c6919061584e565b60405180910390a250905090565b6121dc613053565b6002546001600160a01b03163314612207576040516344b0e3c360e01b815260040160405180910390fd5b6020811461222857604051638129bbcd60e01b815260040160405180910390fd5b6000612236828401846153b6565b6000818152600560205260409020549091506001600160a01b031661226e57604051630fb532db60e11b815260040160405180910390fd5b600081815260066020526040812080546001600160601b0316918691906122958385615c40565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555084600a60008282829054906101000a90046001600160601b03166122dd9190615c40565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550817f1ced9348ff549fceab2ac57cd3a9de38edaaab274b725ee82c23e8fc8c4eec7a8287846123309190615be1565b6040805192835260208301919091520160405180910390a2505050505050565b612358612f9d565b60c861ffff8a1611156123925760405163539c34bb60e11b815261ffff8a1660048201819052602482015260c86044820152606401610a99565b600085136123b6576040516321ea67b360e11b815260048101869052602401610a99565b60008463ffffffff161180156123d857508363ffffffff168363ffffffff1610155b15612406576040516313c06e5960e11b815263ffffffff808516600483015285166024820152604401610a99565b604080516101208101825261ffff8b1680825263ffffffff808c16602084018190526000848601528b8216606085018190528b8316608086018190528a841660a08701819052938a1660c0870181905260ff808b1660e08901819052908a16610100909801889052600c8054600160c01b90990260ff60c01b19600160b81b9093029290921661ffff60b81b19600160981b90940263ffffffff60981b19600160781b9099029890981667ffffffffffffffff60781b19600160581b90960263ffffffff60581b19600160381b9098029790971668ffffffffffffffffff60301b196201000090990265ffffffffffff19909c16909a179a909a1796909616979097179390931791909116959095179290921793909316929092179190911790556010869055517f2c6b6b12413678366b05b145c5f00745bdd00e739131ab5de82484a50c9d78b6906125ba908b908b908b908b908b908b908b908b908b9061ffff99909916895263ffffffff97881660208a0152958716604089015293861660608801526080870192909252841660a086015290921660c084015260ff91821660e0840152166101008201526101200190565b60405180910390a1505050505050505050565b6125d5612f9d565b6000818152600560205260409020546001600160a01b031661260a57604051630fb532db60e11b815260040160405180910390fd5b600081815260056020526040902054610aa29082906001600160a01b031661307e565b6060600061263b6008613c56565b905080841061265d57604051631390f2a160e01b815260040160405180910390fd5b60006126698486615be1565b905081811180612677575083155b6126815780612683565b815b905060006126918683615c95565b6001600160401b038111156126a8576126a8615dfb565b6040519080825280602002602001820160405280156126d1578160200160208202803683370190505b50905060005b8151811015612724576126f56126ed8883615be1565b600890613c60565b82828151811061270757612707615de5565b60209081029190910101528061271c81615d4d565b9150506126d7565b50925050505b92915050565b612738613053565b6000818152600560205260409020546001600160a01b031661276d57604051630fb532db60e11b815260040160405180910390fd5b6000818152600560205260409020600101546001600160a01b031633146127c4576000818152600560205260409081902060010154905163d084e97560e01b8152610a99916001600160a01b03169060040161584e565b6000818152600560205260409081902080546001600160a01b031980821633908117845560019093018054909116905591516001600160a01b039092169183917fd4114ab6e9af9f597c52041f32d62dc57c5c4e4c0d4427006069635e216c938691611c3091859161587b565b8161283b81612ff2565b612843613053565b60008381526005602052604090206002015460641415612876576040516305a48e0f60e01b815260040160405180910390fd5b6001600160a01b03821660009081526004602090815260408083208684529091529020546001600160401b0316156128ad57505050565b6001600160a01b0382166000818152600460209081526040808320878452825280832080546001600160401b031916600190811790915560058352818420600201805491820181558452919092200180546001600160a01b0319169092179091555183907f1e980d04aa7648e205713e5e8ea3808672ac163d10936d36f91b2c88ac1575e19061293e90859061584e565b60405180910390a2505050565b60008160405160200161295e91906158b7565b604051602081830303815290604052805190602001209050919050565b8161298581612ff2565b61298d613053565b612996836113e6565b156129b457604051631685ecdd60e31b815260040160405180910390fd5b6001600160a01b03821660009081526004602090815260408083208684529091529020546001600160401b0316612a025782826040516379bfd40160e01b8152600401610a99929190615977565b600083815260056020908152604080832060020180548251818502810185019093528083529192909190830182828015612a6557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612a47575b50505050509050600060018251612a7c9190615c95565b905060005b8251811015612b8857846001600160a01b0316838281518110612aa657612aa6615de5565b60200260200101516001600160a01b03161415612b76576000838381518110612ad157612ad1615de5565b6020026020010151905080600560008981526020019081526020016000206002018381548110612b0357612b03615de5565b600091825260208083209190910180546001600160a01b0319166001600160a01b039490941693909317909255888152600590915260409020600201805480612b4e57612b4e615dcf565b600082815260209020810160001990810180546001600160a01b031916905501905550612b88565b80612b8081615d4d565b915050612a81565b506001600160a01b03841660009081526004602090815260408083208884529091529081902080546001600160401b03191690555185907f32158c6058347c1601b2d12bc696ac6901d8a9a9aa3ba10c27ab0a983e8425a790612bec90879061584e565b60405180910390a25050505050565b600e8181548110612c0b57600080fd5b600091825260209091200154905081565b81612c2681612ff2565b612c2e613053565b6000838152600560205260409020600101546001600160a01b03838116911614610c8b576000838152600560205260409081902060010180546001600160a01b0319166001600160a01b0385161790555183907f21a4dad170a6bf476c31bbcf4a16628295b0e450672eec25d7c93308e05344a19061293e903390869061587b565b6000818152600560205260408120548190819081906060906001600160a01b0316612cee57604051630fb532db60e11b815260040160405180910390fd5b60008681526006602090815260408083205460058352928190208054600290910180548351818602810186019094528084526001600160601b0380871696600160601b810490911695600160c01b9091046001600160401b0316946001600160a01b0390941693918391830182828015612d9157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612d73575b505050505090509450945094509450945091939590929450565b612db3612f9d565b6002546001600160a01b0316612ddc5760405163c1f0c0a160e01b815260040160405180910390fd5b6002546040516370a0823160e01b81526000916001600160a01b0316906370a0823190612e0d90309060040161584e565b60206040518083038186803b158015612e2557600080fd5b505afa158015612e39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5d91906153cf565b600a549091506001600160601b031681811115612e97576040516354ced18160e11b81526004810182905260248101839052604401610a99565b81811015610c8b576000612eab8284615c95565b60025460405163a9059cbb60e01b81529192506001600160a01b03169063a9059cbb90612ede9087908590600401615862565b602060405180830381600087803b158015612ef857600080fd5b505af1158015612f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f309190615399565b612f4d57604051631f01ff1360e21b815260040160405180910390fd5b7f59bfc682b673f8cbf945f1e454df9334834abf7dfe7f92237ca29ecb9b4366008482604051612f7e929190615862565b60405180910390a150505050565b612f94612f9d565b610aa281613c6c565b6000546001600160a01b03163314612ff05760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b6044820152606401610a99565b565b6000818152600560205260409020546001600160a01b03168061302857604051630fb532db60e11b815260040160405180910390fd5b336001600160a01b038216146117115780604051636c51fda960e11b8152600401610a99919061584e565b600c54600160301b900460ff1615612ff05760405163769dd35360e11b815260040160405180910390fd5b60008061308a84613805565b60025491935091506001600160a01b0316158015906130b157506001600160601b03821615155b156131605760025460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906130f19086906001600160601b03871690600401615862565b602060405180830381600087803b15801561310b57600080fd5b505af115801561311f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131439190615399565b61316057604051631e9acf1760e31b815260040160405180910390fd5b6000836001600160a01b0316826001600160601b031660405160006040518083038185875af1925050503d80600081146131b6576040519150601f19603f3d011682016040523d82523d6000602084013e6131bb565b606091505b50509050806131dd5760405163950b247960e01b815260040160405180910390fd5b604080516001600160a01b03861681526001600160601b03808616602083015284169181019190915285907f8c74ce8b8cf87f5eb001275c8be27eb34ea2b62bfab6814fcc62192bb63e81c490606001612bec565b6040805160a0810182526000606082018181526080830182905282526020820181905291810191909152600061326b846000015161294b565b6000818152600d602090815260409182902082518084019093525460ff811615158084526101009091046001600160401b031691830191909152919250906132c957604051631dfd6e1360e21b815260048101839052602401610a99565b60008286608001516040516020016132eb929190918252602082015260400190565b60408051601f1981840301815291815281516020928301206000818152600f9093529120549091508061333157604051631b44092560e11b815260040160405180910390fd5b85516020808801516040808a015160608b015160808c015160a08d01519351613360978a979096959101615a46565b6040516020818303038152906040528051906020012081146133955760405163354a450b60e21b815260040160405180910390fd5b60006133a48760000151613d10565b90508061347c578651604051631d2827a760e31b81526001600160401b0390911660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e9413d389060240160206040518083038186803b15801561341657600080fd5b505afa15801561342a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061344e91906153cf565b90508061347c57865160405163175dadad60e01b81526001600160401b039091166004820152602401610a99565b600088608001518260405160200161349e929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c905060006134c58a83613df2565b604080516060810182529788526020880196909652948601949094525092979650505050505050565b6000816001600160401b03163a111561353457821561351757506001600160401b03811661272a565b3a8260405163435e532d60e11b8152600401610a999291906158d8565b503a92915050565b6000806000631fe543e360e01b868560405160240161355c9291906159a2565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252600c805460ff60301b1916600160301b1790559086015160808701519192506135c09163ffffffff9091169083613e5d565b600c805460ff60301b191690559695505050505050565b600082156135f1576135ea858584613ea9565b90506135ff565b6135fc858584613fba565b90505b949350505050565b81156136f1576000818152600660205260409020546001600160601b03808516600160601b90920416101561364f57604051631e9acf1760e31b815260040160405180910390fd5b60008181526006602052604090208054849190600c90613680908490600160601b90046001600160601b0316615cd1565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555082600b600c8282829054906101000a90046001600160601b03166136c89190615c40565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550505050565b6000818152600660205260409020546001600160601b038085169116101561372c57604051631e9acf1760e31b815260040160405180910390fd5b600081815260066020526040812080548592906137539084906001600160601b0316615cd1565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555082600b60008282829054906101000a90046001600160601b03166136c89190615c40565b6000805b6011548110156137fc57826001600160a01b0316601182815481106137c6576137c6615de5565b6000918252602090912001546001600160a01b031614156137ea5750600192915050565b806137f481615d4d565b91505061379f565b50600092915050565b6000818152600560209081526040808320815160608101835281546001600160a01b0390811682526001830154168185015260028201805484518187028101870186528181528796879694959486019391929083018282801561389157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613873575b505050919092525050506000858152600660209081526040808320815160608101835290546001600160601b03808216808452600160601b8304909116948301859052600160c01b9091046001600160401b0316928201929092529096509094509192505b82604001515181101561396d57600460008460400151838151811061391d5761391d615de5565b6020908102919091018101516001600160a01b031682528181019290925260409081016000908120898252909252902080546001600160401b03191690558061396581615d4d565b9150506138f6565b50600085815260056020526040812080546001600160a01b031990811682556001820180549091169055906139a56002830182614fce565b50506000858152600660205260408120556139c16008866141a3565b50600a80548591906000906139e09084906001600160601b0316615cd1565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555082600a600c8282829054906101000a90046001600160601b0316613a289190615cd1565b92506101000a8154816001600160601b0302191690836001600160601b031602179055505050915091565b6040805160208082018790526001600160a01b03959095168183015260608101939093526001600160401b03919091166080808401919091528151808403909101815260a08301825280519084012060c083019490945260e0808301859052815180840390910181526101009092019052805191012091565b60408051602081019091526000815281613af5575060408051602081019091526000815261272a565b63125fa26760e31b613b078385615cf1565b6001600160e01b03191614613b2f57604051632923fee760e11b815260040160405180910390fd5b613b3c8260048186615bb7565b81019061102b91906153e8565b60607f92fd13387c7fe7befbc38d303d6468778fb9731bc4583f17d92989c6fcfdeaaa82604051602401613b8291511515815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915292915050565b600046613bc6816141af565b15613c435760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b158015613c0557600080fd5b505afa158015613c19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c3d91906153cf565b91505090565b4391505090565b600061102b83836141d2565b600061272a825490565b600061102b8383614221565b6001600160a01b038116331415613cbf5760405162461bcd60e51b815260206004820152601760248201527621b0b73737ba103a3930b739b332b9103a379039b2b63360491b6044820152606401610a99565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600046613d1c816141af565b15613de357610100836001600160401b0316613d36613bba565b613d409190615c95565b1180613d5c5750613d4f613bba565b836001600160401b031610155b15613d6a5750600092915050565b6040516315a03d4160e11b81526001600160401b0384166004820152606490632b407a82906024015b60206040518083038186803b158015613dab57600080fd5b505afa158015613dbf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102b91906153cf565b50506001600160401b03164090565b6000613e268360000151846020015185604001518660600151868860a001518960c001518a60e001518b610100015161424b565b60038360200151604051602001613e3e92919061598e565b60408051601f1981840301815291905280516020909101209392505050565b60005a611388811015613e6f57600080fd5b611388810390508460408204820311613e8757600080fd5b50823b613e9357600080fd5b60008083516020850160008789f1949350505050565b600080613eec6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061446792505050565b905060005a600c54613f0c908890600160581b900463ffffffff16615be1565b613f169190615c95565b613f209086615c76565b600c54909150600090613f4590600160781b900463ffffffff1664e8d4a51000615c76565b90508415613f9157600c548190606490600160b81b900460ff16613f698587615be1565b613f739190615c76565b613f7d9190615c62565b613f879190615be1565b935050505061102b565b600c548190606490613fad90600160b81b900460ff1682615c1b565b60ff16613f698587615be1565b600080613fc561452c565b905060008113613feb576040516321ea67b360e11b815260048101829052602401610a99565b600061402d6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061446792505050565b9050600082825a600c5461404f908b90600160581b900463ffffffff16615be1565b6140599190615c95565b6140639089615c76565b61406d9190615be1565b61407f90670de0b6b3a7640000615c76565b6140899190615c62565b600c549091506000906140b29063ffffffff600160981b8204811691600160781b900416615cac565b6140c79063ffffffff1664e8d4a51000615c76565b90506000846140de83670de0b6b3a7640000615c76565b6140e89190615c62565b90506000871561412957600c54829060649061410e90600160c01b900460ff1687615c76565b6141189190615c62565b6141229190615be1565b9050614169565b600c54829060649061414590600160c01b900460ff1682615c1b565b6141529060ff1687615c76565b61415c9190615c62565b6141669190615be1565b90505b6b033b2e3c9fd0803ce80000008111156141965760405163e80fa38160e01b815260040160405180910390fd5b9998505050505050505050565b600061102b83836145f7565b600061a4b18214806141c3575062066eed82145b8061272a57505062066eee1490565b60008181526001830160205260408120546142195750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561272a565b50600061272a565b600082600001828154811061423857614238615de5565b9060005260206000200154905092915050565b614254896146ea565b61429d5760405162461bcd60e51b815260206004820152601a6024820152797075626c6963206b6579206973206e6f74206f6e20637572766560301b6044820152606401610a99565b6142a6886146ea565b6142ea5760405162461bcd60e51b815260206004820152601560248201527467616d6d61206973206e6f74206f6e20637572766560581b6044820152606401610a99565b6142f3836146ea565b61433f5760405162461bcd60e51b815260206004820152601d60248201527f6347616d6d615769746e657373206973206e6f74206f6e2063757276650000006044820152606401610a99565b614348826146ea565b6143945760405162461bcd60e51b815260206004820152601c60248201527f73486173685769746e657373206973206e6f74206f6e206375727665000000006044820152606401610a99565b6143a0878a88876147ad565b6143e85760405162461bcd60e51b81526020600482015260196024820152786164647228632a706b2b732a6729213d5f755769746e65737360381b6044820152606401610a99565b60006143f48a876148d0565b90506000614407898b878b868989614934565b90506000614418838d8d8a86614a53565b9050808a146144595760405162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b210383937b7b360991b6044820152606401610a99565b505050505050505050505050565b600046614473816141af565b156144b257606c6001600160a01b031663c6f7de0e6040518163ffffffff1660e01b815260040160206040518083038186803b158015613dab57600080fd5b6144bb81614a93565b156137fc57600f602160991b016001600160a01b03166349948e0e84604051806080016040528060488152602001615e35604891396040516020016145019291906157a4565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613d9391906158ef565b600c5460035460408051633fabe5a360e21b81529051600093600160381b900463ffffffff169283151592859283926001600160a01b03169163feaf968c9160048083019260a0929190829003018186803b15801561458a57600080fd5b505afa15801561459e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145c29190615679565b5094509092508491505080156145e657506145dd8242615c95565b8463ffffffff16105b156135ff5750601054949350505050565b600081815260018301602052604081205480156146e057600061461b600183615c95565b855490915060009061462f90600190615c95565b905081811461469457600086600001828154811061464f5761464f615de5565b906000526020600020015490508087600001848154811061467257614672615de5565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806146a5576146a5615dcf565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061272a565b600091505061272a565b80516000906401000003d019116147385760405162461bcd60e51b8152602060048201526012602482015271696e76616c696420782d6f7264696e61746560701b6044820152606401610a99565b60208201516401000003d019116147865760405162461bcd60e51b8152602060048201526012602482015271696e76616c696420792d6f7264696e61746560701b6044820152606401610a99565b60208201516401000003d0199080096147a68360005b6020020151614acd565b1492915050565b60006001600160a01b0382166147f35760405162461bcd60e51b815260206004820152600b60248201526a626164207769746e65737360a81b6044820152606401610a99565b60208401516000906001161561480a57601c61480d565b601b5b9050600070014551231950b75fc4402da1732fc9bebe1985876000602002015109865170014551231950b75fc4402da1732fc9bebe19918203925060009190890987516040805160008082526020820180845287905260ff88169282019290925260608101929092526080820183905291925060019060a0016020604051602081039080840390855afa1580156148a8573d6000803e3d6000fd5b5050604051601f1901516001600160a01b039081169088161495505050505050949350505050565b6148d8614fec565b614905600184846040516020016148f19392919061582d565b604051602081830303815290604052614af1565b90505b614911816146ea565b61272a57805160408051602081019290925261492d91016148f1565b9050614908565b61493c614fec565b825186516401000003d019908190069106141561499b5760405162461bcd60e51b815260206004820152601e60248201527f706f696e747320696e2073756d206d7573742062652064697374696e637400006044820152606401610a99565b6149a6878988614b3f565b6149eb5760405162461bcd60e51b8152602060048201526016602482015275119a5c9cdd081b5d5b0818da1958dac819985a5b195960521b6044820152606401610a99565b6149f6848685614b3f565b614a3c5760405162461bcd60e51b815260206004820152601760248201527614d958dbdb99081b5d5b0818da1958dac819985a5b1959604a1b6044820152606401610a99565b614a47868484614c67565b98975050505050505050565b600060028686868587604051602001614a71969594939291906157d3565b60408051601f1981840301815291905280516020909101209695505050505050565b6000600a821480614aa557506101a482145b80614ab2575062aa37dc82145b80614abe575061210582145b8061272a57505062014a331490565b6000806401000003d01980848509840990506401000003d019600782089392505050565b614af9614fec565b614b0282614d2a565b8152614b17614b1282600061479c565b614d65565b602082018190526002900660011415611fa5576020810180516401000003d019039052919050565b600082614b7c5760405162461bcd60e51b815260206004820152600b60248201526a3d32b9379039b1b0b630b960a91b6044820152606401610a99565b83516020850151600090614b9290600290615d8f565b15614b9e57601c614ba1565b601b5b9050600070014551231950b75fc4402da1732fc9bebe198387096040805160008082526020820180845281905260ff86169282019290925260608101869052608081018390529192509060019060a0016020604051602081039080840390855afa158015614c13573d6000803e3d6000fd5b505050602060405103519050600086604051602001614c329190615792565b60408051601f1981840301815291905280516020909101206001600160a01b0392831692169190911498975050505050505050565b614c6f614fec565b835160208086015185519186015160009384938493614c9093909190614d85565b919450925090506401000003d019858209600114614cec5760405162461bcd60e51b815260206004820152601960248201527834b73b2d1036bab9ba1031329034b73b32b939b29037b3103d60391b6044820152606401610a99565b60405180604001604052806401000003d01980614d0b57614d0b615db9565b87860981526020016401000003d0198785099052979650505050505050565b805160208201205b6401000003d0198110611fa557604080516020808201939093528151808203840181529082019091528051910120614d32565b600061272a826002614d7e6401000003d0196001615be1565b901c614e65565b60008080600180826401000003d019896401000003d019038808905060006401000003d0198b6401000003d019038a0890506000614dc583838585614efc565b9098509050614dd688828e88614f20565b9098509050614de788828c87614f20565b90985090506000614dfa8d878b85614f20565b9098509050614e0b88828686614efc565b9098509050614e1c88828e89614f20565b9098509050818114614e51576401000003d019818a0998506401000003d01982890997506401000003d0198183099650614e55565b8196505b5050505050509450945094915050565b600080614e7061500a565b6020808252818101819052604082015260608101859052608081018490526401000003d01960a0820152614ea2615028565b60208160c0846005600019fa925082614ef25760405162461bcd60e51b81526020600482015260126024820152716269674d6f64457870206661696c7572652160701b6044820152606401610a99565b5195945050505050565b6000806401000003d0198487096401000003d0198487099097909650945050505050565b600080806401000003d019878509905060006401000003d01987876401000003d019030990506401000003d0198183086401000003d01986890990999098509650505050505050565b828054828255906000526020600020908101928215614fbe579160200282015b82811115614fbe57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614f89565b50614fca929150615046565b5090565b5080546000825590600052602060002090810190610aa29190615046565b60405180604001604052806002906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b5b80821115614fca5760008155600101615047565b8035611fa581615e11565b806040810183101561272a57600080fd5b600082601f83011261508857600080fd5b604051604081018181106001600160401b03821117156150aa576150aa615dfb565b80604052508083856040860111156150c157600080fd5b60005b60028110156150e35781358352602092830192909101906001016150c4565b509195945050505050565b8035611fa581615e26565b600060c0828403121561510b57600080fd5b615113615b3c565b905061511e8261520d565b815260208083013581830152615136604084016151f9565b6040830152615147606084016151f9565b6060830152608083013561515a81615e11565b608083015260a08301356001600160401b038082111561517957600080fd5b818501915085601f83011261518d57600080fd5b81358181111561519f5761519f615dfb565b6151b1601f8201601f19168501615b87565b915080825286848285010111156151c757600080fd5b80848401858401376000848284010152508060a085015250505092915050565b803561ffff81168114611fa557600080fd5b803563ffffffff81168114611fa557600080fd5b80356001600160401b0381168114611fa557600080fd5b803560ff81168114611fa557600080fd5b805169ffffffffffffffffffff81168114611fa557600080fd5b60006020828403121561526157600080fd5b813561102b81615e11565b6000806040838503121561527f57600080fd5b823561528a81615e11565b9150602083013561529a81615e11565b809150509250929050565b600080600080606085870312156152bb57600080fd5b84356152c681615e11565b93506020850135925060408501356001600160401b03808211156152e957600080fd5b818701915087601f8301126152fd57600080fd5b81358181111561530c57600080fd5b88602082850101111561531e57600080fd5b95989497505060200194505050565b60006040828403121561533f57600080fd5b61102b8383615066565b6000806060838503121561535c57600080fd5b6153668484615066565b91506153746040840161520d565b90509250929050565b60006040828403121561538f57600080fd5b61102b8383615077565b6000602082840312156153ab57600080fd5b815161102b81615e26565b6000602082840312156153c857600080fd5b5035919050565b6000602082840312156153e157600080fd5b5051919050565b6000602082840312156153fa57600080fd5b604051602081018181106001600160401b038211171561541c5761541c615dfb565b604052823561542a81615e26565b81529392505050565b60008060008385036101e081121561544a57600080fd5b6101a08082121561545a57600080fd5b615462615b64565b915061546e8787615077565b825261547d8760408801615077565b60208301526080860135604083015260a0860135606083015260c086013560808301526154ac60e0870161505b565b60a08301526101006154c088828901615077565b60c08401526154d3886101408901615077565b60e0840152610180870135908301529093508401356001600160401b038111156154fc57600080fd5b615508868287016150f9565b9250506155186101c085016150ee565b90509250925092565b60006020828403121561553357600080fd5b81356001600160401b0381111561554957600080fd5b820160c0818503121561102b57600080fd5b60006020828403121561556d57600080fd5b61102b826151e7565b60008060008060008060008060006101208a8c03121561559557600080fd5b61559e8a6151e7565b98506155ac60208b016151f9565b97506155ba60408b016151f9565b96506155c860608b016151f9565b955060808a013594506155dd60a08b016151f9565b93506155eb60c08b016151f9565b92506155f960e08b01615224565b91506156086101008b01615224565b90509295985092959850929598565b6000806040838503121561562a57600080fd5b82359150602083013561529a81615e11565b6000806040838503121561564f57600080fd5b50508035926020909101359150565b60006020828403121561567057600080fd5b61102b826151f9565b600080600080600060a0868803121561569157600080fd5b61569a86615235565b94506020860151935060408601519250606086015191506156bd60808701615235565b90509295509295909350565b600081518084526020808501945080840160005b838110156157025781516001600160a01b0316875295820195908201906001016156dd565b509495945050505050565b8060005b6002811015615730578151845260209384019390910190600101615711565b50505050565b600081518084526020808501945080840160005b838110156157025781518752958201959082019060010161574a565b6000815180845261577e816020860160208601615d21565b601f01601f19169290920160200192915050565b61579c818361570d565b604001919050565b600083516157b6818460208801615d21565b8351908301906157ca818360208801615d21565b01949350505050565b8681526157e3602082018761570d565b6157f0606082018661570d565b6157fd60a082018561570d565b61580a60e082018461570d565b60609190911b6001600160601b0319166101208201526101340195945050505050565b83815261583d602082018461570d565b606081019190915260800192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039290921682526001600160601b0316602082015260400190565b6040810161272a828461570d565b60208152600061102b6020830184615736565b9182526001600160401b0316602082015260400190565b60208152600061102b6020830184615766565b6020815260ff82511660208201526020820151604082015260018060a01b0360408301511660608201526000606083015160c0608084015261594760e08401826156c9565b60808501516001600160601b0390811660a0868101919091529095015190941660c0909301929092525090919050565b9182526001600160a01b0316602082015260400190565b8281526060810161102b602083018461570d565b8281526040602082015260006135ff6040830184615736565b86815285602082015261ffff85166040820152600063ffffffff808616606084015280851660808401525060c060a0830152614a4760c0830184615766565b878152602081018790526040810186905263ffffffff8581166060830152841660808201526001600160a01b03831660a082015260e060c0820181905260009061419690830184615766565b8781526001600160401b03871660208201526040810186905263ffffffff8581166060830152841660808201526001600160a01b03831660a082015260e060c0820181905260009061419690830184615766565b6001600160601b038681168252851660208201526001600160401b03841660408201526001600160a01b038316606082015260a060808201819052600090615ae4908301846156c9565b979650505050505050565b6000808335601e19843603018112615b0657600080fd5b8301803591506001600160401b03821115615b2057600080fd5b602001915036819003821315615b3557600080fd5b9250929050565b60405160c081016001600160401b0381118282101715615b5e57615b5e615dfb565b60405290565b60405161012081016001600160401b0381118282101715615b5e57615b5e615dfb565b604051601f8201601f191681016001600160401b0381118282101715615baf57615baf615dfb565b604052919050565b60008085851115615bc757600080fd5b83861115615bd457600080fd5b5050820193919092039150565b60008219821115615bf457615bf4615da3565b500190565b60006001600160401b038083168185168083038211156157ca576157ca615da3565b600060ff821660ff84168060ff03821115615c3857615c38615da3565b019392505050565b60006001600160601b038281168482168083038211156157ca576157ca615da3565b600082615c7157615c71615db9565b500490565b6000816000190483118215151615615c9057615c90615da3565b500290565b600082821015615ca757615ca7615da3565b500390565b600063ffffffff83811690831681811015615cc957615cc9615da3565b039392505050565b60006001600160601b0383811690831681811015615cc957615cc9615da3565b6001600160e01b03198135818116916004851015615d195780818660040360031b1b83161692505b505092915050565b60005b83811015615d3c578181015183820152602001615d24565b838111156157305750506000910152565b6000600019821415615d6157615d61615da3565b5060010190565b60006001600160401b0380831681811415615d8557615d85615da3565b6001019392505050565b600082615d9e57615d9e615db9565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610aa257600080fd5b8015158114610aa257600080fdfe307866666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666a164736f6c6343000806000a",
+ Bin: "0x60a06040523480156200001157600080fd5b506040516200602138038062006021833981016040819052620000349162000183565b33806000816200008b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be81620000d7565b50505060601b6001600160601b031916608052620001b5565b6001600160a01b038116331415620001325760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000082565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000602082840312156200019657600080fd5b81516001600160a01b0381168114620001ae57600080fd5b9392505050565b60805160601c615e46620001db6000396000818161055001526133cc0152615e466000f3fe60806040526004361061021c5760003560e01c80638402595e11610124578063b2a7cac5116100a6578063b2a7cac514610732578063bec4c08c14610752578063caf70c4a14610772578063cb63179714610792578063d98e620e146107b2578063da2f2610146107d2578063dac83d2914610831578063dc311dd314610851578063e72f6e3014610882578063ee9d2d38146108a2578063f2fde38b146108cf57600080fd5b80638402595e146105c757806386fe91c7146105e75780638da5cb5b1461060757806395b55cfc146106255780639b1c385e146106385780639d40a6fd14610658578063a21a23e414610690578063a4c0ed36146106a5578063a63e0bfb146106c5578063aa433aff146106e5578063aefb212f1461070557600080fd5b8063405b84fa116101ad578063405b84fa1461044e57806340d6bb821461046e57806341af6c871461049957806351cff8d9146104c95780635d06b4ab146104e957806364d51a2a14610509578063659827441461051e578063689c45171461053e57806372e9d5651461057257806379ba5097146105925780637a5a2aef146105a757600080fd5b806304104edb14610221578063043bd6ae14610243578063088070f51461026c57806308821d581461033a5780630ae095401461035a57806315c48b841461037a57806318e3dd27146103a25780631b6b6d23146103e15780632f622e6b1461040e578063301f42e91461042e575b600080fd5b34801561022d57600080fd5b5061024161023c36600461520c565b6108ef565b005b34801561024f57600080fd5b5061025960105481565b6040519081526020015b60405180910390f35b34801561027857600080fd5b50600c546102dd9061ffff81169063ffffffff62010000820481169160ff600160301b8204811692600160381b8304811692600160581b8104821692600160781b8204831692600160981b83041691600160b81b8104821691600160c01b9091041689565b6040805161ffff909a168a5263ffffffff98891660208b01529615159689019690965293861660608801529185166080870152841660a08601529290921660c084015260ff91821660e08401521661010082015261012001610263565b34801561034657600080fd5b506102416103553660046152ea565b610aa5565b34801561036657600080fd5b506102416103753660046155d4565b610c48565b34801561038657600080fd5b5061038f60c881565b60405161ffff9091168152602001610263565b3480156103ae57600080fd5b50600a546103c990600160601b90046001600160601b031681565b6040516001600160601b039091168152602001610263565b3480156103ed57600080fd5b50600254610401906001600160a01b031681565b604051610263919061580b565b34801561041a57600080fd5b5061024161042936600461520c565b610c90565b34801561043a57600080fd5b506103c96104493660046153f0565b610ddc565b34801561045a57600080fd5b506102416104693660046155d4565b611032565b34801561047a57600080fd5b506104846101f481565b60405163ffffffff9091168152602001610263565b3480156104a557600080fd5b506104b96104b4366004615373565b6113e6565b6040519015158152602001610263565b3480156104d557600080fd5b506102416104e436600461520c565b611587565b3480156104f557600080fd5b5061024161050436600461520c565b611715565b34801561051557600080fd5b5061038f606481565b34801561052a57600080fd5b50610241610539366004615229565b6117cc565b34801561054a57600080fd5b506104017f000000000000000000000000000000000000000000000000000000000000000081565b34801561057e57600080fd5b50600354610401906001600160a01b031681565b34801561059e57600080fd5b5061024161182c565b3480156105b357600080fd5b506102416105c2366004615306565b6118d6565b3480156105d357600080fd5b506102416105e236600461520c565b611a06565b3480156105f357600080fd5b50600a546103c9906001600160601b031681565b34801561061357600080fd5b506000546001600160a01b0316610401565b610241610633366004615373565b611b18565b34801561064457600080fd5b506102596106533660046154de565b611c3c565b34801561066457600080fd5b50600754610678906001600160401b031681565b6040516001600160401b039091168152602001610263565b34801561069c57600080fd5b50610259611faa565b3480156106b157600080fd5b506102416106c0366004615262565b6121d4565b3480156106d157600080fd5b506102416106e0366004615533565b612350565b3480156106f157600080fd5b50610241610700366004615373565b6125cd565b34801561071157600080fd5b506107256107203660046155f9565b61262d565b6040516102639190615882565b34801561073e57600080fd5b5061024161074d366004615373565b612730565b34801561075e57600080fd5b5061024161076d3660046155d4565b612831565b34801561077e57600080fd5b5061025961078d36600461533a565b61294b565b34801561079e57600080fd5b506102416107ad3660046155d4565b61297b565b3480156107be57600080fd5b506102596107cd366004615373565b612bfb565b3480156107de57600080fd5b506108126107ed366004615373565b600d6020526000908152604090205460ff81169061010090046001600160401b031682565b6040805192151583526001600160401b03909116602083015201610263565b34801561083d57600080fd5b5061024161084c3660046155d4565b612c1c565b34801561085d57600080fd5b5061087161086c366004615373565b612cb0565b604051610263959493929190615a57565b34801561088e57600080fd5b5061024161089d36600461520c565b612dab565b3480156108ae57600080fd5b506102596108bd366004615373565b600f6020526000908152604090205481565b3480156108db57600080fd5b506102416108ea36600461520c565b612f8c565b6108f7612f9d565b60115460005b81811015610a7d57826001600160a01b03166011828154811061092257610922615da2565b6000918252602090912001546001600160a01b03161415610a6b57601161094a600184615c52565b8154811061095a5761095a615da2565b600091825260209091200154601180546001600160a01b03909216918390811061098657610986615da2565b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790558260116109bd600185615c52565b815481106109cd576109cd615da2565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506011805480610a0c57610a0c615d8c565b600082815260209020810160001990810180546001600160a01b03191690550190556040517ff80a1a97fd42251f3c33cda98635e7399253033a6774fe37cd3f650b5282af3790610a5e90859061580b565b60405180910390a1505050565b80610a7581615d0a565b9150506108fd565b5081604051635428d44960e01b8152600401610a99919061580b565b60405180910390fd5b50565b610aad612f9d565b604080518082018252600091610adc91908490600290839083908082843760009201919091525061294b915050565b6000818152600d602090815260409182902082518084019093525460ff811615158084526101009091046001600160401b03169183019190915291925090610b3a57604051631dfd6e1360e21b815260048101839052602401610a99565b6000828152600d6020526040812080546001600160481b03191690555b600e54811015610c125782600e8281548110610b7557610b75615da2565b90600052602060002001541415610c0057600e805460009190610b9a90600190615c52565b81548110610baa57610baa615da2565b9060005260206000200154905080600e8381548110610bcb57610bcb615da2565b600091825260209091200155600e805480610be857610be8615d8c565b60019003818190600052602060002001600090559055505b80610c0a81615d0a565b915050610b57565b507f9b6868e0eb737bcd72205360baa6bfd0ba4e4819a33ade2db384e8a8025639a5828260200151604051610a5e929190615895565b81610c5281612ff2565b610c5a613053565b610c63836113e6565b15610c8157604051631685ecdd60e31b815260040160405180910390fd5b610c8b838361307e565b505050565b610c98613053565b610ca0612f9d565b600b54600160601b90046001600160601b0316610cd057604051631e9acf1760e31b815260040160405180910390fd5b600b8054600160601b90046001600160601b0316908190600c610cf38380615c8e565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555080600a600c8282829054906101000a90046001600160601b0316610d3b9190615c8e565b92506101000a8154816001600160601b0302191690836001600160601b031602179055506000826001600160a01b0316826001600160601b031660405160006040518083038185875af1925050503d8060008114610db5576040519150601f19603f3d011682016040523d82523d6000602084013e610dba565b606091505b5050905080610c8b5760405163950b247960e01b815260040160405180910390fd5b6000610de6613053565b60005a90506000610df78686613232565b90506000610e0d858360000151602001516134ee565b90506000866060015163ffffffff166001600160401b03811115610e3357610e33615db8565b604051908082528060200260200182016040528015610e5c578160200160208202803683370190505b50905060005b876060015163ffffffff16811015610edc57836040015181604051602001610e94929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c828281518110610ebf57610ebf615da2565b602090810291909101015280610ed481615d0a565b915050610e62565b50602080840180516000908152600f9092526040822082905551610f0190898461353c565b602089810151600090815260069091526040902054909150610f3490600160c01b90046001600160401b03166001615bb6565b6020808a0151600090815260069091526040812080546001600160401b0393909316600160c01b026001600160c01b039093169290921790915560a08901518051610f8190600190615c52565b81518110610f9157610f91615da2565b60209101015160f81c60011490506000610fad8786848c6135d7565b9050610fbe81838c60200151613607565b6020808b0151878201516040808a015181519081526001600160601b03861694810194909452861515908401528b1515606084015290917f6c6b5394380e16e41988d8383648010de6f5c2e4814803be5de1c6b1c852db559060800160405180910390a396505050505050505b9392505050565b61103a613053565b61104381613758565b6110625780604051635428d44960e01b8152600401610a99919061580b565b60008060008061107186612cb0565b945094505093509350336001600160a01b0316826001600160a01b0316146110d45760405162461bcd60e51b81526020600482015260166024820152752737ba1039bab139b1b934b83a34b7b71037bbb732b960511b6044820152606401610a99565b6110dd866113e6565b156111235760405162461bcd60e51b815260206004820152601660248201527550656e64696e6720726571756573742065786973747360501b6044820152606401610a99565b6040805160c0810182526001815260208082018990526001600160a01b03851682840152606082018490526001600160601b038088166080840152861660a083015291519091600091611178918491016158bf565b6040516020818303038152906040529050611192886137c2565b505060405163ce3f471960e01b81526001600160a01b0388169063ce3f4719906001600160601b038816906111cb9085906004016158ac565b6000604051808303818588803b1580156111e457600080fd5b505af11580156111f8573d6000803e3d6000fd5b50506002546001600160a01b031615801593509150611221905057506001600160601b03861615155b156112eb5760025460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611258908a908a90600401615852565b602060405180830381600087803b15801561127257600080fd5b505af1158015611286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112aa9190615356565b6112eb5760405162461bcd60e51b8152602060048201526012602482015271696e73756666696369656e742066756e647360701b6044820152606401610a99565b600c805460ff60301b1916600160301b17905560005b83518110156113945783818151811061131c5761131c615da2565b60200260200101516001600160a01b0316638ea98117896040518263ffffffff1660e01b815260040161134f919061580b565b600060405180830381600087803b15801561136957600080fd5b505af115801561137d573d6000803e3d6000fd5b50505050808061138c90615d0a565b915050611301565b50600c805460ff60301b191690556040517fd63ca8cb945956747ee69bfdc3ea754c24a4caf7418db70e46052f7850be4187906113d49089908b9061581f565b60405180910390a15050505050505050565b6000818152600560209081526040808320815160608101835281546001600160a01b039081168252600183015416818501526002820180548451818702810187018652818152879693958601939092919083018282801561147057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611452575b505050505081525050905060005b81604001515181101561157d5760005b600e5481101561156a576000611533600e83815481106114b0576114b0615da2565b9060005260206000200154856040015185815181106114d1576114d1615da2565b60200260200101518860046000896040015189815181106114f4576114f4615da2565b6020908102919091018101516001600160a01b0316825281810192909252604090810160009081208d82529092529020546001600160401b0316613a10565b506000818152600f6020526040902054909150156115575750600195945050505050565b508061156281615d0a565b91505061148e565b508061157581615d0a565b91505061147e565b5060009392505050565b61158f613053565b611597612f9d565b6002546001600160a01b03166115c05760405163c1f0c0a160e01b815260040160405180910390fd5b600b546001600160601b03166115e957604051631e9acf1760e31b815260040160405180910390fd5b600b80546001600160601b031690819060006116058380615c8e565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555080600a60008282829054906101000a90046001600160601b031661164d9190615c8e565b82546001600160601b039182166101009390930a92830291909202199091161790555060025460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906116a29085908590600401615852565b602060405180830381600087803b1580156116bc57600080fd5b505af11580156116d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f49190615356565b61171157604051631e9acf1760e31b815260040160405180910390fd5b5050565b61171d612f9d565b61172681613758565b15611746578060405163ac8a27ef60e01b8152600401610a99919061580b565b601180546001810182556000919091527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c680180546001600160a01b0319166001600160a01b0383161790556040517fb7cabbfc11e66731fc77de0444614282023bcbd41d16781c753a431d0af01625906117c190839061580b565b60405180910390a150565b6117d4612f9d565b6002546001600160a01b0316156117fe57604051631688c53760e11b815260040160405180910390fd5b600280546001600160a01b039384166001600160a01b03199182161790915560038054929093169116179055565b6001546001600160a01b0316331461187f5760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b6044820152606401610a99565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6118de612f9d565b60408051808201825260009161190d91908590600290839083908082843760009201919091525061294b915050565b6000818152600d602052604090205490915060ff161561194357604051634a0b8fa760e01b815260048101829052602401610a99565b60408051808201825260018082526001600160401b0385811660208085019182526000878152600d9091528581209451855492516001600160481b031990931690151568ffffffffffffffff00191617610100929093169190910291909117909255600e805491820181559091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd01829055517f9b911b2c240bfbef3b6a8f7ed6ee321d1258bb2a3fe6becab52ac1cd3210afd390610a5e9083908590615895565b611a0e612f9d565b600a544790600160601b90046001600160601b031681811115611a4e576040516354ced18160e11b81526004810182905260248101839052604401610a99565b81811015610c8b576000611a628284615c52565b90506000846001600160a01b03168260405160006040518083038185875af1925050503d8060008114611ab1576040519150601f19603f3d011682016040523d82523d6000602084013e611ab6565b606091505b5050905080611ad85760405163950b247960e01b815260040160405180910390fd5b7f4aed7c8eed0496c8c19ea2681fcca25741c1602342e38b045d9f1e8e905d2e9c8583604051611b0992919061581f565b60405180910390a15050505050565b611b20613053565b6000818152600560205260409020546001600160a01b0316611b5557604051630fb532db60e11b815260040160405180910390fd5b60008181526006602052604090208054600160601b90046001600160601b0316903490600c611b848385615bfd565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555034600a600c8282829054906101000a90046001600160601b0316611bcc9190615bfd565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550817f7603b205d03651ee812f803fccde89f1012e545a9c99f0abfea9cedd0fd8e902823484611c1f9190615b9e565b604080519283526020830191909152015b60405180910390a25050565b6000611c46613053565b6020808301356000908152600590915260409020546001600160a01b0316611c8157604051630fb532db60e11b815260040160405180910390fd5b3360009081526004602090815260408083208583013584529091529020546001600160401b031680611cce578260200135336040516379bfd40160e01b8152600401610a99929190615934565b600c5461ffff16611ce56060850160408601615518565b61ffff161080611d08575060c8611d026060850160408601615518565b61ffff16115b15611d4e57611d1d6060840160408501615518565b600c5460405163539c34bb60e11b815261ffff92831660048201529116602482015260c86044820152606401610a99565b600c5462010000900463ffffffff16611d6d608085016060860161561b565b63ffffffff161115611dbd57611d89608084016060850161561b565b600c54604051637aebf00f60e11b815263ffffffff9283166004820152620100009091049091166024820152604401610a99565b6101f4611dd060a085016080860161561b565b63ffffffff161115611e1657611dec60a084016080850161561b565b6040516311ce1afb60e21b815263ffffffff90911660048201526101f46024820152604401610a99565b6000611e23826001615bb6565b9050600080611e39863533602089013586613a10565b90925090506000611e55611e5060a0890189615aac565b613a89565b90506000611e6282613b06565b905083611e6d613b77565b60208a0135611e8260808c0160608d0161561b565b611e9260a08d0160808e0161561b565b3386604051602001611eaa97969594939291906159b7565b60405160208183030381529060405280519060200120600f600086815260200190815260200160002081905550336001600160a01b0316886020013589600001357feb0e3652e0f44f417695e6e90f2f42c99b65cd7169074c5a654b16b9748c3a4e87878d6040016020810190611f219190615518565b8e6060016020810190611f34919061561b565b8f6080016020810190611f47919061561b565b89604051611f5a96959493929190615978565b60405180910390a45050336000908152600460209081526040808320898301358452909152902080546001600160401b0319166001600160401b039490941693909317909255925050505b919050565b6000611fb4613053565b600033611fc2600143615c52565b600754604051606093841b6001600160601b03199081166020830152924060348201523090931b909116605483015260c01b6001600160c01b031916606882015260700160408051601f198184030181529190528051602090910120600780549192506001600160401b0390911690600061203c83615d25565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550506000806001600160401b0381111561207b5761207b615db8565b6040519080825280602002602001820160405280156120a4578160200160208202803683370190505b506040805160608082018352600080835260208084018281528486018381528984526006835286842095518654925191516001600160601b039182166001600160c01b031990941693909317600160601b9190921602176001600160c01b0316600160c01b6001600160401b039092169190910217909355835191820184523382528183018181528285018681528883526005855294909120825181546001600160a01b03199081166001600160a01b0392831617835592516001830180549094169116179091559251805194955090936121859260028501920190614f26565b5061219591506008905083613c07565b50817f1d3015d7ba850fa198dc7b1a3f5d42779313a681035f77c8c03764c61005518d336040516121c6919061580b565b60405180910390a250905090565b6121dc613053565b6002546001600160a01b03163314612207576040516344b0e3c360e01b815260040160405180910390fd5b6020811461222857604051638129bbcd60e01b815260040160405180910390fd5b600061223682840184615373565b6000818152600560205260409020549091506001600160a01b031661226e57604051630fb532db60e11b815260040160405180910390fd5b600081815260066020526040812080546001600160601b0316918691906122958385615bfd565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555084600a60008282829054906101000a90046001600160601b03166122dd9190615bfd565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550817f1ced9348ff549fceab2ac57cd3a9de38edaaab274b725ee82c23e8fc8c4eec7a8287846123309190615b9e565b6040805192835260208301919091520160405180910390a2505050505050565b612358612f9d565b60c861ffff8a1611156123925760405163539c34bb60e11b815261ffff8a1660048201819052602482015260c86044820152606401610a99565b600085136123b6576040516321ea67b360e11b815260048101869052602401610a99565b60008463ffffffff161180156123d857508363ffffffff168363ffffffff1610155b15612406576040516313c06e5960e11b815263ffffffff808516600483015285166024820152604401610a99565b604080516101208101825261ffff8b1680825263ffffffff808c16602084018190526000848601528b8216606085018190528b8316608086018190528a841660a08701819052938a1660c0870181905260ff808b1660e08901819052908a16610100909801889052600c8054600160c01b90990260ff60c01b19600160b81b9093029290921661ffff60b81b19600160981b90940263ffffffff60981b19600160781b9099029890981667ffffffffffffffff60781b19600160581b90960263ffffffff60581b19600160381b9098029790971668ffffffffffffffffff60301b196201000090990265ffffffffffff19909c16909a179a909a1796909616979097179390931791909116959095179290921793909316929092179190911790556010869055517f2c6b6b12413678366b05b145c5f00745bdd00e739131ab5de82484a50c9d78b6906125ba908b908b908b908b908b908b908b908b908b9061ffff99909916895263ffffffff97881660208a0152958716604089015293861660608801526080870192909252841660a086015290921660c084015260ff91821660e0840152166101008201526101200190565b60405180910390a1505050505050505050565b6125d5612f9d565b6000818152600560205260409020546001600160a01b031661260a57604051630fb532db60e11b815260040160405180910390fd5b600081815260056020526040902054610aa29082906001600160a01b031661307e565b6060600061263b6008613c13565b905080841061265d57604051631390f2a160e01b815260040160405180910390fd5b60006126698486615b9e565b905081811180612677575083155b6126815780612683565b815b905060006126918683615c52565b6001600160401b038111156126a8576126a8615db8565b6040519080825280602002602001820160405280156126d1578160200160208202803683370190505b50905060005b8151811015612724576126f56126ed8883615b9e565b600890613c1d565b82828151811061270757612707615da2565b60209081029190910101528061271c81615d0a565b9150506126d7565b50925050505b92915050565b612738613053565b6000818152600560205260409020546001600160a01b031661276d57604051630fb532db60e11b815260040160405180910390fd5b6000818152600560205260409020600101546001600160a01b031633146127c4576000818152600560205260409081902060010154905163d084e97560e01b8152610a99916001600160a01b03169060040161580b565b6000818152600560205260409081902080546001600160a01b031980821633908117845560019093018054909116905591516001600160a01b039092169183917fd4114ab6e9af9f597c52041f32d62dc57c5c4e4c0d4427006069635e216c938691611c30918591615838565b8161283b81612ff2565b612843613053565b60008381526005602052604090206002015460641415612876576040516305a48e0f60e01b815260040160405180910390fd5b6001600160a01b03821660009081526004602090815260408083208684529091529020546001600160401b0316156128ad57505050565b6001600160a01b0382166000818152600460209081526040808320878452825280832080546001600160401b031916600190811790915560058352818420600201805491820181558452919092200180546001600160a01b0319169092179091555183907f1e980d04aa7648e205713e5e8ea3808672ac163d10936d36f91b2c88ac1575e19061293e90859061580b565b60405180910390a2505050565b60008160405160200161295e9190615874565b604051602081830303815290604052805190602001209050919050565b8161298581612ff2565b61298d613053565b612996836113e6565b156129b457604051631685ecdd60e31b815260040160405180910390fd5b6001600160a01b03821660009081526004602090815260408083208684529091529020546001600160401b0316612a025782826040516379bfd40160e01b8152600401610a99929190615934565b600083815260056020908152604080832060020180548251818502810185019093528083529192909190830182828015612a6557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612a47575b50505050509050600060018251612a7c9190615c52565b905060005b8251811015612b8857846001600160a01b0316838281518110612aa657612aa6615da2565b60200260200101516001600160a01b03161415612b76576000838381518110612ad157612ad1615da2565b6020026020010151905080600560008981526020019081526020016000206002018381548110612b0357612b03615da2565b600091825260208083209190910180546001600160a01b0319166001600160a01b039490941693909317909255888152600590915260409020600201805480612b4e57612b4e615d8c565b600082815260209020810160001990810180546001600160a01b031916905501905550612b88565b80612b8081615d0a565b915050612a81565b506001600160a01b03841660009081526004602090815260408083208884529091529081902080546001600160401b03191690555185907f32158c6058347c1601b2d12bc696ac6901d8a9a9aa3ba10c27ab0a983e8425a790612bec90879061580b565b60405180910390a25050505050565b600e8181548110612c0b57600080fd5b600091825260209091200154905081565b81612c2681612ff2565b612c2e613053565b6000838152600560205260409020600101546001600160a01b03838116911614610c8b576000838152600560205260409081902060010180546001600160a01b0319166001600160a01b0385161790555183907f21a4dad170a6bf476c31bbcf4a16628295b0e450672eec25d7c93308e05344a19061293e9033908690615838565b6000818152600560205260408120548190819081906060906001600160a01b0316612cee57604051630fb532db60e11b815260040160405180910390fd5b60008681526006602090815260408083205460058352928190208054600290910180548351818602810186019094528084526001600160601b0380871696600160601b810490911695600160c01b9091046001600160401b0316946001600160a01b0390941693918391830182828015612d9157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612d73575b505050505090509450945094509450945091939590929450565b612db3612f9d565b6002546001600160a01b0316612ddc5760405163c1f0c0a160e01b815260040160405180910390fd5b6002546040516370a0823160e01b81526000916001600160a01b0316906370a0823190612e0d90309060040161580b565b60206040518083038186803b158015612e2557600080fd5b505afa158015612e39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5d919061538c565b600a549091506001600160601b031681811115612e97576040516354ced18160e11b81526004810182905260248101839052604401610a99565b81811015610c8b576000612eab8284615c52565b60025460405163a9059cbb60e01b81529192506001600160a01b03169063a9059cbb90612ede908790859060040161581f565b602060405180830381600087803b158015612ef857600080fd5b505af1158015612f0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f309190615356565b612f4d57604051631f01ff1360e21b815260040160405180910390fd5b7f59bfc682b673f8cbf945f1e454df9334834abf7dfe7f92237ca29ecb9b4366008482604051612f7e92919061581f565b60405180910390a150505050565b612f94612f9d565b610aa281613c29565b6000546001600160a01b03163314612ff05760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b6044820152606401610a99565b565b6000818152600560205260409020546001600160a01b03168061302857604051630fb532db60e11b815260040160405180910390fd5b336001600160a01b038216146117115780604051636c51fda960e11b8152600401610a99919061580b565b600c54600160301b900460ff1615612ff05760405163769dd35360e11b815260040160405180910390fd5b60008061308a846137c2565b60025491935091506001600160a01b0316158015906130b157506001600160601b03821615155b156131605760025460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906130f19086906001600160601b0387169060040161581f565b602060405180830381600087803b15801561310b57600080fd5b505af115801561311f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131439190615356565b61316057604051631e9acf1760e31b815260040160405180910390fd5b6000836001600160a01b0316826001600160601b031660405160006040518083038185875af1925050503d80600081146131b6576040519150601f19603f3d011682016040523d82523d6000602084013e6131bb565b606091505b50509050806131dd5760405163950b247960e01b815260040160405180910390fd5b604080516001600160a01b03861681526001600160601b03808616602083015284169181019190915285907f8c74ce8b8cf87f5eb001275c8be27eb34ea2b62bfab6814fcc62192bb63e81c490606001612bec565b6040805160a0810182526000606082018181526080830182905282526020820181905291810191909152600061326b846000015161294b565b6000818152600d602090815260409182902082518084019093525460ff811615158084526101009091046001600160401b031691830191909152919250906132c957604051631dfd6e1360e21b815260048101839052602401610a99565b60008286608001516040516020016132eb929190918252602082015260400190565b60408051601f1981840301815291815281516020928301206000818152600f9093529120549091508061333157604051631b44092560e11b815260040160405180910390fd5b85516020808801516040808a015160608b015160808c015160a08d01519351613360978a979096959101615a03565b6040516020818303038152906040528051906020012081146133955760405163354a450b60e21b815260040160405180910390fd5b60006133a48760000151613ccd565b90508061347c578651604051631d2827a760e31b81526001600160401b0390911660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e9413d389060240160206040518083038186803b15801561341657600080fd5b505afa15801561342a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061344e919061538c565b90508061347c57865160405163175dadad60e01b81526001600160401b039091166004820152602401610a99565b600088608001518260405160200161349e929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c905060006134c58a83613daf565b604080516060810182529788526020880196909652948601949094525092979650505050505050565b6000816001600160401b03163a111561353457821561351757506001600160401b03811661272a565b3a8260405163435e532d60e11b8152600401610a99929190615895565b503a92915050565b6000806000631fe543e360e01b868560405160240161355c92919061595f565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252600c805460ff60301b1916600160301b1790559086015160808701519192506135c09163ffffffff9091169083613e1a565b600c805460ff60301b191690559695505050505050565b600082156135f1576135ea858584613e66565b90506135ff565b6135fc858584613f77565b90505b949350505050565b81156136d4576000818152600660205260409020546001600160601b03600160601b909104811690841681101561365157604051631e9acf1760e31b815260040160405180910390fd5b61365b8482615c8e565b60008381526006602052604090208054600160601b600160c01b031916600160601b6001600160601b03938416810291909117909155600b805487939192600c926136aa928692900416615bfd565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555050505050565b6000818152600660205260409020546001600160601b0390811690841681101561371157604051631e9acf1760e31b815260040160405180910390fd5b61371b8482615c8e565b600083815260066020526040812080546001600160601b0319166001600160601b03938416179055600b805487939192916136aa91859116615bfd565b6000805b6011548110156137b957826001600160a01b03166011828154811061378357613783615da2565b6000918252602090912001546001600160a01b031614156137a75750600192915050565b806137b181615d0a565b91505061375c565b50600092915050565b6000818152600560209081526040808320815160608101835281546001600160a01b0390811682526001830154168185015260028201805484518187028101870186528181528796879694959486019391929083018282801561384e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613830575b505050919092525050506000858152600660209081526040808320815160608101835290546001600160601b03808216808452600160601b8304909116948301859052600160c01b9091046001600160401b0316928201929092529096509094509192505b82604001515181101561392a5760046000846040015183815181106138da576138da615da2565b6020908102919091018101516001600160a01b031682528181019290925260409081016000908120898252909252902080546001600160401b03191690558061392281615d0a565b9150506138b3565b50600085815260056020526040812080546001600160a01b031990811682556001820180549091169055906139626002830182614f8b565b505060008581526006602052604081205561397e600886614160565b50600a805485919060009061399d9084906001600160601b0316615c8e565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555082600a600c8282829054906101000a90046001600160601b03166139e59190615c8e565b92506101000a8154816001600160601b0302191690836001600160601b031602179055505050915091565b6040805160208082018790526001600160a01b03959095168183015260608101939093526001600160401b03919091166080808401919091528151808403909101815260a08301825280519084012060c083019490945260e0808301859052815180840390910181526101009092019052805191012091565b60408051602081019091526000815281613ab2575060408051602081019091526000815261272a565b63125fa26760e31b613ac48385615cae565b6001600160e01b03191614613aec57604051632923fee760e11b815260040160405180910390fd5b613af98260048186615b74565b81019061102b91906153a5565b60607f92fd13387c7fe7befbc38d303d6468778fb9731bc4583f17d92989c6fcfdeaaa82604051602401613b3f91511515815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915292915050565b600046613b838161416c565b15613c005760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b158015613bc257600080fd5b505afa158015613bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bfa919061538c565b91505090565b4391505090565b600061102b838361418f565b600061272a825490565b600061102b83836141de565b6001600160a01b038116331415613c7c5760405162461bcd60e51b815260206004820152601760248201527621b0b73737ba103a3930b739b332b9103a379039b2b63360491b6044820152606401610a99565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600046613cd98161416c565b15613da057610100836001600160401b0316613cf3613b77565b613cfd9190615c52565b1180613d195750613d0c613b77565b836001600160401b031610155b15613d275750600092915050565b6040516315a03d4160e11b81526001600160401b0384166004820152606490632b407a82906024015b60206040518083038186803b158015613d6857600080fd5b505afa158015613d7c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102b919061538c565b50506001600160401b03164090565b6000613de38360000151846020015185604001518660600151868860a001518960c001518a60e001518b6101000151614208565b60038360200151604051602001613dfb92919061594b565b60408051601f1981840301815291905280516020909101209392505050565b60005a611388811015613e2c57600080fd5b611388810390508460408204820311613e4457600080fd5b50823b613e5057600080fd5b60008083516020850160008789f1949350505050565b600080613ea96000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061442492505050565b905060005a600c54613ec9908890600160581b900463ffffffff16615b9e565b613ed39190615c52565b613edd9086615c33565b600c54909150600090613f0290600160781b900463ffffffff1664e8d4a51000615c33565b90508415613f4e57600c548190606490600160b81b900460ff16613f268587615b9e565b613f309190615c33565b613f3a9190615c1f565b613f449190615b9e565b935050505061102b565b600c548190606490613f6a90600160b81b900460ff1682615bd8565b60ff16613f268587615b9e565b600080613f826144e9565b905060008113613fa8576040516321ea67b360e11b815260048101829052602401610a99565b6000613fea6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061442492505050565b9050600082825a600c5461400c908b90600160581b900463ffffffff16615b9e565b6140169190615c52565b6140209089615c33565b61402a9190615b9e565b61403c90670de0b6b3a7640000615c33565b6140469190615c1f565b600c5490915060009061406f9063ffffffff600160981b8204811691600160781b900416615c69565b6140849063ffffffff1664e8d4a51000615c33565b905060008461409b83670de0b6b3a7640000615c33565b6140a59190615c1f565b9050600087156140e657600c5482906064906140cb90600160c01b900460ff1687615c33565b6140d59190615c1f565b6140df9190615b9e565b9050614126565b600c54829060649061410290600160c01b900460ff1682615bd8565b61410f9060ff1687615c33565b6141199190615c1f565b6141239190615b9e565b90505b6b033b2e3c9fd0803ce80000008111156141535760405163e80fa38160e01b815260040160405180910390fd5b9998505050505050505050565b600061102b83836145b4565b600061a4b1821480614180575062066eed82145b8061272a57505062066eee1490565b60008181526001830160205260408120546141d65750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561272a565b50600061272a565b60008260000182815481106141f5576141f5615da2565b9060005260206000200154905092915050565b614211896146a7565b61425a5760405162461bcd60e51b815260206004820152601a6024820152797075626c6963206b6579206973206e6f74206f6e20637572766560301b6044820152606401610a99565b614263886146a7565b6142a75760405162461bcd60e51b815260206004820152601560248201527467616d6d61206973206e6f74206f6e20637572766560581b6044820152606401610a99565b6142b0836146a7565b6142fc5760405162461bcd60e51b815260206004820152601d60248201527f6347616d6d615769746e657373206973206e6f74206f6e2063757276650000006044820152606401610a99565b614305826146a7565b6143515760405162461bcd60e51b815260206004820152601c60248201527f73486173685769746e657373206973206e6f74206f6e206375727665000000006044820152606401610a99565b61435d878a888761476a565b6143a55760405162461bcd60e51b81526020600482015260196024820152786164647228632a706b2b732a6729213d5f755769746e65737360381b6044820152606401610a99565b60006143b18a8761488d565b905060006143c4898b878b8689896148f1565b905060006143d5838d8d8a86614a10565b9050808a146144165760405162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b210383937b7b360991b6044820152606401610a99565b505050505050505050505050565b6000466144308161416c565b1561446f57606c6001600160a01b031663c6f7de0e6040518163ffffffff1660e01b815260040160206040518083038186803b158015613d6857600080fd5b61447881614a50565b156137b957600f602160991b016001600160a01b03166349948e0e84604051806080016040528060488152602001615df2604891396040516020016144be929190615761565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613d5091906158ac565b600c5460035460408051633fabe5a360e21b81529051600093600160381b900463ffffffff169283151592859283926001600160a01b03169163feaf968c9160048083019260a0929190829003018186803b15801561454757600080fd5b505afa15801561455b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061457f9190615636565b5094509092508491505080156145a3575061459a8242615c52565b8463ffffffff16105b156135ff5750601054949350505050565b6000818152600183016020526040812054801561469d5760006145d8600183615c52565b85549091506000906145ec90600190615c52565b905081811461465157600086600001828154811061460c5761460c615da2565b906000526020600020015490508087600001848154811061462f5761462f615da2565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061466257614662615d8c565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061272a565b600091505061272a565b80516000906401000003d019116146f55760405162461bcd60e51b8152602060048201526012602482015271696e76616c696420782d6f7264696e61746560701b6044820152606401610a99565b60208201516401000003d019116147435760405162461bcd60e51b8152602060048201526012602482015271696e76616c696420792d6f7264696e61746560701b6044820152606401610a99565b60208201516401000003d0199080096147638360005b6020020151614a8a565b1492915050565b60006001600160a01b0382166147b05760405162461bcd60e51b815260206004820152600b60248201526a626164207769746e65737360a81b6044820152606401610a99565b6020840151600090600116156147c757601c6147ca565b601b5b9050600070014551231950b75fc4402da1732fc9bebe1985876000602002015109865170014551231950b75fc4402da1732fc9bebe19918203925060009190890987516040805160008082526020820180845287905260ff88169282019290925260608101929092526080820183905291925060019060a0016020604051602081039080840390855afa158015614865573d6000803e3d6000fd5b5050604051601f1901516001600160a01b039081169088161495505050505050949350505050565b614895614fa9565b6148c2600184846040516020016148ae939291906157ea565b604051602081830303815290604052614aae565b90505b6148ce816146a7565b61272a5780516040805160208101929092526148ea91016148ae565b90506148c5565b6148f9614fa9565b825186516401000003d01990819006910614156149585760405162461bcd60e51b815260206004820152601e60248201527f706f696e747320696e2073756d206d7573742062652064697374696e637400006044820152606401610a99565b614963878988614afc565b6149a85760405162461bcd60e51b8152602060048201526016602482015275119a5c9cdd081b5d5b0818da1958dac819985a5b195960521b6044820152606401610a99565b6149b3848685614afc565b6149f95760405162461bcd60e51b815260206004820152601760248201527614d958dbdb99081b5d5b0818da1958dac819985a5b1959604a1b6044820152606401610a99565b614a04868484614c24565b98975050505050505050565b600060028686868587604051602001614a2e96959493929190615790565b60408051601f1981840301815291905280516020909101209695505050505050565b6000600a821480614a6257506101a482145b80614a6f575062aa37dc82145b80614a7b575061210582145b8061272a57505062014a331490565b6000806401000003d01980848509840990506401000003d019600782089392505050565b614ab6614fa9565b614abf82614ce7565b8152614ad4614acf826000614759565b614d22565b602082018190526002900660011415611fa5576020810180516401000003d019039052919050565b600082614b395760405162461bcd60e51b815260206004820152600b60248201526a3d32b9379039b1b0b630b960a91b6044820152606401610a99565b83516020850151600090614b4f90600290615d4c565b15614b5b57601c614b5e565b601b5b9050600070014551231950b75fc4402da1732fc9bebe198387096040805160008082526020820180845281905260ff86169282019290925260608101869052608081018390529192509060019060a0016020604051602081039080840390855afa158015614bd0573d6000803e3d6000fd5b505050602060405103519050600086604051602001614bef919061574f565b60408051601f1981840301815291905280516020909101206001600160a01b0392831692169190911498975050505050505050565b614c2c614fa9565b835160208086015185519186015160009384938493614c4d93909190614d42565b919450925090506401000003d019858209600114614ca95760405162461bcd60e51b815260206004820152601960248201527834b73b2d1036bab9ba1031329034b73b32b939b29037b3103d60391b6044820152606401610a99565b60405180604001604052806401000003d01980614cc857614cc8615d76565b87860981526020016401000003d0198785099052979650505050505050565b805160208201205b6401000003d0198110611fa557604080516020808201939093528151808203840181529082019091528051910120614cef565b600061272a826002614d3b6401000003d0196001615b9e565b901c614e22565b60008080600180826401000003d019896401000003d019038808905060006401000003d0198b6401000003d019038a0890506000614d8283838585614eb9565b9098509050614d9388828e88614edd565b9098509050614da488828c87614edd565b90985090506000614db78d878b85614edd565b9098509050614dc888828686614eb9565b9098509050614dd988828e89614edd565b9098509050818114614e0e576401000003d019818a0998506401000003d01982890997506401000003d0198183099650614e12565b8196505b5050505050509450945094915050565b600080614e2d614fc7565b6020808252818101819052604082015260608101859052608081018490526401000003d01960a0820152614e5f614fe5565b60208160c0846005600019fa925082614eaf5760405162461bcd60e51b81526020600482015260126024820152716269674d6f64457870206661696c7572652160701b6044820152606401610a99565b5195945050505050565b6000806401000003d0198487096401000003d0198487099097909650945050505050565b600080806401000003d019878509905060006401000003d01987876401000003d019030990506401000003d0198183086401000003d01986890990999098509650505050505050565b828054828255906000526020600020908101928215614f7b579160200282015b82811115614f7b57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614f46565b50614f87929150615003565b5090565b5080546000825590600052602060002090810190610aa29190615003565b60405180604001604052806002906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b5b80821115614f875760008155600101615004565b8035611fa581615dce565b806040810183101561272a57600080fd5b600082601f83011261504557600080fd5b604051604081018181106001600160401b038211171561506757615067615db8565b806040525080838560408601111561507e57600080fd5b60005b60028110156150a0578135835260209283019290910190600101615081565b509195945050505050565b8035611fa581615de3565b600060c082840312156150c857600080fd5b6150d0615af9565b90506150db826151ca565b8152602080830135818301526150f3604084016151b6565b6040830152615104606084016151b6565b6060830152608083013561511781615dce565b608083015260a08301356001600160401b038082111561513657600080fd5b818501915085601f83011261514a57600080fd5b81358181111561515c5761515c615db8565b61516e601f8201601f19168501615b44565b9150808252868482850101111561518457600080fd5b80848401858401376000848284010152508060a085015250505092915050565b803561ffff81168114611fa557600080fd5b803563ffffffff81168114611fa557600080fd5b80356001600160401b0381168114611fa557600080fd5b803560ff81168114611fa557600080fd5b805169ffffffffffffffffffff81168114611fa557600080fd5b60006020828403121561521e57600080fd5b813561102b81615dce565b6000806040838503121561523c57600080fd5b823561524781615dce565b9150602083013561525781615dce565b809150509250929050565b6000806000806060858703121561527857600080fd5b843561528381615dce565b93506020850135925060408501356001600160401b03808211156152a657600080fd5b818701915087601f8301126152ba57600080fd5b8135818111156152c957600080fd5b8860208285010111156152db57600080fd5b95989497505060200194505050565b6000604082840312156152fc57600080fd5b61102b8383615023565b6000806060838503121561531957600080fd5b6153238484615023565b9150615331604084016151ca565b90509250929050565b60006040828403121561534c57600080fd5b61102b8383615034565b60006020828403121561536857600080fd5b815161102b81615de3565b60006020828403121561538557600080fd5b5035919050565b60006020828403121561539e57600080fd5b5051919050565b6000602082840312156153b757600080fd5b604051602081018181106001600160401b03821117156153d9576153d9615db8565b60405282356153e781615de3565b81529392505050565b60008060008385036101e081121561540757600080fd5b6101a08082121561541757600080fd5b61541f615b21565b915061542b8787615034565b825261543a8760408801615034565b60208301526080860135604083015260a0860135606083015260c0860135608083015261546960e08701615018565b60a083015261010061547d88828901615034565b60c0840152615490886101408901615034565b60e0840152610180870135908301529093508401356001600160401b038111156154b957600080fd5b6154c5868287016150b6565b9250506154d56101c085016150ab565b90509250925092565b6000602082840312156154f057600080fd5b81356001600160401b0381111561550657600080fd5b820160c0818503121561102b57600080fd5b60006020828403121561552a57600080fd5b61102b826151a4565b60008060008060008060008060006101208a8c03121561555257600080fd5b61555b8a6151a4565b985061556960208b016151b6565b975061557760408b016151b6565b965061558560608b016151b6565b955060808a0135945061559a60a08b016151b6565b93506155a860c08b016151b6565b92506155b660e08b016151e1565b91506155c56101008b016151e1565b90509295985092959850929598565b600080604083850312156155e757600080fd5b82359150602083013561525781615dce565b6000806040838503121561560c57600080fd5b50508035926020909101359150565b60006020828403121561562d57600080fd5b61102b826151b6565b600080600080600060a0868803121561564e57600080fd5b615657866151f2565b945060208601519350604086015192506060860151915061567a608087016151f2565b90509295509295909350565b600081518084526020808501945080840160005b838110156156bf5781516001600160a01b03168752958201959082019060010161569a565b509495945050505050565b8060005b60028110156156ed5781518452602093840193909101906001016156ce565b50505050565b600081518084526020808501945080840160005b838110156156bf57815187529582019590820190600101615707565b6000815180845261573b816020860160208601615cde565b601f01601f19169290920160200192915050565b61575981836156ca565b604001919050565b60008351615773818460208801615cde565b835190830190615787818360208801615cde565b01949350505050565b8681526157a060208201876156ca565b6157ad60608201866156ca565b6157ba60a08201856156ca565b6157c760e08201846156ca565b60609190911b6001600160601b0319166101208201526101340195945050505050565b8381526157fa60208201846156ca565b606081019190915260800192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039290921682526001600160601b0316602082015260400190565b6040810161272a82846156ca565b60208152600061102b60208301846156f3565b9182526001600160401b0316602082015260400190565b60208152600061102b6020830184615723565b6020815260ff82511660208201526020820151604082015260018060a01b0360408301511660608201526000606083015160c0608084015261590460e0840182615686565b60808501516001600160601b0390811660a0868101919091529095015190941660c0909301929092525090919050565b9182526001600160a01b0316602082015260400190565b8281526060810161102b60208301846156ca565b8281526040602082015260006135ff60408301846156f3565b86815285602082015261ffff85166040820152600063ffffffff808616606084015280851660808401525060c060a0830152614a0460c0830184615723565b878152602081018790526040810186905263ffffffff8581166060830152841660808201526001600160a01b03831660a082015260e060c0820181905260009061415390830184615723565b8781526001600160401b03871660208201526040810186905263ffffffff8581166060830152841660808201526001600160a01b03831660a082015260e060c0820181905260009061415390830184615723565b6001600160601b038681168252851660208201526001600160401b03841660408201526001600160a01b038316606082015260a060808201819052600090615aa190830184615686565b979650505050505050565b6000808335601e19843603018112615ac357600080fd5b8301803591506001600160401b03821115615add57600080fd5b602001915036819003821315615af257600080fd5b9250929050565b60405160c081016001600160401b0381118282101715615b1b57615b1b615db8565b60405290565b60405161012081016001600160401b0381118282101715615b1b57615b1b615db8565b604051601f8201601f191681016001600160401b0381118282101715615b6c57615b6c615db8565b604052919050565b60008085851115615b8457600080fd5b83861115615b9157600080fd5b5050820193919092039150565b60008219821115615bb157615bb1615d60565b500190565b60006001600160401b0380831681851680830382111561578757615787615d60565b600060ff821660ff84168060ff03821115615bf557615bf5615d60565b019392505050565b60006001600160601b0382811684821680830382111561578757615787615d60565b600082615c2e57615c2e615d76565b500490565b6000816000190483118215151615615c4d57615c4d615d60565b500290565b600082821015615c6457615c64615d60565b500390565b600063ffffffff83811690831681811015615c8657615c86615d60565b039392505050565b60006001600160601b0383811690831681811015615c8657615c86615d60565b6001600160e01b03198135818116916004851015615cd65780818660040360031b1b83161692505b505092915050565b60005b83811015615cf9578181015183820152602001615ce1565b838111156156ed5750506000910152565b6000600019821415615d1e57615d1e615d60565b5060010190565b60006001600160401b0380831681811415615d4257615d42615d60565b6001019392505050565b600082615d5b57615d5b615d76565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610aa257600080fd5b8015158114610aa257600080fdfe307866666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666a164736f6c6343000806000a",
}
var VRFCoordinatorV25ABI = VRFCoordinatorV25MetaData.ABI
diff --git a/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt
index b3f54b812d5..2a3cab65636 100644
--- a/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt
+++ b/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt
@@ -83,7 +83,7 @@ vrf_consumer_v2_upgradeable_example: ../../contracts/solc/v0.8.6/VRFConsumerV2Up
vrf_coordinator_mock: ../../contracts/solc/v0.8.6/VRFCoordinatorMock/VRFCoordinatorMock.abi ../../contracts/solc/v0.8.6/VRFCoordinatorMock/VRFCoordinatorMock.bin 5c495cf8df1f46d8736b9150cdf174cce358cb8352f60f0d5bb9581e23920501
vrf_coordinator_test_v2: ../../contracts/solc/v0.8.6/VRFCoordinatorTestV2/VRFCoordinatorTestV2.abi ../../contracts/solc/v0.8.6/VRFCoordinatorTestV2/VRFCoordinatorTestV2.bin eaefd785c38bac67fb11a7fc2737ab2da68c988ca170e7db8ff235c80893e01c
vrf_coordinator_v2: ../../contracts/solc/v0.8.6/VRFCoordinatorV2/VRFCoordinatorV2.abi ../../contracts/solc/v0.8.6/VRFCoordinatorV2/VRFCoordinatorV2.bin 295f35ce282060317dfd01f45959f5a2b05ba26913e422fbd4fb6bf90b107006
-vrf_coordinator_v2_5: ../../contracts/solc/v0.8.6/VRFCoordinatorV2_5/VRFCoordinatorV2_5.abi ../../contracts/solc/v0.8.6/VRFCoordinatorV2_5/VRFCoordinatorV2_5.bin 177db957cd1426de3917504465188a475a9d402a2dddccd7cb80fa76f64eb3a1
+vrf_coordinator_v2_5: ../../contracts/solc/v0.8.6/VRFCoordinatorV2_5/VRFCoordinatorV2_5.abi ../../contracts/solc/v0.8.6/VRFCoordinatorV2_5/VRFCoordinatorV2_5.bin 12525cb6921e9e89a50676f9bfb627d91c89ba94d4217ca8968abb8a5416786e
vrf_coordinator_v2_plus_v2_example: ../../contracts/solc/v0.8.6/VRFCoordinatorV2Plus_V2Example/VRFCoordinatorV2Plus_V2Example.abi ../../contracts/solc/v0.8.6/VRFCoordinatorV2Plus_V2Example/VRFCoordinatorV2Plus_V2Example.bin 4a5b86701983b1b65f0a8dfa116b3f6d75f8f706fa274004b57bdf5992e4cec3
vrf_coordinator_v2plus_interface: ../../contracts/solc/v0.8.6/IVRFCoordinatorV2PlusInternal/IVRFCoordinatorV2PlusInternal.abi ../../contracts/solc/v0.8.6/IVRFCoordinatorV2PlusInternal/IVRFCoordinatorV2PlusInternal.bin 86b8e23aab28c5b98e3d2384dc4f702b093e382dc985c88101278e6e4bf6f7b8
vrf_external_sub_owner_example: ../../contracts/solc/v0.8.6/VRFExternalSubOwnerExample/VRFExternalSubOwnerExample.abi ../../contracts/solc/v0.8.6/VRFExternalSubOwnerExample/VRFExternalSubOwnerExample.bin 14f888eb313930b50233a6f01ea31eba0206b7f41a41f6311670da8bb8a26963
diff --git a/core/gethwrappers/go_generate_vrfv2plus.go b/core/gethwrappers/go_generate_vrfv2plus.go
new file mode 100644
index 00000000000..efd11050034
--- /dev/null
+++ b/core/gethwrappers/go_generate_vrfv2plus.go
@@ -0,0 +1,21 @@
+package gethwrappers
+
+// VRF V2Plus
+//go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.6/IVRFCoordinatorV2PlusInternal/IVRFCoordinatorV2PlusInternal.abi ../../contracts/solc/v0.8.6/IVRFCoordinatorV2PlusInternal/IVRFCoordinatorV2PlusInternal.bin IVRFCoordinatorV2PlusInternal vrf_coordinator_v2plus_interface
+//go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.6/BatchVRFCoordinatorV2Plus/BatchVRFCoordinatorV2Plus.abi ../../contracts/solc/v0.8.6/BatchVRFCoordinatorV2Plus/BatchVRFCoordinatorV2Plus.bin BatchVRFCoordinatorV2Plus batch_vrf_coordinator_v2plus
+//go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.6/TrustedBlockhashStore/TrustedBlockhashStore.abi ../../contracts/solc/v0.8.6/TrustedBlockhashStore/TrustedBlockhashStore.bin TrustedBlockhashStore trusted_blockhash_store
+//go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.6/VRFV2PlusConsumerExample/VRFV2PlusConsumerExample.abi ../../contracts/solc/v0.8.6/VRFV2PlusConsumerExample/VRFV2PlusConsumerExample.bin VRFV2PlusConsumerExample vrfv2plus_consumer_example
+//go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.6/VRFCoordinatorV2_5/VRFCoordinatorV2_5.abi ../../contracts/solc/v0.8.6/VRFCoordinatorV2_5/VRFCoordinatorV2_5.bin VRFCoordinatorV2_5 vrf_coordinator_v2_5
+//go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.6/VRFV2PlusWrapper/VRFV2PlusWrapper.abi ../../contracts/solc/v0.8.6/VRFV2PlusWrapper/VRFV2PlusWrapper.bin VRFV2PlusWrapper vrfv2plus_wrapper
+//go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.6/VRFV2PlusWrapperConsumerExample/VRFV2PlusWrapperConsumerExample.abi ../../contracts/solc/v0.8.6/VRFV2PlusWrapperConsumerExample/VRFV2PlusWrapperConsumerExample.bin VRFV2PlusWrapperConsumerExample vrfv2plus_wrapper_consumer_example
+//go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.6/VRFMaliciousConsumerV2Plus/VRFMaliciousConsumerV2Plus.abi ../../contracts/solc/v0.8.6/VRFMaliciousConsumerV2Plus/VRFMaliciousConsumerV2Plus.bin VRFMaliciousConsumerV2Plus vrf_malicious_consumer_v2_plus
+//go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.6/VRFV2PlusSingleConsumerExample/VRFV2PlusSingleConsumerExample.abi ../../contracts/solc/v0.8.6/VRFV2PlusSingleConsumerExample/VRFV2PlusSingleConsumerExample.bin VRFV2PlusSingleConsumerExample vrf_v2plus_single_consumer
+//go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.6/VRFV2PlusExternalSubOwnerExample/VRFV2PlusExternalSubOwnerExample.abi ../../contracts/solc/v0.8.6/VRFV2PlusExternalSubOwnerExample/VRFV2PlusExternalSubOwnerExample.bin VRFV2PlusExternalSubOwnerExample vrf_v2plus_sub_owner
+//go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.6/VRFV2PlusRevertingExample/VRFV2PlusRevertingExample.abi ../../contracts/solc/v0.8.6/VRFV2PlusRevertingExample/VRFV2PlusRevertingExample.bin VRFV2PlusRevertingExample vrfv2plus_reverting_example
+//go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.6/VRFConsumerV2PlusUpgradeableExample/VRFConsumerV2PlusUpgradeableExample.abi ../../contracts/solc/v0.8.6/VRFConsumerV2PlusUpgradeableExample/VRFConsumerV2PlusUpgradeableExample.bin VRFConsumerV2PlusUpgradeableExample vrf_consumer_v2_plus_upgradeable_example
+//go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.6/VRFV2PlusClient/VRFV2PlusClient.abi ../../contracts/solc/v0.8.6/VRFV2PlusClient/VRFV2PlusClient.bin VRFV2PlusClient vrfv2plus_client
+//go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.6/VRFCoordinatorV2Plus_V2Example/VRFCoordinatorV2Plus_V2Example.abi ../../contracts/solc/v0.8.6/VRFCoordinatorV2Plus_V2Example/VRFCoordinatorV2Plus_V2Example.bin VRFCoordinatorV2Plus_V2Example vrf_coordinator_v2_plus_v2_example
+//go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.6/VRFV2PlusMaliciousMigrator/VRFV2PlusMaliciousMigrator.abi ../../contracts/solc/v0.8.6/VRFV2PlusMaliciousMigrator/VRFV2PlusMaliciousMigrator.bin VRFV2PlusMaliciousMigrator vrfv2plus_malicious_migrator
+//go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.6/VRFV2PlusLoadTestWithMetrics/VRFV2PlusLoadTestWithMetrics.abi ../../contracts/solc/v0.8.6/VRFV2PlusLoadTestWithMetrics/VRFV2PlusLoadTestWithMetrics.bin VRFV2PlusLoadTestWithMetrics vrf_v2plus_load_test_with_metrics
+//go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.6/VRFCoordinatorV2PlusUpgradedVersion/VRFCoordinatorV2PlusUpgradedVersion.abi ../../contracts/solc/v0.8.6/VRFCoordinatorV2PlusUpgradedVersion/VRFCoordinatorV2PlusUpgradedVersion.bin VRFCoordinatorV2PlusUpgradedVersion vrf_v2plus_upgraded_version
+//go:generate go run ./generation/generate/wrap.go ../../contracts/solc/v0.8.6/VRFV2PlusWrapperLoadTestConsumer/VRFV2PlusWrapperLoadTestConsumer.abi ../../contracts/solc/v0.8.6/VRFV2PlusWrapperLoadTestConsumer/VRFV2PlusWrapperLoadTestConsumer.bin VRFV2PlusWrapperLoadTestConsumer vrfv2plus_wrapper_load_test_consumer
From 32d7abec8daf7f94ba5002d5c739c87bfe7afeca Mon Sep 17 00:00:00 2001
From: Sergey Kudasov
Date: Fri, 9 Feb 2024 08:58:00 +0100
Subject: [PATCH 09/11] bump wasp (#11971)
---
integration-tests/go.mod | 10 +++++-----
integration-tests/go.sum | 25 ++++++++++++-------------
integration-tests/load/ocr/vu.go | 13 +++----------
3 files changed, 20 insertions(+), 28 deletions(-)
diff --git a/integration-tests/go.mod b/integration-tests/go.mod
index 879aaa47497..0b18766e698 100644
--- a/integration-tests/go.mod
+++ b/integration-tests/go.mod
@@ -6,7 +6,7 @@ go 1.21.4
replace github.com/smartcontractkit/chainlink/v2 => ../
require (
- github.com/K-Phoen/grabana v0.21.17
+ github.com/K-Phoen/grabana v0.22.1
github.com/barkimedes/go-deepcopy v0.0.0-20220514131651-17c30cfc62df
github.com/cli/go-gh/v2 v2.0.0
github.com/ethereum/go-ethereum v1.13.8
@@ -30,8 +30,8 @@ require (
github.com/smartcontractkit/chainlink/v2 v2.0.0-00010101000000-000000000000
github.com/smartcontractkit/libocr v0.0.0-20240112202000-6359502d2ff1
github.com/smartcontractkit/tdh2/go/tdh2 v0.0.0-20230906073235-9e478e5e19f1
- github.com/smartcontractkit/wasp v0.4.1
- github.com/spf13/cobra v1.6.1
+ github.com/smartcontractkit/wasp v0.4.2
+ github.com/spf13/cobra v1.8.0
github.com/stretchr/testify v1.8.4
github.com/test-go/testify v1.1.4
github.com/testcontainers/testcontainers-go v0.23.0
@@ -76,7 +76,7 @@ require (
github.com/CosmWasm/wasmd v0.40.1 // indirect
github.com/CosmWasm/wasmvm v1.2.4 // indirect
github.com/DataDog/zstd v1.5.2 // indirect
- github.com/K-Phoen/sdk v0.12.2 // indirect
+ github.com/K-Phoen/sdk v0.12.4 // indirect
github.com/MakeNowJust/heredoc v1.0.0 // indirect
github.com/Masterminds/goutils v1.1.1 // indirect
github.com/Masterminds/semver/v3 v3.2.1 // indirect
@@ -449,7 +449,7 @@ require (
google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 // indirect
google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/protobuf v1.32.0 // indirect
gopkg.in/guregu/null.v2 v2.1.2 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
diff --git a/integration-tests/go.sum b/integration-tests/go.sum
index 9c87e2245a1..6efc48f181e 100644
--- a/integration-tests/go.sum
+++ b/integration-tests/go.sum
@@ -130,10 +130,10 @@ github.com/GeertJohan/go.rice v1.0.0/go.mod h1:eH6gbSOAUv07dQuZVnBmoDP8mgsM1rtix
github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM=
github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo=
github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY=
-github.com/K-Phoen/grabana v0.21.17 h1:mO/9DvJWC/qpTF/X5jQDm5eKgCBaCGypP/tEfXAvKfg=
-github.com/K-Phoen/grabana v0.21.17/go.mod h1:vbASQt9UiQhX4lC3/opLpJMJ8m+hsTUU2FwkQMytHK4=
-github.com/K-Phoen/sdk v0.12.2 h1:0QofDlKE+lloyBOzhjEEMW21061zts/WIpfpQ5NLLAs=
-github.com/K-Phoen/sdk v0.12.2/go.mod h1:qmM0wO23CtoDux528MXPpYvS4XkRWkWX6rvX9Za8EVU=
+github.com/K-Phoen/grabana v0.22.1 h1:b/O+C3H2H6VNYSeMCYUO4X4wYuwFXgBcRkvYa+fjpQA=
+github.com/K-Phoen/grabana v0.22.1/go.mod h1:3LTXrTzQzTKTgvKSXdRjlsJbizSOW/V23Q3iX00R5bU=
+github.com/K-Phoen/sdk v0.12.4 h1:j2EYuBJm3zDTD0fGKACVFWxAXtkR0q5QzfVqxmHSeGQ=
+github.com/K-Phoen/sdk v0.12.4/go.mod h1:qmM0wO23CtoDux528MXPpYvS4XkRWkWX6rvX9Za8EVU=
github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ=
github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE=
github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI=
@@ -381,8 +381,8 @@ github.com/cpuguy83/dockercfg v0.3.1/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHf
github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk=
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
-github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=
-github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
+github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM=
+github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 h1:d28BXYi+wUpz1KBmiF9bWrjEMacUEREV6MBi2ODnrfQ=
github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs=
github.com/crate-crypto/go-kzg-4844 v0.7.0 h1:C0vgZRk4q4EZ/JgPfzuSoxdCq3C3mOZMBShovmncxvA=
@@ -994,7 +994,6 @@ github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/C
github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ=
github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
-github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/ionos-cloud/sdk-go/v6 v6.1.8 h1:493wE/BkZxJf7x79UCE0cYGPZoqQcPiEBALvt7uVGY0=
@@ -1528,8 +1527,8 @@ github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20230906073235-
github.com/smartcontractkit/tdh2/go/ocr2/decryptionplugin v0.0.0-20230906073235-9e478e5e19f1/go.mod h1:q6f4fe39oZPdsh1i57WznEZgxd8siidMaSFq3wdPmVg=
github.com/smartcontractkit/tdh2/go/tdh2 v0.0.0-20230906073235-9e478e5e19f1 h1:Dai1bn+Q5cpeGMQwRdjOdVjG8mmFFROVkSKuUgBErRQ=
github.com/smartcontractkit/tdh2/go/tdh2 v0.0.0-20230906073235-9e478e5e19f1/go.mod h1:G5Sd/yzHWf26rQ+X0nG9E0buKPqRGPMJAfk2gwCzOOw=
-github.com/smartcontractkit/wasp v0.4.1 h1:qgIx2s+eCwH0OaBKaHEAHUQ1Z47bAgDu+ICS9IOqvGQ=
-github.com/smartcontractkit/wasp v0.4.1/go.mod h1:3qiofyI3pkbrc48a3CVshbMfgl74SiuPL/tm30d9Wb4=
+github.com/smartcontractkit/wasp v0.4.2 h1:MPErzwcOW84MKnA6/BjMnlsspQ0681XfoanGsJHOI7c=
+github.com/smartcontractkit/wasp v0.4.2/go.mod h1:eVhBVLbVv0qORUlN7aR5C4aTN/lTYO3KnN1erO4ROOI=
github.com/smartcontractkit/wsrpc v0.7.2 h1:iBXzMeg7vc5YoezIQBq896y25BARw7OKbhrb6vPbtRQ=
github.com/smartcontractkit/wsrpc v0.7.2/go.mod h1:sj7QX2NQibhkhxTfs3KOhAj/5xwgqMipTvJVSssT9i0=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
@@ -1552,8 +1551,8 @@ github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cA
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI=
-github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA=
-github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY=
+github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
+github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
@@ -2310,8 +2309,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I=
+google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
diff --git a/integration-tests/load/ocr/vu.go b/integration-tests/load/ocr/vu.go
index d113f7eb3f9..bd733b08ae5 100644
--- a/integration-tests/load/ocr/vu.go
+++ b/integration-tests/load/ocr/vu.go
@@ -22,6 +22,7 @@ import (
// VU is a virtual user for the OCR load test
// it creates a feed and triggers new rounds
type VU struct {
+ *wasp.VUControl
rl ratelimit.Limiter
rate int
rateUnit time.Duration
@@ -34,7 +35,6 @@ type VU struct {
msClient *client2.MockserverClient
l zerolog.Logger
ocrInstances []contracts.OffchainAggregator
- stop chan struct{}
}
func NewVU(
@@ -49,6 +49,7 @@ func NewVU(
msClient *client2.MockserverClient,
) *VU {
return &VU{
+ VUControl: wasp.NewVUControl(),
rl: ratelimit.New(rate, ratelimit.Per(rateUnit)),
rate: rate,
rateUnit: rateUnit,
@@ -64,7 +65,7 @@ func NewVU(
func (m *VU) Clone(_ *wasp.Generator) wasp.VirtualUser {
return &VU{
- stop: make(chan struct{}, 1),
+ VUControl: wasp.NewVUControl(),
rl: ratelimit.New(m.rate, ratelimit.Per(m.rateUnit)),
rate: m.rate,
rateUnit: m.rateUnit,
@@ -119,11 +120,3 @@ func (m *VU) Call(l *wasp.Generator) {
}
}
}
-
-func (m *VU) Stop(_ *wasp.Generator) {
- m.stop <- struct{}{}
-}
-
-func (m *VU) StopChan() chan struct{} {
- return m.stop
-}
From 9f62cf07d5d7d0cbc0f4c3e919631a77f1caaecc Mon Sep 17 00:00:00 2001
From: Sam
Date: Fri, 9 Feb 2024 09:29:34 -0500
Subject: [PATCH 10/11] Make transmit logging readable (#11979)
* Make sonarqube run
* Improve logging readability
---
core/scripts/go.mod | 10 +++++-----
core/scripts/go.sum | 19 ++++++++++---------
.../services/relay/evm/mercury/transmitter.go | 9 +++++----
go.mod | 10 +++++-----
go.sum | 19 ++++++++++---------
integration-tests/go.mod | 10 +++++-----
integration-tests/go.sum | 19 ++++++++++---------
7 files changed, 50 insertions(+), 46 deletions(-)
diff --git a/core/scripts/go.mod b/core/scripts/go.mod
index 2c75a60da69..5e1ddd9af21 100644
--- a/core/scripts/go.mod
+++ b/core/scripts/go.mod
@@ -298,13 +298,13 @@ require (
go.uber.org/ratelimit v0.2.0 // indirect
go.uber.org/zap v1.26.0 // indirect
golang.org/x/arch v0.6.0 // indirect
- golang.org/x/crypto v0.17.0 // indirect
+ golang.org/x/crypto v0.18.0 // indirect
golang.org/x/exp v0.0.0-20231127185646-65229373498e // indirect
golang.org/x/mod v0.14.0 // indirect
- golang.org/x/net v0.19.0 // indirect
- golang.org/x/sync v0.5.0 // indirect
- golang.org/x/sys v0.15.0 // indirect
- golang.org/x/term v0.15.0 // indirect
+ golang.org/x/net v0.20.0 // indirect
+ golang.org/x/sync v0.6.0 // indirect
+ golang.org/x/sys v0.16.0 // indirect
+ golang.org/x/term v0.16.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/time v0.5.0 // indirect
golang.org/x/tools v0.16.0 // indirect
diff --git a/core/scripts/go.sum b/core/scripts/go.sum
index 5fff426cc04..15188ee79d9 100644
--- a/core/scripts/go.sum
+++ b/core/scripts/go.sum
@@ -1446,8 +1446,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y
golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
-golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k=
-golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
+golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc=
+golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -1546,8 +1546,8 @@ golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
-golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c=
-golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
+golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo=
+golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -1573,8 +1573,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
-golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -1661,8 +1661,9 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
+golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
@@ -1670,8 +1671,8 @@ golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuX
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
-golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4=
-golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
+golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE=
+golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
diff --git a/core/services/relay/evm/mercury/transmitter.go b/core/services/relay/evm/mercury/transmitter.go
index bfbc81cfb7f..6a4bfeb6dd0 100644
--- a/core/services/relay/evm/mercury/transmitter.go
+++ b/core/services/relay/evm/mercury/transmitter.go
@@ -11,6 +11,7 @@ import (
"time"
"github.com/ethereum/go-ethereum/accounts/abi"
+ "github.com/ethereum/go-ethereum/common/hexutil"
"github.com/jpillora/backoff"
pkgerrors "github.com/pkg/errors"
"github.com/prometheus/client_golang/prometheus"
@@ -241,7 +242,7 @@ func (mt *mercuryTransmitter) runDeleteQueueLoop() {
case req := <-mt.deleteQueue:
for {
if err := mt.persistenceManager.Delete(runloopCtx, req); err != nil {
- mt.lggr.Errorw("Failed to delete transmit request record", "error", err, "req", req)
+ mt.lggr.Errorw("Failed to delete transmit request record", "err", err, "req.Payload", req.Payload)
mt.transmitQueueDeleteErrorCount.Inc()
select {
case <-time.After(b.Duration()):
@@ -308,7 +309,7 @@ func (mt *mercuryTransmitter) runQueueLoop() {
b.Reset()
if res.Error == "" {
mt.transmitSuccessCount.Inc()
- mt.lggr.Debugw("Transmit report success", "req", t.Req, "response", res, "reportCtx", t.ReportCtx)
+ mt.lggr.Debugw("Transmit report success", "payload", hexutil.Encode(t.Req.Payload), "response", res, "reportCtx", t.ReportCtx)
} else {
// We don't need to retry here because the mercury server
// has confirmed it received the report. We only need to retry
@@ -317,7 +318,7 @@ func (mt *mercuryTransmitter) runQueueLoop() {
case DuplicateReport:
mt.transmitSuccessCount.Inc()
mt.transmitDuplicateCount.Inc()
- mt.lggr.Debugw("Transmit report success; duplicate report", "req", t.Req, "response", res, "reportCtx", t.ReportCtx)
+ mt.lggr.Debugw("Transmit report success; duplicate report", "payload", hexutil.Encode(t.Req.Payload), "response", res, "reportCtx", t.ReportCtx)
default:
transmitServerErrorCount.WithLabelValues(mt.feedID.String(), fmt.Sprintf("%d", res.Code)).Inc()
mt.lggr.Errorw("Transmit report failed; mercury server returned error", "response", res, "reportCtx", t.ReportCtx, "err", res.Error, "code", res.Code)
@@ -357,7 +358,7 @@ func (mt *mercuryTransmitter) Transmit(ctx context.Context, reportCtx ocrtypes.R
Payload: payload,
}
- mt.lggr.Tracew("Transmit enqueue", "req", req, "report", report, "reportCtx", reportCtx, "signatures", signatures)
+ mt.lggr.Tracew("Transmit enqueue", "req.Payload", req.Payload, "report", report, "reportCtx", reportCtx, "signatures", signatures)
if err := mt.persistenceManager.Insert(ctx, req, reportCtx); err != nil {
mt.transmitQueueInsertErrorCount.Inc()
diff --git a/go.mod b/go.mod
index fb4d26f9c4e..da4ff74d507 100644
--- a/go.mod
+++ b/go.mod
@@ -91,10 +91,10 @@ require (
go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin v0.46.1
go.uber.org/multierr v1.11.0
go.uber.org/zap v1.26.0
- golang.org/x/crypto v0.17.0
+ golang.org/x/crypto v0.18.0
golang.org/x/exp v0.0.0-20231127185646-65229373498e
- golang.org/x/sync v0.5.0
- golang.org/x/term v0.15.0
+ golang.org/x/sync v0.6.0
+ golang.org/x/term v0.16.0
golang.org/x/text v0.14.0
golang.org/x/time v0.5.0
golang.org/x/tools v0.16.0
@@ -313,8 +313,8 @@ require (
go.uber.org/ratelimit v0.2.0 // indirect
golang.org/x/arch v0.6.0 // indirect
golang.org/x/mod v0.14.0 // indirect
- golang.org/x/net v0.19.0 // indirect
- golang.org/x/sys v0.15.0 // indirect
+ golang.org/x/net v0.20.0 // indirect
+ golang.org/x/sys v0.16.0 // indirect
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
google.golang.org/api v0.149.0 // indirect
google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 // indirect
diff --git a/go.sum b/go.sum
index 2ad268246f1..5e077598e3b 100644
--- a/go.sum
+++ b/go.sum
@@ -1441,8 +1441,8 @@ golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5y
golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
-golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k=
-golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
+golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc=
+golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -1540,8 +1540,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
-golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c=
-golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
+golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo=
+golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -1567,8 +1567,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
-golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -1654,8 +1654,9 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
+golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
@@ -1664,8 +1665,8 @@ golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
-golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4=
-golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
+golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE=
+golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
diff --git a/integration-tests/go.mod b/integration-tests/go.mod
index 0b18766e698..f737f8681c5 100644
--- a/integration-tests/go.mod
+++ b/integration-tests/go.mod
@@ -39,7 +39,7 @@ require (
go.dedis.ch/kyber/v3 v3.1.0
go.uber.org/ratelimit v0.2.0
go.uber.org/zap v1.26.0
- golang.org/x/sync v0.5.0
+ golang.org/x/sync v0.6.0
golang.org/x/text v0.14.0
gopkg.in/guregu/null.v4 v4.0.0
)
@@ -433,13 +433,13 @@ require (
go.uber.org/multierr v1.11.0 // indirect
go4.org/netipx v0.0.0-20230125063823-8449b0a6169f // indirect
golang.org/x/arch v0.6.0 // indirect
- golang.org/x/crypto v0.17.0 // indirect
+ golang.org/x/crypto v0.18.0 // indirect
golang.org/x/exp v0.0.0-20231127185646-65229373498e // indirect
golang.org/x/mod v0.14.0 // indirect
- golang.org/x/net v0.19.0 // indirect
+ golang.org/x/net v0.20.0 // indirect
golang.org/x/oauth2 v0.15.0 // indirect
- golang.org/x/sys v0.15.0 // indirect
- golang.org/x/term v0.15.0 // indirect
+ golang.org/x/sys v0.16.0 // indirect
+ golang.org/x/term v0.16.0 // indirect
golang.org/x/time v0.5.0 // indirect
golang.org/x/tools v0.16.0 // indirect
gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect
diff --git a/integration-tests/go.sum b/integration-tests/go.sum
index 6efc48f181e..235002b35a2 100644
--- a/integration-tests/go.sum
+++ b/integration-tests/go.sum
@@ -1823,8 +1823,8 @@ golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0
golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
-golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k=
-golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
+golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc=
+golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -1931,8 +1931,8 @@ golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
-golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c=
-golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
+golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo=
+golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -1960,8 +1960,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
-golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -2063,8 +2063,9 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
+golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
@@ -2074,8 +2075,8 @@ golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
-golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4=
-golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
+golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE=
+golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
From b0a1d2366aa672c0d4ebaaad4e5d2132cf657554 Mon Sep 17 00:00:00 2001
From: Sam
Date: Fri, 9 Feb 2024 10:30:47 -0500
Subject: [PATCH 11/11] Prep work for LLO (#11955)
- Includes minor changes/cleanups for unrelated code
---
.tool-versions | 1 +
.../testutils/configtest/general_config.go | 6 +++++-
core/scripts/go.mod | 2 +-
core/scripts/go.sum | 4 ++--
core/services/functions/connector_handler.go | 4 ++--
core/services/job/models.go | 8 ++++----
core/services/job/spawner.go | 10 +++++-----
.../evmregistry/v21/logprovider/recoverer.go | 2 +-
.../evmregistry/v21/mercury/streams/streams.go | 6 +++---
.../v21/mercury/streams/streams_test.go | 6 +++---
core/services/pipeline/common.go | 10 ++++++++++
.../relay/evm/functions/logpoller_wrapper.go | 4 ++--
.../evm/mercury/offchain_config_digester.go | 1 +
.../services/relay/evm/mercury/v1/data_source.go | 2 +-
.../relay/evm/mercury/wsrpc/pb/mercury.proto | 3 ++-
.../evm/mercury/wsrpc/pb/mercury_wsrpc.pb.go | 4 ++--
core/services/relay/evm/mercury_provider.go | 16 ++++++++--------
core/services/streams/delegate.go | 6 +++---
core/services/streams/delegate_test.go | 4 ++--
core/services/streams/stream.go | 7 +------
core/services/streams/stream_registry.go | 11 +++++++++--
core/services/vrf/v1/listener_v1.go | 2 +-
core/web/presenters/job.go | 2 +-
go.mod | 2 +-
go.sum | 4 ++--
25 files changed, 73 insertions(+), 54 deletions(-)
diff --git a/.tool-versions b/.tool-versions
index d8f0afd901d..2a2362dcfa0 100644
--- a/.tool-versions
+++ b/.tool-versions
@@ -5,3 +5,4 @@ postgres 13.3
helm 3.10.3
zig 0.10.1
golangci-lint 1.55.2
+protoc 23.2
diff --git a/core/internal/testutils/configtest/general_config.go b/core/internal/testutils/configtest/general_config.go
index d2851035855..c79b1c7c3cb 100644
--- a/core/internal/testutils/configtest/general_config.go
+++ b/core/internal/testutils/configtest/general_config.go
@@ -66,9 +66,13 @@ func overrides(c *chainlink.Config, s *chainlink.Secrets) {
c.WebServer.TLS.ListenIP = &testIP
chainID := big.NewI(evmclient.NullClientChainID)
+
+ chainCfg := evmcfg.Defaults(chainID)
+ chainCfg.LogPollInterval = commonconfig.MustNewDuration(1 * time.Second) // speed it up from the standard 15s for tests
+
c.EVM = append(c.EVM, &evmcfg.EVMConfig{
ChainID: chainID,
- Chain: evmcfg.Defaults(chainID),
+ Chain: chainCfg,
Nodes: evmcfg.EVMNodes{
&evmcfg.Node{
Name: ptr("test"),
diff --git a/core/scripts/go.mod b/core/scripts/go.mod
index 5e1ddd9af21..0f8c04307f3 100644
--- a/core/scripts/go.mod
+++ b/core/scripts/go.mod
@@ -313,7 +313,7 @@ require (
google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 // indirect
google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/protobuf v1.32.0 // indirect
gopkg.in/guregu/null.v2 v2.1.2 // indirect
gopkg.in/guregu/null.v4 v4.0.0 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
diff --git a/core/scripts/go.sum b/core/scripts/go.sum
index 15188ee79d9..9d0bd7294c9 100644
--- a/core/scripts/go.sum
+++ b/core/scripts/go.sum
@@ -1894,8 +1894,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I=
+google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
diff --git a/core/services/functions/connector_handler.go b/core/services/functions/connector_handler.go
index c8c522e6a62..75a3dca24f1 100644
--- a/core/services/functions/connector_handler.go
+++ b/core/services/functions/connector_handler.go
@@ -271,7 +271,7 @@ func (h *functionsConnectorHandler) handleOffchainRequest(request *OffchainReque
defer cancel()
err := h.listener.HandleOffchainRequest(ctx, request)
if err != nil {
- h.lggr.Errorw("internal error while processing", "id", request.RequestId, "error", err)
+ h.lggr.Errorw("internal error while processing", "id", request.RequestId, "err", err)
h.mu.Lock()
defer h.mu.Unlock()
state, ok := h.heartbeatRequests[RequestID(request.RequestId)]
@@ -330,7 +330,7 @@ func (h *functionsConnectorHandler) cacheNewRequestLocked(requestId RequestID, r
func (h *functionsConnectorHandler) sendResponseAndLog(ctx context.Context, gatewayId string, requestBody *api.MessageBody, payload any) {
err := h.sendResponse(ctx, gatewayId, requestBody, payload)
if err != nil {
- h.lggr.Errorw("failed to send response to gateway", "id", gatewayId, "error", err)
+ h.lggr.Errorw("failed to send response to gateway", "id", gatewayId, "err", err)
} else {
h.lggr.Debugw("sent to gateway", "id", gatewayId, "messageId", requestBody.MessageId, "donId", requestBody.DonId, "method", requestBody.Method)
}
diff --git a/core/services/job/models.go b/core/services/job/models.go
index cde1e7a740d..2aee9182a9c 100644
--- a/core/services/job/models.go
+++ b/core/services/job/models.go
@@ -126,7 +126,7 @@ var (
type Job struct {
ID int32 `toml:"-"`
ExternalJobID uuid.UUID `toml:"externalJobID"`
- StreamID *uint64 `toml:"streamID"`
+ StreamID *uint32 `toml:"streamID"`
OCROracleSpecID *int32
OCROracleSpec *OCROracleSpec
OCR2OracleSpecID *int32
@@ -162,11 +162,11 @@ type Job struct {
PipelineSpecID int32
PipelineSpec *pipeline.Spec
JobSpecErrors []SpecError
- Type Type
- SchemaVersion uint32
+ Type Type `toml:"type"`
+ SchemaVersion uint32 `toml:"schemaVersion"`
GasLimit clnull.Uint32 `toml:"gasLimit"`
ForwardingAllowed bool `toml:"forwardingAllowed"`
- Name null.String
+ Name null.String `toml:"name"`
MaxTaskDuration models.Interval
Pipeline pipeline.Pipeline `toml:"observationSource"`
CreatedAt time.Time
diff --git a/core/services/job/spawner.go b/core/services/job/spawner.go
index 1d44cedaad9..a16466fbef1 100644
--- a/core/services/job/spawner.go
+++ b/core/services/job/spawner.go
@@ -65,20 +65,20 @@ type (
Delegate interface {
JobType() Type
// BeforeJobCreated is only called once on first time job create.
- BeforeJobCreated(spec Job)
+ BeforeJobCreated(Job)
// ServicesForSpec returns services to be started and stopped for this
// job. In case a given job type relies upon well-defined startup/shutdown
// ordering for services, they are started in the order they are given
// and stopped in reverse order.
- ServicesForSpec(spec Job) ([]ServiceCtx, error)
- AfterJobCreated(spec Job)
- BeforeJobDeleted(spec Job)
+ ServicesForSpec(Job) ([]ServiceCtx, error)
+ AfterJobCreated(Job)
+ BeforeJobDeleted(Job)
// OnDeleteJob will be called from within DELETE db transaction. Any db
// commands issued within OnDeleteJob() should be performed first, before any
// non-db side effects. This is required in order to guarantee mutual atomicity between
// all tasks intended to happen during job deletion. For the same reason, the job will
// not show up in the db within OnDeleteJob(), even though it is still actively running.
- OnDeleteJob(spec Job, q pg.Queryer) error
+ OnDeleteJob(jb Job, q pg.Queryer) error
}
activeJob struct {
diff --git a/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer.go b/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer.go
index b28ece9843f..13b8bb17245 100644
--- a/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer.go
+++ b/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/logprovider/recoverer.go
@@ -542,7 +542,7 @@ func (r *logRecoverer) selectFilterBatch(filters []upkeepFilter) []upkeepFilter
for len(results) < batchSize && len(filters) != 0 {
i, err := r.randIntn(len(filters))
if err != nil {
- r.lggr.Debugw("error generating random number", "error", err.Error())
+ r.lggr.Debugw("error generating random number", "err", err.Error())
continue
}
results = append(results, filters[i])
diff --git a/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams.go b/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams.go
index 48ee0492f9e..6f0bf98f83d 100644
--- a/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams.go
+++ b/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams.go
@@ -36,7 +36,7 @@ type latestBlockProvider interface {
LatestBlock() *ocr2keepers.BlockKey
}
-type streamsRegistry interface {
+type streamRegistry interface {
GetUpkeepPrivilegeConfig(opts *bind.CallOpts, upkeepId *big.Int) ([]byte, error)
CheckCallback(opts *bind.CallOpts, id *big.Int, values [][]byte, extraData []byte) (iregistry21.CheckCallback, error)
Address() common.Address
@@ -52,7 +52,7 @@ type streams struct {
mercuryConfig mercury.MercuryConfigProvider
abi abi.ABI
blockSubscriber latestBlockProvider
- registry streamsRegistry
+ registry streamRegistry
client contextCaller
lggr logger.Logger
threadCtrl utils.ThreadControl
@@ -70,7 +70,7 @@ func NewStreamsLookup(
mercuryConfig mercury.MercuryConfigProvider,
blockSubscriber latestBlockProvider,
client contextCaller,
- registry streamsRegistry,
+ registry streamRegistry,
lggr logger.Logger) *streams {
httpClient := http.DefaultClient
threadCtrl := utils.NewThreadControl()
diff --git a/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go b/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go
index c7bff2eac7a..531a97159f1 100644
--- a/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go
+++ b/core/services/ocr2/plugins/ocr2keeper/evmregistry/v21/mercury/streams/streams_test.go
@@ -139,7 +139,7 @@ func TestStreams_CheckCallback(t *testing.T) {
state encoding.PipelineExecutionState
retryable bool
- registry streamsRegistry
+ registry streamRegistry
}{
{
name: "success - empty extra data",
@@ -284,7 +284,7 @@ func TestStreams_AllowedToUseMercury(t *testing.T) {
err error
state encoding.PipelineExecutionState
reason encoding.UpkeepFailureReason
- registry streamsRegistry
+ registry streamRegistry
retryable bool
config []byte
}{
@@ -474,7 +474,7 @@ func TestStreams_StreamsLookup(t *testing.T) {
hasError bool
hasPermission bool
v3 bool
- registry streamsRegistry
+ registry streamRegistry
}{
{
name: "success - happy path no cache",
diff --git a/core/services/pipeline/common.go b/core/services/pipeline/common.go
index 6efa7aa2148..74e13ae200c 100644
--- a/core/services/pipeline/common.go
+++ b/core/services/pipeline/common.go
@@ -243,6 +243,16 @@ func (trrs TaskRunResults) FinalResult(l logger.Logger) FinalResult {
return fr
}
+// Terminals returns all terminal task run results
+func (trrs TaskRunResults) Terminals() (terminals []TaskRunResult) {
+ for _, trr := range trrs {
+ if trr.IsTerminal() {
+ terminals = append(terminals, trr)
+ }
+ }
+ return
+}
+
// GetNextTaskOf returns the task with the next id or nil if it does not exist
func (trrs *TaskRunResults) GetNextTaskOf(task TaskRunResult) *TaskRunResult {
nextID := task.Task.Base().id + 1
diff --git a/core/services/relay/evm/functions/logpoller_wrapper.go b/core/services/relay/evm/functions/logpoller_wrapper.go
index e76b567b42b..7897e86310e 100644
--- a/core/services/relay/evm/functions/logpoller_wrapper.go
+++ b/core/services/relay/evm/functions/logpoller_wrapper.go
@@ -321,7 +321,7 @@ func (l *logPollerWrapper) SubscribeToUpdates(subscriberName string, subscriber
if l.pluginConfig.ContractVersion == 0 {
// in V0, immediately set contract address to Oracle contract and never update again
if err := subscriber.UpdateRoutes(l.routerContract.Address(), l.routerContract.Address()); err != nil {
- l.lggr.Errorw("LogPollerWrapper: Failed to update routes", "subscriberName", subscriberName, "error", err)
+ l.lggr.Errorw("LogPollerWrapper: Failed to update routes", "subscriberName", subscriberName, "err", err)
}
} else if l.pluginConfig.ContractVersion == 1 {
l.mu.Lock()
@@ -416,7 +416,7 @@ func (l *logPollerWrapper) handleRouteUpdate(activeCoordinator common.Address, p
for _, subscriber := range l.subscribers {
err := subscriber.UpdateRoutes(activeCoordinator, proposedCoordinator)
if err != nil {
- l.lggr.Errorw("LogPollerWrapper: Failed to update routes", "error", err)
+ l.lggr.Errorw("LogPollerWrapper: Failed to update routes", "err", err)
}
}
}
diff --git a/core/services/relay/evm/mercury/offchain_config_digester.go b/core/services/relay/evm/mercury/offchain_config_digester.go
index a12198738a9..f9ba0b23095 100644
--- a/core/services/relay/evm/mercury/offchain_config_digester.go
+++ b/core/services/relay/evm/mercury/offchain_config_digester.go
@@ -7,6 +7,7 @@ import (
"github.com/ethereum/go-ethereum/common"
"github.com/pkg/errors"
+
ocrtypes "github.com/smartcontractkit/libocr/offchainreporting2plus/types"
"github.com/smartcontractkit/wsrpc/credentials"
diff --git a/core/services/relay/evm/mercury/v1/data_source.go b/core/services/relay/evm/mercury/v1/data_source.go
index ce48ec6cf94..7f41bd1e36c 100644
--- a/core/services/relay/evm/mercury/v1/data_source.go
+++ b/core/services/relay/evm/mercury/v1/data_source.go
@@ -295,7 +295,7 @@ func (ds *datasource) setLatestBlocks(ctx context.Context, obs *v1types.Observat
latestBlocks, err := ds.mercuryChainReader.LatestHeads(ctx, nBlocksObservation)
if err != nil {
- ds.lggr.Errorw("failed to read latest blocks", "error", err)
+ ds.lggr.Errorw("failed to read latest blocks", "err", err)
return err
}
diff --git a/core/services/relay/evm/mercury/wsrpc/pb/mercury.proto b/core/services/relay/evm/mercury/wsrpc/pb/mercury.proto
index 6e5e49724cd..184b0572046 100644
--- a/core/services/relay/evm/mercury/wsrpc/pb/mercury.proto
+++ b/core/services/relay/evm/mercury/wsrpc/pb/mercury.proto
@@ -10,7 +10,8 @@ service Mercury {
}
message TransmitRequest {
- bytes payload = 1;
+ bytes payload = 1;
+ string reportFormat = 2;
}
message TransmitResponse {
diff --git a/core/services/relay/evm/mercury/wsrpc/pb/mercury_wsrpc.pb.go b/core/services/relay/evm/mercury/wsrpc/pb/mercury_wsrpc.pb.go
index eaf42c8568f..23c78abf533 100644
--- a/core/services/relay/evm/mercury/wsrpc/pb/mercury_wsrpc.pb.go
+++ b/core/services/relay/evm/mercury/wsrpc/pb/mercury_wsrpc.pb.go
@@ -1,17 +1,17 @@
// Code generated by protoc-gen-go-wsrpc. DO NOT EDIT.
// versions:
// - protoc-gen-go-wsrpc v0.0.1
-// - protoc v3.21.12
+// - protoc v4.23.2
package pb
import (
context "context"
-
wsrpc "github.com/smartcontractkit/wsrpc"
)
// MercuryClient is the client API for Mercury service.
+//
type MercuryClient interface {
Transmit(ctx context.Context, in *TransmitRequest) (*TransmitResponse, error)
LatestReport(ctx context.Context, in *LatestReportRequest) (*LatestReportResponse, error)
diff --git a/core/services/relay/evm/mercury_provider.go b/core/services/relay/evm/mercury_provider.go
index d9858ac64c3..9159a13590e 100644
--- a/core/services/relay/evm/mercury_provider.go
+++ b/core/services/relay/evm/mercury_provider.go
@@ -23,7 +23,7 @@ import (
var _ commontypes.MercuryProvider = (*mercuryProvider)(nil)
type mercuryProvider struct {
- configWatcher *configWatcher
+ cp commontypes.ConfigProvider
chainReader commontypes.ChainReader
codec commontypes.Codec
transmitter evmmercury.Transmitter
@@ -36,7 +36,7 @@ type mercuryProvider struct {
}
func NewMercuryProvider(
- configWatcher *configWatcher,
+ cp commontypes.ConfigProvider,
chainReader commontypes.ChainReader,
codec commontypes.Codec,
mercuryChainReader mercurytypes.ChainReader,
@@ -47,7 +47,7 @@ func NewMercuryProvider(
lggr logger.Logger,
) *mercuryProvider {
return &mercuryProvider{
- configWatcher,
+ cp,
chainReader,
codec,
transmitter,
@@ -61,7 +61,7 @@ func NewMercuryProvider(
}
func (p *mercuryProvider) Start(ctx context.Context) error {
- return p.ms.Start(ctx, p.configWatcher, p.transmitter)
+ return p.ms.Start(ctx, p.cp, p.transmitter)
}
func (p *mercuryProvider) Close() error {
@@ -69,7 +69,7 @@ func (p *mercuryProvider) Close() error {
}
func (p *mercuryProvider) Ready() error {
- return errors.Join(p.configWatcher.Ready(), p.transmitter.Ready())
+ return errors.Join(p.cp.Ready(), p.transmitter.Ready())
}
func (p *mercuryProvider) Name() string {
@@ -78,7 +78,7 @@ func (p *mercuryProvider) Name() string {
func (p *mercuryProvider) HealthReport() map[string]error {
report := map[string]error{}
- services.CopyHealth(report, p.configWatcher.HealthReport())
+ services.CopyHealth(report, p.cp.HealthReport())
services.CopyHealth(report, p.transmitter.HealthReport())
return report
}
@@ -92,11 +92,11 @@ func (p *mercuryProvider) Codec() commontypes.Codec {
}
func (p *mercuryProvider) ContractConfigTracker() ocrtypes.ContractConfigTracker {
- return p.configWatcher.ContractConfigTracker()
+ return p.cp.ContractConfigTracker()
}
func (p *mercuryProvider) OffchainConfigDigester() ocrtypes.OffchainConfigDigester {
- return p.configWatcher.OffchainConfigDigester()
+ return p.cp.OffchainConfigDigester()
}
func (p *mercuryProvider) OnchainConfigCodec() mercurytypes.OnchainConfigCodec {
diff --git a/core/services/streams/delegate.go b/core/services/streams/delegate.go
index 4e83aed2b94..f7dc852a50b 100644
--- a/core/services/streams/delegate.go
+++ b/core/services/streams/delegate.go
@@ -48,7 +48,7 @@ func (d *Delegate) ServicesForSpec(jb job.Job) (services []job.ServiceCtx, err e
return nil, errors.New("streamID is required to be present for stream specs")
}
id := *jb.StreamID
- lggr := d.lggr.With("streamID", id)
+ lggr := d.lggr.Named(fmt.Sprintf("%d", id)).With("streamID", id)
rrs := ocrcommon.NewResultRunSaver(d.runner, lggr, d.cfg.MaxSuccessfulRuns(), d.cfg.ResultWriteQueueDepth())
services = append(services, rrs, &StreamService{
@@ -77,12 +77,12 @@ func (s *StreamService) Start(_ context.Context) error {
if s.spec == nil {
return fmt.Errorf("pipeline spec unexpectedly missing for stream %q", s.id)
}
- s.lggr.Debugf("Starting stream %q", s.id)
+ s.lggr.Debugf("Starting stream %d", s.id)
return s.registry.Register(s.id, *s.spec, s.rrs)
}
func (s *StreamService) Close() error {
- s.lggr.Debugf("Stopping stream %q", s.id)
+ s.lggr.Debugf("Stopping stream %d", s.id)
s.registry.Unregister(s.id)
return nil
}
diff --git a/core/services/streams/delegate_test.go b/core/services/streams/delegate_test.go
index d6d1ca68876..e97da63d522 100644
--- a/core/services/streams/delegate_test.go
+++ b/core/services/streams/delegate_test.go
@@ -38,7 +38,7 @@ func Test_Delegate(t *testing.T) {
_, err := d.ServicesForSpec(jb)
assert.EqualError(t, err, "streamID is required to be present for stream specs")
})
- jb.StreamID = ptr(uint64(42))
+ jb.StreamID = ptr(uint32(42))
t.Run("returns services", func(t *testing.T) {
srvs, err := d.ServicesForSpec(jb)
require.NoError(t, err)
@@ -83,7 +83,7 @@ answer1 [type=median index=0];
assert.Equal(t, uint32(1), jb.SchemaVersion)
assert.True(t, jb.Name.Valid)
require.NotNil(t, jb.StreamID)
- assert.Equal(t, uint64(12345), *jb.StreamID)
+ assert.Equal(t, uint32(12345), *jb.StreamID)
assert.Equal(t, "voter-turnout", jb.Name.String)
},
},
diff --git a/core/services/streams/stream.go b/core/services/streams/stream.go
index 51535a0cb86..cb168c11bce 100644
--- a/core/services/streams/stream.go
+++ b/core/services/streams/stream.go
@@ -101,14 +101,9 @@ func (s *stream) executeRun(ctx context.Context) (*pipeline.Run, pipeline.TaskRu
// extract any desired type that matches a particular pipeline run output.
// Returns error on parse errors: if results are wrong type
func ExtractBigInt(trrs pipeline.TaskRunResults) (*big.Int, error) {
- var finaltrrs []pipeline.TaskRunResult
// pipeline.TaskRunResults comes ordered asc by index, this is guaranteed
// by the pipeline executor
- for _, trr := range trrs {
- if trr.IsTerminal() {
- finaltrrs = append(finaltrrs, trr)
- }
- }
+ finaltrrs := trrs.Terminals()
if len(finaltrrs) != 1 {
return nil, fmt.Errorf("invalid number of results, expected: 1, got: %d", len(finaltrrs))
diff --git a/core/services/streams/stream_registry.go b/core/services/streams/stream_registry.go
index 0c822010a53..c4795caa304 100644
--- a/core/services/streams/stream_registry.go
+++ b/core/services/streams/stream_registry.go
@@ -4,18 +4,25 @@ import (
"fmt"
"sync"
+ commontypes "github.com/smartcontractkit/chainlink-common/pkg/types"
+
"github.com/smartcontractkit/chainlink/v2/core/logger"
"github.com/smartcontractkit/chainlink/v2/core/services/pipeline"
)
-type StreamID = uint64
+// alias for easier refactoring
+type StreamID = commontypes.StreamID
type Registry interface {
- Get(streamID StreamID) (strm Stream, exists bool)
+ Getter
Register(streamID StreamID, spec pipeline.Spec, rrs ResultRunSaver) error
Unregister(streamID StreamID)
}
+type Getter interface {
+ Get(streamID StreamID) (strm Stream, exists bool)
+}
+
type streamRegistry struct {
sync.RWMutex
lggr logger.Logger
diff --git a/core/services/vrf/v1/listener_v1.go b/core/services/vrf/v1/listener_v1.go
index f4e813d7d61..a3240365a66 100644
--- a/core/services/vrf/v1/listener_v1.go
+++ b/core/services/vrf/v1/listener_v1.go
@@ -369,7 +369,7 @@ func (lsn *Listener) handleLog(lb log.Broadcast, minConfs uint32) {
func (lsn *Listener) shouldProcessLog(lb log.Broadcast) bool {
consumed, err := lsn.Chain.LogBroadcaster().WasAlreadyConsumed(lb)
if err != nil {
- lsn.L.Errorw("Could not determine if log was already consumed", "error", err, "txHash", lb.RawLog().TxHash)
+ lsn.L.Errorw("Could not determine if log was already consumed", "err", err, "txHash", lb.RawLog().TxHash)
// Do not process, let lb resend it as a retry mechanism.
return false
}
diff --git a/core/web/presenters/job.go b/core/web/presenters/job.go
index c97314495b2..6b0293665df 100644
--- a/core/web/presenters/job.go
+++ b/core/web/presenters/job.go
@@ -452,7 +452,7 @@ func NewJobError(e job.SpecError) JobError {
type JobResource struct {
JAID
Name string `json:"name"`
- StreamID *uint64 `json:"streamID,omitempty"`
+ StreamID *uint32 `json:"streamID,omitempty"`
Type JobSpecType `json:"type"`
SchemaVersion uint32 `json:"schemaVersion"`
GasLimit clnull.Uint32 `json:"gasLimit"`
diff --git a/go.mod b/go.mod
index da4ff74d507..7b4c824bbd0 100644
--- a/go.mod
+++ b/go.mod
@@ -100,7 +100,7 @@ require (
golang.org/x/tools v0.16.0
gonum.org/v1/gonum v0.14.0
google.golang.org/grpc v1.59.0
- google.golang.org/protobuf v1.31.0
+ google.golang.org/protobuf v1.32.0
gopkg.in/guregu/null.v2 v2.1.2
gopkg.in/guregu/null.v4 v4.0.0
gopkg.in/natefinch/lumberjack.v2 v2.2.1
diff --git a/go.sum b/go.sum
index 5e077598e3b..2dacaa51c1c 100644
--- a/go.sum
+++ b/go.sum
@@ -1889,8 +1889,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I=
+google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=